@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
|
@@ -61,7 +61,7 @@ export var getTargetNodeTypeNameInContext = function getTargetNodeTypeNameInCont
|
|
|
61
61
|
*/
|
|
62
62
|
export var expandSelectionToBlockRange = function expandSelectionToBlockRange(selection, schema) {
|
|
63
63
|
var nodes = schema.nodes;
|
|
64
|
-
var nodesNeedToExpandRange = [nodes.listItem, nodes.taskItem];
|
|
64
|
+
var nodesNeedToExpandRange = [nodes.bulletList, nodes.orderedList, nodes.taskList, nodes.listItem, nodes.taskItem];
|
|
65
65
|
|
|
66
66
|
// when adding nodes.tableRow, tableHeader, tableCell in nodesNeedToExpandRang,
|
|
67
67
|
// expandToBlockRange does not return expected table start position, sometimes even freeze editor
|
|
@@ -70,10 +70,11 @@ export var expandSelectionToBlockRange = function expandSelectionToBlockRange(se
|
|
|
70
70
|
var table = findTable(selection);
|
|
71
71
|
if (table) {
|
|
72
72
|
var $from = selection.$from.doc.resolve(table.pos);
|
|
73
|
-
var $to = selection.$from.doc.resolve(table.pos + table.node.nodeSize);
|
|
73
|
+
var $to = selection.$from.doc.resolve(table.pos + table.node.nodeSize - 1);
|
|
74
74
|
return {
|
|
75
75
|
$from: $from,
|
|
76
|
-
$to: $to
|
|
76
|
+
$to: $to,
|
|
77
|
+
range: $from.blockRange($to)
|
|
77
78
|
};
|
|
78
79
|
}
|
|
79
80
|
}
|
|
@@ -122,7 +123,26 @@ export var convertNestedExpandToExpand = function convertNestedExpandToExpand(no
|
|
|
122
123
|
title: ((_node$attrs = node.attrs) === null || _node$attrs === void 0 ? void 0 : _node$attrs.title) || ''
|
|
123
124
|
}, node.content);
|
|
124
125
|
};
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Converts an expand to a nestedExpand node.
|
|
129
|
+
* When placing an expand inside another expand, it must become a nestedExpand
|
|
130
|
+
* since expand cannot be a direct child of expand.
|
|
131
|
+
*/
|
|
132
|
+
export var convertExpandToNestedExpand = function convertExpandToNestedExpand(node, schema) {
|
|
133
|
+
var _node$attrs2;
|
|
134
|
+
var nestedExpandType = schema.nodes.nestedExpand;
|
|
135
|
+
if (!nestedExpandType) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
return nestedExpandType.createAndFill({
|
|
139
|
+
title: ((_node$attrs2 = node.attrs) === null || _node$attrs2 === void 0 ? void 0 : _node$attrs2.title) || ''
|
|
140
|
+
}, node.content);
|
|
141
|
+
};
|
|
125
142
|
export var getBlockNodesInRange = function getBlockNodesInRange(range) {
|
|
143
|
+
if (range.startIndex === range.endIndex) {
|
|
144
|
+
return [];
|
|
145
|
+
}
|
|
126
146
|
if (range.endIndex - range.startIndex <= 1) {
|
|
127
147
|
return [range.parent.child(range.startIndex)];
|
|
128
148
|
}
|
|
@@ -1,7 +1,27 @@
|
|
|
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 var wrapStep = function wrapStep(nodes, context) {
|
|
2
9
|
var schema = context.schema,
|
|
3
10
|
targetNodeTypeName = context.targetNodeTypeName;
|
|
4
|
-
|
|
11
|
+
|
|
12
|
+
// When wrapping into expand, convert any expand children to nestedExpand
|
|
13
|
+
// since expand cannot be a direct child of expand
|
|
14
|
+
var processedNodes = nodes;
|
|
15
|
+
if (targetNodeTypeName === 'expand') {
|
|
16
|
+
processedNodes = nodes.map(function (node) {
|
|
17
|
+
if (node.type.name === 'expand') {
|
|
18
|
+
var nestedExpandNode = convertExpandToNestedExpand(node, schema);
|
|
19
|
+
return nestedExpandNode !== null && nestedExpandNode !== void 0 ? nestedExpandNode : node;
|
|
20
|
+
}
|
|
21
|
+
return node;
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
var outputNode = schema.nodes[targetNodeTypeName].createAndFill({}, processedNodes);
|
|
5
25
|
if (outputNode) {
|
|
6
26
|
return [outputNode];
|
|
7
27
|
}
|
|
@@ -10,7 +10,8 @@ import { FormatMenuComponent } from './format-menu-nested';
|
|
|
10
10
|
import { FormatMenuSection } from './format-menu-section';
|
|
11
11
|
import { MoveDownDropdownItem } from './move-down';
|
|
12
12
|
import { MoveUpDropdownItem } from './move-up';
|
|
13
|
-
import {
|
|
13
|
+
import { SuggestedItemsMenuSection } from './suggested-items-menu-section';
|
|
14
|
+
import { SuggestedMenuItems } from './suggested-menu-items';
|
|
14
15
|
var getMoveUpMoveDownMenuComponents = function getMoveUpMoveDownMenuComponents(api) {
|
|
15
16
|
return [{
|
|
16
17
|
type: 'block-menu-item',
|
|
@@ -67,9 +68,13 @@ var getTurnIntoMenuComponents = function getTurnIntoMenuComponents(api) {
|
|
|
67
68
|
rank: TRANSFORM_MENU_ITEM_RANK[TRANSFORM_SUGGESTED_MENU_SECTION.key]
|
|
68
69
|
},
|
|
69
70
|
component: function component() {
|
|
70
|
-
|
|
71
|
+
var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
|
72
|
+
children: null
|
|
73
|
+
},
|
|
74
|
+
children = _ref2.children;
|
|
75
|
+
return /*#__PURE__*/React.createElement(SuggestedItemsMenuSection, {
|
|
71
76
|
api: api
|
|
72
|
-
});
|
|
77
|
+
}, children);
|
|
73
78
|
}
|
|
74
79
|
}, {
|
|
75
80
|
type: 'block-menu-item',
|
|
@@ -78,6 +83,11 @@ var getTurnIntoMenuComponents = function getTurnIntoMenuComponents(api) {
|
|
|
78
83
|
type: 'block-menu-section',
|
|
79
84
|
key: TRANSFORM_SUGGESTED_MENU_SECTION.key,
|
|
80
85
|
rank: TRANSFORM_SUGGESTED_MENU_SECTION_RANK[TRANSFORM_SUGGESTED_MENU_ITEM.key]
|
|
86
|
+
},
|
|
87
|
+
component: function component() {
|
|
88
|
+
return /*#__PURE__*/React.createElement(SuggestedMenuItems, {
|
|
89
|
+
api: api
|
|
90
|
+
});
|
|
81
91
|
}
|
|
82
92
|
}, {
|
|
83
93
|
type: 'block-menu-section',
|
|
@@ -88,10 +98,10 @@ var getTurnIntoMenuComponents = function getTurnIntoMenuComponents(api) {
|
|
|
88
98
|
rank: TRANSFORM_MENU_ITEM_RANK[TRANSFORM_CREATE_MENU_SECTION.key]
|
|
89
99
|
},
|
|
90
100
|
component: function component() {
|
|
91
|
-
var
|
|
101
|
+
var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
|
92
102
|
children: null
|
|
93
103
|
},
|
|
94
|
-
children =
|
|
104
|
+
children = _ref3.children;
|
|
95
105
|
return /*#__PURE__*/React.createElement(ToolbarDropdownItemSection, {
|
|
96
106
|
title: "Create"
|
|
97
107
|
}, children);
|
|
@@ -105,10 +115,10 @@ var getTurnIntoMenuComponents = function getTurnIntoMenuComponents(api) {
|
|
|
105
115
|
rank: TRANSFORM_MENU_ITEM_RANK[TRANSFORM_STRUCTURE_MENU_SECTION.key]
|
|
106
116
|
},
|
|
107
117
|
component: function component() {
|
|
108
|
-
var
|
|
118
|
+
var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
|
109
119
|
children: null
|
|
110
120
|
},
|
|
111
|
-
children =
|
|
121
|
+
children = _ref4.children;
|
|
112
122
|
return /*#__PURE__*/React.createElement(ToolbarDropdownItemSection, {
|
|
113
123
|
title: "Structure"
|
|
114
124
|
}, children);
|
|
@@ -122,10 +132,10 @@ var getTurnIntoMenuComponents = function getTurnIntoMenuComponents(api) {
|
|
|
122
132
|
rank: TRANSFORM_MENU_ITEM_RANK[TRANSFORM_HEADINGS_MENU_SECTION.key]
|
|
123
133
|
},
|
|
124
134
|
component: function component() {
|
|
125
|
-
var
|
|
135
|
+
var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
|
126
136
|
children: null
|
|
127
137
|
},
|
|
128
|
-
children =
|
|
138
|
+
children = _ref5.children;
|
|
129
139
|
return /*#__PURE__*/React.createElement(ToolbarDropdownItemSection, {
|
|
130
140
|
title: "Headings",
|
|
131
141
|
hasSeparator: true
|
|
@@ -135,23 +145,23 @@ var getTurnIntoMenuComponents = function getTurnIntoMenuComponents(api) {
|
|
|
135
145
|
type: 'block-menu-section',
|
|
136
146
|
key: TRANSFORM_MENU_SECTION.key,
|
|
137
147
|
rank: MAIN_BLOCK_MENU_SECTION_RANK[TRANSFORM_MENU_SECTION.key],
|
|
138
|
-
component: function component(
|
|
139
|
-
var children =
|
|
148
|
+
component: function component(_ref6) {
|
|
149
|
+
var children = _ref6.children;
|
|
140
150
|
return /*#__PURE__*/React.createElement(FormatMenuSection, {
|
|
141
151
|
api: api
|
|
142
152
|
}, children);
|
|
143
153
|
}
|
|
144
154
|
}];
|
|
145
155
|
};
|
|
146
|
-
export var getBlockMenuComponents = function getBlockMenuComponents(
|
|
147
|
-
var api =
|
|
148
|
-
config =
|
|
156
|
+
export var getBlockMenuComponents = function getBlockMenuComponents(_ref7) {
|
|
157
|
+
var api = _ref7.api,
|
|
158
|
+
config = _ref7.config;
|
|
149
159
|
return [].concat(_toConsumableArray(getTurnIntoMenuComponents(api)), [{
|
|
150
160
|
type: 'block-menu-section',
|
|
151
161
|
key: BLOCK_ACTIONS_MENU_SECTION.key,
|
|
152
162
|
rank: MAIN_BLOCK_MENU_SECTION_RANK[BLOCK_ACTIONS_MENU_SECTION.key],
|
|
153
|
-
component: function component(
|
|
154
|
-
var children =
|
|
163
|
+
component: function component(_ref8) {
|
|
164
|
+
var children = _ref8.children;
|
|
155
165
|
return /*#__PURE__*/React.createElement(CopySection, {
|
|
156
166
|
api: api
|
|
157
167
|
}, children);
|
|
@@ -174,8 +184,8 @@ export var getBlockMenuComponents = function getBlockMenuComponents(_ref6) {
|
|
|
174
184
|
type: 'block-menu-section',
|
|
175
185
|
key: POSITION_MENU_SECTION.key,
|
|
176
186
|
rank: MAIN_BLOCK_MENU_SECTION_RANK[POSITION_MENU_SECTION.key],
|
|
177
|
-
component: function component(
|
|
178
|
-
var children =
|
|
187
|
+
component: function component(_ref9) {
|
|
188
|
+
var children = _ref9.children;
|
|
179
189
|
return /*#__PURE__*/React.createElement(ToolbarDropdownItemSection, {
|
|
180
190
|
hasSeparator: true
|
|
181
191
|
}, children);
|
|
@@ -184,8 +194,8 @@ export var getBlockMenuComponents = function getBlockMenuComponents(_ref6) {
|
|
|
184
194
|
type: 'block-menu-section',
|
|
185
195
|
key: DELETE_MENU_SECTION.key,
|
|
186
196
|
rank: MAIN_BLOCK_MENU_SECTION_RANK[DELETE_MENU_SECTION.key],
|
|
187
|
-
component: function component(
|
|
188
|
-
var children =
|
|
197
|
+
component: function component(_ref0) {
|
|
198
|
+
var children = _ref0.children;
|
|
189
199
|
return /*#__PURE__*/React.createElement(DeleteSection, {
|
|
190
200
|
api: api
|
|
191
201
|
}, children);
|
|
@@ -0,0 +1,30 @@
|
|
|
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 var BlockMenuComponent = function BlockMenuComponent(_ref) {
|
|
8
|
+
var registeredComponent = _ref.registeredComponent,
|
|
9
|
+
childrenMap = _ref.childrenMap,
|
|
10
|
+
fallbacks = _ref.fallbacks;
|
|
11
|
+
if (registeredComponent.type === 'block-menu-item') {
|
|
12
|
+
var ItemComponent = registeredComponent.component || fallbacks['block-menu-item'];
|
|
13
|
+
return /*#__PURE__*/React.createElement(ItemComponent, {
|
|
14
|
+
key: registeredComponent.key
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
if (!willComponentRender(registeredComponent, childrenMap)) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
var ParentComponent = registeredComponent.component || fallbacks[registeredComponent.type];
|
|
21
|
+
var childrenMapKey = getChildrenMapKey(registeredComponent.key, registeredComponent.type);
|
|
22
|
+
var registeredComponents = childrenMap.get(childrenMapKey);
|
|
23
|
+
return /*#__PURE__*/React.createElement(ParentComponent, {
|
|
24
|
+
key: registeredComponent.key
|
|
25
|
+
}, /*#__PURE__*/React.createElement(BlockMenuComponents, {
|
|
26
|
+
registeredComponents: registeredComponents,
|
|
27
|
+
childrenMap: childrenMap,
|
|
28
|
+
fallbacks: fallbacks
|
|
29
|
+
}));
|
|
30
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
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 var BlockMenuComponents = function BlockMenuComponents(_ref) {
|
|
8
|
+
var registeredComponents = _ref.registeredComponents,
|
|
9
|
+
childrenMap = _ref.childrenMap,
|
|
10
|
+
fallbacks = _ref.fallbacks;
|
|
11
|
+
if (!(registeredComponents !== null && registeredComponents !== void 0 && registeredComponents.length)) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, registeredComponents.map(function (registeredComponent) {
|
|
15
|
+
return /*#__PURE__*/React.createElement(BlockMenuComponent, {
|
|
16
|
+
key: registeredComponent.key,
|
|
17
|
+
registeredComponent: registeredComponent,
|
|
18
|
+
childrenMap: childrenMap,
|
|
19
|
+
fallbacks: fallbacks
|
|
20
|
+
});
|
|
21
|
+
}));
|
|
22
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
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 var BlockMenuRenderer = function BlockMenuRenderer(_ref) {
|
|
9
|
+
var allRegisteredComponents = _ref.allRegisteredComponents,
|
|
10
|
+
_ref$fallbacks = _ref.fallbacks,
|
|
11
|
+
fallbacks = _ref$fallbacks === void 0 ? BLOCK_MENU_FALLBACKS : _ref$fallbacks;
|
|
12
|
+
var _useMemo = useMemo(function () {
|
|
13
|
+
return {
|
|
14
|
+
childrenMap: buildChildrenMap(allRegisteredComponents),
|
|
15
|
+
topLevelSections: getSortedTopLevelSections(allRegisteredComponents)
|
|
16
|
+
};
|
|
17
|
+
}, [allRegisteredComponents]),
|
|
18
|
+
childrenMap = _useMemo.childrenMap,
|
|
19
|
+
topLevelSections = _useMemo.topLevelSections;
|
|
20
|
+
return /*#__PURE__*/React.createElement(BlockMenuComponents, {
|
|
21
|
+
registeredComponents: topLevelSections,
|
|
22
|
+
childrenMap: childrenMap,
|
|
23
|
+
fallbacks: fallbacks
|
|
24
|
+
});
|
|
25
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
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 var BLOCK_MENU_FALLBACKS = {
|
|
5
|
+
'block-menu-nested': function blockMenuNested(_ref) {
|
|
6
|
+
var children = _ref.children;
|
|
7
|
+
return /*#__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
|
+
},
|
|
17
|
+
'block-menu-section': function blockMenuSection(_ref2) {
|
|
18
|
+
var children = _ref2.children;
|
|
19
|
+
return /*#__PURE__*/React.createElement(ToolbarDropdownItemSection, null, children);
|
|
20
|
+
},
|
|
21
|
+
// eslint-disable-next-line @atlassian/i18n/no-literal-string-in-jsx
|
|
22
|
+
'block-menu-item': function blockMenuItem() {
|
|
23
|
+
return /*#__PURE__*/React.createElement(ToolbarDropdownItem, null, "Block Menu Item");
|
|
24
|
+
}
|
|
25
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
/**
|
|
6
|
+
* Type guard to check if a component has a parent
|
|
7
|
+
*
|
|
8
|
+
* @param component The block menu component to check
|
|
9
|
+
* @returns True if the component has a parent, false otherwise
|
|
10
|
+
*/
|
|
11
|
+
var hasParent = function hasParent(component) {
|
|
12
|
+
return 'parent' in component && !!component.parent;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Type guard to identify top-level sections (sections without a parent)
|
|
17
|
+
*
|
|
18
|
+
* @param component The block menu component to check
|
|
19
|
+
* @returns True if the component is a top-level section, false otherwise
|
|
20
|
+
*/
|
|
21
|
+
var isTopLevelSection = function isTopLevelSection(component) {
|
|
22
|
+
return component.type === 'block-menu-section' && !hasParent(component);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Gets all top-level sections (those without a parent) sorted by rank
|
|
27
|
+
*
|
|
28
|
+
* @param components All registered block menu components
|
|
29
|
+
* @returns Sorted array of top-level sections
|
|
30
|
+
*/
|
|
31
|
+
export var getSortedTopLevelSections = function getSortedTopLevelSections(components) {
|
|
32
|
+
return components.filter(isTopLevelSection).sort(function (a, b) {
|
|
33
|
+
return (a.rank || 0) - (b.rank || 0);
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Generates a unique key from a key and type
|
|
39
|
+
* Used to lookup children in the childrenMap
|
|
40
|
+
*
|
|
41
|
+
* @param key The component's key
|
|
42
|
+
* @param type The component's type
|
|
43
|
+
* @returns A unique string key combining type and key
|
|
44
|
+
*/
|
|
45
|
+
export var getChildrenMapKey = function getChildrenMapKey(key, type) {
|
|
46
|
+
return "".concat(type, ":").concat(key);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Builds a map of parent keys to their sorted children
|
|
51
|
+
* This enables efficient hierarchical rendering of the menu structure
|
|
52
|
+
*
|
|
53
|
+
* @param components All registered block menu components
|
|
54
|
+
* @returns Map where keys are parent identifiers and values are sorted child components
|
|
55
|
+
*/
|
|
56
|
+
export var buildChildrenMap = function buildChildrenMap(components) {
|
|
57
|
+
var childrenMap = new Map();
|
|
58
|
+
var _iterator = _createForOfIteratorHelper(components),
|
|
59
|
+
_step;
|
|
60
|
+
try {
|
|
61
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
62
|
+
var component = _step.value;
|
|
63
|
+
// Only components with parents can be children
|
|
64
|
+
if ('parent' in component && !!component.parent) {
|
|
65
|
+
var childrenMapKey = getChildrenMapKey(component.parent.key, component.parent.type);
|
|
66
|
+
var existing = childrenMap.get(childrenMapKey) || [];
|
|
67
|
+
existing.push(component);
|
|
68
|
+
childrenMap.set(childrenMapKey, existing);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Sort children by their rank within their parent
|
|
73
|
+
} catch (err) {
|
|
74
|
+
_iterator.e(err);
|
|
75
|
+
} finally {
|
|
76
|
+
_iterator.f();
|
|
77
|
+
}
|
|
78
|
+
var _iterator2 = _createForOfIteratorHelper(childrenMap.entries()),
|
|
79
|
+
_step2;
|
|
80
|
+
try {
|
|
81
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
82
|
+
var _step2$value = _slicedToArray(_step2.value, 2),
|
|
83
|
+
children = _step2$value[1];
|
|
84
|
+
children.sort(function (a, b) {
|
|
85
|
+
var rankA = hasParent(a) ? a.parent.rank || 0 : 0;
|
|
86
|
+
var rankB = hasParent(b) ? b.parent.rank || 0 : 0;
|
|
87
|
+
return rankA - rankB;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
} catch (err) {
|
|
91
|
+
_iterator2.e(err);
|
|
92
|
+
} finally {
|
|
93
|
+
_iterator2.f();
|
|
94
|
+
}
|
|
95
|
+
return childrenMap;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Determines whether a component will render based on its type and children
|
|
100
|
+
*
|
|
101
|
+
* Rules:
|
|
102
|
+
* - An item will not render if has a component that returns null
|
|
103
|
+
* - A nested menu will render if it has at least one registered child component
|
|
104
|
+
* - A section will render if it has at least one registered child component that will render
|
|
105
|
+
*
|
|
106
|
+
* NOTE: This requires invoking each item's component function to check for null return
|
|
107
|
+
*/
|
|
108
|
+
var _willComponentRender = function willComponentRender(registeredComponent, childrenMap) {
|
|
109
|
+
if (registeredComponent.type === 'block-menu-item') {
|
|
110
|
+
return registeredComponent.component ? registeredComponent.component() !== null : true;
|
|
111
|
+
}
|
|
112
|
+
var childrenMapKey = getChildrenMapKey(registeredComponent.key, registeredComponent.type);
|
|
113
|
+
var registeredComponents = childrenMap.get(childrenMapKey) || [];
|
|
114
|
+
if (registeredComponent.type === 'block-menu-nested') {
|
|
115
|
+
return registeredComponents.length > 0;
|
|
116
|
+
}
|
|
117
|
+
return registeredComponents.some(function (childComponent) {
|
|
118
|
+
return _willComponentRender(childComponent, childrenMap);
|
|
119
|
+
});
|
|
120
|
+
};
|
|
121
|
+
export { _willComponentRender as willComponentRender };
|
|
@@ -11,15 +11,15 @@ import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/hooks'
|
|
|
11
11
|
import { deleteSelectedRange } from '@atlaskit/editor-common/selection';
|
|
12
12
|
import { DRAG_HANDLE_SELECTOR, DRAG_HANDLE_WIDTH } from '@atlaskit/editor-common/styles';
|
|
13
13
|
import { Popup } from '@atlaskit/editor-common/ui';
|
|
14
|
+
import { ArrowKeyNavigationProvider, ArrowKeyNavigationType } from '@atlaskit/editor-common/ui-menu';
|
|
14
15
|
import { OutsideClickTargetRefContext, withReactEditorViewOuterListeners } from '@atlaskit/editor-common/ui-react';
|
|
15
16
|
import { akEditorFloatingOverlapPanelZIndex } from '@atlaskit/editor-shared-styles';
|
|
16
|
-
import { ToolbarDropdownItem, ToolbarDropdownItemSection, ToolbarNestedDropdownMenu } from '@atlaskit/editor-toolbar';
|
|
17
17
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
18
18
|
import { conditionalHooksFactory } from '@atlaskit/platform-feature-flags-react';
|
|
19
19
|
import { Box } from '@atlaskit/primitives/compiled';
|
|
20
20
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
|
|
21
21
|
import { useBlockMenu } from './block-menu-provider';
|
|
22
|
-
import { BlockMenuRenderer } from './block-menu-renderer';
|
|
22
|
+
import { BlockMenuRenderer } from './block-menu-renderer/BlockMenuRenderer';
|
|
23
23
|
var styles = {
|
|
24
24
|
base: "_2rko12b0 _bfhk1bhr _16qs130s",
|
|
25
25
|
emptyMenuSectionStyles: "_1cc0glyw _1k2yglyw"
|
|
@@ -111,24 +111,11 @@ var BlockMenuContent = function BlockMenuContent(_ref3) {
|
|
|
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: function nestedMenu() {
|
|
118
|
-
return /*#__PURE__*/React.createElement(ToolbarNestedDropdownMenu, {
|
|
119
|
-
elemBefore: undefined,
|
|
120
|
-
elemAfter: undefined
|
|
121
|
-
}, /*#__PURE__*/React.createElement(ToolbarDropdownItemSection, null, /*#__PURE__*/React.createElement(ToolbarDropdownItem, null, "Block Menu Item")));
|
|
122
|
-
},
|
|
123
|
-
section: function section() {
|
|
124
|
-
return /*#__PURE__*/React.createElement(ToolbarDropdownItemSection, null, /*#__PURE__*/React.createElement(ToolbarDropdownItem, null, "Block Menu Item"));
|
|
125
|
-
},
|
|
126
|
-
// eslint-disable-next-line @atlassian/i18n/no-literal-string-in-jsx
|
|
127
|
-
item: function item() {
|
|
128
|
-
return /*#__PURE__*/React.createElement(ToolbarDropdownItem, null, "Block Menu Item");
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}));
|
|
117
|
+
allRegisteredComponents: blockMenuComponents || []
|
|
118
|
+
})));
|
|
132
119
|
};
|
|
133
120
|
var BlockMenu = function BlockMenu(_ref4) {
|
|
134
121
|
var _editorView$dom, _ref5;
|
|
@@ -0,0 +1,51 @@
|
|
|
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 var useSuggestedItems = function useSuggestedItems(api) {
|
|
6
|
+
var _api$blockMenu;
|
|
7
|
+
var _useSharedPluginState = useSharedPluginStateWithSelector(api, ['blockControls', 'selection'], function (states) {
|
|
8
|
+
var _states$blockControls, _states$selectionStat;
|
|
9
|
+
return {
|
|
10
|
+
preservedSelection: (_states$blockControls = states.blockControlsState) === null || _states$blockControls === void 0 ? void 0 : _states$blockControls.preservedSelection,
|
|
11
|
+
selection: (_states$selectionStat = states.selectionState) === null || _states$selectionStat === void 0 ? void 0 : _states$selectionStat.selection
|
|
12
|
+
};
|
|
13
|
+
}),
|
|
14
|
+
preservedSelection = _useSharedPluginState.preservedSelection,
|
|
15
|
+
selection = _useSharedPluginState.selection;
|
|
16
|
+
var blockMenuComponents = api === null || api === void 0 || (_api$blockMenu = api.blockMenu) === null || _api$blockMenu === void 0 ? void 0 : _api$blockMenu.actions.getBlockMenuComponents();
|
|
17
|
+
var menuItemsMap = useMemo(function () {
|
|
18
|
+
if (!blockMenuComponents) {
|
|
19
|
+
return new Map();
|
|
20
|
+
}
|
|
21
|
+
return new Map(blockMenuComponents.filter(function (c) {
|
|
22
|
+
return c.type === 'block-menu-item';
|
|
23
|
+
}).map(function (item) {
|
|
24
|
+
return [item.key, item];
|
|
25
|
+
}));
|
|
26
|
+
}, [blockMenuComponents]);
|
|
27
|
+
var suggestedItems = useMemo(function () {
|
|
28
|
+
var currentSelection = preservedSelection || selection;
|
|
29
|
+
if (menuItemsMap.size === 0 || !currentSelection) {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
var _expandSelectionToBlo = expandSelectionToBlockRange(currentSelection, currentSelection.$from.doc.type.schema),
|
|
33
|
+
range = _expandSelectionToBlo.range;
|
|
34
|
+
if (!range) {
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
var blockNodes = getBlockNodesInRange(range);
|
|
38
|
+
var singleNode = blockNodes.length === 1 ? blockNodes[0] : undefined;
|
|
39
|
+
if (!singleNode) {
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
var nodeTypeName = singleNode.type.name;
|
|
43
|
+
var sortedKeys = getSortedSuggestedItems(nodeTypeName);
|
|
44
|
+
return sortedKeys.map(function (key) {
|
|
45
|
+
return menuItemsMap.get(key);
|
|
46
|
+
}).filter(function (item) {
|
|
47
|
+
return item !== undefined;
|
|
48
|
+
});
|
|
49
|
+
}, [menuItemsMap, preservedSelection, selection]);
|
|
50
|
+
return suggestedItems;
|
|
51
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ToolbarDropdownItemSection } from '@atlaskit/editor-toolbar';
|
|
3
|
+
import { useSuggestedItems } from './hooks/useSuggestedItems';
|
|
4
|
+
export var SuggestedItemsMenuSection = /*#__PURE__*/React.memo(function (_ref) {
|
|
5
|
+
var api = _ref.api,
|
|
6
|
+
children = _ref.children;
|
|
7
|
+
var suggestedItems = useSuggestedItems(api);
|
|
8
|
+
if (suggestedItems.length === 0) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
return /*#__PURE__*/React.createElement(ToolbarDropdownItemSection, {
|
|
12
|
+
title: "Suggested"
|
|
13
|
+
}, children);
|
|
14
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useSuggestedItems } from './hooks/useSuggestedItems';
|
|
3
|
+
export var SuggestedMenuItems = /*#__PURE__*/React.memo(function (_ref) {
|
|
4
|
+
var api = _ref.api;
|
|
5
|
+
var suggestedItems = useSuggestedItems(api);
|
|
6
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, suggestedItems.map(function (item) {
|
|
7
|
+
var ItemComponent = item.component;
|
|
8
|
+
return ItemComponent ? /*#__PURE__*/React.createElement(ItemComponent, {
|
|
9
|
+
key: item.key
|
|
10
|
+
}) : null;
|
|
11
|
+
}));
|
|
12
|
+
});
|
|
@@ -17,7 +17,7 @@ var _TRANSFORM_SUGGESTED_;
|
|
|
17
17
|
* }
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
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,
|
|
20
|
+
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';
|
|
21
21
|
export var BLOCK_MENU_NODE_TYPES = {
|
|
22
22
|
PARAGRAPH: 'paragraph',
|
|
23
23
|
EXPAND: 'expand',
|
|
@@ -37,7 +37,7 @@ export var BLOCK_MENU_NODE_TYPES = {
|
|
|
37
37
|
EMBED_CARD: 'embedCard',
|
|
38
38
|
TABLE: 'table'
|
|
39
39
|
};
|
|
40
|
-
export var TRANSFORM_SUGGESTED_ITEMS_RANK = (_TRANSFORM_SUGGESTED_ = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_TRANSFORM_SUGGESTED_, BLOCK_MENU_NODE_TYPES.PARAGRAPH, _defineProperty(_defineProperty(_defineProperty({}, TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 100),
|
|
40
|
+
export var TRANSFORM_SUGGESTED_ITEMS_RANK = (_TRANSFORM_SUGGESTED_ = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_TRANSFORM_SUGGESTED_, BLOCK_MENU_NODE_TYPES.PARAGRAPH, _defineProperty(_defineProperty(_defineProperty({}, TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 100), TRANSFORM_HEADINGS_H1_MENU_ITEM.key, 200), TRANSFORM_HEADINGS_H2_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.EXPAND, _defineProperty(_defineProperty(_defineProperty({}, TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key, 100), TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 200), TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.BLOCKQUOTE, _defineProperty(_defineProperty(_defineProperty({}, TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key, 100), TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key, 200), TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.LAYOUT_SECTION, _defineProperty(_defineProperty(_defineProperty({}, TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 100), TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key, 200), TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.PANEL, _defineProperty(_defineProperty(_defineProperty({}, TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key, 100), TRANSFORM_STRUCTURE_CODE_BLOCK_MENU_ITEM.key, 200), TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.CODE_BLOCK, _defineProperty(_defineProperty(_defineProperty({}, TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key, 100), TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 200), TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.DECISION, _defineProperty(_defineProperty(_defineProperty({}, TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 100), TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key, 200), TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.BULLET_LIST, _defineProperty(_defineProperty(_defineProperty({}, TRANSFORM_STRUCTURE_NUMBERED_LIST_MENU_ITEM.key, 100), TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key, 200), TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.ORDERED_LIST, _defineProperty(_defineProperty(_defineProperty({}, TRANSFORM_STRUCTURE_TASK_LIST_MENU_ITEM.key, 100), TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM.key, 200), TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.HEADING, _defineProperty(_defineProperty(_defineProperty({}, TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key, 100), TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM.key, 200), TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key, 300)), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_TRANSFORM_SUGGESTED_, BLOCK_MENU_NODE_TYPES.TASK_LIST, _defineProperty(_defineProperty(_defineProperty({}, TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 100), TRANSFORM_STRUCTURE_NUMBERED_LIST_MENU_ITEM.key, 200), TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.MEDIA_SINGLE, _defineProperty(_defineProperty(_defineProperty({}, TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 100), TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key, 200), TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.EXTENSION, _defineProperty(_defineProperty(_defineProperty({}, TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key, 100), TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 200), TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key, 300)), BLOCK_MENU_NODE_TYPES.BODIED_EXTENSION, _defineProperty(_defineProperty(_defineProperty({}, TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key, 100), TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key, 200), TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key, 300)));
|
|
41
41
|
export var getSuggestedItemsForNodeType = function getSuggestedItemsForNodeType(nodeType) {
|
|
42
42
|
return TRANSFORM_SUGGESTED_ITEMS_RANK[nodeType];
|
|
43
43
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { NextEditorPlugin, OptionalPlugin
|
|
1
|
+
import type { EditorCommand, NextEditorPlugin, OptionalPlugin } from '@atlaskit/editor-common/types';
|
|
2
2
|
import type { AnalyticsPlugin } from '@atlaskit/editor-plugin-analytics';
|
|
3
3
|
import type { BlockControlsPlugin } from '@atlaskit/editor-plugin-block-controls';
|
|
4
4
|
import type { DecorationsPlugin } from '@atlaskit/editor-plugin-decorations';
|
|
@@ -84,7 +84,7 @@ type BlockMenuNested = {
|
|
|
84
84
|
key: string;
|
|
85
85
|
type: 'block-menu-nested';
|
|
86
86
|
};
|
|
87
|
-
export type BlockMenuNestedComponent = (props
|
|
87
|
+
export type BlockMenuNestedComponent = (props: {
|
|
88
88
|
children: React.ReactNode;
|
|
89
89
|
}) => React.ReactNode;
|
|
90
90
|
export type BlockMenuSectionComponent = (props: {
|
|
@@ -108,4 +108,5 @@ export type RegisterBlockMenuItem = BlockMenuItem & {
|
|
|
108
108
|
parent: Parent<BlockMenuSection>;
|
|
109
109
|
};
|
|
110
110
|
export type RegisterBlockMenuComponent = RegisterBlockMenuNested | RegisterBlockMenuSection | RegisterBlockMenuItem;
|
|
111
|
+
export type RegisterBlockMenuComponentType = RegisterBlockMenuComponent['type'];
|
|
111
112
|
export {};
|
|
@@ -14,6 +14,11 @@ export declare const getTargetNodeTypeNameInContext: (nodeTypeName: NodeTypeName
|
|
|
14
14
|
export declare const expandSelectionToBlockRange: (selection: Selection, schema: Schema) => {
|
|
15
15
|
$from: import("prosemirror-model").ResolvedPos;
|
|
16
16
|
$to: import("prosemirror-model").ResolvedPos;
|
|
17
|
+
range: NodeRange | null;
|
|
18
|
+
} | {
|
|
19
|
+
$from: import("prosemirror-model").ResolvedPos;
|
|
20
|
+
$to: import("prosemirror-model").ResolvedPos;
|
|
21
|
+
range?: undefined;
|
|
17
22
|
};
|
|
18
23
|
export declare const isListType: (node: PMNode, schema: Schema) => boolean;
|
|
19
24
|
/**
|
|
@@ -22,4 +27,10 @@ export declare const isListType: (node: PMNode, schema: Schema) => boolean;
|
|
|
22
27
|
* in containers that don't support nesting, they must be converted.
|
|
23
28
|
*/
|
|
24
29
|
export declare const convertNestedExpandToExpand: (node: PMNode, schema: Schema) => PMNode | null;
|
|
30
|
+
/**
|
|
31
|
+
* Converts an expand to a nestedExpand node.
|
|
32
|
+
* When placing an expand inside another expand, it must become a nestedExpand
|
|
33
|
+
* since expand cannot be a direct child of expand.
|
|
34
|
+
*/
|
|
35
|
+
export declare const convertExpandToNestedExpand: (node: PMNode, schema: Schema) => PMNode | null;
|
|
25
36
|
export declare const getBlockNodesInRange: (range: NodeRange) => PMNode[];
|
|
@@ -1,2 +1,7 @@
|
|
|
1
1
|
import type { TransformStep } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Wraps nodes into the target container type.
|
|
4
|
+
* When wrapping into expand, any expand children are converted to nestedExpand
|
|
5
|
+
* since expand cannot be a direct child of expand.
|
|
6
|
+
*/
|
|
2
7
|
export declare const wrapStep: TransformStep;
|