@atlaskit/editor-plugin-block-menu 1.0.8 → 1.0.9
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 +7 -0
- package/dist/cjs/blockMenuPlugin.js +12 -0
- package/dist/cjs/pm-plugins/getIsFormatMenuHidden.js +40 -0
- package/dist/cjs/pm-plugins/main.js +13 -3
- package/dist/cjs/ui/block-menu-components.js +8 -4
- package/dist/cjs/ui/format-menu-section.js +19 -0
- package/dist/es2019/blockMenuPlugin.js +13 -1
- package/dist/es2019/pm-plugins/getIsFormatMenuHidden.js +34 -0
- package/dist/es2019/pm-plugins/main.js +13 -3
- package/dist/es2019/ui/block-menu-components.js +8 -4
- package/dist/es2019/ui/format-menu-section.js +13 -0
- package/dist/esm/blockMenuPlugin.js +13 -1
- package/dist/esm/pm-plugins/getIsFormatMenuHidden.js +34 -0
- package/dist/esm/pm-plugins/main.js +12 -3
- package/dist/esm/ui/block-menu-components.js +8 -4
- package/dist/esm/ui/format-menu-section.js +12 -0
- package/dist/types/blockMenuPluginType.d.ts +3 -0
- package/dist/types/pm-plugins/getIsFormatMenuHidden.d.ts +2 -0
- package/dist/types/pm-plugins/main.d.ts +3 -1
- package/dist/types/ui/format-menu-section.d.ts +7 -0
- package/dist/types-ts4.5/blockMenuPluginType.d.ts +3 -0
- package/dist/types-ts4.5/pm-plugins/getIsFormatMenuHidden.d.ts +2 -0
- package/dist/types-ts4.5/pm-plugins/main.d.ts +3 -1
- package/dist/types-ts4.5/ui/format-menu-section.d.ts +7 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-block-menu
|
|
2
2
|
|
|
3
|
+
## 1.0.9
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`da23530028aac`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/da23530028aac) -
|
|
8
|
+
[ux] ED-29145 Hide format menu for unsupported and nested nodes
|
|
9
|
+
|
|
3
10
|
## 1.0.8
|
|
4
11
|
|
|
5
12
|
### Patch Changes
|
|
@@ -40,6 +40,18 @@ var blockMenuPlugin = exports.blockMenuPlugin = function blockMenuPlugin(_ref) {
|
|
|
40
40
|
return (0, _formatNode2.formatNode)(targetType);
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
|
+
getSharedState: function getSharedState(editorState) {
|
|
44
|
+
if (!editorState) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
var pluginState = _main.blockMenuPluginKey.getState(editorState);
|
|
48
|
+
if (!pluginState) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
isFormatMenuHidden: pluginState === null || pluginState === void 0 ? void 0 : pluginState.isFormatMenuHidden
|
|
53
|
+
};
|
|
54
|
+
},
|
|
43
55
|
contentComponent: function contentComponent(_ref2) {
|
|
44
56
|
var editorView = _ref2.editorView,
|
|
45
57
|
popupsMountPoint = _ref2.popupsMountPoint,
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getIsFormatMenuHidden = void 0;
|
|
7
|
+
var _utils = require("@atlaskit/editor-prosemirror/utils");
|
|
8
|
+
var TOP_LEVEL_NODE_DEPTHS = {
|
|
9
|
+
LIST_TYPE: 2,
|
|
10
|
+
PARAGRAPH_OR_HEADING: 1,
|
|
11
|
+
BLOCKQUOTE: 1,
|
|
12
|
+
BLOCK: 0
|
|
13
|
+
};
|
|
14
|
+
var getIsFormatMenuHidden = exports.getIsFormatMenuHidden = function getIsFormatMenuHidden(tr) {
|
|
15
|
+
var selection = tr.selection;
|
|
16
|
+
var nodes = tr.doc.type.schema.nodes;
|
|
17
|
+
if (selection.from === selection.to || selection.empty || !nodes) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
var content;
|
|
21
|
+
var isTopLevelNode = false;
|
|
22
|
+
var selectedNode = (0, _utils.findSelectedNodeOfType)([nodes.paragraph, nodes.heading, nodes.blockquote, nodes.panel, nodes.expand, nodes.codeBlock, nodes.bulletList, nodes.orderedList, nodes.taskList, nodes.layoutSection])(selection);
|
|
23
|
+
if (selectedNode) {
|
|
24
|
+
content = selectedNode.node;
|
|
25
|
+
isTopLevelNode = selectedNode.depth === TOP_LEVEL_NODE_DEPTHS.BLOCK;
|
|
26
|
+
} else {
|
|
27
|
+
var listTypeOrBlockQuoteNode = (0, _utils.findParentNodeOfType)([nodes.blockquote, nodes.listItem, nodes.taskItem])(selection);
|
|
28
|
+
if (listTypeOrBlockQuoteNode) {
|
|
29
|
+
content = listTypeOrBlockQuoteNode.node;
|
|
30
|
+
isTopLevelNode = listTypeOrBlockQuoteNode.node.type === nodes.blockquote ? listTypeOrBlockQuoteNode.depth === TOP_LEVEL_NODE_DEPTHS.BLOCKQUOTE : listTypeOrBlockQuoteNode.depth === TOP_LEVEL_NODE_DEPTHS.LIST_TYPE;
|
|
31
|
+
} else {
|
|
32
|
+
var paragraphOrHeadingNode = (0, _utils.findParentNodeOfType)([nodes.paragraph, nodes.heading])(selection);
|
|
33
|
+
if (paragraphOrHeadingNode) {
|
|
34
|
+
content = paragraphOrHeadingNode.node;
|
|
35
|
+
isTopLevelNode = paragraphOrHeadingNode.depth === TOP_LEVEL_NODE_DEPTHS.PARAGRAPH_OR_HEADING;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return !content || !isTopLevelNode;
|
|
40
|
+
};
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
7
|
exports.createPlugin = exports.blockMenuPluginKey = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
7
9
|
var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
|
|
8
10
|
var _state = require("@atlaskit/editor-prosemirror/state");
|
|
11
|
+
var _getIsFormatMenuHidden = require("./getIsFormatMenuHidden");
|
|
12
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
13
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
9
14
|
var blockMenuPluginKey = exports.blockMenuPluginKey = new _state.PluginKey('blockMenuPlugin');
|
|
10
15
|
|
|
11
16
|
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
@@ -15,14 +20,19 @@ var createPlugin = exports.createPlugin = function createPlugin() {
|
|
|
15
20
|
key: blockMenuPluginKey,
|
|
16
21
|
state: {
|
|
17
22
|
init: function init() {
|
|
18
|
-
return {
|
|
23
|
+
return {
|
|
24
|
+
isFormatMenuHidden: false
|
|
25
|
+
};
|
|
19
26
|
},
|
|
20
27
|
apply: function apply(tr, currentPluginState) {
|
|
21
28
|
var meta = tr.getMeta(blockMenuPluginKey);
|
|
22
29
|
if (meta) {
|
|
23
|
-
return meta;
|
|
30
|
+
return _objectSpread(_objectSpread({}, currentPluginState), meta);
|
|
24
31
|
}
|
|
25
|
-
|
|
32
|
+
var isFormatMenuHidden = (0, _getIsFormatMenuHidden.getIsFormatMenuHidden)(tr);
|
|
33
|
+
return _objectSpread(_objectSpread({}, currentPluginState), {}, {
|
|
34
|
+
isFormatMenuHidden: isFormatMenuHidden
|
|
35
|
+
});
|
|
26
36
|
}
|
|
27
37
|
}
|
|
28
38
|
});
|
|
@@ -14,6 +14,7 @@ var _chevronRight = _interopRequireDefault(require("@atlaskit/icon/core/chevron-
|
|
|
14
14
|
var _copyBlock = _interopRequireDefault(require("./copy-block"));
|
|
15
15
|
var _copyLink = require("./copy-link");
|
|
16
16
|
var _deleteButton = require("./delete-button");
|
|
17
|
+
var _formatMenuSection = require("./format-menu-section");
|
|
17
18
|
var _moveDown = require("./move-down");
|
|
18
19
|
var _moveUp = require("./move-up");
|
|
19
20
|
var getMoveUpMoveDownMenuComponents = function getMoveUpMoveDownMenuComponents(api) {
|
|
@@ -45,7 +46,7 @@ var getMoveUpMoveDownMenuComponents = function getMoveUpMoveDownMenuComponents(a
|
|
|
45
46
|
}
|
|
46
47
|
}];
|
|
47
48
|
};
|
|
48
|
-
var getFormatMenuComponents = function getFormatMenuComponents() {
|
|
49
|
+
var getFormatMenuComponents = function getFormatMenuComponents(api) {
|
|
49
50
|
return [{
|
|
50
51
|
type: 'block-menu-nested',
|
|
51
52
|
key: _blockMenu.NESTED_FORMAT_MENU.key,
|
|
@@ -91,21 +92,24 @@ var getFormatMenuComponents = function getFormatMenuComponents() {
|
|
|
91
92
|
rank: 100,
|
|
92
93
|
component: function component(_ref3) {
|
|
93
94
|
var children = _ref3.children;
|
|
94
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
95
|
+
return /*#__PURE__*/_react.default.createElement(_formatMenuSection.FormatMenuSection, {
|
|
96
|
+
api: api
|
|
97
|
+
}, children);
|
|
95
98
|
}
|
|
96
99
|
}];
|
|
97
100
|
};
|
|
98
101
|
var getBlockMenuComponents = exports.getBlockMenuComponents = function getBlockMenuComponents(_ref4) {
|
|
99
102
|
var api = _ref4.api,
|
|
100
103
|
config = _ref4.config;
|
|
101
|
-
return [].concat((0, _toConsumableArray2.default)(getFormatMenuComponents()), [{
|
|
104
|
+
return [].concat((0, _toConsumableArray2.default)(getFormatMenuComponents(api)), [{
|
|
102
105
|
type: 'block-menu-section',
|
|
103
106
|
key: _blockMenu.COPY_MENU_SECTION.key,
|
|
104
107
|
rank: _blockMenu.BLOCK_MENU_SECTION_RANK[_blockMenu.COPY_MENU_SECTION.key],
|
|
105
108
|
component: function component(_ref5) {
|
|
109
|
+
var _api$blockMenu$shared;
|
|
106
110
|
var children = _ref5.children;
|
|
107
111
|
return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItemSection, {
|
|
108
|
-
hasSeparator:
|
|
112
|
+
hasSeparator: !(api !== null && api !== void 0 && (_api$blockMenu$shared = api.blockMenu.sharedState.currentState()) !== null && _api$blockMenu$shared !== void 0 && _api$blockMenu$shared.isFormatMenuHidden)
|
|
109
113
|
}, children);
|
|
110
114
|
}
|
|
111
115
|
}, {
|
|
@@ -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.FormatMenuSection = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _useSharedPluginStateSelector = require("@atlaskit/editor-common/use-shared-plugin-state-selector");
|
|
10
|
+
var _editorToolbar = require("@atlaskit/editor-toolbar");
|
|
11
|
+
var FormatMenuSection = exports.FormatMenuSection = function FormatMenuSection(_ref) {
|
|
12
|
+
var children = _ref.children,
|
|
13
|
+
api = _ref.api;
|
|
14
|
+
var isFormatMenuHidden = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'blockMenu.isFormatMenuHidden');
|
|
15
|
+
if (isFormatMenuHidden) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItemSection, null, children);
|
|
19
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { createBlockMenuRegistry } from './editor-actions';
|
|
3
3
|
import { formatNode } from './editor-commands/formatNode';
|
|
4
|
-
import { createPlugin } from './pm-plugins/main';
|
|
4
|
+
import { blockMenuPluginKey, createPlugin } from './pm-plugins/main';
|
|
5
5
|
import BlockMenu from './ui/block-menu';
|
|
6
6
|
import { getBlockMenuComponents } from './ui/block-menu-components';
|
|
7
7
|
export const blockMenuPlugin = ({
|
|
@@ -34,6 +34,18 @@ export const blockMenuPlugin = ({
|
|
|
34
34
|
return formatNode(targetType);
|
|
35
35
|
}
|
|
36
36
|
},
|
|
37
|
+
getSharedState: editorState => {
|
|
38
|
+
if (!editorState) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const pluginState = blockMenuPluginKey.getState(editorState);
|
|
42
|
+
if (!pluginState) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
isFormatMenuHidden: pluginState === null || pluginState === void 0 ? void 0 : pluginState.isFormatMenuHidden
|
|
47
|
+
};
|
|
48
|
+
},
|
|
37
49
|
contentComponent({
|
|
38
50
|
editorView,
|
|
39
51
|
popupsMountPoint,
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { findParentNodeOfType, findSelectedNodeOfType } from '@atlaskit/editor-prosemirror/utils';
|
|
2
|
+
const TOP_LEVEL_NODE_DEPTHS = {
|
|
3
|
+
LIST_TYPE: 2,
|
|
4
|
+
PARAGRAPH_OR_HEADING: 1,
|
|
5
|
+
BLOCKQUOTE: 1,
|
|
6
|
+
BLOCK: 0
|
|
7
|
+
};
|
|
8
|
+
export const getIsFormatMenuHidden = tr => {
|
|
9
|
+
const selection = tr.selection;
|
|
10
|
+
const nodes = tr.doc.type.schema.nodes;
|
|
11
|
+
if (selection.from === selection.to || selection.empty || !nodes) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
let content;
|
|
15
|
+
let isTopLevelNode = false;
|
|
16
|
+
const selectedNode = findSelectedNodeOfType([nodes.paragraph, nodes.heading, nodes.blockquote, nodes.panel, nodes.expand, nodes.codeBlock, nodes.bulletList, nodes.orderedList, nodes.taskList, nodes.layoutSection])(selection);
|
|
17
|
+
if (selectedNode) {
|
|
18
|
+
content = selectedNode.node;
|
|
19
|
+
isTopLevelNode = selectedNode.depth === TOP_LEVEL_NODE_DEPTHS.BLOCK;
|
|
20
|
+
} else {
|
|
21
|
+
const listTypeOrBlockQuoteNode = findParentNodeOfType([nodes.blockquote, nodes.listItem, nodes.taskItem])(selection);
|
|
22
|
+
if (listTypeOrBlockQuoteNode) {
|
|
23
|
+
content = listTypeOrBlockQuoteNode.node;
|
|
24
|
+
isTopLevelNode = listTypeOrBlockQuoteNode.node.type === nodes.blockquote ? listTypeOrBlockQuoteNode.depth === TOP_LEVEL_NODE_DEPTHS.BLOCKQUOTE : listTypeOrBlockQuoteNode.depth === TOP_LEVEL_NODE_DEPTHS.LIST_TYPE;
|
|
25
|
+
} else {
|
|
26
|
+
const paragraphOrHeadingNode = findParentNodeOfType([nodes.paragraph, nodes.heading])(selection);
|
|
27
|
+
if (paragraphOrHeadingNode) {
|
|
28
|
+
content = paragraphOrHeadingNode.node;
|
|
29
|
+
isTopLevelNode = paragraphOrHeadingNode.depth === TOP_LEVEL_NODE_DEPTHS.PARAGRAPH_OR_HEADING;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return !content || !isTopLevelNode;
|
|
34
|
+
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
|
|
2
2
|
import { PluginKey } from '@atlaskit/editor-prosemirror/state';
|
|
3
|
+
import { getIsFormatMenuHidden } from './getIsFormatMenuHidden';
|
|
3
4
|
export const blockMenuPluginKey = new PluginKey('blockMenuPlugin');
|
|
4
5
|
|
|
5
6
|
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
@@ -9,14 +10,23 @@ export const createPlugin = () => {
|
|
|
9
10
|
key: blockMenuPluginKey,
|
|
10
11
|
state: {
|
|
11
12
|
init() {
|
|
12
|
-
return {
|
|
13
|
+
return {
|
|
14
|
+
isFormatMenuHidden: false
|
|
15
|
+
};
|
|
13
16
|
},
|
|
14
17
|
apply: (tr, currentPluginState) => {
|
|
15
18
|
const meta = tr.getMeta(blockMenuPluginKey);
|
|
16
19
|
if (meta) {
|
|
17
|
-
return
|
|
20
|
+
return {
|
|
21
|
+
...currentPluginState,
|
|
22
|
+
...meta
|
|
23
|
+
};
|
|
18
24
|
}
|
|
19
|
-
|
|
25
|
+
const isFormatMenuHidden = getIsFormatMenuHidden(tr);
|
|
26
|
+
return {
|
|
27
|
+
...currentPluginState,
|
|
28
|
+
isFormatMenuHidden
|
|
29
|
+
};
|
|
20
30
|
}
|
|
21
31
|
}
|
|
22
32
|
});
|
|
@@ -6,6 +6,7 @@ import ChevronRightIcon from '@atlaskit/icon/core/chevron-right';
|
|
|
6
6
|
import CopyBlockMenuItem from './copy-block';
|
|
7
7
|
import { CopyLinkDropdownItem } from './copy-link';
|
|
8
8
|
import { DeleteDropdownItem } from './delete-button';
|
|
9
|
+
import { FormatMenuSection } from './format-menu-section';
|
|
9
10
|
import { MoveDownDropdownItem } from './move-down';
|
|
10
11
|
import { MoveUpDropdownItem } from './move-up';
|
|
11
12
|
const getMoveUpMoveDownMenuComponents = api => {
|
|
@@ -33,7 +34,7 @@ const getMoveUpMoveDownMenuComponents = api => {
|
|
|
33
34
|
})
|
|
34
35
|
}];
|
|
35
36
|
};
|
|
36
|
-
const getFormatMenuComponents =
|
|
37
|
+
const getFormatMenuComponents = api => {
|
|
37
38
|
return [{
|
|
38
39
|
type: 'block-menu-nested',
|
|
39
40
|
key: NESTED_FORMAT_MENU.key,
|
|
@@ -80,7 +81,9 @@ const getFormatMenuComponents = () => {
|
|
|
80
81
|
component: ({
|
|
81
82
|
children
|
|
82
83
|
}) => {
|
|
83
|
-
return /*#__PURE__*/React.createElement(
|
|
84
|
+
return /*#__PURE__*/React.createElement(FormatMenuSection, {
|
|
85
|
+
api: api
|
|
86
|
+
}, children);
|
|
84
87
|
}
|
|
85
88
|
}];
|
|
86
89
|
};
|
|
@@ -88,15 +91,16 @@ export const getBlockMenuComponents = ({
|
|
|
88
91
|
api,
|
|
89
92
|
config
|
|
90
93
|
}) => {
|
|
91
|
-
return [...getFormatMenuComponents(), {
|
|
94
|
+
return [...getFormatMenuComponents(api), {
|
|
92
95
|
type: 'block-menu-section',
|
|
93
96
|
key: COPY_MENU_SECTION.key,
|
|
94
97
|
rank: BLOCK_MENU_SECTION_RANK[COPY_MENU_SECTION.key],
|
|
95
98
|
component: ({
|
|
96
99
|
children
|
|
97
100
|
}) => {
|
|
101
|
+
var _api$blockMenu$shared;
|
|
98
102
|
return /*#__PURE__*/React.createElement(ToolbarDropdownItemSection, {
|
|
99
|
-
hasSeparator:
|
|
103
|
+
hasSeparator: !(api !== null && api !== void 0 && (_api$blockMenu$shared = api.blockMenu.sharedState.currentState()) !== null && _api$blockMenu$shared !== void 0 && _api$blockMenu$shared.isFormatMenuHidden)
|
|
100
104
|
}, children);
|
|
101
105
|
}
|
|
102
106
|
}, {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useSharedPluginStateSelector } from '@atlaskit/editor-common/use-shared-plugin-state-selector';
|
|
3
|
+
import { ToolbarDropdownItemSection } from '@atlaskit/editor-toolbar';
|
|
4
|
+
export const FormatMenuSection = ({
|
|
5
|
+
children,
|
|
6
|
+
api
|
|
7
|
+
}) => {
|
|
8
|
+
const isFormatMenuHidden = useSharedPluginStateSelector(api, 'blockMenu.isFormatMenuHidden');
|
|
9
|
+
if (isFormatMenuHidden) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
return /*#__PURE__*/React.createElement(ToolbarDropdownItemSection, null, children);
|
|
13
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { createBlockMenuRegistry } from './editor-actions';
|
|
3
3
|
import { formatNode as _formatNode } from './editor-commands/formatNode';
|
|
4
|
-
import { createPlugin } from './pm-plugins/main';
|
|
4
|
+
import { blockMenuPluginKey, createPlugin } from './pm-plugins/main';
|
|
5
5
|
import BlockMenu from './ui/block-menu';
|
|
6
6
|
import { getBlockMenuComponents } from './ui/block-menu-components';
|
|
7
7
|
export var blockMenuPlugin = function blockMenuPlugin(_ref) {
|
|
@@ -33,6 +33,18 @@ export var blockMenuPlugin = function blockMenuPlugin(_ref) {
|
|
|
33
33
|
return _formatNode(targetType);
|
|
34
34
|
}
|
|
35
35
|
},
|
|
36
|
+
getSharedState: function getSharedState(editorState) {
|
|
37
|
+
if (!editorState) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
var pluginState = blockMenuPluginKey.getState(editorState);
|
|
41
|
+
if (!pluginState) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
isFormatMenuHidden: pluginState === null || pluginState === void 0 ? void 0 : pluginState.isFormatMenuHidden
|
|
46
|
+
};
|
|
47
|
+
},
|
|
36
48
|
contentComponent: function contentComponent(_ref2) {
|
|
37
49
|
var editorView = _ref2.editorView,
|
|
38
50
|
popupsMountPoint = _ref2.popupsMountPoint,
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { findParentNodeOfType, findSelectedNodeOfType } from '@atlaskit/editor-prosemirror/utils';
|
|
2
|
+
var TOP_LEVEL_NODE_DEPTHS = {
|
|
3
|
+
LIST_TYPE: 2,
|
|
4
|
+
PARAGRAPH_OR_HEADING: 1,
|
|
5
|
+
BLOCKQUOTE: 1,
|
|
6
|
+
BLOCK: 0
|
|
7
|
+
};
|
|
8
|
+
export var getIsFormatMenuHidden = function getIsFormatMenuHidden(tr) {
|
|
9
|
+
var selection = tr.selection;
|
|
10
|
+
var nodes = tr.doc.type.schema.nodes;
|
|
11
|
+
if (selection.from === selection.to || selection.empty || !nodes) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
var content;
|
|
15
|
+
var isTopLevelNode = false;
|
|
16
|
+
var selectedNode = findSelectedNodeOfType([nodes.paragraph, nodes.heading, nodes.blockquote, nodes.panel, nodes.expand, nodes.codeBlock, nodes.bulletList, nodes.orderedList, nodes.taskList, nodes.layoutSection])(selection);
|
|
17
|
+
if (selectedNode) {
|
|
18
|
+
content = selectedNode.node;
|
|
19
|
+
isTopLevelNode = selectedNode.depth === TOP_LEVEL_NODE_DEPTHS.BLOCK;
|
|
20
|
+
} else {
|
|
21
|
+
var listTypeOrBlockQuoteNode = findParentNodeOfType([nodes.blockquote, nodes.listItem, nodes.taskItem])(selection);
|
|
22
|
+
if (listTypeOrBlockQuoteNode) {
|
|
23
|
+
content = listTypeOrBlockQuoteNode.node;
|
|
24
|
+
isTopLevelNode = listTypeOrBlockQuoteNode.node.type === nodes.blockquote ? listTypeOrBlockQuoteNode.depth === TOP_LEVEL_NODE_DEPTHS.BLOCKQUOTE : listTypeOrBlockQuoteNode.depth === TOP_LEVEL_NODE_DEPTHS.LIST_TYPE;
|
|
25
|
+
} else {
|
|
26
|
+
var paragraphOrHeadingNode = findParentNodeOfType([nodes.paragraph, nodes.heading])(selection);
|
|
27
|
+
if (paragraphOrHeadingNode) {
|
|
28
|
+
content = paragraphOrHeadingNode.node;
|
|
29
|
+
isTopLevelNode = paragraphOrHeadingNode.depth === TOP_LEVEL_NODE_DEPTHS.PARAGRAPH_OR_HEADING;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return !content || !isTopLevelNode;
|
|
34
|
+
};
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
1
4
|
import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
|
|
2
5
|
import { PluginKey } from '@atlaskit/editor-prosemirror/state';
|
|
6
|
+
import { getIsFormatMenuHidden } from './getIsFormatMenuHidden';
|
|
3
7
|
export var blockMenuPluginKey = new PluginKey('blockMenuPlugin');
|
|
4
8
|
|
|
5
9
|
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
@@ -9,14 +13,19 @@ export var createPlugin = function createPlugin() {
|
|
|
9
13
|
key: blockMenuPluginKey,
|
|
10
14
|
state: {
|
|
11
15
|
init: function init() {
|
|
12
|
-
return {
|
|
16
|
+
return {
|
|
17
|
+
isFormatMenuHidden: false
|
|
18
|
+
};
|
|
13
19
|
},
|
|
14
20
|
apply: function apply(tr, currentPluginState) {
|
|
15
21
|
var meta = tr.getMeta(blockMenuPluginKey);
|
|
16
22
|
if (meta) {
|
|
17
|
-
return meta;
|
|
23
|
+
return _objectSpread(_objectSpread({}, currentPluginState), meta);
|
|
18
24
|
}
|
|
19
|
-
|
|
25
|
+
var isFormatMenuHidden = getIsFormatMenuHidden(tr);
|
|
26
|
+
return _objectSpread(_objectSpread({}, currentPluginState), {}, {
|
|
27
|
+
isFormatMenuHidden: isFormatMenuHidden
|
|
28
|
+
});
|
|
20
29
|
}
|
|
21
30
|
}
|
|
22
31
|
});
|
|
@@ -7,6 +7,7 @@ import ChevronRightIcon from '@atlaskit/icon/core/chevron-right';
|
|
|
7
7
|
import CopyBlockMenuItem from './copy-block';
|
|
8
8
|
import { CopyLinkDropdownItem } from './copy-link';
|
|
9
9
|
import { DeleteDropdownItem } from './delete-button';
|
|
10
|
+
import { FormatMenuSection } from './format-menu-section';
|
|
10
11
|
import { MoveDownDropdownItem } from './move-down';
|
|
11
12
|
import { MoveUpDropdownItem } from './move-up';
|
|
12
13
|
var getMoveUpMoveDownMenuComponents = function getMoveUpMoveDownMenuComponents(api) {
|
|
@@ -38,7 +39,7 @@ var getMoveUpMoveDownMenuComponents = function getMoveUpMoveDownMenuComponents(a
|
|
|
38
39
|
}
|
|
39
40
|
}];
|
|
40
41
|
};
|
|
41
|
-
var getFormatMenuComponents = function getFormatMenuComponents() {
|
|
42
|
+
var getFormatMenuComponents = function getFormatMenuComponents(api) {
|
|
42
43
|
return [{
|
|
43
44
|
type: 'block-menu-nested',
|
|
44
45
|
key: NESTED_FORMAT_MENU.key,
|
|
@@ -84,21 +85,24 @@ var getFormatMenuComponents = function getFormatMenuComponents() {
|
|
|
84
85
|
rank: 100,
|
|
85
86
|
component: function component(_ref3) {
|
|
86
87
|
var children = _ref3.children;
|
|
87
|
-
return /*#__PURE__*/React.createElement(
|
|
88
|
+
return /*#__PURE__*/React.createElement(FormatMenuSection, {
|
|
89
|
+
api: api
|
|
90
|
+
}, children);
|
|
88
91
|
}
|
|
89
92
|
}];
|
|
90
93
|
};
|
|
91
94
|
export var getBlockMenuComponents = function getBlockMenuComponents(_ref4) {
|
|
92
95
|
var api = _ref4.api,
|
|
93
96
|
config = _ref4.config;
|
|
94
|
-
return [].concat(_toConsumableArray(getFormatMenuComponents()), [{
|
|
97
|
+
return [].concat(_toConsumableArray(getFormatMenuComponents(api)), [{
|
|
95
98
|
type: 'block-menu-section',
|
|
96
99
|
key: COPY_MENU_SECTION.key,
|
|
97
100
|
rank: BLOCK_MENU_SECTION_RANK[COPY_MENU_SECTION.key],
|
|
98
101
|
component: function component(_ref5) {
|
|
102
|
+
var _api$blockMenu$shared;
|
|
99
103
|
var children = _ref5.children;
|
|
100
104
|
return /*#__PURE__*/React.createElement(ToolbarDropdownItemSection, {
|
|
101
|
-
hasSeparator:
|
|
105
|
+
hasSeparator: !(api !== null && api !== void 0 && (_api$blockMenu$shared = api.blockMenu.sharedState.currentState()) !== null && _api$blockMenu$shared !== void 0 && _api$blockMenu$shared.isFormatMenuHidden)
|
|
102
106
|
}, children);
|
|
103
107
|
}
|
|
104
108
|
}, {
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useSharedPluginStateSelector } from '@atlaskit/editor-common/use-shared-plugin-state-selector';
|
|
3
|
+
import { ToolbarDropdownItemSection } from '@atlaskit/editor-toolbar';
|
|
4
|
+
export var FormatMenuSection = function FormatMenuSection(_ref) {
|
|
5
|
+
var children = _ref.children,
|
|
6
|
+
api = _ref.api;
|
|
7
|
+
var isFormatMenuHidden = useSharedPluginStateSelector(api, 'blockMenu.isFormatMenuHidden');
|
|
8
|
+
if (isFormatMenuHidden) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
return /*#__PURE__*/React.createElement(ToolbarDropdownItemSection, null, children);
|
|
12
|
+
};
|
|
@@ -19,6 +19,9 @@ export type BlockMenuPlugin = NextEditorPlugin<'blockMenu', {
|
|
|
19
19
|
OptionalPlugin<DecorationsPlugin>
|
|
20
20
|
];
|
|
21
21
|
pluginConfiguration?: BlockMenuPluginOptions;
|
|
22
|
+
sharedState: {
|
|
23
|
+
isFormatMenuHidden?: boolean;
|
|
24
|
+
} | undefined;
|
|
22
25
|
}>;
|
|
23
26
|
export type BlockMenuPluginOptions = {
|
|
24
27
|
/**
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
|
|
2
2
|
import { PluginKey } from '@atlaskit/editor-prosemirror/state';
|
|
3
3
|
export declare const blockMenuPluginKey: PluginKey<any>;
|
|
4
|
-
type BlockMenuPluginState = {
|
|
4
|
+
type BlockMenuPluginState = {
|
|
5
|
+
isFormatMenuHidden: boolean;
|
|
6
|
+
};
|
|
5
7
|
export declare const createPlugin: () => SafePlugin<BlockMenuPluginState>;
|
|
6
8
|
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ExtractInjectionAPI } from '@atlaskit/editor-common/types';
|
|
3
|
+
import type { BlockMenuPlugin } from '../blockMenuPluginType';
|
|
4
|
+
export declare const FormatMenuSection: ({ children, api, }: {
|
|
5
|
+
api: ExtractInjectionAPI<BlockMenuPlugin> | undefined;
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
}) => React.JSX.Element | null;
|
|
@@ -19,6 +19,9 @@ export type BlockMenuPlugin = NextEditorPlugin<'blockMenu', {
|
|
|
19
19
|
OptionalPlugin<DecorationsPlugin>
|
|
20
20
|
];
|
|
21
21
|
pluginConfiguration?: BlockMenuPluginOptions;
|
|
22
|
+
sharedState: {
|
|
23
|
+
isFormatMenuHidden?: boolean;
|
|
24
|
+
} | undefined;
|
|
22
25
|
}>;
|
|
23
26
|
export type BlockMenuPluginOptions = {
|
|
24
27
|
/**
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
|
|
2
2
|
import { PluginKey } from '@atlaskit/editor-prosemirror/state';
|
|
3
3
|
export declare const blockMenuPluginKey: PluginKey<any>;
|
|
4
|
-
type BlockMenuPluginState = {
|
|
4
|
+
type BlockMenuPluginState = {
|
|
5
|
+
isFormatMenuHidden: boolean;
|
|
6
|
+
};
|
|
5
7
|
export declare const createPlugin: () => SafePlugin<BlockMenuPluginState>;
|
|
6
8
|
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ExtractInjectionAPI } from '@atlaskit/editor-common/types';
|
|
3
|
+
import type { BlockMenuPlugin } from '../blockMenuPluginType';
|
|
4
|
+
export declare const FormatMenuSection: ({ children, api, }: {
|
|
5
|
+
api: ExtractInjectionAPI<BlockMenuPlugin> | undefined;
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
}) => React.JSX.Element | null;
|