@atlaskit/editor-plugin-layout 10.3.4 → 10.3.5
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 +8 -0
- package/dist/cjs/layoutPlugin.js +4 -0
- package/dist/cjs/pm-plugins/actions.js +102 -7
- package/dist/cjs/pm-plugins/column-resize-divider.js +7 -9
- package/dist/cjs/pm-plugins/consts.js +4 -1
- package/dist/cjs/pm-plugins/utils/redistribute-proportionally.js +111 -0
- package/dist/cjs/ui/LayoutColumnMenu/InsertColumnDropdownItem.js +69 -0
- package/dist/cjs/ui/LayoutColumnMenu/VerticalAlignDropdownItem.js +7 -9
- package/dist/cjs/ui/LayoutColumnMenu/VerticalAlignNestedMenu.js +11 -10
- package/dist/cjs/ui/LayoutColumnMenu/components.js +21 -0
- package/dist/cjs/ui/LayoutColumnMenu/index.js +39 -11
- package/dist/cjs/ui/LayoutColumnMenu/keys.js +10 -2
- package/dist/cjs/ui/LayoutColumnMenu/layoutColumnSelection.js +21 -0
- package/dist/cjs/ui/LayoutColumnMenu/useCurrentLayoutColumn.js +20 -0
- package/dist/es2019/layoutPlugin.js +5 -1
- package/dist/es2019/pm-plugins/actions.js +98 -1
- package/dist/es2019/pm-plugins/column-resize-divider.js +8 -9
- package/dist/es2019/pm-plugins/consts.js +3 -0
- package/dist/es2019/pm-plugins/utils/redistribute-proportionally.js +89 -0
- package/dist/es2019/ui/LayoutColumnMenu/InsertColumnDropdownItem.js +64 -0
- package/dist/es2019/ui/LayoutColumnMenu/VerticalAlignDropdownItem.js +6 -11
- package/dist/es2019/ui/LayoutColumnMenu/VerticalAlignNestedMenu.js +7 -10
- package/dist/es2019/ui/LayoutColumnMenu/components.js +22 -1
- package/dist/es2019/ui/LayoutColumnMenu/index.js +34 -13
- package/dist/es2019/ui/LayoutColumnMenu/keys.js +12 -2
- package/dist/es2019/ui/LayoutColumnMenu/layoutColumnSelection.js +9 -0
- package/dist/es2019/ui/LayoutColumnMenu/useCurrentLayoutColumn.js +10 -0
- package/dist/esm/layoutPlugin.js +5 -1
- package/dist/esm/pm-plugins/actions.js +101 -7
- package/dist/esm/pm-plugins/column-resize-divider.js +8 -9
- package/dist/esm/pm-plugins/consts.js +3 -0
- package/dist/esm/pm-plugins/utils/redistribute-proportionally.js +104 -0
- package/dist/esm/ui/LayoutColumnMenu/InsertColumnDropdownItem.js +61 -0
- package/dist/esm/ui/LayoutColumnMenu/VerticalAlignDropdownItem.js +8 -10
- package/dist/esm/ui/LayoutColumnMenu/VerticalAlignNestedMenu.js +9 -9
- package/dist/esm/ui/LayoutColumnMenu/components.js +22 -1
- package/dist/esm/ui/LayoutColumnMenu/index.js +40 -13
- package/dist/esm/ui/LayoutColumnMenu/keys.js +9 -1
- package/dist/esm/ui/LayoutColumnMenu/layoutColumnSelection.js +15 -0
- package/dist/esm/ui/LayoutColumnMenu/useCurrentLayoutColumn.js +14 -0
- package/dist/types/layoutPluginType.d.ts +3 -2
- package/dist/types/pm-plugins/actions.d.ts +6 -0
- package/dist/types/pm-plugins/consts.d.ts +3 -0
- package/dist/types/pm-plugins/utils/redistribute-proportionally.d.ts +1 -0
- package/dist/types/ui/LayoutColumnMenu/InsertColumnDropdownItem.d.ts +10 -0
- package/dist/types/ui/LayoutColumnMenu/keys.d.ts +2 -0
- package/dist/types/ui/LayoutColumnMenu/layoutColumnSelection.d.ts +7 -0
- package/dist/types/ui/LayoutColumnMenu/useCurrentLayoutColumn.d.ts +5 -0
- package/dist/types-ts4.5/layoutPluginType.d.ts +3 -2
- package/dist/types-ts4.5/pm-plugins/actions.d.ts +6 -0
- package/dist/types-ts4.5/pm-plugins/consts.d.ts +3 -0
- package/dist/types-ts4.5/pm-plugins/utils/redistribute-proportionally.d.ts +1 -0
- package/dist/types-ts4.5/ui/LayoutColumnMenu/InsertColumnDropdownItem.d.ts +10 -0
- package/dist/types-ts4.5/ui/LayoutColumnMenu/keys.d.ts +2 -0
- package/dist/types-ts4.5/ui/LayoutColumnMenu/layoutColumnSelection.d.ts +7 -0
- package/dist/types-ts4.5/ui/LayoutColumnMenu/useCurrentLayoutColumn.d.ts +5 -0
- package/package.json +2 -2
- package/dist/cjs/ui/LayoutColumnMenu/useCurrentLayoutColumnValign.js +0 -22
- package/dist/es2019/ui/LayoutColumnMenu/useCurrentLayoutColumnValign.js +0 -14
- package/dist/esm/ui/LayoutColumnMenu/useCurrentLayoutColumnValign.js +0 -16
- package/dist/types/ui/LayoutColumnMenu/useCurrentLayoutColumnValign.d.ts +0 -11
- package/dist/types-ts4.5/ui/LayoutColumnMenu/useCurrentLayoutColumnValign.d.ts +0 -11
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-layout
|
|
2
2
|
|
|
3
|
+
## 10.3.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`626fb6e8ce019`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/626fb6e8ce019) -
|
|
8
|
+
Wire layout column menu insert actions with proportional width redistribution.
|
|
9
|
+
- Updated dependencies
|
|
10
|
+
|
|
3
11
|
## 10.3.4
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
package/dist/cjs/layoutPlugin.js
CHANGED
|
@@ -309,6 +309,10 @@ var layoutPlugin = exports.layoutPlugin = function layoutPlugin(_ref) {
|
|
|
309
309
|
return _pluginKey.pluginKey.getState(editorState);
|
|
310
310
|
},
|
|
311
311
|
commands: {
|
|
312
|
+
insertLayoutColumn: function insertLayoutColumn(side) {
|
|
313
|
+
var _api$analytics4;
|
|
314
|
+
return (0, _actions.insertLayoutColumn)(side, api === null || api === void 0 || (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions);
|
|
315
|
+
},
|
|
312
316
|
setLayoutColumnValign: _actions.setLayoutColumnValign,
|
|
313
317
|
toggleLayoutColumnMenu: _actions.toggleLayoutColumnMenu
|
|
314
318
|
}
|
|
@@ -6,7 +6,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.fixColumnStructure = exports.fixColumnSizes = exports.deleteActiveLayoutNode = exports.createMultiColumnLayoutSection = exports.createDefaultLayoutSection = exports.TWO_COL_LAYOUTS = exports.THREE_COL_LAYOUTS = exports.ONE_COL_LAYOUTS = void 0;
|
|
8
8
|
exports.forceSectionToPresetLayout = forceSectionToPresetLayout;
|
|
9
|
-
exports.
|
|
9
|
+
exports.getEffectiveMaxLayoutColumns = getEffectiveMaxLayoutColumns;
|
|
10
|
+
exports.toggleLayoutColumnMenu = exports.setPresetLayout = exports.setLayoutColumnValign = exports.insertLayoutColumnsWithAnalytics = exports.insertLayoutColumns = exports.insertLayoutColumn = exports.getSelectedLayout = exports.getPresetLayout = void 0;
|
|
10
11
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
12
|
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
12
13
|
var _editorAnalytics = require("@atlaskit/editor-common/editor-analytics");
|
|
@@ -19,6 +20,7 @@ var _expValEqualsNoExposure = require("@atlaskit/tmp-editor-statsig/exp-val-equa
|
|
|
19
20
|
var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
|
|
20
21
|
var _consts = require("./consts");
|
|
21
22
|
var _pluginKey = require("./plugin-key");
|
|
23
|
+
var _redistributeProportionally = require("./utils/redistribute-proportionally");
|
|
22
24
|
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; }
|
|
23
25
|
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; }
|
|
24
26
|
var ONE_COL_LAYOUTS = exports.ONE_COL_LAYOUTS = ['single'];
|
|
@@ -549,9 +551,102 @@ var formatLayoutName = function formatLayoutName(layout) {
|
|
|
549
551
|
return _analytics.LAYOUT_TYPE.THREE_WITH_SIDEBARS;
|
|
550
552
|
}
|
|
551
553
|
};
|
|
554
|
+
/**
|
|
555
|
+
* Returns the active maximum layout column count for the current advanced layouts experiment state.
|
|
556
|
+
*/
|
|
557
|
+
function getEffectiveMaxLayoutColumns() {
|
|
558
|
+
return (0, _experiments.editorExperiment)('advanced_layouts', true) ? _consts.MAX_LAYOUT_COLUMNS : _consts.MAX_STANDARD_LAYOUT_COLUMNS;
|
|
559
|
+
}
|
|
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
|
+
var insertLayoutColumnAt = function insertLayoutColumnAt(side, editorAnalyticsAPI) {
|
|
586
|
+
return function (_ref5) {
|
|
587
|
+
var tr = _ref5.tr;
|
|
588
|
+
if (!(0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_layout_column_menu', 'isEnabled', true)) {
|
|
589
|
+
return null;
|
|
590
|
+
}
|
|
591
|
+
var selectedColumn = getSelectedLayoutColumnInSection(tr);
|
|
592
|
+
if (!selectedColumn) {
|
|
593
|
+
return null;
|
|
594
|
+
}
|
|
595
|
+
var layoutSectionNode = selectedColumn.layoutSectionNode,
|
|
596
|
+
layoutSectionPos = selectedColumn.layoutSectionPos,
|
|
597
|
+
selectedColumnIndex = selectedColumn.selectedColumnIndex;
|
|
598
|
+
if (layoutSectionNode.childCount >= getEffectiveMaxLayoutColumns()) {
|
|
599
|
+
return null;
|
|
600
|
+
}
|
|
601
|
+
var insertIndex = side === 'left' ? selectedColumnIndex : selectedColumnIndex + 1;
|
|
602
|
+
var existingWidths = (0, _utils.mapChildren)(layoutSectionNode, function (column) {
|
|
603
|
+
return column.attrs.width;
|
|
604
|
+
});
|
|
605
|
+
var redistributedWidths = (0, _redistributeProportionally.redistributeProportionally)(existingWidths, insertIndex, getEffectiveMaxLayoutColumns(), _consts.MIN_LAYOUT_COLUMN_WIDTH_PERCENT);
|
|
606
|
+
if (redistributedWidths === existingWidths) {
|
|
607
|
+
return null;
|
|
608
|
+
}
|
|
609
|
+
var layoutColumn = tr.doc.type.schema.nodes.layoutColumn;
|
|
610
|
+
var newColumn = layoutColumn.createAndFill({
|
|
611
|
+
width: redistributedWidths[insertIndex]
|
|
612
|
+
});
|
|
613
|
+
if (!newColumn) {
|
|
614
|
+
return null;
|
|
615
|
+
}
|
|
616
|
+
var updatedColumns = [];
|
|
617
|
+
layoutSectionNode.forEach(function (column, _offset, index) {
|
|
618
|
+
if (index === insertIndex) {
|
|
619
|
+
updatedColumns.push(newColumn);
|
|
620
|
+
}
|
|
621
|
+
updatedColumns.push(column);
|
|
622
|
+
});
|
|
623
|
+
if (insertIndex === layoutSectionNode.childCount) {
|
|
624
|
+
updatedColumns.push(newColumn);
|
|
625
|
+
}
|
|
626
|
+
var updatedLayoutSectionNode = layoutSectionNode.copy(_model.Fragment.fromArray(updatedColumns));
|
|
627
|
+
tr.replaceWith(layoutSectionPos + 1, layoutSectionPos + layoutSectionNode.nodeSize - 1, columnWidth(updatedLayoutSectionNode, tr.doc.type.schema, redistributedWidths));
|
|
628
|
+
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({
|
|
629
|
+
action: _analytics.ACTION.INSERTED,
|
|
630
|
+
actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT,
|
|
631
|
+
actionSubjectId: _analytics.ACTION_SUBJECT_ID.LAYOUT_COLUMN,
|
|
632
|
+
attributes: {
|
|
633
|
+
columnCount: redistributedWidths.length,
|
|
634
|
+
inputMethod: _analytics.INPUT_METHOD.LAYOUT_COLUMN_MENU,
|
|
635
|
+
selectedIndex: selectedColumnIndex,
|
|
636
|
+
side: side
|
|
637
|
+
},
|
|
638
|
+
eventType: _analytics.EVENT_TYPE.TRACK
|
|
639
|
+
})(tr);
|
|
640
|
+
tr.setMeta('scrollIntoView', false);
|
|
641
|
+
return tr;
|
|
642
|
+
};
|
|
643
|
+
};
|
|
644
|
+
var insertLayoutColumn = exports.insertLayoutColumn = function insertLayoutColumn(side, editorAnalyticsAPI) {
|
|
645
|
+
return insertLayoutColumnAt(side, editorAnalyticsAPI);
|
|
646
|
+
};
|
|
552
647
|
var setLayoutColumnValign = exports.setLayoutColumnValign = function setLayoutColumnValign(valign) {
|
|
553
|
-
return function (
|
|
554
|
-
var tr =
|
|
648
|
+
return function (_ref6) {
|
|
649
|
+
var tr = _ref6.tr;
|
|
555
650
|
if (!(0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_layout_column_menu', 'isEnabled', true)) {
|
|
556
651
|
return null;
|
|
557
652
|
}
|
|
@@ -573,10 +668,10 @@ var setLayoutColumnValign = exports.setLayoutColumnValign = function setLayoutCo
|
|
|
573
668
|
return tr;
|
|
574
669
|
};
|
|
575
670
|
};
|
|
576
|
-
var toggleLayoutColumnMenu = exports.toggleLayoutColumnMenu = function toggleLayoutColumnMenu(
|
|
577
|
-
var isOpen =
|
|
578
|
-
return function (
|
|
579
|
-
var tr =
|
|
671
|
+
var toggleLayoutColumnMenu = exports.toggleLayoutColumnMenu = function toggleLayoutColumnMenu(_ref7) {
|
|
672
|
+
var isOpen = _ref7.isOpen;
|
|
673
|
+
return function (_ref8) {
|
|
674
|
+
var tr = _ref8.tr;
|
|
580
675
|
tr.setMeta('toggleLayoutColumnMenu', {
|
|
581
676
|
isOpen: isOpen
|
|
582
677
|
});
|
|
@@ -9,6 +9,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
9
9
|
var _bindEventListener = require("bind-event-listener");
|
|
10
10
|
var _model = require("@atlaskit/editor-prosemirror/model");
|
|
11
11
|
var _view = require("@atlaskit/editor-prosemirror/view");
|
|
12
|
+
var _consts = require("./consts");
|
|
12
13
|
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; }
|
|
13
14
|
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; }
|
|
14
15
|
// Class names for the column resize divider widget — must stay in sync with layout.ts in editor-core
|
|
@@ -16,9 +17,6 @@ var layoutColumnDividerClassName = 'layout-column-divider';
|
|
|
16
17
|
var layoutColumnDividerRailClassName = 'layout-column-divider-rail';
|
|
17
18
|
var layoutColumnDividerThumbClassName = 'layout-column-divider-thumb';
|
|
18
19
|
|
|
19
|
-
// Minimum column width percentage to prevent columns from collapsing
|
|
20
|
-
var MIN_COLUMN_WIDTH_PERCENT = 5;
|
|
21
|
-
|
|
22
20
|
// Module-level drag state so it survives widget DOM recreation during transactions.
|
|
23
21
|
var dragState = null;
|
|
24
22
|
|
|
@@ -79,12 +77,12 @@ var calcDragWidths = function calcDragWidths(clientX) {
|
|
|
79
77
|
var deltaPercent = deltaX / columnsWidth * 100;
|
|
80
78
|
var leftWidth = dragState.startLeftWidth + deltaPercent;
|
|
81
79
|
var rightWidth = dragState.startRightWidth - deltaPercent;
|
|
82
|
-
if (leftWidth <
|
|
83
|
-
leftWidth =
|
|
84
|
-
rightWidth = combinedWidth -
|
|
85
|
-
} else if (rightWidth <
|
|
86
|
-
rightWidth =
|
|
87
|
-
leftWidth = combinedWidth -
|
|
80
|
+
if (leftWidth < _consts.MIN_LAYOUT_COLUMN_WIDTH_PERCENT) {
|
|
81
|
+
leftWidth = _consts.MIN_LAYOUT_COLUMN_WIDTH_PERCENT;
|
|
82
|
+
rightWidth = combinedWidth - _consts.MIN_LAYOUT_COLUMN_WIDTH_PERCENT;
|
|
83
|
+
} else if (rightWidth < _consts.MIN_LAYOUT_COLUMN_WIDTH_PERCENT) {
|
|
84
|
+
rightWidth = _consts.MIN_LAYOUT_COLUMN_WIDTH_PERCENT;
|
|
85
|
+
leftWidth = combinedWidth - _consts.MIN_LAYOUT_COLUMN_WIDTH_PERCENT;
|
|
88
86
|
}
|
|
89
87
|
return {
|
|
90
88
|
leftWidth: leftWidth,
|
|
@@ -3,7 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.EVEN_DISTRIBUTED_COL_WIDTHS = void 0;
|
|
6
|
+
exports.MIN_LAYOUT_COLUMN_WIDTH_PERCENT = exports.MAX_STANDARD_LAYOUT_COLUMNS = exports.MAX_LAYOUT_COLUMNS = exports.EVEN_DISTRIBUTED_COL_WIDTHS = void 0;
|
|
7
|
+
var MAX_STANDARD_LAYOUT_COLUMNS = exports.MAX_STANDARD_LAYOUT_COLUMNS = 3;
|
|
8
|
+
var MAX_LAYOUT_COLUMNS = exports.MAX_LAYOUT_COLUMNS = 5;
|
|
9
|
+
var MIN_LAYOUT_COLUMN_WIDTH_PERCENT = exports.MIN_LAYOUT_COLUMN_WIDTH_PERCENT = 5;
|
|
7
10
|
var EVEN_DISTRIBUTED_COL_WIDTHS = exports.EVEN_DISTRIBUTED_COL_WIDTHS = {
|
|
8
11
|
1: 100,
|
|
9
12
|
2: 50,
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.redistributeProportionally = void 0;
|
|
8
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
+
var roundLayoutColumnWidth = function roundLayoutColumnWidth(width) {
|
|
10
|
+
return Number(width.toFixed(2));
|
|
11
|
+
};
|
|
12
|
+
var sumWidths = function sumWidths(widths) {
|
|
13
|
+
return widths.reduce(function (sum, width) {
|
|
14
|
+
return sum + width;
|
|
15
|
+
}, 0);
|
|
16
|
+
};
|
|
17
|
+
var isValidWidth = function isValidWidth(width) {
|
|
18
|
+
return Number.isFinite(width) && width > 0;
|
|
19
|
+
};
|
|
20
|
+
var normaliseWidthsTotal = function normaliseWidthsTotal(widths, totalWidth, minWidth) {
|
|
21
|
+
var roundedWidths = widths.map(roundLayoutColumnWidth);
|
|
22
|
+
var remainder = roundLayoutColumnWidth(totalWidth - sumWidths(roundedWidths));
|
|
23
|
+
if (remainder === 0 || roundedWidths.length === 0) {
|
|
24
|
+
return roundedWidths;
|
|
25
|
+
}
|
|
26
|
+
var adjustmentIndex = 0;
|
|
27
|
+
roundedWidths.forEach(function (width, index) {
|
|
28
|
+
if (width > roundedWidths[adjustmentIndex]) {
|
|
29
|
+
adjustmentIndex = index;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
var adjustedWidth = roundLayoutColumnWidth(roundedWidths[adjustmentIndex] + remainder);
|
|
33
|
+
if (adjustedWidth < minWidth) {
|
|
34
|
+
return roundedWidths;
|
|
35
|
+
}
|
|
36
|
+
return roundedWidths.map(function (width, index) {
|
|
37
|
+
return index === adjustmentIndex ? adjustedWidth : width;
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
var redistributeWithMinimumWidth = function redistributeWithMinimumWidth(_ref) {
|
|
41
|
+
var minWidth = _ref.minWidth,
|
|
42
|
+
totalWidth = _ref.totalWidth,
|
|
43
|
+
weights = _ref.weights;
|
|
44
|
+
if (weights.length * minWidth > totalWidth) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
var widths = Array(weights.length).fill(0);
|
|
48
|
+
var clampedIndexes = new Set();
|
|
49
|
+
var remainingWidth = totalWidth;
|
|
50
|
+
var remainingWeight = sumWidths(weights);
|
|
51
|
+
var _loop = function _loop() {
|
|
52
|
+
var remainingWidthForPass = remainingWidth;
|
|
53
|
+
var remainingWeightForPass = remainingWeight;
|
|
54
|
+
var indexesToClamp = [];
|
|
55
|
+
weights.forEach(function (weight, index) {
|
|
56
|
+
if (clampedIndexes.has(index)) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
var proportionalWidth = remainingWeightForPass > 0 ? weight / remainingWeightForPass * remainingWidthForPass : 0;
|
|
60
|
+
if (proportionalWidth < minWidth) {
|
|
61
|
+
indexesToClamp.push(index);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
if (indexesToClamp.length === 0) {
|
|
65
|
+
return 1; // break
|
|
66
|
+
}
|
|
67
|
+
indexesToClamp.forEach(function (index) {
|
|
68
|
+
widths[index] = minWidth;
|
|
69
|
+
clampedIndexes.add(index);
|
|
70
|
+
remainingWidth -= minWidth;
|
|
71
|
+
remainingWeight -= weights[index];
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
while (clampedIndexes.size < weights.length) {
|
|
75
|
+
if (_loop()) break;
|
|
76
|
+
}
|
|
77
|
+
weights.forEach(function (weight, index) {
|
|
78
|
+
if (!clampedIndexes.has(index)) {
|
|
79
|
+
widths[index] = remainingWeight > 0 ? weight / remainingWeight * remainingWidth : minWidth;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
return widths;
|
|
83
|
+
};
|
|
84
|
+
var redistributeProportionally = exports.redistributeProportionally = function redistributeProportionally(currentWidths, insertIndex, maxColumns, minWidth) {
|
|
85
|
+
if (currentWidths.length === 0 || !Number.isInteger(maxColumns) || maxColumns <= 0 || currentWidths.length >= maxColumns || insertIndex < 0 || insertIndex > currentWidths.length || !isValidWidth(minWidth) || currentWidths.some(function (width) {
|
|
86
|
+
return !isValidWidth(width);
|
|
87
|
+
})) {
|
|
88
|
+
return currentWidths;
|
|
89
|
+
}
|
|
90
|
+
var currentTotalWidth = sumWidths(currentWidths);
|
|
91
|
+
if (!isValidWidth(currentTotalWidth)) {
|
|
92
|
+
return currentWidths;
|
|
93
|
+
}
|
|
94
|
+
var targetTotalWidth = Math.round(currentTotalWidth) === 100 ? 100 : currentTotalWidth;
|
|
95
|
+
var newColumnWidth = Math.max(minWidth, roundLayoutColumnWidth(targetTotalWidth / (currentWidths.length + 1)));
|
|
96
|
+
var existingColumnsTotalWidth = targetTotalWidth - newColumnWidth;
|
|
97
|
+
if (existingColumnsTotalWidth < currentWidths.length * minWidth) {
|
|
98
|
+
return currentWidths;
|
|
99
|
+
}
|
|
100
|
+
var redistributedExistingWidths = redistributeWithMinimumWidth({
|
|
101
|
+
weights: currentWidths,
|
|
102
|
+
totalWidth: existingColumnsTotalWidth,
|
|
103
|
+
minWidth: minWidth
|
|
104
|
+
});
|
|
105
|
+
if (!redistributedExistingWidths) {
|
|
106
|
+
return currentWidths;
|
|
107
|
+
}
|
|
108
|
+
var nextWidths = (0, _toConsumableArray2.default)(redistributedExistingWidths);
|
|
109
|
+
nextWidths.splice(insertIndex, 0, newColumnWidth);
|
|
110
|
+
return normaliseWidthsTotal(nextWidths, targetTotalWidth, minWidth);
|
|
111
|
+
};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.InsertColumnDropdownItem = void 0;
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _reactIntl = require("react-intl");
|
|
10
|
+
var _messages = require("@atlaskit/editor-common/messages");
|
|
11
|
+
var _editorToolbar = require("@atlaskit/editor-toolbar");
|
|
12
|
+
var _actions = require("../../pm-plugins/actions");
|
|
13
|
+
var _layoutColumnSelection = require("./layoutColumnSelection");
|
|
14
|
+
var _useCurrentLayoutColumn = require("./useCurrentLayoutColumn");
|
|
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
|
+
var INSERT_COLUMN_OPTIONS = {
|
|
17
|
+
left: {
|
|
18
|
+
Icon: _editorToolbar.TableColumnAddLeftIcon,
|
|
19
|
+
label: _messages.layoutMessages.insertColumnLeft,
|
|
20
|
+
side: 'left'
|
|
21
|
+
},
|
|
22
|
+
right: {
|
|
23
|
+
Icon: _editorToolbar.TableColumnAddRightIcon,
|
|
24
|
+
label: _messages.layoutMessages.insertColumnRight,
|
|
25
|
+
side: 'right'
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
var InsertColumnDropdownItem = exports.InsertColumnDropdownItem = function InsertColumnDropdownItem(_ref) {
|
|
29
|
+
var api = _ref.api,
|
|
30
|
+
side = _ref.side;
|
|
31
|
+
var _useIntl = (0, _reactIntl.useIntl)(),
|
|
32
|
+
formatMessage = _useIntl.formatMessage;
|
|
33
|
+
var _INSERT_COLUMN_OPTION = INSERT_COLUMN_OPTIONS[side],
|
|
34
|
+
Icon = _INSERT_COLUMN_OPTION.Icon,
|
|
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);
|
|
39
|
+
var maxColumnCount = (0, _actions.getEffectiveMaxLayoutColumns)();
|
|
40
|
+
var canInsertColumn = currentColumn !== undefined && columnCount < maxColumnCount;
|
|
41
|
+
var onClick = (0, _react.useCallback)(function () {
|
|
42
|
+
var _api$layout, _api$core;
|
|
43
|
+
var insertCommand = api === null || api === void 0 || (_api$layout = api.layout) === null || _api$layout === void 0 ? void 0 : _api$layout.commands.insertLayoutColumn(side);
|
|
44
|
+
api === null || api === void 0 || (_api$core = api.core) === null || _api$core === void 0 || _api$core.actions.execute(function (props) {
|
|
45
|
+
var _api$layout2;
|
|
46
|
+
var tr = insertCommand === null || insertCommand === void 0 ? void 0 : insertCommand(props);
|
|
47
|
+
if (!tr) {
|
|
48
|
+
return tr !== null && tr !== void 0 ? tr : null;
|
|
49
|
+
}
|
|
50
|
+
api === null || api === void 0 || (_api$layout2 = api.layout) === null || _api$layout2 === void 0 || _api$layout2.commands.toggleLayoutColumnMenu({
|
|
51
|
+
isOpen: false
|
|
52
|
+
})({
|
|
53
|
+
tr: tr
|
|
54
|
+
});
|
|
55
|
+
return tr;
|
|
56
|
+
});
|
|
57
|
+
}, [api, side]);
|
|
58
|
+
if (!canInsertColumn) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItem, {
|
|
62
|
+
elemBefore: /*#__PURE__*/_react.default.createElement(Icon, {
|
|
63
|
+
color: "currentColor",
|
|
64
|
+
label: "",
|
|
65
|
+
size: "small"
|
|
66
|
+
}),
|
|
67
|
+
onClick: onClick
|
|
68
|
+
}, formatMessage(label));
|
|
69
|
+
};
|
|
@@ -8,7 +8,8 @@ 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
|
|
11
|
+
var _layoutColumnSelection = require("./layoutColumnSelection");
|
|
12
|
+
var _useCurrentLayoutColumn = require("./useCurrentLayoutColumn");
|
|
12
13
|
var _verticalAlignIcons = require("./verticalAlignIcons");
|
|
13
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); }
|
|
14
15
|
var VerticalAlignDropdownItem = exports.VerticalAlignDropdownItem = function VerticalAlignDropdownItem(_ref) {
|
|
@@ -17,24 +18,21 @@ var VerticalAlignDropdownItem = exports.VerticalAlignDropdownItem = function Ver
|
|
|
17
18
|
value = _ref.value;
|
|
18
19
|
var _useIntl = (0, _reactIntl.useIntl)(),
|
|
19
20
|
formatMessage = _useIntl.formatMessage;
|
|
20
|
-
var
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
var currentColumn = (0, _useCurrentLayoutColumn.useCurrentLayoutColumn)(api);
|
|
22
|
+
var currentValign = (0, _react.useMemo)(function () {
|
|
23
|
+
return (0, _layoutColumnSelection.getLayoutColumnValign)(currentColumn);
|
|
24
|
+
}, [currentColumn]);
|
|
23
25
|
var Icon = _verticalAlignIcons.VERTICAL_ALIGN_ICONS[value];
|
|
24
26
|
var onClick = (0, _react.useCallback)(function () {
|
|
25
27
|
var _api$core, _api$layout;
|
|
26
28
|
api === null || api === void 0 || (_api$core = api.core) === null || _api$core === void 0 || _api$core.actions.execute(api === null || api === void 0 || (_api$layout = api.layout) === null || _api$layout === void 0 ? void 0 : _api$layout.commands.setLayoutColumnValign(value));
|
|
27
29
|
}, [api, value]);
|
|
28
|
-
if (!selectedColumn) {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
30
|
return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItem, {
|
|
32
31
|
elemBefore: /*#__PURE__*/_react.default.createElement(Icon, {
|
|
33
32
|
label: "",
|
|
34
33
|
size: "small"
|
|
35
34
|
}),
|
|
36
35
|
isSelected: currentValign === value,
|
|
37
|
-
onClick: onClick
|
|
38
|
-
testId: "layout-column-align-".concat(value)
|
|
36
|
+
onClick: onClick
|
|
39
37
|
}, formatMessage(label));
|
|
40
38
|
};
|
|
@@ -1,26 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.VerticalAlignNestedMenu = void 0;
|
|
8
|
-
var _react =
|
|
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
|
|
12
|
+
var _layoutColumnSelection = require("./layoutColumnSelection");
|
|
13
|
+
var _useCurrentLayoutColumn = require("./useCurrentLayoutColumn");
|
|
13
14
|
var _verticalAlignIcons = require("./verticalAlignIcons");
|
|
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); }
|
|
14
16
|
var VerticalAlignNestedMenu = exports.VerticalAlignNestedMenu = function VerticalAlignNestedMenu(_ref) {
|
|
15
17
|
var api = _ref.api,
|
|
16
18
|
children = _ref.children;
|
|
17
19
|
var _useIntl = (0, _reactIntl.useIntl)(),
|
|
18
20
|
formatMessage = _useIntl.formatMessage;
|
|
19
|
-
var
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
var currentColumn = (0, _useCurrentLayoutColumn.useCurrentLayoutColumn)(api);
|
|
22
|
+
var currentValign = (0, _react.useMemo)(function () {
|
|
23
|
+
return (0, _layoutColumnSelection.getLayoutColumnValign)(currentColumn);
|
|
24
|
+
}, [currentColumn]);
|
|
22
25
|
var TriggerIcon = currentValign ? _verticalAlignIcons.VERTICAL_ALIGN_ICONS[currentValign] : _editorToolbar.LayoutIcon;
|
|
23
|
-
if (!
|
|
26
|
+
if (!currentColumn) {
|
|
24
27
|
return null;
|
|
25
28
|
}
|
|
26
29
|
return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarNestedDropdownMenu, {
|
|
@@ -32,8 +35,6 @@ var VerticalAlignNestedMenu = exports.VerticalAlignNestedMenu = function Vertica
|
|
|
32
35
|
label: "",
|
|
33
36
|
size: "small"
|
|
34
37
|
}),
|
|
35
|
-
text: formatMessage(_messages.layoutMessages.alignColumn)
|
|
36
|
-
testId: "layout-column-align-menu",
|
|
37
|
-
dropdownTestId: "layout-column-align-dropdown"
|
|
38
|
+
text: formatMessage(_messages.layoutMessages.alignColumn)
|
|
38
39
|
}, children);
|
|
39
40
|
};
|
|
@@ -11,6 +11,7 @@ var _messages = require("@atlaskit/editor-common/messages");
|
|
|
11
11
|
var _editorToolbar = require("@atlaskit/editor-toolbar");
|
|
12
12
|
var _toolbarMenuContainer = require("@atlaskit/editor-toolbar/toolbar-menu-container");
|
|
13
13
|
var _DistributeColumnsDropdownItem = require("./DistributeColumnsDropdownItem");
|
|
14
|
+
var _InsertColumnDropdownItem = require("./InsertColumnDropdownItem");
|
|
14
15
|
var _keys = require("./keys");
|
|
15
16
|
var _VerticalAlignDropdownItem = require("./VerticalAlignDropdownItem");
|
|
16
17
|
var _VerticalAlignNestedMenu = require("./VerticalAlignNestedMenu");
|
|
@@ -30,6 +31,26 @@ var getLayoutColumnMenuComponents = exports.getLayoutColumnMenuComponents = func
|
|
|
30
31
|
parents: [_objectSpread(_objectSpread({}, _keys.LAYOUT_COLUMN_MENU), {}, {
|
|
31
32
|
rank: _keys.LAYOUT_COLUMN_MENU_RANK[_keys.LAYOUT_COLUMN_MENU_SECTION.key]
|
|
32
33
|
})]
|
|
34
|
+
}), _objectSpread(_objectSpread({}, _keys.INSERT_COLUMN_LEFT_MENU_ITEM), {}, {
|
|
35
|
+
component: function component() {
|
|
36
|
+
return /*#__PURE__*/_react.default.createElement(_InsertColumnDropdownItem.InsertColumnDropdownItem, {
|
|
37
|
+
api: api,
|
|
38
|
+
side: "left"
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
parents: [_objectSpread(_objectSpread({}, _keys.LAYOUT_COLUMN_MENU_SECTION), {}, {
|
|
42
|
+
rank: _keys.LAYOUT_COLUMN_MENU_SECTION_RANK[_keys.INSERT_COLUMN_LEFT_MENU_ITEM.key]
|
|
43
|
+
})]
|
|
44
|
+
}), _objectSpread(_objectSpread({}, _keys.INSERT_COLUMN_RIGHT_MENU_ITEM), {}, {
|
|
45
|
+
component: function component() {
|
|
46
|
+
return /*#__PURE__*/_react.default.createElement(_InsertColumnDropdownItem.InsertColumnDropdownItem, {
|
|
47
|
+
api: api,
|
|
48
|
+
side: "right"
|
|
49
|
+
});
|
|
50
|
+
},
|
|
51
|
+
parents: [_objectSpread(_objectSpread({}, _keys.LAYOUT_COLUMN_MENU_SECTION), {}, {
|
|
52
|
+
rank: _keys.LAYOUT_COLUMN_MENU_SECTION_RANK[_keys.INSERT_COLUMN_RIGHT_MENU_ITEM.key]
|
|
53
|
+
})]
|
|
33
54
|
}), _objectSpread(_objectSpread({}, _keys.DISTRIBUTE_COLUMNS_MENU_ITEM), {}, {
|
|
34
55
|
component: (0, _DistributeColumnsDropdownItem.createDistributeColumnsDropdownItem)(api),
|
|
35
56
|
parents: [_objectSpread(_objectSpread({}, _keys.LAYOUT_COLUMN_MENU_SECTION), {}, {
|
|
@@ -1,33 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.LayoutColumnMenu = void 0;
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
8
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
11
|
var _hooks = require("@atlaskit/editor-common/hooks");
|
|
12
|
+
var _styles = require("@atlaskit/editor-common/styles");
|
|
10
13
|
var _toolbar = require("@atlaskit/editor-common/toolbar");
|
|
11
14
|
var _ui = require("@atlaskit/editor-common/ui");
|
|
12
15
|
var _uiReact = require("@atlaskit/editor-common/ui-react");
|
|
13
|
-
var _utils = require("@atlaskit/editor-prosemirror/utils");
|
|
14
16
|
var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
|
|
15
17
|
var _editorToolbar = require("@atlaskit/editor-toolbar");
|
|
16
18
|
var _editorUiControlModel = require("@atlaskit/editor-ui-control-model");
|
|
17
19
|
var _components = require("./components");
|
|
18
20
|
var _keys = require("./keys");
|
|
21
|
+
var _layoutColumnSelection = require("./layoutColumnSelection");
|
|
19
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); }
|
|
20
23
|
var PopupWithListeners = (0, _uiReact.withReactEditorViewOuterListeners)(_ui.Popup);
|
|
21
|
-
var
|
|
22
|
-
var
|
|
23
|
-
|
|
24
|
+
var FALLBACK_MENU_HEIGHT = 300;
|
|
25
|
+
var LAYOUT_COLUMN_MENU_POPUP_OFFSET = [0, 4];
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Returns the drag handle button for the selected layout column.
|
|
29
|
+
*/
|
|
30
|
+
var getLayoutColumnMenuTarget = function getLayoutColumnMenuTarget(editorView, selection) {
|
|
31
|
+
var _columnDomRef$parentE;
|
|
32
|
+
if (!(0, _layoutColumnSelection.getLayoutColumnAtSelection)(selection) || (selection === null || selection === void 0 ? void 0 : selection.from) === undefined) {
|
|
24
33
|
return null;
|
|
25
34
|
}
|
|
26
|
-
var
|
|
27
|
-
if ((
|
|
35
|
+
var columnDomRef = editorView.nodeDOM(selection.from);
|
|
36
|
+
if (!(columnDomRef instanceof HTMLElement)) {
|
|
28
37
|
return null;
|
|
29
38
|
}
|
|
30
|
-
|
|
39
|
+
var dragHandleContainer = (_columnDomRef$parentE = columnDomRef.parentElement) === null || _columnDomRef$parentE === void 0 ? void 0 : _columnDomRef$parentE.querySelector(':scope > [data-blocks-drag-handle-container]');
|
|
40
|
+
return dragHandleContainer === null || dragHandleContainer === void 0 ? void 0 : dragHandleContainer.querySelector(_styles.DRAG_HANDLE_SELECTOR);
|
|
31
41
|
};
|
|
32
42
|
var LayoutColumnMenu = exports.LayoutColumnMenu = /*#__PURE__*/_react.default.memo(function LayoutColumnMenu(_ref) {
|
|
33
43
|
var _api$uiControlRegistr, _api$uiControlRegistr2;
|
|
@@ -47,6 +57,18 @@ var LayoutColumnMenu = exports.LayoutColumnMenu = /*#__PURE__*/_react.default.me
|
|
|
47
57
|
selection = _useSharedPluginState.selection;
|
|
48
58
|
var setOutsideClickTargetRef = (0, _react.useContext)(_uiReact.OutsideClickTargetRefContext);
|
|
49
59
|
var menuRef = (0, _react.useRef)(null);
|
|
60
|
+
var popupRef = (0, _react.useRef)(undefined);
|
|
61
|
+
var _React$useState = _react.default.useState(FALLBACK_MENU_HEIGHT),
|
|
62
|
+
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
|
63
|
+
menuHeight = _React$useState2[0],
|
|
64
|
+
setMenuHeight = _React$useState2[1];
|
|
65
|
+
(0, _react.useLayoutEffect)(function () {
|
|
66
|
+
var _popupRef$current;
|
|
67
|
+
if (!isLayoutColumnMenuOpen) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
setMenuHeight(((_popupRef$current = popupRef.current) === null || _popupRef$current === void 0 ? void 0 : _popupRef$current.clientHeight) || FALLBACK_MENU_HEIGHT);
|
|
71
|
+
}, [isLayoutColumnMenuOpen]);
|
|
50
72
|
var closeLayoutColumnMenu = (0, _react.useCallback)(function () {
|
|
51
73
|
var _api$core, _api$layout;
|
|
52
74
|
api === null || api === void 0 || (_api$core = api.core) === null || _api$core === void 0 || _api$core.actions.execute(api === null || api === void 0 || (_api$layout = api.layout) === null || _api$layout === void 0 ? void 0 : _api$layout.commands.toggleLayoutColumnMenu({
|
|
@@ -71,9 +93,14 @@ var LayoutColumnMenu = exports.LayoutColumnMenu = /*#__PURE__*/_react.default.me
|
|
|
71
93
|
var handleMenuRef = (0, _react.useCallback)(function (el) {
|
|
72
94
|
setOutsideClickTargetRef === null || setOutsideClickTargetRef === void 0 || setOutsideClickTargetRef(el);
|
|
73
95
|
menuRef.current = el;
|
|
96
|
+
if (el) {
|
|
97
|
+
popupRef.current = el;
|
|
98
|
+
}
|
|
74
99
|
}, [setOutsideClickTargetRef]);
|
|
75
100
|
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 : [];
|
|
76
|
-
var target =
|
|
101
|
+
var target = (0, _react.useMemo)(function () {
|
|
102
|
+
return isLayoutColumnMenuOpen ? getLayoutColumnMenuTarget(editorView, selection) : null;
|
|
103
|
+
}, [editorView, isLayoutColumnMenuOpen, selection]);
|
|
77
104
|
var hasValidTarget = target instanceof HTMLElement;
|
|
78
105
|
(0, _react.useEffect)(function () {
|
|
79
106
|
if (isLayoutColumnMenuOpen && (!hasValidTarget || components.length === 0)) {
|
|
@@ -88,10 +115,11 @@ var LayoutColumnMenu = exports.LayoutColumnMenu = /*#__PURE__*/_react.default.me
|
|
|
88
115
|
mountTo: mountTo,
|
|
89
116
|
boundariesElement: boundariesElement,
|
|
90
117
|
scrollableElement: scrollableElement,
|
|
91
|
-
zIndex: _editorSharedStyles.
|
|
118
|
+
zIndex: _editorSharedStyles.akEditorFloatingOverlapPanelZIndex,
|
|
92
119
|
alignX: "center",
|
|
93
|
-
|
|
94
|
-
|
|
120
|
+
fitHeight: menuHeight,
|
|
121
|
+
preventOverflow: true,
|
|
122
|
+
stick: true,
|
|
95
123
|
offset: LAYOUT_COLUMN_MENU_POPUP_OFFSET,
|
|
96
124
|
handleClickOutside: handleClickOutside,
|
|
97
125
|
handleEscapeKeydown: closeLayoutColumnMenu
|