@atlaskit/editor-plugin-layout 10.8.1 → 10.9.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 (41) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/cjs/layoutPlugin.js +2 -5
  3. package/dist/cjs/pm-plugins/actions.js +71 -67
  4. package/dist/cjs/pm-plugins/utils/layout-column-selection.js +56 -98
  5. package/dist/cjs/ui/LayoutColumnMenu/DeleteColumnDropdownItem.js +1 -1
  6. package/dist/cjs/ui/LayoutColumnMenu/DistributeColumnsDropdownItem.js +10 -5
  7. package/dist/cjs/ui/LayoutColumnMenu/InsertColumnDropdownItem.js +2 -2
  8. package/dist/cjs/ui/LayoutColumnMenu/VerticalAlignDropdownItem.js +1 -1
  9. package/dist/cjs/ui/LayoutColumnMenu/VerticalAlignNestedMenu.js +1 -1
  10. package/dist/cjs/ui/LayoutColumnMenu/index.js +1 -1
  11. package/dist/cjs/ui/LayoutColumnMenu/useSelectedLayoutColumns.js +4 -3
  12. package/dist/cjs/ui/toolbar.js +70 -11
  13. package/dist/es2019/layoutPlugin.js +3 -6
  14. package/dist/es2019/pm-plugins/actions.js +50 -51
  15. package/dist/es2019/pm-plugins/utils/layout-column-selection.js +54 -94
  16. package/dist/es2019/ui/LayoutColumnMenu/DeleteColumnDropdownItem.js +1 -1
  17. package/dist/es2019/ui/LayoutColumnMenu/DistributeColumnsDropdownItem.js +11 -5
  18. package/dist/es2019/ui/LayoutColumnMenu/InsertColumnDropdownItem.js +2 -2
  19. package/dist/es2019/ui/LayoutColumnMenu/VerticalAlignDropdownItem.js +1 -1
  20. package/dist/es2019/ui/LayoutColumnMenu/VerticalAlignNestedMenu.js +1 -1
  21. package/dist/es2019/ui/LayoutColumnMenu/index.js +1 -1
  22. package/dist/es2019/ui/LayoutColumnMenu/useSelectedLayoutColumns.js +6 -4
  23. package/dist/es2019/ui/toolbar.js +68 -11
  24. package/dist/esm/layoutPlugin.js +3 -6
  25. package/dist/esm/pm-plugins/actions.js +71 -67
  26. package/dist/esm/pm-plugins/utils/layout-column-selection.js +55 -97
  27. package/dist/esm/ui/LayoutColumnMenu/DeleteColumnDropdownItem.js +1 -1
  28. package/dist/esm/ui/LayoutColumnMenu/DistributeColumnsDropdownItem.js +10 -5
  29. package/dist/esm/ui/LayoutColumnMenu/InsertColumnDropdownItem.js +2 -2
  30. package/dist/esm/ui/LayoutColumnMenu/VerticalAlignDropdownItem.js +1 -1
  31. package/dist/esm/ui/LayoutColumnMenu/VerticalAlignNestedMenu.js +1 -1
  32. package/dist/esm/ui/LayoutColumnMenu/index.js +1 -1
  33. package/dist/esm/ui/LayoutColumnMenu/useSelectedLayoutColumns.js +5 -4
  34. package/dist/esm/ui/toolbar.js +71 -12
  35. package/dist/types/layoutPluginType.d.ts +2 -2
  36. package/dist/types/pm-plugins/actions.d.ts +9 -1
  37. package/dist/types/pm-plugins/utils/layout-column-selection.d.ts +8 -7
  38. package/dist/types-ts4.5/layoutPluginType.d.ts +2 -2
  39. package/dist/types-ts4.5/pm-plugins/actions.d.ts +9 -1
  40. package/dist/types-ts4.5/pm-plugins/utils/layout-column-selection.d.ts +8 -7
  41. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # @atlaskit/editor-plugin-layout
2
2
 
3
+ ## 10.9.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`10c5beb57bb0d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/10c5beb57bb0d) -
8
+ [ux] Add Distribute columns to the layout floating toolbar
9
+
10
+ ### Patch Changes
11
+
12
+ - Updated dependencies
13
+
3
14
  ## 10.8.1
4
15
 
5
16
  ### Patch Changes
@@ -57,7 +57,7 @@ var selectIntoLayoutSection = exports.selectIntoLayoutSection = function selectI
57
57
  return tr;
58
58
  };
59
59
  var layoutPlugin = exports.layoutPlugin = function layoutPlugin(_ref) {
60
- var _api$analytics;
60
+ var _api$analytics, _api$analytics5;
61
61
  var _ref$config = _ref.config,
62
62
  options = _ref$config === void 0 ? {} : _ref$config,
63
63
  api = _ref.api;
@@ -381,10 +381,7 @@ var layoutPlugin = exports.layoutPlugin = function layoutPlugin(_ref) {
381
381
  var _api$analytics4;
382
382
  return (0, _actions.deleteLayoutColumn)(api === null || api === void 0 || (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions)(props);
383
383
  },
384
- distributeLayoutColumns: function distributeLayoutColumns(props) {
385
- var _api$analytics5;
386
- return (0, _actions.distributeLayoutColumns)(api === null || api === void 0 || (_api$analytics5 = api.analytics) === null || _api$analytics5 === void 0 ? void 0 : _api$analytics5.actions)(props);
387
- },
384
+ distributeLayoutColumns: (0, _actions.createDistributeLayoutColumnsCommand)(api === null || api === void 0 || (_api$analytics5 = api.analytics) === null || _api$analytics5 === void 0 ? void 0 : _api$analytics5.actions),
388
385
  insertLayoutColumn: function insertLayoutColumn(side) {
389
386
  var _api$analytics6;
390
387
  return (0, _actions.insertLayoutColumn)(side, api === null || api === void 0 || (_api$analytics6 = api.analytics) === null || _api$analytics6 === void 0 ? void 0 : _api$analytics6.actions);
@@ -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.fixColumnStructure = exports.fixColumnSizes = exports.distributeLayoutColumns = exports.deleteLayoutColumn = exports.deleteActiveLayoutNode = exports.createMultiColumnLayoutSection = exports.createDefaultLayoutSection = exports.TWO_COL_LAYOUTS = exports.THREE_COL_LAYOUTS = exports.ONE_COL_LAYOUTS = void 0;
7
+ exports.fixColumnStructure = exports.fixColumnSizes = exports.distributeLayoutColumns = exports.deleteLayoutColumn = exports.deleteActiveLayoutNode = exports.createMultiColumnLayoutSection = exports.createDistributeLayoutColumnsCommand = exports.createDefaultLayoutSection = exports.TWO_COL_LAYOUTS = exports.THREE_COL_LAYOUTS = exports.ONE_COL_LAYOUTS = void 0;
8
8
  exports.forceSectionToPresetLayout = forceSectionToPresetLayout;
9
9
  exports.getEffectiveMaxLayoutColumns = getEffectiveMaxLayoutColumns;
10
10
  exports.toggleLayoutColumnMenu = exports.setPresetLayout = exports.setLayoutColumnValign = exports.insertLayoutColumnsWithAnalytics = exports.insertLayoutColumns = exports.insertLayoutColumn = exports.getSelectedLayout = exports.getPresetLayout = void 0;
@@ -564,18 +564,17 @@ var insertLayoutColumnAt = function insertLayoutColumnAt(side, editorAnalyticsAP
564
564
  if (!(0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_layout_column_menu', 'isEnabled', true)) {
565
565
  return null;
566
566
  }
567
- var selectedLayoutColumns = (0, _layoutColumnSelection.getSelectedLayoutColumns)(tr.selection);
568
- if (!selectedLayoutColumns) {
567
+ var selectedLayoutColumnsResult = (0, _layoutColumnSelection.getSelectedLayoutColumnsFromSelection)(tr.selection);
568
+ if (!selectedLayoutColumnsResult || selectedLayoutColumnsResult.selectedLayoutColumns.length === 0) {
569
569
  return null;
570
570
  }
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];
571
+ var layoutSectionNode = selectedLayoutColumnsResult.layoutSectionNode,
572
+ layoutSectionPos = selectedLayoutColumnsResult.layoutSectionPos,
573
+ startIndex = selectedLayoutColumnsResult.startIndex,
574
+ endIndex = selectedLayoutColumnsResult.endIndex,
575
+ selectedLayoutColumns = selectedLayoutColumnsResult.selectedLayoutColumns;
577
576
  var selectedColumnIndex = side === 'left' ? startIndex : endIndex;
578
- var selectedColumnCount = selectedColumns.length;
577
+ var selectedColumnCount = selectedLayoutColumns.length;
579
578
  if (layoutSectionNode.childCount >= getEffectiveMaxLayoutColumns()) {
580
579
  return null;
581
580
  }
@@ -633,22 +632,20 @@ var setLayoutColumnValign = exports.setLayoutColumnValign = function setLayoutCo
633
632
  if (!(0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_layout_column_menu', 'isEnabled', true)) {
634
633
  return null;
635
634
  }
636
- var selectedLayoutColumns = (0, _layoutColumnSelection.getSelectedLayoutColumns)(tr.selection);
637
- if (!selectedLayoutColumns) {
635
+ var selectedLayoutColumnsResult = (0, _layoutColumnSelection.getSelectedLayoutColumnsFromSelection)(tr.selection);
636
+ if (!selectedLayoutColumnsResult) {
638
637
  return null;
639
638
  }
640
- var selectedColumnIndices = selectedLayoutColumns.selectedColumnIndices,
641
- selectedColumns = selectedLayoutColumns.selectedColumns;
642
- var columnsToUpdate = selectedColumns.filter(function (_ref6) {
639
+ var startIndex = selectedLayoutColumnsResult.startIndex,
640
+ endIndex = selectedLayoutColumnsResult.endIndex,
641
+ selectedLayoutColumns = selectedLayoutColumnsResult.selectedLayoutColumns;
642
+ var columnsToUpdate = selectedLayoutColumns.filter(function (_ref6) {
643
643
  var node = _ref6.node;
644
644
  return node.attrs.valign !== valign;
645
645
  });
646
646
  if (columnsToUpdate.length === 0) {
647
647
  return null;
648
648
  }
649
- var startIndex = selectedColumnIndices[0];
650
- var endIndex = selectedColumnIndices[selectedColumnIndices.length - 1];
651
- var selectedColumnCount = selectedColumns.length;
652
649
  var updatedColumnCount = columnsToUpdate.length;
653
650
  columnsToUpdate.forEach(function (_ref7) {
654
651
  var node = _ref7.node,
@@ -664,7 +661,7 @@ var setLayoutColumnValign = exports.setLayoutColumnValign = function setLayoutCo
664
661
  attributes: {
665
662
  endIndex: endIndex,
666
663
  inputMethod: _analytics.INPUT_METHOD.LAYOUT_COLUMN_MENU,
667
- selectedCount: selectedColumnCount,
664
+ selectedCount: selectedLayoutColumns.length,
668
665
  startIndex: startIndex,
669
666
  updatedCount: updatedColumnCount,
670
667
  valign: valign
@@ -675,28 +672,31 @@ var setLayoutColumnValign = exports.setLayoutColumnValign = function setLayoutCo
675
672
  return tr;
676
673
  };
677
674
  };
678
- var distributeLayoutColumns = exports.distributeLayoutColumns = function distributeLayoutColumns(editorAnalyticsAPI) {
679
- var inputMethod = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _analytics.INPUT_METHOD.LAYOUT_COLUMN_MENU;
680
- return function (_ref8) {
681
- var tr = _ref8.tr;
675
+ var distributeLayoutColumns = exports.distributeLayoutColumns = function distributeLayoutColumns() {
676
+ var _ref8 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
677
+ editorAnalyticsAPI = _ref8.editorAnalyticsAPI,
678
+ _ref8$inputMethod = _ref8.inputMethod,
679
+ inputMethod = _ref8$inputMethod === void 0 ? _analytics.INPUT_METHOD.LAYOUT_COLUMN_MENU : _ref8$inputMethod,
680
+ _ref8$target = _ref8.target,
681
+ target = _ref8$target === void 0 ? 'selectedColumns' : _ref8$target;
682
+ return function (_ref9) {
683
+ var tr = _ref9.tr;
682
684
  if (!(0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_layout_column_menu', 'isEnabled', true)) {
683
685
  return null;
684
686
  }
685
- var selectedLayoutColumns = (0, _layoutColumnSelection.getSelectedLayoutColumns)(tr.selection);
686
- if (!selectedLayoutColumns || selectedLayoutColumns.selectedColumns.length < 2) {
687
+ var selectedLayoutColumnsResult = target === 'allColumns' ? (0, _layoutColumnSelection.getAllLayoutColumnsFromSelection)(tr.selection) : (0, _layoutColumnSelection.getSelectedLayoutColumnsFromSelection)(tr.selection);
688
+ if (!selectedLayoutColumnsResult || selectedLayoutColumnsResult.selectedLayoutColumns.length < 2) {
687
689
  return null;
688
690
  }
689
- var layoutSectionNode = selectedLayoutColumns.layoutSectionNode,
690
- selectedColumnIndices = selectedLayoutColumns.selectedColumnIndices,
691
- selectedColumns = selectedLayoutColumns.selectedColumns;
692
- var endIndex = selectedColumnIndices[selectedColumnIndices.length - 1];
693
- var selectedColumnCount = selectedColumns.length;
694
- var totalColumnCount = layoutSectionNode.childCount;
691
+ var layoutSectionNode = selectedLayoutColumnsResult.layoutSectionNode,
692
+ startIndex = selectedLayoutColumnsResult.startIndex,
693
+ endIndex = selectedLayoutColumnsResult.endIndex,
694
+ selectedLayoutColumns = selectedLayoutColumnsResult.selectedLayoutColumns;
695
695
  var existingWidths = (0, _utils.mapChildren)(layoutSectionNode, function (column) {
696
696
  return column.attrs.width;
697
697
  });
698
- var selectedWidths = selectedColumns.map(function (_ref9) {
699
- var node = _ref9.node;
698
+ var selectedWidths = selectedLayoutColumns.map(function (_ref0) {
699
+ var node = _ref0.node;
700
700
  return node.attrs.width;
701
701
  });
702
702
  var distribution = (0, _layoutColumnDistribution.calculateDistribution)(selectedWidths);
@@ -712,15 +712,14 @@ var distributeLayoutColumns = exports.distributeLayoutColumns = function distrib
712
712
  // Build new widths array: selected columns get equal share, unselected unchanged.
713
713
  // Assign rounded (2dp) equal widths to all selected cols except the last, which absorbs
714
714
  // the rounding remainder so the sum of selected widths equals selectedTotal exactly.
715
- var selectedIndexSet = new Set(selectedColumnIndices);
716
715
  var assignedToSelected = 0;
717
716
  var selectedAssignedCount = 0;
718
717
  var newWidths = existingWidths.map(function (w, idx) {
719
- if (!selectedIndexSet.has(idx)) {
718
+ if (idx < startIndex || idx > endIndex) {
720
719
  return w;
721
720
  }
722
721
  selectedAssignedCount += 1;
723
- if (selectedAssignedCount < selectedColumnCount) {
722
+ if (selectedAssignedCount < selectedLayoutColumns.length) {
724
723
  assignedToSelected += equalWidth;
725
724
  return equalWidth;
726
725
  }
@@ -729,10 +728,10 @@ var distributeLayoutColumns = exports.distributeLayoutColumns = function distrib
729
728
  });
730
729
 
731
730
  // Apply widths via setNodeMarkup per selected column — keeps nodes in place (preserves identity, marks, decorations)
732
- selectedColumns.forEach(function (_ref0, i) {
733
- var node = _ref0.node,
734
- pos = _ref0.pos;
735
- var colIdx = selectedColumnIndices[i];
731
+ selectedLayoutColumns.forEach(function (_ref1, i) {
732
+ var node = _ref1.node,
733
+ pos = _ref1.pos;
734
+ var colIdx = startIndex + i;
736
735
  tr.setNodeMarkup(pos, node.type, _objectSpread(_objectSpread({}, node.attrs), {}, {
737
736
  width: newWidths[colIdx]
738
737
  }));
@@ -742,11 +741,11 @@ var distributeLayoutColumns = exports.distributeLayoutColumns = function distrib
742
741
  actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT,
743
742
  actionSubjectId: _analytics.ACTION_SUBJECT_ID.LAYOUT_COLUMN,
744
743
  attributes: {
745
- columnCount: totalColumnCount,
744
+ columnCount: layoutSectionNode.childCount,
746
745
  endIndex: endIndex,
747
746
  inputMethod: inputMethod,
748
- selectedCount: selectedColumnCount,
749
- startIndex: selectedColumnIndices[0]
747
+ selectedCount: selectedLayoutColumns.length,
748
+ startIndex: startIndex
750
749
  },
751
750
  eventType: _analytics.EVENT_TYPE.TRACK
752
751
  })(tr);
@@ -754,11 +753,19 @@ var distributeLayoutColumns = exports.distributeLayoutColumns = function distrib
754
753
  return tr;
755
754
  };
756
755
  };
757
- var toggleLayoutColumnMenu = exports.toggleLayoutColumnMenu = function toggleLayoutColumnMenu(_ref1) {
758
- var anchorPos = _ref1.anchorPos,
759
- isOpen = _ref1.isOpen;
760
- return function (_ref10) {
761
- var tr = _ref10.tr;
756
+ var createDistributeLayoutColumnsCommand = exports.createDistributeLayoutColumnsCommand = function createDistributeLayoutColumnsCommand(editorAnalyticsAPI) {
757
+ return function () {
758
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
759
+ return distributeLayoutColumns(_objectSpread(_objectSpread({}, options), {}, {
760
+ editorAnalyticsAPI: editorAnalyticsAPI
761
+ }));
762
+ };
763
+ };
764
+ var toggleLayoutColumnMenu = exports.toggleLayoutColumnMenu = function toggleLayoutColumnMenu(_ref10) {
765
+ var anchorPos = _ref10.anchorPos,
766
+ isOpen = _ref10.isOpen;
767
+ return function (_ref11) {
768
+ var tr = _ref11.tr;
762
769
  tr.setMeta('toggleLayoutColumnMenu', {
763
770
  anchorPos: anchorPos,
764
771
  isOpen: isOpen
@@ -768,23 +775,20 @@ var toggleLayoutColumnMenu = exports.toggleLayoutColumnMenu = function toggleLay
768
775
  };
769
776
  };
770
777
  var deleteLayoutColumn = exports.deleteLayoutColumn = function deleteLayoutColumn(editorAnalyticsAPI) {
771
- return function (_ref11) {
772
- var tr = _ref11.tr;
778
+ return function (_ref12) {
779
+ var tr = _ref12.tr;
773
780
  if (!(0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_layout_column_menu', 'isEnabled', true)) {
774
781
  return null;
775
782
  }
776
- var selectedLayoutColumns = (0, _layoutColumnSelection.getSelectedLayoutColumns)(tr.selection);
777
- if (!selectedLayoutColumns) {
783
+ var selectedLayoutColumnsResult = (0, _layoutColumnSelection.getSelectedLayoutColumnsFromSelection)(tr.selection);
784
+ if (!selectedLayoutColumnsResult || selectedLayoutColumnsResult.selectedLayoutColumns.length === 0) {
778
785
  return null;
779
786
  }
780
- var layoutSectionNode = selectedLayoutColumns.layoutSectionNode,
781
- layoutSectionPos = selectedLayoutColumns.layoutSectionPos,
782
- selectedColumnIndices = selectedLayoutColumns.selectedColumnIndices,
783
- selectedColumns = selectedLayoutColumns.selectedColumns;
784
- var startIndex = selectedColumnIndices[0];
785
- var endIndex = selectedColumnIndices[selectedColumnIndices.length - 1];
786
- var selectedColumnCount = selectedColumns.length;
787
- var selectedColumnIndexSet = new Set(selectedColumnIndices);
787
+ var layoutSectionNode = selectedLayoutColumnsResult.layoutSectionNode,
788
+ layoutSectionPos = selectedLayoutColumnsResult.layoutSectionPos,
789
+ selectedLayoutColumns = selectedLayoutColumnsResult.selectedLayoutColumns,
790
+ startIndex = selectedLayoutColumnsResult.startIndex,
791
+ endIndex = selectedLayoutColumnsResult.endIndex;
788
792
  var emitDeleteColumnAnalytics = function emitDeleteColumnAnalytics(columnCount) {
789
793
  editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({
790
794
  action: _analytics.ACTION.DELETED,
@@ -794,7 +798,7 @@ var deleteLayoutColumn = exports.deleteLayoutColumn = function deleteLayoutColum
794
798
  columnCount: columnCount,
795
799
  endIndex: endIndex,
796
800
  inputMethod: _analytics.INPUT_METHOD.LAYOUT_COLUMN_MENU,
797
- selectedCount: selectedColumnCount,
801
+ selectedCount: selectedLayoutColumns.length,
798
802
  startIndex: startIndex
799
803
  },
800
804
  eventType: _analytics.EVENT_TYPE.TRACK
@@ -802,7 +806,7 @@ var deleteLayoutColumn = exports.deleteLayoutColumn = function deleteLayoutColum
802
806
  };
803
807
 
804
808
  // If all columns are selected, remove the entire layoutSection
805
- if (selectedColumnCount === layoutSectionNode.childCount) {
809
+ if (selectedLayoutColumns.length === layoutSectionNode.childCount) {
806
810
  tr.delete(layoutSectionPos, layoutSectionPos + layoutSectionNode.nodeSize);
807
811
  emitDeleteColumnAnalytics(0);
808
812
  tr.setMeta('scrollIntoView', false);
@@ -812,7 +816,7 @@ var deleteLayoutColumn = exports.deleteLayoutColumn = function deleteLayoutColum
812
816
  // Build new column list without the selected columns
813
817
  var remainingColumns = [];
814
818
  layoutSectionNode.forEach(function (column, _offset, index) {
815
- if (!selectedColumnIndexSet.has(index)) {
819
+ if (index < startIndex || index > endIndex) {
816
820
  remainingColumns.push(column);
817
821
  }
818
822
  });
@@ -821,12 +825,12 @@ var deleteLayoutColumn = exports.deleteLayoutColumn = function deleteLayoutColum
821
825
  var existingWidths = (0, _utils.mapChildren)(layoutSectionNode, function (column) {
822
826
  return column.attrs.width;
823
827
  });
824
- var redistributed = selectedColumnIndices.slice()
828
+ var redistributed = selectedLayoutColumns.map(function (_, i) {
829
+ return startIndex + i;
830
+ })
825
831
  // Delete highest indices first so lower original indices still point at the same columns
826
832
  // as each redistribution step shrinks the widths array.
827
- .sort(function (a, b) {
828
- return b - a;
829
- }).reduce(function (widths, selectedIndex) {
833
+ .reverse().reduce(function (widths, selectedIndex) {
830
834
  return (0, _layoutColumnDistribution.redistributeAfterDeletion)(widths, selectedIndex, _consts.MIN_LAYOUT_COLUMN_WIDTH_PERCENT);
831
835
  }, existingWidths);
832
836
  var updatedLayoutSectionNode = layoutSectionNode.copy(_model.Fragment.fromArray(remainingColumns));
@@ -3,127 +3,85 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
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';
6
+ exports.getSelectedLayoutColumnsFromSelection = exports.getLayoutColumnValign = exports.getLayoutColumnMenuAnchorPos = exports.getAllLayoutColumnsFromSelection = void 0;
7
+ var _utils = require("@atlaskit/editor-prosemirror/utils");
8
+ var findLayoutSectionFromSelection = function findLayoutSectionFromSelection(selection) {
9
+ return (0, _utils.findParentNodeOfType)(selection.$from.doc.type.schema.nodes.layoutSection)(selection);
11
10
  };
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);
11
+ var findLayoutColumnsFromLayoutSection = function findLayoutColumnsFromLayoutSection(layoutSectionNode) {
12
+ var layoutSectionPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
13
+ return (0, _utils.findChildrenByType)(layoutSectionNode, layoutSectionNode.type.schema.nodes.layoutColumn).map(function (_ref) {
14
+ var node = _ref.node,
15
+ pos = _ref.pos;
45
16
  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
- }]
17
+ node: node,
18
+ pos: pos + layoutSectionPos + 1
54
19
  };
55
- }
56
- if (selection.empty) {
57
- return undefined;
58
- }
59
- if (!(0, _experiments.editorExperiment)('platform_editor_block_menu', true)) {
20
+ });
21
+ };
22
+ var getSelectedLayoutColumnsFromSelection = exports.getSelectedLayoutColumnsFromSelection = function getSelectedLayoutColumnsFromSelection(selection) {
23
+ var layoutSection = findLayoutSectionFromSelection(selection);
24
+ if (!layoutSection) {
60
25
  return undefined;
61
26
  }
62
- var layoutSectionDepth = getLayoutSectionDepth(selection);
63
- if (layoutSectionDepth === undefined) {
27
+ var layoutSectionNode = layoutSection.node,
28
+ layoutSectionPos = layoutSection.pos;
29
+ var allLayoutColumns = findLayoutColumnsFromLayoutSection(layoutSectionNode, layoutSectionPos);
30
+ if (!allLayoutColumns.length) {
64
31
  return undefined;
65
32
  }
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;
33
+ var startIndex = -1;
34
+ var endIndex = -1;
35
+ var selectedLayoutColumns = allLayoutColumns.filter(function (_ref2, index) {
36
+ var node = _ref2.node,
37
+ pos = _ref2.pos;
38
+ var isSelected = selection.from <= pos && selection.to >= pos + node.nodeSize;
39
+ if (isSelected) {
40
+ if (startIndex === -1) {
41
+ startIndex = index;
42
+ }
43
+ endIndex = index;
82
44
  }
83
- selectedColumns.push({
84
- index: index,
85
- node: column,
86
- pos: columnStart
87
- });
45
+ return isSelected;
88
46
  });
89
-
90
- // TextSelection inside a single column is normal text editing, not a selected column set.
91
- if (invalidSelection || selectedColumns.length < 2) {
47
+ return {
48
+ layoutSectionNode: layoutSectionNode,
49
+ layoutSectionPos: layoutSectionPos,
50
+ selectedLayoutColumns: selectedLayoutColumns,
51
+ startIndex: startIndex,
52
+ endIndex: endIndex
53
+ };
54
+ };
55
+ var getAllLayoutColumnsFromSelection = exports.getAllLayoutColumnsFromSelection = function getAllLayoutColumnsFromSelection(selection) {
56
+ var layoutSection = findLayoutSectionFromSelection(selection);
57
+ if (!layoutSection) {
92
58
  return undefined;
93
59
  }
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) {
60
+ var layoutColumns = findLayoutColumnsFromLayoutSection(layoutSection.node, layoutSection.pos);
61
+ if (!(layoutColumns !== null && layoutColumns !== void 0 && layoutColumns.length)) {
99
62
  return undefined;
100
63
  }
101
64
  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
65
+ layoutSectionNode: layoutSection.node,
66
+ layoutSectionPos: layoutSection.pos,
67
+ selectedLayoutColumns: layoutColumns,
68
+ startIndex: 0,
69
+ endIndex: layoutColumns.length - 1
109
70
  };
110
71
  };
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
72
  var getLayoutColumnValign = exports.getLayoutColumnValign = function getLayoutColumnValign(layoutColumn) {
115
- var _ref2;
116
- return layoutColumn ? (_ref2 = layoutColumn.attrs.valign) !== null && _ref2 !== void 0 ? _ref2 : 'top' : undefined;
73
+ var _ref3;
74
+ return layoutColumn ? (_ref3 = layoutColumn.attrs.valign) !== null && _ref3 !== void 0 ? _ref3 : 'top' : undefined;
117
75
  };
118
76
  var getLayoutColumnMenuAnchorPos = exports.getLayoutColumnMenuAnchorPos = function getLayoutColumnMenuAnchorPos(selection, anchorPosFromHandle) {
119
77
  var _clickedSelectedColum, _selectedLayoutColumn;
120
- var selectedLayoutColumns = getSelectedLayoutColumns(selection);
78
+ var selectedLayoutColumns = getSelectedLayoutColumnsFromSelection(selection);
121
79
  if (!selectedLayoutColumns) {
122
80
  return undefined;
123
81
  }
124
- var clickedSelectedColumn = selectedLayoutColumns.selectedColumns.find(function (_ref3) {
125
- var pos = _ref3.pos;
82
+ var clickedSelectedColumn = selectedLayoutColumns.selectedLayoutColumns.find(function (_ref4) {
83
+ var pos = _ref4.pos;
126
84
  return pos === anchorPosFromHandle;
127
85
  });
128
- 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;
86
+ return (_clickedSelectedColum = clickedSelectedColumn === null || clickedSelectedColumn === void 0 ? void 0 : clickedSelectedColumn.pos) !== null && _clickedSelectedColum !== void 0 ? _clickedSelectedColum : (_selectedLayoutColumn = selectedLayoutColumns.selectedLayoutColumns[0]) === null || _selectedLayoutColumn === void 0 ? void 0 : _selectedLayoutColumn.pos;
129
87
  };
@@ -36,7 +36,7 @@ var DeleteColumnDropdownItem = exports.DeleteColumnDropdownItem = function Delet
36
36
  if (selectedLayoutColumns === undefined) {
37
37
  return null;
38
38
  }
39
- var selectedColumnCount = selectedLayoutColumns.selectedColumns.length;
39
+ var selectedColumnCount = selectedLayoutColumns.selectedLayoutColumns.length;
40
40
  return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItem, {
41
41
  onClick: onClick
42
42
  }, formatMessage(_messages.layoutMessages.deleteColumn, {
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.DistributeColumnsDropdownItem = void 0;
8
8
  var _react = _interopRequireWildcard(require("react"));
9
9
  var _reactIntl = require("react-intl");
10
+ var _analytics = require("@atlaskit/editor-common/analytics");
10
11
  var _messages = require("@atlaskit/editor-common/messages");
11
12
  var _editorToolbar = require("@atlaskit/editor-toolbar");
12
13
  var _layoutColumnDistribution = require("../../pm-plugins/utils/layout-column-distribution");
@@ -16,12 +17,16 @@ var DistributeColumnsDropdownItem = exports.DistributeColumnsDropdownItem = func
16
17
  var api = _ref.api;
17
18
  var _useIntl = (0, _reactIntl.useIntl)(),
18
19
  formatMessage = _useIntl.formatMessage;
19
- var selectedLayoutColumns = (0, _useSelectedLayoutColumns.useSelectedLayoutColumns)(api);
20
+ var selectedLayoutColumnsResult = (0, _useSelectedLayoutColumns.useSelectedLayoutColumns)(api);
21
+ var _ref2 = selectedLayoutColumnsResult !== null && selectedLayoutColumnsResult !== void 0 ? selectedLayoutColumnsResult : {},
22
+ selectedLayoutColumns = _ref2.selectedLayoutColumns;
20
23
  var handleClick = (0, _react.useCallback)(function () {
21
24
  var _api$core;
22
25
  api === null || api === void 0 || (_api$core = api.core) === null || _api$core === void 0 || _api$core.actions.execute(function (props) {
23
26
  var _api$layout, _api$layout2;
24
- var tr = api === null || api === void 0 || (_api$layout = api.layout) === null || _api$layout === void 0 ? void 0 : _api$layout.commands.distributeLayoutColumns(props);
27
+ var tr = api === null || api === void 0 || (_api$layout = api.layout) === null || _api$layout === void 0 ? void 0 : _api$layout.commands.distributeLayoutColumns({
28
+ inputMethod: _analytics.INPUT_METHOD.LAYOUT_COLUMN_MENU
29
+ })(props);
25
30
  if (!tr) {
26
31
  return null;
27
32
  }
@@ -34,15 +39,15 @@ var DistributeColumnsDropdownItem = exports.DistributeColumnsDropdownItem = func
34
39
  });
35
40
  }, [api]);
36
41
  var isAlreadyUniform = (0, _react.useMemo)(function () {
37
- if (!selectedLayoutColumns || selectedLayoutColumns.selectedColumns.length < 2) {
42
+ if (!selectedLayoutColumns || selectedLayoutColumns.length < 2) {
38
43
  return false;
39
44
  }
40
- var selectedWidths = selectedLayoutColumns.selectedColumns.map(function (col) {
45
+ var selectedWidths = selectedLayoutColumns.map(function (col) {
41
46
  return col.node.attrs.width;
42
47
  });
43
48
  return (0, _layoutColumnDistribution.isDistributedUniformly)(selectedWidths);
44
49
  }, [selectedLayoutColumns]);
45
- if (selectedLayoutColumns === undefined || selectedLayoutColumns.selectedColumns.length < 2) {
50
+ if (selectedLayoutColumns === undefined || selectedLayoutColumns.length < 2) {
46
51
  return null;
47
52
  }
48
53
  return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItem, {
@@ -10,7 +10,6 @@ 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("../../pm-plugins/utils/layout-column-selection");
14
13
  var _useSelectedLayoutColumns = require("./useSelectedLayoutColumns");
15
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); }
16
15
  var INSERT_COLUMN_OPTIONS = {
@@ -26,6 +25,7 @@ var INSERT_COLUMN_OPTIONS = {
26
25
  }
27
26
  };
28
27
  var InsertColumnDropdownItem = exports.InsertColumnDropdownItem = function InsertColumnDropdownItem(_ref) {
28
+ var _selectedLayoutColumn, _selectedLayoutColumn2;
29
29
  var api = _ref.api,
30
30
  side = _ref.side;
31
31
  var _useIntl = (0, _reactIntl.useIntl)(),
@@ -34,7 +34,7 @@ var InsertColumnDropdownItem = exports.InsertColumnDropdownItem = function Inser
34
34
  Icon = _INSERT_COLUMN_OPTION.Icon,
35
35
  label = _INSERT_COLUMN_OPTION.label;
36
36
  var selectedLayoutColumns = (0, _useSelectedLayoutColumns.useSelectedLayoutColumns)(api);
37
- var columnCount = (0, _layoutColumnSelection.getLayoutSectionColumnCount)(selectedLayoutColumns === null || selectedLayoutColumns === void 0 ? void 0 : selectedLayoutColumns.layoutSectionNode);
37
+ var columnCount = (_selectedLayoutColumn = selectedLayoutColumns === null || selectedLayoutColumns === void 0 || (_selectedLayoutColumn2 = selectedLayoutColumns.layoutSectionNode) === null || _selectedLayoutColumn2 === void 0 ? void 0 : _selectedLayoutColumn2.childCount) !== null && _selectedLayoutColumn !== void 0 ? _selectedLayoutColumn : 0;
38
38
  var maxColumnCount = (0, _actions.getEffectiveMaxLayoutColumns)();
39
39
  var canInsertColumn = selectedLayoutColumns !== undefined && columnCount < maxColumnCount;
40
40
  var onClick = (0, _react.useCallback)(function () {
@@ -20,7 +20,7 @@ var VerticalAlignDropdownItem = exports.VerticalAlignDropdownItem = function Ver
20
20
  var _useIntl = (0, _reactIntl.useIntl)(),
21
21
  formatMessage = _useIntl.formatMessage;
22
22
  var selectedLayoutColumns = (0, _useSelectedLayoutColumns.useSelectedLayoutColumns)(api);
23
- var isSelected = (_selectedLayoutColumn = selectedLayoutColumns === null || selectedLayoutColumns === void 0 ? void 0 : selectedLayoutColumns.selectedColumns.every(function (_ref2) {
23
+ var isSelected = (_selectedLayoutColumn = selectedLayoutColumns === null || selectedLayoutColumns === void 0 ? void 0 : selectedLayoutColumns.selectedLayoutColumns.every(function (_ref2) {
24
24
  var node = _ref2.node;
25
25
  return (0, _layoutColumnSelection.getLayoutColumnValign)(node) === value;
26
26
  })) !== null && _selectedLayoutColumn !== void 0 ? _selectedLayoutColumn : false;
@@ -20,7 +20,7 @@ var VerticalAlignNestedMenu = exports.VerticalAlignNestedMenu = function Vertica
20
20
  formatMessage = _useIntl.formatMessage;
21
21
  var selectedLayoutColumns = (0, _useSelectedLayoutColumns.useSelectedLayoutColumns)(api);
22
22
  var currentValign = (0, _react.useMemo)(function () {
23
- var selectedColumns = selectedLayoutColumns === null || selectedLayoutColumns === void 0 ? void 0 : selectedLayoutColumns.selectedColumns;
23
+ var selectedColumns = selectedLayoutColumns === null || selectedLayoutColumns === void 0 ? void 0 : selectedLayoutColumns.selectedLayoutColumns;
24
24
  var firstColumn = selectedColumns === null || selectedColumns === void 0 ? void 0 : selectedColumns[0];
25
25
  var firstValign = (0, _layoutColumnSelection.getLayoutColumnValign)(firstColumn === null || firstColumn === void 0 ? void 0 : firstColumn.node);
26
26
  if (!firstValign || !(selectedColumns !== null && selectedColumns !== void 0 && selectedColumns.every(function (_ref2) {
@@ -26,7 +26,7 @@ var TOOLBAR_MENU_SELECTOR = '[data-toolbar-component="menu"]';
26
26
  */
27
27
  var getLayoutColumnMenuTarget = function getLayoutColumnMenuTarget(editorView, selection, anchorPosFromHandle) {
28
28
  var _columnDomRef$parentE;
29
- var anchorPos = (0, _layoutColumnSelection.getLayoutColumnMenuAnchorPos)(selection, anchorPosFromHandle);
29
+ var anchorPos = selection && (0, _layoutColumnSelection.getLayoutColumnMenuAnchorPos)(selection, anchorPosFromHandle);
30
30
  if (anchorPos === undefined) {
31
31
  return null;
32
32
  }
@@ -7,8 +7,9 @@ exports.useSelectedLayoutColumns = void 0;
7
7
  var _hooks = require("@atlaskit/editor-common/hooks");
8
8
  var _layoutColumnSelection = require("../../pm-plugins/utils/layout-column-selection");
9
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);
10
+ return (0, _hooks.useSharedPluginStateWithSelector)(api, ['selection'], function (_ref) {
11
+ var selectionState = _ref.selectionState;
12
+ var selectedLayoutColumns = (selectionState === null || selectionState === void 0 ? void 0 : selectionState.selection) && (0, _layoutColumnSelection.getSelectedLayoutColumnsFromSelection)(selectionState.selection);
13
+ return selectedLayoutColumns !== null && selectedLayoutColumns !== void 0 && selectedLayoutColumns.selectedLayoutColumns.length ? selectedLayoutColumns : undefined;
13
14
  });
14
15
  };