@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.
- package/CHANGELOG.md +11 -0
- package/dist/cjs/layoutPlugin.js +2 -5
- package/dist/cjs/pm-plugins/actions.js +71 -67
- package/dist/cjs/pm-plugins/utils/layout-column-selection.js +56 -98
- package/dist/cjs/ui/LayoutColumnMenu/DeleteColumnDropdownItem.js +1 -1
- package/dist/cjs/ui/LayoutColumnMenu/DistributeColumnsDropdownItem.js +10 -5
- package/dist/cjs/ui/LayoutColumnMenu/InsertColumnDropdownItem.js +2 -2
- package/dist/cjs/ui/LayoutColumnMenu/VerticalAlignDropdownItem.js +1 -1
- package/dist/cjs/ui/LayoutColumnMenu/VerticalAlignNestedMenu.js +1 -1
- package/dist/cjs/ui/LayoutColumnMenu/index.js +1 -1
- package/dist/cjs/ui/LayoutColumnMenu/useSelectedLayoutColumns.js +4 -3
- package/dist/cjs/ui/toolbar.js +70 -11
- package/dist/es2019/layoutPlugin.js +3 -6
- package/dist/es2019/pm-plugins/actions.js +50 -51
- package/dist/es2019/pm-plugins/utils/layout-column-selection.js +54 -94
- package/dist/es2019/ui/LayoutColumnMenu/DeleteColumnDropdownItem.js +1 -1
- package/dist/es2019/ui/LayoutColumnMenu/DistributeColumnsDropdownItem.js +11 -5
- package/dist/es2019/ui/LayoutColumnMenu/InsertColumnDropdownItem.js +2 -2
- package/dist/es2019/ui/LayoutColumnMenu/VerticalAlignDropdownItem.js +1 -1
- package/dist/es2019/ui/LayoutColumnMenu/VerticalAlignNestedMenu.js +1 -1
- package/dist/es2019/ui/LayoutColumnMenu/index.js +1 -1
- package/dist/es2019/ui/LayoutColumnMenu/useSelectedLayoutColumns.js +6 -4
- package/dist/es2019/ui/toolbar.js +68 -11
- package/dist/esm/layoutPlugin.js +3 -6
- package/dist/esm/pm-plugins/actions.js +71 -67
- package/dist/esm/pm-plugins/utils/layout-column-selection.js +55 -97
- package/dist/esm/ui/LayoutColumnMenu/DeleteColumnDropdownItem.js +1 -1
- package/dist/esm/ui/LayoutColumnMenu/DistributeColumnsDropdownItem.js +10 -5
- package/dist/esm/ui/LayoutColumnMenu/InsertColumnDropdownItem.js +2 -2
- package/dist/esm/ui/LayoutColumnMenu/VerticalAlignDropdownItem.js +1 -1
- package/dist/esm/ui/LayoutColumnMenu/VerticalAlignNestedMenu.js +1 -1
- package/dist/esm/ui/LayoutColumnMenu/index.js +1 -1
- package/dist/esm/ui/LayoutColumnMenu/useSelectedLayoutColumns.js +5 -4
- package/dist/esm/ui/toolbar.js +71 -12
- package/dist/types/layoutPluginType.d.ts +2 -2
- package/dist/types/pm-plugins/actions.d.ts +9 -1
- package/dist/types/pm-plugins/utils/layout-column-selection.d.ts +8 -7
- package/dist/types-ts4.5/layoutPluginType.d.ts +2 -2
- package/dist/types-ts4.5/pm-plugins/actions.d.ts +9 -1
- package/dist/types-ts4.5/pm-plugins/utils/layout-column-selection.d.ts +8 -7
- package/package.json +3 -3
|
@@ -3,7 +3,6 @@ import { useIntl } from 'react-intl';
|
|
|
3
3
|
import { layoutMessages } from '@atlaskit/editor-common/messages';
|
|
4
4
|
import { TableColumnAddLeftIcon, TableColumnAddRightIcon, ToolbarDropdownItem } from '@atlaskit/editor-toolbar';
|
|
5
5
|
import { getEffectiveMaxLayoutColumns } from '../../pm-plugins/actions';
|
|
6
|
-
import { getLayoutSectionColumnCount } from '../../pm-plugins/utils/layout-column-selection';
|
|
7
6
|
import { useSelectedLayoutColumns } from './useSelectedLayoutColumns';
|
|
8
7
|
const INSERT_COLUMN_OPTIONS = {
|
|
9
8
|
left: {
|
|
@@ -21,6 +20,7 @@ export const InsertColumnDropdownItem = ({
|
|
|
21
20
|
api,
|
|
22
21
|
side
|
|
23
22
|
}) => {
|
|
23
|
+
var _selectedLayoutColumn, _selectedLayoutColumn2;
|
|
24
24
|
const {
|
|
25
25
|
formatMessage
|
|
26
26
|
} = useIntl();
|
|
@@ -29,7 +29,7 @@ export const InsertColumnDropdownItem = ({
|
|
|
29
29
|
label
|
|
30
30
|
} = INSERT_COLUMN_OPTIONS[side];
|
|
31
31
|
const selectedLayoutColumns = useSelectedLayoutColumns(api);
|
|
32
|
-
const columnCount =
|
|
32
|
+
const columnCount = (_selectedLayoutColumn = selectedLayoutColumns === null || selectedLayoutColumns === void 0 ? void 0 : (_selectedLayoutColumn2 = selectedLayoutColumns.layoutSectionNode) === null || _selectedLayoutColumn2 === void 0 ? void 0 : _selectedLayoutColumn2.childCount) !== null && _selectedLayoutColumn !== void 0 ? _selectedLayoutColumn : 0;
|
|
33
33
|
const maxColumnCount = getEffectiveMaxLayoutColumns();
|
|
34
34
|
const canInsertColumn = selectedLayoutColumns !== undefined && columnCount < maxColumnCount;
|
|
35
35
|
const onClick = useCallback(() => {
|
|
@@ -14,7 +14,7 @@ export const VerticalAlignDropdownItem = ({
|
|
|
14
14
|
formatMessage
|
|
15
15
|
} = useIntl();
|
|
16
16
|
const selectedLayoutColumns = useSelectedLayoutColumns(api);
|
|
17
|
-
const isSelected = (_selectedLayoutColumn = selectedLayoutColumns === null || selectedLayoutColumns === void 0 ? void 0 : selectedLayoutColumns.
|
|
17
|
+
const isSelected = (_selectedLayoutColumn = selectedLayoutColumns === null || selectedLayoutColumns === void 0 ? void 0 : selectedLayoutColumns.selectedLayoutColumns.every(({
|
|
18
18
|
node
|
|
19
19
|
}) => getLayoutColumnValign(node) === value)) !== null && _selectedLayoutColumn !== void 0 ? _selectedLayoutColumn : false;
|
|
20
20
|
const Icon = VERTICAL_ALIGN_ICONS[value];
|
|
@@ -14,7 +14,7 @@ export const VerticalAlignNestedMenu = ({
|
|
|
14
14
|
} = useIntl();
|
|
15
15
|
const selectedLayoutColumns = useSelectedLayoutColumns(api);
|
|
16
16
|
const currentValign = useMemo(() => {
|
|
17
|
-
const selectedColumns = selectedLayoutColumns === null || selectedLayoutColumns === void 0 ? void 0 : selectedLayoutColumns.
|
|
17
|
+
const selectedColumns = selectedLayoutColumns === null || selectedLayoutColumns === void 0 ? void 0 : selectedLayoutColumns.selectedLayoutColumns;
|
|
18
18
|
const firstColumn = selectedColumns === null || selectedColumns === void 0 ? void 0 : selectedColumns[0];
|
|
19
19
|
const firstValign = getLayoutColumnValign(firstColumn === null || firstColumn === void 0 ? void 0 : firstColumn.node);
|
|
20
20
|
if (!firstValign || !(selectedColumns !== null && selectedColumns !== void 0 && selectedColumns.every(({
|
|
@@ -18,7 +18,7 @@ const TOOLBAR_MENU_SELECTOR = '[data-toolbar-component="menu"]';
|
|
|
18
18
|
*/
|
|
19
19
|
const getLayoutColumnMenuTarget = (editorView, selection, anchorPosFromHandle) => {
|
|
20
20
|
var _columnDomRef$parentE;
|
|
21
|
-
const anchorPos = getLayoutColumnMenuAnchorPos(selection, anchorPosFromHandle);
|
|
21
|
+
const anchorPos = selection && getLayoutColumnMenuAnchorPos(selection, anchorPosFromHandle);
|
|
22
22
|
if (anchorPos === undefined) {
|
|
23
23
|
return null;
|
|
24
24
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/hooks';
|
|
2
|
-
import {
|
|
3
|
-
export const useSelectedLayoutColumns = api => useSharedPluginStateWithSelector(api, ['selection'],
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
import { getSelectedLayoutColumnsFromSelection } from '../../pm-plugins/utils/layout-column-selection';
|
|
3
|
+
export const useSelectedLayoutColumns = api => useSharedPluginStateWithSelector(api, ['selection'], ({
|
|
4
|
+
selectionState
|
|
5
|
+
}) => {
|
|
6
|
+
const selectedLayoutColumns = (selectionState === null || selectionState === void 0 ? void 0 : selectionState.selection) && getSelectedLayoutColumnsFromSelection(selectionState.selection);
|
|
7
|
+
return selectedLayoutColumns !== null && selectedLayoutColumns !== void 0 && selectedLayoutColumns.selectedLayoutColumns.length ? selectedLayoutColumns : undefined;
|
|
6
8
|
});
|
|
@@ -12,8 +12,11 @@ import LayoutThreeColumnsSidebarsIcon from '@atlaskit/icon/core/layout-three-col
|
|
|
12
12
|
import LayoutTwoColumnsIcon from '@atlaskit/icon/core/layout-two-columns';
|
|
13
13
|
import LayoutTwoColumnsSidebarLeftIcon from '@atlaskit/icon/core/layout-two-columns-sidebar-left';
|
|
14
14
|
import LayoutTwoColumnsSidebarRightIcon from '@atlaskit/icon/core/layout-two-columns-sidebar-right';
|
|
15
|
+
import TableColumnsDistributeIcon from '@atlaskit/icon/core/table-columns-distribute';
|
|
16
|
+
import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
|
|
15
17
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
|
|
16
|
-
import { deleteActiveLayoutNode, getPresetLayout, setPresetLayout } from '../pm-plugins/actions';
|
|
18
|
+
import { deleteActiveLayoutNode, distributeLayoutColumns, getPresetLayout, setPresetLayout } from '../pm-plugins/actions';
|
|
19
|
+
import { isDistributedUniformly } from '../pm-plugins/utils/layout-column-distribution';
|
|
17
20
|
import { EditorLayoutFiveColumnsIcon, EditorLayoutFourColumnsIcon } from './icons/LayoutColumnsIcon';
|
|
18
21
|
import { LayoutThreeWithLeftSidebarsIcon } from './icons/LayoutThreeWithLeftSidebars';
|
|
19
22
|
import { LayoutThreeWithRightSidebarsIcon } from './icons/LayoutThreeWithRightSidebars';
|
|
@@ -52,7 +55,7 @@ const SIDEBAR_LAYOUT_TYPES = [{
|
|
|
52
55
|
}];
|
|
53
56
|
|
|
54
57
|
// These are used for advanced layout options
|
|
55
|
-
const
|
|
58
|
+
const LAYOUT_WITH_TWO_COL_DISTRIBUTION_OLD = [{
|
|
56
59
|
id: 'editor.layout.twoEquals',
|
|
57
60
|
type: 'two_equal',
|
|
58
61
|
title: toolbarMessages.twoColumns,
|
|
@@ -68,7 +71,7 @@ const LAYOUT_WITH_TWO_COL_DISTRIBUTION = [{
|
|
|
68
71
|
title: toolbarMessages.leftSidebar,
|
|
69
72
|
icon: LayoutTwoColumnsSidebarLeftIcon
|
|
70
73
|
}];
|
|
71
|
-
const
|
|
74
|
+
const LAYOUT_WITH_THREE_COL_DISTRIBUTION_OLD = [{
|
|
72
75
|
id: 'editor.layout.threeEquals',
|
|
73
76
|
type: 'three_equal',
|
|
74
77
|
title: toolbarMessages.threeColumns,
|
|
@@ -91,6 +94,35 @@ const LAYOUT_WITH_THREE_COL_DISTRIBUTION = [{
|
|
|
91
94
|
icon: LayoutThreeWithLeftSidebarsIcon,
|
|
92
95
|
iconFallback: LayoutThreeWithLeftSidebarsIcon
|
|
93
96
|
}];
|
|
97
|
+
const LAYOUT_WITH_TWO_COL_DISTRIBUTION = [{
|
|
98
|
+
id: 'editor.layout.twoRightSidebar',
|
|
99
|
+
type: 'two_right_sidebar',
|
|
100
|
+
title: toolbarMessages.rightSidebar,
|
|
101
|
+
icon: LayoutTwoColumnsSidebarRightIcon
|
|
102
|
+
}, {
|
|
103
|
+
id: 'editor.layout.twoLeftSidebar',
|
|
104
|
+
type: 'two_left_sidebar',
|
|
105
|
+
title: toolbarMessages.leftSidebar,
|
|
106
|
+
icon: LayoutTwoColumnsSidebarLeftIcon
|
|
107
|
+
}];
|
|
108
|
+
const LAYOUT_WITH_THREE_COL_DISTRIBUTION = [{
|
|
109
|
+
id: 'editor.layout.threeWithSidebars',
|
|
110
|
+
type: 'three_with_sidebars',
|
|
111
|
+
title: toolbarMessages.threeColumnsWithSidebars,
|
|
112
|
+
icon: LayoutThreeColumnsSidebarsIcon
|
|
113
|
+
}, {
|
|
114
|
+
id: 'editor.layout.threeRightSidebars',
|
|
115
|
+
type: 'three_right_sidebars',
|
|
116
|
+
title: toolbarMessages.threeColumnsWithRightSidebars,
|
|
117
|
+
icon: LayoutThreeWithRightSidebarsIcon,
|
|
118
|
+
iconFallback: LayoutThreeWithRightSidebarsIcon
|
|
119
|
+
}, {
|
|
120
|
+
id: 'editor.layout.threeLeftSidebars',
|
|
121
|
+
type: 'three_left_sidebars',
|
|
122
|
+
title: toolbarMessages.threeColumnsWithLeftSidebars,
|
|
123
|
+
icon: LayoutThreeWithLeftSidebarsIcon,
|
|
124
|
+
iconFallback: LayoutThreeWithLeftSidebarsIcon
|
|
125
|
+
}];
|
|
94
126
|
const buildLayoutButton = (intl, item, currentLayout, editorAnalyticsAPI) => ({
|
|
95
127
|
id: item.id,
|
|
96
128
|
type: 'button',
|
|
@@ -103,7 +135,9 @@ const buildLayoutButton = (intl, item, currentLayout, editorAnalyticsAPI) => ({
|
|
|
103
135
|
tabIndex: null
|
|
104
136
|
});
|
|
105
137
|
export const layoutToolbarTitle = 'Layout floating controls';
|
|
106
|
-
const iconPlaceholder = LayoutTwoColumnsIcon
|
|
138
|
+
const iconPlaceholder = /*#__PURE__*/React.createElement(LayoutTwoColumnsIcon, {
|
|
139
|
+
label: ""
|
|
140
|
+
}); // TODO: ED-25466 - Replace with proper icon
|
|
107
141
|
|
|
108
142
|
const getLayoutColumnsIcons = colCount => {
|
|
109
143
|
if (!editorExperiment('single_column_layouts', true) && !editorExperiment('platform_editor_controls', 'variant1')) {
|
|
@@ -130,11 +164,13 @@ const getLayoutColumnsIcons = colCount => {
|
|
|
130
164
|
return undefined;
|
|
131
165
|
}
|
|
132
166
|
};
|
|
167
|
+
const getLayoutColumnWidths = node => {
|
|
168
|
+
return node.children.map(child => child.attrs.width);
|
|
169
|
+
};
|
|
133
170
|
const getAdvancedLayoutItems = ({
|
|
134
171
|
addSidebarLayouts,
|
|
135
172
|
intl,
|
|
136
173
|
editorAnalyticsAPI,
|
|
137
|
-
state,
|
|
138
174
|
node,
|
|
139
175
|
nodeType,
|
|
140
176
|
separator,
|
|
@@ -143,7 +179,8 @@ const getAdvancedLayoutItems = ({
|
|
|
143
179
|
allowAdvancedSingleColumnLayout
|
|
144
180
|
}) => {
|
|
145
181
|
const numberOfColumns = node.content.childCount || 2;
|
|
146
|
-
const
|
|
182
|
+
const isLayoutColumnMenuEnabled = expValEqualsNoExposure('platform_editor_layout_column_menu', 'isEnabled', true);
|
|
183
|
+
const distributionOptions = isLayoutColumnMenuEnabled ? numberOfColumns === 2 ? LAYOUT_WITH_TWO_COL_DISTRIBUTION : numberOfColumns === 3 ? LAYOUT_WITH_THREE_COL_DISTRIBUTION : [] : numberOfColumns === 2 ? LAYOUT_WITH_TWO_COL_DISTRIBUTION_OLD : numberOfColumns === 3 ? LAYOUT_WITH_THREE_COL_DISTRIBUTION_OLD : [];
|
|
147
184
|
const columnOptions = [{
|
|
148
185
|
title: intl.formatMessage(layoutMessages.columnOption, {
|
|
149
186
|
count: 2
|
|
@@ -177,7 +214,7 @@ const getAdvancedLayoutItems = ({
|
|
|
177
214
|
onClick: setPresetLayout(editorAnalyticsAPI)('five_equal'),
|
|
178
215
|
selected: numberOfColumns === 5
|
|
179
216
|
}];
|
|
180
|
-
const
|
|
217
|
+
const dropdownOptions = [...(allowAdvancedSingleColumnLayout ? [{
|
|
181
218
|
title: intl.formatMessage(layoutMessages.columnOption, {
|
|
182
219
|
count: 1
|
|
183
220
|
}),
|
|
@@ -185,17 +222,38 @@ const getAdvancedLayoutItems = ({
|
|
|
185
222
|
icon: getLayoutColumnsIcons(1) || iconPlaceholder,
|
|
186
223
|
onClick: setPresetLayout(editorAnalyticsAPI)('single'),
|
|
187
224
|
selected: numberOfColumns === 1
|
|
188
|
-
} : [];
|
|
225
|
+
}] : []), ...columnOptions];
|
|
226
|
+
const distributeColumnsButton = isLayoutColumnMenuEnabled && numberOfColumns > 1 ? {
|
|
227
|
+
disabled: isDistributedUniformly(getLayoutColumnWidths(node)),
|
|
228
|
+
icon: TableColumnsDistributeIcon,
|
|
229
|
+
onClick: (editorState, dispatch) => {
|
|
230
|
+
const tr = distributeLayoutColumns({
|
|
231
|
+
editorAnalyticsAPI,
|
|
232
|
+
inputMethod: INPUT_METHOD.FLOATING_TB,
|
|
233
|
+
target: 'allColumns'
|
|
234
|
+
})({
|
|
235
|
+
tr: editorState.tr
|
|
236
|
+
});
|
|
237
|
+
if (!tr) {
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
dispatch === null || dispatch === void 0 ? void 0 : dispatch(tr);
|
|
241
|
+
return true;
|
|
242
|
+
},
|
|
243
|
+
testId: 'layout-distribute-columns',
|
|
244
|
+
title: intl.formatMessage(layoutMessages.distributeColumns),
|
|
245
|
+
type: 'button'
|
|
246
|
+
} : undefined;
|
|
189
247
|
return [{
|
|
190
248
|
type: 'dropdown',
|
|
191
249
|
title: intl.formatMessage(layoutMessages.columnOption, {
|
|
192
250
|
count: numberOfColumns
|
|
193
251
|
}),
|
|
194
252
|
//`${numberOfColumns}-columns`,
|
|
195
|
-
options:
|
|
253
|
+
options: dropdownOptions,
|
|
196
254
|
showSelected: true,
|
|
197
255
|
testId: 'column-options-button'
|
|
198
|
-
}, ...(distributionOptions.length > 0 ? [separator] : []), ...(addSidebarLayouts ? distributionOptions.map(i => buildLayoutButton(intl, i, currentLayout, editorAnalyticsAPI)) : [])];
|
|
256
|
+
}, ...(distributionOptions.length > 0 || distributeColumnsButton ? [separator] : []), ...(addSidebarLayouts ? distributionOptions.map(i => buildLayoutButton(intl, i, currentLayout, editorAnalyticsAPI)) : []), ...(distributeColumnsButton ? [distributeColumnsButton] : [])];
|
|
199
257
|
};
|
|
200
258
|
const fullHeightSeparator = {
|
|
201
259
|
type: 'separator',
|
|
@@ -283,7 +341,6 @@ export const buildToolbar = (state, intl, pos, _allowBreakout, addSidebarLayouts
|
|
|
283
341
|
addSidebarLayouts,
|
|
284
342
|
intl,
|
|
285
343
|
editorAnalyticsAPI,
|
|
286
|
-
state,
|
|
287
344
|
nodeType,
|
|
288
345
|
node,
|
|
289
346
|
separator,
|
package/dist/esm/layoutPlugin.js
CHANGED
|
@@ -11,7 +11,7 @@ import { fg } from '@atlaskit/platform-feature-flags';
|
|
|
11
11
|
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
12
12
|
import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
|
|
13
13
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
|
|
14
|
-
import { createDefaultLayoutSection, createMultiColumnLayoutSection, deleteLayoutColumn as _deleteLayoutColumn,
|
|
14
|
+
import { createDefaultLayoutSection, createDistributeLayoutColumnsCommand, createMultiColumnLayoutSection, deleteLayoutColumn as _deleteLayoutColumn, insertLayoutColumn as _insertLayoutColumn, insertLayoutColumnsWithAnalytics, setLayoutColumnValign as _setLayoutColumnValign, toggleLayoutColumnMenu } from './pm-plugins/actions';
|
|
15
15
|
import { default as createLayoutPlugin } from './pm-plugins/main';
|
|
16
16
|
import { pluginKey } from './pm-plugins/plugin-key';
|
|
17
17
|
import { default as createLayoutResizingPlugin } from './pm-plugins/resizing';
|
|
@@ -50,7 +50,7 @@ export var selectIntoLayoutSection = function selectIntoLayoutSection(tr) {
|
|
|
50
50
|
return tr;
|
|
51
51
|
};
|
|
52
52
|
export var layoutPlugin = function layoutPlugin(_ref) {
|
|
53
|
-
var _api$analytics;
|
|
53
|
+
var _api$analytics, _api$analytics5;
|
|
54
54
|
var _ref$config = _ref.config,
|
|
55
55
|
options = _ref$config === void 0 ? {} : _ref$config,
|
|
56
56
|
api = _ref.api;
|
|
@@ -374,10 +374,7 @@ export var layoutPlugin = function layoutPlugin(_ref) {
|
|
|
374
374
|
var _api$analytics4;
|
|
375
375
|
return _deleteLayoutColumn(api === null || api === void 0 || (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions)(props);
|
|
376
376
|
},
|
|
377
|
-
distributeLayoutColumns:
|
|
378
|
-
var _api$analytics5;
|
|
379
|
-
return _distributeLayoutColumns(api === null || api === void 0 || (_api$analytics5 = api.analytics) === null || _api$analytics5 === void 0 ? void 0 : _api$analytics5.actions)(props);
|
|
380
|
-
},
|
|
377
|
+
distributeLayoutColumns: createDistributeLayoutColumnsCommand(api === null || api === void 0 || (_api$analytics5 = api.analytics) === null || _api$analytics5 === void 0 ? void 0 : _api$analytics5.actions),
|
|
381
378
|
insertLayoutColumn: function insertLayoutColumn(side) {
|
|
382
379
|
var _api$analytics6;
|
|
383
380
|
return _insertLayoutColumn(side, api === null || api === void 0 || (_api$analytics6 = api.analytics) === null || _api$analytics6 === void 0 ? void 0 : _api$analytics6.actions);
|
|
@@ -13,7 +13,7 @@ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
|
|
|
13
13
|
import { EVEN_DISTRIBUTED_COL_WIDTHS, MAX_LAYOUT_COLUMNS, MAX_STANDARD_LAYOUT_COLUMNS, MIN_LAYOUT_COLUMN_WIDTH_PERCENT } from './consts';
|
|
14
14
|
import { pluginKey } from './plugin-key';
|
|
15
15
|
import { calculateDistribution, isDistributedUniformly, redistributeAfterDeletion, redistributeProportionally } from './utils/layout-column-distribution';
|
|
16
|
-
import {
|
|
16
|
+
import { getAllLayoutColumnsFromSelection, getSelectedLayoutColumnsFromSelection } from './utils/layout-column-selection';
|
|
17
17
|
export var ONE_COL_LAYOUTS = ['single'];
|
|
18
18
|
export var TWO_COL_LAYOUTS = ['two_equal', 'two_left_sidebar', 'two_right_sidebar'];
|
|
19
19
|
export var THREE_COL_LAYOUTS = ['three_equal', 'three_with_sidebars'];
|
|
@@ -554,18 +554,17 @@ var insertLayoutColumnAt = function insertLayoutColumnAt(side, editorAnalyticsAP
|
|
|
554
554
|
if (!expValEqualsNoExposure('platform_editor_layout_column_menu', 'isEnabled', true)) {
|
|
555
555
|
return null;
|
|
556
556
|
}
|
|
557
|
-
var
|
|
558
|
-
if (!selectedLayoutColumns) {
|
|
557
|
+
var selectedLayoutColumnsResult = getSelectedLayoutColumnsFromSelection(tr.selection);
|
|
558
|
+
if (!selectedLayoutColumnsResult || selectedLayoutColumnsResult.selectedLayoutColumns.length === 0) {
|
|
559
559
|
return null;
|
|
560
560
|
}
|
|
561
|
-
var layoutSectionNode =
|
|
562
|
-
layoutSectionPos =
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
var endIndex = selectedColumnIndices[selectedColumnIndices.length - 1];
|
|
561
|
+
var layoutSectionNode = selectedLayoutColumnsResult.layoutSectionNode,
|
|
562
|
+
layoutSectionPos = selectedLayoutColumnsResult.layoutSectionPos,
|
|
563
|
+
startIndex = selectedLayoutColumnsResult.startIndex,
|
|
564
|
+
endIndex = selectedLayoutColumnsResult.endIndex,
|
|
565
|
+
selectedLayoutColumns = selectedLayoutColumnsResult.selectedLayoutColumns;
|
|
567
566
|
var selectedColumnIndex = side === 'left' ? startIndex : endIndex;
|
|
568
|
-
var selectedColumnCount =
|
|
567
|
+
var selectedColumnCount = selectedLayoutColumns.length;
|
|
569
568
|
if (layoutSectionNode.childCount >= getEffectiveMaxLayoutColumns()) {
|
|
570
569
|
return null;
|
|
571
570
|
}
|
|
@@ -623,22 +622,20 @@ export var setLayoutColumnValign = function setLayoutColumnValign(valign, editor
|
|
|
623
622
|
if (!expValEqualsNoExposure('platform_editor_layout_column_menu', 'isEnabled', true)) {
|
|
624
623
|
return null;
|
|
625
624
|
}
|
|
626
|
-
var
|
|
627
|
-
if (!
|
|
625
|
+
var selectedLayoutColumnsResult = getSelectedLayoutColumnsFromSelection(tr.selection);
|
|
626
|
+
if (!selectedLayoutColumnsResult) {
|
|
628
627
|
return null;
|
|
629
628
|
}
|
|
630
|
-
var
|
|
631
|
-
|
|
632
|
-
|
|
629
|
+
var startIndex = selectedLayoutColumnsResult.startIndex,
|
|
630
|
+
endIndex = selectedLayoutColumnsResult.endIndex,
|
|
631
|
+
selectedLayoutColumns = selectedLayoutColumnsResult.selectedLayoutColumns;
|
|
632
|
+
var columnsToUpdate = selectedLayoutColumns.filter(function (_ref6) {
|
|
633
633
|
var node = _ref6.node;
|
|
634
634
|
return node.attrs.valign !== valign;
|
|
635
635
|
});
|
|
636
636
|
if (columnsToUpdate.length === 0) {
|
|
637
637
|
return null;
|
|
638
638
|
}
|
|
639
|
-
var startIndex = selectedColumnIndices[0];
|
|
640
|
-
var endIndex = selectedColumnIndices[selectedColumnIndices.length - 1];
|
|
641
|
-
var selectedColumnCount = selectedColumns.length;
|
|
642
639
|
var updatedColumnCount = columnsToUpdate.length;
|
|
643
640
|
columnsToUpdate.forEach(function (_ref7) {
|
|
644
641
|
var node = _ref7.node,
|
|
@@ -654,7 +651,7 @@ export var setLayoutColumnValign = function setLayoutColumnValign(valign, editor
|
|
|
654
651
|
attributes: {
|
|
655
652
|
endIndex: endIndex,
|
|
656
653
|
inputMethod: INPUT_METHOD.LAYOUT_COLUMN_MENU,
|
|
657
|
-
selectedCount:
|
|
654
|
+
selectedCount: selectedLayoutColumns.length,
|
|
658
655
|
startIndex: startIndex,
|
|
659
656
|
updatedCount: updatedColumnCount,
|
|
660
657
|
valign: valign
|
|
@@ -665,28 +662,31 @@ export var setLayoutColumnValign = function setLayoutColumnValign(valign, editor
|
|
|
665
662
|
return tr;
|
|
666
663
|
};
|
|
667
664
|
};
|
|
668
|
-
export var distributeLayoutColumns = function distributeLayoutColumns(
|
|
669
|
-
var
|
|
670
|
-
|
|
671
|
-
|
|
665
|
+
export var distributeLayoutColumns = function distributeLayoutColumns() {
|
|
666
|
+
var _ref8 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
667
|
+
editorAnalyticsAPI = _ref8.editorAnalyticsAPI,
|
|
668
|
+
_ref8$inputMethod = _ref8.inputMethod,
|
|
669
|
+
inputMethod = _ref8$inputMethod === void 0 ? INPUT_METHOD.LAYOUT_COLUMN_MENU : _ref8$inputMethod,
|
|
670
|
+
_ref8$target = _ref8.target,
|
|
671
|
+
target = _ref8$target === void 0 ? 'selectedColumns' : _ref8$target;
|
|
672
|
+
return function (_ref9) {
|
|
673
|
+
var tr = _ref9.tr;
|
|
672
674
|
if (!expValEqualsNoExposure('platform_editor_layout_column_menu', 'isEnabled', true)) {
|
|
673
675
|
return null;
|
|
674
676
|
}
|
|
675
|
-
var
|
|
676
|
-
if (!
|
|
677
|
+
var selectedLayoutColumnsResult = target === 'allColumns' ? getAllLayoutColumnsFromSelection(tr.selection) : getSelectedLayoutColumnsFromSelection(tr.selection);
|
|
678
|
+
if (!selectedLayoutColumnsResult || selectedLayoutColumnsResult.selectedLayoutColumns.length < 2) {
|
|
677
679
|
return null;
|
|
678
680
|
}
|
|
679
|
-
var layoutSectionNode =
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
var selectedColumnCount = selectedColumns.length;
|
|
684
|
-
var totalColumnCount = layoutSectionNode.childCount;
|
|
681
|
+
var layoutSectionNode = selectedLayoutColumnsResult.layoutSectionNode,
|
|
682
|
+
startIndex = selectedLayoutColumnsResult.startIndex,
|
|
683
|
+
endIndex = selectedLayoutColumnsResult.endIndex,
|
|
684
|
+
selectedLayoutColumns = selectedLayoutColumnsResult.selectedLayoutColumns;
|
|
685
685
|
var existingWidths = mapChildren(layoutSectionNode, function (column) {
|
|
686
686
|
return column.attrs.width;
|
|
687
687
|
});
|
|
688
|
-
var selectedWidths =
|
|
689
|
-
var node =
|
|
688
|
+
var selectedWidths = selectedLayoutColumns.map(function (_ref0) {
|
|
689
|
+
var node = _ref0.node;
|
|
690
690
|
return node.attrs.width;
|
|
691
691
|
});
|
|
692
692
|
var distribution = calculateDistribution(selectedWidths);
|
|
@@ -702,15 +702,14 @@ export var distributeLayoutColumns = function distributeLayoutColumns(editorAnal
|
|
|
702
702
|
// Build new widths array: selected columns get equal share, unselected unchanged.
|
|
703
703
|
// Assign rounded (2dp) equal widths to all selected cols except the last, which absorbs
|
|
704
704
|
// the rounding remainder so the sum of selected widths equals selectedTotal exactly.
|
|
705
|
-
var selectedIndexSet = new Set(selectedColumnIndices);
|
|
706
705
|
var assignedToSelected = 0;
|
|
707
706
|
var selectedAssignedCount = 0;
|
|
708
707
|
var newWidths = existingWidths.map(function (w, idx) {
|
|
709
|
-
if (
|
|
708
|
+
if (idx < startIndex || idx > endIndex) {
|
|
710
709
|
return w;
|
|
711
710
|
}
|
|
712
711
|
selectedAssignedCount += 1;
|
|
713
|
-
if (selectedAssignedCount <
|
|
712
|
+
if (selectedAssignedCount < selectedLayoutColumns.length) {
|
|
714
713
|
assignedToSelected += equalWidth;
|
|
715
714
|
return equalWidth;
|
|
716
715
|
}
|
|
@@ -719,10 +718,10 @@ export var distributeLayoutColumns = function distributeLayoutColumns(editorAnal
|
|
|
719
718
|
});
|
|
720
719
|
|
|
721
720
|
// Apply widths via setNodeMarkup per selected column — keeps nodes in place (preserves identity, marks, decorations)
|
|
722
|
-
|
|
723
|
-
var node =
|
|
724
|
-
pos =
|
|
725
|
-
var colIdx =
|
|
721
|
+
selectedLayoutColumns.forEach(function (_ref1, i) {
|
|
722
|
+
var node = _ref1.node,
|
|
723
|
+
pos = _ref1.pos;
|
|
724
|
+
var colIdx = startIndex + i;
|
|
726
725
|
tr.setNodeMarkup(pos, node.type, _objectSpread(_objectSpread({}, node.attrs), {}, {
|
|
727
726
|
width: newWidths[colIdx]
|
|
728
727
|
}));
|
|
@@ -732,11 +731,11 @@ export var distributeLayoutColumns = function distributeLayoutColumns(editorAnal
|
|
|
732
731
|
actionSubject: ACTION_SUBJECT.DOCUMENT,
|
|
733
732
|
actionSubjectId: ACTION_SUBJECT_ID.LAYOUT_COLUMN,
|
|
734
733
|
attributes: {
|
|
735
|
-
columnCount:
|
|
734
|
+
columnCount: layoutSectionNode.childCount,
|
|
736
735
|
endIndex: endIndex,
|
|
737
736
|
inputMethod: inputMethod,
|
|
738
|
-
selectedCount:
|
|
739
|
-
startIndex:
|
|
737
|
+
selectedCount: selectedLayoutColumns.length,
|
|
738
|
+
startIndex: startIndex
|
|
740
739
|
},
|
|
741
740
|
eventType: EVENT_TYPE.TRACK
|
|
742
741
|
})(tr);
|
|
@@ -744,11 +743,19 @@ export var distributeLayoutColumns = function distributeLayoutColumns(editorAnal
|
|
|
744
743
|
return tr;
|
|
745
744
|
};
|
|
746
745
|
};
|
|
747
|
-
export var
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
746
|
+
export var createDistributeLayoutColumnsCommand = function createDistributeLayoutColumnsCommand(editorAnalyticsAPI) {
|
|
747
|
+
return function () {
|
|
748
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
749
|
+
return distributeLayoutColumns(_objectSpread(_objectSpread({}, options), {}, {
|
|
750
|
+
editorAnalyticsAPI: editorAnalyticsAPI
|
|
751
|
+
}));
|
|
752
|
+
};
|
|
753
|
+
};
|
|
754
|
+
export var toggleLayoutColumnMenu = function toggleLayoutColumnMenu(_ref10) {
|
|
755
|
+
var anchorPos = _ref10.anchorPos,
|
|
756
|
+
isOpen = _ref10.isOpen;
|
|
757
|
+
return function (_ref11) {
|
|
758
|
+
var tr = _ref11.tr;
|
|
752
759
|
tr.setMeta('toggleLayoutColumnMenu', {
|
|
753
760
|
anchorPos: anchorPos,
|
|
754
761
|
isOpen: isOpen
|
|
@@ -758,23 +765,20 @@ export var toggleLayoutColumnMenu = function toggleLayoutColumnMenu(_ref1) {
|
|
|
758
765
|
};
|
|
759
766
|
};
|
|
760
767
|
export var deleteLayoutColumn = function deleteLayoutColumn(editorAnalyticsAPI) {
|
|
761
|
-
return function (
|
|
762
|
-
var tr =
|
|
768
|
+
return function (_ref12) {
|
|
769
|
+
var tr = _ref12.tr;
|
|
763
770
|
if (!expValEqualsNoExposure('platform_editor_layout_column_menu', 'isEnabled', true)) {
|
|
764
771
|
return null;
|
|
765
772
|
}
|
|
766
|
-
var
|
|
767
|
-
if (!selectedLayoutColumns) {
|
|
773
|
+
var selectedLayoutColumnsResult = getSelectedLayoutColumnsFromSelection(tr.selection);
|
|
774
|
+
if (!selectedLayoutColumnsResult || selectedLayoutColumnsResult.selectedLayoutColumns.length === 0) {
|
|
768
775
|
return null;
|
|
769
776
|
}
|
|
770
|
-
var layoutSectionNode =
|
|
771
|
-
layoutSectionPos =
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
var endIndex = selectedColumnIndices[selectedColumnIndices.length - 1];
|
|
776
|
-
var selectedColumnCount = selectedColumns.length;
|
|
777
|
-
var selectedColumnIndexSet = new Set(selectedColumnIndices);
|
|
777
|
+
var layoutSectionNode = selectedLayoutColumnsResult.layoutSectionNode,
|
|
778
|
+
layoutSectionPos = selectedLayoutColumnsResult.layoutSectionPos,
|
|
779
|
+
selectedLayoutColumns = selectedLayoutColumnsResult.selectedLayoutColumns,
|
|
780
|
+
startIndex = selectedLayoutColumnsResult.startIndex,
|
|
781
|
+
endIndex = selectedLayoutColumnsResult.endIndex;
|
|
778
782
|
var emitDeleteColumnAnalytics = function emitDeleteColumnAnalytics(columnCount) {
|
|
779
783
|
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({
|
|
780
784
|
action: ACTION.DELETED,
|
|
@@ -784,7 +788,7 @@ export var deleteLayoutColumn = function deleteLayoutColumn(editorAnalyticsAPI)
|
|
|
784
788
|
columnCount: columnCount,
|
|
785
789
|
endIndex: endIndex,
|
|
786
790
|
inputMethod: INPUT_METHOD.LAYOUT_COLUMN_MENU,
|
|
787
|
-
selectedCount:
|
|
791
|
+
selectedCount: selectedLayoutColumns.length,
|
|
788
792
|
startIndex: startIndex
|
|
789
793
|
},
|
|
790
794
|
eventType: EVENT_TYPE.TRACK
|
|
@@ -792,7 +796,7 @@ export var deleteLayoutColumn = function deleteLayoutColumn(editorAnalyticsAPI)
|
|
|
792
796
|
};
|
|
793
797
|
|
|
794
798
|
// If all columns are selected, remove the entire layoutSection
|
|
795
|
-
if (
|
|
799
|
+
if (selectedLayoutColumns.length === layoutSectionNode.childCount) {
|
|
796
800
|
tr.delete(layoutSectionPos, layoutSectionPos + layoutSectionNode.nodeSize);
|
|
797
801
|
emitDeleteColumnAnalytics(0);
|
|
798
802
|
tr.setMeta('scrollIntoView', false);
|
|
@@ -802,7 +806,7 @@ export var deleteLayoutColumn = function deleteLayoutColumn(editorAnalyticsAPI)
|
|
|
802
806
|
// Build new column list without the selected columns
|
|
803
807
|
var remainingColumns = [];
|
|
804
808
|
layoutSectionNode.forEach(function (column, _offset, index) {
|
|
805
|
-
if (
|
|
809
|
+
if (index < startIndex || index > endIndex) {
|
|
806
810
|
remainingColumns.push(column);
|
|
807
811
|
}
|
|
808
812
|
});
|
|
@@ -811,12 +815,12 @@ export var deleteLayoutColumn = function deleteLayoutColumn(editorAnalyticsAPI)
|
|
|
811
815
|
var existingWidths = mapChildren(layoutSectionNode, function (column) {
|
|
812
816
|
return column.attrs.width;
|
|
813
817
|
});
|
|
814
|
-
var redistributed =
|
|
818
|
+
var redistributed = selectedLayoutColumns.map(function (_, i) {
|
|
819
|
+
return startIndex + i;
|
|
820
|
+
})
|
|
815
821
|
// Delete highest indices first so lower original indices still point at the same columns
|
|
816
822
|
// as each redistribution step shrinks the widths array.
|
|
817
|
-
.
|
|
818
|
-
return b - a;
|
|
819
|
-
}).reduce(function (widths, selectedIndex) {
|
|
823
|
+
.reverse().reduce(function (widths, selectedIndex) {
|
|
820
824
|
return redistributeAfterDeletion(widths, selectedIndex, MIN_LAYOUT_COLUMN_WIDTH_PERCENT);
|
|
821
825
|
}, existingWidths);
|
|
822
826
|
var updatedLayoutSectionNode = layoutSectionNode.copy(Fragment.fromArray(remainingColumns));
|