@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 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$core, _api$quickInsert;
149
- api === null || api === void 0 || (_api$core = api.core) === null || _api$core === void 0 || _api$core.actions.execute(function (_ref2) {
150
- var tr = _ref2.tr;
151
- var start = getPos();
152
- if (!start) {
153
- return null;
154
- }
155
- return tr.setSelection(_state.TextSelection.create(tr.doc, start));
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$core, _api$quickInsert;
136
- api === null || api === void 0 ? void 0 : (_api$core = api.core) === null || _api$core === void 0 ? void 0 : _api$core.actions.execute(({
137
- tr
138
- }) => {
139
- const start = getPos();
140
- if (!start) {
141
- return null;
142
- }
143
- return tr.setSelection(TextSelection.create(tr.doc, start));
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$core, _api$quickInsert;
139
- api === null || api === void 0 || (_api$core = api.core) === null || _api$core === void 0 || _api$core.actions.execute(function (_ref2) {
140
- var tr = _ref2.tr;
141
- var start = getPos();
142
- if (!start) {
143
- return null;
144
- }
145
- return tr.setSelection(TextSelection.create(tr.doc, start));
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.5",
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
  }