@atlaskit/editor-plugin-block-controls 3.1.5 → 3.1.6
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/pm-plugins/main.js +1 -1
- package/dist/cjs/ui/drag-handle.js +2 -2
- package/dist/cjs/ui/global-styles.js +13 -1
- package/dist/cjs/ui/quick-insert-button.js +33 -11
- package/dist/es2019/pm-plugins/main.js +1 -1
- package/dist/es2019/ui/drag-handle.js +2 -2
- package/dist/es2019/ui/global-styles.js +13 -1
- package/dist/es2019/ui/quick-insert-button.js +35 -12
- package/dist/esm/pm-plugins/main.js +1 -1
- package/dist/esm/ui/drag-handle.js +2 -2
- package/dist/esm/ui/global-styles.js +13 -1
- package/dist/esm/ui/quick-insert-button.js +33 -11
- package/package.json +4 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-block-controls
|
|
2
2
|
|
|
3
|
+
## 3.1.6
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#120473](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/120473)
|
|
8
|
+
[`6d0a06b4b6689`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/6d0a06b4b6689) -
|
|
9
|
+
Put DnD shift-select behind FG
|
|
10
|
+
- [#119967](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/119967)
|
|
11
|
+
[`9c072f388dcaa`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/9c072f388dcaa) -
|
|
12
|
+
Add check for selection before triggering quick insert, and move selection if not within target
|
|
13
|
+
node
|
|
14
|
+
|
|
3
15
|
## 3.1.5
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -650,7 +650,7 @@ var createPlugin = exports.createPlugin = function createPlugin(api, getIntl, no
|
|
|
650
650
|
return true;
|
|
651
651
|
}
|
|
652
652
|
}
|
|
653
|
-
if (!event.repeat && event.shiftKey) {
|
|
653
|
+
if (!event.repeat && event.shiftKey && (0, _platformFeatureFlags.fg)('platform_editor_elements_dnd_shift_click_select')) {
|
|
654
654
|
view.dispatch(view.state.tr.setMeta(key, _objectSpread(_objectSpread({}, view.state.tr.getMeta(key)), {}, {
|
|
655
655
|
isShiftDown: true
|
|
656
656
|
})));
|
|
@@ -199,7 +199,7 @@ var DragHandle = exports.DragHandle = function DragHandle(_ref) {
|
|
|
199
199
|
});
|
|
200
200
|
e.stopPropagation();
|
|
201
201
|
}
|
|
202
|
-
} else if (isTopLevelNode && $anchor.depth <= _consts.DRAG_HANDLE_MAX_SHIFT_CLICK_DEPTH && e.shiftKey) {
|
|
202
|
+
} else if (isTopLevelNode && $anchor.depth <= _consts.DRAG_HANDLE_MAX_SHIFT_CLICK_DEPTH && e.shiftKey && (0, _platformFeatureFlags.fg)('platform_editor_elements_dnd_shift_click_select')) {
|
|
203
203
|
var _api$blockControls2;
|
|
204
204
|
var alignAnchorHeadToSel = (0, _selection.alignAnchorHeadInDirectionOfPos)(tr.selection, startPos);
|
|
205
205
|
var selectionWithExpandedHead = (0, _selection.expandSelectionHeadToNodeAtPos)(alignAnchorHeadToSel, startPos);
|
|
@@ -529,7 +529,7 @@ var DragHandle = exports.DragHandle = function DragHandle(_ref) {
|
|
|
529
529
|
setDragHandleSelected((0, _getSelection.isHandleCorrelatedToSelection)(view.state, selection, start));
|
|
530
530
|
}, [start, selection, view.state, isMultiSelect]);
|
|
531
531
|
(0, _react.useEffect)(function () {
|
|
532
|
-
if (!isMultiSelect || isShiftDown === undefined || view.state.selection.empty) {
|
|
532
|
+
if (!isMultiSelect || isShiftDown === undefined || view.state.selection.empty || !(0, _platformFeatureFlags.fg)('platform_editor_elements_dnd_shift_click_select')) {
|
|
533
533
|
return;
|
|
534
534
|
}
|
|
535
535
|
var $anchor = (multiSelectDnD === null || multiSelectDnD === void 0 ? void 0 : multiSelectDnD.anchor) !== undefined ? view.state.doc.resolve(multiSelectDnD === null || multiSelectDnD === void 0 ? void 0 : multiSelectDnD.anchor) : view.state.selection.$anchor;
|
|
@@ -155,6 +155,18 @@ var topLevelNodeMarginStyles = (0, _react.css)({
|
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
157
|
});
|
|
158
|
+
|
|
159
|
+
// when quick insert is rendered there are 2 widgets before the first block node
|
|
160
|
+
var topLevelNodeMarginWithQuickInsertStyles = (0, _react.css)({
|
|
161
|
+
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors -- Ignored via go/DSP-18766
|
|
162
|
+
'.ProseMirror': {
|
|
163
|
+
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
|
|
164
|
+
'> .ProseMirror-widget:nth-child(-n + 2) + .ProseMirror-gapcursor + *:not([data-layout-section="true"]), > .ProseMirror-widget:nth-child(-n + 2) + *:not([data-layout-section="true"])': {
|
|
165
|
+
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-important-styles -- Ignored via go/DSP-18766
|
|
166
|
+
marginTop: '0 !important'
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
});
|
|
158
170
|
var withDividerInPanelStyleFix = (0, _react.css)((0, _defineProperty2.default)({}, "".concat(dividerBodiedInCustomPanelWithNoIconSelector), {
|
|
159
171
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-important-styles
|
|
160
172
|
marginTop: '0 !important'
|
|
@@ -216,6 +228,6 @@ var blockCardWithoutLayout = (0, _react.css)({
|
|
|
216
228
|
});
|
|
217
229
|
var GlobalStylesWrapper = exports.GlobalStylesWrapper = function GlobalStylesWrapper() {
|
|
218
230
|
return (0, _react.jsx)(_react.Global, {
|
|
219
|
-
styles: [globalStyles(), (0, _platformFeatureFlags.fg)('platform_editor_advanced_layouts_post_fix_patch_1') && globalDnDStyle, (0, _experiments.editorExperiment)('nested-dnd', true) ? extendedHoverZoneNested() : extendedHoverZone(), withInlineNodeStyle, withDeleteLinesStyleFix, withMediaSingleStyleFix, legacyBreakoutWideLayoutStyle, headingWithIndentationInLayoutStyleFix, (0, _experiments.editorExperiment)('advanced_layouts', true) ? blockCardWithoutLayout : undefined, withDividerInPanelStyleFix, withFormatInLayoutStyleFix, withRelativePosStyle, topLevelNodeMarginStyles, (0, _experiments.editorExperiment)('nested-dnd', true) ? withAnchorNameZindexNestedStyle : withAnchorNameZindexStyle,,]
|
|
231
|
+
styles: [globalStyles(), (0, _platformFeatureFlags.fg)('platform_editor_advanced_layouts_post_fix_patch_1') && globalDnDStyle, (0, _experiments.editorExperiment)('nested-dnd', true) ? extendedHoverZoneNested() : extendedHoverZone(), withInlineNodeStyle, withDeleteLinesStyleFix, withMediaSingleStyleFix, legacyBreakoutWideLayoutStyle, headingWithIndentationInLayoutStyleFix, (0, _experiments.editorExperiment)('advanced_layouts', true) ? blockCardWithoutLayout : undefined, withDividerInPanelStyleFix, withFormatInLayoutStyleFix, withRelativePosStyle, (0, _experiments.editorExperiment)('platform_editor_controls', 'variant1') ? topLevelNodeMarginWithQuickInsertStyles : topLevelNodeMarginStyles, (0, _experiments.editorExperiment)('nested-dnd', true) ? withAnchorNameZindexNestedStyle : withAnchorNameZindexStyle,,]
|
|
220
232
|
});
|
|
221
233
|
};
|
|
@@ -30,7 +30,7 @@ var buttonStyles = (0, _primitives.xcss)({
|
|
|
30
30
|
height: "var(--ds-space-300, 24px)",
|
|
31
31
|
width: "var(--ds-space-300, 24px)",
|
|
32
32
|
border: 'none',
|
|
33
|
-
backgroundColor: 'color.background.neutral',
|
|
33
|
+
backgroundColor: 'color.background.neutral.subtle',
|
|
34
34
|
borderRadius: '50%',
|
|
35
35
|
color: 'color.text.accent.gray',
|
|
36
36
|
zIndex: 'card',
|
|
@@ -52,6 +52,18 @@ var containerStaticStyles = (0, _primitives.xcss)({
|
|
|
52
52
|
|
|
53
53
|
// TODO: Share prop types between DragHandle - generic enough to create a type for block control decoration
|
|
54
54
|
|
|
55
|
+
var isSelectionInNode = function isSelectionInNode(start, view) {
|
|
56
|
+
var node = view.state.doc.nodeAt(start);
|
|
57
|
+
if (node === null) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
var endPos = start + node.nodeSize;
|
|
61
|
+
var startPos = start;
|
|
62
|
+
var _view$state$selection = view.state.selection,
|
|
63
|
+
$from = _view$state$selection.$from,
|
|
64
|
+
$to = _view$state$selection.$to;
|
|
65
|
+
return $from.pos >= startPos && endPos >= $to.pos;
|
|
66
|
+
};
|
|
55
67
|
var TypeAheadControl = exports.TypeAheadControl = function TypeAheadControl(_ref) {
|
|
56
68
|
var view = _ref.view,
|
|
57
69
|
api = _ref.api,
|
|
@@ -62,7 +74,9 @@ var TypeAheadControl = exports.TypeAheadControl = function TypeAheadControl(_ref
|
|
|
62
74
|
rootAnchorName = _ref.rootAnchorName,
|
|
63
75
|
rootNodeType = _ref.rootNodeType;
|
|
64
76
|
var macroInteractionUpdates = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'featureFlags.macroInteractionUpdates');
|
|
65
|
-
var _useState = (0, _react.useState)({
|
|
77
|
+
var _useState = (0, _react.useState)({
|
|
78
|
+
display: 'none'
|
|
79
|
+
}),
|
|
66
80
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
67
81
|
positionStyles = _useState2[0],
|
|
68
82
|
setPositionStyles = _useState2[1];
|
|
@@ -145,15 +159,23 @@ var TypeAheadControl = exports.TypeAheadControl = function TypeAheadControl(_ref
|
|
|
145
159
|
"aria-label": formatMessage(_messages.blockControlsMessages.insert),
|
|
146
160
|
xcss: [buttonStyles],
|
|
147
161
|
onClick: function onClick() {
|
|
148
|
-
var _api$
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
162
|
+
var _api$quickInsert;
|
|
163
|
+
// if the selection is not within the node this decoration is rendered at
|
|
164
|
+
// then insert a newline and trigger quick insert
|
|
165
|
+
var start = getPos();
|
|
166
|
+
if (start !== undefined && !isSelectionInNode(start, view)) {
|
|
167
|
+
api.core.actions.execute(function (_ref2) {
|
|
168
|
+
var _tr$doc$nodeAt;
|
|
169
|
+
var tr = _ref2.tr;
|
|
170
|
+
var nodeSize = (_tr$doc$nodeAt = tr.doc.nodeAt(start)) === null || _tr$doc$nodeAt === void 0 ? void 0 : _tr$doc$nodeAt.nodeSize;
|
|
171
|
+
if (nodeSize === undefined) {
|
|
172
|
+
return tr;
|
|
173
|
+
}
|
|
174
|
+
var position = start + nodeSize;
|
|
175
|
+
tr.insert(position, tr.doc.type.schema.nodes.paragraph.create());
|
|
176
|
+
return tr.setSelection(_state.TextSelection.create(tr.doc, position));
|
|
177
|
+
});
|
|
178
|
+
}
|
|
157
179
|
api === null || api === void 0 || (_api$quickInsert = api.quickInsert) === null || _api$quickInsert === void 0 || _api$quickInsert.actions.openTypeAhead('blockControl');
|
|
158
180
|
}
|
|
159
181
|
}, /*#__PURE__*/_react.default.createElement(_add.default, {
|
|
@@ -639,7 +639,7 @@ export const createPlugin = (api, getIntl, nodeViewPortalProviderAPI) => {
|
|
|
639
639
|
return true;
|
|
640
640
|
}
|
|
641
641
|
}
|
|
642
|
-
if (!event.repeat && event.shiftKey) {
|
|
642
|
+
if (!event.repeat && event.shiftKey && fg('platform_editor_elements_dnd_shift_click_select')) {
|
|
643
643
|
view.dispatch(view.state.tr.setMeta(key, {
|
|
644
644
|
...view.state.tr.getMeta(key),
|
|
645
645
|
isShiftDown: true
|
|
@@ -180,7 +180,7 @@ export const DragHandle = ({
|
|
|
180
180
|
});
|
|
181
181
|
e.stopPropagation();
|
|
182
182
|
}
|
|
183
|
-
} else if (isTopLevelNode && $anchor.depth <= DRAG_HANDLE_MAX_SHIFT_CLICK_DEPTH && e.shiftKey) {
|
|
183
|
+
} else if (isTopLevelNode && $anchor.depth <= DRAG_HANDLE_MAX_SHIFT_CLICK_DEPTH && e.shiftKey && fg('platform_editor_elements_dnd_shift_click_select')) {
|
|
184
184
|
var _api$blockControls2;
|
|
185
185
|
const alignAnchorHeadToSel = alignAnchorHeadInDirectionOfPos(tr.selection, startPos);
|
|
186
186
|
const selectionWithExpandedHead = expandSelectionHeadToNodeAtPos(alignAnchorHeadToSel, startPos);
|
|
@@ -513,7 +513,7 @@ export const DragHandle = ({
|
|
|
513
513
|
setDragHandleSelected(isHandleCorrelatedToSelection(view.state, selection, start));
|
|
514
514
|
}, [start, selection, view.state, isMultiSelect]);
|
|
515
515
|
useEffect(() => {
|
|
516
|
-
if (!isMultiSelect || isShiftDown === undefined || view.state.selection.empty) {
|
|
516
|
+
if (!isMultiSelect || isShiftDown === undefined || view.state.selection.empty || !fg('platform_editor_elements_dnd_shift_click_select')) {
|
|
517
517
|
return;
|
|
518
518
|
}
|
|
519
519
|
const $anchor = (multiSelectDnD === null || multiSelectDnD === void 0 ? void 0 : multiSelectDnD.anchor) !== undefined ? view.state.doc.resolve(multiSelectDnD === null || multiSelectDnD === void 0 ? void 0 : multiSelectDnD.anchor) : view.state.selection.$anchor;
|
|
@@ -178,6 +178,18 @@ const topLevelNodeMarginStyles = css({
|
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
180
|
});
|
|
181
|
+
|
|
182
|
+
// when quick insert is rendered there are 2 widgets before the first block node
|
|
183
|
+
const topLevelNodeMarginWithQuickInsertStyles = css({
|
|
184
|
+
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors -- Ignored via go/DSP-18766
|
|
185
|
+
'.ProseMirror': {
|
|
186
|
+
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
|
|
187
|
+
'> .ProseMirror-widget:nth-child(-n + 2) + .ProseMirror-gapcursor + *:not([data-layout-section="true"]), > .ProseMirror-widget:nth-child(-n + 2) + *:not([data-layout-section="true"])': {
|
|
188
|
+
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-important-styles -- Ignored via go/DSP-18766
|
|
189
|
+
marginTop: '0 !important'
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
});
|
|
181
193
|
const withDividerInPanelStyleFix = css({
|
|
182
194
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-values
|
|
183
195
|
[`${dividerBodiedInCustomPanelWithNoIconSelector}`]: {
|
|
@@ -260,6 +272,6 @@ const blockCardWithoutLayout = css({
|
|
|
260
272
|
});
|
|
261
273
|
export const GlobalStylesWrapper = () => {
|
|
262
274
|
return jsx(Global, {
|
|
263
|
-
styles: [globalStyles(), fg('platform_editor_advanced_layouts_post_fix_patch_1') && globalDnDStyle, editorExperiment('nested-dnd', true) ? extendedHoverZoneNested() : extendedHoverZone(), withInlineNodeStyle, withDeleteLinesStyleFix, withMediaSingleStyleFix, legacyBreakoutWideLayoutStyle, headingWithIndentationInLayoutStyleFix, editorExperiment('advanced_layouts', true) ? blockCardWithoutLayout : undefined, withDividerInPanelStyleFix, withFormatInLayoutStyleFix, withRelativePosStyle, topLevelNodeMarginStyles, editorExperiment('nested-dnd', true) ? withAnchorNameZindexNestedStyle : withAnchorNameZindexStyle,,]
|
|
275
|
+
styles: [globalStyles(), fg('platform_editor_advanced_layouts_post_fix_patch_1') && globalDnDStyle, editorExperiment('nested-dnd', true) ? extendedHoverZoneNested() : extendedHoverZone(), withInlineNodeStyle, withDeleteLinesStyleFix, withMediaSingleStyleFix, legacyBreakoutWideLayoutStyle, headingWithIndentationInLayoutStyleFix, editorExperiment('advanced_layouts', true) ? blockCardWithoutLayout : undefined, withDividerInPanelStyleFix, withFormatInLayoutStyleFix, withRelativePosStyle, editorExperiment('platform_editor_controls', 'variant1') ? topLevelNodeMarginWithQuickInsertStyles : topLevelNodeMarginStyles, editorExperiment('nested-dnd', true) ? withAnchorNameZindexNestedStyle : withAnchorNameZindexStyle,,]
|
|
264
276
|
});
|
|
265
277
|
};
|
|
@@ -19,7 +19,7 @@ const buttonStyles = xcss({
|
|
|
19
19
|
height: "var(--ds-space-300, 24px)",
|
|
20
20
|
width: "var(--ds-space-300, 24px)",
|
|
21
21
|
border: 'none',
|
|
22
|
-
backgroundColor: 'color.background.neutral',
|
|
22
|
+
backgroundColor: 'color.background.neutral.subtle',
|
|
23
23
|
borderRadius: '50%',
|
|
24
24
|
color: 'color.text.accent.gray',
|
|
25
25
|
zIndex: 'card',
|
|
@@ -41,6 +41,19 @@ const containerStaticStyles = xcss({
|
|
|
41
41
|
|
|
42
42
|
// TODO: Share prop types between DragHandle - generic enough to create a type for block control decoration
|
|
43
43
|
|
|
44
|
+
const isSelectionInNode = (start, view) => {
|
|
45
|
+
const node = view.state.doc.nodeAt(start);
|
|
46
|
+
if (node === null) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
const endPos = start + node.nodeSize;
|
|
50
|
+
const startPos = start;
|
|
51
|
+
const {
|
|
52
|
+
$from,
|
|
53
|
+
$to
|
|
54
|
+
} = view.state.selection;
|
|
55
|
+
return $from.pos >= startPos && endPos >= $to.pos;
|
|
56
|
+
};
|
|
44
57
|
export const TypeAheadControl = ({
|
|
45
58
|
view,
|
|
46
59
|
api,
|
|
@@ -52,7 +65,9 @@ export const TypeAheadControl = ({
|
|
|
52
65
|
rootNodeType
|
|
53
66
|
}) => {
|
|
54
67
|
const macroInteractionUpdates = useSharedPluginStateSelector(api, 'featureFlags.macroInteractionUpdates');
|
|
55
|
-
const [positionStyles, setPositionStyles] = useState({
|
|
68
|
+
const [positionStyles, setPositionStyles] = useState({
|
|
69
|
+
display: 'none'
|
|
70
|
+
});
|
|
56
71
|
|
|
57
72
|
// Adapted from `src/ui/drag-handle.tsx` as positioning logic is similar
|
|
58
73
|
// CHANGES - added an offset so quick insert button can be positioned beside drag handle
|
|
@@ -132,16 +147,24 @@ export const TypeAheadControl = ({
|
|
|
132
147
|
"aria-label": formatMessage(messages.insert),
|
|
133
148
|
xcss: [buttonStyles],
|
|
134
149
|
onClick: () => {
|
|
135
|
-
var _api$
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
|
|
150
|
+
var _api$quickInsert;
|
|
151
|
+
// if the selection is not within the node this decoration is rendered at
|
|
152
|
+
// then insert a newline and trigger quick insert
|
|
153
|
+
const start = getPos();
|
|
154
|
+
if (start !== undefined && !isSelectionInNode(start, view)) {
|
|
155
|
+
api.core.actions.execute(({
|
|
156
|
+
tr
|
|
157
|
+
}) => {
|
|
158
|
+
var _tr$doc$nodeAt;
|
|
159
|
+
const nodeSize = (_tr$doc$nodeAt = tr.doc.nodeAt(start)) === null || _tr$doc$nodeAt === void 0 ? void 0 : _tr$doc$nodeAt.nodeSize;
|
|
160
|
+
if (nodeSize === undefined) {
|
|
161
|
+
return tr;
|
|
162
|
+
}
|
|
163
|
+
const position = start + nodeSize;
|
|
164
|
+
tr.insert(position, tr.doc.type.schema.nodes.paragraph.create());
|
|
165
|
+
return tr.setSelection(TextSelection.create(tr.doc, position));
|
|
166
|
+
});
|
|
167
|
+
}
|
|
145
168
|
api === null || api === void 0 ? void 0 : (_api$quickInsert = api.quickInsert) === null || _api$quickInsert === void 0 ? void 0 : _api$quickInsert.actions.openTypeAhead('blockControl');
|
|
146
169
|
}
|
|
147
170
|
}, /*#__PURE__*/React.createElement(EditorAddIcon, {
|
|
@@ -643,7 +643,7 @@ export var createPlugin = function createPlugin(api, getIntl, nodeViewPortalProv
|
|
|
643
643
|
return true;
|
|
644
644
|
}
|
|
645
645
|
}
|
|
646
|
-
if (!event.repeat && event.shiftKey) {
|
|
646
|
+
if (!event.repeat && event.shiftKey && fg('platform_editor_elements_dnd_shift_click_select')) {
|
|
647
647
|
view.dispatch(view.state.tr.setMeta(key, _objectSpread(_objectSpread({}, view.state.tr.getMeta(key)), {}, {
|
|
648
648
|
isShiftDown: true
|
|
649
649
|
})));
|
|
@@ -194,7 +194,7 @@ export var DragHandle = function DragHandle(_ref) {
|
|
|
194
194
|
});
|
|
195
195
|
e.stopPropagation();
|
|
196
196
|
}
|
|
197
|
-
} else if (isTopLevelNode && $anchor.depth <= DRAG_HANDLE_MAX_SHIFT_CLICK_DEPTH && e.shiftKey) {
|
|
197
|
+
} else if (isTopLevelNode && $anchor.depth <= DRAG_HANDLE_MAX_SHIFT_CLICK_DEPTH && e.shiftKey && fg('platform_editor_elements_dnd_shift_click_select')) {
|
|
198
198
|
var _api$blockControls2;
|
|
199
199
|
var alignAnchorHeadToSel = alignAnchorHeadInDirectionOfPos(tr.selection, startPos);
|
|
200
200
|
var selectionWithExpandedHead = expandSelectionHeadToNodeAtPos(alignAnchorHeadToSel, startPos);
|
|
@@ -524,7 +524,7 @@ export var DragHandle = function DragHandle(_ref) {
|
|
|
524
524
|
setDragHandleSelected(isHandleCorrelatedToSelection(view.state, selection, start));
|
|
525
525
|
}, [start, selection, view.state, isMultiSelect]);
|
|
526
526
|
useEffect(function () {
|
|
527
|
-
if (!isMultiSelect || isShiftDown === undefined || view.state.selection.empty) {
|
|
527
|
+
if (!isMultiSelect || isShiftDown === undefined || view.state.selection.empty || !fg('platform_editor_elements_dnd_shift_click_select')) {
|
|
528
528
|
return;
|
|
529
529
|
}
|
|
530
530
|
var $anchor = (multiSelectDnD === null || multiSelectDnD === void 0 ? void 0 : multiSelectDnD.anchor) !== undefined ? view.state.doc.resolve(multiSelectDnD === null || multiSelectDnD === void 0 ? void 0 : multiSelectDnD.anchor) : view.state.selection.$anchor;
|
|
@@ -148,6 +148,18 @@ var topLevelNodeMarginStyles = css({
|
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
});
|
|
151
|
+
|
|
152
|
+
// when quick insert is rendered there are 2 widgets before the first block node
|
|
153
|
+
var topLevelNodeMarginWithQuickInsertStyles = css({
|
|
154
|
+
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors -- Ignored via go/DSP-18766
|
|
155
|
+
'.ProseMirror': {
|
|
156
|
+
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
|
|
157
|
+
'> .ProseMirror-widget:nth-child(-n + 2) + .ProseMirror-gapcursor + *:not([data-layout-section="true"]), > .ProseMirror-widget:nth-child(-n + 2) + *:not([data-layout-section="true"])': {
|
|
158
|
+
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-important-styles -- Ignored via go/DSP-18766
|
|
159
|
+
marginTop: '0 !important'
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
});
|
|
151
163
|
var withDividerInPanelStyleFix = css(_defineProperty({}, "".concat(dividerBodiedInCustomPanelWithNoIconSelector), {
|
|
152
164
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-important-styles
|
|
153
165
|
marginTop: '0 !important'
|
|
@@ -209,6 +221,6 @@ var blockCardWithoutLayout = css({
|
|
|
209
221
|
});
|
|
210
222
|
export var GlobalStylesWrapper = function GlobalStylesWrapper() {
|
|
211
223
|
return jsx(Global, {
|
|
212
|
-
styles: [globalStyles(), fg('platform_editor_advanced_layouts_post_fix_patch_1') && globalDnDStyle, editorExperiment('nested-dnd', true) ? extendedHoverZoneNested() : extendedHoverZone(), withInlineNodeStyle, withDeleteLinesStyleFix, withMediaSingleStyleFix, legacyBreakoutWideLayoutStyle, headingWithIndentationInLayoutStyleFix, editorExperiment('advanced_layouts', true) ? blockCardWithoutLayout : undefined, withDividerInPanelStyleFix, withFormatInLayoutStyleFix, withRelativePosStyle, topLevelNodeMarginStyles, editorExperiment('nested-dnd', true) ? withAnchorNameZindexNestedStyle : withAnchorNameZindexStyle,,]
|
|
224
|
+
styles: [globalStyles(), fg('platform_editor_advanced_layouts_post_fix_patch_1') && globalDnDStyle, editorExperiment('nested-dnd', true) ? extendedHoverZoneNested() : extendedHoverZone(), withInlineNodeStyle, withDeleteLinesStyleFix, withMediaSingleStyleFix, legacyBreakoutWideLayoutStyle, headingWithIndentationInLayoutStyleFix, editorExperiment('advanced_layouts', true) ? blockCardWithoutLayout : undefined, withDividerInPanelStyleFix, withFormatInLayoutStyleFix, withRelativePosStyle, editorExperiment('platform_editor_controls', 'variant1') ? topLevelNodeMarginWithQuickInsertStyles : topLevelNodeMarginStyles, editorExperiment('nested-dnd', true) ? withAnchorNameZindexNestedStyle : withAnchorNameZindexStyle,,]
|
|
213
225
|
});
|
|
214
226
|
};
|
|
@@ -20,7 +20,7 @@ var buttonStyles = xcss({
|
|
|
20
20
|
height: "var(--ds-space-300, 24px)",
|
|
21
21
|
width: "var(--ds-space-300, 24px)",
|
|
22
22
|
border: 'none',
|
|
23
|
-
backgroundColor: 'color.background.neutral',
|
|
23
|
+
backgroundColor: 'color.background.neutral.subtle',
|
|
24
24
|
borderRadius: '50%',
|
|
25
25
|
color: 'color.text.accent.gray',
|
|
26
26
|
zIndex: 'card',
|
|
@@ -42,6 +42,18 @@ var containerStaticStyles = xcss({
|
|
|
42
42
|
|
|
43
43
|
// TODO: Share prop types between DragHandle - generic enough to create a type for block control decoration
|
|
44
44
|
|
|
45
|
+
var isSelectionInNode = function isSelectionInNode(start, view) {
|
|
46
|
+
var node = view.state.doc.nodeAt(start);
|
|
47
|
+
if (node === null) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
var endPos = start + node.nodeSize;
|
|
51
|
+
var startPos = start;
|
|
52
|
+
var _view$state$selection = view.state.selection,
|
|
53
|
+
$from = _view$state$selection.$from,
|
|
54
|
+
$to = _view$state$selection.$to;
|
|
55
|
+
return $from.pos >= startPos && endPos >= $to.pos;
|
|
56
|
+
};
|
|
45
57
|
export var TypeAheadControl = function TypeAheadControl(_ref) {
|
|
46
58
|
var view = _ref.view,
|
|
47
59
|
api = _ref.api,
|
|
@@ -52,7 +64,9 @@ export var TypeAheadControl = function TypeAheadControl(_ref) {
|
|
|
52
64
|
rootAnchorName = _ref.rootAnchorName,
|
|
53
65
|
rootNodeType = _ref.rootNodeType;
|
|
54
66
|
var macroInteractionUpdates = useSharedPluginStateSelector(api, 'featureFlags.macroInteractionUpdates');
|
|
55
|
-
var _useState = useState({
|
|
67
|
+
var _useState = useState({
|
|
68
|
+
display: 'none'
|
|
69
|
+
}),
|
|
56
70
|
_useState2 = _slicedToArray(_useState, 2),
|
|
57
71
|
positionStyles = _useState2[0],
|
|
58
72
|
setPositionStyles = _useState2[1];
|
|
@@ -135,15 +149,23 @@ export var TypeAheadControl = function TypeAheadControl(_ref) {
|
|
|
135
149
|
"aria-label": formatMessage(messages.insert),
|
|
136
150
|
xcss: [buttonStyles],
|
|
137
151
|
onClick: function onClick() {
|
|
138
|
-
var _api$
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
152
|
+
var _api$quickInsert;
|
|
153
|
+
// if the selection is not within the node this decoration is rendered at
|
|
154
|
+
// then insert a newline and trigger quick insert
|
|
155
|
+
var start = getPos();
|
|
156
|
+
if (start !== undefined && !isSelectionInNode(start, view)) {
|
|
157
|
+
api.core.actions.execute(function (_ref2) {
|
|
158
|
+
var _tr$doc$nodeAt;
|
|
159
|
+
var tr = _ref2.tr;
|
|
160
|
+
var nodeSize = (_tr$doc$nodeAt = tr.doc.nodeAt(start)) === null || _tr$doc$nodeAt === void 0 ? void 0 : _tr$doc$nodeAt.nodeSize;
|
|
161
|
+
if (nodeSize === undefined) {
|
|
162
|
+
return tr;
|
|
163
|
+
}
|
|
164
|
+
var position = start + nodeSize;
|
|
165
|
+
tr.insert(position, tr.doc.type.schema.nodes.paragraph.create());
|
|
166
|
+
return tr.setSelection(TextSelection.create(tr.doc, position));
|
|
167
|
+
});
|
|
168
|
+
}
|
|
147
169
|
api === null || api === void 0 || (_api$quickInsert = api.quickInsert) === null || _api$quickInsert === void 0 || _api$quickInsert.actions.openTypeAhead('blockControl');
|
|
148
170
|
}
|
|
149
171
|
}, /*#__PURE__*/React.createElement(EditorAddIcon, {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/editor-plugin-block-controls",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.6",
|
|
4
4
|
"description": "Block controls plugin for @atlaskit/editor-core",
|
|
5
5
|
"author": "Atlassian Pty Ltd",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -151,6 +151,9 @@
|
|
|
151
151
|
},
|
|
152
152
|
"platform_editor_disable_drag_handle_nested_tables": {
|
|
153
153
|
"type": "boolean"
|
|
154
|
+
},
|
|
155
|
+
"platform_editor_elements_dnd_shift_click_select": {
|
|
156
|
+
"type": "boolean"
|
|
154
157
|
}
|
|
155
158
|
}
|
|
156
159
|
}
|