@atlaskit/editor-plugin-block-controls 3.3.5 → 3.3.7

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.
Files changed (32) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/editor-commands/move-node.js +1 -1
  3. package/dist/cjs/editor-commands/move-to-layout.js +2 -2
  4. package/dist/cjs/pm-plugins/handle-mouse-over.js +1 -1
  5. package/dist/cjs/pm-plugins/main.js +3 -2
  6. package/dist/cjs/pm-plugins/utils/active-anchor-tracker.js +1 -1
  7. package/dist/cjs/pm-plugins/utils/getSelection.js +2 -1
  8. package/dist/cjs/ui/consts.js +6 -2
  9. package/dist/cjs/ui/drag-handle.js +2 -2
  10. package/dist/cjs/ui/quick-insert-button.js +1 -1
  11. package/dist/es2019/editor-commands/move-node.js +1 -1
  12. package/dist/es2019/editor-commands/move-to-layout.js +2 -2
  13. package/dist/es2019/pm-plugins/handle-mouse-over.js +1 -1
  14. package/dist/es2019/pm-plugins/main.js +3 -2
  15. package/dist/es2019/pm-plugins/utils/active-anchor-tracker.js +1 -1
  16. package/dist/es2019/pm-plugins/utils/getSelection.js +2 -1
  17. package/dist/es2019/ui/consts.js +5 -1
  18. package/dist/es2019/ui/drag-handle.js +5 -3
  19. package/dist/es2019/ui/global-styles.js +2 -2
  20. package/dist/es2019/ui/quick-insert-button.js +1 -1
  21. package/dist/esm/editor-commands/move-node.js +1 -1
  22. package/dist/esm/editor-commands/move-to-layout.js +2 -2
  23. package/dist/esm/pm-plugins/handle-mouse-over.js +1 -1
  24. package/dist/esm/pm-plugins/main.js +3 -2
  25. package/dist/esm/pm-plugins/utils/active-anchor-tracker.js +1 -1
  26. package/dist/esm/pm-plugins/utils/getSelection.js +2 -1
  27. package/dist/esm/ui/consts.js +5 -1
  28. package/dist/esm/ui/drag-handle.js +5 -3
  29. package/dist/esm/ui/quick-insert-button.js +1 -1
  30. package/dist/types/ui/consts.d.ts +1 -0
  31. package/dist/types-ts4.5/ui/consts.d.ts +1 -0
  32. package/package.json +6 -6
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @atlaskit/editor-plugin-block-controls
2
2
 
3
+ ## 3.3.7
4
+
5
+ ### Patch Changes
6
+
7
+ - [#124718](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/124718)
8
+ [`d923941c82bb4`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/d923941c82bb4) -
9
+ Disable block menu in Editor controls
10
+
11
+ ## 3.3.6
12
+
13
+ ### Patch Changes
14
+
15
+ - [#121718](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/121718)
16
+ [`ea6771bd5b498`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/ea6771bd5b498) -
17
+ [ux] ED-26814 fix copy and paste non bodied macro in list item
18
+ - Updated dependencies
19
+
3
20
  ## 3.3.5
4
21
 
5
22
  ### Patch Changes
@@ -379,7 +379,7 @@ var moveNode = exports.moveNode = function moveNode(api) {
379
379
  var destParent = $to.node($to.depth);
380
380
  var sourceNode = $handlePos.nodeAfter;
381
381
 
382
- //TODO: Does this need to be updated with new selection logic above? ^
382
+ //TODO: ED-26959 - Does this need to be updated with new selection logic above? ^
383
383
  // Move a layout column to top level
384
384
  if (sourceNode && isDragLayoutColumnToTopLevel($handlePos, $to)) {
385
385
  // need update after we support single column layout.
@@ -207,7 +207,7 @@ var canMoveToLayout = function canMoveToLayout(api, from, to, tr, moveNodeAtCurs
207
207
  sourceTo = Math.max(anchor, head);
208
208
  sourceContent = tr.doc.slice(sourceFrom, sourceTo).content;
209
209
 
210
- // TODO: this might become expensive for large content, consider removing it if check has been done beforehand
210
+ // TODO: ED-26959 - this might become expensive for large content, consider removing it if check has been done beforehand
211
211
  if ((0, _checkFragment.containsNodeOfType)(sourceContent, 'layoutSection')) {
212
212
  return;
213
213
  }
@@ -286,7 +286,7 @@ var getBreakoutMode = function getBreakoutMode(content, breakout) {
286
286
  }
287
287
  };
288
288
 
289
- // TODO: As part of platform_editor_element_drag_and_drop_multiselect clean up,
289
+ // TODO: ED-26959 - As part of platform_editor_element_drag_and_drop_multiselect clean up,
290
290
  // source content variable that has type of `PMNode | Fragment` should be updated to `Fragment` only
291
291
  var moveToLayout = exports.moveToLayout = function moveToLayout(api) {
292
292
  return function (from, to, options) {
@@ -67,7 +67,7 @@ var handleMouseOver = exports.handleMouseOver = function handleMouseOver(view, e
67
67
  }
68
68
 
69
69
  // We want to exlude handles from showing for wrapped nodes
70
- // TODO We should be able remove these check if we decided to
70
+ // TODO: ED-26959 - We should be able remove these check if we decided to
71
71
  // go we not decoration for wrapped image solution.
72
72
  if (['wrap-right', 'wrap-left'].includes(rootElement.getAttribute('layout') || '')) {
73
73
  return false;
@@ -21,6 +21,7 @@ var _element = require("@atlaskit/pragmatic-drag-and-drop-auto-scroll/element");
21
21
  var _combine = require("@atlaskit/pragmatic-drag-and-drop/combine");
22
22
  var _adapter = require("@atlaskit/pragmatic-drag-and-drop/element/adapter");
23
23
  var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
24
+ var _consts = require("../ui/consts");
24
25
  var _decorationsAnchor = require("./decorations-anchor");
25
26
  var _decorationsDragHandle = require("./decorations-drag-handle");
26
27
  var _decorationsDropTarget = require("./decorations-drop-target");
@@ -363,7 +364,7 @@ var newApply = exports.newApply = function newApply(api, formatMessage, tr, curr
363
364
  }
364
365
  var newActiveNode = isEmptyDoc || !(meta !== null && meta !== void 0 && meta.activeNode) && (0, _decorationsDragHandle.findHandleDec)(decorations, latestActiveNode === null || latestActiveNode === void 0 ? void 0 : latestActiveNode.pos, latestActiveNode === null || latestActiveNode === void 0 ? void 0 : latestActiveNode.pos).length === 0 ? null : latestActiveNode;
365
366
  var isMenuOpenNew = isMenuOpen;
366
- if ((0, _experiments.editorExperiment)('platform_editor_controls', 'variant1')) {
367
+ if (_consts.BLOCK_MENU_ENABLED && (0, _experiments.editorExperiment)('platform_editor_controls', 'variant1')) {
367
368
  if (meta !== null && meta !== void 0 && meta.closeMenu) {
368
369
  isMenuOpenNew = false;
369
370
  } else if (meta !== null && meta !== void 0 && meta.toggleMenu) {
@@ -633,7 +634,7 @@ var createPlugin = exports.createPlugin = function createPlugin(api, getIntl, no
633
634
  return false;
634
635
  }
635
636
 
636
- // TODO: Review usage of posAtDOM here
637
+ // TODO: ED-26959 - Review usage of posAtDOM here
637
638
  var domPos = Math.max(view.posAtDOM(nodeElement, 0) - 1, 0);
638
639
  var nodeTarget = state.doc.nodeAt(domPos);
639
640
  var isSameNode = !!(nodeTarget && draggable !== null && draggable !== void 0 && draggable.eq(nodeTarget));
@@ -59,7 +59,7 @@ var ActiveAnchorTracker = exports.ActiveAnchorTracker = /*#__PURE__*/function ()
59
59
  }
60
60
  }
61
61
  }]);
62
- }(); // TODO We should use a scoped ActiveAnchorTracker rather than the global static object.
62
+ }(); // TODO: ED-26959 - We should use a scoped ActiveAnchorTracker rather than the global static object.
63
63
  // Move this into the plugin scope once the newApply functions becomes default apply.
64
64
  var defaultActiveAnchorTracker = exports.defaultActiveAnchorTracker = new ActiveAnchorTracker();
65
65
  var useActiveAnchorTracker = exports.useActiveAnchorTracker = function useActiveAnchorTracker(anchorName) {
@@ -59,7 +59,8 @@ var getSelection = exports.getSelection = function getSelection(tr, start) {
59
59
  var nodeName = node === null || node === void 0 ? void 0 : node.type.name;
60
60
  var isBlockQuoteWithMedia = nodeName === 'blockquote' && isNodeWithMedia(tr, start, nodeSize);
61
61
  var isBlockQuoteWithMediaOrExtension = nodeName === 'blockquote' && isNodeWithMediaOrExtension(tr, start, nodeSize);
62
- if (isNodeSelection && nodeName !== 'blockquote' || ((0, _platformFeatureFlags.fg)('platform_editor_non_macros_copy_and_paste_fix') ? isBlockQuoteWithMediaOrExtension : isBlockQuoteWithMedia) ||
62
+ var isListWithMediaOrExtension = nodeName === 'bulletList' && isNodeWithMediaOrExtension(tr, start, nodeSize) || nodeName === 'orderedList' && isNodeWithMediaOrExtension(tr, start, nodeSize);
63
+ if (isNodeSelection && nodeName !== 'blockquote' || isListWithMediaOrExtension && (0, _platformFeatureFlags.fg)('platform_editor_non_macros_copy_and_paste_fix') || ((0, _platformFeatureFlags.fg)('platform_editor_non_macros_copy_and_paste_fix') ? isBlockQuoteWithMediaOrExtension : isBlockQuoteWithMedia) ||
63
64
  // decisionList/layoutColumn node is not selectable, but we want to select the whole node not just text
64
65
  ['decisionList', 'layoutColumn'].includes(nodeName || '')) {
65
66
  return new _state.NodeSelection($startPos);
@@ -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.rootElementGap = exports.nodeMargins = exports.getNestedNodeLeftPaddingMargin = exports.dropTargetMarginMap = exports.dragHandleGap = exports.QUICK_INSERT_WIDTH = exports.QUICK_INSERT_HEIGHT = exports.QUICK_INSERT_DIMENSIONS = 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;
7
+ exports.topPositionAdjustment = exports.spacingBetweenNodesForPreview = exports.spaceLookupMap = exports.rootElementGap = exports.nodeMargins = exports.getNestedNodeLeftPaddingMargin = exports.dropTargetMarginMap = exports.dragHandleGap = exports.QUICK_INSERT_WIDTH = exports.QUICK_INSERT_HEIGHT = exports.QUICK_INSERT_DIMENSIONS = 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 = exports.BLOCK_MENU_ENABLED = 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");
@@ -344,4 +344,8 @@ var DEFAULT_COLUMN_DISTRIBUTIONS = exports.DEFAULT_COLUMN_DISTRIBUTIONS = {
344
344
  4: 25,
345
345
  5: 20
346
346
  };
347
- var BLOCK_MENU_WIDTH = exports.BLOCK_MENU_WIDTH = 220;
347
+ var BLOCK_MENU_WIDTH = exports.BLOCK_MENU_WIDTH = 220;
348
+
349
+ // Temporarily disable BLOCK MENU feature until Q4 FY25.
350
+ // For more details, refer to ticket ED-26972 https://product-fabric.atlassian.net/browse/ED-26972
351
+ var BLOCK_MENU_ENABLED = exports.BLOCK_MENU_ENABLED = false;
@@ -200,7 +200,7 @@ var DragHandle = exports.DragHandle = function DragHandle(_ref) {
200
200
  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;
201
201
  if (!isMultiSelect || tr.selection.empty || !e.shiftKey) {
202
202
  tr = (0, _getSelection.selectNode)(tr, startPos, nodeType);
203
- if ((0, _experiments.editorExperiment)('platform_editor_controls', 'variant1')) {
203
+ if (_consts.BLOCK_MENU_ENABLED && (0, _experiments.editorExperiment)('platform_editor_controls', 'variant1')) {
204
204
  var _api$blockControls;
205
205
  api === null || api === void 0 || (_api$blockControls = api.blockControls) === null || _api$blockControls === void 0 || _api$blockControls.commands.toggleBlockMenu({
206
206
  anchorName: anchorName
@@ -236,7 +236,7 @@ var DragHandle = exports.DragHandle = function DragHandle(_ref) {
236
236
  view.focus();
237
237
  }, [isMultiSelect, api === null || api === void 0 || (_api$core2 = api.core) === null || _api$core2 === void 0 ? void 0 : _api$core2.actions, api === null || api === void 0 ? void 0 : api.blockControls.sharedState, api === null || api === void 0 || (_api$blockControls3 = api.blockControls) === null || _api$blockControls3 === void 0 ? void 0 : _api$blockControls3.commands, api === null || api === void 0 || (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions, view, dragHandleSelected, getPos, isTopLevelNode, nodeType, anchorName]);
238
238
 
239
- // TODO - This needs to be investigated further. Drag preview generation is not always working
239
+ // TODO: ED-26959 - This needs to be investigated further. Drag preview generation is not always working
240
240
  // as expected with a node selection. This workaround sets the selection to the node on mouseDown,
241
241
  // but ensures the preview is generated correctly.
242
242
  var handleMouseDown = (0, _react.useCallback)(function () {
@@ -50,7 +50,7 @@ var containerStaticStyles = (0, _primitives.xcss)({
50
50
  zIndex: 'card'
51
51
  });
52
52
 
53
- // TODO: Share prop types between DragHandle - generic enough to create a type for block control decoration
53
+ // TODO: ED-26959 - Share prop types between DragHandle - generic enough to create a type for block control decoration
54
54
 
55
55
  var isSelectionInNode = function isSelectionInNode(start, view) {
56
56
  var node = view.state.doc.nodeAt(start);
@@ -381,7 +381,7 @@ export const moveNode = api => (start, to, inputMethod = INPUT_METHOD.DRAG_AND_D
381
381
  const destParent = $to.node($to.depth);
382
382
  const sourceNode = $handlePos.nodeAfter;
383
383
 
384
- //TODO: Does this need to be updated with new selection logic above? ^
384
+ //TODO: ED-26959 - Does this need to be updated with new selection logic above? ^
385
385
  // Move a layout column to top level
386
386
  if (sourceNode && isDragLayoutColumnToTopLevel($handlePos, $to)) {
387
387
  // need update after we support single column layout.
@@ -207,7 +207,7 @@ const canMoveToLayout = (api, from, to, tr, moveNodeAtCursorPos) => {
207
207
  sourceTo = Math.max(anchor, head);
208
208
  sourceContent = tr.doc.slice(sourceFrom, sourceTo).content;
209
209
 
210
- // TODO: this might become expensive for large content, consider removing it if check has been done beforehand
210
+ // TODO: ED-26959 - this might become expensive for large content, consider removing it if check has been done beforehand
211
211
  if (containsNodeOfType(sourceContent, 'layoutSection')) {
212
212
  return;
213
213
  }
@@ -277,7 +277,7 @@ const getBreakoutMode = (content, breakout) => {
277
277
  }
278
278
  };
279
279
 
280
- // TODO: As part of platform_editor_element_drag_and_drop_multiselect clean up,
280
+ // TODO: ED-26959 - As part of platform_editor_element_drag_and_drop_multiselect clean up,
281
281
  // source content variable that has type of `PMNode | Fragment` should be updated to `Fragment` only
282
282
  export const moveToLayout = api => (from, to, options) => ({
283
283
  tr
@@ -62,7 +62,7 @@ export const handleMouseOver = (view, event, api) => {
62
62
  }
63
63
 
64
64
  // We want to exlude handles from showing for wrapped nodes
65
- // TODO We should be able remove these check if we decided to
65
+ // TODO: ED-26959 - We should be able remove these check if we decided to
66
66
  // go we not decoration for wrapped image solution.
67
67
  if (['wrap-right', 'wrap-left'].includes(rootElement.getAttribute('layout') || '')) {
68
68
  return false;
@@ -12,6 +12,7 @@ import { autoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-sc
12
12
  import { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';
13
13
  import { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
14
14
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
15
+ import { BLOCK_MENU_ENABLED } from '../ui/consts';
15
16
  import { findNodeDecs, nodeDecorations } from './decorations-anchor';
16
17
  import { dragHandleDecoration, emptyParagraphNodeDecorations, findHandleDec } from './decorations-drag-handle';
17
18
  import { dropTargetDecorations, findDropTargetDecs } from './decorations-drop-target';
@@ -360,7 +361,7 @@ export const newApply = (api, formatMessage, tr, currentState, newState, flags,
360
361
  }
361
362
  const newActiveNode = isEmptyDoc || !(meta !== null && meta !== void 0 && meta.activeNode) && findHandleDec(decorations, latestActiveNode === null || latestActiveNode === void 0 ? void 0 : latestActiveNode.pos, latestActiveNode === null || latestActiveNode === void 0 ? void 0 : latestActiveNode.pos).length === 0 ? null : latestActiveNode;
362
363
  let isMenuOpenNew = isMenuOpen;
363
- if (editorExperiment('platform_editor_controls', 'variant1')) {
364
+ if (BLOCK_MENU_ENABLED && editorExperiment('platform_editor_controls', 'variant1')) {
364
365
  if (meta !== null && meta !== void 0 && meta.closeMenu) {
365
366
  isMenuOpenNew = false;
366
367
  } else if (meta !== null && meta !== void 0 && meta.toggleMenu) {
@@ -615,7 +616,7 @@ export const createPlugin = (api, getIntl, nodeViewPortalProviderAPI) => {
615
616
  return false;
616
617
  }
617
618
 
618
- // TODO: Review usage of posAtDOM here
619
+ // TODO: ED-26959 - Review usage of posAtDOM here
619
620
  const domPos = Math.max(view.posAtDOM(nodeElement, 0) - 1, 0);
620
621
  const nodeTarget = state.doc.nodeAt(domPos);
621
622
  const isSameNode = !!(nodeTarget && draggable !== null && draggable !== void 0 && draggable.eq(nodeTarget));
@@ -39,7 +39,7 @@ export class ActiveAnchorTracker {
39
39
  }
40
40
  }
41
41
 
42
- // TODO We should use a scoped ActiveAnchorTracker rather than the global static object.
42
+ // TODO: ED-26959 - We should use a scoped ActiveAnchorTracker rather than the global static object.
43
43
  // Move this into the plugin scope once the newApply functions becomes default apply.
44
44
  export const defaultActiveAnchorTracker = new ActiveAnchorTracker();
45
45
  export const useActiveAnchorTracker = (anchorName, activeAnchorTracker = defaultActiveAnchorTracker) => {
@@ -53,7 +53,8 @@ export const getSelection = (tr, start) => {
53
53
  const nodeName = node === null || node === void 0 ? void 0 : node.type.name;
54
54
  const isBlockQuoteWithMedia = nodeName === 'blockquote' && isNodeWithMedia(tr, start, nodeSize);
55
55
  const isBlockQuoteWithMediaOrExtension = nodeName === 'blockquote' && isNodeWithMediaOrExtension(tr, start, nodeSize);
56
- if (isNodeSelection && nodeName !== 'blockquote' || (fg('platform_editor_non_macros_copy_and_paste_fix') ? isBlockQuoteWithMediaOrExtension : isBlockQuoteWithMedia) ||
56
+ const isListWithMediaOrExtension = nodeName === 'bulletList' && isNodeWithMediaOrExtension(tr, start, nodeSize) || nodeName === 'orderedList' && isNodeWithMediaOrExtension(tr, start, nodeSize);
57
+ if (isNodeSelection && nodeName !== 'blockquote' || isListWithMediaOrExtension && fg('platform_editor_non_macros_copy_and_paste_fix') || (fg('platform_editor_non_macros_copy_and_paste_fix') ? isBlockQuoteWithMediaOrExtension : isBlockQuoteWithMedia) ||
57
58
  // decisionList/layoutColumn node is not selectable, but we want to select the whole node not just text
58
59
  ['decisionList', 'layoutColumn'].includes(nodeName || '')) {
59
60
  return new NodeSelection($startPos);
@@ -353,4 +353,8 @@ export const DEFAULT_COLUMN_DISTRIBUTIONS = {
353
353
  4: 25,
354
354
  5: 20
355
355
  };
356
- export const BLOCK_MENU_WIDTH = 220;
356
+ export const BLOCK_MENU_WIDTH = 220;
357
+
358
+ // Temporarily disable BLOCK MENU feature until Q4 FY25.
359
+ // For more details, refer to ticket ED-26972 https://product-fabric.atlassian.net/browse/ED-26972
360
+ export const BLOCK_MENU_ENABLED = false;
@@ -2,7 +2,9 @@
2
2
  * @jsxRuntime classic
3
3
  * @jsx jsx
4
4
  */
5
+
5
6
  import { useCallback, useEffect, useRef, useState } from 'react';
7
+
6
8
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
7
9
  import { css, jsx } from '@emotion/react';
8
10
  import { bind } from 'bind-event-listener';
@@ -26,7 +28,7 @@ import { getMultiSelectAnalyticsAttributes } from '../pm-plugins/utils/analytics
26
28
  import { getLeftPosition, getTopPosition } from '../pm-plugins/utils/drag-handle-positions';
27
29
  import { isHandleCorrelatedToSelection, selectNode } from '../pm-plugins/utils/getSelection';
28
30
  import { alignAnchorHeadInDirectionOfPos, expandSelectionHeadToNodeAtPos } from '../pm-plugins/utils/selection';
29
- import { DRAG_HANDLE_BORDER_RADIUS, DRAG_HANDLE_HEIGHT, DRAG_HANDLE_MAX_SHIFT_CLICK_DEPTH, DRAG_HANDLE_WIDTH, DRAG_HANDLE_ZINDEX, dragHandleGap, nodeMargins, spacingBetweenNodesForPreview, topPositionAdjustment } from './consts';
31
+ import { BLOCK_MENU_ENABLED, DRAG_HANDLE_BORDER_RADIUS, DRAG_HANDLE_HEIGHT, DRAG_HANDLE_MAX_SHIFT_CLICK_DEPTH, DRAG_HANDLE_WIDTH, DRAG_HANDLE_ZINDEX, dragHandleGap, nodeMargins, spacingBetweenNodesForPreview, topPositionAdjustment } from './consts';
30
32
  import { dragPreview } from './drag-preview';
31
33
  const iconWrapperStyles = xcss({
32
34
  display: 'flex',
@@ -181,7 +183,7 @@ export const DragHandle = ({
181
183
  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;
182
184
  if (!isMultiSelect || tr.selection.empty || !e.shiftKey) {
183
185
  tr = selectNode(tr, startPos, nodeType);
184
- if (editorExperiment('platform_editor_controls', 'variant1')) {
186
+ if (BLOCK_MENU_ENABLED && editorExperiment('platform_editor_controls', 'variant1')) {
185
187
  var _api$blockControls;
186
188
  api === null || api === void 0 ? void 0 : (_api$blockControls = api.blockControls) === null || _api$blockControls === void 0 ? void 0 : _api$blockControls.commands.toggleBlockMenu({
187
189
  anchorName
@@ -217,7 +219,7 @@ export const DragHandle = ({
217
219
  view.focus();
218
220
  }, [isMultiSelect, api === null || api === void 0 ? void 0 : (_api$core2 = api.core) === null || _api$core2 === void 0 ? void 0 : _api$core2.actions, api === null || api === void 0 ? void 0 : api.blockControls.sharedState, api === null || api === void 0 ? void 0 : (_api$blockControls3 = api.blockControls) === null || _api$blockControls3 === void 0 ? void 0 : _api$blockControls3.commands, api === null || api === void 0 ? void 0 : (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions, view, dragHandleSelected, getPos, isTopLevelNode, nodeType, anchorName]);
219
221
 
220
- // TODO - This needs to be investigated further. Drag preview generation is not always working
222
+ // TODO: ED-26959 - This needs to be investigated further. Drag preview generation is not always working
221
223
  // as expected with a node selection. This workaround sets the selection to the node on mouseDown,
222
224
  // but ensures the preview is generated correctly.
223
225
  const handleMouseDown = useCallback(() => {
@@ -36,7 +36,7 @@ const extendedHoverZone = () => css({
36
36
  zIndex: -1
37
37
  }
38
38
  },
39
- // TODO - ED-23995 this style override needs to be moved to the Rule styles after FF cleanup - packages/editor/editor-common/src/styles/shared/rule.ts
39
+ // TODO: ED-23995 - this style override needs to be moved to the Rule styles after FF cleanup - packages/editor/editor-common/src/styles/shared/rule.ts
40
40
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors
41
41
  'hr[data-drag-handler-anchor-name]': {
42
42
  overflow: 'visible'
@@ -109,7 +109,7 @@ const extendedHoverZoneNested = () => css({
109
109
  zIndex: 1
110
110
  }
111
111
  },
112
- // TODO - ED-23995 this style override needs to be moved to the Rule styles after FF cleanup - packages/editor/editor-common/src/styles/shared/rule.ts
112
+ // TODO: ED-23995 - this style override needs to be moved to the Rule styles after FF cleanup packages/editor/editor-common/src/styles/shared/rule.ts
113
113
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors
114
114
  'hr[data-drag-handler-anchor-name]': {
115
115
  overflow: 'visible'
@@ -39,7 +39,7 @@ const containerStaticStyles = xcss({
39
39
  zIndex: 'card'
40
40
  });
41
41
 
42
- // TODO: Share prop types between DragHandle - generic enough to create a type for block control decoration
42
+ // TODO: ED-26959 - Share prop types between DragHandle - generic enough to create a type for block control decoration
43
43
 
44
44
  const isSelectionInNode = (start, view) => {
45
45
  const node = view.state.doc.nodeAt(start);
@@ -373,7 +373,7 @@ export var moveNode = function moveNode(api) {
373
373
  var destParent = $to.node($to.depth);
374
374
  var sourceNode = $handlePos.nodeAfter;
375
375
 
376
- //TODO: Does this need to be updated with new selection logic above? ^
376
+ //TODO: ED-26959 - Does this need to be updated with new selection logic above? ^
377
377
  // Move a layout column to top level
378
378
  if (sourceNode && isDragLayoutColumnToTopLevel($handlePos, $to)) {
379
379
  // need update after we support single column layout.
@@ -201,7 +201,7 @@ var canMoveToLayout = function canMoveToLayout(api, from, to, tr, moveNodeAtCurs
201
201
  sourceTo = Math.max(anchor, head);
202
202
  sourceContent = tr.doc.slice(sourceFrom, sourceTo).content;
203
203
 
204
- // TODO: this might become expensive for large content, consider removing it if check has been done beforehand
204
+ // TODO: ED-26959 - this might become expensive for large content, consider removing it if check has been done beforehand
205
205
  if (containsNodeOfType(sourceContent, 'layoutSection')) {
206
206
  return;
207
207
  }
@@ -280,7 +280,7 @@ var getBreakoutMode = function getBreakoutMode(content, breakout) {
280
280
  }
281
281
  };
282
282
 
283
- // TODO: As part of platform_editor_element_drag_and_drop_multiselect clean up,
283
+ // TODO: ED-26959 - As part of platform_editor_element_drag_and_drop_multiselect clean up,
284
284
  // source content variable that has type of `PMNode | Fragment` should be updated to `Fragment` only
285
285
  export var moveToLayout = function moveToLayout(api) {
286
286
  return function (from, to, options) {
@@ -61,7 +61,7 @@ export var handleMouseOver = function handleMouseOver(view, event, api) {
61
61
  }
62
62
 
63
63
  // We want to exlude handles from showing for wrapped nodes
64
- // TODO We should be able remove these check if we decided to
64
+ // TODO: ED-26959 - We should be able remove these check if we decided to
65
65
  // go we not decoration for wrapped image solution.
66
66
  if (['wrap-right', 'wrap-left'].includes(rootElement.getAttribute('layout') || '')) {
67
67
  return false;
@@ -16,6 +16,7 @@ import { autoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-sc
16
16
  import { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';
17
17
  import { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
18
18
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
19
+ import { BLOCK_MENU_ENABLED } from '../ui/consts';
19
20
  import { findNodeDecs, nodeDecorations } from './decorations-anchor';
20
21
  import { dragHandleDecoration, emptyParagraphNodeDecorations, findHandleDec } from './decorations-drag-handle';
21
22
  import { dropTargetDecorations, findDropTargetDecs } from './decorations-drop-target';
@@ -356,7 +357,7 @@ export var newApply = function newApply(api, formatMessage, tr, currentState, ne
356
357
  }
357
358
  var newActiveNode = isEmptyDoc || !(meta !== null && meta !== void 0 && meta.activeNode) && findHandleDec(decorations, latestActiveNode === null || latestActiveNode === void 0 ? void 0 : latestActiveNode.pos, latestActiveNode === null || latestActiveNode === void 0 ? void 0 : latestActiveNode.pos).length === 0 ? null : latestActiveNode;
358
359
  var isMenuOpenNew = isMenuOpen;
359
- if (editorExperiment('platform_editor_controls', 'variant1')) {
360
+ if (BLOCK_MENU_ENABLED && editorExperiment('platform_editor_controls', 'variant1')) {
360
361
  if (meta !== null && meta !== void 0 && meta.closeMenu) {
361
362
  isMenuOpenNew = false;
362
363
  } else if (meta !== null && meta !== void 0 && meta.toggleMenu) {
@@ -626,7 +627,7 @@ export var createPlugin = function createPlugin(api, getIntl, nodeViewPortalProv
626
627
  return false;
627
628
  }
628
629
 
629
- // TODO: Review usage of posAtDOM here
630
+ // TODO: ED-26959 - Review usage of posAtDOM here
630
631
  var domPos = Math.max(view.posAtDOM(nodeElement, 0) - 1, 0);
631
632
  var nodeTarget = state.doc.nodeAt(domPos);
632
633
  var isSameNode = !!(nodeTarget && draggable !== null && draggable !== void 0 && draggable.eq(nodeTarget));
@@ -54,7 +54,7 @@ export var ActiveAnchorTracker = /*#__PURE__*/function () {
54
54
  }]);
55
55
  }();
56
56
 
57
- // TODO We should use a scoped ActiveAnchorTracker rather than the global static object.
57
+ // TODO: ED-26959 - We should use a scoped ActiveAnchorTracker rather than the global static object.
58
58
  // Move this into the plugin scope once the newApply functions becomes default apply.
59
59
  export var defaultActiveAnchorTracker = new ActiveAnchorTracker();
60
60
  export var useActiveAnchorTracker = function useActiveAnchorTracker(anchorName) {
@@ -53,7 +53,8 @@ export var getSelection = function getSelection(tr, start) {
53
53
  var nodeName = node === null || node === void 0 ? void 0 : node.type.name;
54
54
  var isBlockQuoteWithMedia = nodeName === 'blockquote' && isNodeWithMedia(tr, start, nodeSize);
55
55
  var isBlockQuoteWithMediaOrExtension = nodeName === 'blockquote' && isNodeWithMediaOrExtension(tr, start, nodeSize);
56
- if (isNodeSelection && nodeName !== 'blockquote' || (fg('platform_editor_non_macros_copy_and_paste_fix') ? isBlockQuoteWithMediaOrExtension : isBlockQuoteWithMedia) ||
56
+ var isListWithMediaOrExtension = nodeName === 'bulletList' && isNodeWithMediaOrExtension(tr, start, nodeSize) || nodeName === 'orderedList' && isNodeWithMediaOrExtension(tr, start, nodeSize);
57
+ if (isNodeSelection && nodeName !== 'blockquote' || isListWithMediaOrExtension && fg('platform_editor_non_macros_copy_and_paste_fix') || (fg('platform_editor_non_macros_copy_and_paste_fix') ? isBlockQuoteWithMediaOrExtension : isBlockQuoteWithMedia) ||
57
58
  // decisionList/layoutColumn node is not selectable, but we want to select the whole node not just text
58
59
  ['decisionList', 'layoutColumn'].includes(nodeName || '')) {
59
60
  return new NodeSelection($startPos);
@@ -337,4 +337,8 @@ export var DEFAULT_COLUMN_DISTRIBUTIONS = {
337
337
  4: 25,
338
338
  5: 20
339
339
  };
340
- export var BLOCK_MENU_WIDTH = 220;
340
+ export var BLOCK_MENU_WIDTH = 220;
341
+
342
+ // Temporarily disable BLOCK MENU feature until Q4 FY25.
343
+ // For more details, refer to ticket ED-26972 https://product-fabric.atlassian.net/browse/ED-26972
344
+ export var BLOCK_MENU_ENABLED = false;
@@ -7,7 +7,9 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
7
7
  * @jsxRuntime classic
8
8
  * @jsx jsx
9
9
  */
10
+
10
11
  import { useCallback, useEffect, useRef, useState } from 'react';
12
+
11
13
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
12
14
  import { css, jsx } from '@emotion/react';
13
15
  import { bind } from 'bind-event-listener';
@@ -31,7 +33,7 @@ import { getMultiSelectAnalyticsAttributes } from '../pm-plugins/utils/analytics
31
33
  import { getLeftPosition, getTopPosition } from '../pm-plugins/utils/drag-handle-positions';
32
34
  import { isHandleCorrelatedToSelection, selectNode } from '../pm-plugins/utils/getSelection';
33
35
  import { alignAnchorHeadInDirectionOfPos, expandSelectionHeadToNodeAtPos } from '../pm-plugins/utils/selection';
34
- import { DRAG_HANDLE_BORDER_RADIUS, DRAG_HANDLE_HEIGHT, DRAG_HANDLE_MAX_SHIFT_CLICK_DEPTH, DRAG_HANDLE_WIDTH, DRAG_HANDLE_ZINDEX, dragHandleGap, nodeMargins, spacingBetweenNodesForPreview, topPositionAdjustment } from './consts';
36
+ import { BLOCK_MENU_ENABLED, DRAG_HANDLE_BORDER_RADIUS, DRAG_HANDLE_HEIGHT, DRAG_HANDLE_MAX_SHIFT_CLICK_DEPTH, DRAG_HANDLE_WIDTH, DRAG_HANDLE_ZINDEX, dragHandleGap, nodeMargins, spacingBetweenNodesForPreview, topPositionAdjustment } from './consts';
35
37
  import { dragPreview } from './drag-preview';
36
38
  var iconWrapperStyles = xcss({
37
39
  display: 'flex',
@@ -195,7 +197,7 @@ export var DragHandle = function DragHandle(_ref) {
195
197
  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;
196
198
  if (!isMultiSelect || tr.selection.empty || !e.shiftKey) {
197
199
  tr = selectNode(tr, startPos, nodeType);
198
- if (editorExperiment('platform_editor_controls', 'variant1')) {
200
+ if (BLOCK_MENU_ENABLED && editorExperiment('platform_editor_controls', 'variant1')) {
199
201
  var _api$blockControls;
200
202
  api === null || api === void 0 || (_api$blockControls = api.blockControls) === null || _api$blockControls === void 0 || _api$blockControls.commands.toggleBlockMenu({
201
203
  anchorName: anchorName
@@ -231,7 +233,7 @@ export var DragHandle = function DragHandle(_ref) {
231
233
  view.focus();
232
234
  }, [isMultiSelect, api === null || api === void 0 || (_api$core2 = api.core) === null || _api$core2 === void 0 ? void 0 : _api$core2.actions, api === null || api === void 0 ? void 0 : api.blockControls.sharedState, api === null || api === void 0 || (_api$blockControls3 = api.blockControls) === null || _api$blockControls3 === void 0 ? void 0 : _api$blockControls3.commands, api === null || api === void 0 || (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions, view, dragHandleSelected, getPos, isTopLevelNode, nodeType, anchorName]);
233
235
 
234
- // TODO - This needs to be investigated further. Drag preview generation is not always working
236
+ // TODO: ED-26959 - This needs to be investigated further. Drag preview generation is not always working
235
237
  // as expected with a node selection. This workaround sets the selection to the node on mouseDown,
236
238
  // but ensures the preview is generated correctly.
237
239
  var handleMouseDown = useCallback(function () {
@@ -40,7 +40,7 @@ var containerStaticStyles = xcss({
40
40
  zIndex: 'card'
41
41
  });
42
42
 
43
- // TODO: Share prop types between DragHandle - generic enough to create a type for block control decoration
43
+ // TODO: ED-26959 - Share prop types between DragHandle - generic enough to create a type for block control decoration
44
44
 
45
45
  var isSelectionInNode = function isSelectionInNode(start, view) {
46
46
  var node = view.state.doc.nodeAt(start);
@@ -59,3 +59,4 @@ export declare const DEFAULT_COLUMN_DISTRIBUTIONS: {
59
59
  [key: number]: number;
60
60
  };
61
61
  export declare const BLOCK_MENU_WIDTH = 220;
62
+ export declare const BLOCK_MENU_ENABLED = false;
@@ -59,3 +59,4 @@ export declare const DEFAULT_COLUMN_DISTRIBUTIONS: {
59
59
  [key: number]: number;
60
60
  };
61
61
  export declare const BLOCK_MENU_WIDTH = 220;
62
+ export declare const BLOCK_MENU_ENABLED = false;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-block-controls",
3
- "version": "3.3.5",
3
+ "version": "3.3.7",
4
4
  "description": "Block controls plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -33,14 +33,14 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "@atlaskit/adf-schema": "^47.6.0",
36
- "@atlaskit/editor-common": "^102.0.0",
36
+ "@atlaskit/editor-common": "^102.3.0",
37
37
  "@atlaskit/editor-plugin-accessibility-utils": "^2.0.0",
38
38
  "@atlaskit/editor-plugin-analytics": "^2.1.0",
39
39
  "@atlaskit/editor-plugin-editor-disabled": "^2.0.0",
40
40
  "@atlaskit/editor-plugin-feature-flags": "^1.3.0",
41
41
  "@atlaskit/editor-plugin-metrics": "^3.4.0",
42
- "@atlaskit/editor-plugin-quick-insert": "^2.0.0",
43
- "@atlaskit/editor-plugin-selection": "^2.0.0",
42
+ "@atlaskit/editor-plugin-quick-insert": "^2.1.0",
43
+ "@atlaskit/editor-plugin-selection": "^2.1.0",
44
44
  "@atlaskit/editor-plugin-width": "^3.0.0",
45
45
  "@atlaskit/editor-prosemirror": "7.0.0",
46
46
  "@atlaskit/editor-shared-styles": "^3.4.0",
@@ -49,10 +49,10 @@
49
49
  "@atlaskit/platform-feature-flags": "^1.1.0",
50
50
  "@atlaskit/pragmatic-drag-and-drop": "^1.5.0",
51
51
  "@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.0",
52
- "@atlaskit/pragmatic-drag-and-drop-react-drop-indicator": "^2.1.0",
52
+ "@atlaskit/pragmatic-drag-and-drop-react-drop-indicator": "^2.2.0",
53
53
  "@atlaskit/primitives": "^14.1.0",
54
54
  "@atlaskit/theme": "^18.0.0",
55
- "@atlaskit/tmp-editor-statsig": "^3.4.0",
55
+ "@atlaskit/tmp-editor-statsig": "^3.5.0",
56
56
  "@atlaskit/tokens": "^4.3.0",
57
57
  "@atlaskit/tooltip": "^20.0.0",
58
58
  "@babel/runtime": "^7.0.0",