@atlaskit/editor-plugin-block-controls 13.0.6 → 13.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # @atlaskit/editor-plugin-block-controls
2
2
 
3
+ ## 13.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`bb48c26acb8ba`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/bb48c26acb8ba) -
8
+ Add platform_editor_layout_column_menu_kill_switch_1 kill switch and render the full block drag
9
+ handle icon for layout columns when the new behaviour is enabled (gate OFF). When the new
10
+ behaviour is enabled, re-clicking the layout column whose menu is already open now closes the
11
+ menu, while clicking a different column switches the menu to that column. The layout column menu
12
+ now opens below the drag handle with left-aligned edges (relying on the popup's built-in placement
13
+ to invert horizontally or nudge up when space is tight) instead of the previous centred
14
+ prefer-above behaviour. The layout column Delete hover/focus danger preview now matches the table
15
+ delete affordance exactly, using the translucent color.blanket.danger fill and a 1px
16
+ color.border.danger border instead of the previous low-alpha fill with a 2px border, and clears
17
+ the concurrent blue selected blanket while the danger preview is active so the preview reads as
18
+ pure red with no blue cast.
19
+
20
+ ### Patch Changes
21
+
22
+ - Updated dependencies
23
+
24
+ ## 13.0.7
25
+
26
+ ### Patch Changes
27
+
28
+ - [`c664929c3f15d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/c664929c3f15d) -
29
+ Clean up experiment `platform_editor_clean_up_widget_mark_logic`
30
+ - [`5c279743e9b74`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/5c279743e9b74) -
31
+ Fire an exposure event for the `remix_button_right_margin_hover` experiment.
32
+ - Updated dependencies
33
+
3
34
  ## 13.0.6
4
35
 
5
36
  ### Patch Changes
@@ -75,7 +75,7 @@ var dragHandleDecoration = exports.dragHandleDecoration = function dragHandleDec
75
75
  * Exclude 'breakout' on purpose, so the widgets render at the top of the document to avoid z-index issues
76
76
  * Other block marks must be added, otherwise PM will split the DOM elements causing mutations and re-draws
77
77
  */
78
- marks: (0, _expValEquals.expValEquals)('platform_editor_small_font_size', 'isEnabled', true) ? (0, _marks.getMatchingBlockMarks)(editorState, pos, [editorState.schema.marks.alignment, editorState.schema.marks.fontSize]) : (0, _expValEquals.expValEquals)('platform_editor_clean_up_widget_mark_logic', 'isEnabled', true) ? [] : (0, _marks.getActiveBlockMarks)(editorState, pos),
78
+ marks: (0, _expValEquals.expValEquals)('platform_editor_small_font_size', 'isEnabled', true) ? (0, _marks.getMatchingBlockMarks)(editorState, pos, [editorState.schema.marks.alignment, editorState.schema.marks.fontSize]) : [],
79
79
  destroy: function destroy(node) {
80
80
  unbind && unbind();
81
81
  }
@@ -84,7 +84,7 @@ var dragHandleDecoration = exports.dragHandleDecoration = function dragHandleDec
84
84
  type: _decorationsCommon.TYPE_HANDLE_DEC,
85
85
  // eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead
86
86
  testid: "".concat(_decorationsCommon.TYPE_HANDLE_DEC, "-").concat((0, _uuid.default)()),
87
- marks: (0, _expValEquals.expValEquals)('platform_editor_small_font_size', 'isEnabled', true) ? (0, _marks.getMatchingBlockMarks)(editorState, pos, [editorState.schema.marks.alignment, editorState.schema.marks.fontSize]) : (0, _expValEquals.expValEquals)('platform_editor_clean_up_widget_mark_logic', 'isEnabled', true) ? [] : (0, _expValEquals.expValEquals)('platform_editor_native_anchor_with_dnd', 'isEnabled', true) ? (0, _marks.getActiveBlockMarks)(editorState, pos) : undefined,
87
+ marks: (0, _expValEquals.expValEquals)('platform_editor_small_font_size', 'isEnabled', true) ? (0, _marks.getMatchingBlockMarks)(editorState, pos, [editorState.schema.marks.alignment, editorState.schema.marks.fontSize]) : [],
88
88
  destroy: function destroy(node) {
89
89
  unbind && unbind();
90
90
  }
@@ -62,7 +62,7 @@ var quickInsertButtonDecoration = exports.quickInsertButtonDecoration = function
62
62
  * Other block marks must be added, otherwise PM will split the DOM elements causing mutations and re-draws
63
63
  */
64
64
 
65
- marks: (0, _expValEquals.expValEquals)('platform_editor_small_font_size', 'isEnabled', true) ? (0, _marks.getMatchingBlockMarks)(editorState, rootPos, [editorState.schema.marks.alignment, editorState.schema.marks.fontSize]) : (0, _expValEquals.expValEquals)('platform_editor_clean_up_widget_mark_logic', 'isEnabled', true) ? [] : (0, _marks.getActiveBlockMarks)(editorState, rootPos),
65
+ marks: (0, _expValEquals.expValEquals)('platform_editor_small_font_size', 'isEnabled', true) ? (0, _marks.getMatchingBlockMarks)(editorState, rootPos, [editorState.schema.marks.alignment, editorState.schema.marks.fontSize]) : [],
66
66
  destroy: function destroy(_) {
67
67
  if ((0, _platformFeatureFlags.fg)('platform_editor_fix_widget_destroy')) {
68
68
  nodeViewPortalProviderAPI.remove(key);
@@ -123,7 +123,9 @@ var processHoverSide = function processHoverSide(view, api) {
123
123
  }
124
124
 
125
125
  // Added right-margin hover, gated so it can be rolled back. When off, fall through to midpoint.
126
- if ((0, _experiments.editorExperiment)('remix_button_right_margin_hover', true)) {
126
+ if ((0, _experiments.editorExperiment)('remix_button_right_margin_hover', true, {
127
+ exposure: true
128
+ })) {
127
129
  var closestBlock = target === null || target === void 0 ? void 0 : target.closest(BLOCK_SELECTORS);
128
130
  var blockElement = closestBlock instanceof HTMLElement ? closestBlock : null;
129
131
 
@@ -3,61 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getMatchingBlockMarks = exports.getActiveBlockMarks = void 0;
7
- var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
8
- /**
9
- * Remove this when platform_editor_clean_up_widget_mark_logic is cleaned up.
10
- *
11
- * Returns list of block marks on schema that widgets are allowed to render inside
12
- * Currently
13
- * - indent
14
- * - alignment
15
- * @param state - The editor state
16
- * @returns The block marks
17
- * @example
18
- * ```ts
19
- * const marks = getBlockMarks(state);
20
- * console.log(marks);
21
- * // [indent, alignment]
22
- * ```
23
- */
24
- var getActiveBlockMarks = exports.getActiveBlockMarks = function getActiveBlockMarks(state, pos) {
25
- var alignment = state.schema.marks.alignment;
26
- var resolvedPos = state.doc.resolve(pos);
27
-
28
- // find all active marks at the position
29
- var marks = resolvedPos.marks();
30
- var supportedMarks = marks.filter(function (mark) {
31
- return mark.type === alignment;
32
- });
33
-
34
- /**
35
- * Fix for widget positioning at alignment mark boundaries.
36
- * When the previous node has alignment but the next node doesn't, we need to prevent
37
- * the widget from inheriting alignment marks. This ensures the widget is positioned
38
- * correctly at the boundary rather than being absorbed into the alignment wrapper.
39
- */
40
- if (supportedMarks.length > 0 && (0, _expValEquals.expValEquals)('platform_editor_native_anchor_with_dnd', 'isEnabled', true)) {
41
- var _resolvedPos$nodeAfte;
42
- var nextNodeMarks = ((_resolvedPos$nodeAfte = resolvedPos.nodeAfter) === null || _resolvedPos$nodeAfte === void 0 ? void 0 : _resolvedPos$nodeAfte.marks.filter(function (mark) {
43
- return mark.type === alignment;
44
- })) || [];
45
-
46
- // Compare alignment values to ensure they are the same
47
- var alignmentValuesMatch = supportedMarks.length === nextNodeMarks.length && supportedMarks.some(function (mark) {
48
- return nextNodeMarks.some(function (nextMark) {
49
- return nextMark.eq(mark);
50
- });
51
- });
52
-
53
- // previous node has alignment but next node does not have alignment or alignment values differ
54
- if (nextNodeMarks.length === 0 || !alignmentValuesMatch) {
55
- return [];
56
- }
57
- }
58
- return supportedMarks;
59
- };
60
-
6
+ exports.getMatchingBlockMarks = void 0;
61
7
  /** True when `mark` has an equal counterpart (type + attrs) in `marks`. */
62
8
  var hasMatchingMark = function hasMatchingMark(mark, marks) {
63
9
  var found = mark.type.isInSet(marks);
@@ -41,6 +41,7 @@ var _selection = require("../pm-plugins/utils/selection");
41
41
  var _consts2 = require("./consts");
42
42
  var _dragHandleNestedIcon = require("./drag-handle-nested-icon");
43
43
  var _dragPreview = require("./drag-preview");
44
+ var _shouldUseNestedDragHandleIcon = require("./should-use-nested-drag-handle-icon");
44
45
  var _anchorName = require("./utils/anchor-name");
45
46
  var _domAttrName = require("./utils/dom-attr-name");
46
47
  var _visibilityContainer = require("./visibility-container");
@@ -370,6 +371,18 @@ var getNodeMargins = function getNodeMargins(node) {
370
371
  }
371
372
  return _consts2.nodeMargins[nodeTypeName] || _consts2.nodeMargins['default'];
372
373
  };
374
+
375
+ // Kill switch OFF: omit `isOpen` so the reducer toggles per clicked column. ON: keep
376
+ // `isOpen: true` for legacy always-open. Centralised so all dispatch sites stay in sync.
377
+ var buildToggleLayoutColumnMenuMeta = function buildToggleLayoutColumnMenuMeta(anchorPos, openedViaKeyboard) {
378
+ return _objectSpread(_objectSpread({
379
+ anchorPos: anchorPos
380
+ }, (0, _platformFeatureFlags.fg)('platform_editor_layout_column_menu_kill_switch_1') ? {
381
+ isOpen: true
382
+ } : {}), {}, {
383
+ openedViaKeyboard: openedViaKeyboard
384
+ });
385
+ };
373
386
  var DragHandle = exports.DragHandle = function DragHandle(_ref) {
374
387
  var _api$core4, _api$blockControls8;
375
388
  var view = _ref.view,
@@ -498,11 +511,7 @@ var DragHandle = exports.DragHandle = function DragHandle(_ref) {
498
511
  return tr;
499
512
  }
500
513
  if (nodeType === 'layoutColumn' && (0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_layout_column_menu', 'isEnabled', true)) {
501
- tr.setMeta('toggleLayoutColumnMenu', {
502
- anchorPos: startPos,
503
- isOpen: true,
504
- openedViaKeyboard: false
505
- });
514
+ tr.setMeta('toggleLayoutColumnMenu', buildToggleLayoutColumnMenuMeta(startPos, false));
506
515
  }
507
516
  var resolvedStartPos = tr.doc.resolve(startPos);
508
517
  var selection = ((_selectionPreservatio = _pluginKey.selectionPreservationPluginKey.getState(view.state)) === null || _selectionPreservatio === void 0 ? void 0 : _selectionPreservatio.preservedSelection) || tr.selection;
@@ -553,11 +562,7 @@ var DragHandle = exports.DragHandle = function DragHandle(_ref) {
553
562
  return tr;
554
563
  }
555
564
  if (nodeType === 'layoutColumn' && (0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_layout_column_menu', 'isEnabled', true)) {
556
- tr.setMeta('toggleLayoutColumnMenu', {
557
- anchorPos: startPos,
558
- isOpen: true,
559
- openedViaKeyboard: false
560
- });
565
+ tr.setMeta('toggleLayoutColumnMenu', buildToggleLayoutColumnMenuMeta(startPos, false));
561
566
  }
562
567
  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;
563
568
  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;
@@ -645,11 +650,7 @@ var DragHandle = exports.DragHandle = function DragHandle(_ref) {
645
650
  tr: tr
646
651
  });
647
652
  if (nodeType === 'layoutColumn' && (0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_layout_column_menu', 'isEnabled', true)) {
648
- tr.setMeta('toggleLayoutColumnMenu', {
649
- anchorPos: startPos,
650
- isOpen: true,
651
- openedViaKeyboard: true
652
- });
653
+ tr.setMeta('toggleLayoutColumnMenu', buildToggleLayoutColumnMenuMeta(startPos, true));
653
654
  }
654
655
  var rootPos = (0, _experiments.editorExperiment)('platform_synced_block', true) ? tr.doc.resolve(startPos).before(1) : undefined;
655
656
  var triggerByNode = (0, _experiments.editorExperiment)('platform_synced_block', true) ? {
@@ -1091,7 +1092,7 @@ var DragHandle = exports.DragHandle = function DragHandle(_ref) {
1091
1092
  // eslint-disable-next-line @atlaskit/design-system/no-direct-use-of-web-platform-drag-and-drop
1092
1093
  ,
1093
1094
  onDragStart: handleIconDragStart
1094
- }, (0, _expValEquals.expValEquals)('platform_editor_nested_drag_handle_icon', 'isEnabled', true) && !isTopLevelNodeValue ? (0, _react2.jsx)(_dragHandleNestedIcon.DragHandleNestedIcon, null) : (0, _react2.jsx)(_dragHandleVertical.default, {
1095
+ }, (0, _shouldUseNestedDragHandleIcon.shouldUseNestedDragHandleIcon)(isTopLevelNodeValue, isLayoutColumn) ? (0, _react2.jsx)(_dragHandleNestedIcon.DragHandleNestedIcon, null) : (0, _react2.jsx)(_dragHandleVertical.default, {
1095
1096
  spacing: "spacious",
1096
1097
  label: "",
1097
1098
  size: "small"
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.shouldUseNestedDragHandleIcon = void 0;
7
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
8
+ var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
9
+ // Nested icon for non-top-level nodes when the experiment is on. Exception: with the
10
+ // kill switch OFF, layout columns use the full block handle instead.
11
+ // TODO: EDITOR-7732 - remove this whole function when
12
+ // `platform_editor_layout_column_menu_kill_switch_1` is cleaned up
13
+ var shouldUseNestedDragHandleIcon = exports.shouldUseNestedDragHandleIcon = function shouldUseNestedDragHandleIcon(isTopLevelNode, isLayoutColumn) {
14
+ if (!(0, _expValEquals.expValEquals)('platform_editor_nested_drag_handle_icon', 'isEnabled', true)) {
15
+ return false;
16
+ }
17
+ if (isTopLevelNode) {
18
+ return false;
19
+ }
20
+ if (isLayoutColumn && !(0, _platformFeatureFlags.fg)('platform_editor_layout_column_menu_kill_switch_1')) {
21
+ return false;
22
+ }
23
+ return true;
24
+ };
@@ -10,7 +10,7 @@ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
10
10
  import { ACTIVE_DRAG_HANDLE_ATTR } from '../ui/consts';
11
11
  import { DragHandle, DragHandleWithVisibility } from '../ui/drag-handle';
12
12
  import { TYPE_HANDLE_DEC, TYPE_NODE_DEC, unmountDecorations } from './decorations-common';
13
- import { getActiveBlockMarks, getMatchingBlockMarks } from './utils/marks';
13
+ import { getMatchingBlockMarks } from './utils/marks';
14
14
  const TYPE_ACTIVE_HANDLE_DEC = 'active-drag-handle-node';
15
15
 
16
16
  /**
@@ -62,7 +62,7 @@ export const dragHandleDecoration = ({
62
62
  * Exclude 'breakout' on purpose, so the widgets render at the top of the document to avoid z-index issues
63
63
  * Other block marks must be added, otherwise PM will split the DOM elements causing mutations and re-draws
64
64
  */
65
- marks: expValEquals('platform_editor_small_font_size', 'isEnabled', true) ? getMatchingBlockMarks(editorState, pos, [editorState.schema.marks.alignment, editorState.schema.marks.fontSize]) : expValEquals('platform_editor_clean_up_widget_mark_logic', 'isEnabled', true) ? [] : getActiveBlockMarks(editorState, pos),
65
+ marks: expValEquals('platform_editor_small_font_size', 'isEnabled', true) ? getMatchingBlockMarks(editorState, pos, [editorState.schema.marks.alignment, editorState.schema.marks.fontSize]) : [],
66
66
  destroy: node => {
67
67
  unbind && unbind();
68
68
  }
@@ -71,7 +71,7 @@ export const dragHandleDecoration = ({
71
71
  type: TYPE_HANDLE_DEC,
72
72
  // eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead
73
73
  testid: `${TYPE_HANDLE_DEC}-${uuid()}`,
74
- marks: expValEquals('platform_editor_small_font_size', 'isEnabled', true) ? getMatchingBlockMarks(editorState, pos, [editorState.schema.marks.alignment, editorState.schema.marks.fontSize]) : expValEquals('platform_editor_clean_up_widget_mark_logic', 'isEnabled', true) ? [] : expValEquals('platform_editor_native_anchor_with_dnd', 'isEnabled', true) ? getActiveBlockMarks(editorState, pos) : undefined,
74
+ marks: expValEquals('platform_editor_small_font_size', 'isEnabled', true) ? getMatchingBlockMarks(editorState, pos, [editorState.schema.marks.alignment, editorState.schema.marks.fontSize]) : [],
75
75
  destroy: node => {
76
76
  unbind && unbind();
77
77
  }
@@ -7,7 +7,7 @@ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
7
7
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
8
8
  import { ACTIVE_QUICK_INSERT_ATTR } from '../ui/consts';
9
9
  import { QuickInsertWithVisibility } from '../ui/quick-insert-button';
10
- import { getActiveBlockMarks, getMatchingBlockMarks } from './utils/marks';
10
+ import { getMatchingBlockMarks } from './utils/marks';
11
11
  const TYPE_QUICK_INSERT = 'INSERT_BUTTON';
12
12
  const TYPE_ACTIVE_QUICK_INSERT_NODE = 'active-quick-insert-node';
13
13
  export const findQuickInsertInsertButtonDecoration = (decorations, from, to) => {
@@ -48,7 +48,7 @@ export const quickInsertButtonDecoration = ({
48
48
  * Other block marks must be added, otherwise PM will split the DOM elements causing mutations and re-draws
49
49
  */
50
50
 
51
- marks: expValEquals('platform_editor_small_font_size', 'isEnabled', true) ? getMatchingBlockMarks(editorState, rootPos, [editorState.schema.marks.alignment, editorState.schema.marks.fontSize]) : expValEquals('platform_editor_clean_up_widget_mark_logic', 'isEnabled', true) ? [] : getActiveBlockMarks(editorState, rootPos),
51
+ marks: expValEquals('platform_editor_small_font_size', 'isEnabled', true) ? getMatchingBlockMarks(editorState, rootPos, [editorState.schema.marks.alignment, editorState.schema.marks.fontSize]) : [],
52
52
  destroy: _ => {
53
53
  if (fg('platform_editor_fix_widget_destroy')) {
54
54
  nodeViewPortalProviderAPI.remove(key);
@@ -104,7 +104,9 @@ const processHoverSide = (view, api) => {
104
104
  }
105
105
 
106
106
  // Added right-margin hover, gated so it can be rolled back. When off, fall through to midpoint.
107
- if (editorExperiment('remix_button_right_margin_hover', true)) {
107
+ if (editorExperiment('remix_button_right_margin_hover', true, {
108
+ exposure: true
109
+ })) {
108
110
  const closestBlock = target === null || target === void 0 ? void 0 : target.closest(BLOCK_SELECTORS);
109
111
  const blockElement = closestBlock instanceof HTMLElement ? closestBlock : null;
110
112
 
@@ -1,52 +1,3 @@
1
- import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
2
-
3
- /**
4
- * Remove this when platform_editor_clean_up_widget_mark_logic is cleaned up.
5
- *
6
- * Returns list of block marks on schema that widgets are allowed to render inside
7
- * Currently
8
- * - indent
9
- * - alignment
10
- * @param state - The editor state
11
- * @returns The block marks
12
- * @example
13
- * ```ts
14
- * const marks = getBlockMarks(state);
15
- * console.log(marks);
16
- * // [indent, alignment]
17
- * ```
18
- */
19
- export const getActiveBlockMarks = (state, pos) => {
20
- const {
21
- alignment
22
- } = state.schema.marks;
23
- const resolvedPos = state.doc.resolve(pos);
24
-
25
- // find all active marks at the position
26
- const marks = resolvedPos.marks();
27
- const supportedMarks = marks.filter(mark => mark.type === alignment);
28
-
29
- /**
30
- * Fix for widget positioning at alignment mark boundaries.
31
- * When the previous node has alignment but the next node doesn't, we need to prevent
32
- * the widget from inheriting alignment marks. This ensures the widget is positioned
33
- * correctly at the boundary rather than being absorbed into the alignment wrapper.
34
- */
35
- if (supportedMarks.length > 0 && expValEquals('platform_editor_native_anchor_with_dnd', 'isEnabled', true)) {
36
- var _resolvedPos$nodeAfte;
37
- const nextNodeMarks = ((_resolvedPos$nodeAfte = resolvedPos.nodeAfter) === null || _resolvedPos$nodeAfte === void 0 ? void 0 : _resolvedPos$nodeAfte.marks.filter(mark => mark.type === alignment)) || [];
38
-
39
- // Compare alignment values to ensure they are the same
40
- const alignmentValuesMatch = supportedMarks.length === nextNodeMarks.length && supportedMarks.some(mark => nextNodeMarks.some(nextMark => nextMark.eq(mark)));
41
-
42
- // previous node has alignment but next node does not have alignment or alignment values differ
43
- if (nextNodeMarks.length === 0 || !alignmentValuesMatch) {
44
- return [];
45
- }
46
- }
47
- return supportedMarks;
48
- };
49
-
50
1
  /** True when `mark` has an equal counterpart (type + attrs) in `marks`. */
51
2
  const hasMatchingMark = (mark, marks) => {
52
3
  const found = mark.type.isInSet(marks);
@@ -38,6 +38,7 @@ import { alignAnchorHeadInDirectionOfPos, expandSelectionHeadToNodeAtPos } from
38
38
  import { ACTIVE_DRAG_HANDLE_ATTR, DRAG_HANDLE_BORDER_RADIUS, DRAG_HANDLE_HEIGHT, DRAG_HANDLE_MAX_SHIFT_CLICK_DEPTH, DRAG_HANDLE_ZINDEX, dragHandleGap, nodeMargins, spacingBetweenNodesForPreview, STICKY_CONTROLS_TOP_MARGIN, STICKY_CONTROLS_TOP_MARGIN_FOR_STICKY_HEADER, topPositionAdjustment } from './consts';
39
39
  import { DragHandleNestedIcon } from './drag-handle-nested-icon';
40
40
  import { dragPreview } from './drag-preview';
41
+ import { shouldUseNestedDragHandleIcon } from './should-use-nested-drag-handle-icon';
41
42
  import { refreshAnchorName } from './utils/anchor-name';
42
43
  import { getAnchorAttrName } from './utils/dom-attr-name';
43
44
  import { VisibilityContainer } from './visibility-container';
@@ -364,6 +365,16 @@ const getNodeMargins = node => {
364
365
  }
365
366
  return nodeMargins[nodeTypeName] || nodeMargins['default'];
366
367
  };
368
+
369
+ // Kill switch OFF: omit `isOpen` so the reducer toggles per clicked column. ON: keep
370
+ // `isOpen: true` for legacy always-open. Centralised so all dispatch sites stay in sync.
371
+ const buildToggleLayoutColumnMenuMeta = (anchorPos, openedViaKeyboard) => ({
372
+ anchorPos,
373
+ ...(fg('platform_editor_layout_column_menu_kill_switch_1') ? {
374
+ isOpen: true
375
+ } : {}),
376
+ openedViaKeyboard
377
+ });
367
378
  export const DragHandle = ({
368
379
  view,
369
380
  api,
@@ -473,11 +484,7 @@ export const DragHandle = ({
473
484
  return tr;
474
485
  }
475
486
  if (nodeType === 'layoutColumn' && expValEqualsNoExposure('platform_editor_layout_column_menu', 'isEnabled', true)) {
476
- tr.setMeta('toggleLayoutColumnMenu', {
477
- anchorPos: startPos,
478
- isOpen: true,
479
- openedViaKeyboard: false
480
- });
487
+ tr.setMeta('toggleLayoutColumnMenu', buildToggleLayoutColumnMenuMeta(startPos, false));
481
488
  }
482
489
  const resolvedStartPos = tr.doc.resolve(startPos);
483
490
  const selection = ((_selectionPreservatio = selectionPreservationPluginKey.getState(view.state)) === null || _selectionPreservatio === void 0 ? void 0 : _selectionPreservatio.preservedSelection) || tr.selection;
@@ -529,11 +536,7 @@ export const DragHandle = ({
529
536
  return tr;
530
537
  }
531
538
  if (nodeType === 'layoutColumn' && expValEqualsNoExposure('platform_editor_layout_column_menu', 'isEnabled', true)) {
532
- tr.setMeta('toggleLayoutColumnMenu', {
533
- anchorPos: startPos,
534
- isOpen: true,
535
- openedViaKeyboard: false
536
- });
539
+ tr.setMeta('toggleLayoutColumnMenu', buildToggleLayoutColumnMenuMeta(startPos, false));
537
540
  }
538
541
  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;
539
542
  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;
@@ -621,11 +624,7 @@ export const DragHandle = ({
621
624
  tr
622
625
  });
623
626
  if (nodeType === 'layoutColumn' && expValEqualsNoExposure('platform_editor_layout_column_menu', 'isEnabled', true)) {
624
- tr.setMeta('toggleLayoutColumnMenu', {
625
- anchorPos: startPos,
626
- isOpen: true,
627
- openedViaKeyboard: true
628
- });
627
+ tr.setMeta('toggleLayoutColumnMenu', buildToggleLayoutColumnMenuMeta(startPos, true));
629
628
  }
630
629
  const rootPos = editorExperiment('platform_synced_block', true) ? tr.doc.resolve(startPos).before(1) : undefined;
631
630
  const triggerByNode = editorExperiment('platform_synced_block', true) ? {
@@ -1073,7 +1072,7 @@ export const DragHandle = ({
1073
1072
  // eslint-disable-next-line @atlaskit/design-system/no-direct-use-of-web-platform-drag-and-drop
1074
1073
  ,
1075
1074
  onDragStart: handleIconDragStart
1076
- }, expValEquals('platform_editor_nested_drag_handle_icon', 'isEnabled', true) && !isTopLevelNodeValue ? jsx(DragHandleNestedIcon, null) : jsx(DragHandleVerticalIcon, {
1075
+ }, shouldUseNestedDragHandleIcon(isTopLevelNodeValue, isLayoutColumn) ? jsx(DragHandleNestedIcon, null) : jsx(DragHandleVerticalIcon, {
1077
1076
  spacing: "spacious",
1078
1077
  label: "",
1079
1078
  size: "small"
@@ -0,0 +1,19 @@
1
+ import { fg } from '@atlaskit/platform-feature-flags';
2
+ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
3
+
4
+ // Nested icon for non-top-level nodes when the experiment is on. Exception: with the
5
+ // kill switch OFF, layout columns use the full block handle instead.
6
+ // TODO: EDITOR-7732 - remove this whole function when
7
+ // `platform_editor_layout_column_menu_kill_switch_1` is cleaned up
8
+ export const shouldUseNestedDragHandleIcon = (isTopLevelNode, isLayoutColumn) => {
9
+ if (!expValEquals('platform_editor_nested_drag_handle_icon', 'isEnabled', true)) {
10
+ return false;
11
+ }
12
+ if (isTopLevelNode) {
13
+ return false;
14
+ }
15
+ if (isLayoutColumn && !fg('platform_editor_layout_column_menu_kill_switch_1')) {
16
+ return false;
17
+ }
18
+ return true;
19
+ };
@@ -11,7 +11,7 @@ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
11
11
  import { ACTIVE_DRAG_HANDLE_ATTR } from '../ui/consts';
12
12
  import { DragHandle, DragHandleWithVisibility } from '../ui/drag-handle';
13
13
  import { TYPE_HANDLE_DEC, TYPE_NODE_DEC, unmountDecorations } from './decorations-common';
14
- import { getActiveBlockMarks, getMatchingBlockMarks } from './utils/marks';
14
+ import { getMatchingBlockMarks } from './utils/marks';
15
15
  var TYPE_ACTIVE_HANDLE_DEC = 'active-drag-handle-node';
16
16
 
17
17
  /**
@@ -67,7 +67,7 @@ export var dragHandleDecoration = function dragHandleDecoration(_ref) {
67
67
  * Exclude 'breakout' on purpose, so the widgets render at the top of the document to avoid z-index issues
68
68
  * Other block marks must be added, otherwise PM will split the DOM elements causing mutations and re-draws
69
69
  */
70
- marks: expValEquals('platform_editor_small_font_size', 'isEnabled', true) ? getMatchingBlockMarks(editorState, pos, [editorState.schema.marks.alignment, editorState.schema.marks.fontSize]) : expValEquals('platform_editor_clean_up_widget_mark_logic', 'isEnabled', true) ? [] : getActiveBlockMarks(editorState, pos),
70
+ marks: expValEquals('platform_editor_small_font_size', 'isEnabled', true) ? getMatchingBlockMarks(editorState, pos, [editorState.schema.marks.alignment, editorState.schema.marks.fontSize]) : [],
71
71
  destroy: function destroy(node) {
72
72
  unbind && unbind();
73
73
  }
@@ -76,7 +76,7 @@ export var dragHandleDecoration = function dragHandleDecoration(_ref) {
76
76
  type: TYPE_HANDLE_DEC,
77
77
  // eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead
78
78
  testid: "".concat(TYPE_HANDLE_DEC, "-").concat(uuid()),
79
- marks: expValEquals('platform_editor_small_font_size', 'isEnabled', true) ? getMatchingBlockMarks(editorState, pos, [editorState.schema.marks.alignment, editorState.schema.marks.fontSize]) : expValEquals('platform_editor_clean_up_widget_mark_logic', 'isEnabled', true) ? [] : expValEquals('platform_editor_native_anchor_with_dnd', 'isEnabled', true) ? getActiveBlockMarks(editorState, pos) : undefined,
79
+ marks: expValEquals('platform_editor_small_font_size', 'isEnabled', true) ? getMatchingBlockMarks(editorState, pos, [editorState.schema.marks.alignment, editorState.schema.marks.fontSize]) : [],
80
80
  destroy: function destroy(node) {
81
81
  unbind && unbind();
82
82
  }
@@ -8,7 +8,7 @@ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
8
8
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
9
9
  import { ACTIVE_QUICK_INSERT_ATTR } from '../ui/consts';
10
10
  import { QuickInsertWithVisibility } from '../ui/quick-insert-button';
11
- import { getActiveBlockMarks, getMatchingBlockMarks } from './utils/marks';
11
+ import { getMatchingBlockMarks } from './utils/marks';
12
12
  var TYPE_QUICK_INSERT = 'INSERT_BUTTON';
13
13
  var TYPE_ACTIVE_QUICK_INSERT_NODE = 'active-quick-insert-node';
14
14
  export var findQuickInsertInsertButtonDecoration = function findQuickInsertInsertButtonDecoration(decorations, from, to) {
@@ -54,7 +54,7 @@ export var quickInsertButtonDecoration = function quickInsertButtonDecoration(_r
54
54
  * Other block marks must be added, otherwise PM will split the DOM elements causing mutations and re-draws
55
55
  */
56
56
 
57
- marks: expValEquals('platform_editor_small_font_size', 'isEnabled', true) ? getMatchingBlockMarks(editorState, rootPos, [editorState.schema.marks.alignment, editorState.schema.marks.fontSize]) : expValEquals('platform_editor_clean_up_widget_mark_logic', 'isEnabled', true) ? [] : getActiveBlockMarks(editorState, rootPos),
57
+ marks: expValEquals('platform_editor_small_font_size', 'isEnabled', true) ? getMatchingBlockMarks(editorState, rootPos, [editorState.schema.marks.alignment, editorState.schema.marks.fontSize]) : [],
58
58
  destroy: function destroy(_) {
59
59
  if (fg('platform_editor_fix_widget_destroy')) {
60
60
  nodeViewPortalProviderAPI.remove(key);
@@ -118,7 +118,9 @@ var processHoverSide = function processHoverSide(view, api) {
118
118
  }
119
119
 
120
120
  // Added right-margin hover, gated so it can be rolled back. When off, fall through to midpoint.
121
- if (editorExperiment('remix_button_right_margin_hover', true)) {
121
+ if (editorExperiment('remix_button_right_margin_hover', true, {
122
+ exposure: true
123
+ })) {
122
124
  var closestBlock = target === null || target === void 0 ? void 0 : target.closest(BLOCK_SELECTORS);
123
125
  var blockElement = closestBlock instanceof HTMLElement ? closestBlock : null;
124
126
 
@@ -1,58 +1,3 @@
1
- import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
2
-
3
- /**
4
- * Remove this when platform_editor_clean_up_widget_mark_logic is cleaned up.
5
- *
6
- * Returns list of block marks on schema that widgets are allowed to render inside
7
- * Currently
8
- * - indent
9
- * - alignment
10
- * @param state - The editor state
11
- * @returns The block marks
12
- * @example
13
- * ```ts
14
- * const marks = getBlockMarks(state);
15
- * console.log(marks);
16
- * // [indent, alignment]
17
- * ```
18
- */
19
- export var getActiveBlockMarks = function getActiveBlockMarks(state, pos) {
20
- var alignment = state.schema.marks.alignment;
21
- var resolvedPos = state.doc.resolve(pos);
22
-
23
- // find all active marks at the position
24
- var marks = resolvedPos.marks();
25
- var supportedMarks = marks.filter(function (mark) {
26
- return mark.type === alignment;
27
- });
28
-
29
- /**
30
- * Fix for widget positioning at alignment mark boundaries.
31
- * When the previous node has alignment but the next node doesn't, we need to prevent
32
- * the widget from inheriting alignment marks. This ensures the widget is positioned
33
- * correctly at the boundary rather than being absorbed into the alignment wrapper.
34
- */
35
- if (supportedMarks.length > 0 && expValEquals('platform_editor_native_anchor_with_dnd', 'isEnabled', true)) {
36
- var _resolvedPos$nodeAfte;
37
- var nextNodeMarks = ((_resolvedPos$nodeAfte = resolvedPos.nodeAfter) === null || _resolvedPos$nodeAfte === void 0 ? void 0 : _resolvedPos$nodeAfte.marks.filter(function (mark) {
38
- return mark.type === alignment;
39
- })) || [];
40
-
41
- // Compare alignment values to ensure they are the same
42
- var alignmentValuesMatch = supportedMarks.length === nextNodeMarks.length && supportedMarks.some(function (mark) {
43
- return nextNodeMarks.some(function (nextMark) {
44
- return nextMark.eq(mark);
45
- });
46
- });
47
-
48
- // previous node has alignment but next node does not have alignment or alignment values differ
49
- if (nextNodeMarks.length === 0 || !alignmentValuesMatch) {
50
- return [];
51
- }
52
- }
53
- return supportedMarks;
54
- };
55
-
56
1
  /** True when `mark` has an equal counterpart (type + attrs) in `marks`. */
57
2
  var hasMatchingMark = function hasMatchingMark(mark, marks) {
58
3
  var found = mark.type.isInSet(marks);
@@ -43,6 +43,7 @@ import { alignAnchorHeadInDirectionOfPos, expandSelectionHeadToNodeAtPos } from
43
43
  import { ACTIVE_DRAG_HANDLE_ATTR, DRAG_HANDLE_BORDER_RADIUS, DRAG_HANDLE_HEIGHT, DRAG_HANDLE_MAX_SHIFT_CLICK_DEPTH, DRAG_HANDLE_ZINDEX, dragHandleGap, nodeMargins, spacingBetweenNodesForPreview, STICKY_CONTROLS_TOP_MARGIN, STICKY_CONTROLS_TOP_MARGIN_FOR_STICKY_HEADER, topPositionAdjustment } from './consts';
44
44
  import { DragHandleNestedIcon } from './drag-handle-nested-icon';
45
45
  import { dragPreview } from './drag-preview';
46
+ import { shouldUseNestedDragHandleIcon } from './should-use-nested-drag-handle-icon';
46
47
  import { refreshAnchorName } from './utils/anchor-name';
47
48
  import { getAnchorAttrName } from './utils/dom-attr-name';
48
49
  import { VisibilityContainer } from './visibility-container';
@@ -366,6 +367,18 @@ var getNodeMargins = function getNodeMargins(node) {
366
367
  }
367
368
  return nodeMargins[nodeTypeName] || nodeMargins['default'];
368
369
  };
370
+
371
+ // Kill switch OFF: omit `isOpen` so the reducer toggles per clicked column. ON: keep
372
+ // `isOpen: true` for legacy always-open. Centralised so all dispatch sites stay in sync.
373
+ var buildToggleLayoutColumnMenuMeta = function buildToggleLayoutColumnMenuMeta(anchorPos, openedViaKeyboard) {
374
+ return _objectSpread(_objectSpread({
375
+ anchorPos: anchorPos
376
+ }, fg('platform_editor_layout_column_menu_kill_switch_1') ? {
377
+ isOpen: true
378
+ } : {}), {}, {
379
+ openedViaKeyboard: openedViaKeyboard
380
+ });
381
+ };
369
382
  export var DragHandle = function DragHandle(_ref) {
370
383
  var _api$core4, _api$blockControls8;
371
384
  var view = _ref.view,
@@ -494,11 +507,7 @@ export var DragHandle = function DragHandle(_ref) {
494
507
  return tr;
495
508
  }
496
509
  if (nodeType === 'layoutColumn' && expValEqualsNoExposure('platform_editor_layout_column_menu', 'isEnabled', true)) {
497
- tr.setMeta('toggleLayoutColumnMenu', {
498
- anchorPos: startPos,
499
- isOpen: true,
500
- openedViaKeyboard: false
501
- });
510
+ tr.setMeta('toggleLayoutColumnMenu', buildToggleLayoutColumnMenuMeta(startPos, false));
502
511
  }
503
512
  var resolvedStartPos = tr.doc.resolve(startPos);
504
513
  var selection = ((_selectionPreservatio = selectionPreservationPluginKey.getState(view.state)) === null || _selectionPreservatio === void 0 ? void 0 : _selectionPreservatio.preservedSelection) || tr.selection;
@@ -549,11 +558,7 @@ export var DragHandle = function DragHandle(_ref) {
549
558
  return tr;
550
559
  }
551
560
  if (nodeType === 'layoutColumn' && expValEqualsNoExposure('platform_editor_layout_column_menu', 'isEnabled', true)) {
552
- tr.setMeta('toggleLayoutColumnMenu', {
553
- anchorPos: startPos,
554
- isOpen: true,
555
- openedViaKeyboard: false
556
- });
561
+ tr.setMeta('toggleLayoutColumnMenu', buildToggleLayoutColumnMenuMeta(startPos, false));
557
562
  }
558
563
  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;
559
564
  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;
@@ -641,11 +646,7 @@ export var DragHandle = function DragHandle(_ref) {
641
646
  tr: tr
642
647
  });
643
648
  if (nodeType === 'layoutColumn' && expValEqualsNoExposure('platform_editor_layout_column_menu', 'isEnabled', true)) {
644
- tr.setMeta('toggleLayoutColumnMenu', {
645
- anchorPos: startPos,
646
- isOpen: true,
647
- openedViaKeyboard: true
648
- });
649
+ tr.setMeta('toggleLayoutColumnMenu', buildToggleLayoutColumnMenuMeta(startPos, true));
649
650
  }
650
651
  var rootPos = editorExperiment('platform_synced_block', true) ? tr.doc.resolve(startPos).before(1) : undefined;
651
652
  var triggerByNode = editorExperiment('platform_synced_block', true) ? {
@@ -1087,7 +1088,7 @@ export var DragHandle = function DragHandle(_ref) {
1087
1088
  // eslint-disable-next-line @atlaskit/design-system/no-direct-use-of-web-platform-drag-and-drop
1088
1089
  ,
1089
1090
  onDragStart: handleIconDragStart
1090
- }, expValEquals('platform_editor_nested_drag_handle_icon', 'isEnabled', true) && !isTopLevelNodeValue ? jsx(DragHandleNestedIcon, null) : jsx(DragHandleVerticalIcon, {
1091
+ }, shouldUseNestedDragHandleIcon(isTopLevelNodeValue, isLayoutColumn) ? jsx(DragHandleNestedIcon, null) : jsx(DragHandleVerticalIcon, {
1091
1092
  spacing: "spacious",
1092
1093
  label: "",
1093
1094
  size: "small"
@@ -0,0 +1,19 @@
1
+ import { fg } from '@atlaskit/platform-feature-flags';
2
+ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
3
+
4
+ // Nested icon for non-top-level nodes when the experiment is on. Exception: with the
5
+ // kill switch OFF, layout columns use the full block handle instead.
6
+ // TODO: EDITOR-7732 - remove this whole function when
7
+ // `platform_editor_layout_column_menu_kill_switch_1` is cleaned up
8
+ export var shouldUseNestedDragHandleIcon = function shouldUseNestedDragHandleIcon(isTopLevelNode, isLayoutColumn) {
9
+ if (!expValEquals('platform_editor_nested_drag_handle_icon', 'isEnabled', true)) {
10
+ return false;
11
+ }
12
+ if (isTopLevelNode) {
13
+ return false;
14
+ }
15
+ if (isLayoutColumn && !fg('platform_editor_layout_column_menu_kill_switch_1')) {
16
+ return false;
17
+ }
18
+ return true;
19
+ };
@@ -1,22 +1,5 @@
1
1
  import type { Mark, MarkType } from '@atlaskit/editor-prosemirror/model';
2
2
  import type { EditorState } from '@atlaskit/editor-prosemirror/state';
3
- /**
4
- * Remove this when platform_editor_clean_up_widget_mark_logic is cleaned up.
5
- *
6
- * Returns list of block marks on schema that widgets are allowed to render inside
7
- * Currently
8
- * - indent
9
- * - alignment
10
- * @param state - The editor state
11
- * @returns The block marks
12
- * @example
13
- * ```ts
14
- * const marks = getBlockMarks(state);
15
- * console.log(marks);
16
- * // [indent, alignment]
17
- * ```
18
- */
19
- export declare const getActiveBlockMarks: (state: EditorState, pos: number) => Mark[];
20
3
  /**
21
4
  * Returns supported block marks at `pos` only when both adjacent siblings
22
5
  * share the exact same set of those marks. Returns `[]` when they differ,
@@ -0,0 +1 @@
1
+ export declare const shouldUseNestedDragHandleIcon: (isTopLevelNode: boolean, isLayoutColumn: boolean) => boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-block-controls",
3
- "version": "13.0.6",
3
+ "version": "13.1.0",
4
4
  "description": "Block controls plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -27,20 +27,20 @@
27
27
  "@atlaskit/editor-plugin-editor-disabled": "^12.0.0",
28
28
  "@atlaskit/editor-plugin-editor-viewmode": "^14.0.0",
29
29
  "@atlaskit/editor-plugin-feature-flags": "^11.0.0",
30
- "@atlaskit/editor-plugin-interaction": "^21.0.0",
30
+ "@atlaskit/editor-plugin-interaction": "^22.0.0",
31
31
  "@atlaskit/editor-plugin-limited-mode": "^9.0.0",
32
32
  "@atlaskit/editor-plugin-metrics": "^13.0.0",
33
33
  "@atlaskit/editor-plugin-quick-insert": "^12.0.0",
34
34
  "@atlaskit/editor-plugin-selection": "^12.0.0",
35
35
  "@atlaskit/editor-plugin-toolbar": "^9.0.0",
36
- "@atlaskit/editor-plugin-type-ahead": "^12.0.0",
36
+ "@atlaskit/editor-plugin-type-ahead": "^12.1.0",
37
37
  "@atlaskit/editor-plugin-user-intent": "^10.0.0",
38
38
  "@atlaskit/editor-plugin-width": "^13.0.0",
39
39
  "@atlaskit/editor-prosemirror": "^8.0.0",
40
40
  "@atlaskit/editor-shared-styles": "^4.0.0",
41
41
  "@atlaskit/editor-tables": "^3.0.0",
42
42
  "@atlaskit/icon": "^36.0.0",
43
- "@atlaskit/icon-lab": "^7.0.0",
43
+ "@atlaskit/icon-lab": "^7.1.0",
44
44
  "@atlaskit/link": "^4.0.0",
45
45
  "@atlaskit/platform-feature-flags": "^2.0.0",
46
46
  "@atlaskit/pragmatic-drag-and-drop": "^2.0.0",
@@ -48,8 +48,8 @@
48
48
  "@atlaskit/pragmatic-drag-and-drop-react-drop-indicator": "^4.0.0",
49
49
  "@atlaskit/primitives": "^20.0.0",
50
50
  "@atlaskit/theme": "^26.0.0",
51
- "@atlaskit/tmp-editor-statsig": "^109.1.0",
52
- "@atlaskit/tokens": "^14.0.0",
51
+ "@atlaskit/tmp-editor-statsig": "^111.0.0",
52
+ "@atlaskit/tokens": "^15.0.0",
53
53
  "@atlaskit/tooltip": "^23.0.0",
54
54
  "@babel/runtime": "^7.0.0",
55
55
  "@emotion/react": "^11.7.1",
@@ -59,7 +59,7 @@
59
59
  "uuid": "^3.1.0"
60
60
  },
61
61
  "peerDependencies": {
62
- "@atlaskit/editor-common": "^116.8.0",
62
+ "@atlaskit/editor-common": "^116.11.0",
63
63
  "react": "^18.2.0",
64
64
  "react-dom": "^18.2.0",
65
65
  "react-intl": "^5.25.1 || ^6.0.0 || ^7.0.0"
@@ -141,12 +141,16 @@
141
141
  },
142
142
  "confluence_frontend_native_tabs_extension": {
143
143
  "type": "boolean"
144
+ },
145
+ "platform_editor_layout_column_menu_kill_switch_1": {
146
+ "type": "boolean",
147
+ "referenceOnly": true
144
148
  }
145
149
  },
146
150
  "devDependencies": {
147
151
  "@atlassian/structured-docs-types": "workspace:^",
148
152
  "react": "^18.2.0",
149
153
  "react-dom": "^18.2.0",
150
- "react-intl": "^6.6.2"
154
+ "react-intl": "^7.0.0"
151
155
  }
152
156
  }