@atlaskit/editor-plugin-layout 16.0.0 → 16.0.1

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 CHANGED
@@ -1,5 +1,13 @@
1
1
  # @atlaskit/editor-plugin-layout
2
2
 
3
+ ## 16.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`4273da2e1a648`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/4273da2e1a648) -
8
+ Register native Quick Insert items behind `platform_editor_slash_command`.
9
+ - Updated dependencies
10
+
3
11
  ## 16.0.0
4
12
 
5
13
  ### Patch Changes
@@ -14,7 +14,8 @@ var _messages = require("@atlaskit/editor-common/messages");
14
14
  var _quickInsert = require("@atlaskit/editor-common/quick-insert");
15
15
  var _state = require("@atlaskit/editor-prosemirror/state");
16
16
  var _utils = require("@atlaskit/editor-prosemirror/utils");
17
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
17
+ var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
18
+ var _fg = require("@atlaskit/platform-feature-flags/fg");
18
19
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
19
20
  var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
20
21
  var _actions = require("./pm-plugins/actions");
@@ -26,6 +27,7 @@ var _globalStyles = require("./ui/global-styles");
26
27
  var _LayoutBlockMenuItem = require("./ui/LayoutBlockMenuItem");
27
28
  var _LayoutColumnMenu = require("./ui/LayoutColumnMenu");
28
29
  var _components = require("./ui/LayoutColumnMenu/components");
30
+ var _getLayoutQuickInsertComponents = require("./ui/quick-insert/getLayoutQuickInsertComponents");
29
31
  var _toolbar = require("./ui/toolbar");
30
32
  var LAYOUT_SECTION_NODE_NAME = 'layoutSection';
31
33
 
@@ -61,9 +63,11 @@ var layoutPlugin = exports.layoutPlugin = function layoutPlugin(_ref) {
61
63
  var _ref$config = _ref.config,
62
64
  options = _ref$config === void 0 ? {} : _ref$config,
63
65
  api = _ref.api;
64
- var allowAdvancedSingleColumnLayout = (0, _experiments.editorExperiment)('advanced_layouts', true) && (0, _experiments.editorExperiment)('single_column_layouts', true, {
66
+ var isAdvancedLayoutEnabled = (0, _experiments.editorExperiment)('advanced_layouts', true);
67
+ var allowAdvancedSingleColumnLayout = isAdvancedLayoutEnabled && (0, _experiments.editorExperiment)('single_column_layouts', true, {
65
68
  exposure: true
66
69
  });
70
+ var isRegisteredSlashCommandEnabled = (0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_slash_command') && isAdvancedLayoutEnabled;
67
71
  if ((0, _experiments.editorExperiment)('platform_editor_block_menu', true)) {
68
72
  var _api$blockMenu;
69
73
  api === null || api === void 0 || (_api$blockMenu = api.blockMenu) === null || _api$blockMenu === void 0 || _api$blockMenu.actions.registerBlockMenuComponents([{
@@ -87,15 +91,21 @@ var layoutPlugin = exports.layoutPlugin = function layoutPlugin(_ref) {
87
91
  api: api
88
92
  }));
89
93
  }
94
+ if (isRegisteredSlashCommandEnabled) {
95
+ var _api$uiControlRegistr2;
96
+ api === null || api === void 0 || (_api$uiControlRegistr2 = api.uiControlRegistry) === null || _api$uiControlRegistr2 === void 0 || _api$uiControlRegistr2.actions.register((0, _getLayoutQuickInsertComponents.getLayoutQuickInsertComponents)({
97
+ api: api
98
+ }));
99
+ }
90
100
  return {
91
101
  name: 'layout',
92
102
  nodes: function nodes() {
93
103
  return [{
94
104
  name: 'layoutSection',
95
- node: (0, _experiments.editorExperiment)('advanced_layouts', true) ? (0, _platformFeatureFlags.fg)('platform_editor_adf_with_localid') ? _schema.layoutSectionWithSingleColumnLocalId : _schema.layoutSectionWithSingleColumn : (0, _platformFeatureFlags.fg)('platform_editor_adf_with_localid') ? _adfSchema.layoutSectionWithLocalId : _adfSchema.layoutSection
105
+ node: (0, _experiments.editorExperiment)('advanced_layouts', true) ? (0, _fg.fg)('platform_editor_adf_with_localid') ? _schema.layoutSectionWithSingleColumnLocalId : _schema.layoutSectionWithSingleColumn : (0, _fg.fg)('platform_editor_adf_with_localid') ? _adfSchema.layoutSectionWithLocalId : _adfSchema.layoutSection
96
106
  }, {
97
107
  name: 'layoutColumn',
98
- node: (0, _platformFeatureFlags.fg)('platform_editor_adf_with_localid') ? _adfSchema.layoutColumnWithLocalId : _adfSchema.layoutColumn
108
+ node: (0, _fg.fg)('platform_editor_adf_with_localid') ? _adfSchema.layoutColumnWithLocalId : _adfSchema.layoutColumn
99
109
  }];
100
110
  },
101
111
  pmPlugins: function pmPlugins() {
@@ -149,7 +159,7 @@ var layoutPlugin = exports.layoutPlugin = function layoutPlugin(_ref) {
149
159
  }
150
160
  return undefined;
151
161
  },
152
- quickInsert: function quickInsert(_ref3) {
162
+ quickInsert: isRegisteredSlashCommandEnabled ? undefined : function (_ref3) {
153
163
  var formatMessage = _ref3.formatMessage;
154
164
  var withInsertLayoutAnalytics = function withInsertLayoutAnalytics(tr, columnCount) {
155
165
  var _api$analytics3;
@@ -177,7 +187,7 @@ var layoutPlugin = exports.layoutPlugin = function layoutPlugin(_ref) {
177
187
  },
178
188
  action: function action(insert, state) {
179
189
  var tr = insert((0, _actions.createMultiColumnLayoutSection)(state, 1));
180
- if ((0, _platformFeatureFlags.fg)('platform_editor_column_count_analytics')) {
190
+ if ((0, _fg.fg)('platform_editor_column_count_analytics')) {
181
191
  withInsertLayoutAnalytics(tr, 1);
182
192
  } else {
183
193
  withInsertLayoutAnalytics(tr);
@@ -205,7 +215,7 @@ var layoutPlugin = exports.layoutPlugin = function layoutPlugin(_ref) {
205
215
  icon: Icon,
206
216
  action: function action(insert, state) {
207
217
  var tr = insert((0, _actions.createMultiColumnLayoutSection)(state, columnCount));
208
- if ((0, _platformFeatureFlags.fg)('platform_editor_column_count_analytics')) {
218
+ if ((0, _fg.fg)('platform_editor_column_count_analytics')) {
209
219
  withInsertLayoutAnalytics(tr, columnCount);
210
220
  } else {
211
221
  withInsertLayoutAnalytics(tr);
@@ -266,7 +276,7 @@ var layoutPlugin = exports.layoutPlugin = function layoutPlugin(_ref) {
266
276
  },
267
277
  action: function action(insert, state) {
268
278
  var tr = insert((0, _actions.createMultiColumnLayoutSection)(state, 2));
269
- if ((0, _platformFeatureFlags.fg)('platform_editor_column_count_analytics')) {
279
+ if ((0, _fg.fg)('platform_editor_column_count_analytics')) {
270
280
  withInsertLayoutAnalytics(tr, 2);
271
281
  } else {
272
282
  withInsertLayoutAnalytics(tr);
@@ -287,7 +297,7 @@ var layoutPlugin = exports.layoutPlugin = function layoutPlugin(_ref) {
287
297
  },
288
298
  action: function action(insert, state) {
289
299
  var tr = insert((0, _actions.createMultiColumnLayoutSection)(state, 3));
290
- if ((0, _platformFeatureFlags.fg)('platform_editor_column_count_analytics')) {
300
+ if ((0, _fg.fg)('platform_editor_column_count_analytics')) {
291
301
  withInsertLayoutAnalytics(tr, 3);
292
302
  } else {
293
303
  withInsertLayoutAnalytics(tr);
@@ -308,7 +318,7 @@ var layoutPlugin = exports.layoutPlugin = function layoutPlugin(_ref) {
308
318
  },
309
319
  action: function action(insert, state) {
310
320
  var tr = insert((0, _actions.createMultiColumnLayoutSection)(state, 4));
311
- if ((0, _platformFeatureFlags.fg)('platform_editor_column_count_analytics')) {
321
+ if ((0, _fg.fg)('platform_editor_column_count_analytics')) {
312
322
  withInsertLayoutAnalytics(tr, 4);
313
323
  } else {
314
324
  withInsertLayoutAnalytics(tr);
@@ -329,7 +339,7 @@ var layoutPlugin = exports.layoutPlugin = function layoutPlugin(_ref) {
329
339
  },
330
340
  action: function action(insert, state) {
331
341
  var tr = insert((0, _actions.createMultiColumnLayoutSection)(state, 5));
332
- if ((0, _platformFeatureFlags.fg)('platform_editor_column_count_analytics')) {
342
+ if ((0, _fg.fg)('platform_editor_column_count_analytics')) {
333
343
  withInsertLayoutAnalytics(tr, 5);
334
344
  } else {
335
345
  withInsertLayoutAnalytics(tr);
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.LayoutQuickInsertMenuItem = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _reactIntl = require("react-intl");
10
+ var _analytics = require("@atlaskit/editor-common/analytics");
11
+ var _assets = require("@atlaskit/editor-common/assets");
12
+ var _menuItem = require("@atlaskit/editor-common/quick-insert/menu-item");
13
+ var _layoutPlugin = require("../../layoutPlugin");
14
+ var _actions = require("../../pm-plugins/actions");
15
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
16
+ var icons = {
17
+ 2: _assets.IconTwoColumnLayout,
18
+ 3: _assets.IconThreeColumnLayout,
19
+ 4: _assets.IconFourColumnLayout,
20
+ 5: _assets.IconFiveColumnLayout
21
+ };
22
+ var LayoutQuickInsertMenuItem = exports.LayoutQuickInsertMenuItem = function LayoutQuickInsertMenuItem(_ref) {
23
+ var api = _ref.api,
24
+ columnCount = _ref.columnCount,
25
+ title = _ref.title;
26
+ var _useIntl = (0, _reactIntl.useIntl)(),
27
+ formatMessage = _useIntl.formatMessage;
28
+ var Icon = icons[columnCount];
29
+ var onSelect = (0, _react.useCallback)(function (_ref2) {
30
+ var _api$analytics;
31
+ var editorView = _ref2.editorView,
32
+ insert = _ref2.insert,
33
+ source = _ref2.source;
34
+ var tr = insert((0, _actions.createMultiColumnLayoutSection)(editorView.state, columnCount));
35
+ api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || _api$analytics.actions.attachAnalyticsEvent({
36
+ action: _analytics.ACTION.INSERTED,
37
+ actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT,
38
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.LAYOUT,
39
+ attributes: {
40
+ columnCount: columnCount,
41
+ inputMethod: source
42
+ },
43
+ eventType: _analytics.EVENT_TYPE.TRACK
44
+ })(tr);
45
+ (0, _layoutPlugin.selectIntoLayoutSection)(tr);
46
+ return tr;
47
+ }, [api, columnCount]);
48
+ return /*#__PURE__*/_react.default.createElement(_menuItem.QuickInsertMenuItem, {
49
+ iconBefore: /*#__PURE__*/_react.default.createElement(Icon, null),
50
+ onSelect: onSelect,
51
+ title: formatMessage(title)
52
+ });
53
+ };
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getLayoutQuickInsertComponents = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _messages = require("@atlaskit/editor-common/messages");
10
+ var _createQuickInsertMatcher = require("@atlaskit/editor-common/quick-insert/create-quick-insert-matcher");
11
+ var _keys = require("@atlaskit/editor-common/quick-insert/keys");
12
+ var _rank = require("@atlaskit/editor-common/quick-insert/rank");
13
+ var _LayoutQuickInsertMenuItem = require("./LayoutQuickInsertMenuItem");
14
+ var layoutItems = [{
15
+ columnCount: 2,
16
+ description: _messages.toolbarInsertBlockMessages.columnsDescriptionAdvancedLayout,
17
+ item: _keys.TWO_COLUMNS_LAYOUT_MENU_ITEM,
18
+ keyword: 'two column',
19
+ title: _messages.layoutMessages.twoColumnsAdvancedLayout
20
+ }, {
21
+ columnCount: 3,
22
+ description: _messages.toolbarInsertBlockMessages.columnsDescriptionAdvancedLayout,
23
+ item: _keys.THREE_COLUMNS_LAYOUT_MENU_ITEM,
24
+ keyword: 'three column',
25
+ title: _messages.layoutMessages.threeColumnsAdvancedLayout
26
+ }, {
27
+ columnCount: 4,
28
+ description: _messages.toolbarInsertBlockMessages.columnsDescriptionAdvancedLayout,
29
+ item: _keys.FOUR_COLUMNS_LAYOUT_MENU_ITEM,
30
+ keyword: 'four column',
31
+ title: _messages.layoutMessages.fourColumns
32
+ }, {
33
+ columnCount: 5,
34
+ description: _messages.toolbarInsertBlockMessages.columnsDescriptionAdvancedLayout,
35
+ item: _keys.FIVE_COLUMNS_LAYOUT_MENU_ITEM,
36
+ keyword: 'five column',
37
+ title: _messages.layoutMessages.fiveColumns
38
+ }];
39
+ var getLayoutQuickInsertComponents = exports.getLayoutQuickInsertComponents = function getLayoutQuickInsertComponents(_ref) {
40
+ var api = _ref.api;
41
+ return layoutItems.map(function (_ref2) {
42
+ var columnCount = _ref2.columnCount,
43
+ description = _ref2.description,
44
+ item = _ref2.item,
45
+ keyword = _ref2.keyword,
46
+ title = _ref2.title;
47
+ return {
48
+ key: item.key,
49
+ type: item.type,
50
+ parents: [{
51
+ key: _keys.STRUCTURE_SECTION.key,
52
+ type: _keys.STRUCTURE_SECTION.type,
53
+ rank: _rank.STRUCTURE_SECTION_RANK[item.key]
54
+ }],
55
+ match: (0, _createQuickInsertMatcher.createQuickInsertMatcher)(function (_ref3) {
56
+ var formatMessage = _ref3.formatMessage;
57
+ return {
58
+ description: formatMessage(description, {
59
+ numberOfColumns: ['one', 'two', 'three', 'four', 'five'][columnCount - 1]
60
+ }),
61
+ keywords: ['layout', 'column', 'section', 'col', keyword],
62
+ title: formatMessage(title)
63
+ };
64
+ }),
65
+ component: function component() {
66
+ return /*#__PURE__*/_react.default.createElement(_LayoutQuickInsertMenuItem.LayoutQuickInsertMenuItem, {
67
+ api: api,
68
+ columnCount: columnCount,
69
+ title: title
70
+ });
71
+ }
72
+ };
73
+ });
74
+ };
@@ -7,7 +7,8 @@ import { layoutMessages, toolbarInsertBlockMessages as messages } from '@atlaski
7
7
  import { IconFiveColumnLayout, IconFourColumnLayout, IconLayout, IconOneColumnLayout, IconThreeColumnLayout, IconTwoColumnLayout } from '@atlaskit/editor-common/quick-insert';
8
8
  import { TextSelection } from '@atlaskit/editor-prosemirror/state';
9
9
  import { findParentNode } from '@atlaskit/editor-prosemirror/utils';
10
- import { fg } from '@atlaskit/platform-feature-flags';
10
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
11
+ import { fg } from '@atlaskit/platform-feature-flags/fg';
11
12
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
12
13
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
13
14
  import { createDefaultLayoutSection, createMultiColumnLayoutSection, deleteLayoutColumn, distributeLayoutColumns, insertLayoutColumn, insertLayoutColumnsWithAnalytics, setLayoutColumnDangerPreview, setLayoutColumnValign, toggleLayoutColumnMenu } from './pm-plugins/actions';
@@ -19,6 +20,7 @@ import { GlobalStylesWrapper } from './ui/global-styles';
19
20
  import { createLayoutBlockMenuItem } from './ui/LayoutBlockMenuItem';
20
21
  import { LayoutColumnMenu } from './ui/LayoutColumnMenu';
21
22
  import { getLayoutColumnMenuComponents } from './ui/LayoutColumnMenu/components';
23
+ import { getLayoutQuickInsertComponents } from './ui/quick-insert/getLayoutQuickInsertComponents';
22
24
  import { buildToolbar } from './ui/toolbar';
23
25
  const LAYOUT_SECTION_NODE_NAME = 'layoutSection';
24
26
 
@@ -53,9 +55,11 @@ export const layoutPlugin = ({
53
55
  api
54
56
  }) => {
55
57
  var _api$analytics2;
56
- const allowAdvancedSingleColumnLayout = editorExperiment('advanced_layouts', true) && editorExperiment('single_column_layouts', true, {
58
+ const isAdvancedLayoutEnabled = editorExperiment('advanced_layouts', true);
59
+ const allowAdvancedSingleColumnLayout = isAdvancedLayoutEnabled && editorExperiment('single_column_layouts', true, {
57
60
  exposure: true
58
61
  });
62
+ const isRegisteredSlashCommandEnabled = isExperimentEnabled('platform_editor_slash_command') && isAdvancedLayoutEnabled;
59
63
  if (editorExperiment('platform_editor_block_menu', true)) {
60
64
  var _api$blockMenu;
61
65
  api === null || api === void 0 ? void 0 : (_api$blockMenu = api.blockMenu) === null || _api$blockMenu === void 0 ? void 0 : _api$blockMenu.actions.registerBlockMenuComponents([{
@@ -79,6 +83,12 @@ export const layoutPlugin = ({
79
83
  api
80
84
  }));
81
85
  }
86
+ if (isRegisteredSlashCommandEnabled) {
87
+ var _api$uiControlRegistr2;
88
+ api === null || api === void 0 ? void 0 : (_api$uiControlRegistr2 = api.uiControlRegistry) === null || _api$uiControlRegistr2 === void 0 ? void 0 : _api$uiControlRegistr2.actions.register(getLayoutQuickInsertComponents({
89
+ api
90
+ }));
91
+ }
82
92
  return {
83
93
  name: 'layout',
84
94
  nodes() {
@@ -140,7 +150,7 @@ export const layoutPlugin = ({
140
150
  }
141
151
  return undefined;
142
152
  },
143
- quickInsert: ({
153
+ quickInsert: isRegisteredSlashCommandEnabled ? undefined : ({
144
154
  formatMessage
145
155
  }) => {
146
156
  const withInsertLayoutAnalytics = (tr, columnCount) => {
@@ -0,0 +1,48 @@
1
+ import React, { useCallback } from 'react';
2
+ import { useIntl } from 'react-intl';
3
+ import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit/editor-common/analytics';
4
+ import { IconFiveColumnLayout, IconFourColumnLayout, IconThreeColumnLayout, IconTwoColumnLayout } from '@atlaskit/editor-common/assets';
5
+ import { QuickInsertMenuItem } from '@atlaskit/editor-common/quick-insert/menu-item';
6
+ import { selectIntoLayoutSection } from '../../layoutPlugin';
7
+ import { createMultiColumnLayoutSection } from '../../pm-plugins/actions';
8
+ const icons = {
9
+ 2: IconTwoColumnLayout,
10
+ 3: IconThreeColumnLayout,
11
+ 4: IconFourColumnLayout,
12
+ 5: IconFiveColumnLayout
13
+ };
14
+ export const LayoutQuickInsertMenuItem = ({
15
+ api,
16
+ columnCount,
17
+ title
18
+ }) => {
19
+ const {
20
+ formatMessage
21
+ } = useIntl();
22
+ const Icon = icons[columnCount];
23
+ const onSelect = useCallback(({
24
+ editorView,
25
+ insert,
26
+ source
27
+ }) => {
28
+ var _api$analytics;
29
+ const tr = insert(createMultiColumnLayoutSection(editorView.state, columnCount));
30
+ api === null || api === void 0 ? void 0 : (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions.attachAnalyticsEvent({
31
+ action: ACTION.INSERTED,
32
+ actionSubject: ACTION_SUBJECT.DOCUMENT,
33
+ actionSubjectId: ACTION_SUBJECT_ID.LAYOUT,
34
+ attributes: {
35
+ columnCount,
36
+ inputMethod: source
37
+ },
38
+ eventType: EVENT_TYPE.TRACK
39
+ })(tr);
40
+ selectIntoLayoutSection(tr);
41
+ return tr;
42
+ }, [api, columnCount]);
43
+ return /*#__PURE__*/React.createElement(QuickInsertMenuItem, {
44
+ iconBefore: /*#__PURE__*/React.createElement(Icon, null),
45
+ onSelect: onSelect,
46
+ title: formatMessage(title)
47
+ });
48
+ };
@@ -0,0 +1,62 @@
1
+ import React from 'react';
2
+ import { layoutMessages, toolbarInsertBlockMessages as messages } from '@atlaskit/editor-common/messages';
3
+ import { createQuickInsertMatcher } from '@atlaskit/editor-common/quick-insert/create-quick-insert-matcher';
4
+ import { FIVE_COLUMNS_LAYOUT_MENU_ITEM, FOUR_COLUMNS_LAYOUT_MENU_ITEM, STRUCTURE_SECTION, THREE_COLUMNS_LAYOUT_MENU_ITEM, TWO_COLUMNS_LAYOUT_MENU_ITEM } from '@atlaskit/editor-common/quick-insert/keys';
5
+ import { STRUCTURE_SECTION_RANK } from '@atlaskit/editor-common/quick-insert/rank';
6
+ import { LayoutQuickInsertMenuItem } from './LayoutQuickInsertMenuItem';
7
+ const layoutItems = [{
8
+ columnCount: 2,
9
+ description: messages.columnsDescriptionAdvancedLayout,
10
+ item: TWO_COLUMNS_LAYOUT_MENU_ITEM,
11
+ keyword: 'two column',
12
+ title: layoutMessages.twoColumnsAdvancedLayout
13
+ }, {
14
+ columnCount: 3,
15
+ description: messages.columnsDescriptionAdvancedLayout,
16
+ item: THREE_COLUMNS_LAYOUT_MENU_ITEM,
17
+ keyword: 'three column',
18
+ title: layoutMessages.threeColumnsAdvancedLayout
19
+ }, {
20
+ columnCount: 4,
21
+ description: messages.columnsDescriptionAdvancedLayout,
22
+ item: FOUR_COLUMNS_LAYOUT_MENU_ITEM,
23
+ keyword: 'four column',
24
+ title: layoutMessages.fourColumns
25
+ }, {
26
+ columnCount: 5,
27
+ description: messages.columnsDescriptionAdvancedLayout,
28
+ item: FIVE_COLUMNS_LAYOUT_MENU_ITEM,
29
+ keyword: 'five column',
30
+ title: layoutMessages.fiveColumns
31
+ }];
32
+ export const getLayoutQuickInsertComponents = ({
33
+ api
34
+ }) => layoutItems.map(({
35
+ columnCount,
36
+ description,
37
+ item,
38
+ keyword,
39
+ title
40
+ }) => ({
41
+ key: item.key,
42
+ type: item.type,
43
+ parents: [{
44
+ key: STRUCTURE_SECTION.key,
45
+ type: STRUCTURE_SECTION.type,
46
+ rank: STRUCTURE_SECTION_RANK[item.key]
47
+ }],
48
+ match: createQuickInsertMatcher(({
49
+ formatMessage
50
+ }) => ({
51
+ description: formatMessage(description, {
52
+ numberOfColumns: ['one', 'two', 'three', 'four', 'five'][columnCount - 1]
53
+ }),
54
+ keywords: ['layout', 'column', 'section', 'col', keyword],
55
+ title: formatMessage(title)
56
+ })),
57
+ component: () => /*#__PURE__*/React.createElement(LayoutQuickInsertMenuItem, {
58
+ api: api,
59
+ columnCount: columnCount,
60
+ title: title
61
+ })
62
+ }));
@@ -7,7 +7,8 @@ import { layoutMessages, toolbarInsertBlockMessages as messages } from '@atlaski
7
7
  import { IconFiveColumnLayout, IconFourColumnLayout, IconLayout, IconOneColumnLayout, IconThreeColumnLayout, IconTwoColumnLayout } from '@atlaskit/editor-common/quick-insert';
8
8
  import { TextSelection } from '@atlaskit/editor-prosemirror/state';
9
9
  import { findParentNode } from '@atlaskit/editor-prosemirror/utils';
10
- import { fg } from '@atlaskit/platform-feature-flags';
10
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
11
+ import { fg } from '@atlaskit/platform-feature-flags/fg';
11
12
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
12
13
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
13
14
  import { createDefaultLayoutSection, createMultiColumnLayoutSection, deleteLayoutColumn as _deleteLayoutColumn, distributeLayoutColumns as _distributeLayoutColumns, insertLayoutColumn as _insertLayoutColumn, insertLayoutColumnsWithAnalytics, setLayoutColumnDangerPreview, setLayoutColumnValign as _setLayoutColumnValign, toggleLayoutColumnMenu } from './pm-plugins/actions';
@@ -19,6 +20,7 @@ import { GlobalStylesWrapper } from './ui/global-styles';
19
20
  import { createLayoutBlockMenuItem } from './ui/LayoutBlockMenuItem';
20
21
  import { LayoutColumnMenu } from './ui/LayoutColumnMenu';
21
22
  import { getLayoutColumnMenuComponents } from './ui/LayoutColumnMenu/components';
23
+ import { getLayoutQuickInsertComponents } from './ui/quick-insert/getLayoutQuickInsertComponents';
22
24
  import { buildToolbar } from './ui/toolbar';
23
25
  var LAYOUT_SECTION_NODE_NAME = 'layoutSection';
24
26
 
@@ -54,9 +56,11 @@ export var layoutPlugin = function layoutPlugin(_ref) {
54
56
  var _ref$config = _ref.config,
55
57
  options = _ref$config === void 0 ? {} : _ref$config,
56
58
  api = _ref.api;
57
- var allowAdvancedSingleColumnLayout = editorExperiment('advanced_layouts', true) && editorExperiment('single_column_layouts', true, {
59
+ var isAdvancedLayoutEnabled = editorExperiment('advanced_layouts', true);
60
+ var allowAdvancedSingleColumnLayout = isAdvancedLayoutEnabled && editorExperiment('single_column_layouts', true, {
58
61
  exposure: true
59
62
  });
63
+ var isRegisteredSlashCommandEnabled = isExperimentEnabled('platform_editor_slash_command') && isAdvancedLayoutEnabled;
60
64
  if (editorExperiment('platform_editor_block_menu', true)) {
61
65
  var _api$blockMenu;
62
66
  api === null || api === void 0 || (_api$blockMenu = api.blockMenu) === null || _api$blockMenu === void 0 || _api$blockMenu.actions.registerBlockMenuComponents([{
@@ -80,6 +84,12 @@ export var layoutPlugin = function layoutPlugin(_ref) {
80
84
  api: api
81
85
  }));
82
86
  }
87
+ if (isRegisteredSlashCommandEnabled) {
88
+ var _api$uiControlRegistr2;
89
+ api === null || api === void 0 || (_api$uiControlRegistr2 = api.uiControlRegistry) === null || _api$uiControlRegistr2 === void 0 || _api$uiControlRegistr2.actions.register(getLayoutQuickInsertComponents({
90
+ api: api
91
+ }));
92
+ }
83
93
  return {
84
94
  name: 'layout',
85
95
  nodes: function nodes() {
@@ -142,7 +152,7 @@ export var layoutPlugin = function layoutPlugin(_ref) {
142
152
  }
143
153
  return undefined;
144
154
  },
145
- quickInsert: function quickInsert(_ref3) {
155
+ quickInsert: isRegisteredSlashCommandEnabled ? undefined : function (_ref3) {
146
156
  var formatMessage = _ref3.formatMessage;
147
157
  var withInsertLayoutAnalytics = function withInsertLayoutAnalytics(tr, columnCount) {
148
158
  var _api$analytics3;
@@ -0,0 +1,45 @@
1
+ import React, { useCallback } from 'react';
2
+ import { useIntl } from 'react-intl';
3
+ import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit/editor-common/analytics';
4
+ import { IconFiveColumnLayout, IconFourColumnLayout, IconThreeColumnLayout, IconTwoColumnLayout } from '@atlaskit/editor-common/assets';
5
+ import { QuickInsertMenuItem } from '@atlaskit/editor-common/quick-insert/menu-item';
6
+ import { selectIntoLayoutSection } from '../../layoutPlugin';
7
+ import { createMultiColumnLayoutSection } from '../../pm-plugins/actions';
8
+ var icons = {
9
+ 2: IconTwoColumnLayout,
10
+ 3: IconThreeColumnLayout,
11
+ 4: IconFourColumnLayout,
12
+ 5: IconFiveColumnLayout
13
+ };
14
+ export var LayoutQuickInsertMenuItem = function LayoutQuickInsertMenuItem(_ref) {
15
+ var api = _ref.api,
16
+ columnCount = _ref.columnCount,
17
+ title = _ref.title;
18
+ var _useIntl = useIntl(),
19
+ formatMessage = _useIntl.formatMessage;
20
+ var Icon = icons[columnCount];
21
+ var onSelect = useCallback(function (_ref2) {
22
+ var _api$analytics;
23
+ var editorView = _ref2.editorView,
24
+ insert = _ref2.insert,
25
+ source = _ref2.source;
26
+ var tr = insert(createMultiColumnLayoutSection(editorView.state, columnCount));
27
+ api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || _api$analytics.actions.attachAnalyticsEvent({
28
+ action: ACTION.INSERTED,
29
+ actionSubject: ACTION_SUBJECT.DOCUMENT,
30
+ actionSubjectId: ACTION_SUBJECT_ID.LAYOUT,
31
+ attributes: {
32
+ columnCount: columnCount,
33
+ inputMethod: source
34
+ },
35
+ eventType: EVENT_TYPE.TRACK
36
+ })(tr);
37
+ selectIntoLayoutSection(tr);
38
+ return tr;
39
+ }, [api, columnCount]);
40
+ return /*#__PURE__*/React.createElement(QuickInsertMenuItem, {
41
+ iconBefore: /*#__PURE__*/React.createElement(Icon, null),
42
+ onSelect: onSelect,
43
+ title: formatMessage(title)
44
+ });
45
+ };
@@ -0,0 +1,67 @@
1
+ import React from 'react';
2
+ import { layoutMessages, toolbarInsertBlockMessages as messages } from '@atlaskit/editor-common/messages';
3
+ import { createQuickInsertMatcher } from '@atlaskit/editor-common/quick-insert/create-quick-insert-matcher';
4
+ import { FIVE_COLUMNS_LAYOUT_MENU_ITEM, FOUR_COLUMNS_LAYOUT_MENU_ITEM, STRUCTURE_SECTION, THREE_COLUMNS_LAYOUT_MENU_ITEM, TWO_COLUMNS_LAYOUT_MENU_ITEM } from '@atlaskit/editor-common/quick-insert/keys';
5
+ import { STRUCTURE_SECTION_RANK } from '@atlaskit/editor-common/quick-insert/rank';
6
+ import { LayoutQuickInsertMenuItem } from './LayoutQuickInsertMenuItem';
7
+ var layoutItems = [{
8
+ columnCount: 2,
9
+ description: messages.columnsDescriptionAdvancedLayout,
10
+ item: TWO_COLUMNS_LAYOUT_MENU_ITEM,
11
+ keyword: 'two column',
12
+ title: layoutMessages.twoColumnsAdvancedLayout
13
+ }, {
14
+ columnCount: 3,
15
+ description: messages.columnsDescriptionAdvancedLayout,
16
+ item: THREE_COLUMNS_LAYOUT_MENU_ITEM,
17
+ keyword: 'three column',
18
+ title: layoutMessages.threeColumnsAdvancedLayout
19
+ }, {
20
+ columnCount: 4,
21
+ description: messages.columnsDescriptionAdvancedLayout,
22
+ item: FOUR_COLUMNS_LAYOUT_MENU_ITEM,
23
+ keyword: 'four column',
24
+ title: layoutMessages.fourColumns
25
+ }, {
26
+ columnCount: 5,
27
+ description: messages.columnsDescriptionAdvancedLayout,
28
+ item: FIVE_COLUMNS_LAYOUT_MENU_ITEM,
29
+ keyword: 'five column',
30
+ title: layoutMessages.fiveColumns
31
+ }];
32
+ export var getLayoutQuickInsertComponents = function getLayoutQuickInsertComponents(_ref) {
33
+ var api = _ref.api;
34
+ return layoutItems.map(function (_ref2) {
35
+ var columnCount = _ref2.columnCount,
36
+ description = _ref2.description,
37
+ item = _ref2.item,
38
+ keyword = _ref2.keyword,
39
+ title = _ref2.title;
40
+ return {
41
+ key: item.key,
42
+ type: item.type,
43
+ parents: [{
44
+ key: STRUCTURE_SECTION.key,
45
+ type: STRUCTURE_SECTION.type,
46
+ rank: STRUCTURE_SECTION_RANK[item.key]
47
+ }],
48
+ match: createQuickInsertMatcher(function (_ref3) {
49
+ var formatMessage = _ref3.formatMessage;
50
+ return {
51
+ description: formatMessage(description, {
52
+ numberOfColumns: ['one', 'two', 'three', 'four', 'five'][columnCount - 1]
53
+ }),
54
+ keywords: ['layout', 'column', 'section', 'col', keyword],
55
+ title: formatMessage(title)
56
+ };
57
+ }),
58
+ component: function component() {
59
+ return /*#__PURE__*/React.createElement(LayoutQuickInsertMenuItem, {
60
+ api: api,
61
+ columnCount: columnCount,
62
+ title: title
63
+ });
64
+ }
65
+ };
66
+ });
67
+ };
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import type { MessageDescriptor } from 'react-intl';
3
+ import type { ExtractInjectionAPI } from '@atlaskit/editor-common/types';
4
+ import type { LayoutPlugin } from '../../layoutPluginType';
5
+ type Props = {
6
+ api: ExtractInjectionAPI<LayoutPlugin> | undefined;
7
+ columnCount: 2 | 3 | 4 | 5;
8
+ title: MessageDescriptor;
9
+ };
10
+ export declare const LayoutQuickInsertMenuItem: ({ api, columnCount, title, }: Props) => React.JSX.Element;
11
+ export {};
@@ -0,0 +1,8 @@
1
+ import type { ExtractInjectionAPI } from '@atlaskit/editor-common/types';
2
+ import type { RegisterMenuItem } from '@atlaskit/editor-ui-control-model/types';
3
+ import type { LayoutPlugin } from '../../layoutPluginType';
4
+ type Params = {
5
+ api: ExtractInjectionAPI<LayoutPlugin> | undefined;
6
+ };
7
+ export declare const getLayoutQuickInsertComponents: ({ api }: Params) => RegisterMenuItem[];
8
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-layout",
3
- "version": "16.0.0",
3
+ "version": "16.0.1",
4
4
  "description": "Layout plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -41,6 +41,7 @@
41
41
  "@atlaskit/editor-ui-control-model": "^2.6.0",
42
42
  "@atlaskit/icon": "^37.3.0",
43
43
  "@atlaskit/icon-lab": "^7.5.0",
44
+ "@atlaskit/platform-feature-experiments": "^0.3.0",
44
45
  "@atlaskit/platform-feature-flags": "^2.1.0",
45
46
  "@atlaskit/tmp-editor-statsig": "^147.1.0",
46
47
  "@atlaskit/tokens": "^16.7.0",
@@ -49,7 +50,7 @@
49
50
  "bind-event-listener": "^3.0.0"
50
51
  },
51
52
  "peerDependencies": {
52
- "@atlaskit/editor-common": "^119.0.0",
53
+ "@atlaskit/editor-common": "^119.1.0",
53
54
  "react": "^18.2.0 || ^19.2.0",
54
55
  "react-intl": "^5.25.1 || ^6.0.0 || ^7.0.0"
55
56
  },