@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
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import React, { useMemo } from 'react';
|
|
2
|
-
import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/hooks';
|
|
3
|
-
import { ToolbarDropdownItemSection } from '@atlaskit/editor-toolbar';
|
|
4
|
-
import { getSelectedNode } from '../editor-commands/transform-node-utils/utils';
|
|
5
|
-
import { getSortedSuggestedItems } from './utils/suggested-items-rank';
|
|
6
|
-
export const SuggestedItemsRenderer = /*#__PURE__*/React.memo(({
|
|
7
|
-
api
|
|
8
|
-
}) => {
|
|
9
|
-
var _api$blockMenu;
|
|
10
|
-
const {
|
|
11
|
-
preservedSelection
|
|
12
|
-
} = useSharedPluginStateWithSelector(api, ['blockControls'], states => {
|
|
13
|
-
var _states$blockControls;
|
|
14
|
-
return {
|
|
15
|
-
preservedSelection: (_states$blockControls = states.blockControlsState) === null || _states$blockControls === void 0 ? void 0 : _states$blockControls.preservedSelection
|
|
16
|
-
};
|
|
17
|
-
});
|
|
18
|
-
const blockMenuComponents = api === null || api === void 0 ? void 0 : (_api$blockMenu = api.blockMenu) === null || _api$blockMenu === void 0 ? void 0 : _api$blockMenu.actions.getBlockMenuComponents();
|
|
19
|
-
const menuItemsMap = useMemo(() => {
|
|
20
|
-
if (!blockMenuComponents) {
|
|
21
|
-
return new Map();
|
|
22
|
-
}
|
|
23
|
-
return new Map(blockMenuComponents.filter(c => c.type === 'block-menu-item').map(item => [item.key, item]));
|
|
24
|
-
}, [blockMenuComponents]);
|
|
25
|
-
const suggestedItems = useMemo(() => {
|
|
26
|
-
if (!preservedSelection || menuItemsMap.size === 0) {
|
|
27
|
-
return [];
|
|
28
|
-
}
|
|
29
|
-
const selectedNode = getSelectedNode(preservedSelection);
|
|
30
|
-
if (!selectedNode) {
|
|
31
|
-
return [];
|
|
32
|
-
}
|
|
33
|
-
const nodeTypeName = selectedNode.node.type.name;
|
|
34
|
-
const sortedKeys = getSortedSuggestedItems(nodeTypeName);
|
|
35
|
-
return sortedKeys.map(key => menuItemsMap.get(key)).filter(item => item !== undefined);
|
|
36
|
-
}, [menuItemsMap, preservedSelection]);
|
|
37
|
-
if (suggestedItems.length === 0) {
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
return /*#__PURE__*/React.createElement(ToolbarDropdownItemSection, {
|
|
41
|
-
title: "Suggested"
|
|
42
|
-
}, suggestedItems.map(item => {
|
|
43
|
-
const ItemComponent = item.component;
|
|
44
|
-
return ItemComponent ? /*#__PURE__*/React.createElement(ItemComponent, {
|
|
45
|
-
key: item.key
|
|
46
|
-
}) : null;
|
|
47
|
-
}));
|
|
48
|
-
});
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
-
import React, { Fragment } from 'react';
|
|
3
|
-
import { ArrowKeyNavigationProvider, ArrowKeyNavigationType } from '@atlaskit/editor-common/ui-menu';
|
|
4
|
-
var NoOp = function NoOp() {
|
|
5
|
-
return null;
|
|
6
|
-
};
|
|
7
|
-
var isNonNestedMenuSection = function isNonNestedMenuSection(component) {
|
|
8
|
-
return component.type === 'block-menu-section' && !('parent' in component);
|
|
9
|
-
};
|
|
10
|
-
var isMenuItem = function isMenuItem(component) {
|
|
11
|
-
return component.type === 'block-menu-item';
|
|
12
|
-
};
|
|
13
|
-
var isNestedMenu = function isNestedMenu(component) {
|
|
14
|
-
return component.type === 'block-menu-nested';
|
|
15
|
-
};
|
|
16
|
-
var isNestedMenuSection = function isNestedMenuSection(component) {
|
|
17
|
-
return 'parent' in component && component.parent !== undefined && component.parent.type === 'block-menu-nested';
|
|
18
|
-
};
|
|
19
|
-
var getSortedChildren = function getSortedChildren(components, parentKey) {
|
|
20
|
-
return components.filter(function (component) {
|
|
21
|
-
return 'parent' in component && component.parent !== undefined && component.parent.key === parentKey;
|
|
22
|
-
}).sort(function (a, b) {
|
|
23
|
-
return (a.parent.rank || 0) - (b.parent.rank || 0);
|
|
24
|
-
});
|
|
25
|
-
};
|
|
26
|
-
var getSortedNestedSections = function getSortedNestedSections(components, parentKey) {
|
|
27
|
-
var nestedMenuSections = components.filter(isNestedMenuSection);
|
|
28
|
-
var nestedMenuSectionsWithParent = nestedMenuSections.filter(function (section) {
|
|
29
|
-
return section.parent !== undefined;
|
|
30
|
-
});
|
|
31
|
-
return getSortedChildren(nestedMenuSectionsWithParent, parentKey);
|
|
32
|
-
};
|
|
33
|
-
var getSortedNonNestedSections = function getSortedNonNestedSections(components) {
|
|
34
|
-
return components.filter(isNonNestedMenuSection).sort(function (a, b) {
|
|
35
|
-
return (a.rank || 0) - (b.rank || 0);
|
|
36
|
-
});
|
|
37
|
-
};
|
|
38
|
-
export var BlockMenuRenderer = function BlockMenuRenderer(_ref) {
|
|
39
|
-
var components = _ref.components,
|
|
40
|
-
fallbacks = _ref.fallbacks;
|
|
41
|
-
var menuSections = getSortedNonNestedSections(components);
|
|
42
|
-
var menuItems = components.filter(isMenuItem);
|
|
43
|
-
var nestedMenus = components.filter(isNestedMenu);
|
|
44
|
-
var renderMenu = function renderMenu() {
|
|
45
|
-
return /*#__PURE__*/React.createElement(Fragment, null, menuSections.map(function (section) {
|
|
46
|
-
// Get all items for the current section, including nested menus, and sort them by rank
|
|
47
|
-
var currentSectionItemsSorted = getSortedChildren([].concat(_toConsumableArray(menuItems), _toConsumableArray(nestedMenus)), section.key);
|
|
48
|
-
if (currentSectionItemsSorted.length === 0) {
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// iterate over the current section items, if it is nested menu, get their children, sort them
|
|
53
|
-
// if they are menu items, just render as they are sorted above
|
|
54
|
-
var getChildrenWithNestedItems = function getChildrenWithNestedItems(items) {
|
|
55
|
-
return items.map(function (item) {
|
|
56
|
-
if (isNestedMenu(item)) {
|
|
57
|
-
var sortedNestedSections = getSortedNestedSections(components, item.key);
|
|
58
|
-
var sections = sortedNestedSections.map(function (section) {
|
|
59
|
-
var sortedNestedMenuItems = getSortedChildren(menuItems, section.key);
|
|
60
|
-
if (sortedNestedMenuItems.length === 0) {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
var NestedSection = section.component || fallbacks.section || NoOp;
|
|
64
|
-
return /*#__PURE__*/React.createElement(NestedSection, {
|
|
65
|
-
key: section.key
|
|
66
|
-
}, sortedNestedMenuItems.map(function (nestedItem) {
|
|
67
|
-
var NestedMenuItemComponent = nestedItem.component || fallbacks.item || NoOp;
|
|
68
|
-
return /*#__PURE__*/React.createElement(NestedMenuItemComponent, {
|
|
69
|
-
key: nestedItem.key
|
|
70
|
-
});
|
|
71
|
-
}));
|
|
72
|
-
});
|
|
73
|
-
var NestedMenuComponent = item.component || fallbacks.nestedMenu || NoOp;
|
|
74
|
-
return /*#__PURE__*/React.createElement(NestedMenuComponent, {
|
|
75
|
-
key: item.key
|
|
76
|
-
}, sections);
|
|
77
|
-
} else {
|
|
78
|
-
var ItemComponent = item.component || fallbacks.item || NoOp;
|
|
79
|
-
return /*#__PURE__*/React.createElement(ItemComponent, {
|
|
80
|
-
key: item.key
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
};
|
|
85
|
-
var children = getChildrenWithNestedItems(currentSectionItemsSorted);
|
|
86
|
-
var SectionComponent = section.component || fallbacks.section || NoOp;
|
|
87
|
-
return /*#__PURE__*/React.createElement(SectionComponent, {
|
|
88
|
-
key: section.key
|
|
89
|
-
}, children);
|
|
90
|
-
}));
|
|
91
|
-
};
|
|
92
|
-
return /*#__PURE__*/React.createElement(ArrowKeyNavigationProvider, {
|
|
93
|
-
type: ArrowKeyNavigationType.MENU
|
|
94
|
-
}, renderMenu());
|
|
95
|
-
};
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import React, { useMemo } from 'react';
|
|
2
|
-
import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/hooks';
|
|
3
|
-
import { ToolbarDropdownItemSection } from '@atlaskit/editor-toolbar';
|
|
4
|
-
import { getSelectedNode } from '../editor-commands/transform-node-utils/utils';
|
|
5
|
-
import { getSortedSuggestedItems } from './utils/suggested-items-rank';
|
|
6
|
-
export var SuggestedItemsRenderer = /*#__PURE__*/React.memo(function (_ref) {
|
|
7
|
-
var _api$blockMenu;
|
|
8
|
-
var api = _ref.api;
|
|
9
|
-
var _useSharedPluginState = useSharedPluginStateWithSelector(api, ['blockControls'], function (states) {
|
|
10
|
-
var _states$blockControls;
|
|
11
|
-
return {
|
|
12
|
-
preservedSelection: (_states$blockControls = states.blockControlsState) === null || _states$blockControls === void 0 ? void 0 : _states$blockControls.preservedSelection
|
|
13
|
-
};
|
|
14
|
-
}),
|
|
15
|
-
preservedSelection = _useSharedPluginState.preservedSelection;
|
|
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
|
-
if (!preservedSelection || menuItemsMap.size === 0) {
|
|
29
|
-
return [];
|
|
30
|
-
}
|
|
31
|
-
var selectedNode = getSelectedNode(preservedSelection);
|
|
32
|
-
if (!selectedNode) {
|
|
33
|
-
return [];
|
|
34
|
-
}
|
|
35
|
-
var nodeTypeName = selectedNode.node.type.name;
|
|
36
|
-
var sortedKeys = getSortedSuggestedItems(nodeTypeName);
|
|
37
|
-
return sortedKeys.map(function (key) {
|
|
38
|
-
return menuItemsMap.get(key);
|
|
39
|
-
}).filter(function (item) {
|
|
40
|
-
return item !== undefined;
|
|
41
|
-
});
|
|
42
|
-
}, [menuItemsMap, preservedSelection]);
|
|
43
|
-
if (suggestedItems.length === 0) {
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
return /*#__PURE__*/React.createElement(ToolbarDropdownItemSection, {
|
|
47
|
-
title: "Suggested"
|
|
48
|
-
}, suggestedItems.map(function (item) {
|
|
49
|
-
var ItemComponent = item.component;
|
|
50
|
-
return ItemComponent ? /*#__PURE__*/React.createElement(ItemComponent, {
|
|
51
|
-
key: item.key
|
|
52
|
-
}) : null;
|
|
53
|
-
}));
|
|
54
|
-
});
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { RegisterBlockMenuComponent, BlockMenuNestedComponent, BlockMenuSectionComponent, BlockMenuItemComponent } from '../blockMenuPluginType';
|
|
3
|
-
type BlockMenuProps = {
|
|
4
|
-
/**
|
|
5
|
-
* Every registered block menu component
|
|
6
|
-
*/
|
|
7
|
-
components: RegisterBlockMenuComponent[];
|
|
8
|
-
/**
|
|
9
|
-
* Fallback components used in rendering
|
|
10
|
-
*/
|
|
11
|
-
fallbacks: {
|
|
12
|
-
item: BlockMenuItemComponent;
|
|
13
|
-
nestedMenu: BlockMenuNestedComponent;
|
|
14
|
-
section: BlockMenuSectionComponent;
|
|
15
|
-
};
|
|
16
|
-
};
|
|
17
|
-
export declare const BlockMenuRenderer: ({ components, fallbacks }: BlockMenuProps) => React.JSX.Element;
|
|
18
|
-
export {};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { RegisterBlockMenuComponent, BlockMenuNestedComponent, BlockMenuSectionComponent, BlockMenuItemComponent } from '../blockMenuPluginType';
|
|
3
|
-
type BlockMenuProps = {
|
|
4
|
-
/**
|
|
5
|
-
* Every registered block menu component
|
|
6
|
-
*/
|
|
7
|
-
components: RegisterBlockMenuComponent[];
|
|
8
|
-
/**
|
|
9
|
-
* Fallback components used in rendering
|
|
10
|
-
*/
|
|
11
|
-
fallbacks: {
|
|
12
|
-
item: BlockMenuItemComponent;
|
|
13
|
-
nestedMenu: BlockMenuNestedComponent;
|
|
14
|
-
section: BlockMenuSectionComponent;
|
|
15
|
-
};
|
|
16
|
-
};
|
|
17
|
-
export declare const BlockMenuRenderer: ({ components, fallbacks }: BlockMenuProps) => React.JSX.Element;
|
|
18
|
-
export {};
|