@atlaskit/editor-plugin-layout 10.5.0 → 10.6.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.
Files changed (52) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/cjs/layoutPlugin.js +4 -1
  3. package/dist/cjs/pm-plugins/actions.js +87 -64
  4. package/dist/cjs/pm-plugins/main.js +4 -2
  5. package/dist/cjs/pm-plugins/utils/layout-column-selection.js +128 -0
  6. package/dist/cjs/ui/LayoutColumnMenu/DeleteColumnDropdownItem.js +7 -4
  7. package/dist/cjs/ui/LayoutColumnMenu/InsertColumnDropdownItem.js +5 -6
  8. package/dist/cjs/ui/LayoutColumnMenu/VerticalAlignDropdownItem.js +9 -7
  9. package/dist/cjs/ui/LayoutColumnMenu/VerticalAlignNestedMenu.js +15 -6
  10. package/dist/cjs/ui/LayoutColumnMenu/index.js +17 -7
  11. package/dist/cjs/ui/LayoutColumnMenu/useSelectedLayoutColumns.js +14 -0
  12. package/dist/es2019/layoutPlugin.js +4 -1
  13. package/dist/es2019/pm-plugins/actions.js +73 -58
  14. package/dist/es2019/pm-plugins/main.js +4 -2
  15. package/dist/es2019/pm-plugins/utils/layout-column-selection.js +118 -0
  16. package/dist/es2019/ui/LayoutColumnMenu/DeleteColumnDropdownItem.js +7 -4
  17. package/dist/es2019/ui/LayoutColumnMenu/InsertColumnDropdownItem.js +5 -6
  18. package/dist/es2019/ui/LayoutColumnMenu/VerticalAlignDropdownItem.js +9 -6
  19. package/dist/es2019/ui/LayoutColumnMenu/VerticalAlignNestedMenu.js +15 -5
  20. package/dist/es2019/ui/LayoutColumnMenu/index.js +16 -6
  21. package/dist/es2019/ui/LayoutColumnMenu/useSelectedLayoutColumns.js +6 -0
  22. package/dist/esm/layoutPlugin.js +5 -2
  23. package/dist/esm/pm-plugins/actions.js +87 -64
  24. package/dist/esm/pm-plugins/main.js +4 -2
  25. package/dist/esm/pm-plugins/utils/layout-column-selection.js +122 -0
  26. package/dist/esm/ui/LayoutColumnMenu/DeleteColumnDropdownItem.js +7 -4
  27. package/dist/esm/ui/LayoutColumnMenu/InsertColumnDropdownItem.js +5 -6
  28. package/dist/esm/ui/LayoutColumnMenu/VerticalAlignDropdownItem.js +10 -8
  29. package/dist/esm/ui/LayoutColumnMenu/VerticalAlignNestedMenu.js +15 -6
  30. package/dist/esm/ui/LayoutColumnMenu/index.js +17 -7
  31. package/dist/esm/ui/LayoutColumnMenu/useSelectedLayoutColumns.js +8 -0
  32. package/dist/types/layoutPluginType.d.ts +1 -1
  33. package/dist/types/pm-plugins/actions.d.ts +3 -2
  34. package/dist/types/pm-plugins/types.d.ts +1 -0
  35. package/dist/types/pm-plugins/utils/layout-column-selection.d.ts +18 -0
  36. package/dist/types/ui/LayoutColumnMenu/useSelectedLayoutColumns.d.ts +4 -0
  37. package/dist/types-ts4.5/layoutPluginType.d.ts +1 -1
  38. package/dist/types-ts4.5/pm-plugins/actions.d.ts +3 -2
  39. package/dist/types-ts4.5/pm-plugins/types.d.ts +1 -0
  40. package/dist/types-ts4.5/pm-plugins/utils/layout-column-selection.d.ts +18 -0
  41. package/dist/types-ts4.5/ui/LayoutColumnMenu/useSelectedLayoutColumns.d.ts +4 -0
  42. package/package.json +3 -3
  43. package/dist/cjs/ui/LayoutColumnMenu/layoutColumnSelection.js +0 -21
  44. package/dist/cjs/ui/LayoutColumnMenu/useCurrentLayoutColumn.js +0 -20
  45. package/dist/es2019/ui/LayoutColumnMenu/layoutColumnSelection.js +0 -9
  46. package/dist/es2019/ui/LayoutColumnMenu/useCurrentLayoutColumn.js +0 -10
  47. package/dist/esm/ui/LayoutColumnMenu/layoutColumnSelection.js +0 -15
  48. package/dist/esm/ui/LayoutColumnMenu/useCurrentLayoutColumn.js +0 -14
  49. package/dist/types/ui/LayoutColumnMenu/layoutColumnSelection.d.ts +0 -7
  50. package/dist/types/ui/LayoutColumnMenu/useCurrentLayoutColumn.d.ts +0 -5
  51. package/dist/types-ts4.5/ui/LayoutColumnMenu/layoutColumnSelection.d.ts +0 -7
  52. package/dist/types-ts4.5/ui/LayoutColumnMenu/useCurrentLayoutColumn.d.ts +0 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # @atlaskit/editor-plugin-layout
2
2
 
3
+ ## 10.6.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`71eaad00529a1`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/71eaad00529a1) -
8
+ Support multi-column layout column menu selections
9
+
10
+ ### Patch Changes
11
+
12
+ - Updated dependencies
13
+
3
14
  ## 10.5.0
4
15
 
5
16
  ### Minor Changes
@@ -385,7 +385,10 @@ var layoutPlugin = exports.layoutPlugin = function layoutPlugin(_ref) {
385
385
  var _api$analytics5;
386
386
  return (0, _actions.insertLayoutColumn)(side, api === null || api === void 0 || (_api$analytics5 = api.analytics) === null || _api$analytics5 === void 0 ? void 0 : _api$analytics5.actions);
387
387
  },
388
- setLayoutColumnValign: _actions.setLayoutColumnValign,
388
+ setLayoutColumnValign: function setLayoutColumnValign(valign) {
389
+ var _api$analytics6;
390
+ return (0, _actions.setLayoutColumnValign)(valign, api === null || api === void 0 || (_api$analytics6 = api.analytics) === null || _api$analytics6 === void 0 ? void 0 : _api$analytics6.actions);
391
+ },
389
392
  toggleLayoutColumnMenu: _actions.toggleLayoutColumnMenu
390
393
  }
391
394
  };
@@ -20,6 +20,7 @@ var _expValEqualsNoExposure = require("@atlaskit/tmp-editor-statsig/exp-val-equa
20
20
  var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
21
21
  var _consts = require("./consts");
22
22
  var _pluginKey = require("./plugin-key");
23
+ var _layoutColumnSelection = require("./utils/layout-column-selection");
23
24
  var _redistributeProportionally = require("./utils/redistribute-proportionally");
24
25
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
25
26
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -557,44 +558,24 @@ var formatLayoutName = function formatLayoutName(layout) {
557
558
  function getEffectiveMaxLayoutColumns() {
558
559
  return (0, _experiments.editorExperiment)('advanced_layouts', true) ? _consts.MAX_LAYOUT_COLUMNS : _consts.MAX_STANDARD_LAYOUT_COLUMNS;
559
560
  }
560
- var getSelectedLayoutColumnInSection = function getSelectedLayoutColumnInSection(_ref4) {
561
- var doc = _ref4.doc,
562
- selection = _ref4.selection;
563
- var _doc$type$schema$node = doc.type.schema.nodes,
564
- layoutColumn = _doc$type$schema$node.layoutColumn,
565
- layoutSection = _doc$type$schema$node.layoutSection;
566
- if (!(selection instanceof _state.NodeSelection) || selection.node.type !== layoutColumn) {
567
- return;
568
- }
569
- var $from = selection.$from;
570
- if ($from.parent.type !== layoutSection) {
571
- return;
572
- }
573
- var selectedColumnIndex = $from.index($from.depth);
574
- var selectedColumnNode = selection.node;
575
- var selectedColumnPos = selection.from;
576
- var layoutSectionPos = $from.before($from.depth);
577
- return {
578
- layoutSectionNode: $from.parent,
579
- layoutSectionPos: layoutSectionPos,
580
- selectedColumnIndex: selectedColumnIndex,
581
- selectedColumnNode: selectedColumnNode,
582
- selectedColumnPos: selectedColumnPos
583
- };
584
- };
585
561
  var insertLayoutColumnAt = function insertLayoutColumnAt(side, editorAnalyticsAPI) {
586
- return function (_ref5) {
587
- var tr = _ref5.tr;
562
+ return function (_ref4) {
563
+ var tr = _ref4.tr;
588
564
  if (!(0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_layout_column_menu', 'isEnabled', true)) {
589
565
  return null;
590
566
  }
591
- var selectedColumn = getSelectedLayoutColumnInSection(tr);
592
- if (!selectedColumn) {
567
+ var selectedLayoutColumns = (0, _layoutColumnSelection.getSelectedLayoutColumns)(tr.selection);
568
+ if (!selectedLayoutColumns) {
593
569
  return null;
594
570
  }
595
- var layoutSectionNode = selectedColumn.layoutSectionNode,
596
- layoutSectionPos = selectedColumn.layoutSectionPos,
597
- selectedColumnIndex = selectedColumn.selectedColumnIndex;
571
+ var layoutSectionNode = selectedLayoutColumns.layoutSectionNode,
572
+ layoutSectionPos = selectedLayoutColumns.layoutSectionPos,
573
+ selectedColumnIndices = selectedLayoutColumns.selectedColumnIndices,
574
+ selectedColumns = selectedLayoutColumns.selectedColumns;
575
+ var startIndex = selectedColumnIndices[0];
576
+ var endIndex = selectedColumnIndices[selectedColumnIndices.length - 1];
577
+ var selectedColumnIndex = side === 'left' ? startIndex : endIndex;
578
+ var selectedColumnCount = selectedColumns.length;
598
579
  if (layoutSectionNode.childCount >= getEffectiveMaxLayoutColumns()) {
599
580
  return null;
600
581
  }
@@ -631,9 +612,11 @@ var insertLayoutColumnAt = function insertLayoutColumnAt(side, editorAnalyticsAP
631
612
  actionSubjectId: _analytics.ACTION_SUBJECT_ID.LAYOUT_COLUMN,
632
613
  attributes: {
633
614
  columnCount: redistributedWidths.length,
615
+ endIndex: endIndex,
634
616
  inputMethod: _analytics.INPUT_METHOD.LAYOUT_COLUMN_MENU,
635
- selectedIndex: selectedColumnIndex,
636
- side: side
617
+ selectedCount: selectedColumnCount,
618
+ side: side,
619
+ startIndex: startIndex
637
620
  },
638
621
  eventType: _analytics.EVENT_TYPE.TRACK
639
622
  })(tr);
@@ -644,35 +627,61 @@ var insertLayoutColumnAt = function insertLayoutColumnAt(side, editorAnalyticsAP
644
627
  var insertLayoutColumn = exports.insertLayoutColumn = function insertLayoutColumn(side, editorAnalyticsAPI) {
645
628
  return insertLayoutColumnAt(side, editorAnalyticsAPI);
646
629
  };
647
- var setLayoutColumnValign = exports.setLayoutColumnValign = function setLayoutColumnValign(valign) {
648
- return function (_ref6) {
649
- var tr = _ref6.tr;
630
+ var setLayoutColumnValign = exports.setLayoutColumnValign = function setLayoutColumnValign(valign, editorAnalyticsAPI) {
631
+ return function (_ref5) {
632
+ var tr = _ref5.tr;
650
633
  if (!(0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_layout_column_menu', 'isEnabled', true)) {
651
634
  return null;
652
635
  }
653
- var layoutColumn = tr.doc.type.schema.nodes.layoutColumn;
654
- var selectedColumn = tr.selection instanceof _state.NodeSelection && tr.selection.node.type === layoutColumn ? {
655
- node: tr.selection.node,
656
- pos: tr.selection.from
657
- } : undefined;
658
- if (!selectedColumn) {
636
+ var selectedLayoutColumns = (0, _layoutColumnSelection.getSelectedLayoutColumns)(tr.selection);
637
+ if (!selectedLayoutColumns) {
659
638
  return null;
660
639
  }
661
- if (selectedColumn.node.attrs.valign === valign) {
640
+ var selectedColumnIndices = selectedLayoutColumns.selectedColumnIndices,
641
+ selectedColumns = selectedLayoutColumns.selectedColumns;
642
+ var columnsToUpdate = selectedColumns.filter(function (_ref6) {
643
+ var node = _ref6.node;
644
+ return node.attrs.valign !== valign;
645
+ });
646
+ if (columnsToUpdate.length === 0) {
662
647
  return null;
663
648
  }
664
- tr.setNodeMarkup(selectedColumn.pos, selectedColumn.node.type, _objectSpread(_objectSpread({}, selectedColumn.node.attrs), {}, {
665
- valign: valign
666
- }));
649
+ var startIndex = selectedColumnIndices[0];
650
+ var endIndex = selectedColumnIndices[selectedColumnIndices.length - 1];
651
+ var selectedColumnCount = selectedColumns.length;
652
+ var updatedColumnCount = columnsToUpdate.length;
653
+ columnsToUpdate.forEach(function (_ref7) {
654
+ var node = _ref7.node,
655
+ pos = _ref7.pos;
656
+ tr.setNodeMarkup(pos, node.type, _objectSpread(_objectSpread({}, node.attrs), {}, {
657
+ valign: valign
658
+ }));
659
+ });
660
+ editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({
661
+ action: _analytics.ACTION.UPDATED,
662
+ actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT,
663
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.LAYOUT_COLUMN,
664
+ attributes: {
665
+ endIndex: endIndex,
666
+ inputMethod: _analytics.INPUT_METHOD.LAYOUT_COLUMN_MENU,
667
+ selectedCount: selectedColumnCount,
668
+ startIndex: startIndex,
669
+ updatedCount: updatedColumnCount,
670
+ valign: valign
671
+ },
672
+ eventType: _analytics.EVENT_TYPE.TRACK
673
+ })(tr);
667
674
  tr.setMeta('scrollIntoView', false);
668
675
  return tr;
669
676
  };
670
677
  };
671
- var toggleLayoutColumnMenu = exports.toggleLayoutColumnMenu = function toggleLayoutColumnMenu(_ref7) {
672
- var isOpen = _ref7.isOpen;
673
- return function (_ref8) {
674
- var tr = _ref8.tr;
678
+ var toggleLayoutColumnMenu = exports.toggleLayoutColumnMenu = function toggleLayoutColumnMenu(_ref8) {
679
+ var anchorPos = _ref8.anchorPos,
680
+ isOpen = _ref8.isOpen;
681
+ return function (_ref9) {
682
+ var tr = _ref9.tr;
675
683
  tr.setMeta('toggleLayoutColumnMenu', {
684
+ anchorPos: anchorPos,
676
685
  isOpen: isOpen
677
686
  });
678
687
  tr.setMeta('scrollIntoView', false);
@@ -680,18 +689,23 @@ var toggleLayoutColumnMenu = exports.toggleLayoutColumnMenu = function toggleLay
680
689
  };
681
690
  };
682
691
  var deleteLayoutColumn = exports.deleteLayoutColumn = function deleteLayoutColumn(editorAnalyticsAPI) {
683
- return function (_ref9) {
684
- var tr = _ref9.tr;
692
+ return function (_ref0) {
693
+ var tr = _ref0.tr;
685
694
  if (!(0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_layout_column_menu', 'isEnabled', true)) {
686
695
  return null;
687
696
  }
688
- var selectedColumn = getSelectedLayoutColumnInSection(tr);
689
- if (!selectedColumn) {
697
+ var selectedLayoutColumns = (0, _layoutColumnSelection.getSelectedLayoutColumns)(tr.selection);
698
+ if (!selectedLayoutColumns) {
690
699
  return null;
691
700
  }
692
- var layoutSectionNode = selectedColumn.layoutSectionNode,
693
- layoutSectionPos = selectedColumn.layoutSectionPos,
694
- selectedColumnIndex = selectedColumn.selectedColumnIndex;
701
+ var layoutSectionNode = selectedLayoutColumns.layoutSectionNode,
702
+ layoutSectionPos = selectedLayoutColumns.layoutSectionPos,
703
+ selectedColumnIndices = selectedLayoutColumns.selectedColumnIndices,
704
+ selectedColumns = selectedLayoutColumns.selectedColumns;
705
+ var startIndex = selectedColumnIndices[0];
706
+ var endIndex = selectedColumnIndices[selectedColumnIndices.length - 1];
707
+ var selectedColumnCount = selectedColumns.length;
708
+ var selectedColumnIndexSet = new Set(selectedColumnIndices);
695
709
  var emitDeleteColumnAnalytics = function emitDeleteColumnAnalytics(columnCount) {
696
710
  editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({
697
711
  action: _analytics.ACTION.DELETED,
@@ -699,25 +713,27 @@ var deleteLayoutColumn = exports.deleteLayoutColumn = function deleteLayoutColum
699
713
  actionSubjectId: _analytics.ACTION_SUBJECT_ID.LAYOUT_COLUMN,
700
714
  attributes: {
701
715
  columnCount: columnCount,
716
+ endIndex: endIndex,
702
717
  inputMethod: _analytics.INPUT_METHOD.LAYOUT_COLUMN_MENU,
703
- selectedIndex: selectedColumnIndex
718
+ selectedCount: selectedColumnCount,
719
+ startIndex: startIndex
704
720
  },
705
721
  eventType: _analytics.EVENT_TYPE.TRACK
706
722
  })(tr);
707
723
  };
708
724
 
709
- // If only one column remains, remove the entire layoutSection
710
- if (layoutSectionNode.childCount === 1) {
725
+ // If all columns are selected, remove the entire layoutSection
726
+ if (selectedColumnCount === layoutSectionNode.childCount) {
711
727
  tr.delete(layoutSectionPos, layoutSectionPos + layoutSectionNode.nodeSize);
712
728
  emitDeleteColumnAnalytics(0);
713
729
  tr.setMeta('scrollIntoView', false);
714
730
  return tr;
715
731
  }
716
732
 
717
- // Build new column list without the selected column
733
+ // Build new column list without the selected columns
718
734
  var remainingColumns = [];
719
735
  layoutSectionNode.forEach(function (column, _offset, index) {
720
- if (index !== selectedColumnIndex) {
736
+ if (!selectedColumnIndexSet.has(index)) {
721
737
  remainingColumns.push(column);
722
738
  }
723
739
  });
@@ -726,7 +742,14 @@ var deleteLayoutColumn = exports.deleteLayoutColumn = function deleteLayoutColum
726
742
  var existingWidths = (0, _utils.mapChildren)(layoutSectionNode, function (column) {
727
743
  return column.attrs.width;
728
744
  });
729
- var redistributed = (0, _redistributeProportionally.redistributeAfterDeletion)(existingWidths, selectedColumnIndex, _consts.MIN_LAYOUT_COLUMN_WIDTH_PERCENT);
745
+ var redistributed = selectedColumnIndices.slice()
746
+ // Delete highest indices first so lower original indices still point at the same columns
747
+ // as each redistribution step shrinks the widths array.
748
+ .sort(function (a, b) {
749
+ return b - a;
750
+ }).reduce(function (widths, selectedIndex) {
751
+ return (0, _redistributeProportionally.redistributeAfterDeletion)(widths, selectedIndex, _consts.MIN_LAYOUT_COLUMN_WIDTH_PERCENT);
752
+ }, existingWidths);
730
753
  var updatedLayoutSectionNode = layoutSectionNode.copy(_model.Fragment.fromArray(remainingColumns));
731
754
  tr.replaceWith(layoutSectionPos + 1, layoutSectionPos + layoutSectionNode.nodeSize - 1, columnWidth(updatedLayoutSectionNode, tr.doc.type.schema, redistributed));
732
755
  emitDeleteColumnAnalytics(redistributed.length);
@@ -73,7 +73,8 @@ var getInitialPluginState = function getInitialPluginState(options, state) {
73
73
  selectedLayout: selectedLayout,
74
74
  allowSingleColumnLayout: allowSingleColumnLayout,
75
75
  isResizing: false,
76
- isLayoutColumnMenuOpen: false
76
+ isLayoutColumnMenuOpen: false,
77
+ layoutColumnMenuAnchorPos: undefined
77
78
  };
78
79
  };
79
80
 
@@ -125,7 +126,8 @@ var _default = exports.default = function _default(options) {
125
126
  var _columnMenuMeta$isOpe, _tr$getMeta, _pluginKey$getState;
126
127
  var columnMenuMeta = tr.getMeta('toggleLayoutColumnMenu');
127
128
  var nextPluginState = columnMenuMeta ? _objectSpread(_objectSpread({}, pluginState), {}, {
128
- isLayoutColumnMenuOpen: (_columnMenuMeta$isOpe = columnMenuMeta.isOpen) !== null && _columnMenuMeta$isOpe !== void 0 ? _columnMenuMeta$isOpe : !pluginState.isLayoutColumnMenuOpen
129
+ isLayoutColumnMenuOpen: (_columnMenuMeta$isOpe = columnMenuMeta.isOpen) !== null && _columnMenuMeta$isOpe !== void 0 ? _columnMenuMeta$isOpe : !pluginState.isLayoutColumnMenuOpen,
130
+ layoutColumnMenuAnchorPos: columnMenuMeta.isOpen === false ? undefined : columnMenuMeta.anchorPos
129
131
  }) : pluginState;
130
132
  var isResizing = (0, _experiments.editorExperiment)('single_column_layouts', true) ? (_tr$getMeta = tr.getMeta('is-resizer-resizing')) !== null && _tr$getMeta !== void 0 ? _tr$getMeta : (_pluginKey$getState = _pluginKey.pluginKey.getState(oldState)) === null || _pluginKey$getState === void 0 ? void 0 : _pluginKey$getState.isResizing : false;
131
133
  if (tr.docChanged || tr.selectionSet) {
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getSelectedLayoutColumns = exports.getLayoutSectionColumnCount = exports.getLayoutColumnValign = exports.getLayoutColumnMenuAnchorPos = void 0;
7
+ var _state = require("@atlaskit/editor-prosemirror/state");
8
+ var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
9
+ var isLayoutColumn = function isLayoutColumn(node) {
10
+ return (node === null || node === void 0 ? void 0 : node.type.name) === 'layoutColumn';
11
+ };
12
+ var isLayoutSection = function isLayoutSection(node) {
13
+ return (node === null || node === void 0 ? void 0 : node.type.name) === 'layoutSection';
14
+ };
15
+ var getLayoutColumnIndexAtPos = function getLayoutColumnIndexAtPos($pos) {
16
+ for (var depth = $pos.depth; depth > 0; depth--) {
17
+ if (isLayoutColumn($pos.node(depth)) && isLayoutSection($pos.node(depth - 1))) {
18
+ return $pos.index(depth - 1);
19
+ }
20
+ }
21
+ return undefined;
22
+ };
23
+ var getLayoutSectionDepth = function getLayoutSectionDepth(selection) {
24
+ var $from = selection.$from,
25
+ $to = selection.$to;
26
+ var sharedDepth = $from.sharedDepth($to.pos);
27
+ for (var depth = sharedDepth; depth > 0; depth--) {
28
+ if (isLayoutSection($from.node(depth))) {
29
+ return depth;
30
+ }
31
+ }
32
+ return undefined;
33
+ };
34
+ var getSelectedLayoutColumns = exports.getSelectedLayoutColumns = function getSelectedLayoutColumns(selection) {
35
+ if (!selection) {
36
+ return undefined;
37
+ }
38
+ if (selection instanceof _state.NodeSelection && isLayoutColumn(selection.node)) {
39
+ var _$from = selection.$from;
40
+ var _layoutSectionNode = _$from.parent;
41
+ if (!isLayoutSection(_layoutSectionNode)) {
42
+ return undefined;
43
+ }
44
+ var selectedColumnIndex = _$from.index(_$from.depth);
45
+ return {
46
+ layoutSectionNode: _layoutSectionNode,
47
+ layoutSectionPos: _$from.before(_$from.depth),
48
+ selectedColumnIndices: [selectedColumnIndex],
49
+ selectedColumns: [{
50
+ index: selectedColumnIndex,
51
+ node: selection.node,
52
+ pos: selection.from
53
+ }]
54
+ };
55
+ }
56
+ if (selection.empty) {
57
+ return undefined;
58
+ }
59
+ if (!(0, _experiments.editorExperiment)('platform_editor_block_menu', true)) {
60
+ return undefined;
61
+ }
62
+ var layoutSectionDepth = getLayoutSectionDepth(selection);
63
+ if (layoutSectionDepth === undefined) {
64
+ return undefined;
65
+ }
66
+ var $from = selection.$from,
67
+ $to = selection.$to;
68
+ var layoutSectionNode = $from.node(layoutSectionDepth);
69
+ var layoutSectionPos = $from.before(layoutSectionDepth);
70
+ var selectedColumns = [];
71
+ var invalidSelection = false;
72
+ layoutSectionNode.forEach(function (column, offset, index) {
73
+ var columnStart = layoutSectionPos + 1 + offset;
74
+ var columnEnd = columnStart + column.nodeSize;
75
+ var intersectsColumn = selection.from < columnEnd && selection.to > columnStart;
76
+ if (!intersectsColumn) {
77
+ return;
78
+ }
79
+ if (!isLayoutColumn(column)) {
80
+ invalidSelection = true;
81
+ return;
82
+ }
83
+ selectedColumns.push({
84
+ index: index,
85
+ node: column,
86
+ pos: columnStart
87
+ });
88
+ });
89
+
90
+ // TextSelection inside a single column is normal text editing, not a selected column set.
91
+ if (invalidSelection || selectedColumns.length < 2) {
92
+ return undefined;
93
+ }
94
+ var firstColumn = selectedColumns[0];
95
+ var lastColumn = selectedColumns[selectedColumns.length - 1];
96
+ var startColumnIndex = getLayoutColumnIndexAtPos($from);
97
+ var endColumnIndex = getLayoutColumnIndexAtPos($to);
98
+ if (startColumnIndex !== undefined && startColumnIndex !== firstColumn.index || endColumnIndex !== undefined && endColumnIndex !== lastColumn.index) {
99
+ return undefined;
100
+ }
101
+ return {
102
+ layoutSectionNode: layoutSectionNode,
103
+ layoutSectionPos: layoutSectionPos,
104
+ selectedColumnIndices: selectedColumns.map(function (_ref) {
105
+ var index = _ref.index;
106
+ return index;
107
+ }),
108
+ selectedColumns: selectedColumns
109
+ };
110
+ };
111
+ var getLayoutSectionColumnCount = exports.getLayoutSectionColumnCount = function getLayoutSectionColumnCount(layoutSection) {
112
+ return (layoutSection === null || layoutSection === void 0 ? void 0 : layoutSection.type.name) === 'layoutSection' ? layoutSection.childCount : 0;
113
+ };
114
+ var getLayoutColumnValign = exports.getLayoutColumnValign = function getLayoutColumnValign(layoutColumn) {
115
+ return layoutColumn === null || layoutColumn === void 0 ? void 0 : layoutColumn.attrs.valign;
116
+ };
117
+ var getLayoutColumnMenuAnchorPos = exports.getLayoutColumnMenuAnchorPos = function getLayoutColumnMenuAnchorPos(selection, anchorPosFromHandle) {
118
+ var _clickedSelectedColum, _selectedLayoutColumn;
119
+ var selectedLayoutColumns = getSelectedLayoutColumns(selection);
120
+ if (!selectedLayoutColumns) {
121
+ return undefined;
122
+ }
123
+ var clickedSelectedColumn = selectedLayoutColumns.selectedColumns.find(function (_ref2) {
124
+ var pos = _ref2.pos;
125
+ return pos === anchorPosFromHandle;
126
+ });
127
+ return (_clickedSelectedColum = clickedSelectedColumn === null || clickedSelectedColumn === void 0 ? void 0 : clickedSelectedColumn.pos) !== null && _clickedSelectedColum !== void 0 ? _clickedSelectedColum : (_selectedLayoutColumn = selectedLayoutColumns.selectedColumns[0]) === null || _selectedLayoutColumn === void 0 ? void 0 : _selectedLayoutColumn.pos;
128
+ };
@@ -9,13 +9,13 @@ var _react = _interopRequireWildcard(require("react"));
9
9
  var _reactIntl = require("react-intl");
10
10
  var _messages = require("@atlaskit/editor-common/messages");
11
11
  var _editorToolbar = require("@atlaskit/editor-toolbar");
12
- var _useCurrentLayoutColumn = require("./useCurrentLayoutColumn");
12
+ var _useSelectedLayoutColumns = require("./useSelectedLayoutColumns");
13
13
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
14
14
  var DeleteColumnDropdownItem = exports.DeleteColumnDropdownItem = function DeleteColumnDropdownItem(_ref) {
15
15
  var api = _ref.api;
16
16
  var _useIntl = (0, _reactIntl.useIntl)(),
17
17
  formatMessage = _useIntl.formatMessage;
18
- var currentColumn = (0, _useCurrentLayoutColumn.useCurrentLayoutColumn)(api);
18
+ var selectedLayoutColumns = (0, _useSelectedLayoutColumns.useSelectedLayoutColumns)(api);
19
19
  var onClick = (0, _react.useCallback)(function () {
20
20
  var _api$layout, _api$core;
21
21
  var deleteCommand = api === null || api === void 0 || (_api$layout = api.layout) === null || _api$layout === void 0 ? void 0 : _api$layout.commands.deleteLayoutColumn;
@@ -33,10 +33,13 @@ var DeleteColumnDropdownItem = exports.DeleteColumnDropdownItem = function Delet
33
33
  return tr;
34
34
  });
35
35
  }, [api]);
36
- if (currentColumn === undefined) {
36
+ if (selectedLayoutColumns === undefined) {
37
37
  return null;
38
38
  }
39
+ var selectedColumnCount = selectedLayoutColumns.selectedColumns.length;
39
40
  return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItem, {
40
41
  onClick: onClick
41
- }, formatMessage(_messages.layoutMessages.deleteColumn));
42
+ }, formatMessage(_messages.layoutMessages.deleteColumn, {
43
+ count: selectedColumnCount
44
+ }));
42
45
  };
@@ -10,8 +10,8 @@ var _reactIntl = require("react-intl");
10
10
  var _messages = require("@atlaskit/editor-common/messages");
11
11
  var _editorToolbar = require("@atlaskit/editor-toolbar");
12
12
  var _actions = require("../../pm-plugins/actions");
13
- var _layoutColumnSelection = require("./layoutColumnSelection");
14
- var _useCurrentLayoutColumn = require("./useCurrentLayoutColumn");
13
+ var _layoutColumnSelection = require("../../pm-plugins/utils/layout-column-selection");
14
+ var _useSelectedLayoutColumns = require("./useSelectedLayoutColumns");
15
15
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
16
16
  var INSERT_COLUMN_OPTIONS = {
17
17
  left: {
@@ -33,11 +33,10 @@ var InsertColumnDropdownItem = exports.InsertColumnDropdownItem = function Inser
33
33
  var _INSERT_COLUMN_OPTION = INSERT_COLUMN_OPTIONS[side],
34
34
  Icon = _INSERT_COLUMN_OPTION.Icon,
35
35
  label = _INSERT_COLUMN_OPTION.label;
36
- var currentColumn = (0, _useCurrentLayoutColumn.useCurrentLayoutColumn)(api);
37
- var currentLayoutSection = (0, _useCurrentLayoutColumn.useCurrentLayoutSection)(api);
38
- var columnCount = (0, _layoutColumnSelection.getLayoutSectionColumnCount)(currentLayoutSection);
36
+ var selectedLayoutColumns = (0, _useSelectedLayoutColumns.useSelectedLayoutColumns)(api);
37
+ var columnCount = (0, _layoutColumnSelection.getLayoutSectionColumnCount)(selectedLayoutColumns === null || selectedLayoutColumns === void 0 ? void 0 : selectedLayoutColumns.layoutSectionNode);
39
38
  var maxColumnCount = (0, _actions.getEffectiveMaxLayoutColumns)();
40
- var canInsertColumn = currentColumn !== undefined && columnCount < maxColumnCount;
39
+ var canInsertColumn = selectedLayoutColumns !== undefined && columnCount < maxColumnCount;
41
40
  var onClick = (0, _react.useCallback)(function () {
42
41
  var _api$layout, _api$core;
43
42
  var insertCommand = api === null || api === void 0 || (_api$layout = api.layout) === null || _api$layout === void 0 ? void 0 : _api$layout.commands.insertLayoutColumn(side);
@@ -8,20 +8,22 @@ exports.VerticalAlignDropdownItem = void 0;
8
8
  var _react = _interopRequireWildcard(require("react"));
9
9
  var _reactIntl = require("react-intl");
10
10
  var _editorToolbar = require("@atlaskit/editor-toolbar");
11
- var _layoutColumnSelection = require("./layoutColumnSelection");
12
- var _useCurrentLayoutColumn = require("./useCurrentLayoutColumn");
11
+ var _layoutColumnSelection = require("../../pm-plugins/utils/layout-column-selection");
12
+ var _useSelectedLayoutColumns = require("./useSelectedLayoutColumns");
13
13
  var _verticalAlignIcons = require("./verticalAlignIcons");
14
14
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
15
15
  var VerticalAlignDropdownItem = exports.VerticalAlignDropdownItem = function VerticalAlignDropdownItem(_ref) {
16
+ var _selectedLayoutColumn;
16
17
  var api = _ref.api,
17
18
  label = _ref.label,
18
19
  value = _ref.value;
19
20
  var _useIntl = (0, _reactIntl.useIntl)(),
20
21
  formatMessage = _useIntl.formatMessage;
21
- var currentColumn = (0, _useCurrentLayoutColumn.useCurrentLayoutColumn)(api);
22
- var currentValign = (0, _react.useMemo)(function () {
23
- return (0, _layoutColumnSelection.getLayoutColumnValign)(currentColumn);
24
- }, [currentColumn]);
22
+ var selectedLayoutColumns = (0, _useSelectedLayoutColumns.useSelectedLayoutColumns)(api);
23
+ var isSelected = (_selectedLayoutColumn = selectedLayoutColumns === null || selectedLayoutColumns === void 0 ? void 0 : selectedLayoutColumns.selectedColumns.every(function (_ref2) {
24
+ var node = _ref2.node;
25
+ return (0, _layoutColumnSelection.getLayoutColumnValign)(node) === value;
26
+ })) !== null && _selectedLayoutColumn !== void 0 ? _selectedLayoutColumn : false;
25
27
  var Icon = _verticalAlignIcons.VERTICAL_ALIGN_ICONS[value];
26
28
  var onClick = (0, _react.useCallback)(function () {
27
29
  var _api$core, _api$layout;
@@ -32,7 +34,7 @@ var VerticalAlignDropdownItem = exports.VerticalAlignDropdownItem = function Ver
32
34
  label: "",
33
35
  size: "small"
34
36
  }),
35
- isSelected: currentValign === value,
37
+ isSelected: isSelected,
36
38
  onClick: onClick
37
39
  }, formatMessage(label));
38
40
  };
@@ -9,8 +9,8 @@ var _react = _interopRequireWildcard(require("react"));
9
9
  var _reactIntl = require("react-intl");
10
10
  var _messages = require("@atlaskit/editor-common/messages");
11
11
  var _editorToolbar = require("@atlaskit/editor-toolbar");
12
- var _layoutColumnSelection = require("./layoutColumnSelection");
13
- var _useCurrentLayoutColumn = require("./useCurrentLayoutColumn");
12
+ var _layoutColumnSelection = require("../../pm-plugins/utils/layout-column-selection");
13
+ var _useSelectedLayoutColumns = require("./useSelectedLayoutColumns");
14
14
  var _verticalAlignIcons = require("./verticalAlignIcons");
15
15
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
16
16
  var VerticalAlignNestedMenu = exports.VerticalAlignNestedMenu = function VerticalAlignNestedMenu(_ref) {
@@ -18,12 +18,21 @@ var VerticalAlignNestedMenu = exports.VerticalAlignNestedMenu = function Vertica
18
18
  children = _ref.children;
19
19
  var _useIntl = (0, _reactIntl.useIntl)(),
20
20
  formatMessage = _useIntl.formatMessage;
21
- var currentColumn = (0, _useCurrentLayoutColumn.useCurrentLayoutColumn)(api);
21
+ var selectedLayoutColumns = (0, _useSelectedLayoutColumns.useSelectedLayoutColumns)(api);
22
22
  var currentValign = (0, _react.useMemo)(function () {
23
- return (0, _layoutColumnSelection.getLayoutColumnValign)(currentColumn);
24
- }, [currentColumn]);
23
+ var selectedColumns = selectedLayoutColumns === null || selectedLayoutColumns === void 0 ? void 0 : selectedLayoutColumns.selectedColumns;
24
+ var firstColumn = selectedColumns === null || selectedColumns === void 0 ? void 0 : selectedColumns[0];
25
+ var firstValign = (0, _layoutColumnSelection.getLayoutColumnValign)(firstColumn === null || firstColumn === void 0 ? void 0 : firstColumn.node);
26
+ if (!firstValign || !(selectedColumns !== null && selectedColumns !== void 0 && selectedColumns.every(function (_ref2) {
27
+ var node = _ref2.node;
28
+ return (0, _layoutColumnSelection.getLayoutColumnValign)(node) === firstValign;
29
+ }))) {
30
+ return undefined;
31
+ }
32
+ return firstValign;
33
+ }, [selectedLayoutColumns]);
25
34
  var TriggerIcon = currentValign ? _verticalAlignIcons.VERTICAL_ALIGN_ICONS[currentValign] : _editorToolbar.LayoutIcon;
26
- if (!currentColumn) {
35
+ if (!selectedLayoutColumns) {
27
36
  return null;
28
37
  }
29
38
  return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarNestedDropdownMenu, {
@@ -16,9 +16,9 @@ var _uiReact = require("@atlaskit/editor-common/ui-react");
16
16
  var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
17
17
  var _editorToolbar = require("@atlaskit/editor-toolbar");
18
18
  var _editorUiControlModel = require("@atlaskit/editor-ui-control-model");
19
+ var _layoutColumnSelection = require("../../pm-plugins/utils/layout-column-selection");
19
20
  var _components = require("./components");
20
21
  var _keys = require("./keys");
21
- var _layoutColumnSelection = require("./layoutColumnSelection");
22
22
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
23
23
  var PopupWithListeners = (0, _uiReact.withReactEditorViewOuterListeners)(_ui.Popup);
24
24
  var FALLBACK_MENU_HEIGHT = 300;
@@ -27,12 +27,13 @@ var LAYOUT_COLUMN_MENU_POPUP_OFFSET = [0, 4];
27
27
  /**
28
28
  * Returns the drag handle button for the selected layout column.
29
29
  */
30
- var getLayoutColumnMenuTarget = function getLayoutColumnMenuTarget(editorView, selection) {
30
+ var getLayoutColumnMenuTarget = function getLayoutColumnMenuTarget(editorView, selection, anchorPosFromHandle) {
31
31
  var _columnDomRef$parentE;
32
- if (!(0, _layoutColumnSelection.getLayoutColumnAtSelection)(selection) || (selection === null || selection === void 0 ? void 0 : selection.from) === undefined) {
32
+ var anchorPos = (0, _layoutColumnSelection.getLayoutColumnMenuAnchorPos)(selection, anchorPosFromHandle);
33
+ if (anchorPos === undefined) {
33
34
  return null;
34
35
  }
35
- var columnDomRef = editorView.nodeDOM(selection.from);
36
+ var columnDomRef = editorView.nodeDOM(anchorPos);
36
37
  if (!(columnDomRef instanceof HTMLElement)) {
37
38
  return null;
38
39
  }
@@ -47,13 +48,15 @@ var LayoutColumnMenu = exports.LayoutColumnMenu = /*#__PURE__*/_react.default.me
47
48
  boundariesElement = _ref.boundariesElement,
48
49
  scrollableElement = _ref.scrollableElement;
49
50
  var _useSharedPluginState = (0, _hooks.useSharedPluginStateWithSelector)(api, ['layout', 'selection'], function (states) {
50
- var _states$layoutState$i, _states$layoutState, _states$selectionStat;
51
+ var _states$layoutState$i, _states$layoutState, _states$layoutState2, _states$selectionStat;
51
52
  return {
52
53
  isLayoutColumnMenuOpen: (_states$layoutState$i = (_states$layoutState = states.layoutState) === null || _states$layoutState === void 0 ? void 0 : _states$layoutState.isLayoutColumnMenuOpen) !== null && _states$layoutState$i !== void 0 ? _states$layoutState$i : false,
54
+ layoutColumnMenuAnchorPos: (_states$layoutState2 = states.layoutState) === null || _states$layoutState2 === void 0 ? void 0 : _states$layoutState2.layoutColumnMenuAnchorPos,
53
55
  selection: (_states$selectionStat = states.selectionState) === null || _states$selectionStat === void 0 ? void 0 : _states$selectionStat.selection
54
56
  };
55
57
  }),
56
58
  isLayoutColumnMenuOpen = _useSharedPluginState.isLayoutColumnMenuOpen,
59
+ layoutColumnMenuAnchorPos = _useSharedPluginState.layoutColumnMenuAnchorPos,
57
60
  selection = _useSharedPluginState.selection;
58
61
  var setOutsideClickTargetRef = (0, _react.useContext)(_uiReact.OutsideClickTargetRefContext);
59
62
  var menuRef = (0, _react.useRef)(null);
@@ -83,6 +86,13 @@ var LayoutColumnMenu = exports.LayoutColumnMenu = /*#__PURE__*/_react.default.me
83
86
  if (event.target instanceof Element && event.target.closest('[data-toolbar-nested-dropdown-menu]')) {
84
87
  return;
85
88
  }
89
+
90
+ // Clicking a drag handle should let the drag handle's own click handler
91
+ // update selection/menu state. Treating it as a generic outside click
92
+ // races that transaction and can immediately close the layout column menu.
93
+ if (event.target instanceof Element && event.target.closest(_styles.DRAG_HANDLE_SELECTOR)) {
94
+ return;
95
+ }
86
96
  closeLayoutColumnMenu();
87
97
  }, [closeLayoutColumnMenu]);
88
98
  var handleSetIsOpen = (0, _react.useCallback)(function (isOpen) {
@@ -99,8 +109,8 @@ var LayoutColumnMenu = exports.LayoutColumnMenu = /*#__PURE__*/_react.default.me
99
109
  }, [setOutsideClickTargetRef]);
100
110
  var components = (_api$uiControlRegistr = api === null || api === void 0 || (_api$uiControlRegistr2 = api.uiControlRegistry) === null || _api$uiControlRegistr2 === void 0 ? void 0 : _api$uiControlRegistr2.actions.getComponents(_keys.LAYOUT_COLUMN_MENU.key)) !== null && _api$uiControlRegistr !== void 0 ? _api$uiControlRegistr : [];
101
111
  var target = (0, _react.useMemo)(function () {
102
- return isLayoutColumnMenuOpen ? getLayoutColumnMenuTarget(editorView, selection) : null;
103
- }, [editorView, isLayoutColumnMenuOpen, selection]);
112
+ return isLayoutColumnMenuOpen ? getLayoutColumnMenuTarget(editorView, selection, layoutColumnMenuAnchorPos) : null;
113
+ }, [editorView, isLayoutColumnMenuOpen, layoutColumnMenuAnchorPos, selection]);
104
114
  var hasValidTarget = target instanceof HTMLElement;
105
115
  (0, _react.useEffect)(function () {
106
116
  if (isLayoutColumnMenuOpen && (!hasValidTarget || components.length === 0)) {
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useSelectedLayoutColumns = void 0;
7
+ var _hooks = require("@atlaskit/editor-common/hooks");
8
+ var _layoutColumnSelection = require("../../pm-plugins/utils/layout-column-selection");
9
+ var useSelectedLayoutColumns = exports.useSelectedLayoutColumns = function useSelectedLayoutColumns(api) {
10
+ return (0, _hooks.useSharedPluginStateWithSelector)(api, ['selection'], function (states) {
11
+ var _states$selectionStat;
12
+ return (0, _layoutColumnSelection.getSelectedLayoutColumns)((_states$selectionStat = states.selectionState) === null || _states$selectionStat === void 0 ? void 0 : _states$selectionStat.selection);
13
+ });
14
+ };