@atlaskit/editor-plugin-block-menu 0.0.1 → 0.0.3
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 +17 -0
- package/afm-cc/tsconfig.json +3 -0
- package/afm-passionfruit/tsconfig.json +51 -0
- package/dist/cjs/blockMenuPlugin.js +12 -0
- package/dist/cjs/editor-actions/index.js +65 -0
- package/dist/cjs/ui/block-menu-components.js +131 -0
- package/dist/cjs/ui/block-menu-renderer.js +54 -0
- package/dist/cjs/ui/block-menu.js +32 -69
- package/dist/cjs/ui/consts.js +7 -0
- package/dist/es2019/blockMenuPlugin.js +37 -23
- package/dist/es2019/editor-actions/index.js +57 -0
- package/dist/es2019/ui/block-menu-components.js +127 -0
- package/dist/es2019/ui/block-menu-renderer.js +35 -0
- package/dist/es2019/ui/block-menu.js +27 -67
- package/dist/es2019/ui/consts.js +1 -0
- package/dist/esm/blockMenuPlugin.js +12 -0
- package/dist/esm/editor-actions/index.js +58 -0
- package/dist/esm/ui/block-menu-components.js +124 -0
- package/dist/esm/ui/block-menu-renderer.js +45 -0
- package/dist/esm/ui/block-menu.js +32 -68
- package/dist/esm/ui/consts.js +1 -0
- package/dist/types/blockMenuPluginType.d.ts +41 -0
- package/dist/types/editor-actions/index.d.ts +52 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/ui/block-menu-components.d.ts +2 -0
- package/dist/types/ui/block-menu-renderer.d.ts +18 -0
- package/dist/types/ui/consts.d.ts +1 -0
- package/dist/types-ts4.5/blockMenuPluginType.d.ts +41 -0
- package/dist/types-ts4.5/editor-actions/index.d.ts +52 -0
- package/dist/types-ts4.5/index.d.ts +1 -1
- package/dist/types-ts4.5/ui/block-menu-components.d.ts +2 -0
- package/dist/types-ts4.5/ui/block-menu-renderer.d.ts +18 -0
- package/dist/types-ts4.5/ui/consts.d.ts +1 -0
- package/package.json +6 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-block-menu
|
|
2
2
|
|
|
3
|
+
## 0.0.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`c930aab37d2a6`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/c930aab37d2a6) -
|
|
8
|
+
ED-28563: Block menu API to register menu items
|
|
9
|
+
- Updated dependencies
|
|
10
|
+
|
|
11
|
+
## 0.0.2
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- [#199487](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/199487)
|
|
16
|
+
[`53b66ca466092`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/53b66ca466092) -
|
|
17
|
+
ED-28963 Update block menu to be aligned with drag handle
|
|
18
|
+
- Updated dependencies
|
|
19
|
+
|
|
3
20
|
## 0.0.1
|
|
4
21
|
|
|
5
22
|
### Patch Changes
|
package/afm-cc/tsconfig.json
CHANGED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../../../tsconfig.entry-points.passionfruit.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"target": "es5",
|
|
5
|
+
"outDir": "../../../../../passionfruit/tsDist/@atlaskit__editor-plugin-block-menu/app",
|
|
6
|
+
"rootDir": "../",
|
|
7
|
+
"composite": true
|
|
8
|
+
},
|
|
9
|
+
"include": [
|
|
10
|
+
"../src/**/*.ts",
|
|
11
|
+
"../src/**/*.tsx"
|
|
12
|
+
],
|
|
13
|
+
"exclude": [
|
|
14
|
+
"../src/**/__tests__/*",
|
|
15
|
+
"../src/**/*.test.*",
|
|
16
|
+
"../src/**/test.*",
|
|
17
|
+
"../src/**/examples.*"
|
|
18
|
+
],
|
|
19
|
+
"references": [
|
|
20
|
+
{
|
|
21
|
+
"path": "../../../design-system/css/afm-passionfruit/tsconfig.json"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"path": "../../../design-system/dropdown-menu/afm-passionfruit/tsconfig.json"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"path": "../../editor-plugin-block-controls/afm-passionfruit/tsconfig.json"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"path": "../../editor-plugin-user-intent/afm-passionfruit/tsconfig.json"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"path": "../../editor-shared-styles/afm-passionfruit/tsconfig.json"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"path": "../../../design-system/icon/afm-passionfruit/tsconfig.json"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"path": "../../../design-system/icon-lab/afm-passionfruit/tsconfig.json"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"path": "../../../design-system/primitives/afm-passionfruit/tsconfig.json"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"path": "../../../design-system/tokens/afm-passionfruit/tsconfig.json"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"path": "../../editor-common/afm-passionfruit/tsconfig.json"
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
|
@@ -6,10 +6,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.blockMenuPlugin = void 0;
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _editorActions = require("./editor-actions");
|
|
9
10
|
var _main = require("./pm-plugins/main");
|
|
10
11
|
var _blockMenu = _interopRequireDefault(require("./ui/block-menu"));
|
|
12
|
+
var _blockMenuComponents = require("./ui/block-menu-components");
|
|
11
13
|
var blockMenuPlugin = exports.blockMenuPlugin = function blockMenuPlugin(_ref) {
|
|
12
14
|
var api = _ref.api;
|
|
15
|
+
var registry = (0, _editorActions.createBlockMenuRegistry)();
|
|
16
|
+
registry.register((0, _blockMenuComponents.getBlockMenuComponents)());
|
|
13
17
|
return {
|
|
14
18
|
name: 'blockMenu',
|
|
15
19
|
pmPlugins: function pmPlugins() {
|
|
@@ -18,6 +22,14 @@ var blockMenuPlugin = exports.blockMenuPlugin = function blockMenuPlugin(_ref) {
|
|
|
18
22
|
plugin: _main.createPlugin
|
|
19
23
|
}];
|
|
20
24
|
},
|
|
25
|
+
actions: {
|
|
26
|
+
registerBlockMenuComponents: function registerBlockMenuComponents(blockMenuComponents) {
|
|
27
|
+
registry.register(blockMenuComponents);
|
|
28
|
+
},
|
|
29
|
+
getBlockMenuComponents: function getBlockMenuComponents() {
|
|
30
|
+
return registry.components;
|
|
31
|
+
}
|
|
32
|
+
},
|
|
21
33
|
contentComponent: function contentComponent(_ref2) {
|
|
22
34
|
var editorView = _ref2.editorView,
|
|
23
35
|
popupsMountPoint = _ref2.popupsMountPoint,
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createBlockMenuRegistry = void 0;
|
|
8
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
+
/**
|
|
10
|
+
* Create a simple registry for block menu components.
|
|
11
|
+
*
|
|
12
|
+
* @returns A registry object with a `register` method and a `components` array.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* const registry = createBlockMenuRegistry();
|
|
17
|
+
* registry.register(
|
|
18
|
+
* [{
|
|
19
|
+
* type: 'block-menu-section' as const,
|
|
20
|
+
* key: 'block-menu-section-format',
|
|
21
|
+
* rank: 100,
|
|
22
|
+
* component: ({ children }: { children: React.ReactNode }) => {
|
|
23
|
+
* return <ToolbarDropdownItemSection>{children}</ToolbarDropdownItemSection>;
|
|
24
|
+
* },
|
|
25
|
+
* },
|
|
26
|
+
* {
|
|
27
|
+
* type: 'block-menu-nested' as const,
|
|
28
|
+
* key: 'nested-menu',
|
|
29
|
+
* parent: {
|
|
30
|
+
* type: 'block-menu-section' as const,
|
|
31
|
+
* key: 'block-menu-section-format',
|
|
32
|
+
* rank: 100,
|
|
33
|
+
* },
|
|
34
|
+
* component: () => {
|
|
35
|
+
* return (
|
|
36
|
+
* <ToolbarNestedDropdownMenu>{...}</ToolbarNestedDropdownMenu>
|
|
37
|
+
* );
|
|
38
|
+
* },
|
|
39
|
+
* },
|
|
40
|
+
* {
|
|
41
|
+
* type: 'block-menu-item' as const,
|
|
42
|
+
* key: 'block-menu-item-create-jira',
|
|
43
|
+
* parent: {
|
|
44
|
+
* type: 'block-menu-section' as const,
|
|
45
|
+
* key: 'block-menu-section-format',
|
|
46
|
+
* rank: 200,
|
|
47
|
+
* },
|
|
48
|
+
* component: () => {
|
|
49
|
+
* return <ToolbarDropdownItem elemBefore={<JiraIcon label="" />}>Create Jira work item</ToolbarDropdownItem>;
|
|
50
|
+
* },
|
|
51
|
+
* },
|
|
52
|
+
* ]);
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
*/
|
|
56
|
+
var createBlockMenuRegistry = exports.createBlockMenuRegistry = function createBlockMenuRegistry() {
|
|
57
|
+
var components = [];
|
|
58
|
+
var register = function register(blockMenuComponents) {
|
|
59
|
+
components.push.apply(components, (0, _toConsumableArray2.default)(blockMenuComponents));
|
|
60
|
+
};
|
|
61
|
+
return {
|
|
62
|
+
register: register,
|
|
63
|
+
components: components
|
|
64
|
+
};
|
|
65
|
+
};
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.getBlockMenuComponents = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _editorToolbar = require("@atlaskit/editor-toolbar");
|
|
10
|
+
var _jira = _interopRequireDefault(require("@atlaskit/icon-lab/core/jira"));
|
|
11
|
+
var _arrowDown = _interopRequireDefault(require("@atlaskit/icon/core/arrow-down"));
|
|
12
|
+
var _arrowUp = _interopRequireDefault(require("@atlaskit/icon/core/arrow-up"));
|
|
13
|
+
var _changes = _interopRequireDefault(require("@atlaskit/icon/core/changes"));
|
|
14
|
+
var _chevronRight = _interopRequireDefault(require("@atlaskit/icon/core/chevron-right"));
|
|
15
|
+
var _delete = _interopRequireDefault(require("@atlaskit/icon/core/delete"));
|
|
16
|
+
var _listBulleted = _interopRequireDefault(require("@atlaskit/icon/core/list-bulleted"));
|
|
17
|
+
var _task = _interopRequireDefault(require("@atlaskit/icon/core/task"));
|
|
18
|
+
var getBlockMenuComponents = exports.getBlockMenuComponents = function getBlockMenuComponents() {
|
|
19
|
+
return [{
|
|
20
|
+
type: 'block-menu-section',
|
|
21
|
+
key: 'block-menu-section-format',
|
|
22
|
+
rank: 100,
|
|
23
|
+
component: function component(_ref) {
|
|
24
|
+
var children = _ref.children;
|
|
25
|
+
return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItemSection, null, children);
|
|
26
|
+
}
|
|
27
|
+
}, {
|
|
28
|
+
type: 'block-menu-section',
|
|
29
|
+
key: 'block-menu-section-move-up-down',
|
|
30
|
+
rank: 200,
|
|
31
|
+
component: function component(_ref2) {
|
|
32
|
+
var children = _ref2.children;
|
|
33
|
+
return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItemSection, null, children);
|
|
34
|
+
}
|
|
35
|
+
}, {
|
|
36
|
+
type: 'block-menu-section',
|
|
37
|
+
key: 'block-menu-section-delete',
|
|
38
|
+
rank: 300,
|
|
39
|
+
component: function component(_ref3) {
|
|
40
|
+
var children = _ref3.children;
|
|
41
|
+
return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItemSection, null, children);
|
|
42
|
+
}
|
|
43
|
+
}, {
|
|
44
|
+
type: 'block-menu-nested',
|
|
45
|
+
key: 'nested-menu',
|
|
46
|
+
parent: {
|
|
47
|
+
type: 'block-menu-section',
|
|
48
|
+
key: 'block-menu-section-format',
|
|
49
|
+
rank: 100
|
|
50
|
+
},
|
|
51
|
+
component: function component() {
|
|
52
|
+
return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarNestedDropdownMenu, {
|
|
53
|
+
text: "Format",
|
|
54
|
+
elemBefore: /*#__PURE__*/_react.default.createElement(_changes.default, {
|
|
55
|
+
label: ""
|
|
56
|
+
}),
|
|
57
|
+
elemAfter: /*#__PURE__*/_react.default.createElement(_chevronRight.default, {
|
|
58
|
+
label: 'example nested menu'
|
|
59
|
+
})
|
|
60
|
+
}, /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItemSection, null, /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItem, {
|
|
61
|
+
elemBefore: /*#__PURE__*/_react.default.createElement(_task.default, {
|
|
62
|
+
label: ""
|
|
63
|
+
})
|
|
64
|
+
}, "Action item"), /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItem, {
|
|
65
|
+
elemBefore: /*#__PURE__*/_react.default.createElement(_listBulleted.default, {
|
|
66
|
+
label: ""
|
|
67
|
+
})
|
|
68
|
+
}, "Bullet list")));
|
|
69
|
+
}
|
|
70
|
+
}, {
|
|
71
|
+
type: 'block-menu-item',
|
|
72
|
+
key: 'block-menu-item-create-jira',
|
|
73
|
+
parent: {
|
|
74
|
+
type: 'block-menu-section',
|
|
75
|
+
key: 'block-menu-section-format',
|
|
76
|
+
rank: 200
|
|
77
|
+
},
|
|
78
|
+
component: function component() {
|
|
79
|
+
return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItem, {
|
|
80
|
+
elemBefore: /*#__PURE__*/_react.default.createElement(_jira.default, {
|
|
81
|
+
label: ""
|
|
82
|
+
})
|
|
83
|
+
}, "Create Jira work item");
|
|
84
|
+
}
|
|
85
|
+
}, {
|
|
86
|
+
type: 'block-menu-item',
|
|
87
|
+
key: 'block-menu-item-move-up',
|
|
88
|
+
parent: {
|
|
89
|
+
type: 'block-menu-section',
|
|
90
|
+
key: 'block-menu-section-move-up-down',
|
|
91
|
+
rank: 100
|
|
92
|
+
},
|
|
93
|
+
component: function component() {
|
|
94
|
+
return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItem, {
|
|
95
|
+
elemBefore: /*#__PURE__*/_react.default.createElement(_arrowUp.default, {
|
|
96
|
+
label: ""
|
|
97
|
+
})
|
|
98
|
+
}, "Move up");
|
|
99
|
+
}
|
|
100
|
+
}, {
|
|
101
|
+
type: 'block-menu-item',
|
|
102
|
+
key: 'block-menu-item-move-down',
|
|
103
|
+
parent: {
|
|
104
|
+
type: 'block-menu-section',
|
|
105
|
+
key: 'block-menu-section-move-up-down',
|
|
106
|
+
rank: 200
|
|
107
|
+
},
|
|
108
|
+
component: function component() {
|
|
109
|
+
return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItem, {
|
|
110
|
+
elemBefore: /*#__PURE__*/_react.default.createElement(_arrowDown.default, {
|
|
111
|
+
label: ""
|
|
112
|
+
})
|
|
113
|
+
}, "Move down");
|
|
114
|
+
}
|
|
115
|
+
}, {
|
|
116
|
+
type: 'block-menu-item',
|
|
117
|
+
key: 'block-menu-item-delete',
|
|
118
|
+
parent: {
|
|
119
|
+
type: 'block-menu-section',
|
|
120
|
+
key: 'block-menu-section-delete',
|
|
121
|
+
rank: 100
|
|
122
|
+
},
|
|
123
|
+
component: function component() {
|
|
124
|
+
return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItem, {
|
|
125
|
+
elemBefore: /*#__PURE__*/_react.default.createElement(_delete.default, {
|
|
126
|
+
label: ""
|
|
127
|
+
})
|
|
128
|
+
}, "Delete");
|
|
129
|
+
}
|
|
130
|
+
}];
|
|
131
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.BlockMenuRenderer = void 0;
|
|
9
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
12
|
+
var NoOp = function NoOp(props) {
|
|
13
|
+
return null;
|
|
14
|
+
};
|
|
15
|
+
var isMenuSection = function isMenuSection(component) {
|
|
16
|
+
return component.type === 'block-menu-section';
|
|
17
|
+
};
|
|
18
|
+
var isMenuItem = function isMenuItem(component) {
|
|
19
|
+
return component.type === 'block-menu-item';
|
|
20
|
+
};
|
|
21
|
+
var isNestedMenu = function isNestedMenu(component) {
|
|
22
|
+
return component.type === 'block-menu-nested';
|
|
23
|
+
};
|
|
24
|
+
var getSortedChildren = function getSortedChildren(components, parentKey) {
|
|
25
|
+
return components.filter(function (component) {
|
|
26
|
+
return component.parent.key === parentKey;
|
|
27
|
+
}).sort(function (a, b) {
|
|
28
|
+
return (a.parent.rank || 0) - (b.parent.rank || 0);
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
var getSortedSections = function getSortedSections(components) {
|
|
32
|
+
return components.filter(isMenuSection).sort(function (a, b) {
|
|
33
|
+
return (a.rank || 0) - (b.rank || 0);
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
var BlockMenuRenderer = exports.BlockMenuRenderer = function BlockMenuRenderer(_ref) {
|
|
37
|
+
var components = _ref.components,
|
|
38
|
+
fallbacks = _ref.fallbacks;
|
|
39
|
+
var menuSections = getSortedSections(components);
|
|
40
|
+
var menuItems = components.filter(isMenuItem);
|
|
41
|
+
var nestedMenus = components.filter(isNestedMenu);
|
|
42
|
+
return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, menuSections.map(function (section) {
|
|
43
|
+
var children = getSortedChildren([].concat((0, _toConsumableArray2.default)(menuItems), (0, _toConsumableArray2.default)(nestedMenus)), section.key).map(function (item) {
|
|
44
|
+
var ItemComponent = item.component || fallbacks.item || NoOp;
|
|
45
|
+
return /*#__PURE__*/_react.default.createElement(ItemComponent, {
|
|
46
|
+
key: item.key
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
var SectionComponent = section.component || fallbacks.section || NoOp;
|
|
50
|
+
return /*#__PURE__*/_react.default.createElement(SectionComponent, {
|
|
51
|
+
key: section.key
|
|
52
|
+
}, children);
|
|
53
|
+
}));
|
|
54
|
+
};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/* block-menu.tsx generated by @compiled/babel-plugin v0.36.1 */
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
4
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
5
|
Object.defineProperty(exports, "__esModule", {
|
|
7
6
|
value: true
|
|
@@ -12,87 +11,50 @@ var _runtime = require("@compiled/react/runtime");
|
|
|
12
11
|
var _react = _interopRequireWildcard(require("react"));
|
|
13
12
|
var _reactIntlNext = require("react-intl-next");
|
|
14
13
|
var _css = require("@atlaskit/css");
|
|
15
|
-
var _dropdownMenu = _interopRequireWildcard(require("@atlaskit/dropdown-menu"));
|
|
16
14
|
var _hooks = require("@atlaskit/editor-common/hooks");
|
|
17
15
|
var _ui = require("@atlaskit/editor-common/ui");
|
|
18
16
|
var _uiReact = require("@atlaskit/editor-common/ui-react");
|
|
19
17
|
var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
|
|
20
|
-
var
|
|
21
|
-
var _arrowDown = _interopRequireDefault(require("@atlaskit/icon/core/arrow-down"));
|
|
22
|
-
var _arrowUp = _interopRequireDefault(require("@atlaskit/icon/core/arrow-up"));
|
|
23
|
-
var _changes = _interopRequireDefault(require("@atlaskit/icon/core/changes"));
|
|
24
|
-
var _chevronRight = _interopRequireDefault(require("@atlaskit/icon/core/chevron-right"));
|
|
25
|
-
var _delete = _interopRequireDefault(require("@atlaskit/icon/core/delete"));
|
|
26
|
-
var _listBulleted = _interopRequireDefault(require("@atlaskit/icon/core/list-bulleted"));
|
|
27
|
-
var _task = _interopRequireDefault(require("@atlaskit/icon/core/task"));
|
|
18
|
+
var _editorToolbar = require("@atlaskit/editor-toolbar");
|
|
28
19
|
var _compiled = require("@atlaskit/primitives/compiled");
|
|
20
|
+
var _blockMenuRenderer = require("./block-menu-renderer");
|
|
29
21
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
30
22
|
var styles = {
|
|
31
23
|
base: "_2rkoglpi _bfhk1bhr _16qs1cd0"
|
|
32
24
|
};
|
|
25
|
+
var DRAG_HANDLE_SELECTOR = '[data-editor-block-ctrl-drag-handle=true]';
|
|
26
|
+
var DRAG_HANDLE_WIDTH = 12;
|
|
27
|
+
var DRAG_HANDLE_PADDING = 5;
|
|
33
28
|
var PopupWithListeners = (0, _uiReact.withReactEditorViewOuterListeners)(_ui.Popup);
|
|
34
|
-
var
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
shouldFitContainer: true,
|
|
38
|
-
trigger: function trigger(_ref) {
|
|
39
|
-
var triggerRef = _ref.triggerRef,
|
|
40
|
-
ariaControls = _ref['aria-controls'],
|
|
41
|
-
ariaHasPopup = _ref['aria-haspopup'],
|
|
42
|
-
ariaExpanded = _ref['aria-expanded'];
|
|
43
|
-
return /*#__PURE__*/_react.default.createElement(_dropdownMenu.DropdownItem, {
|
|
44
|
-
"aria-controls": ariaControls,
|
|
45
|
-
"aria-haspopup": ariaHasPopup,
|
|
46
|
-
"aria-expanded": ariaExpanded,
|
|
47
|
-
ref: triggerRef,
|
|
48
|
-
elemBefore: /*#__PURE__*/_react.default.createElement(_changes.default, {
|
|
49
|
-
label: ""
|
|
50
|
-
}),
|
|
51
|
-
elemAfter: /*#__PURE__*/_react.default.createElement(_chevronRight.default, {
|
|
52
|
-
label: ""
|
|
53
|
-
})
|
|
54
|
-
}, "Format");
|
|
55
|
-
}
|
|
56
|
-
}, /*#__PURE__*/_react.default.createElement(_dropdownMenu.DropdownItemGroup, null, /*#__PURE__*/_react.default.createElement(_dropdownMenu.DropdownItem, {
|
|
57
|
-
elemBefore: /*#__PURE__*/_react.default.createElement(_task.default, {
|
|
58
|
-
label: ""
|
|
59
|
-
})
|
|
60
|
-
}, "Action item"), /*#__PURE__*/_react.default.createElement(_dropdownMenu.DropdownItem, {
|
|
61
|
-
elemBefore: /*#__PURE__*/_react.default.createElement(_listBulleted.default, {
|
|
62
|
-
label: ""
|
|
63
|
-
})
|
|
64
|
-
}, "Bullet list")));
|
|
65
|
-
};
|
|
66
|
-
var BlockMenuContent = function BlockMenuContent() {
|
|
29
|
+
var BlockMenuContent = function BlockMenuContent(_ref) {
|
|
30
|
+
var _api$blockMenu;
|
|
31
|
+
var api = _ref.api;
|
|
67
32
|
var setOutsideClickTargetRef = (0, _react.useContext)(_uiReact.OutsideClickTargetRefContext);
|
|
33
|
+
var blockMenuComponents = api === null || api === void 0 || (_api$blockMenu = api.blockMenu) === null || _api$blockMenu === void 0 ? void 0 : _api$blockMenu.actions.getBlockMenuComponents();
|
|
68
34
|
return /*#__PURE__*/_react.default.createElement(_compiled.Box, {
|
|
69
35
|
testId: "editor-block-menu",
|
|
70
36
|
ref: setOutsideClickTargetRef,
|
|
71
37
|
xcss: (0, _css.cx)(styles.base)
|
|
72
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
elemBefore: /*#__PURE__*/_react.default.createElement(_delete.default, {
|
|
90
|
-
label: ""
|
|
91
|
-
})
|
|
92
|
-
}, "Delete")));
|
|
38
|
+
}, /*#__PURE__*/_react.default.createElement(_blockMenuRenderer.BlockMenuRenderer, {
|
|
39
|
+
components: blockMenuComponents || [],
|
|
40
|
+
fallbacks: {
|
|
41
|
+
nestedMenu: function nestedMenu() {
|
|
42
|
+
return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarNestedDropdownMenu, {
|
|
43
|
+
elemBefore: undefined,
|
|
44
|
+
elemAfter: undefined
|
|
45
|
+
}, /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItemSection, null, /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItem, null, "Block Menu Item")));
|
|
46
|
+
},
|
|
47
|
+
section: function section() {
|
|
48
|
+
return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItemSection, null, /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItem, null, "Block Menu Item"));
|
|
49
|
+
},
|
|
50
|
+
item: function item() {
|
|
51
|
+
return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItem, null, "Block Menu Item");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}));
|
|
93
55
|
};
|
|
94
56
|
var BlockMenu = function BlockMenu(_ref2) {
|
|
95
|
-
var _editorView$hasFocus;
|
|
57
|
+
var _editorView$hasFocus, _editorView$dom;
|
|
96
58
|
var editorView = _ref2.editorView,
|
|
97
59
|
api = _ref2.api,
|
|
98
60
|
mountTo = _ref2.mountTo,
|
|
@@ -126,8 +88,7 @@ var BlockMenu = function BlockMenu(_ref2) {
|
|
|
126
88
|
closeMenu();
|
|
127
89
|
return null;
|
|
128
90
|
}
|
|
129
|
-
var
|
|
130
|
-
var targetHandleRef = activeNodeSelector ? document.querySelector(activeNodeSelector) : null;
|
|
91
|
+
var targetHandleRef = (_editorView$dom = editorView.dom) === null || _editorView$dom === void 0 ? void 0 : _editorView$dom.querySelector(DRAG_HANDLE_SELECTOR);
|
|
131
92
|
if (targetHandleRef instanceof HTMLElement) {
|
|
132
93
|
return /*#__PURE__*/_react.default.createElement(PopupWithListeners, {
|
|
133
94
|
alignX: 'left',
|
|
@@ -141,8 +102,10 @@ var BlockMenu = function BlockMenu(_ref2) {
|
|
|
141
102
|
zIndex: _editorSharedStyles.akEditorFloatingOverlapPanelZIndex,
|
|
142
103
|
forcePlacement: true,
|
|
143
104
|
stick: true,
|
|
144
|
-
offset: [
|
|
145
|
-
}, /*#__PURE__*/_react.default.createElement(BlockMenuContent,
|
|
105
|
+
offset: [DRAG_HANDLE_WIDTH + DRAG_HANDLE_PADDING, 0]
|
|
106
|
+
}, /*#__PURE__*/_react.default.createElement(BlockMenuContent, {
|
|
107
|
+
api: api
|
|
108
|
+
}));
|
|
146
109
|
} else {
|
|
147
110
|
return null;
|
|
148
111
|
}
|
|
@@ -1,28 +1,42 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { createBlockMenuRegistry } from './editor-actions';
|
|
2
3
|
import { createPlugin } from './pm-plugins/main';
|
|
3
4
|
import BlockMenu from './ui/block-menu';
|
|
5
|
+
import { getBlockMenuComponents } from './ui/block-menu-components';
|
|
4
6
|
export const blockMenuPlugin = ({
|
|
5
7
|
api
|
|
6
|
-
}) =>
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
8
|
+
}) => {
|
|
9
|
+
const registry = createBlockMenuRegistry();
|
|
10
|
+
registry.register(getBlockMenuComponents());
|
|
11
|
+
return {
|
|
12
|
+
name: 'blockMenu',
|
|
13
|
+
pmPlugins() {
|
|
14
|
+
return [{
|
|
15
|
+
name: 'blockMenuPlugin',
|
|
16
|
+
plugin: createPlugin
|
|
17
|
+
}];
|
|
18
|
+
},
|
|
19
|
+
actions: {
|
|
20
|
+
registerBlockMenuComponents: blockMenuComponents => {
|
|
21
|
+
registry.register(blockMenuComponents);
|
|
22
|
+
},
|
|
23
|
+
getBlockMenuComponents: () => {
|
|
24
|
+
return registry.components;
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
contentComponent({
|
|
28
|
+
editorView,
|
|
29
|
+
popupsMountPoint,
|
|
30
|
+
popupsBoundariesElement,
|
|
31
|
+
popupsScrollableElement
|
|
32
|
+
}) {
|
|
33
|
+
return /*#__PURE__*/React.createElement(BlockMenu, {
|
|
34
|
+
editorView: editorView,
|
|
35
|
+
api: api,
|
|
36
|
+
mountTo: popupsMountPoint,
|
|
37
|
+
boundariesElement: popupsBoundariesElement,
|
|
38
|
+
scrollableElement: popupsScrollableElement
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create a simple registry for block menu components.
|
|
3
|
+
*
|
|
4
|
+
* @returns A registry object with a `register` method and a `components` array.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* const registry = createBlockMenuRegistry();
|
|
9
|
+
* registry.register(
|
|
10
|
+
* [{
|
|
11
|
+
* type: 'block-menu-section' as const,
|
|
12
|
+
* key: 'block-menu-section-format',
|
|
13
|
+
* rank: 100,
|
|
14
|
+
* component: ({ children }: { children: React.ReactNode }) => {
|
|
15
|
+
* return <ToolbarDropdownItemSection>{children}</ToolbarDropdownItemSection>;
|
|
16
|
+
* },
|
|
17
|
+
* },
|
|
18
|
+
* {
|
|
19
|
+
* type: 'block-menu-nested' as const,
|
|
20
|
+
* key: 'nested-menu',
|
|
21
|
+
* parent: {
|
|
22
|
+
* type: 'block-menu-section' as const,
|
|
23
|
+
* key: 'block-menu-section-format',
|
|
24
|
+
* rank: 100,
|
|
25
|
+
* },
|
|
26
|
+
* component: () => {
|
|
27
|
+
* return (
|
|
28
|
+
* <ToolbarNestedDropdownMenu>{...}</ToolbarNestedDropdownMenu>
|
|
29
|
+
* );
|
|
30
|
+
* },
|
|
31
|
+
* },
|
|
32
|
+
* {
|
|
33
|
+
* type: 'block-menu-item' as const,
|
|
34
|
+
* key: 'block-menu-item-create-jira',
|
|
35
|
+
* parent: {
|
|
36
|
+
* type: 'block-menu-section' as const,
|
|
37
|
+
* key: 'block-menu-section-format',
|
|
38
|
+
* rank: 200,
|
|
39
|
+
* },
|
|
40
|
+
* component: () => {
|
|
41
|
+
* return <ToolbarDropdownItem elemBefore={<JiraIcon label="" />}>Create Jira work item</ToolbarDropdownItem>;
|
|
42
|
+
* },
|
|
43
|
+
* },
|
|
44
|
+
* ]);
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
*/
|
|
48
|
+
export const createBlockMenuRegistry = () => {
|
|
49
|
+
const components = [];
|
|
50
|
+
const register = blockMenuComponents => {
|
|
51
|
+
components.push(...blockMenuComponents);
|
|
52
|
+
};
|
|
53
|
+
return {
|
|
54
|
+
register,
|
|
55
|
+
components
|
|
56
|
+
};
|
|
57
|
+
};
|