@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.
Files changed (79) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/editor-commands/transform-node-utils/transform.js +2 -2
  3. package/dist/cjs/editor-commands/transform-node-utils/utils.js +24 -4
  4. package/dist/cjs/editor-commands/transform-node-utils/wrapStep.js +20 -1
  5. package/dist/cjs/ui/block-menu-components.js +30 -20
  6. package/dist/cjs/ui/block-menu-renderer/BlockMenuComponent.js +37 -0
  7. package/dist/cjs/ui/block-menu-renderer/BlockMenuComponents.js +29 -0
  8. package/dist/cjs/ui/block-menu-renderer/BlockMenuRenderer.js +33 -0
  9. package/dist/cjs/ui/block-menu-renderer/fallbacks.js +32 -0
  10. package/dist/cjs/ui/block-menu-renderer/types.js +5 -0
  11. package/dist/cjs/ui/block-menu-renderer/utils.js +127 -0
  12. package/dist/cjs/ui/block-menu.js +7 -20
  13. package/dist/cjs/ui/hooks/useSuggestedItems.js +57 -0
  14. package/dist/cjs/ui/suggested-items-menu-section.js +21 -0
  15. package/dist/cjs/ui/suggested-menu-items.js +19 -0
  16. package/dist/cjs/ui/utils/suggested-items-rank.js +1 -1
  17. package/dist/es2019/editor-commands/transform-node-utils/transform.js +2 -2
  18. package/dist/es2019/editor-commands/transform-node-utils/utils.js +23 -3
  19. package/dist/es2019/editor-commands/transform-node-utils/wrapStep.js +21 -1
  20. package/dist/es2019/ui/block-menu-components.js +12 -4
  21. package/dist/es2019/ui/block-menu-renderer/BlockMenuComponent.js +31 -0
  22. package/dist/es2019/ui/block-menu-renderer/BlockMenuComponents.js +21 -0
  23. package/dist/es2019/ui/block-menu-renderer/BlockMenuRenderer.js +24 -0
  24. package/dist/es2019/ui/block-menu-renderer/fallbacks.js +21 -0
  25. package/dist/es2019/ui/block-menu-renderer/types.js +1 -0
  26. package/dist/es2019/ui/block-menu-renderer/utils.js +93 -0
  27. package/dist/es2019/ui/block-menu.js +6 -13
  28. package/dist/es2019/ui/hooks/useSuggestedItems.js +45 -0
  29. package/dist/es2019/ui/suggested-items-menu-section.js +15 -0
  30. package/dist/es2019/ui/suggested-menu-items.js +13 -0
  31. package/dist/es2019/ui/utils/suggested-items-rank.js +31 -43
  32. package/dist/esm/editor-commands/transform-node-utils/transform.js +2 -2
  33. package/dist/esm/editor-commands/transform-node-utils/utils.js +23 -3
  34. package/dist/esm/editor-commands/transform-node-utils/wrapStep.js +21 -1
  35. package/dist/esm/ui/block-menu-components.js +30 -20
  36. package/dist/esm/ui/block-menu-renderer/BlockMenuComponent.js +30 -0
  37. package/dist/esm/ui/block-menu-renderer/BlockMenuComponents.js +22 -0
  38. package/dist/esm/ui/block-menu-renderer/BlockMenuRenderer.js +25 -0
  39. package/dist/esm/ui/block-menu-renderer/fallbacks.js +25 -0
  40. package/dist/esm/ui/block-menu-renderer/types.js +1 -0
  41. package/dist/esm/ui/block-menu-renderer/utils.js +121 -0
  42. package/dist/esm/ui/block-menu.js +6 -19
  43. package/dist/esm/ui/hooks/useSuggestedItems.js +51 -0
  44. package/dist/esm/ui/suggested-items-menu-section.js +14 -0
  45. package/dist/esm/ui/suggested-menu-items.js +12 -0
  46. package/dist/esm/ui/utils/suggested-items-rank.js +2 -2
  47. package/dist/types/blockMenuPluginType.d.ts +3 -2
  48. package/dist/types/editor-commands/transform-node-utils/utils.d.ts +11 -0
  49. package/dist/types/editor-commands/transform-node-utils/wrapStep.d.ts +5 -0
  50. package/dist/types/ui/block-menu-renderer/BlockMenuComponent.d.ts +11 -0
  51. package/dist/types/ui/block-menu-renderer/BlockMenuComponents.d.ts +12 -0
  52. package/dist/types/ui/block-menu-renderer/BlockMenuRenderer.d.ts +12 -0
  53. package/dist/types/ui/block-menu-renderer/fallbacks.d.ts +2 -0
  54. package/dist/types/ui/block-menu-renderer/types.d.ts +27 -0
  55. package/dist/types/ui/block-menu-renderer/utils.d.ts +37 -0
  56. package/dist/types/ui/hooks/useSuggestedItems.d.ts +3 -0
  57. package/dist/types/ui/suggested-items-menu-section.d.ts +9 -0
  58. package/dist/types/ui/{suggested-items-renderer.d.ts → suggested-menu-items.d.ts} +2 -2
  59. package/dist/types-ts4.5/blockMenuPluginType.d.ts +3 -2
  60. package/dist/types-ts4.5/editor-commands/transform-node-utils/utils.d.ts +11 -0
  61. package/dist/types-ts4.5/editor-commands/transform-node-utils/wrapStep.d.ts +5 -0
  62. package/dist/types-ts4.5/ui/block-menu-renderer/BlockMenuComponent.d.ts +11 -0
  63. package/dist/types-ts4.5/ui/block-menu-renderer/BlockMenuComponents.d.ts +12 -0
  64. package/dist/types-ts4.5/ui/block-menu-renderer/BlockMenuRenderer.d.ts +12 -0
  65. package/dist/types-ts4.5/ui/block-menu-renderer/fallbacks.d.ts +2 -0
  66. package/dist/types-ts4.5/ui/block-menu-renderer/types.d.ts +27 -0
  67. package/dist/types-ts4.5/ui/block-menu-renderer/utils.d.ts +37 -0
  68. package/dist/types-ts4.5/ui/hooks/useSuggestedItems.d.ts +3 -0
  69. package/dist/types-ts4.5/ui/suggested-items-menu-section.d.ts +9 -0
  70. package/dist/types-ts4.5/ui/{suggested-items-renderer.d.ts → suggested-menu-items.d.ts} +2 -2
  71. package/package.json +3 -3
  72. package/dist/cjs/ui/block-menu-renderer.js +0 -104
  73. package/dist/cjs/ui/suggested-items-renderer.js +0 -62
  74. package/dist/es2019/ui/block-menu-renderer.js +0 -83
  75. package/dist/es2019/ui/suggested-items-renderer.js +0 -48
  76. package/dist/esm/ui/block-menu-renderer.js +0 -95
  77. package/dist/esm/ui/suggested-items-renderer.js +0 -54
  78. package/dist/types/ui/block-menu-renderer.d.ts +0 -18
  79. 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 {};