@atlaskit/editor-plugin-block-controls 11.2.15 → 11.2.17

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,25 @@
1
1
  # @atlaskit/editor-plugin-block-controls
2
2
 
3
+ ## 11.2.17
4
+
5
+ ### Patch Changes
6
+
7
+ - [`2023cac0fd36f`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/2023cac0fd36f) -
8
+ Add column drag handle context menu placeholder, gated behind the
9
+ platform_editor_layout_column_menu experiment flag.
10
+ - Updated dependencies
11
+
12
+ ## 11.2.16
13
+
14
+ ### Patch Changes
15
+
16
+ - [`38fb4916b9085`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/38fb4916b9085) -
17
+ Add `@atlaskit/editor-common/node-selection` entry-point with platform-level node selection
18
+ utilities. Under `platform_editor_maui_jira_updates`, `open-remix-modal` and
19
+ `editor-plugin-block-controls` delegate to these utilities, fixing remix selection in environments
20
+ where `blockControls` is not present.
21
+ - Updated dependencies
22
+
3
23
  ## 11.2.15
4
24
 
5
25
  ### Patch Changes
@@ -4,9 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.expandAndUpdateSelection = void 0;
7
+ var _nodeSelection = require("@atlaskit/editor-common/node-selection");
7
8
  var _selection = require("@atlaskit/editor-common/selection");
9
+ var _toolbarFlagCheck = require("@atlaskit/editor-common/toolbar-flag-check");
8
10
  var _state = require("@atlaskit/editor-prosemirror/state");
9
11
  var _utils = require("@atlaskit/editor-tables/utils");
12
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
13
+ var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
10
14
  var _getSelection = require("./getSelection");
11
15
  var _selection2 = require("./selection");
12
16
  var isPosWithinRange = function isPosWithinRange(pos, range) {
@@ -60,6 +64,12 @@ var expandAndUpdateSelection = exports.expandAndUpdateSelection = function expan
60
64
  if (expandedRange.range && isPosWithinRange(startPos, expandedRange.range) && (0, _selection.isMultiBlockRange)(expandedRange.range)) {
61
65
  // Then create a selection from the start of the first node to the end of the last node
62
66
  tr.setSelection(_state.TextSelection.create(tr.doc, Math.min(selection.from, expandedRange.$from.pos), Math.max(selection.to, expandedRange.$to.pos)));
67
+ } else if (
68
+ // eslint-disable-next-line @atlaskit/platform/no-preconditioning
69
+ (0, _platformFeatureFlags.fg)('platform_editor_maui_jira_updates') && ((0, _toolbarFlagCheck.areToolbarFlagsEnabled)(Boolean(api === null || api === void 0 ? void 0 : api.toolbar)) || (0, _experiments.editorExperiment)('platform_editor_block_menu', true))) {
70
+ // Under the gate (and when on the simplified newGetSelection path), use
71
+ // the platform-level composer — same path as open-remix-modal, no drift.
72
+ (0, _nodeSelection.selectNodeAtPos)(tr, startPos, nodeType);
63
73
  } else if (nodeType === 'table') {
64
74
  (0, _utils.selectTableClosestToPos)(tr, tr.doc.resolve(startPos + 1));
65
75
  } else {
@@ -4,11 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.setCursorPositionAtMovedNode = exports.selectNode = exports.rootTaskListDepth = exports.rootListDepth = exports.newGetSelection = exports.isNodeWithCodeBlock = exports.isHandleCorrelatedToSelection = exports.getSelection = exports.getInlineNodePos = void 0;
7
+ var _nodeSelection = require("@atlaskit/editor-common/node-selection");
7
8
  var _selection2 = require("@atlaskit/editor-common/selection");
8
9
  var _toolbarFlagCheck = require("@atlaskit/editor-common/toolbar-flag-check");
9
10
  var _state = require("@atlaskit/editor-prosemirror/state");
10
11
  var _utils = require("@atlaskit/editor-prosemirror/utils");
11
12
  var _utils2 = require("@atlaskit/editor-tables/utils");
13
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
12
14
  var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
13
15
  var getInlineNodePos = exports.getInlineNodePos = function getInlineNodePos(doc, start, nodeSize) {
14
16
  var $startPos = doc.resolve(start);
@@ -91,6 +93,16 @@ var oldGetSelection = function oldGetSelection(tr, start) {
91
93
  * @returns The appropriate selection for the node.
92
94
  */
93
95
  var newGetSelection = exports.newGetSelection = function newGetSelection(doc, selectionEmpty, start) {
96
+ // Under the gate, delegate to getNodeSelectionForPos only when
97
+ // platform_editor_block_menu is on — getNodeSelectionForPos matches that
98
+ // simplified path (NodeSelection for all nodes). When block_menu is off,
99
+ // fall through to the oldGetSelection branch which handles expand/taskList/
100
+ // inline nodes correctly with TextSelection.
101
+ if (
102
+ // eslint-disable-next-line @atlaskit/platform/no-preconditioning
103
+ (0, _platformFeatureFlags.fg)('platform_editor_maui_jira_updates') && (0, _experiments.editorExperiment)('platform_editor_block_menu', true)) {
104
+ return (0, _nodeSelection.getNodeSelectionForPos)(doc, start) || false;
105
+ }
94
106
  var node = doc.nodeAt(start);
95
107
  var isNodeSelection = node && _state.NodeSelection.isSelectable(node);
96
108
  var nodeSize = node ? node.nodeSize : 1;
@@ -136,7 +148,15 @@ var getSelection = exports.getSelection = function getSelection(tr, start, api)
136
148
  return oldGetSelection(tr, start);
137
149
  };
138
150
  var selectNode = exports.selectNode = function selectNode(tr, start, nodeType, api) {
139
- // For table, we need to do cell selection instead of node selection
151
+ // Only use the platform path when already on the simplified newGetSelection
152
+ // branch — i.e. when platform_editor_block_menu is on or toolbar flags are
153
+ // enabled. This preserves oldGetSelection behaviour (e.g. taskList →
154
+ // TextSelection) in legacy contexts where those flags are off.
155
+ if (
156
+ // eslint-disable-next-line @atlaskit/platform/no-preconditioning
157
+ (0, _platformFeatureFlags.fg)('platform_editor_maui_jira_updates') && (0, _experiments.editorExperiment)('platform_editor_block_menu', true)) {
158
+ return (0, _nodeSelection.selectNodeAtPos)(tr, start, nodeType);
159
+ }
140
160
  if (nodeType === 'table') {
141
161
  tr = (0, _utils2.selectTableClosestToPos)(tr, tr.doc.resolve(start + 1));
142
162
  return tr;
@@ -464,6 +464,9 @@ var DragHandle = exports.DragHandle = function DragHandle(_ref) {
464
464
  if (startPos === undefined) {
465
465
  return tr;
466
466
  }
467
+ if (nodeType === 'layoutColumn' && (0, _expValEquals.expValEquals)('platform_editor_layout_column_menu', 'isEnabled', true)) {
468
+ tr.setMeta('toggleLayoutColumnMenu', {});
469
+ }
467
470
  var resolvedStartPos = tr.doc.resolve(startPos);
468
471
  var selection = ((_selectionPreservatio = _pluginKey.selectionPreservationPluginKey.getState(view.state)) === null || _selectionPreservatio === void 0 ? void 0 : _selectionPreservatio.preservedSelection) || tr.selection;
469
472
  api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || _api$analytics.actions.attachAnalyticsEvent({
@@ -512,6 +515,9 @@ var DragHandle = exports.DragHandle = function DragHandle(_ref) {
512
515
  if (startPos === undefined) {
513
516
  return tr;
514
517
  }
518
+ if (nodeType === 'layoutColumn' && (0, _expValEquals.expValEquals)('platform_editor_layout_column_menu', 'isEnabled', true)) {
519
+ tr.setMeta('toggleLayoutColumnMenu', {});
520
+ }
515
521
  var mSelect = api === null || api === void 0 || (_api$blockControls$sh = api.blockControls.sharedState.currentState()) === null || _api$blockControls$sh === void 0 ? void 0 : _api$blockControls$sh.multiSelectDnD;
516
522
  var $anchor = (mSelect === null || mSelect === void 0 ? void 0 : mSelect.anchor) !== undefined ? tr.doc.resolve(mSelect === null || mSelect === void 0 ? void 0 : mSelect.anchor) : tr.selection.$anchor;
517
523
  if (tr.selection.empty || !e.shiftKey) {
@@ -1,6 +1,10 @@
1
+ import { selectNodeAtPos } from '@atlaskit/editor-common/node-selection';
1
2
  import { expandToBlockRange, isMultiBlockRange } from '@atlaskit/editor-common/selection';
3
+ import { areToolbarFlagsEnabled } from '@atlaskit/editor-common/toolbar-flag-check';
2
4
  import { TextSelection } from '@atlaskit/editor-prosemirror/state';
3
5
  import { selectTableClosestToPos } from '@atlaskit/editor-tables/utils';
6
+ import { fg } from '@atlaskit/platform-feature-flags';
7
+ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
4
8
  import { selectNode } from './getSelection';
5
9
  import { adjustSelectionBoundsForEdgePositions } from './selection';
6
10
  const isPosWithinRange = (pos, range) => {
@@ -56,6 +60,12 @@ export const expandAndUpdateSelection = ({
56
60
  if (expandedRange.range && isPosWithinRange(startPos, expandedRange.range) && isMultiBlockRange(expandedRange.range)) {
57
61
  // Then create a selection from the start of the first node to the end of the last node
58
62
  tr.setSelection(TextSelection.create(tr.doc, Math.min(selection.from, expandedRange.$from.pos), Math.max(selection.to, expandedRange.$to.pos)));
63
+ } else if (
64
+ // eslint-disable-next-line @atlaskit/platform/no-preconditioning
65
+ fg('platform_editor_maui_jira_updates') && (areToolbarFlagsEnabled(Boolean(api === null || api === void 0 ? void 0 : api.toolbar)) || editorExperiment('platform_editor_block_menu', true))) {
66
+ // Under the gate (and when on the simplified newGetSelection path), use
67
+ // the platform-level composer — same path as open-remix-modal, no drift.
68
+ selectNodeAtPos(tr, startPos, nodeType);
59
69
  } else if (nodeType === 'table') {
60
70
  selectTableClosestToPos(tr, tr.doc.resolve(startPos + 1));
61
71
  } else {
@@ -1,8 +1,10 @@
1
+ import { getNodeSelectionForPos, selectNodeAtPos } from '@atlaskit/editor-common/node-selection';
1
2
  import { GapCursorSelection, Side } from '@atlaskit/editor-common/selection';
2
3
  import { areToolbarFlagsEnabled } from '@atlaskit/editor-common/toolbar-flag-check';
3
4
  import { NodeSelection, TextSelection } from '@atlaskit/editor-prosemirror/state';
4
5
  import { findParentNodeOfType } from '@atlaskit/editor-prosemirror/utils';
5
6
  import { selectTableClosestToPos } from '@atlaskit/editor-tables/utils';
7
+ import { fg } from '@atlaskit/platform-feature-flags';
6
8
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
7
9
  export const getInlineNodePos = (doc, start, nodeSize) => {
8
10
  const $startPos = doc.resolve(start);
@@ -86,6 +88,16 @@ const oldGetSelection = (tr, start) => {
86
88
  * @returns The appropriate selection for the node.
87
89
  */
88
90
  export const newGetSelection = (doc, selectionEmpty, start) => {
91
+ // Under the gate, delegate to getNodeSelectionForPos only when
92
+ // platform_editor_block_menu is on — getNodeSelectionForPos matches that
93
+ // simplified path (NodeSelection for all nodes). When block_menu is off,
94
+ // fall through to the oldGetSelection branch which handles expand/taskList/
95
+ // inline nodes correctly with TextSelection.
96
+ if (
97
+ // eslint-disable-next-line @atlaskit/platform/no-preconditioning
98
+ fg('platform_editor_maui_jira_updates') && editorExperiment('platform_editor_block_menu', true)) {
99
+ return getNodeSelectionForPos(doc, start) || false;
100
+ }
89
101
  const node = doc.nodeAt(start);
90
102
  const isNodeSelection = node && NodeSelection.isSelectable(node);
91
103
  const nodeSize = node ? node.nodeSize : 1;
@@ -132,7 +144,15 @@ export const getSelection = (tr, start, api) => {
132
144
  return oldGetSelection(tr, start);
133
145
  };
134
146
  export const selectNode = (tr, start, nodeType, api) => {
135
- // For table, we need to do cell selection instead of node selection
147
+ // Only use the platform path when already on the simplified newGetSelection
148
+ // branch — i.e. when platform_editor_block_menu is on or toolbar flags are
149
+ // enabled. This preserves oldGetSelection behaviour (e.g. taskList →
150
+ // TextSelection) in legacy contexts where those flags are off.
151
+ if (
152
+ // eslint-disable-next-line @atlaskit/platform/no-preconditioning
153
+ fg('platform_editor_maui_jira_updates') && editorExperiment('platform_editor_block_menu', true)) {
154
+ return selectNodeAtPos(tr, start, nodeType);
155
+ }
136
156
  if (nodeType === 'table') {
137
157
  tr = selectTableClosestToPos(tr, tr.doc.resolve(start + 1));
138
158
  return tr;
@@ -439,6 +439,9 @@ export const DragHandle = ({
439
439
  if (startPos === undefined) {
440
440
  return tr;
441
441
  }
442
+ if (nodeType === 'layoutColumn' && expValEquals('platform_editor_layout_column_menu', 'isEnabled', true)) {
443
+ tr.setMeta('toggleLayoutColumnMenu', {});
444
+ }
442
445
  const resolvedStartPos = tr.doc.resolve(startPos);
443
446
  const selection = ((_selectionPreservatio = selectionPreservationPluginKey.getState(view.state)) === null || _selectionPreservatio === void 0 ? void 0 : _selectionPreservatio.preservedSelection) || tr.selection;
444
447
  api === null || api === void 0 ? void 0 : (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions.attachAnalyticsEvent({
@@ -488,6 +491,9 @@ export const DragHandle = ({
488
491
  if (startPos === undefined) {
489
492
  return tr;
490
493
  }
494
+ if (nodeType === 'layoutColumn' && expValEquals('platform_editor_layout_column_menu', 'isEnabled', true)) {
495
+ tr.setMeta('toggleLayoutColumnMenu', {});
496
+ }
491
497
  const mSelect = api === null || api === void 0 ? void 0 : (_api$blockControls$sh = api.blockControls.sharedState.currentState()) === null || _api$blockControls$sh === void 0 ? void 0 : _api$blockControls$sh.multiSelectDnD;
492
498
  const $anchor = (mSelect === null || mSelect === void 0 ? void 0 : mSelect.anchor) !== undefined ? tr.doc.resolve(mSelect === null || mSelect === void 0 ? void 0 : mSelect.anchor) : tr.selection.$anchor;
493
499
  if (tr.selection.empty || !e.shiftKey) {
@@ -1,6 +1,10 @@
1
+ import { selectNodeAtPos } from '@atlaskit/editor-common/node-selection';
1
2
  import { expandToBlockRange, isMultiBlockRange } from '@atlaskit/editor-common/selection';
3
+ import { areToolbarFlagsEnabled } from '@atlaskit/editor-common/toolbar-flag-check';
2
4
  import { TextSelection } from '@atlaskit/editor-prosemirror/state';
3
5
  import { selectTableClosestToPos } from '@atlaskit/editor-tables/utils';
6
+ import { fg } from '@atlaskit/platform-feature-flags';
7
+ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
4
8
  import { selectNode } from './getSelection';
5
9
  import { adjustSelectionBoundsForEdgePositions } from './selection';
6
10
  var isPosWithinRange = function isPosWithinRange(pos, range) {
@@ -54,6 +58,12 @@ export var expandAndUpdateSelection = function expandAndUpdateSelection(_ref2) {
54
58
  if (expandedRange.range && isPosWithinRange(startPos, expandedRange.range) && isMultiBlockRange(expandedRange.range)) {
55
59
  // Then create a selection from the start of the first node to the end of the last node
56
60
  tr.setSelection(TextSelection.create(tr.doc, Math.min(selection.from, expandedRange.$from.pos), Math.max(selection.to, expandedRange.$to.pos)));
61
+ } else if (
62
+ // eslint-disable-next-line @atlaskit/platform/no-preconditioning
63
+ fg('platform_editor_maui_jira_updates') && (areToolbarFlagsEnabled(Boolean(api === null || api === void 0 ? void 0 : api.toolbar)) || editorExperiment('platform_editor_block_menu', true))) {
64
+ // Under the gate (and when on the simplified newGetSelection path), use
65
+ // the platform-level composer — same path as open-remix-modal, no drift.
66
+ selectNodeAtPos(tr, startPos, nodeType);
57
67
  } else if (nodeType === 'table') {
58
68
  selectTableClosestToPos(tr, tr.doc.resolve(startPos + 1));
59
69
  } else {
@@ -1,8 +1,10 @@
1
+ import { getNodeSelectionForPos, selectNodeAtPos } from '@atlaskit/editor-common/node-selection';
1
2
  import { GapCursorSelection, Side } from '@atlaskit/editor-common/selection';
2
3
  import { areToolbarFlagsEnabled } from '@atlaskit/editor-common/toolbar-flag-check';
3
4
  import { NodeSelection, TextSelection } from '@atlaskit/editor-prosemirror/state';
4
5
  import { findParentNodeOfType } from '@atlaskit/editor-prosemirror/utils';
5
6
  import { selectTableClosestToPos } from '@atlaskit/editor-tables/utils';
7
+ import { fg } from '@atlaskit/platform-feature-flags';
6
8
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
7
9
  export var getInlineNodePos = function getInlineNodePos(doc, start, nodeSize) {
8
10
  var $startPos = doc.resolve(start);
@@ -85,6 +87,16 @@ var oldGetSelection = function oldGetSelection(tr, start) {
85
87
  * @returns The appropriate selection for the node.
86
88
  */
87
89
  export var newGetSelection = function newGetSelection(doc, selectionEmpty, start) {
90
+ // Under the gate, delegate to getNodeSelectionForPos only when
91
+ // platform_editor_block_menu is on — getNodeSelectionForPos matches that
92
+ // simplified path (NodeSelection for all nodes). When block_menu is off,
93
+ // fall through to the oldGetSelection branch which handles expand/taskList/
94
+ // inline nodes correctly with TextSelection.
95
+ if (
96
+ // eslint-disable-next-line @atlaskit/platform/no-preconditioning
97
+ fg('platform_editor_maui_jira_updates') && editorExperiment('platform_editor_block_menu', true)) {
98
+ return getNodeSelectionForPos(doc, start) || false;
99
+ }
88
100
  var node = doc.nodeAt(start);
89
101
  var isNodeSelection = node && NodeSelection.isSelectable(node);
90
102
  var nodeSize = node ? node.nodeSize : 1;
@@ -130,7 +142,15 @@ export var getSelection = function getSelection(tr, start, api) {
130
142
  return oldGetSelection(tr, start);
131
143
  };
132
144
  export var selectNode = function selectNode(tr, start, nodeType, api) {
133
- // For table, we need to do cell selection instead of node selection
145
+ // Only use the platform path when already on the simplified newGetSelection
146
+ // branch — i.e. when platform_editor_block_menu is on or toolbar flags are
147
+ // enabled. This preserves oldGetSelection behaviour (e.g. taskList →
148
+ // TextSelection) in legacy contexts where those flags are off.
149
+ if (
150
+ // eslint-disable-next-line @atlaskit/platform/no-preconditioning
151
+ fg('platform_editor_maui_jira_updates') && editorExperiment('platform_editor_block_menu', true)) {
152
+ return selectNodeAtPos(tr, start, nodeType);
153
+ }
134
154
  if (nodeType === 'table') {
135
155
  tr = selectTableClosestToPos(tr, tr.doc.resolve(start + 1));
136
156
  return tr;
@@ -460,6 +460,9 @@ export var DragHandle = function DragHandle(_ref) {
460
460
  if (startPos === undefined) {
461
461
  return tr;
462
462
  }
463
+ if (nodeType === 'layoutColumn' && expValEquals('platform_editor_layout_column_menu', 'isEnabled', true)) {
464
+ tr.setMeta('toggleLayoutColumnMenu', {});
465
+ }
463
466
  var resolvedStartPos = tr.doc.resolve(startPos);
464
467
  var selection = ((_selectionPreservatio = selectionPreservationPluginKey.getState(view.state)) === null || _selectionPreservatio === void 0 ? void 0 : _selectionPreservatio.preservedSelection) || tr.selection;
465
468
  api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || _api$analytics.actions.attachAnalyticsEvent({
@@ -508,6 +511,9 @@ export var DragHandle = function DragHandle(_ref) {
508
511
  if (startPos === undefined) {
509
512
  return tr;
510
513
  }
514
+ if (nodeType === 'layoutColumn' && expValEquals('platform_editor_layout_column_menu', 'isEnabled', true)) {
515
+ tr.setMeta('toggleLayoutColumnMenu', {});
516
+ }
511
517
  var mSelect = api === null || api === void 0 || (_api$blockControls$sh = api.blockControls.sharedState.currentState()) === null || _api$blockControls$sh === void 0 ? void 0 : _api$blockControls$sh.multiSelectDnD;
512
518
  var $anchor = (mSelect === null || mSelect === void 0 ? void 0 : mSelect.anchor) !== undefined ? tr.doc.resolve(mSelect === null || mSelect === void 0 ? void 0 : mSelect.anchor) : tr.selection.$anchor;
513
519
  if (tr.selection.empty || !e.shiftKey) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-block-controls",
3
- "version": "11.2.15",
3
+ "version": "11.2.17",
4
4
  "description": "Block controls plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -56,7 +56,7 @@
56
56
  "@atlaskit/pragmatic-drag-and-drop-react-drop-indicator": "^3.2.0",
57
57
  "@atlaskit/primitives": "^19.0.0",
58
58
  "@atlaskit/theme": "^23.2.0",
59
- "@atlaskit/tmp-editor-statsig": "^77.0.0",
59
+ "@atlaskit/tmp-editor-statsig": "^77.3.0",
60
60
  "@atlaskit/tokens": "^13.0.0",
61
61
  "@atlaskit/tooltip": "^22.0.0",
62
62
  "@babel/runtime": "^7.0.0",
@@ -67,7 +67,7 @@
67
67
  "uuid": "^3.1.0"
68
68
  },
69
69
  "peerDependencies": {
70
- "@atlaskit/editor-common": "^114.20.0",
70
+ "@atlaskit/editor-common": "^114.26.0",
71
71
  "react": "^18.2.0",
72
72
  "react-dom": "^18.2.0",
73
73
  "react-intl": "^5.25.1 || ^6.0.0 || ^7.0.0"
@@ -132,6 +132,9 @@
132
132
  "platform_editor_content_mode_button_mvp": {
133
133
  "type": "boolean"
134
134
  },
135
+ "platform_editor_maui_jira_updates": {
136
+ "type": "boolean"
137
+ },
135
138
  "platform_editor_table_sticky_header_patch_6": {
136
139
  "type": "boolean"
137
140
  },