@atlaskit/editor-plugin-block-menu 5.2.10 → 5.2.12
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 +14 -0
- package/dist/cjs/editor-commands/transform-node-utils/transform.js +2 -2
- package/dist/cjs/editor-commands/transform-node-utils/utils.js +24 -4
- package/dist/cjs/editor-commands/transform-node-utils/wrapStep.js +20 -1
- package/dist/cjs/ui/block-menu-components.js +30 -20
- package/dist/cjs/ui/block-menu-renderer/BlockMenuComponent.js +37 -0
- package/dist/cjs/ui/block-menu-renderer/BlockMenuComponents.js +29 -0
- package/dist/cjs/ui/block-menu-renderer/BlockMenuRenderer.js +33 -0
- package/dist/cjs/ui/block-menu-renderer/fallbacks.js +32 -0
- package/dist/cjs/ui/block-menu-renderer/types.js +5 -0
- package/dist/cjs/ui/block-menu-renderer/utils.js +127 -0
- package/dist/cjs/ui/block-menu.js +7 -20
- package/dist/cjs/ui/hooks/useSuggestedItems.js +57 -0
- package/dist/cjs/ui/suggested-items-menu-section.js +21 -0
- package/dist/cjs/ui/suggested-menu-items.js +19 -0
- package/dist/cjs/ui/utils/suggested-items-rank.js +1 -1
- package/dist/es2019/editor-commands/transform-node-utils/transform.js +2 -2
- package/dist/es2019/editor-commands/transform-node-utils/utils.js +23 -3
- package/dist/es2019/editor-commands/transform-node-utils/wrapStep.js +21 -1
- package/dist/es2019/ui/block-menu-components.js +12 -4
- package/dist/es2019/ui/block-menu-renderer/BlockMenuComponent.js +31 -0
- package/dist/es2019/ui/block-menu-renderer/BlockMenuComponents.js +21 -0
- package/dist/es2019/ui/block-menu-renderer/BlockMenuRenderer.js +24 -0
- package/dist/es2019/ui/block-menu-renderer/fallbacks.js +21 -0
- package/dist/es2019/ui/block-menu-renderer/types.js +1 -0
- package/dist/es2019/ui/block-menu-renderer/utils.js +93 -0
- package/dist/es2019/ui/block-menu.js +6 -13
- package/dist/es2019/ui/hooks/useSuggestedItems.js +45 -0
- package/dist/es2019/ui/suggested-items-menu-section.js +15 -0
- package/dist/es2019/ui/suggested-menu-items.js +13 -0
- package/dist/es2019/ui/utils/suggested-items-rank.js +31 -43
- package/dist/esm/editor-commands/transform-node-utils/transform.js +2 -2
- package/dist/esm/editor-commands/transform-node-utils/utils.js +23 -3
- package/dist/esm/editor-commands/transform-node-utils/wrapStep.js +21 -1
- package/dist/esm/ui/block-menu-components.js +30 -20
- package/dist/esm/ui/block-menu-renderer/BlockMenuComponent.js +30 -0
- package/dist/esm/ui/block-menu-renderer/BlockMenuComponents.js +22 -0
- package/dist/esm/ui/block-menu-renderer/BlockMenuRenderer.js +25 -0
- package/dist/esm/ui/block-menu-renderer/fallbacks.js +25 -0
- package/dist/esm/ui/block-menu-renderer/types.js +1 -0
- package/dist/esm/ui/block-menu-renderer/utils.js +121 -0
- package/dist/esm/ui/block-menu.js +6 -19
- package/dist/esm/ui/hooks/useSuggestedItems.js +51 -0
- package/dist/esm/ui/suggested-items-menu-section.js +14 -0
- package/dist/esm/ui/suggested-menu-items.js +12 -0
- package/dist/esm/ui/utils/suggested-items-rank.js +2 -2
- package/dist/types/blockMenuPluginType.d.ts +3 -2
- package/dist/types/editor-commands/transform-node-utils/utils.d.ts +11 -0
- package/dist/types/editor-commands/transform-node-utils/wrapStep.d.ts +5 -0
- package/dist/types/ui/block-menu-renderer/BlockMenuComponent.d.ts +11 -0
- package/dist/types/ui/block-menu-renderer/BlockMenuComponents.d.ts +12 -0
- package/dist/types/ui/block-menu-renderer/BlockMenuRenderer.d.ts +12 -0
- package/dist/types/ui/block-menu-renderer/fallbacks.d.ts +2 -0
- package/dist/types/ui/block-menu-renderer/types.d.ts +27 -0
- package/dist/types/ui/block-menu-renderer/utils.d.ts +37 -0
- package/dist/types/ui/hooks/useSuggestedItems.d.ts +3 -0
- package/dist/types/ui/suggested-items-menu-section.d.ts +9 -0
- package/dist/types/ui/{suggested-items-renderer.d.ts → suggested-menu-items.d.ts} +2 -2
- package/dist/types-ts4.5/blockMenuPluginType.d.ts +3 -2
- package/dist/types-ts4.5/editor-commands/transform-node-utils/utils.d.ts +11 -0
- package/dist/types-ts4.5/editor-commands/transform-node-utils/wrapStep.d.ts +5 -0
- package/dist/types-ts4.5/ui/block-menu-renderer/BlockMenuComponent.d.ts +11 -0
- package/dist/types-ts4.5/ui/block-menu-renderer/BlockMenuComponents.d.ts +12 -0
- package/dist/types-ts4.5/ui/block-menu-renderer/BlockMenuRenderer.d.ts +12 -0
- package/dist/types-ts4.5/ui/block-menu-renderer/fallbacks.d.ts +2 -0
- package/dist/types-ts4.5/ui/block-menu-renderer/types.d.ts +27 -0
- package/dist/types-ts4.5/ui/block-menu-renderer/utils.d.ts +37 -0
- package/dist/types-ts4.5/ui/hooks/useSuggestedItems.d.ts +3 -0
- package/dist/types-ts4.5/ui/suggested-items-menu-section.d.ts +9 -0
- package/dist/types-ts4.5/ui/{suggested-items-renderer.d.ts → suggested-menu-items.d.ts} +2 -2
- package/package.json +3 -3
- package/dist/cjs/ui/block-menu-renderer.js +0 -104
- package/dist/cjs/ui/suggested-items-renderer.js +0 -62
- package/dist/es2019/ui/block-menu-renderer.js +0 -83
- package/dist/es2019/ui/suggested-items-renderer.js +0 -48
- package/dist/esm/ui/block-menu-renderer.js +0 -95
- package/dist/esm/ui/suggested-items-renderer.js +0 -54
- package/dist/types/ui/block-menu-renderer.d.ts +0 -18
- package/dist/types-ts4.5/ui/block-menu-renderer.d.ts +0 -18
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.SuggestedMenuItems = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _useSuggestedItems = require("./hooks/useSuggestedItems");
|
|
10
|
+
var SuggestedMenuItems = exports.SuggestedMenuItems = /*#__PURE__*/_react.default.memo(function (_ref) {
|
|
11
|
+
var api = _ref.api;
|
|
12
|
+
var suggestedItems = (0, _useSuggestedItems.useSuggestedItems)(api);
|
|
13
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, suggestedItems.map(function (item) {
|
|
14
|
+
var ItemComponent = item.component;
|
|
15
|
+
return ItemComponent ? /*#__PURE__*/_react.default.createElement(ItemComponent, {
|
|
16
|
+
key: item.key
|
|
17
|
+
}) : null;
|
|
18
|
+
}));
|
|
19
|
+
});
|
|
@@ -43,7 +43,7 @@ var BLOCK_MENU_NODE_TYPES = exports.BLOCK_MENU_NODE_TYPES = {
|
|
|
43
43
|
EMBED_CARD: 'embedCard',
|
|
44
44
|
TABLE: 'table'
|
|
45
45
|
};
|
|
46
|
-
var TRANSFORM_SUGGESTED_ITEMS_RANK = exports.TRANSFORM_SUGGESTED_ITEMS_RANK = (_TRANSFORM_SUGGESTED_ = {}, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)(_TRANSFORM_SUGGESTED_, BLOCK_MENU_NODE_TYPES.PARAGRAPH, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _blockMenu.TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 100), _blockMenu.
|
|
46
|
+
var TRANSFORM_SUGGESTED_ITEMS_RANK = exports.TRANSFORM_SUGGESTED_ITEMS_RANK = (_TRANSFORM_SUGGESTED_ = {}, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)(_TRANSFORM_SUGGESTED_, BLOCK_MENU_NODE_TYPES.PARAGRAPH, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _blockMenu.TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 100), _blockMenu.TRANSFORM_HEADINGS_H1_MENU_ITEM.key, 200), _blockMenu.TRANSFORM_HEADINGS_H2_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.EXPAND, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _blockMenu.TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key, 100), _blockMenu.TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 200), _blockMenu.TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.BLOCKQUOTE, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _blockMenu.TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key, 100), _blockMenu.TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key, 200), _blockMenu.TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.LAYOUT_SECTION, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _blockMenu.TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 100), _blockMenu.TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key, 200), _blockMenu.TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.PANEL, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _blockMenu.TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key, 100), _blockMenu.TRANSFORM_STRUCTURE_CODE_BLOCK_MENU_ITEM.key, 200), _blockMenu.TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.CODE_BLOCK, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _blockMenu.TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key, 100), _blockMenu.TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 200), _blockMenu.TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.DECISION, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _blockMenu.TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 100), _blockMenu.TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key, 200), _blockMenu.TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.BULLET_LIST, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _blockMenu.TRANSFORM_STRUCTURE_NUMBERED_LIST_MENU_ITEM.key, 100), _blockMenu.TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key, 200), _blockMenu.TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.ORDERED_LIST, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _blockMenu.TRANSFORM_STRUCTURE_TASK_LIST_MENU_ITEM.key, 100), _blockMenu.TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM.key, 200), _blockMenu.TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.HEADING, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _blockMenu.TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key, 100), _blockMenu.TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM.key, 200), _blockMenu.TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key, 300)), (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)(_TRANSFORM_SUGGESTED_, BLOCK_MENU_NODE_TYPES.TASK_LIST, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _blockMenu.TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 100), _blockMenu.TRANSFORM_STRUCTURE_NUMBERED_LIST_MENU_ITEM.key, 200), _blockMenu.TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.MEDIA_SINGLE, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _blockMenu.TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 100), _blockMenu.TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key, 200), _blockMenu.TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.EXTENSION, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _blockMenu.TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key, 100), _blockMenu.TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 200), _blockMenu.TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.BODIED_EXTENSION, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _blockMenu.TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key, 100), _blockMenu.TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 200), _blockMenu.TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key, 300)));
|
|
47
47
|
var getSuggestedItemsForNodeType = exports.getSuggestedItemsForNodeType = function getSuggestedItemsForNodeType(nodeType) {
|
|
48
48
|
return TRANSFORM_SUGGESTED_ITEMS_RANK[nodeType];
|
|
49
49
|
};
|
|
@@ -84,9 +84,9 @@ const TRANSFORM_STEPS_OVERRIDE = {
|
|
|
84
84
|
decisionList: [unwrapStep, wrapBlockquoteToDecisionListStep]
|
|
85
85
|
},
|
|
86
86
|
layoutSection: {
|
|
87
|
-
blockquote: [unwrapLayoutStep,
|
|
87
|
+
blockquote: [unwrapLayoutStep, wrapMixedContentStep],
|
|
88
88
|
expand: [unwrapLayoutStep, wrapStep],
|
|
89
|
-
panel: [unwrapLayoutStep,
|
|
89
|
+
panel: [unwrapLayoutStep, wrapMixedContentStep],
|
|
90
90
|
codeBlock: [unwrapLayoutStep, flattenStep, wrapStep],
|
|
91
91
|
paragraph: [unwrapLayoutStep]
|
|
92
92
|
},
|
|
@@ -64,7 +64,7 @@ export const expandSelectionToBlockRange = (selection, schema) => {
|
|
|
64
64
|
const {
|
|
65
65
|
nodes
|
|
66
66
|
} = schema;
|
|
67
|
-
const nodesNeedToExpandRange = [nodes.listItem, nodes.taskItem];
|
|
67
|
+
const nodesNeedToExpandRange = [nodes.bulletList, nodes.orderedList, nodes.taskList, nodes.listItem, nodes.taskItem];
|
|
68
68
|
|
|
69
69
|
// when adding nodes.tableRow, tableHeader, tableCell in nodesNeedToExpandRang,
|
|
70
70
|
// expandToBlockRange does not return expected table start position, sometimes even freeze editor
|
|
@@ -73,10 +73,11 @@ export const expandSelectionToBlockRange = (selection, schema) => {
|
|
|
73
73
|
const table = findTable(selection);
|
|
74
74
|
if (table) {
|
|
75
75
|
const $from = selection.$from.doc.resolve(table.pos);
|
|
76
|
-
const $to = selection.$from.doc.resolve(table.pos + table.node.nodeSize);
|
|
76
|
+
const $to = selection.$from.doc.resolve(table.pos + table.node.nodeSize - 1);
|
|
77
77
|
return {
|
|
78
78
|
$from,
|
|
79
|
-
$to
|
|
79
|
+
$to,
|
|
80
|
+
range: $from.blockRange($to)
|
|
80
81
|
};
|
|
81
82
|
}
|
|
82
83
|
}
|
|
@@ -123,7 +124,26 @@ export const convertNestedExpandToExpand = (node, schema) => {
|
|
|
123
124
|
title: ((_node$attrs = node.attrs) === null || _node$attrs === void 0 ? void 0 : _node$attrs.title) || ''
|
|
124
125
|
}, node.content);
|
|
125
126
|
};
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Converts an expand to a nestedExpand node.
|
|
130
|
+
* When placing an expand inside another expand, it must become a nestedExpand
|
|
131
|
+
* since expand cannot be a direct child of expand.
|
|
132
|
+
*/
|
|
133
|
+
export const convertExpandToNestedExpand = (node, schema) => {
|
|
134
|
+
var _node$attrs2;
|
|
135
|
+
const nestedExpandType = schema.nodes.nestedExpand;
|
|
136
|
+
if (!nestedExpandType) {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
return nestedExpandType.createAndFill({
|
|
140
|
+
title: ((_node$attrs2 = node.attrs) === null || _node$attrs2 === void 0 ? void 0 : _node$attrs2.title) || ''
|
|
141
|
+
}, node.content);
|
|
142
|
+
};
|
|
126
143
|
export const getBlockNodesInRange = range => {
|
|
144
|
+
if (range.startIndex === range.endIndex) {
|
|
145
|
+
return [];
|
|
146
|
+
}
|
|
127
147
|
if (range.endIndex - range.startIndex <= 1) {
|
|
128
148
|
return [range.parent.child(range.startIndex)];
|
|
129
149
|
}
|
|
@@ -1,9 +1,29 @@
|
|
|
1
|
+
import { convertExpandToNestedExpand } from './utils';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Wraps nodes into the target container type.
|
|
5
|
+
* When wrapping into expand, any expand children are converted to nestedExpand
|
|
6
|
+
* since expand cannot be a direct child of expand.
|
|
7
|
+
*/
|
|
1
8
|
export const wrapStep = (nodes, context) => {
|
|
2
9
|
const {
|
|
3
10
|
schema,
|
|
4
11
|
targetNodeTypeName
|
|
5
12
|
} = context;
|
|
6
|
-
|
|
13
|
+
|
|
14
|
+
// When wrapping into expand, convert any expand children to nestedExpand
|
|
15
|
+
// since expand cannot be a direct child of expand
|
|
16
|
+
let processedNodes = nodes;
|
|
17
|
+
if (targetNodeTypeName === 'expand') {
|
|
18
|
+
processedNodes = nodes.map(node => {
|
|
19
|
+
if (node.type.name === 'expand') {
|
|
20
|
+
const nestedExpandNode = convertExpandToNestedExpand(node, schema);
|
|
21
|
+
return nestedExpandNode !== null && nestedExpandNode !== void 0 ? nestedExpandNode : node;
|
|
22
|
+
}
|
|
23
|
+
return node;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
const outputNode = schema.nodes[targetNodeTypeName].createAndFill({}, processedNodes);
|
|
7
27
|
if (outputNode) {
|
|
8
28
|
return [outputNode];
|
|
9
29
|
}
|
|
@@ -9,7 +9,8 @@ import { FormatMenuComponent } from './format-menu-nested';
|
|
|
9
9
|
import { FormatMenuSection } from './format-menu-section';
|
|
10
10
|
import { MoveDownDropdownItem } from './move-down';
|
|
11
11
|
import { MoveUpDropdownItem } from './move-up';
|
|
12
|
-
import {
|
|
12
|
+
import { SuggestedItemsMenuSection } from './suggested-items-menu-section';
|
|
13
|
+
import { SuggestedMenuItems } from './suggested-menu-items';
|
|
13
14
|
const getMoveUpMoveDownMenuComponents = api => {
|
|
14
15
|
return [{
|
|
15
16
|
type: 'block-menu-item',
|
|
@@ -61,9 +62,13 @@ const getTurnIntoMenuComponents = api => {
|
|
|
61
62
|
key: TRANSFORM_MENU_ITEM.key,
|
|
62
63
|
rank: TRANSFORM_MENU_ITEM_RANK[TRANSFORM_SUGGESTED_MENU_SECTION.key]
|
|
63
64
|
},
|
|
64
|
-
component: (
|
|
65
|
+
component: ({
|
|
66
|
+
children
|
|
67
|
+
} = {
|
|
68
|
+
children: null
|
|
69
|
+
}) => /*#__PURE__*/React.createElement(SuggestedItemsMenuSection, {
|
|
65
70
|
api: api
|
|
66
|
-
})
|
|
71
|
+
}, children)
|
|
67
72
|
}, {
|
|
68
73
|
type: 'block-menu-item',
|
|
69
74
|
key: TRANSFORM_SUGGESTED_MENU_ITEM.key,
|
|
@@ -71,7 +76,10 @@ const getTurnIntoMenuComponents = api => {
|
|
|
71
76
|
type: 'block-menu-section',
|
|
72
77
|
key: TRANSFORM_SUGGESTED_MENU_SECTION.key,
|
|
73
78
|
rank: TRANSFORM_SUGGESTED_MENU_SECTION_RANK[TRANSFORM_SUGGESTED_MENU_ITEM.key]
|
|
74
|
-
}
|
|
79
|
+
},
|
|
80
|
+
component: () => /*#__PURE__*/React.createElement(SuggestedMenuItems, {
|
|
81
|
+
api: api
|
|
82
|
+
})
|
|
75
83
|
}, {
|
|
76
84
|
type: 'block-menu-section',
|
|
77
85
|
key: TRANSFORM_CREATE_MENU_SECTION.key,
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { BlockMenuComponents } from './BlockMenuComponents';
|
|
3
|
+
import { getChildrenMapKey, willComponentRender } from './utils';
|
|
4
|
+
/**
|
|
5
|
+
* Renders the given registered component based on its type
|
|
6
|
+
*/
|
|
7
|
+
export const BlockMenuComponent = ({
|
|
8
|
+
registeredComponent,
|
|
9
|
+
childrenMap,
|
|
10
|
+
fallbacks
|
|
11
|
+
}) => {
|
|
12
|
+
if (registeredComponent.type === 'block-menu-item') {
|
|
13
|
+
const ItemComponent = registeredComponent.component || fallbacks['block-menu-item'];
|
|
14
|
+
return /*#__PURE__*/React.createElement(ItemComponent, {
|
|
15
|
+
key: registeredComponent.key
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
if (!willComponentRender(registeredComponent, childrenMap)) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
const ParentComponent = registeredComponent.component || fallbacks[registeredComponent.type];
|
|
22
|
+
const childrenMapKey = getChildrenMapKey(registeredComponent.key, registeredComponent.type);
|
|
23
|
+
const registeredComponents = childrenMap.get(childrenMapKey);
|
|
24
|
+
return /*#__PURE__*/React.createElement(ParentComponent, {
|
|
25
|
+
key: registeredComponent.key
|
|
26
|
+
}, /*#__PURE__*/React.createElement(BlockMenuComponents, {
|
|
27
|
+
registeredComponents: registeredComponents,
|
|
28
|
+
childrenMap: childrenMap,
|
|
29
|
+
fallbacks: fallbacks
|
|
30
|
+
}));
|
|
31
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { BlockMenuComponent } from './BlockMenuComponent';
|
|
3
|
+
/**
|
|
4
|
+
* Renders the given registered components
|
|
5
|
+
* Returns null if no components are rendered
|
|
6
|
+
*/
|
|
7
|
+
export const BlockMenuComponents = ({
|
|
8
|
+
registeredComponents,
|
|
9
|
+
childrenMap,
|
|
10
|
+
fallbacks
|
|
11
|
+
}) => {
|
|
12
|
+
if (!(registeredComponents !== null && registeredComponents !== void 0 && registeredComponents.length)) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, registeredComponents.map(registeredComponent => /*#__PURE__*/React.createElement(BlockMenuComponent, {
|
|
16
|
+
key: registeredComponent.key,
|
|
17
|
+
registeredComponent: registeredComponent,
|
|
18
|
+
childrenMap: childrenMap,
|
|
19
|
+
fallbacks: fallbacks
|
|
20
|
+
})));
|
|
21
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React, { useMemo } from 'react';
|
|
2
|
+
import { BlockMenuComponents } from './BlockMenuComponents';
|
|
3
|
+
import { BLOCK_MENU_FALLBACKS } from './fallbacks';
|
|
4
|
+
import { buildChildrenMap, getSortedTopLevelSections } from './utils';
|
|
5
|
+
/**
|
|
6
|
+
* BlockMenuRenderer orchestrates the rendering of the entire block menu hierarchy
|
|
7
|
+
*/
|
|
8
|
+
export const BlockMenuRenderer = ({
|
|
9
|
+
allRegisteredComponents,
|
|
10
|
+
fallbacks = BLOCK_MENU_FALLBACKS
|
|
11
|
+
}) => {
|
|
12
|
+
const {
|
|
13
|
+
childrenMap,
|
|
14
|
+
topLevelSections
|
|
15
|
+
} = useMemo(() => ({
|
|
16
|
+
childrenMap: buildChildrenMap(allRegisteredComponents),
|
|
17
|
+
topLevelSections: getSortedTopLevelSections(allRegisteredComponents)
|
|
18
|
+
}), [allRegisteredComponents]);
|
|
19
|
+
return /*#__PURE__*/React.createElement(BlockMenuComponents, {
|
|
20
|
+
registeredComponents: topLevelSections,
|
|
21
|
+
childrenMap: childrenMap,
|
|
22
|
+
fallbacks: fallbacks
|
|
23
|
+
});
|
|
24
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ToolbarDropdownItem, ToolbarDropdownItemSection, ToolbarNestedDropdownMenu } from '@atlaskit/editor-toolbar';
|
|
3
|
+
import ChevronRightIcon from '@atlaskit/icon/core/chevron-right';
|
|
4
|
+
export const BLOCK_MENU_FALLBACKS = {
|
|
5
|
+
'block-menu-nested': ({
|
|
6
|
+
children
|
|
7
|
+
}) => /*#__PURE__*/React.createElement(ToolbarNestedDropdownMenu, {
|
|
8
|
+
elemBefore: undefined,
|
|
9
|
+
elemAfter: /*#__PURE__*/React.createElement(ChevronRightIcon, {
|
|
10
|
+
label: ""
|
|
11
|
+
}),
|
|
12
|
+
text: "Nested Menu",
|
|
13
|
+
enableMaxHeight: true,
|
|
14
|
+
shouldFitContainer: true
|
|
15
|
+
}, children),
|
|
16
|
+
'block-menu-section': ({
|
|
17
|
+
children
|
|
18
|
+
}) => /*#__PURE__*/React.createElement(ToolbarDropdownItemSection, null, children),
|
|
19
|
+
// eslint-disable-next-line @atlassian/i18n/no-literal-string-in-jsx
|
|
20
|
+
'block-menu-item': () => /*#__PURE__*/React.createElement(ToolbarDropdownItem, null, "Block Menu Item")
|
|
21
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type guard to check if a component has a parent
|
|
3
|
+
*
|
|
4
|
+
* @param component The block menu component to check
|
|
5
|
+
* @returns True if the component has a parent, false otherwise
|
|
6
|
+
*/
|
|
7
|
+
const hasParent = component => {
|
|
8
|
+
return 'parent' in component && !!component.parent;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Type guard to identify top-level sections (sections without a parent)
|
|
13
|
+
*
|
|
14
|
+
* @param component The block menu component to check
|
|
15
|
+
* @returns True if the component is a top-level section, false otherwise
|
|
16
|
+
*/
|
|
17
|
+
const isTopLevelSection = component => {
|
|
18
|
+
return component.type === 'block-menu-section' && !hasParent(component);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Gets all top-level sections (those without a parent) sorted by rank
|
|
23
|
+
*
|
|
24
|
+
* @param components All registered block menu components
|
|
25
|
+
* @returns Sorted array of top-level sections
|
|
26
|
+
*/
|
|
27
|
+
export const getSortedTopLevelSections = components => {
|
|
28
|
+
return components.filter(isTopLevelSection).sort((a, b) => (a.rank || 0) - (b.rank || 0));
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Generates a unique key from a key and type
|
|
33
|
+
* Used to lookup children in the childrenMap
|
|
34
|
+
*
|
|
35
|
+
* @param key The component's key
|
|
36
|
+
* @param type The component's type
|
|
37
|
+
* @returns A unique string key combining type and key
|
|
38
|
+
*/
|
|
39
|
+
export const getChildrenMapKey = (key, type) => {
|
|
40
|
+
return `${type}:${key}`;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Builds a map of parent keys to their sorted children
|
|
45
|
+
* This enables efficient hierarchical rendering of the menu structure
|
|
46
|
+
*
|
|
47
|
+
* @param components All registered block menu components
|
|
48
|
+
* @returns Map where keys are parent identifiers and values are sorted child components
|
|
49
|
+
*/
|
|
50
|
+
export const buildChildrenMap = components => {
|
|
51
|
+
const childrenMap = new Map();
|
|
52
|
+
for (const component of components) {
|
|
53
|
+
// Only components with parents can be children
|
|
54
|
+
if ('parent' in component && !!component.parent) {
|
|
55
|
+
const childrenMapKey = getChildrenMapKey(component.parent.key, component.parent.type);
|
|
56
|
+
const existing = childrenMap.get(childrenMapKey) || [];
|
|
57
|
+
existing.push(component);
|
|
58
|
+
childrenMap.set(childrenMapKey, existing);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Sort children by their rank within their parent
|
|
63
|
+
for (const [, children] of childrenMap.entries()) {
|
|
64
|
+
children.sort((a, b) => {
|
|
65
|
+
const rankA = hasParent(a) ? a.parent.rank || 0 : 0;
|
|
66
|
+
const rankB = hasParent(b) ? b.parent.rank || 0 : 0;
|
|
67
|
+
return rankA - rankB;
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return childrenMap;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Determines whether a component will render based on its type and children
|
|
75
|
+
*
|
|
76
|
+
* Rules:
|
|
77
|
+
* - An item will not render if has a component that returns null
|
|
78
|
+
* - A nested menu will render if it has at least one registered child component
|
|
79
|
+
* - A section will render if it has at least one registered child component that will render
|
|
80
|
+
*
|
|
81
|
+
* NOTE: This requires invoking each item's component function to check for null return
|
|
82
|
+
*/
|
|
83
|
+
export const willComponentRender = (registeredComponent, childrenMap) => {
|
|
84
|
+
if (registeredComponent.type === 'block-menu-item') {
|
|
85
|
+
return registeredComponent.component ? registeredComponent.component() !== null : true;
|
|
86
|
+
}
|
|
87
|
+
const childrenMapKey = getChildrenMapKey(registeredComponent.key, registeredComponent.type);
|
|
88
|
+
const registeredComponents = childrenMap.get(childrenMapKey) || [];
|
|
89
|
+
if (registeredComponent.type === 'block-menu-nested') {
|
|
90
|
+
return registeredComponents.length > 0;
|
|
91
|
+
}
|
|
92
|
+
return registeredComponents.some(childComponent => willComponentRender(childComponent, childrenMap));
|
|
93
|
+
};
|
|
@@ -10,15 +10,15 @@ import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/hooks'
|
|
|
10
10
|
import { deleteSelectedRange } from '@atlaskit/editor-common/selection';
|
|
11
11
|
import { DRAG_HANDLE_SELECTOR, DRAG_HANDLE_WIDTH } from '@atlaskit/editor-common/styles';
|
|
12
12
|
import { Popup } from '@atlaskit/editor-common/ui';
|
|
13
|
+
import { ArrowKeyNavigationProvider, ArrowKeyNavigationType } from '@atlaskit/editor-common/ui-menu';
|
|
13
14
|
import { OutsideClickTargetRefContext, withReactEditorViewOuterListeners } from '@atlaskit/editor-common/ui-react';
|
|
14
15
|
import { akEditorFloatingOverlapPanelZIndex } from '@atlaskit/editor-shared-styles';
|
|
15
|
-
import { ToolbarDropdownItem, ToolbarDropdownItemSection, ToolbarNestedDropdownMenu } from '@atlaskit/editor-toolbar';
|
|
16
16
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
17
17
|
import { conditionalHooksFactory } from '@atlaskit/platform-feature-flags-react';
|
|
18
18
|
import { Box } from '@atlaskit/primitives/compiled';
|
|
19
19
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
|
|
20
20
|
import { useBlockMenu } from './block-menu-provider';
|
|
21
|
-
import { BlockMenuRenderer } from './block-menu-renderer';
|
|
21
|
+
import { BlockMenuRenderer } from './block-menu-renderer/BlockMenuRenderer';
|
|
22
22
|
const styles = {
|
|
23
23
|
base: "_2rko12b0 _bfhk1bhr _16qs130s",
|
|
24
24
|
emptyMenuSectionStyles: "_1cc0glyw _1k2yglyw"
|
|
@@ -111,18 +111,11 @@ const BlockMenuContent = ({
|
|
|
111
111
|
testId: "editor-block-menu",
|
|
112
112
|
ref: ref,
|
|
113
113
|
xcss: cx(styles.base, editorExperiment('platform_synced_block', true) && styles.emptyMenuSectionStyles)
|
|
114
|
+
}, /*#__PURE__*/React.createElement(ArrowKeyNavigationProvider, {
|
|
115
|
+
type: ArrowKeyNavigationType.MENU
|
|
114
116
|
}, /*#__PURE__*/React.createElement(BlockMenuRenderer, {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
nestedMenu: () => /*#__PURE__*/React.createElement(ToolbarNestedDropdownMenu, {
|
|
118
|
-
elemBefore: undefined,
|
|
119
|
-
elemAfter: undefined
|
|
120
|
-
}, /*#__PURE__*/React.createElement(ToolbarDropdownItemSection, null, /*#__PURE__*/React.createElement(ToolbarDropdownItem, null, "Block Menu Item"))),
|
|
121
|
-
section: () => /*#__PURE__*/React.createElement(ToolbarDropdownItemSection, null, /*#__PURE__*/React.createElement(ToolbarDropdownItem, null, "Block Menu Item")),
|
|
122
|
-
// eslint-disable-next-line @atlassian/i18n/no-literal-string-in-jsx
|
|
123
|
-
item: () => /*#__PURE__*/React.createElement(ToolbarDropdownItem, null, "Block Menu Item")
|
|
124
|
-
}
|
|
125
|
-
}));
|
|
117
|
+
allRegisteredComponents: blockMenuComponents || []
|
|
118
|
+
})));
|
|
126
119
|
};
|
|
127
120
|
const BlockMenu = ({
|
|
128
121
|
editorView,
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/hooks';
|
|
3
|
+
import { getBlockNodesInRange, expandSelectionToBlockRange } from '../../editor-commands/transform-node-utils/utils';
|
|
4
|
+
import { getSortedSuggestedItems } from '../utils/suggested-items-rank';
|
|
5
|
+
export const useSuggestedItems = api => {
|
|
6
|
+
var _api$blockMenu;
|
|
7
|
+
const {
|
|
8
|
+
preservedSelection,
|
|
9
|
+
selection
|
|
10
|
+
} = useSharedPluginStateWithSelector(api, ['blockControls', 'selection'], states => {
|
|
11
|
+
var _states$blockControls, _states$selectionStat;
|
|
12
|
+
return {
|
|
13
|
+
preservedSelection: (_states$blockControls = states.blockControlsState) === null || _states$blockControls === void 0 ? void 0 : _states$blockControls.preservedSelection,
|
|
14
|
+
selection: (_states$selectionStat = states.selectionState) === null || _states$selectionStat === void 0 ? void 0 : _states$selectionStat.selection
|
|
15
|
+
};
|
|
16
|
+
});
|
|
17
|
+
const blockMenuComponents = api === null || api === void 0 ? void 0 : (_api$blockMenu = api.blockMenu) === null || _api$blockMenu === void 0 ? void 0 : _api$blockMenu.actions.getBlockMenuComponents();
|
|
18
|
+
const menuItemsMap = useMemo(() => {
|
|
19
|
+
if (!blockMenuComponents) {
|
|
20
|
+
return new Map();
|
|
21
|
+
}
|
|
22
|
+
return new Map(blockMenuComponents.filter(c => c.type === 'block-menu-item').map(item => [item.key, item]));
|
|
23
|
+
}, [blockMenuComponents]);
|
|
24
|
+
const suggestedItems = useMemo(() => {
|
|
25
|
+
const currentSelection = preservedSelection || selection;
|
|
26
|
+
if (menuItemsMap.size === 0 || !currentSelection) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
const {
|
|
30
|
+
range
|
|
31
|
+
} = expandSelectionToBlockRange(currentSelection, currentSelection.$from.doc.type.schema);
|
|
32
|
+
if (!range) {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
const blockNodes = getBlockNodesInRange(range);
|
|
36
|
+
const singleNode = blockNodes.length === 1 ? blockNodes[0] : undefined;
|
|
37
|
+
if (!singleNode) {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
const nodeTypeName = singleNode.type.name;
|
|
41
|
+
const sortedKeys = getSortedSuggestedItems(nodeTypeName);
|
|
42
|
+
return sortedKeys.map(key => menuItemsMap.get(key)).filter(item => item !== undefined);
|
|
43
|
+
}, [menuItemsMap, preservedSelection, selection]);
|
|
44
|
+
return suggestedItems;
|
|
45
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ToolbarDropdownItemSection } from '@atlaskit/editor-toolbar';
|
|
3
|
+
import { useSuggestedItems } from './hooks/useSuggestedItems';
|
|
4
|
+
export const SuggestedItemsMenuSection = /*#__PURE__*/React.memo(({
|
|
5
|
+
api,
|
|
6
|
+
children
|
|
7
|
+
}) => {
|
|
8
|
+
const suggestedItems = useSuggestedItems(api);
|
|
9
|
+
if (suggestedItems.length === 0) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
return /*#__PURE__*/React.createElement(ToolbarDropdownItemSection, {
|
|
13
|
+
title: "Suggested"
|
|
14
|
+
}, children);
|
|
15
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useSuggestedItems } from './hooks/useSuggestedItems';
|
|
3
|
+
export const SuggestedMenuItems = /*#__PURE__*/React.memo(({
|
|
4
|
+
api
|
|
5
|
+
}) => {
|
|
6
|
+
const suggestedItems = useSuggestedItems(api);
|
|
7
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, suggestedItems.map(item => {
|
|
8
|
+
const ItemComponent = item.component;
|
|
9
|
+
return ItemComponent ? /*#__PURE__*/React.createElement(ItemComponent, {
|
|
10
|
+
key: item.key
|
|
11
|
+
}) : null;
|
|
12
|
+
}));
|
|
13
|
+
});
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* }
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import { TRANSFORM_STRUCTURE_PANEL_MENU_ITEM, TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM, TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM, TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM, TRANSFORM_STRUCTURE_CODE_BLOCK_MENU_ITEM, TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM, TRANSFORM_STRUCTURE_NUMBERED_LIST_MENU_ITEM, TRANSFORM_STRUCTURE_TASK_LIST_MENU_ITEM,
|
|
17
|
+
import { TRANSFORM_STRUCTURE_PANEL_MENU_ITEM, TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM, TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM, TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM, TRANSFORM_STRUCTURE_CODE_BLOCK_MENU_ITEM, TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM, TRANSFORM_STRUCTURE_NUMBERED_LIST_MENU_ITEM, TRANSFORM_STRUCTURE_TASK_LIST_MENU_ITEM, TRANSFORM_HEADINGS_H1_MENU_ITEM, TRANSFORM_HEADINGS_H2_MENU_ITEM, TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM } from '@atlaskit/editor-common/block-menu';
|
|
18
18
|
export const BLOCK_MENU_NODE_TYPES = {
|
|
19
19
|
PARAGRAPH: 'paragraph',
|
|
20
20
|
EXPAND: 'expand',
|
|
@@ -37,85 +37,73 @@ export const BLOCK_MENU_NODE_TYPES = {
|
|
|
37
37
|
export const TRANSFORM_SUGGESTED_ITEMS_RANK = {
|
|
38
38
|
[BLOCK_MENU_NODE_TYPES.PARAGRAPH]: {
|
|
39
39
|
[TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 100,
|
|
40
|
-
[
|
|
41
|
-
[
|
|
40
|
+
[TRANSFORM_HEADINGS_H1_MENU_ITEM.key]: 200,
|
|
41
|
+
[TRANSFORM_HEADINGS_H2_MENU_ITEM.key]: 300
|
|
42
42
|
},
|
|
43
43
|
[BLOCK_MENU_NODE_TYPES.EXPAND]: {
|
|
44
|
-
[
|
|
45
|
-
[
|
|
44
|
+
[TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key]: 100,
|
|
45
|
+
[TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 200,
|
|
46
46
|
[TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key]: 300
|
|
47
47
|
},
|
|
48
48
|
[BLOCK_MENU_NODE_TYPES.BLOCKQUOTE]: {
|
|
49
|
-
[
|
|
50
|
-
[
|
|
51
|
-
[
|
|
49
|
+
[TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key]: 100,
|
|
50
|
+
[TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key]: 200,
|
|
51
|
+
[TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 300
|
|
52
52
|
},
|
|
53
53
|
[BLOCK_MENU_NODE_TYPES.LAYOUT_SECTION]: {
|
|
54
54
|
[TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 100,
|
|
55
55
|
[TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key]: 200,
|
|
56
|
-
[
|
|
56
|
+
[TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key]: 300
|
|
57
57
|
},
|
|
58
58
|
[BLOCK_MENU_NODE_TYPES.PANEL]: {
|
|
59
|
-
[
|
|
60
|
-
[
|
|
61
|
-
[
|
|
59
|
+
[TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key]: 100,
|
|
60
|
+
[TRANSFORM_STRUCTURE_CODE_BLOCK_MENU_ITEM.key]: 200,
|
|
61
|
+
[TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key]: 300
|
|
62
62
|
},
|
|
63
63
|
[BLOCK_MENU_NODE_TYPES.CODE_BLOCK]: {
|
|
64
64
|
[TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key]: 100,
|
|
65
|
-
[
|
|
66
|
-
[
|
|
65
|
+
[TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 200,
|
|
66
|
+
[TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key]: 300
|
|
67
67
|
},
|
|
68
68
|
[BLOCK_MENU_NODE_TYPES.DECISION]: {
|
|
69
69
|
[TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 100,
|
|
70
|
-
[
|
|
71
|
-
[
|
|
70
|
+
[TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key]: 200,
|
|
71
|
+
[TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key]: 300
|
|
72
72
|
},
|
|
73
73
|
[BLOCK_MENU_NODE_TYPES.BULLET_LIST]: {
|
|
74
74
|
[TRANSFORM_STRUCTURE_NUMBERED_LIST_MENU_ITEM.key]: 100,
|
|
75
75
|
[TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key]: 200,
|
|
76
|
-
[
|
|
76
|
+
[TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 300
|
|
77
77
|
},
|
|
78
78
|
[BLOCK_MENU_NODE_TYPES.ORDERED_LIST]: {
|
|
79
|
-
[
|
|
80
|
-
[
|
|
81
|
-
[
|
|
79
|
+
[TRANSFORM_STRUCTURE_TASK_LIST_MENU_ITEM.key]: 100,
|
|
80
|
+
[TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM.key]: 200,
|
|
81
|
+
[TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 300
|
|
82
82
|
},
|
|
83
83
|
[BLOCK_MENU_NODE_TYPES.HEADING]: {
|
|
84
84
|
[TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key]: 100,
|
|
85
|
-
[
|
|
86
|
-
[
|
|
85
|
+
[TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM.key]: 200,
|
|
86
|
+
[TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key]: 300
|
|
87
87
|
},
|
|
88
88
|
[BLOCK_MENU_NODE_TYPES.TASK_LIST]: {
|
|
89
|
-
[
|
|
89
|
+
[TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 100,
|
|
90
90
|
[TRANSFORM_STRUCTURE_NUMBERED_LIST_MENU_ITEM.key]: 200,
|
|
91
|
-
[
|
|
91
|
+
[TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM.key]: 300
|
|
92
92
|
},
|
|
93
93
|
[BLOCK_MENU_NODE_TYPES.MEDIA_SINGLE]: {
|
|
94
94
|
[TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 100,
|
|
95
|
-
[
|
|
96
|
-
[
|
|
95
|
+
[TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key]: 200,
|
|
96
|
+
[TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key]: 300
|
|
97
97
|
},
|
|
98
98
|
[BLOCK_MENU_NODE_TYPES.EXTENSION]: {
|
|
99
|
-
[
|
|
100
|
-
[
|
|
101
|
-
[
|
|
99
|
+
[TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key]: 100,
|
|
100
|
+
[TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 200,
|
|
101
|
+
[TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key]: 300
|
|
102
102
|
},
|
|
103
103
|
[BLOCK_MENU_NODE_TYPES.BODIED_EXTENSION]: {
|
|
104
|
-
[TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 100,
|
|
105
|
-
[TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key]: 200,
|
|
106
|
-
[TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key]: 300
|
|
107
|
-
},
|
|
108
|
-
[BLOCK_MENU_NODE_TYPES.BLOCK_CARD]: {
|
|
109
|
-
[TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 100,
|
|
110
|
-
[TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key]: 200
|
|
111
|
-
},
|
|
112
|
-
[BLOCK_MENU_NODE_TYPES.EMBED_CARD]: {
|
|
113
|
-
[TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 100,
|
|
114
|
-
[TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key]: 200
|
|
115
|
-
},
|
|
116
|
-
[BLOCK_MENU_NODE_TYPES.TABLE]: {
|
|
117
104
|
[TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key]: 100,
|
|
118
|
-
[
|
|
105
|
+
[TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 200,
|
|
106
|
+
[TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key]: 300
|
|
119
107
|
}
|
|
120
108
|
};
|
|
121
109
|
export const getSuggestedItemsForNodeType = nodeType => {
|
|
@@ -84,9 +84,9 @@ var TRANSFORM_STEPS_OVERRIDE = {
|
|
|
84
84
|
decisionList: [unwrapStep, wrapBlockquoteToDecisionListStep]
|
|
85
85
|
},
|
|
86
86
|
layoutSection: {
|
|
87
|
-
blockquote: [unwrapLayoutStep,
|
|
87
|
+
blockquote: [unwrapLayoutStep, wrapMixedContentStep],
|
|
88
88
|
expand: [unwrapLayoutStep, wrapStep],
|
|
89
|
-
panel: [unwrapLayoutStep,
|
|
89
|
+
panel: [unwrapLayoutStep, wrapMixedContentStep],
|
|
90
90
|
codeBlock: [unwrapLayoutStep, flattenStep, wrapStep],
|
|
91
91
|
paragraph: [unwrapLayoutStep]
|
|
92
92
|
},
|