@atlaskit/editor-plugin-layout 10.4.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.
- package/CHANGELOG.md +22 -0
- package/dist/cjs/layoutPlugin.js +96 -25
- package/dist/cjs/pm-plugins/actions.js +87 -64
- package/dist/cjs/pm-plugins/main.js +4 -2
- package/dist/cjs/pm-plugins/utils/layout-column-selection.js +128 -0
- package/dist/cjs/ui/LayoutColumnMenu/DeleteColumnDropdownItem.js +7 -4
- package/dist/cjs/ui/LayoutColumnMenu/InsertColumnDropdownItem.js +5 -6
- package/dist/cjs/ui/LayoutColumnMenu/VerticalAlignDropdownItem.js +9 -7
- package/dist/cjs/ui/LayoutColumnMenu/VerticalAlignNestedMenu.js +15 -6
- package/dist/cjs/ui/LayoutColumnMenu/index.js +17 -7
- package/dist/cjs/ui/LayoutColumnMenu/useSelectedLayoutColumns.js +14 -0
- package/dist/es2019/layoutPlugin.js +80 -18
- package/dist/es2019/pm-plugins/actions.js +73 -58
- package/dist/es2019/pm-plugins/main.js +4 -2
- package/dist/es2019/pm-plugins/utils/layout-column-selection.js +118 -0
- package/dist/es2019/ui/LayoutColumnMenu/DeleteColumnDropdownItem.js +7 -4
- package/dist/es2019/ui/LayoutColumnMenu/InsertColumnDropdownItem.js +5 -6
- package/dist/es2019/ui/LayoutColumnMenu/VerticalAlignDropdownItem.js +9 -6
- package/dist/es2019/ui/LayoutColumnMenu/VerticalAlignNestedMenu.js +15 -5
- package/dist/es2019/ui/LayoutColumnMenu/index.js +16 -6
- package/dist/es2019/ui/LayoutColumnMenu/useSelectedLayoutColumns.js +6 -0
- package/dist/esm/layoutPlugin.js +97 -26
- package/dist/esm/pm-plugins/actions.js +87 -64
- package/dist/esm/pm-plugins/main.js +4 -2
- package/dist/esm/pm-plugins/utils/layout-column-selection.js +122 -0
- package/dist/esm/ui/LayoutColumnMenu/DeleteColumnDropdownItem.js +7 -4
- package/dist/esm/ui/LayoutColumnMenu/InsertColumnDropdownItem.js +5 -6
- package/dist/esm/ui/LayoutColumnMenu/VerticalAlignDropdownItem.js +10 -8
- package/dist/esm/ui/LayoutColumnMenu/VerticalAlignNestedMenu.js +15 -6
- package/dist/esm/ui/LayoutColumnMenu/index.js +17 -7
- package/dist/esm/ui/LayoutColumnMenu/useSelectedLayoutColumns.js +8 -0
- package/dist/types/layoutPluginType.d.ts +1 -1
- package/dist/types/pm-plugins/actions.d.ts +3 -2
- package/dist/types/pm-plugins/types.d.ts +1 -0
- package/dist/types/pm-plugins/utils/layout-column-selection.d.ts +18 -0
- package/dist/types/ui/LayoutColumnMenu/useSelectedLayoutColumns.d.ts +4 -0
- package/dist/types-ts4.5/layoutPluginType.d.ts +1 -1
- package/dist/types-ts4.5/pm-plugins/actions.d.ts +3 -2
- package/dist/types-ts4.5/pm-plugins/types.d.ts +1 -0
- package/dist/types-ts4.5/pm-plugins/utils/layout-column-selection.d.ts +18 -0
- package/dist/types-ts4.5/ui/LayoutColumnMenu/useSelectedLayoutColumns.d.ts +4 -0
- package/package.json +5 -4
- package/dist/cjs/ui/LayoutColumnMenu/layoutColumnSelection.js +0 -21
- package/dist/cjs/ui/LayoutColumnMenu/useCurrentLayoutColumn.js +0 -20
- package/dist/es2019/ui/LayoutColumnMenu/layoutColumnSelection.js +0 -9
- package/dist/es2019/ui/LayoutColumnMenu/useCurrentLayoutColumn.js +0 -10
- package/dist/esm/ui/LayoutColumnMenu/layoutColumnSelection.js +0 -15
- package/dist/esm/ui/LayoutColumnMenu/useCurrentLayoutColumn.js +0 -14
- package/dist/types/ui/LayoutColumnMenu/layoutColumnSelection.d.ts +0 -7
- package/dist/types/ui/LayoutColumnMenu/useCurrentLayoutColumn.d.ts +0 -5
- package/dist/types-ts4.5/ui/LayoutColumnMenu/layoutColumnSelection.d.ts +0 -7
- package/dist/types-ts4.5/ui/LayoutColumnMenu/useCurrentLayoutColumn.d.ts +0 -5
|
@@ -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("
|
|
12
|
-
var
|
|
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
|
|
22
|
-
var
|
|
23
|
-
|
|
24
|
-
|
|
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:
|
|
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("
|
|
13
|
-
var
|
|
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
|
|
21
|
+
var selectedLayoutColumns = (0, _useSelectedLayoutColumns.useSelectedLayoutColumns)(api);
|
|
22
22
|
var currentValign = (0, _react.useMemo)(function () {
|
|
23
|
-
|
|
24
|
-
|
|
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 (!
|
|
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
|
-
|
|
32
|
+
var anchorPos = (0, _layoutColumnSelection.getLayoutColumnMenuAnchorPos)(selection, anchorPosFromHandle);
|
|
33
|
+
if (anchorPos === undefined) {
|
|
33
34
|
return null;
|
|
34
35
|
}
|
|
35
|
-
var columnDomRef = editorView.nodeDOM(
|
|
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
|
+
};
|
|
@@ -8,6 +8,7 @@ import { IconFiveColumnLayout, IconFourColumnLayout, IconLayout, IconOneColumnLa
|
|
|
8
8
|
import { TextSelection } from '@atlaskit/editor-prosemirror/state';
|
|
9
9
|
import { findParentNode } from '@atlaskit/editor-prosemirror/utils';
|
|
10
10
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
11
|
+
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
11
12
|
import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
|
|
12
13
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
|
|
13
14
|
import { createDefaultLayoutSection, createMultiColumnLayoutSection, deleteLayoutColumn, insertLayoutColumn, insertLayoutColumnsWithAnalytics, setLayoutColumnValign, toggleLayoutColumnMenu } from './pm-plugins/actions';
|
|
@@ -147,25 +148,83 @@ export const layoutPlugin = ({
|
|
|
147
148
|
})(tr);
|
|
148
149
|
return tr;
|
|
149
150
|
};
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
151
|
+
if (editorExperiment('advanced_layouts', true)) {
|
|
152
|
+
const advancedSingleColumnOption = allowAdvancedSingleColumnLayout ? [{
|
|
153
|
+
id: 'onecolumnlayout',
|
|
154
|
+
title: formatMessage(layoutMessages.singleColumnAdvancedLayout),
|
|
155
|
+
description: formatMessage(messages.singleColumnsDescriptionAdvancedLayout),
|
|
156
|
+
keywords: ['layout', 'column', 'section', 'single column'],
|
|
157
|
+
priority: 1100,
|
|
158
|
+
icon: () => /*#__PURE__*/React.createElement(IconOneColumnLayout, null),
|
|
159
|
+
action(insert, state) {
|
|
160
|
+
const tr = insert(createMultiColumnLayoutSection(state, 1));
|
|
161
|
+
if (fg('platform_editor_column_count_analytics')) {
|
|
162
|
+
withInsertLayoutAnalytics(tr, 1);
|
|
163
|
+
} else {
|
|
164
|
+
withInsertLayoutAnalytics(tr);
|
|
165
|
+
}
|
|
166
|
+
selectIntoLayoutSection(tr);
|
|
167
|
+
return tr;
|
|
163
168
|
}
|
|
164
|
-
|
|
165
|
-
|
|
169
|
+
}] : [];
|
|
170
|
+
if (expValEquals('platform_editor_layout_typeahead_reorder', 'isEnabled', true)) {
|
|
171
|
+
const createAdvancedColumnLayoutOption = ({
|
|
172
|
+
columnCount,
|
|
173
|
+
descriptionColumnCount,
|
|
174
|
+
icon: Icon,
|
|
175
|
+
id,
|
|
176
|
+
keyword,
|
|
177
|
+
title
|
|
178
|
+
}) => ({
|
|
179
|
+
id,
|
|
180
|
+
title,
|
|
181
|
+
description: formatMessage(messages.columnsDescriptionAdvancedLayout, {
|
|
182
|
+
numberOfColumns: descriptionColumnCount
|
|
183
|
+
}),
|
|
184
|
+
keywords: ['layout', 'column', 'section', keyword],
|
|
185
|
+
priority: 1100,
|
|
186
|
+
icon: Icon,
|
|
187
|
+
action(insert, state) {
|
|
188
|
+
const tr = insert(createMultiColumnLayoutSection(state, columnCount));
|
|
189
|
+
if (fg('platform_editor_column_count_analytics')) {
|
|
190
|
+
withInsertLayoutAnalytics(tr, columnCount);
|
|
191
|
+
} else {
|
|
192
|
+
withInsertLayoutAnalytics(tr);
|
|
193
|
+
}
|
|
194
|
+
selectIntoLayoutSection(tr);
|
|
195
|
+
return tr;
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
return [createAdvancedColumnLayoutOption({
|
|
199
|
+
columnCount: 2,
|
|
200
|
+
descriptionColumnCount: 'two',
|
|
201
|
+
icon: () => /*#__PURE__*/React.createElement(IconTwoColumnLayout, null),
|
|
202
|
+
id: 'twocolumnslayout',
|
|
203
|
+
keyword: 'two column',
|
|
204
|
+
title: formatMessage(layoutMessages.twoColumnsAdvancedLayout)
|
|
205
|
+
}), ...advancedSingleColumnOption, createAdvancedColumnLayoutOption({
|
|
206
|
+
columnCount: 3,
|
|
207
|
+
descriptionColumnCount: 'three',
|
|
208
|
+
icon: () => /*#__PURE__*/React.createElement(IconThreeColumnLayout, null),
|
|
209
|
+
id: 'threecolumnslayout',
|
|
210
|
+
keyword: 'three column',
|
|
211
|
+
title: formatMessage(layoutMessages.threeColumnsAdvancedLayout)
|
|
212
|
+
}), createAdvancedColumnLayoutOption({
|
|
213
|
+
columnCount: 4,
|
|
214
|
+
descriptionColumnCount: 'four',
|
|
215
|
+
icon: () => /*#__PURE__*/React.createElement(IconFourColumnLayout, null),
|
|
216
|
+
id: 'fourcolumnslayout',
|
|
217
|
+
keyword: 'four column',
|
|
218
|
+
title: formatMessage(layoutMessages.fourColumns)
|
|
219
|
+
}), createAdvancedColumnLayoutOption({
|
|
220
|
+
columnCount: 5,
|
|
221
|
+
descriptionColumnCount: 'five',
|
|
222
|
+
icon: () => /*#__PURE__*/React.createElement(IconFiveColumnLayout, null),
|
|
223
|
+
id: 'fivecolumnslayout',
|
|
224
|
+
keyword: 'five column',
|
|
225
|
+
title: formatMessage(layoutMessages.fiveColumns)
|
|
226
|
+
})];
|
|
166
227
|
}
|
|
167
|
-
}] : [];
|
|
168
|
-
if (editorExperiment('advanced_layouts', true)) {
|
|
169
228
|
return [...advancedSingleColumnOption, {
|
|
170
229
|
id: 'twocolumnslayout',
|
|
171
230
|
title: formatMessage(layoutMessages.twoColumnsAdvancedLayout),
|
|
@@ -298,7 +357,10 @@ export const layoutPlugin = ({
|
|
|
298
357
|
var _api$analytics5;
|
|
299
358
|
return insertLayoutColumn(side, api === null || api === void 0 ? void 0 : (_api$analytics5 = api.analytics) === null || _api$analytics5 === void 0 ? void 0 : _api$analytics5.actions);
|
|
300
359
|
},
|
|
301
|
-
setLayoutColumnValign
|
|
360
|
+
setLayoutColumnValign: valign => {
|
|
361
|
+
var _api$analytics6;
|
|
362
|
+
return setLayoutColumnValign(valign, api === null || api === void 0 ? void 0 : (_api$analytics6 = api.analytics) === null || _api$analytics6 === void 0 ? void 0 : _api$analytics6.actions);
|
|
363
|
+
},
|
|
302
364
|
toggleLayoutColumnMenu
|
|
303
365
|
}
|
|
304
366
|
};
|
|
@@ -9,6 +9,7 @@ import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equ
|
|
|
9
9
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
|
|
10
10
|
import { EVEN_DISTRIBUTED_COL_WIDTHS, MAX_LAYOUT_COLUMNS, MAX_STANDARD_LAYOUT_COLUMNS, MIN_LAYOUT_COLUMN_WIDTH_PERCENT } from './consts';
|
|
11
11
|
import { pluginKey } from './plugin-key';
|
|
12
|
+
import { getSelectedLayoutColumns } from './utils/layout-column-selection';
|
|
12
13
|
import { redistributeAfterDeletion, redistributeProportionally } from './utils/redistribute-proportionally';
|
|
13
14
|
export const ONE_COL_LAYOUTS = ['single'];
|
|
14
15
|
export const TWO_COL_LAYOUTS = ['two_equal', 'two_left_sidebar', 'two_right_sidebar'];
|
|
@@ -533,50 +534,26 @@ const formatLayoutName = layout => {
|
|
|
533
534
|
export function getEffectiveMaxLayoutColumns() {
|
|
534
535
|
return editorExperiment('advanced_layouts', true) ? MAX_LAYOUT_COLUMNS : MAX_STANDARD_LAYOUT_COLUMNS;
|
|
535
536
|
}
|
|
536
|
-
const getSelectedLayoutColumnInSection = ({
|
|
537
|
-
doc,
|
|
538
|
-
selection
|
|
539
|
-
}) => {
|
|
540
|
-
const {
|
|
541
|
-
layoutColumn,
|
|
542
|
-
layoutSection
|
|
543
|
-
} = doc.type.schema.nodes;
|
|
544
|
-
if (!(selection instanceof NodeSelection) || selection.node.type !== layoutColumn) {
|
|
545
|
-
return;
|
|
546
|
-
}
|
|
547
|
-
const {
|
|
548
|
-
$from
|
|
549
|
-
} = selection;
|
|
550
|
-
if ($from.parent.type !== layoutSection) {
|
|
551
|
-
return;
|
|
552
|
-
}
|
|
553
|
-
const selectedColumnIndex = $from.index($from.depth);
|
|
554
|
-
const selectedColumnNode = selection.node;
|
|
555
|
-
const selectedColumnPos = selection.from;
|
|
556
|
-
const layoutSectionPos = $from.before($from.depth);
|
|
557
|
-
return {
|
|
558
|
-
layoutSectionNode: $from.parent,
|
|
559
|
-
layoutSectionPos,
|
|
560
|
-
selectedColumnIndex,
|
|
561
|
-
selectedColumnNode,
|
|
562
|
-
selectedColumnPos
|
|
563
|
-
};
|
|
564
|
-
};
|
|
565
537
|
const insertLayoutColumnAt = (side, editorAnalyticsAPI) => ({
|
|
566
538
|
tr
|
|
567
539
|
}) => {
|
|
568
540
|
if (!expValEqualsNoExposure('platform_editor_layout_column_menu', 'isEnabled', true)) {
|
|
569
541
|
return null;
|
|
570
542
|
}
|
|
571
|
-
const
|
|
572
|
-
if (!
|
|
543
|
+
const selectedLayoutColumns = getSelectedLayoutColumns(tr.selection);
|
|
544
|
+
if (!selectedLayoutColumns) {
|
|
573
545
|
return null;
|
|
574
546
|
}
|
|
575
547
|
const {
|
|
576
548
|
layoutSectionNode,
|
|
577
549
|
layoutSectionPos,
|
|
578
|
-
|
|
579
|
-
|
|
550
|
+
selectedColumnIndices,
|
|
551
|
+
selectedColumns
|
|
552
|
+
} = selectedLayoutColumns;
|
|
553
|
+
const startIndex = selectedColumnIndices[0];
|
|
554
|
+
const endIndex = selectedColumnIndices[selectedColumnIndices.length - 1];
|
|
555
|
+
const selectedColumnIndex = side === 'left' ? startIndex : endIndex;
|
|
556
|
+
const selectedColumnCount = selectedColumns.length;
|
|
580
557
|
if (layoutSectionNode.childCount >= getEffectiveMaxLayoutColumns()) {
|
|
581
558
|
return null;
|
|
582
559
|
}
|
|
@@ -613,9 +590,11 @@ const insertLayoutColumnAt = (side, editorAnalyticsAPI) => ({
|
|
|
613
590
|
actionSubjectId: ACTION_SUBJECT_ID.LAYOUT_COLUMN,
|
|
614
591
|
attributes: {
|
|
615
592
|
columnCount: redistributedWidths.length,
|
|
593
|
+
endIndex,
|
|
616
594
|
inputMethod: INPUT_METHOD.LAYOUT_COLUMN_MENU,
|
|
617
|
-
|
|
618
|
-
side
|
|
595
|
+
selectedCount: selectedColumnCount,
|
|
596
|
+
side,
|
|
597
|
+
startIndex
|
|
619
598
|
},
|
|
620
599
|
eventType: EVENT_TYPE.TRACK
|
|
621
600
|
})(tr);
|
|
@@ -623,38 +602,64 @@ const insertLayoutColumnAt = (side, editorAnalyticsAPI) => ({
|
|
|
623
602
|
return tr;
|
|
624
603
|
};
|
|
625
604
|
export const insertLayoutColumn = (side, editorAnalyticsAPI) => insertLayoutColumnAt(side, editorAnalyticsAPI);
|
|
626
|
-
export const setLayoutColumnValign = valign => ({
|
|
605
|
+
export const setLayoutColumnValign = (valign, editorAnalyticsAPI) => ({
|
|
627
606
|
tr
|
|
628
607
|
}) => {
|
|
629
608
|
if (!expValEqualsNoExposure('platform_editor_layout_column_menu', 'isEnabled', true)) {
|
|
630
609
|
return null;
|
|
631
610
|
}
|
|
632
|
-
const
|
|
633
|
-
|
|
634
|
-
} = tr.doc.type.schema.nodes;
|
|
635
|
-
const selectedColumn = tr.selection instanceof NodeSelection && tr.selection.node.type === layoutColumn ? {
|
|
636
|
-
node: tr.selection.node,
|
|
637
|
-
pos: tr.selection.from
|
|
638
|
-
} : undefined;
|
|
639
|
-
if (!selectedColumn) {
|
|
611
|
+
const selectedLayoutColumns = getSelectedLayoutColumns(tr.selection);
|
|
612
|
+
if (!selectedLayoutColumns) {
|
|
640
613
|
return null;
|
|
641
614
|
}
|
|
642
|
-
|
|
615
|
+
const {
|
|
616
|
+
selectedColumnIndices,
|
|
617
|
+
selectedColumns
|
|
618
|
+
} = selectedLayoutColumns;
|
|
619
|
+
const columnsToUpdate = selectedColumns.filter(({
|
|
620
|
+
node
|
|
621
|
+
}) => node.attrs.valign !== valign);
|
|
622
|
+
if (columnsToUpdate.length === 0) {
|
|
643
623
|
return null;
|
|
644
624
|
}
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
625
|
+
const startIndex = selectedColumnIndices[0];
|
|
626
|
+
const endIndex = selectedColumnIndices[selectedColumnIndices.length - 1];
|
|
627
|
+
const selectedColumnCount = selectedColumns.length;
|
|
628
|
+
const updatedColumnCount = columnsToUpdate.length;
|
|
629
|
+
columnsToUpdate.forEach(({
|
|
630
|
+
node,
|
|
631
|
+
pos
|
|
632
|
+
}) => {
|
|
633
|
+
tr.setNodeMarkup(pos, node.type, {
|
|
634
|
+
...node.attrs,
|
|
635
|
+
valign
|
|
636
|
+
});
|
|
648
637
|
});
|
|
638
|
+
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 ? void 0 : editorAnalyticsAPI.attachAnalyticsEvent({
|
|
639
|
+
action: ACTION.UPDATED,
|
|
640
|
+
actionSubject: ACTION_SUBJECT.DOCUMENT,
|
|
641
|
+
actionSubjectId: ACTION_SUBJECT_ID.LAYOUT_COLUMN,
|
|
642
|
+
attributes: {
|
|
643
|
+
endIndex,
|
|
644
|
+
inputMethod: INPUT_METHOD.LAYOUT_COLUMN_MENU,
|
|
645
|
+
selectedCount: selectedColumnCount,
|
|
646
|
+
startIndex,
|
|
647
|
+
updatedCount: updatedColumnCount,
|
|
648
|
+
valign
|
|
649
|
+
},
|
|
650
|
+
eventType: EVENT_TYPE.TRACK
|
|
651
|
+
})(tr);
|
|
649
652
|
tr.setMeta('scrollIntoView', false);
|
|
650
653
|
return tr;
|
|
651
654
|
};
|
|
652
655
|
export const toggleLayoutColumnMenu = ({
|
|
656
|
+
anchorPos,
|
|
653
657
|
isOpen
|
|
654
658
|
}) => ({
|
|
655
659
|
tr
|
|
656
660
|
}) => {
|
|
657
661
|
tr.setMeta('toggleLayoutColumnMenu', {
|
|
662
|
+
anchorPos,
|
|
658
663
|
isOpen
|
|
659
664
|
});
|
|
660
665
|
tr.setMeta('scrollIntoView', false);
|
|
@@ -666,15 +671,20 @@ export const deleteLayoutColumn = editorAnalyticsAPI => ({
|
|
|
666
671
|
if (!expValEqualsNoExposure('platform_editor_layout_column_menu', 'isEnabled', true)) {
|
|
667
672
|
return null;
|
|
668
673
|
}
|
|
669
|
-
const
|
|
670
|
-
if (!
|
|
674
|
+
const selectedLayoutColumns = getSelectedLayoutColumns(tr.selection);
|
|
675
|
+
if (!selectedLayoutColumns) {
|
|
671
676
|
return null;
|
|
672
677
|
}
|
|
673
678
|
const {
|
|
674
679
|
layoutSectionNode,
|
|
675
680
|
layoutSectionPos,
|
|
676
|
-
|
|
677
|
-
|
|
681
|
+
selectedColumnIndices,
|
|
682
|
+
selectedColumns
|
|
683
|
+
} = selectedLayoutColumns;
|
|
684
|
+
const startIndex = selectedColumnIndices[0];
|
|
685
|
+
const endIndex = selectedColumnIndices[selectedColumnIndices.length - 1];
|
|
686
|
+
const selectedColumnCount = selectedColumns.length;
|
|
687
|
+
const selectedColumnIndexSet = new Set(selectedColumnIndices);
|
|
678
688
|
const emitDeleteColumnAnalytics = columnCount => {
|
|
679
689
|
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 ? void 0 : editorAnalyticsAPI.attachAnalyticsEvent({
|
|
680
690
|
action: ACTION.DELETED,
|
|
@@ -682,32 +692,37 @@ export const deleteLayoutColumn = editorAnalyticsAPI => ({
|
|
|
682
692
|
actionSubjectId: ACTION_SUBJECT_ID.LAYOUT_COLUMN,
|
|
683
693
|
attributes: {
|
|
684
694
|
columnCount,
|
|
695
|
+
endIndex,
|
|
685
696
|
inputMethod: INPUT_METHOD.LAYOUT_COLUMN_MENU,
|
|
686
|
-
|
|
697
|
+
selectedCount: selectedColumnCount,
|
|
698
|
+
startIndex
|
|
687
699
|
},
|
|
688
700
|
eventType: EVENT_TYPE.TRACK
|
|
689
701
|
})(tr);
|
|
690
702
|
};
|
|
691
703
|
|
|
692
|
-
// If
|
|
693
|
-
if (layoutSectionNode.childCount
|
|
704
|
+
// If all columns are selected, remove the entire layoutSection
|
|
705
|
+
if (selectedColumnCount === layoutSectionNode.childCount) {
|
|
694
706
|
tr.delete(layoutSectionPos, layoutSectionPos + layoutSectionNode.nodeSize);
|
|
695
707
|
emitDeleteColumnAnalytics(0);
|
|
696
708
|
tr.setMeta('scrollIntoView', false);
|
|
697
709
|
return tr;
|
|
698
710
|
}
|
|
699
711
|
|
|
700
|
-
// Build new column list without the selected
|
|
712
|
+
// Build new column list without the selected columns
|
|
701
713
|
const remainingColumns = [];
|
|
702
714
|
layoutSectionNode.forEach((column, _offset, index) => {
|
|
703
|
-
if (index
|
|
715
|
+
if (!selectedColumnIndexSet.has(index)) {
|
|
704
716
|
remainingColumns.push(column);
|
|
705
717
|
}
|
|
706
718
|
});
|
|
707
719
|
|
|
708
720
|
// Redistribute widths proportionally among remaining columns using shared utility
|
|
709
721
|
const existingWidths = mapChildren(layoutSectionNode, column => column.attrs.width);
|
|
710
|
-
const redistributed =
|
|
722
|
+
const redistributed = selectedColumnIndices.slice()
|
|
723
|
+
// Delete highest indices first so lower original indices still point at the same columns
|
|
724
|
+
// as each redistribution step shrinks the widths array.
|
|
725
|
+
.sort((a, b) => b - a).reduce((widths, selectedIndex) => redistributeAfterDeletion(widths, selectedIndex, MIN_LAYOUT_COLUMN_WIDTH_PERCENT), existingWidths);
|
|
711
726
|
const updatedLayoutSectionNode = layoutSectionNode.copy(Fragment.fromArray(remainingColumns));
|
|
712
727
|
tr.replaceWith(layoutSectionPos + 1, layoutSectionPos + layoutSectionNode.nodeSize - 1, columnWidth(updatedLayoutSectionNode, tr.doc.type.schema, redistributed));
|
|
713
728
|
emitDeleteColumnAnalytics(redistributed.length);
|
|
@@ -67,7 +67,8 @@ const getInitialPluginState = (options, state) => {
|
|
|
67
67
|
selectedLayout,
|
|
68
68
|
allowSingleColumnLayout,
|
|
69
69
|
isResizing: false,
|
|
70
|
-
isLayoutColumnMenuOpen: false
|
|
70
|
+
isLayoutColumnMenuOpen: false,
|
|
71
|
+
layoutColumnMenuAnchorPos: undefined
|
|
71
72
|
};
|
|
72
73
|
};
|
|
73
74
|
|
|
@@ -118,7 +119,8 @@ export default (options => {
|
|
|
118
119
|
const columnMenuMeta = tr.getMeta('toggleLayoutColumnMenu');
|
|
119
120
|
const nextPluginState = columnMenuMeta ? {
|
|
120
121
|
...pluginState,
|
|
121
|
-
isLayoutColumnMenuOpen: (_columnMenuMeta$isOpe = columnMenuMeta.isOpen) !== null && _columnMenuMeta$isOpe !== void 0 ? _columnMenuMeta$isOpe : !pluginState.isLayoutColumnMenuOpen
|
|
122
|
+
isLayoutColumnMenuOpen: (_columnMenuMeta$isOpe = columnMenuMeta.isOpen) !== null && _columnMenuMeta$isOpe !== void 0 ? _columnMenuMeta$isOpe : !pluginState.isLayoutColumnMenuOpen,
|
|
123
|
+
layoutColumnMenuAnchorPos: columnMenuMeta.isOpen === false ? undefined : columnMenuMeta.anchorPos
|
|
122
124
|
} : pluginState;
|
|
123
125
|
const isResizing = editorExperiment('single_column_layouts', true) ? (_tr$getMeta = tr.getMeta('is-resizer-resizing')) !== null && _tr$getMeta !== void 0 ? _tr$getMeta : (_pluginKey$getState = pluginKey.getState(oldState)) === null || _pluginKey$getState === void 0 ? void 0 : _pluginKey$getState.isResizing : false;
|
|
124
126
|
if (tr.docChanged || tr.selectionSet) {
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { NodeSelection } from '@atlaskit/editor-prosemirror/state';
|
|
2
|
+
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
|
|
3
|
+
const isLayoutColumn = node => (node === null || node === void 0 ? void 0 : node.type.name) === 'layoutColumn';
|
|
4
|
+
const isLayoutSection = node => (node === null || node === void 0 ? void 0 : node.type.name) === 'layoutSection';
|
|
5
|
+
const getLayoutColumnIndexAtPos = $pos => {
|
|
6
|
+
for (let depth = $pos.depth; depth > 0; depth--) {
|
|
7
|
+
if (isLayoutColumn($pos.node(depth)) && isLayoutSection($pos.node(depth - 1))) {
|
|
8
|
+
return $pos.index(depth - 1);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return undefined;
|
|
12
|
+
};
|
|
13
|
+
const getLayoutSectionDepth = selection => {
|
|
14
|
+
const {
|
|
15
|
+
$from,
|
|
16
|
+
$to
|
|
17
|
+
} = selection;
|
|
18
|
+
const sharedDepth = $from.sharedDepth($to.pos);
|
|
19
|
+
for (let depth = sharedDepth; depth > 0; depth--) {
|
|
20
|
+
if (isLayoutSection($from.node(depth))) {
|
|
21
|
+
return depth;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return undefined;
|
|
25
|
+
};
|
|
26
|
+
export const getSelectedLayoutColumns = selection => {
|
|
27
|
+
if (!selection) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
if (selection instanceof NodeSelection && isLayoutColumn(selection.node)) {
|
|
31
|
+
const {
|
|
32
|
+
$from
|
|
33
|
+
} = selection;
|
|
34
|
+
const layoutSectionNode = $from.parent;
|
|
35
|
+
if (!isLayoutSection(layoutSectionNode)) {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
const selectedColumnIndex = $from.index($from.depth);
|
|
39
|
+
return {
|
|
40
|
+
layoutSectionNode,
|
|
41
|
+
layoutSectionPos: $from.before($from.depth),
|
|
42
|
+
selectedColumnIndices: [selectedColumnIndex],
|
|
43
|
+
selectedColumns: [{
|
|
44
|
+
index: selectedColumnIndex,
|
|
45
|
+
node: selection.node,
|
|
46
|
+
pos: selection.from
|
|
47
|
+
}]
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (selection.empty) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
if (!editorExperiment('platform_editor_block_menu', true)) {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
const layoutSectionDepth = getLayoutSectionDepth(selection);
|
|
57
|
+
if (layoutSectionDepth === undefined) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
const {
|
|
61
|
+
$from,
|
|
62
|
+
$to
|
|
63
|
+
} = selection;
|
|
64
|
+
const layoutSectionNode = $from.node(layoutSectionDepth);
|
|
65
|
+
const layoutSectionPos = $from.before(layoutSectionDepth);
|
|
66
|
+
const selectedColumns = [];
|
|
67
|
+
let invalidSelection = false;
|
|
68
|
+
layoutSectionNode.forEach((column, offset, index) => {
|
|
69
|
+
const columnStart = layoutSectionPos + 1 + offset;
|
|
70
|
+
const columnEnd = columnStart + column.nodeSize;
|
|
71
|
+
const intersectsColumn = selection.from < columnEnd && selection.to > columnStart;
|
|
72
|
+
if (!intersectsColumn) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (!isLayoutColumn(column)) {
|
|
76
|
+
invalidSelection = true;
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
selectedColumns.push({
|
|
80
|
+
index,
|
|
81
|
+
node: column,
|
|
82
|
+
pos: columnStart
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
// TextSelection inside a single column is normal text editing, not a selected column set.
|
|
87
|
+
if (invalidSelection || selectedColumns.length < 2) {
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
const firstColumn = selectedColumns[0];
|
|
91
|
+
const lastColumn = selectedColumns[selectedColumns.length - 1];
|
|
92
|
+
const startColumnIndex = getLayoutColumnIndexAtPos($from);
|
|
93
|
+
const endColumnIndex = getLayoutColumnIndexAtPos($to);
|
|
94
|
+
if (startColumnIndex !== undefined && startColumnIndex !== firstColumn.index || endColumnIndex !== undefined && endColumnIndex !== lastColumn.index) {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
layoutSectionNode,
|
|
99
|
+
layoutSectionPos,
|
|
100
|
+
selectedColumnIndices: selectedColumns.map(({
|
|
101
|
+
index
|
|
102
|
+
}) => index),
|
|
103
|
+
selectedColumns
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
export const getLayoutSectionColumnCount = layoutSection => (layoutSection === null || layoutSection === void 0 ? void 0 : layoutSection.type.name) === 'layoutSection' ? layoutSection.childCount : 0;
|
|
107
|
+
export const getLayoutColumnValign = layoutColumn => layoutColumn === null || layoutColumn === void 0 ? void 0 : layoutColumn.attrs.valign;
|
|
108
|
+
export const getLayoutColumnMenuAnchorPos = (selection, anchorPosFromHandle) => {
|
|
109
|
+
var _clickedSelectedColum, _selectedLayoutColumn;
|
|
110
|
+
const selectedLayoutColumns = getSelectedLayoutColumns(selection);
|
|
111
|
+
if (!selectedLayoutColumns) {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
const clickedSelectedColumn = selectedLayoutColumns.selectedColumns.find(({
|
|
115
|
+
pos
|
|
116
|
+
}) => pos === anchorPosFromHandle);
|
|
117
|
+
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;
|
|
118
|
+
};
|