@atlaskit/editor-plugin-layout 20.0.1 → 20.0.3
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 +25 -0
- package/dist/cjs/layoutPlugin.js +56 -145
- package/dist/cjs/nodeviews/index.js +1 -1
- package/dist/cjs/pm-plugins/actions.js +1 -1
- package/dist/cjs/pm-plugins/main.js +1 -1
- package/dist/cjs/pm-plugins/utils/index.js +1 -1
- package/dist/cjs/ui/LayoutColumnMenu/index.js +10 -9
- package/dist/cjs/ui/quick-insert/LayoutQuickInsertMenuItem.js +2 -2
- package/dist/cjs/ui/toolbar.js +1 -1
- package/dist/es2019/entry-points/layout-plugin.js +1 -0
- package/dist/es2019/layoutPlugin.js +55 -136
- package/dist/es2019/nodeviews/index.js +1 -1
- package/dist/es2019/pm-plugins/actions.js +1 -1
- package/dist/es2019/pm-plugins/main.js +1 -1
- package/dist/es2019/pm-plugins/utils/index.js +1 -1
- package/dist/es2019/ui/LayoutColumnMenu/index.js +9 -8
- package/dist/es2019/ui/quick-insert/LayoutQuickInsertMenuItem.js +2 -2
- package/dist/es2019/ui/toolbar.js +1 -1
- package/dist/esm/entry-points/layout-plugin.js +1 -0
- package/dist/esm/layoutPlugin.js +56 -145
- package/dist/esm/nodeviews/index.js +1 -1
- package/dist/esm/pm-plugins/actions.js +1 -1
- package/dist/esm/pm-plugins/main.js +1 -1
- package/dist/esm/pm-plugins/utils/index.js +1 -1
- package/dist/esm/ui/LayoutColumnMenu/index.js +10 -9
- package/dist/esm/ui/quick-insert/LayoutQuickInsertMenuItem.js +2 -2
- package/dist/esm/ui/toolbar.js +1 -1
- package/dist/types/ui/LayoutColumnMenu/index.d.ts +0 -1
- package/package.json +7 -7
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { layoutColumn, layoutColumnWithLocalId } from '@atlaskit/adf-schema/nodes/layout-column';
|
|
3
2
|
import { layoutSection, layoutSectionWithLocalId, layoutSectionWithSingleColumn, layoutSectionWithSingleColumnLocalId } from '@atlaskit/adf-schema/layout-section';
|
|
3
|
+
import { layoutColumn, layoutColumnWithLocalId } from '@atlaskit/adf-schema/nodes/layout-column';
|
|
4
4
|
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD } from '@atlaskit/editor-common/analytics';
|
|
5
5
|
import { TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM, TRANSFORM_STRUCTURE_MENU_SECTION, TRANSFORM_STRUCTURE_MENU_SECTION_RANK } from '@atlaskit/editor-common/block-menu';
|
|
6
6
|
import { layoutMessages, toolbarInsertBlockMessages as messages } from '@atlaskit/editor-common/messages';
|
|
@@ -9,8 +9,8 @@ import { TextSelection } from '@atlaskit/editor-prosemirror/state';
|
|
|
9
9
|
import { findParentNode } from '@atlaskit/editor-prosemirror/utils';
|
|
10
10
|
import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
|
|
11
11
|
import { fg } from '@atlaskit/platform-feature-flags/fg';
|
|
12
|
-
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
13
12
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/editor-experiment';
|
|
13
|
+
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
14
14
|
import { createDefaultLayoutSection, createMultiColumnLayoutSection, deleteLayoutColumn, distributeLayoutColumns, insertLayoutColumn, insertLayoutColumnsWithAnalytics, setLayoutColumnDangerPreview, setLayoutColumnValign, toggleLayoutColumnMenu } from './pm-plugins/actions';
|
|
15
15
|
import { default as createLayoutKeymapPlugin } from './pm-plugins/keymap';
|
|
16
16
|
import { default as createLayoutPlugin } from './pm-plugins/main';
|
|
@@ -55,7 +55,6 @@ export const layoutPlugin = ({
|
|
|
55
55
|
api
|
|
56
56
|
}) => {
|
|
57
57
|
var _api$blockMenu, _api$analytics2;
|
|
58
|
-
const blockControlMigrationEnabled = isExperimentEnabled('platform_editor_block_control_migration');
|
|
59
58
|
const isAdvancedLayoutEnabled = editorExperiment('advanced_layouts', true);
|
|
60
59
|
const allowAdvancedSingleColumnLayout = isAdvancedLayoutEnabled && editorExperiment('single_column_layouts', true, {
|
|
61
60
|
exposure: true
|
|
@@ -166,159 +165,80 @@ export const layoutPlugin = ({
|
|
|
166
165
|
return tr;
|
|
167
166
|
};
|
|
168
167
|
if (editorExperiment('advanced_layouts', true)) {
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
withInsertLayoutAnalytics(tr, 1);
|
|
180
|
-
} else {
|
|
181
|
-
withInsertLayoutAnalytics(tr);
|
|
182
|
-
}
|
|
183
|
-
selectIntoLayoutSection(tr);
|
|
184
|
-
return tr;
|
|
185
|
-
}
|
|
186
|
-
}] : [];
|
|
187
|
-
if (expValEquals('platform_editor_layout_typeahead_reorder', 'isEnabled', true)) {
|
|
188
|
-
const createAdvancedColumnLayoutOption = ({
|
|
189
|
-
columnCount,
|
|
190
|
-
descriptionColumnCount,
|
|
191
|
-
icon: Icon,
|
|
192
|
-
id,
|
|
193
|
-
keyword,
|
|
194
|
-
title
|
|
195
|
-
}) => ({
|
|
196
|
-
id,
|
|
197
|
-
title,
|
|
198
|
-
description: formatMessage(messages.columnsDescriptionAdvancedLayout, {
|
|
199
|
-
numberOfColumns: descriptionColumnCount
|
|
200
|
-
}),
|
|
201
|
-
keywords: ['layout', 'column', 'section', 'col', keyword],
|
|
202
|
-
priority: 1100,
|
|
203
|
-
icon: Icon,
|
|
204
|
-
action(insert, state) {
|
|
205
|
-
const tr = insert(createMultiColumnLayoutSection(state, columnCount));
|
|
206
|
-
if (fg('platform_editor_column_count_analytics')) {
|
|
207
|
-
withInsertLayoutAnalytics(tr, columnCount);
|
|
208
|
-
} else {
|
|
209
|
-
withInsertLayoutAnalytics(tr);
|
|
210
|
-
}
|
|
211
|
-
selectIntoLayoutSection(tr);
|
|
212
|
-
return tr;
|
|
213
|
-
}
|
|
214
|
-
});
|
|
215
|
-
return [createAdvancedColumnLayoutOption({
|
|
216
|
-
columnCount: 2,
|
|
217
|
-
descriptionColumnCount: 'two',
|
|
218
|
-
icon: () => /*#__PURE__*/React.createElement(IconTwoColumnLayout, null),
|
|
219
|
-
id: 'twocolumnslayout',
|
|
220
|
-
keyword: 'two column',
|
|
221
|
-
title: formatMessage(layoutMessages.twoColumnsAdvancedLayout)
|
|
222
|
-
}), ...advancedSingleColumnOption, createAdvancedColumnLayoutOption({
|
|
223
|
-
columnCount: 3,
|
|
224
|
-
descriptionColumnCount: 'three',
|
|
225
|
-
icon: () => /*#__PURE__*/React.createElement(IconThreeColumnLayout, null),
|
|
226
|
-
id: 'threecolumnslayout',
|
|
227
|
-
keyword: 'three column',
|
|
228
|
-
title: formatMessage(layoutMessages.threeColumnsAdvancedLayout)
|
|
229
|
-
}), createAdvancedColumnLayoutOption({
|
|
230
|
-
columnCount: 4,
|
|
231
|
-
descriptionColumnCount: 'four',
|
|
232
|
-
icon: () => /*#__PURE__*/React.createElement(IconFourColumnLayout, null),
|
|
233
|
-
id: 'fourcolumnslayout',
|
|
234
|
-
keyword: 'four column',
|
|
235
|
-
title: formatMessage(layoutMessages.fourColumns)
|
|
236
|
-
}), createAdvancedColumnLayoutOption({
|
|
237
|
-
columnCount: 5,
|
|
238
|
-
descriptionColumnCount: 'five',
|
|
239
|
-
icon: () => /*#__PURE__*/React.createElement(IconFiveColumnLayout, null),
|
|
240
|
-
id: 'fivecolumnslayout',
|
|
241
|
-
keyword: 'five column',
|
|
242
|
-
title: formatMessage(layoutMessages.fiveColumns)
|
|
243
|
-
})];
|
|
244
|
-
}
|
|
245
|
-
return [...advancedSingleColumnOption, {
|
|
246
|
-
id: 'twocolumnslayout',
|
|
247
|
-
title: formatMessage(layoutMessages.twoColumnsAdvancedLayout),
|
|
168
|
+
const createAdvancedColumnLayoutOption = ({
|
|
169
|
+
columnCount,
|
|
170
|
+
descriptionColumnCount,
|
|
171
|
+
icon: Icon,
|
|
172
|
+
id,
|
|
173
|
+
keyword,
|
|
174
|
+
title
|
|
175
|
+
}) => ({
|
|
176
|
+
id,
|
|
177
|
+
title,
|
|
248
178
|
description: formatMessage(messages.columnsDescriptionAdvancedLayout, {
|
|
249
|
-
numberOfColumns:
|
|
179
|
+
numberOfColumns: descriptionColumnCount
|
|
250
180
|
}),
|
|
251
|
-
keywords: ['layout', 'column', 'section', 'col',
|
|
181
|
+
keywords: ['layout', 'column', 'section', 'col', keyword],
|
|
252
182
|
priority: 1100,
|
|
253
|
-
icon:
|
|
183
|
+
icon: Icon,
|
|
254
184
|
action(insert, state) {
|
|
255
|
-
const tr = insert(createMultiColumnLayoutSection(state,
|
|
185
|
+
const tr = insert(createMultiColumnLayoutSection(state, columnCount));
|
|
256
186
|
if (fg('platform_editor_column_count_analytics')) {
|
|
257
|
-
withInsertLayoutAnalytics(tr,
|
|
187
|
+
withInsertLayoutAnalytics(tr, columnCount);
|
|
258
188
|
} else {
|
|
259
189
|
withInsertLayoutAnalytics(tr);
|
|
260
190
|
}
|
|
261
191
|
selectIntoLayoutSection(tr);
|
|
262
192
|
return tr;
|
|
263
193
|
}
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
keywords: ['layout', 'column', 'section', 'col', 'three column'],
|
|
194
|
+
});
|
|
195
|
+
const advancedSingleColumnOption = allowAdvancedSingleColumnLayout ? [{
|
|
196
|
+
id: 'onecolumnlayout',
|
|
197
|
+
title: formatMessage(layoutMessages.singleColumnAdvancedLayout),
|
|
198
|
+
description: formatMessage(messages.singleColumnsDescriptionAdvancedLayout),
|
|
199
|
+
keywords: ['layout', 'column', 'section', 'col', 'single column'],
|
|
271
200
|
priority: 1100,
|
|
272
|
-
icon: () => /*#__PURE__*/React.createElement(
|
|
201
|
+
icon: () => /*#__PURE__*/React.createElement(IconOneColumnLayout, null),
|
|
273
202
|
action(insert, state) {
|
|
274
|
-
const tr = insert(createMultiColumnLayoutSection(state,
|
|
203
|
+
const tr = insert(createMultiColumnLayoutSection(state, 1));
|
|
275
204
|
if (fg('platform_editor_column_count_analytics')) {
|
|
276
|
-
withInsertLayoutAnalytics(tr,
|
|
205
|
+
withInsertLayoutAnalytics(tr, 1);
|
|
277
206
|
} else {
|
|
278
207
|
withInsertLayoutAnalytics(tr);
|
|
279
208
|
}
|
|
280
209
|
selectIntoLayoutSection(tr);
|
|
281
210
|
return tr;
|
|
282
211
|
}
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
212
|
+
}] : [];
|
|
213
|
+
return [createAdvancedColumnLayoutOption({
|
|
214
|
+
columnCount: 2,
|
|
215
|
+
descriptionColumnCount: 'two',
|
|
216
|
+
icon: () => /*#__PURE__*/React.createElement(IconTwoColumnLayout, null),
|
|
217
|
+
id: 'twocolumnslayout',
|
|
218
|
+
keyword: 'two column',
|
|
219
|
+
title: formatMessage(layoutMessages.twoColumnsAdvancedLayout)
|
|
220
|
+
}), ...advancedSingleColumnOption, createAdvancedColumnLayoutOption({
|
|
221
|
+
columnCount: 3,
|
|
222
|
+
descriptionColumnCount: 'three',
|
|
223
|
+
icon: () => /*#__PURE__*/React.createElement(IconThreeColumnLayout, null),
|
|
224
|
+
id: 'threecolumnslayout',
|
|
225
|
+
keyword: 'three column',
|
|
226
|
+
title: formatMessage(layoutMessages.threeColumnsAdvancedLayout)
|
|
227
|
+
}), createAdvancedColumnLayoutOption({
|
|
228
|
+
columnCount: 4,
|
|
229
|
+
descriptionColumnCount: 'four',
|
|
291
230
|
icon: () => /*#__PURE__*/React.createElement(IconFourColumnLayout, null),
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
}
|
|
299
|
-
selectIntoLayoutSection(tr);
|
|
300
|
-
return tr;
|
|
301
|
-
}
|
|
302
|
-
}, {
|
|
303
|
-
id: 'fivecolumnslayout',
|
|
304
|
-
title: formatMessage(layoutMessages.fiveColumns),
|
|
305
|
-
description: formatMessage(messages.columnsDescriptionAdvancedLayout, {
|
|
306
|
-
numberOfColumns: 'five'
|
|
307
|
-
}),
|
|
308
|
-
keywords: ['layout', 'column', 'section', 'col', 'five column'],
|
|
309
|
-
priority: 1100,
|
|
231
|
+
id: 'fourcolumnslayout',
|
|
232
|
+
keyword: 'four column',
|
|
233
|
+
title: formatMessage(layoutMessages.fourColumns)
|
|
234
|
+
}), createAdvancedColumnLayoutOption({
|
|
235
|
+
columnCount: 5,
|
|
236
|
+
descriptionColumnCount: 'five',
|
|
310
237
|
icon: () => /*#__PURE__*/React.createElement(IconFiveColumnLayout, null),
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
} else {
|
|
316
|
-
withInsertLayoutAnalytics(tr);
|
|
317
|
-
}
|
|
318
|
-
selectIntoLayoutSection(tr);
|
|
319
|
-
return tr;
|
|
320
|
-
}
|
|
321
|
-
}];
|
|
238
|
+
id: 'fivecolumnslayout',
|
|
239
|
+
keyword: 'five column',
|
|
240
|
+
title: formatMessage(layoutMessages.fiveColumns)
|
|
241
|
+
})];
|
|
322
242
|
} else {
|
|
323
243
|
return [{
|
|
324
244
|
id: 'layout',
|
|
@@ -356,8 +276,7 @@ export const layoutPlugin = ({
|
|
|
356
276
|
editorView: editorView,
|
|
357
277
|
mountTo: popupsMountPoint,
|
|
358
278
|
boundariesElement: popupsBoundariesElement,
|
|
359
|
-
scrollableElement: popupsScrollableElement
|
|
360
|
-
useRegistryAnchor: blockControlMigrationEnabled
|
|
279
|
+
scrollableElement: popupsScrollableElement
|
|
361
280
|
}) : null);
|
|
362
281
|
},
|
|
363
282
|
getSharedState(editorState) {
|
|
@@ -6,8 +6,8 @@ import { BreakoutResizer, ignoreResizerMutations } from '@atlaskit/editor-common
|
|
|
6
6
|
import { useSharedPluginStateSelector } from '@atlaskit/editor-common/use-shared-plugin-state-selector';
|
|
7
7
|
import { DOMSerializer } from '@atlaskit/editor-prosemirror/model';
|
|
8
8
|
import { fg } from '@atlaskit/platform-feature-flags/fg';
|
|
9
|
-
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
10
9
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/editor-experiment';
|
|
10
|
+
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
11
11
|
import { selectIntoLayout } from '../pm-plugins/utils';
|
|
12
12
|
import { LayoutSSRReactContextsProvider } from '../ui/LayoutSSRReactContextsProvider';
|
|
13
13
|
import { isEmptyLayout } from './utils';
|
|
@@ -6,8 +6,8 @@ import { NodeSelection, TextSelection } from '@atlaskit/editor-prosemirror/state
|
|
|
6
6
|
import { Mapping, StepMap } from '@atlaskit/editor-prosemirror/transform';
|
|
7
7
|
import { safeInsert } from '@atlaskit/editor-prosemirror/utils';
|
|
8
8
|
import { fg } from '@atlaskit/platform-feature-flags/fg';
|
|
9
|
-
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
10
9
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/editor-experiment';
|
|
10
|
+
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
11
11
|
import { DEFAULT_LAYOUT_COLUMN_VALIGN, EVEN_DISTRIBUTED_COL_WIDTHS, MAX_LAYOUT_COLUMNS, MAX_STANDARD_LAYOUT_COLUMNS, MIN_LAYOUT_COLUMN_WIDTH_PERCENT } from './consts';
|
|
12
12
|
import { pluginKey } from './plugin-key';
|
|
13
13
|
import { calculateDistribution, isDistributedUniformly, redistributeAfterDeletion, redistributeProportionally } from './utils/layout-column-distribution';
|
|
@@ -7,8 +7,8 @@ import { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
|
7
7
|
import { NodeSelection, Selection, TextSelection } from '@atlaskit/editor-prosemirror/state';
|
|
8
8
|
import { findParentNodeClosestToPos, findParentNodeOfType } from '@atlaskit/editor-prosemirror/utils';
|
|
9
9
|
import { Decoration, DecorationSet } from '@atlaskit/editor-prosemirror/view';
|
|
10
|
-
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
11
10
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/editor-experiment';
|
|
11
|
+
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
12
12
|
import { fixColumnSizes, fixColumnStructure, getSelectedLayout, LAYOUT_COLUMN_INSERT_META } from './actions';
|
|
13
13
|
import { getColumnDividerDecorations } from './column-resize-divider';
|
|
14
14
|
import { EVEN_DISTRIBUTED_COL_WIDTHS } from './consts';
|
|
@@ -4,8 +4,8 @@ import { TextSelection } from '@atlaskit/editor-prosemirror/state';
|
|
|
4
4
|
import { findParentNodeOfType, findSelectedNodeOfType } from '@atlaskit/editor-prosemirror/utils';
|
|
5
5
|
import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
|
|
6
6
|
import { fg } from '@atlaskit/platform-feature-flags/fg';
|
|
7
|
-
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
8
7
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/editor-experiment';
|
|
8
|
+
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
9
9
|
export const getMaybeLayoutSection = state => {
|
|
10
10
|
const {
|
|
11
11
|
schema: {
|
|
@@ -10,6 +10,7 @@ import { UserIntentPopupWrapper } from '@atlaskit/editor-common/user-intent';
|
|
|
10
10
|
import { akEditorFloatingOverlapPanelZIndex } from '@atlaskit/editor-shared-styles';
|
|
11
11
|
import { ToolbarDropdownMenuProvider } from '@atlaskit/editor-toolbar';
|
|
12
12
|
import { SurfaceRenderer } from '@atlaskit/editor-ui-control-model';
|
|
13
|
+
import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
|
|
13
14
|
import { getLayoutColumnMenuAnchorPos } from '../../pm-plugins/utils/layout-column-selection';
|
|
14
15
|
import { LAYOUT_COLUMN_MENU_FALLBACKS } from './components';
|
|
15
16
|
import { LAYOUT_COLUMN_MENU } from './keys';
|
|
@@ -42,8 +43,7 @@ export const LayoutColumnMenu = /*#__PURE__*/React.memo(function LayoutColumnMen
|
|
|
42
43
|
editorView,
|
|
43
44
|
mountTo,
|
|
44
45
|
boundariesElement,
|
|
45
|
-
scrollableElement
|
|
46
|
-
useRegistryAnchor
|
|
46
|
+
scrollableElement
|
|
47
47
|
}) {
|
|
48
48
|
var _api$uiControlRegistr, _api$uiControlRegistr2;
|
|
49
49
|
const {
|
|
@@ -117,10 +117,11 @@ export const LayoutColumnMenu = /*#__PURE__*/React.memo(function LayoutColumnMen
|
|
|
117
117
|
});
|
|
118
118
|
}, [handleMenuKeyDown, isLayoutColumnMenuOpen]);
|
|
119
119
|
const components = (_api$uiControlRegistr = api === null || api === void 0 ? void 0 : (_api$uiControlRegistr2 = api.uiControlRegistry) === null || _api$uiControlRegistr2 === void 0 ? void 0 : _api$uiControlRegistr2.actions.getComponents(LAYOUT_COLUMN_MENU.key)) !== null && _api$uiControlRegistr !== void 0 ? _api$uiControlRegistr : [];
|
|
120
|
-
const
|
|
120
|
+
const hasValidMenuSelection = !isExperimentEnabled('platform_editor_block_control_migration') || selection !== undefined && getLayoutColumnMenuAnchorPos(selection, layoutColumnMenuAnchorPos) !== undefined;
|
|
121
|
+
const legacyTarget = useMemo(() => isLayoutColumnMenuOpen && !isExperimentEnabled('platform_editor_block_control_migration') ? getLayoutColumnMenuTarget(editorView, selection, layoutColumnMenuAnchorPos) : null, [editorView, isLayoutColumnMenuOpen, layoutColumnMenuAnchorPos, selection]);
|
|
121
122
|
const surfaceTargetRef = useRef(null);
|
|
122
123
|
const surfaceAnchorPosRef = useRef(undefined);
|
|
123
|
-
if (!
|
|
124
|
+
if (!isExperimentEnabled('platform_editor_block_control_migration') || !isLayoutColumnMenuOpen) {
|
|
124
125
|
surfaceTargetRef.current = null;
|
|
125
126
|
surfaceAnchorPosRef.current = undefined;
|
|
126
127
|
} else if (!surfaceTargetRef.current || surfaceAnchorPosRef.current !== layoutColumnMenuAnchorPos) {
|
|
@@ -128,7 +129,7 @@ export const LayoutColumnMenu = /*#__PURE__*/React.memo(function LayoutColumnMen
|
|
|
128
129
|
surfaceTargetRef.current = (_surfaceDragHandleEle = surfaceDragHandleElementStore.get(editorView)) !== null && _surfaceDragHandleEle !== void 0 ? _surfaceDragHandleEle : surfaceTargetRef.current;
|
|
129
130
|
surfaceAnchorPosRef.current = layoutColumnMenuAnchorPos;
|
|
130
131
|
}
|
|
131
|
-
const target =
|
|
132
|
+
const target = isExperimentEnabled('platform_editor_block_control_migration') ? surfaceTargetRef.current : legacyTarget;
|
|
132
133
|
const hasValidTarget = target instanceof HTMLElement;
|
|
133
134
|
const positionLayoutColumnMenu = useCallback(position => {
|
|
134
135
|
var _menuWrapperRef$curre;
|
|
@@ -147,17 +148,17 @@ export const LayoutColumnMenu = /*#__PURE__*/React.memo(function LayoutColumnMen
|
|
|
147
148
|
return position;
|
|
148
149
|
}, [editorView, scrollableElement, target]);
|
|
149
150
|
useEffect(() => {
|
|
150
|
-
if (isLayoutColumnMenuOpen && (!hasValidTarget || components.length === 0)) {
|
|
151
|
+
if (isLayoutColumnMenuOpen && (!hasValidMenuSelection || !hasValidTarget || components.length === 0)) {
|
|
151
152
|
closeLayoutColumnMenu();
|
|
152
153
|
}
|
|
153
|
-
}, [closeLayoutColumnMenu, components.length, hasValidTarget, isLayoutColumnMenuOpen]);
|
|
154
|
+
}, [closeLayoutColumnMenu, components.length, hasValidMenuSelection, hasValidTarget, isLayoutColumnMenuOpen]);
|
|
154
155
|
const {
|
|
155
156
|
alignX,
|
|
156
157
|
alignY,
|
|
157
158
|
offset,
|
|
158
159
|
useManualBelowFlip
|
|
159
160
|
} = useMemo(() => getLayoutColumnMenuPositioningProps(), []);
|
|
160
|
-
if (!isLayoutColumnMenuOpen || components.length === 0 || !hasValidTarget) {
|
|
161
|
+
if (!isLayoutColumnMenuOpen || !hasValidMenuSelection || components.length === 0 || !hasValidTarget) {
|
|
161
162
|
return null;
|
|
162
163
|
}
|
|
163
164
|
return /*#__PURE__*/React.createElement(PopupWithListeners, {
|
|
@@ -2,10 +2,10 @@ import React, { useCallback } from 'react';
|
|
|
2
2
|
import { useIntl } from 'react-intl';
|
|
3
3
|
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit/editor-common/analytics';
|
|
4
4
|
import { QuickInsertMenuItem } from '@atlaskit/editor-common/quick-insert/menu-item';
|
|
5
|
-
import LayoutThreeColumnsIcon from '@atlaskit/icon/core/layout-three-columns';
|
|
6
|
-
import LayoutTwoColumnsIcon from '@atlaskit/icon/core/layout-two-columns';
|
|
7
5
|
import LayoutFiveColumnsIcon from '@atlaskit/icon-lab/core/layout-five-columns';
|
|
8
6
|
import LayoutFourColumnsIcon from '@atlaskit/icon-lab/core/layout-four-columns';
|
|
7
|
+
import LayoutThreeColumnsIcon from '@atlaskit/icon/core/layout-three-columns';
|
|
8
|
+
import LayoutTwoColumnsIcon from '@atlaskit/icon/core/layout-two-columns';
|
|
9
9
|
import { selectIntoLayoutSection } from '../../layoutPlugin';
|
|
10
10
|
import { createMultiColumnLayoutSection } from '../../pm-plugins/actions';
|
|
11
11
|
const icons = {
|
|
@@ -13,8 +13,8 @@ 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
15
|
import TableColumnsDistributeIcon from '@atlaskit/icon/core/table-columns-distribute';
|
|
16
|
-
import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
|
|
17
16
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/editor-experiment';
|
|
17
|
+
import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
|
|
18
18
|
import { deleteActiveLayoutNode, distributeLayoutColumns, getPresetLayout, setPresetLayout } from '../pm-plugins/actions';
|
|
19
19
|
import { isDistributedUniformly } from '../pm-plugins/utils/layout-column-distribution';
|
|
20
20
|
import { EditorLayoutFiveColumnsIcon, EditorLayoutFourColumnsIcon } from './icons/LayoutColumnsIcon';
|
package/dist/esm/layoutPlugin.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { layoutColumn, layoutColumnWithLocalId } from '@atlaskit/adf-schema/nodes/layout-column';
|
|
3
2
|
import { layoutSection, layoutSectionWithLocalId, layoutSectionWithSingleColumn, layoutSectionWithSingleColumnLocalId } from '@atlaskit/adf-schema/layout-section';
|
|
3
|
+
import { layoutColumn, layoutColumnWithLocalId } from '@atlaskit/adf-schema/nodes/layout-column';
|
|
4
4
|
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD } from '@atlaskit/editor-common/analytics';
|
|
5
5
|
import { TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM, TRANSFORM_STRUCTURE_MENU_SECTION, TRANSFORM_STRUCTURE_MENU_SECTION_RANK } from '@atlaskit/editor-common/block-menu';
|
|
6
6
|
import { layoutMessages, toolbarInsertBlockMessages as messages } from '@atlaskit/editor-common/messages';
|
|
@@ -9,8 +9,8 @@ import { TextSelection } from '@atlaskit/editor-prosemirror/state';
|
|
|
9
9
|
import { findParentNode } from '@atlaskit/editor-prosemirror/utils';
|
|
10
10
|
import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
|
|
11
11
|
import { fg } from '@atlaskit/platform-feature-flags/fg';
|
|
12
|
-
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
13
12
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/editor-experiment';
|
|
13
|
+
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
14
14
|
import { createDefaultLayoutSection, createMultiColumnLayoutSection, deleteLayoutColumn as _deleteLayoutColumn, distributeLayoutColumns as _distributeLayoutColumns, insertLayoutColumn as _insertLayoutColumn, insertLayoutColumnsWithAnalytics, setLayoutColumnDangerPreview, setLayoutColumnValign as _setLayoutColumnValign, toggleLayoutColumnMenu } from './pm-plugins/actions';
|
|
15
15
|
import { default as createLayoutKeymapPlugin } from './pm-plugins/keymap';
|
|
16
16
|
import { default as createLayoutPlugin } from './pm-plugins/main';
|
|
@@ -56,7 +56,6 @@ export var layoutPlugin = function layoutPlugin(_ref) {
|
|
|
56
56
|
var _ref$config = _ref.config,
|
|
57
57
|
options = _ref$config === void 0 ? {} : _ref$config,
|
|
58
58
|
api = _ref.api;
|
|
59
|
-
var blockControlMigrationEnabled = isExperimentEnabled('platform_editor_block_control_migration');
|
|
60
59
|
var isAdvancedLayoutEnabled = editorExperiment('advanced_layouts', true);
|
|
61
60
|
var allowAdvancedSingleColumnLayout = isAdvancedLayoutEnabled && editorExperiment('single_column_layouts', true, {
|
|
62
61
|
exposure: true
|
|
@@ -167,6 +166,34 @@ export var layoutPlugin = function layoutPlugin(_ref) {
|
|
|
167
166
|
return tr;
|
|
168
167
|
};
|
|
169
168
|
if (editorExperiment('advanced_layouts', true)) {
|
|
169
|
+
var createAdvancedColumnLayoutOption = function createAdvancedColumnLayoutOption(_ref4) {
|
|
170
|
+
var columnCount = _ref4.columnCount,
|
|
171
|
+
descriptionColumnCount = _ref4.descriptionColumnCount,
|
|
172
|
+
Icon = _ref4.icon,
|
|
173
|
+
id = _ref4.id,
|
|
174
|
+
keyword = _ref4.keyword,
|
|
175
|
+
title = _ref4.title;
|
|
176
|
+
return {
|
|
177
|
+
id: id,
|
|
178
|
+
title: title,
|
|
179
|
+
description: formatMessage(messages.columnsDescriptionAdvancedLayout, {
|
|
180
|
+
numberOfColumns: descriptionColumnCount
|
|
181
|
+
}),
|
|
182
|
+
keywords: ['layout', 'column', 'section', 'col', keyword],
|
|
183
|
+
priority: 1100,
|
|
184
|
+
icon: Icon,
|
|
185
|
+
action: function action(insert, state) {
|
|
186
|
+
var tr = insert(createMultiColumnLayoutSection(state, columnCount));
|
|
187
|
+
if (fg('platform_editor_column_count_analytics')) {
|
|
188
|
+
withInsertLayoutAnalytics(tr, columnCount);
|
|
189
|
+
} else {
|
|
190
|
+
withInsertLayoutAnalytics(tr);
|
|
191
|
+
}
|
|
192
|
+
selectIntoLayoutSection(tr);
|
|
193
|
+
return tr;
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
};
|
|
170
197
|
var advancedSingleColumnOption = allowAdvancedSingleColumnLayout ? [{
|
|
171
198
|
id: 'onecolumnlayout',
|
|
172
199
|
title: formatMessage(layoutMessages.singleColumnAdvancedLayout),
|
|
@@ -187,158 +214,43 @@ export var layoutPlugin = function layoutPlugin(_ref) {
|
|
|
187
214
|
return tr;
|
|
188
215
|
}
|
|
189
216
|
}] : [];
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
descriptionColumnCount = _ref4.descriptionColumnCount,
|
|
194
|
-
Icon = _ref4.icon,
|
|
195
|
-
id = _ref4.id,
|
|
196
|
-
keyword = _ref4.keyword,
|
|
197
|
-
title = _ref4.title;
|
|
198
|
-
return {
|
|
199
|
-
id: id,
|
|
200
|
-
title: title,
|
|
201
|
-
description: formatMessage(messages.columnsDescriptionAdvancedLayout, {
|
|
202
|
-
numberOfColumns: descriptionColumnCount
|
|
203
|
-
}),
|
|
204
|
-
keywords: ['layout', 'column', 'section', 'col', keyword],
|
|
205
|
-
priority: 1100,
|
|
206
|
-
icon: Icon,
|
|
207
|
-
action: function action(insert, state) {
|
|
208
|
-
var tr = insert(createMultiColumnLayoutSection(state, columnCount));
|
|
209
|
-
if (fg('platform_editor_column_count_analytics')) {
|
|
210
|
-
withInsertLayoutAnalytics(tr, columnCount);
|
|
211
|
-
} else {
|
|
212
|
-
withInsertLayoutAnalytics(tr);
|
|
213
|
-
}
|
|
214
|
-
selectIntoLayoutSection(tr);
|
|
215
|
-
return tr;
|
|
216
|
-
}
|
|
217
|
-
};
|
|
218
|
-
};
|
|
219
|
-
return [createAdvancedColumnLayoutOption({
|
|
220
|
-
columnCount: 2,
|
|
221
|
-
descriptionColumnCount: 'two',
|
|
222
|
-
icon: function icon() {
|
|
223
|
-
return /*#__PURE__*/React.createElement(IconTwoColumnLayout, null);
|
|
224
|
-
},
|
|
225
|
-
id: 'twocolumnslayout',
|
|
226
|
-
keyword: 'two column',
|
|
227
|
-
title: formatMessage(layoutMessages.twoColumnsAdvancedLayout)
|
|
228
|
-
})].concat(advancedSingleColumnOption, [createAdvancedColumnLayoutOption({
|
|
229
|
-
columnCount: 3,
|
|
230
|
-
descriptionColumnCount: 'three',
|
|
231
|
-
icon: function icon() {
|
|
232
|
-
return /*#__PURE__*/React.createElement(IconThreeColumnLayout, null);
|
|
233
|
-
},
|
|
234
|
-
id: 'threecolumnslayout',
|
|
235
|
-
keyword: 'three column',
|
|
236
|
-
title: formatMessage(layoutMessages.threeColumnsAdvancedLayout)
|
|
237
|
-
}), createAdvancedColumnLayoutOption({
|
|
238
|
-
columnCount: 4,
|
|
239
|
-
descriptionColumnCount: 'four',
|
|
240
|
-
icon: function icon() {
|
|
241
|
-
return /*#__PURE__*/React.createElement(IconFourColumnLayout, null);
|
|
242
|
-
},
|
|
243
|
-
id: 'fourcolumnslayout',
|
|
244
|
-
keyword: 'four column',
|
|
245
|
-
title: formatMessage(layoutMessages.fourColumns)
|
|
246
|
-
}), createAdvancedColumnLayoutOption({
|
|
247
|
-
columnCount: 5,
|
|
248
|
-
descriptionColumnCount: 'five',
|
|
249
|
-
icon: function icon() {
|
|
250
|
-
return /*#__PURE__*/React.createElement(IconFiveColumnLayout, null);
|
|
251
|
-
},
|
|
252
|
-
id: 'fivecolumnslayout',
|
|
253
|
-
keyword: 'five column',
|
|
254
|
-
title: formatMessage(layoutMessages.fiveColumns)
|
|
255
|
-
})]);
|
|
256
|
-
}
|
|
257
|
-
return [].concat(advancedSingleColumnOption, [{
|
|
258
|
-
id: 'twocolumnslayout',
|
|
259
|
-
title: formatMessage(layoutMessages.twoColumnsAdvancedLayout),
|
|
260
|
-
description: formatMessage(messages.columnsDescriptionAdvancedLayout, {
|
|
261
|
-
numberOfColumns: 'two'
|
|
262
|
-
}),
|
|
263
|
-
keywords: ['layout', 'column', 'section', 'col', 'two column'],
|
|
264
|
-
priority: 1100,
|
|
217
|
+
return [createAdvancedColumnLayoutOption({
|
|
218
|
+
columnCount: 2,
|
|
219
|
+
descriptionColumnCount: 'two',
|
|
265
220
|
icon: function icon() {
|
|
266
221
|
return /*#__PURE__*/React.createElement(IconTwoColumnLayout, null);
|
|
267
222
|
},
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
}
|
|
275
|
-
selectIntoLayoutSection(tr);
|
|
276
|
-
return tr;
|
|
277
|
-
}
|
|
278
|
-
}, {
|
|
279
|
-
id: 'threecolumnslayout',
|
|
280
|
-
title: formatMessage(layoutMessages.threeColumnsAdvancedLayout),
|
|
281
|
-
description: formatMessage(messages.columnsDescriptionAdvancedLayout, {
|
|
282
|
-
numberOfColumns: 'three'
|
|
283
|
-
}),
|
|
284
|
-
keywords: ['layout', 'column', 'section', 'col', 'three column'],
|
|
285
|
-
priority: 1100,
|
|
223
|
+
id: 'twocolumnslayout',
|
|
224
|
+
keyword: 'two column',
|
|
225
|
+
title: formatMessage(layoutMessages.twoColumnsAdvancedLayout)
|
|
226
|
+
})].concat(advancedSingleColumnOption, [createAdvancedColumnLayoutOption({
|
|
227
|
+
columnCount: 3,
|
|
228
|
+
descriptionColumnCount: 'three',
|
|
286
229
|
icon: function icon() {
|
|
287
230
|
return /*#__PURE__*/React.createElement(IconThreeColumnLayout, null);
|
|
288
231
|
},
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
}
|
|
296
|
-
selectIntoLayoutSection(tr);
|
|
297
|
-
return tr;
|
|
298
|
-
}
|
|
299
|
-
}, {
|
|
300
|
-
id: 'fourcolumnslayout',
|
|
301
|
-
title: formatMessage(layoutMessages.fourColumns),
|
|
302
|
-
description: formatMessage(messages.columnsDescriptionAdvancedLayout, {
|
|
303
|
-
numberOfColumns: 'four'
|
|
304
|
-
}),
|
|
305
|
-
keywords: ['layout', 'column', 'section', 'col', 'four column'],
|
|
306
|
-
priority: 1100,
|
|
232
|
+
id: 'threecolumnslayout',
|
|
233
|
+
keyword: 'three column',
|
|
234
|
+
title: formatMessage(layoutMessages.threeColumnsAdvancedLayout)
|
|
235
|
+
}), createAdvancedColumnLayoutOption({
|
|
236
|
+
columnCount: 4,
|
|
237
|
+
descriptionColumnCount: 'four',
|
|
307
238
|
icon: function icon() {
|
|
308
239
|
return /*#__PURE__*/React.createElement(IconFourColumnLayout, null);
|
|
309
240
|
},
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
}
|
|
317
|
-
selectIntoLayoutSection(tr);
|
|
318
|
-
return tr;
|
|
319
|
-
}
|
|
320
|
-
}, {
|
|
321
|
-
id: 'fivecolumnslayout',
|
|
322
|
-
title: formatMessage(layoutMessages.fiveColumns),
|
|
323
|
-
description: formatMessage(messages.columnsDescriptionAdvancedLayout, {
|
|
324
|
-
numberOfColumns: 'five'
|
|
325
|
-
}),
|
|
326
|
-
keywords: ['layout', 'column', 'section', 'col', 'five column'],
|
|
327
|
-
priority: 1100,
|
|
241
|
+
id: 'fourcolumnslayout',
|
|
242
|
+
keyword: 'four column',
|
|
243
|
+
title: formatMessage(layoutMessages.fourColumns)
|
|
244
|
+
}), createAdvancedColumnLayoutOption({
|
|
245
|
+
columnCount: 5,
|
|
246
|
+
descriptionColumnCount: 'five',
|
|
328
247
|
icon: function icon() {
|
|
329
248
|
return /*#__PURE__*/React.createElement(IconFiveColumnLayout, null);
|
|
330
249
|
},
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
} else {
|
|
336
|
-
withInsertLayoutAnalytics(tr);
|
|
337
|
-
}
|
|
338
|
-
selectIntoLayoutSection(tr);
|
|
339
|
-
return tr;
|
|
340
|
-
}
|
|
341
|
-
}]);
|
|
250
|
+
id: 'fivecolumnslayout',
|
|
251
|
+
keyword: 'five column',
|
|
252
|
+
title: formatMessage(layoutMessages.fiveColumns)
|
|
253
|
+
})]);
|
|
342
254
|
} else {
|
|
343
255
|
return [{
|
|
344
256
|
id: 'layout',
|
|
@@ -377,8 +289,7 @@ export var layoutPlugin = function layoutPlugin(_ref) {
|
|
|
377
289
|
editorView: editorView,
|
|
378
290
|
mountTo: popupsMountPoint,
|
|
379
291
|
boundariesElement: popupsBoundariesElement,
|
|
380
|
-
scrollableElement: popupsScrollableElement
|
|
381
|
-
useRegistryAnchor: blockControlMigrationEnabled
|
|
292
|
+
scrollableElement: popupsScrollableElement
|
|
382
293
|
}) : null);
|
|
383
294
|
},
|
|
384
295
|
getSharedState: function getSharedState(editorState) {
|