@atlaskit/editor-plugin-insert-block 18.0.6 → 18.1.0
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 +22 -0
- package/dist/cjs/ui/ToolbarInsertBlock/block-insert-element-browser.js +21 -3
- package/dist/cjs/ui/ToolbarInsertBlock/block-insert-menu.js +3 -1
- package/dist/cjs/ui/ToolbarInsertBlock/index.js +3 -1
- package/dist/cjs/ui/registered-insert-menu/RegisteredInsertButton.js +122 -0
- package/dist/cjs/ui/registered-insert-menu/RegisteredInsertMenu.compiled.css +11 -0
- package/dist/cjs/ui/registered-insert-menu/RegisteredInsertMenu.js +154 -0
- package/dist/cjs/ui/registered-insert-menu/RegisteredInsertMenuContent.js +53 -0
- package/dist/cjs/ui/registered-insert-menu/RegisteredInsertMenuItem.js +59 -0
- package/dist/cjs/ui/registered-insert-menu/RegisteredInsertMenuList.compiled.css +4 -0
- package/dist/cjs/ui/registered-insert-menu/RegisteredInsertMenuList.js +205 -0
- package/dist/cjs/ui/toolbar-components.js +5 -1
- package/dist/es2019/ui/ToolbarInsertBlock/block-insert-element-browser.js +21 -2
- package/dist/es2019/ui/ToolbarInsertBlock/block-insert-menu.js +3 -1
- package/dist/es2019/ui/ToolbarInsertBlock/index.js +3 -1
- package/dist/es2019/ui/registered-insert-menu/RegisteredInsertButton.js +107 -0
- package/dist/es2019/ui/registered-insert-menu/RegisteredInsertMenu.compiled.css +11 -0
- package/dist/es2019/ui/registered-insert-menu/RegisteredInsertMenu.js +117 -0
- package/dist/es2019/ui/registered-insert-menu/RegisteredInsertMenuContent.js +43 -0
- package/dist/es2019/ui/registered-insert-menu/RegisteredInsertMenuItem.js +49 -0
- package/dist/es2019/ui/registered-insert-menu/RegisteredInsertMenuList.compiled.css +4 -0
- package/dist/es2019/ui/registered-insert-menu/RegisteredInsertMenuList.js +161 -0
- package/dist/es2019/ui/toolbar-components.js +5 -1
- package/dist/esm/ui/ToolbarInsertBlock/block-insert-element-browser.js +21 -2
- package/dist/esm/ui/ToolbarInsertBlock/block-insert-menu.js +3 -1
- package/dist/esm/ui/ToolbarInsertBlock/index.js +3 -1
- package/dist/esm/ui/registered-insert-menu/RegisteredInsertButton.js +113 -0
- package/dist/esm/ui/registered-insert-menu/RegisteredInsertMenu.compiled.css +11 -0
- package/dist/esm/ui/registered-insert-menu/RegisteredInsertMenu.js +145 -0
- package/dist/esm/ui/registered-insert-menu/RegisteredInsertMenuContent.js +44 -0
- package/dist/esm/ui/registered-insert-menu/RegisteredInsertMenuItem.js +51 -0
- package/dist/esm/ui/registered-insert-menu/RegisteredInsertMenuList.compiled.css +4 -0
- package/dist/esm/ui/registered-insert-menu/RegisteredInsertMenuList.js +196 -0
- package/dist/esm/ui/toolbar-components.js +5 -1
- package/dist/types/types/index.d.ts +3 -1
- package/dist/types/ui/ToolbarInsertBlock/block-insert-element-browser.d.ts +1 -0
- package/dist/types/ui/ToolbarInsertBlock/block-insert-menu.d.ts +1 -0
- package/dist/types/ui/registered-insert-menu/RegisteredInsertButton.d.ts +12 -0
- package/dist/types/ui/registered-insert-menu/RegisteredInsertMenu.d.ts +12 -0
- package/dist/types/ui/registered-insert-menu/RegisteredInsertMenuContent.d.ts +15 -0
- package/dist/types/ui/registered-insert-menu/RegisteredInsertMenuItem.d.ts +15 -0
- package/dist/types/ui/registered-insert-menu/RegisteredInsertMenuList.d.ts +23 -0
- package/package.json +11 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-insert-block
|
|
2
2
|
|
|
3
|
+
## 18.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`df59babd59961`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/df59babd59961) -
|
|
8
|
+
Use registered Quick Insert items in both primary toolbar implementations when
|
|
9
|
+
`platform_editor_slash_command` is enabled, independently of the controls and AIFC experiments.
|
|
10
|
+
Share the registered menu model through an explicit editor-common subpath and use compact
|
|
11
|
+
presentation for typeahead and toolbar items.
|
|
12
|
+
|
|
13
|
+
Virtualize the toolbar menu, keep keyboard-selected items visible, and restore the bounded popup's
|
|
14
|
+
themed background and scrolling. Dismiss the popup on outside clicks and inset the search field
|
|
15
|
+
from its edges. When the experiment is enabled, ignore absent legacy Quick Insert handlers to
|
|
16
|
+
prevent suggestion crashes.
|
|
17
|
+
|
|
18
|
+
Provide persisted toolbar docking preferences in editor examples to support testing the primary
|
|
19
|
+
toolbar Insert menu.
|
|
20
|
+
|
|
21
|
+
### Patch Changes
|
|
22
|
+
|
|
23
|
+
- Updated dependencies
|
|
24
|
+
|
|
3
25
|
## 18.0.6
|
|
4
26
|
|
|
5
27
|
### Patch Changes
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.BlockInsertElementBrowser = void 0;
|
|
9
|
-
var _react =
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
9
|
var _ui = require("@atlaskit/editor-common/ui");
|
|
10
|
+
var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
|
|
11
11
|
var _InsertMenu = _interopRequireWildcard(require("../ElementBrowser/InsertMenu"));
|
|
12
|
+
var _RegisteredInsertMenuContent = require("../registered-insert-menu/RegisteredInsertMenuContent");
|
|
12
13
|
var _dropdownButton = require("./dropdown-button");
|
|
13
14
|
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); }
|
|
14
15
|
// This determines how the popup should fit. We prefer the insert menu
|
|
@@ -16,6 +17,15 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
|
|
|
16
17
|
// top if there is more than sufficient room.
|
|
17
18
|
var FIT_HEIGHT_BUFFER = 100;
|
|
18
19
|
var BlockInsertElementBrowser = exports.BlockInsertElementBrowser = function BlockInsertElementBrowser(props) {
|
|
20
|
+
var togglePlusMenuVisibility = props.togglePlusMenuVisibility,
|
|
21
|
+
plusButtonRef = props.plusButtonRef;
|
|
22
|
+
var closeRegisteredMenu = (0, _react.useCallback)(function () {
|
|
23
|
+
return togglePlusMenuVisibility();
|
|
24
|
+
}, [togglePlusMenuVisibility]);
|
|
25
|
+
var closeRegisteredMenuAndRestoreFocus = (0, _react.useCallback)(function () {
|
|
26
|
+
togglePlusMenuVisibility();
|
|
27
|
+
plusButtonRef === null || plusButtonRef === void 0 || plusButtonRef.focus();
|
|
28
|
+
}, [togglePlusMenuVisibility, plusButtonRef]);
|
|
19
29
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, props.open && /*#__PURE__*/_react.default.createElement(_ui.Popup, {
|
|
20
30
|
target: props.plusButtonRef,
|
|
21
31
|
fitHeight: _InsertMenu.DEFAULT_HEIGHT + FIT_HEIGHT_BUFFER,
|
|
@@ -28,7 +38,15 @@ var BlockInsertElementBrowser = exports.BlockInsertElementBrowser = function Blo
|
|
|
28
38
|
scrollableElement: props.popupsScrollableElement,
|
|
29
39
|
preventOverflow: true,
|
|
30
40
|
alignX: "right"
|
|
31
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
41
|
+
}, (0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_slash_command') ? /*#__PURE__*/_react.default.createElement(_RegisteredInsertMenuContent.RegisteredInsertMenuContent, {
|
|
42
|
+
api: props.pluginInjectionApi,
|
|
43
|
+
editorView: props.editorView,
|
|
44
|
+
isOffline: Boolean(props.isEditorOffline),
|
|
45
|
+
onClose: closeRegisteredMenuAndRestoreFocus,
|
|
46
|
+
onDismiss: closeRegisteredMenu,
|
|
47
|
+
onSelect: closeRegisteredMenu,
|
|
48
|
+
target: props.plusButtonRef
|
|
49
|
+
}) : /*#__PURE__*/_react.default.createElement(_InsertMenu.default, {
|
|
32
50
|
editorView: props.editorView,
|
|
33
51
|
dropdownItems: props.items,
|
|
34
52
|
onInsert: props.onInsert,
|
|
@@ -6,10 +6,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.BlockInsertMenu = void 0;
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
|
|
9
10
|
var _blockInsertElementBrowser = require("./block-insert-element-browser");
|
|
10
11
|
var _dropdownButton = require("./dropdown-button");
|
|
11
12
|
var BlockInsertMenu = exports.BlockInsertMenu = function BlockInsertMenu(props) {
|
|
12
|
-
if (props.items.length === 0 && !props.showElementBrowserLink) {
|
|
13
|
+
if (props.items.length === 0 && !props.showElementBrowserLink && !(0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_slash_command')) {
|
|
13
14
|
return null;
|
|
14
15
|
}
|
|
15
16
|
if (props.disabled) {
|
|
@@ -43,6 +44,7 @@ var BlockInsertMenu = exports.BlockInsertMenu = function BlockInsertMenu(props)
|
|
|
43
44
|
spacing: props.spacing,
|
|
44
45
|
togglePlusMenuVisibility: props.togglePlusMenuVisibility,
|
|
45
46
|
showElementBrowserLink: props.showElementBrowserLink,
|
|
47
|
+
isEditorOffline: props.isEditorOffline,
|
|
46
48
|
pluginInjectionApi: props.pluginInjectionApi,
|
|
47
49
|
isFullPageAppearance: props.isFullPageAppearance
|
|
48
50
|
});
|
|
@@ -25,6 +25,7 @@ var _uiMenu = require("@atlaskit/editor-common/ui-menu");
|
|
|
25
25
|
var _uiReact = require("@atlaskit/editor-common/ui-react");
|
|
26
26
|
var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
|
|
27
27
|
var _picker = require("@atlaskit/emoji/picker");
|
|
28
|
+
var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
|
|
28
29
|
var _fg = require("@atlaskit/platform-feature-flags/fg");
|
|
29
30
|
var _editorExperiment = require("@atlaskit/tmp-editor-statsig/editor-experiment");
|
|
30
31
|
var _filterDropdownItems = require("../toolbar-components/hooks/filterDropdownItems");
|
|
@@ -683,7 +684,7 @@ var ToolbarInsertBlock = exports.ToolbarInsertBlock = /*#__PURE__*/function (_Re
|
|
|
683
684
|
var value = _ref8.value;
|
|
684
685
|
return value.name === 'table selector';
|
|
685
686
|
});
|
|
686
|
-
if (buttons.length === 0 && dropdownItems.length === 0) {
|
|
687
|
+
if (buttons.length === 0 && dropdownItems.length === 0 && !(0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_slash_command')) {
|
|
687
688
|
return null;
|
|
688
689
|
}
|
|
689
690
|
var toolbarButtons = [];
|
|
@@ -790,6 +791,7 @@ var ToolbarInsertBlock = exports.ToolbarInsertBlock = /*#__PURE__*/function (_Re
|
|
|
790
791
|
onInsert: this.insertInsertMenuItem,
|
|
791
792
|
togglePlusMenuVisibility: this.togglePlusMenuVisibility,
|
|
792
793
|
showElementBrowserLink: this.props.showElementBrowserLink || false,
|
|
794
|
+
isEditorOffline: this.props.isEditorOffline,
|
|
793
795
|
pluginInjectionApi: this.props.pluginInjectionApi,
|
|
794
796
|
isFullPageAppearance: isFullPageAppearance
|
|
795
797
|
})), (!((_this$props$pluginInj = this.props.pluginInjectionApi) !== null && _this$props$pluginInj !== void 0 && _this$props$pluginInj.primaryToolbar) && this.props.showSeparator || isFullPageAppearance && (0, _editorExperiment.editorExperiment)('platform_editor_controls', 'variant1')) && /* eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage */
|
|
@@ -0,0 +1,122 @@
|
|
|
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.RegisteredInsertButton = void 0;
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _reactIntl = require("react-intl");
|
|
12
|
+
var _keymaps = require("@atlaskit/editor-common/keymaps");
|
|
13
|
+
var _messages = require("@atlaskit/editor-common/messages");
|
|
14
|
+
var _hooks = require("@atlaskit/editor-common/hooks");
|
|
15
|
+
var _toolbar = require("@atlaskit/editor-common/toolbar");
|
|
16
|
+
var _ui = require("@atlaskit/editor-common/ui");
|
|
17
|
+
var _connectivityPluginType = require("@atlaskit/editor-plugin-connectivity/connectivityPluginType");
|
|
18
|
+
var _constants = require("@atlaskit/editor-shared-styles/constants");
|
|
19
|
+
var _addIcon = require("@atlaskit/editor-toolbar/add-icon");
|
|
20
|
+
var _toolbarButton = require("@atlaskit/editor-toolbar/toolbar-button");
|
|
21
|
+
var _toolbarTooltip = require("@atlaskit/editor-toolbar/toolbar-tooltip");
|
|
22
|
+
var _uiContext = require("@atlaskit/editor-toolbar/ui-context");
|
|
23
|
+
var _RegisteredInsertMenuContent = require("./RegisteredInsertMenuContent");
|
|
24
|
+
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); }
|
|
25
|
+
var DEFAULT_MENU_MAX_HEIGHT = 520;
|
|
26
|
+
var FIT_HEIGHT_BUFFER = 100;
|
|
27
|
+
var POPUP_OFFSET = [0, 3];
|
|
28
|
+
/**
|
|
29
|
+
* The toolbar owns its popup lifecycle, but renders the same registered items
|
|
30
|
+
* and menu model as slash command.
|
|
31
|
+
*/
|
|
32
|
+
var RegisteredInsertButton = exports.RegisteredInsertButton = function RegisteredInsertButton(_ref) {
|
|
33
|
+
var api = _ref.api;
|
|
34
|
+
var _useEditorToolbar = (0, _toolbar.useEditorToolbar)(),
|
|
35
|
+
editorView = _useEditorToolbar.editorView;
|
|
36
|
+
var _useIntl = (0, _reactIntl.useIntl)(),
|
|
37
|
+
formatMessage = _useIntl.formatMessage;
|
|
38
|
+
var _useToolbarUI = (0, _uiContext.useToolbarUI)(),
|
|
39
|
+
isDisabled = _useToolbarUI.isDisabled,
|
|
40
|
+
popupsBoundariesElement = _useToolbarUI.popupsBoundariesElement,
|
|
41
|
+
popupsMountPoint = _useToolbarUI.popupsMountPoint,
|
|
42
|
+
popupsScrollableElement = _useToolbarUI.popupsScrollableElement;
|
|
43
|
+
var _useState = (0, _react.useState)(false),
|
|
44
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
45
|
+
isOpen = _useState2[0],
|
|
46
|
+
setIsOpen = _useState2[1];
|
|
47
|
+
var buttonRef = (0, _react.useRef)(null);
|
|
48
|
+
var _useSharedPluginState = (0, _hooks.useSharedPluginStateWithSelector)(api, ['connectivity', 'typeAhead'], function (states) {
|
|
49
|
+
var _states$connectivityS, _states$typeAheadStat;
|
|
50
|
+
return {
|
|
51
|
+
connectivityMode: (_states$connectivityS = states.connectivityState) === null || _states$connectivityS === void 0 ? void 0 : _states$connectivityS.mode,
|
|
52
|
+
isAllowed: (_states$typeAheadStat = states.typeAheadState) === null || _states$typeAheadStat === void 0 ? void 0 : _states$typeAheadStat.isAllowed
|
|
53
|
+
};
|
|
54
|
+
}),
|
|
55
|
+
connectivityMode = _useSharedPluginState.connectivityMode,
|
|
56
|
+
isAllowed = _useSharedPluginState.isAllowed;
|
|
57
|
+
var close = (0, _react.useCallback)(function () {
|
|
58
|
+
var restoreFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
59
|
+
setIsOpen(false);
|
|
60
|
+
if (restoreFocus) {
|
|
61
|
+
requestAnimationFrame(function () {
|
|
62
|
+
var _buttonRef$current;
|
|
63
|
+
return (_buttonRef$current = buttonRef.current) === null || _buttonRef$current === void 0 ? void 0 : _buttonRef$current.focus();
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}, []);
|
|
67
|
+
var open = (0, _react.useCallback)(function () {
|
|
68
|
+
setIsOpen(true);
|
|
69
|
+
}, []);
|
|
70
|
+
var onPopupUnmount = (0, _react.useCallback)(function () {
|
|
71
|
+
// Outside dismissal must not move focus away from the element that was clicked.
|
|
72
|
+
setIsOpen(false);
|
|
73
|
+
}, []);
|
|
74
|
+
var closeAndRestoreFocus = (0, _react.useCallback)(function () {
|
|
75
|
+
return close(true);
|
|
76
|
+
}, [close]);
|
|
77
|
+
var closeForSelection = (0, _react.useCallback)(function () {
|
|
78
|
+
return close(false);
|
|
79
|
+
}, [close]);
|
|
80
|
+
if (!(api !== null && api !== void 0 && api.insertBlock) || !editorView) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_toolbarTooltip.ToolbarTooltip, {
|
|
84
|
+
content: /*#__PURE__*/_react.default.createElement(_keymaps.ToolTipContent, {
|
|
85
|
+
description: formatMessage(_messages.toolbarInsertBlockMessages.insertMenu),
|
|
86
|
+
keymap: _keymaps.insertElements
|
|
87
|
+
})
|
|
88
|
+
}, /*#__PURE__*/_react.default.createElement(_toolbarButton.ToolbarButton, {
|
|
89
|
+
ariaKeyshortcuts: (0, _keymaps.getAriaKeyshortcuts)(_keymaps.insertElements),
|
|
90
|
+
iconBefore: /*#__PURE__*/_react.default.createElement(_addIcon.AddIcon, {
|
|
91
|
+
size: "small",
|
|
92
|
+
label: formatMessage(_messages.toolbarInsertBlockMessages.insertMenu)
|
|
93
|
+
}),
|
|
94
|
+
isDisabled: !isAllowed || isDisabled,
|
|
95
|
+
isSelected: isOpen,
|
|
96
|
+
onClick: isOpen ? function () {
|
|
97
|
+
return close(true);
|
|
98
|
+
} : open,
|
|
99
|
+
ref: buttonRef,
|
|
100
|
+
testId: _toolbar.TOOLBAR_BUTTON_TEST_ID.INSERT
|
|
101
|
+
})), isOpen && buttonRef.current && /*#__PURE__*/_react.default.createElement(_ui.Popup, {
|
|
102
|
+
alignX: "right",
|
|
103
|
+
boundariesElement: popupsBoundariesElement,
|
|
104
|
+
fitHeight: DEFAULT_MENU_MAX_HEIGHT + FIT_HEIGHT_BUFFER,
|
|
105
|
+
fitWidth: 350,
|
|
106
|
+
mountTo: popupsMountPoint,
|
|
107
|
+
offset: POPUP_OFFSET,
|
|
108
|
+
onUnmount: onPopupUnmount,
|
|
109
|
+
preventOverflow: true,
|
|
110
|
+
scrollableElement: popupsScrollableElement,
|
|
111
|
+
target: buttonRef.current,
|
|
112
|
+
zIndex: _constants.akEditorMenuZIndex
|
|
113
|
+
}, /*#__PURE__*/_react.default.createElement(_RegisteredInsertMenuContent.RegisteredInsertMenuContent, {
|
|
114
|
+
api: api,
|
|
115
|
+
editorView: editorView,
|
|
116
|
+
isOffline: (0, _connectivityPluginType.isOfflineMode)(connectivityMode),
|
|
117
|
+
onClose: closeAndRestoreFocus,
|
|
118
|
+
onDismiss: closeForSelection,
|
|
119
|
+
onSelect: closeForSelection,
|
|
120
|
+
target: buttonRef.current
|
|
121
|
+
})));
|
|
122
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
._2rko12b0{border-radius:var(--ds-radius-small,4px)}
|
|
2
|
+
._18zrutpp{padding-inline:var(--ds-space-150,9pt)}
|
|
3
|
+
._1rjcutpp{padding-block:var(--ds-space-150,9pt)}._16qs130s{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #1e1f2126,0 0 1px #1e1f214f)}
|
|
4
|
+
._18m915vq{overflow-y:hidden}
|
|
5
|
+
._1bsb1edt{width:350px}
|
|
6
|
+
._1e0c1txw{display:flex}
|
|
7
|
+
._1o9zidpf{flex-shrink:0}
|
|
8
|
+
._1reo15vq{overflow-x:hidden}
|
|
9
|
+
._2lx21bp4{flex-direction:column}
|
|
10
|
+
._bfhk1bhr{background-color:var(--ds-surface-overlay,#fff)}
|
|
11
|
+
._c71l1lk4{max-height:520px}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/* RegisteredInsertMenu.tsx generated by @compiled/babel-plugin v3.0.1 */
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
exports.RegisteredInsertMenu = void 0;
|
|
10
|
+
require("./RegisteredInsertMenu.compiled.css");
|
|
11
|
+
var _runtime = require("@compiled/react/runtime");
|
|
12
|
+
var _toArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toArray"));
|
|
13
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
14
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
15
|
+
var _browserApis = require("@atlaskit/browser-apis");
|
|
16
|
+
var _reactIntl = require("react-intl");
|
|
17
|
+
var _messages = require("@atlaskit/editor-common/messages");
|
|
18
|
+
var _registeredMenuModel = require("@atlaskit/editor-common/quick-insert/registered-menu-model");
|
|
19
|
+
var _keys = require("@atlaskit/editor-common/quick-insert/keys");
|
|
20
|
+
var _typeAheadSurfaceContext = require("@atlaskit/editor-common/type-ahead-surface-context");
|
|
21
|
+
var _createSurfaceContext = require("@atlaskit/editor-ui-control-model/create-surface-context");
|
|
22
|
+
var _compiled = require("@atlaskit/primitives/compiled");
|
|
23
|
+
var _textField = _interopRequireDefault(require("@atlaskit/textfield/text-field"));
|
|
24
|
+
var _RegisteredInsertMenuList = require("./RegisteredInsertMenuList");
|
|
25
|
+
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); }
|
|
26
|
+
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; }
|
|
27
|
+
var DEFAULT_MENU_MAX_HEIGHT = 520;
|
|
28
|
+
var styles = {
|
|
29
|
+
menu: "_2rko12b0 _1reo15vq _18m915vq _bfhk1bhr _16qs130s _1e0c1txw _2lx21bp4 _c71l1lk4 _1bsb1edt",
|
|
30
|
+
search: "_1rjcutpp _18zrutpp _1o9zidpf"
|
|
31
|
+
};
|
|
32
|
+
var RegisteredInsertMenu = exports.RegisteredInsertMenu = function RegisteredInsertMenu(_ref) {
|
|
33
|
+
var components = _ref.components,
|
|
34
|
+
editorView = _ref.editorView,
|
|
35
|
+
isOffline = _ref.isOffline,
|
|
36
|
+
onClose = _ref.onClose,
|
|
37
|
+
onSelect = _ref.onSelect;
|
|
38
|
+
var _useIntl = (0, _reactIntl.useIntl)(),
|
|
39
|
+
formatMessage = _useIntl.formatMessage;
|
|
40
|
+
var listId = (0, _react.useId)();
|
|
41
|
+
var _useState = (0, _react.useState)(function () {
|
|
42
|
+
return Symbol('registered-insert-menu-open');
|
|
43
|
+
}),
|
|
44
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 1),
|
|
45
|
+
menuOpenId = _useState2[0];
|
|
46
|
+
var _useState3 = (0, _react.useState)(''),
|
|
47
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
48
|
+
query = _useState4[0],
|
|
49
|
+
setQuery = _useState4[1];
|
|
50
|
+
var _useState5 = (0, _react.useState)(0),
|
|
51
|
+
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
52
|
+
selectedItemIndex = _useState6[0],
|
|
53
|
+
setSelectedItemIndex = _useState6[1];
|
|
54
|
+
var _useState7 = (0, _react.useState)({
|
|
55
|
+
startIndex: -1,
|
|
56
|
+
stopIndex: -1
|
|
57
|
+
}),
|
|
58
|
+
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
|
|
59
|
+
renderedItems = _useState8[0],
|
|
60
|
+
setRenderedItems = _useState8[1];
|
|
61
|
+
var surfaceContext = (0, _react.useMemo)(function () {
|
|
62
|
+
return (0, _createSurfaceContext.createSurfaceContext)(_typeAheadSurfaceContext.TYPE_AHEAD_SURFACE_CONTEXT, {
|
|
63
|
+
menuOpenId: menuOpenId
|
|
64
|
+
});
|
|
65
|
+
}, [menuOpenId]);
|
|
66
|
+
var model = (0, _react.useMemo)(function () {
|
|
67
|
+
return query === '' ? (0, _registeredMenuModel.buildQuickInsertMenuModel)(components, _keys.MENU, undefined, surfaceContext) : (0, _registeredMenuModel.getMatchingQuickInsertComponents)({
|
|
68
|
+
components: components,
|
|
69
|
+
formatMessage: formatMessage,
|
|
70
|
+
query: query,
|
|
71
|
+
rootComponent: _keys.MENU,
|
|
72
|
+
surfaceContext: surfaceContext
|
|
73
|
+
});
|
|
74
|
+
}, [components, formatMessage, query, surfaceContext]);
|
|
75
|
+
var itemCount = (0, _react.useMemo)(function () {
|
|
76
|
+
return model.sections.reduce(function (count, _ref2) {
|
|
77
|
+
var _ref3 = (0, _toArray2.default)(_ref2),
|
|
78
|
+
items = _arrayLikeToArray(_ref3).slice(1);
|
|
79
|
+
return count + items.length;
|
|
80
|
+
}, 0) + (model.footer ? 1 : 0);
|
|
81
|
+
}, [model.footer, model.sections]);
|
|
82
|
+
var isActiveItemMounted = selectedItemIndex >= 0 && selectedItemIndex < itemCount && (selectedItemIndex >= renderedItems.startIndex && selectedItemIndex <= renderedItems.stopIndex || Boolean(model.footer) && selectedItemIndex === itemCount - 1);
|
|
83
|
+
var activeItemId = "".concat(listId, "-").concat(selectedItemIndex);
|
|
84
|
+
var selectNextItem = (0, _react.useCallback)(function () {
|
|
85
|
+
setSelectedItemIndex(function (index) {
|
|
86
|
+
return itemCount === 0 ? -1 : (index + 1) % itemCount;
|
|
87
|
+
});
|
|
88
|
+
}, [itemCount]);
|
|
89
|
+
var selectPreviousItem = (0, _react.useCallback)(function () {
|
|
90
|
+
setSelectedItemIndex(function (index) {
|
|
91
|
+
return itemCount === 0 ? -1 : index <= 0 ? itemCount - 1 : index - 1;
|
|
92
|
+
});
|
|
93
|
+
}, [itemCount]);
|
|
94
|
+
var selectActiveItem = (0, _react.useCallback)(function () {
|
|
95
|
+
if (isActiveItemMounted) {
|
|
96
|
+
var _getDocument;
|
|
97
|
+
(_getDocument = (0, _browserApis.getDocument)()) === null || _getDocument === void 0 || (_getDocument = _getDocument.getElementById(activeItemId)) === null || _getDocument === void 0 || _getDocument.click();
|
|
98
|
+
}
|
|
99
|
+
}, [activeItemId, isActiveItemMounted]);
|
|
100
|
+
var onQueryChange = (0, _react.useCallback)(function (event) {
|
|
101
|
+
setQuery(event.currentTarget.value);
|
|
102
|
+
setSelectedItemIndex(0);
|
|
103
|
+
}, []);
|
|
104
|
+
var onKeyDown = (0, _react.useCallback)(function (event) {
|
|
105
|
+
switch (event.key) {
|
|
106
|
+
case 'ArrowDown':
|
|
107
|
+
event.preventDefault();
|
|
108
|
+
selectNextItem();
|
|
109
|
+
break;
|
|
110
|
+
case 'ArrowUp':
|
|
111
|
+
event.preventDefault();
|
|
112
|
+
selectPreviousItem();
|
|
113
|
+
break;
|
|
114
|
+
case 'Enter':
|
|
115
|
+
event.preventDefault();
|
|
116
|
+
selectActiveItem();
|
|
117
|
+
break;
|
|
118
|
+
case 'Escape':
|
|
119
|
+
event.preventDefault();
|
|
120
|
+
onClose();
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
}, [onClose, selectActiveItem, selectNextItem, selectPreviousItem]);
|
|
124
|
+
return /*#__PURE__*/_react.default.createElement(_compiled.Box, {
|
|
125
|
+
"data-registered-insert-menu": "",
|
|
126
|
+
testId: "registered-insert-menu",
|
|
127
|
+
onKeyDownCapture: onKeyDown,
|
|
128
|
+
xcss: styles.menu
|
|
129
|
+
}, /*#__PURE__*/_react.default.createElement(_compiled.Box, {
|
|
130
|
+
xcss: styles.search
|
|
131
|
+
}, /*#__PURE__*/_react.default.createElement(_textField.default, {
|
|
132
|
+
"aria-activedescendant": isActiveItemMounted ? activeItemId : undefined,
|
|
133
|
+
"aria-controls": listId,
|
|
134
|
+
"aria-expanded": "true",
|
|
135
|
+
autoFocus: true,
|
|
136
|
+
placeholder: "Search",
|
|
137
|
+
role: "combobox",
|
|
138
|
+
value: query,
|
|
139
|
+
onChange: onQueryChange
|
|
140
|
+
})), /*#__PURE__*/_react.default.createElement(_RegisteredInsertMenuList.RegisteredInsertMenuList, {
|
|
141
|
+
editorView: editorView,
|
|
142
|
+
isOffline: isOffline,
|
|
143
|
+
listId: listId,
|
|
144
|
+
listLabel: formatMessage(_messages.toolbarInsertBlockMessages.insertMenu),
|
|
145
|
+
maxHeight: DEFAULT_MENU_MAX_HEIGHT,
|
|
146
|
+
menuOpenId: menuOpenId,
|
|
147
|
+
model: model,
|
|
148
|
+
onClose: onSelect,
|
|
149
|
+
onItemHover: setSelectedItemIndex,
|
|
150
|
+
onRenderedItemsChange: setRenderedItems,
|
|
151
|
+
selectedItemIndex: selectedItemIndex,
|
|
152
|
+
surfaceContext: surfaceContext
|
|
153
|
+
}));
|
|
154
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
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.RegisteredInsertMenuContent = void 0;
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _keys = require("@atlaskit/editor-common/quick-insert/keys");
|
|
12
|
+
var _ui = require("@atlaskit/editor-common/ui");
|
|
13
|
+
var _RegisteredInsertMenu = require("./RegisteredInsertMenu");
|
|
14
|
+
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); }
|
|
15
|
+
var RegisteredInsertMenuContainer = function RegisteredInsertMenuContainer(_ref) {
|
|
16
|
+
var children = _ref.children;
|
|
17
|
+
var setOutsideClickTargetRef = (0, _react.useContext)(_ui.PlainOutsideClickTargetRefContext);
|
|
18
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
19
|
+
ref: setOutsideClickTargetRef
|
|
20
|
+
}, children);
|
|
21
|
+
};
|
|
22
|
+
var RegisteredInsertMenuWithListeners = (0, _ui.withOuterListeners)(RegisteredInsertMenuContainer);
|
|
23
|
+
var RegisteredInsertMenuContent = exports.RegisteredInsertMenuContent = function RegisteredInsertMenuContent(_ref2) {
|
|
24
|
+
var api = _ref2.api,
|
|
25
|
+
editorView = _ref2.editorView,
|
|
26
|
+
isOffline = _ref2.isOffline,
|
|
27
|
+
onClose = _ref2.onClose,
|
|
28
|
+
onDismiss = _ref2.onDismiss,
|
|
29
|
+
onSelect = _ref2.onSelect,
|
|
30
|
+
target = _ref2.target;
|
|
31
|
+
// Keep registrations stable while the open menu is searched or navigated.
|
|
32
|
+
var _useState = (0, _react.useState)(function () {
|
|
33
|
+
var _api$uiControlRegistr, _api$uiControlRegistr2;
|
|
34
|
+
return (_api$uiControlRegistr = api === null || api === void 0 || (_api$uiControlRegistr2 = api.uiControlRegistry) === null || _api$uiControlRegistr2 === void 0 ? void 0 : _api$uiControlRegistr2.actions.getComponents(_keys.MENU.key)) !== null && _api$uiControlRegistr !== void 0 ? _api$uiControlRegistr : [];
|
|
35
|
+
}),
|
|
36
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 1),
|
|
37
|
+
components = _useState2[0];
|
|
38
|
+
var onClickOutside = (0, _react.useCallback)(function (event) {
|
|
39
|
+
if (event.target instanceof Node && target !== null && target !== void 0 && target.contains(event.target)) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
onDismiss();
|
|
43
|
+
}, [onDismiss, target]);
|
|
44
|
+
return /*#__PURE__*/_react.default.createElement(RegisteredInsertMenuWithListeners, {
|
|
45
|
+
handleClickOutside: onClickOutside
|
|
46
|
+
}, /*#__PURE__*/_react.default.createElement(_RegisteredInsertMenu.RegisteredInsertMenu, {
|
|
47
|
+
components: components,
|
|
48
|
+
editorView: editorView,
|
|
49
|
+
isOffline: isOffline,
|
|
50
|
+
onClose: onClose,
|
|
51
|
+
onSelect: onSelect
|
|
52
|
+
}));
|
|
53
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.RegisteredInsertMenuItem = void 0;
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
10
|
+
var _insert = require("@atlaskit/editor-common/insert");
|
|
11
|
+
var _provider = require("@atlaskit/editor-common/quick-insert/provider");
|
|
12
|
+
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); }
|
|
13
|
+
var RegisteredInsertMenuItem = exports.RegisteredInsertMenuItem = function RegisteredInsertMenuItem(_ref) {
|
|
14
|
+
var _registration$compone;
|
|
15
|
+
var editorView = _ref.editorView,
|
|
16
|
+
id = _ref.id,
|
|
17
|
+
isOffline = _ref.isOffline,
|
|
18
|
+
isSelected = _ref.isSelected,
|
|
19
|
+
menuOpenId = _ref.menuOpenId,
|
|
20
|
+
onClose = _ref.onClose,
|
|
21
|
+
registration = _ref.registration,
|
|
22
|
+
surfaceContext = _ref.surfaceContext;
|
|
23
|
+
var Component = (_registration$compone = registration.component) !== null && _registration$compone !== void 0 ? _registration$compone : _react.default.Fragment;
|
|
24
|
+
var select = (0, _react.useCallback)(function (selectionHandler) {
|
|
25
|
+
// Close first so a registered item may safely focus the editor or open its picker.
|
|
26
|
+
onClose();
|
|
27
|
+
queueMicrotask(function () {
|
|
28
|
+
var state = editorView.state;
|
|
29
|
+
var insert = function insert(content) {
|
|
30
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
31
|
+
return (0, _insert.insertSelectedItem)(content, options)(state, state.tr, state.selection.head);
|
|
32
|
+
};
|
|
33
|
+
var transaction = selectionHandler({
|
|
34
|
+
insert: insert,
|
|
35
|
+
source: _analytics.INPUT_METHOD.INSERT_MENU
|
|
36
|
+
});
|
|
37
|
+
if (transaction) {
|
|
38
|
+
editorView.dispatch(transaction);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}, [editorView, onClose]);
|
|
42
|
+
var contextValue = (0, _react.useMemo)(function () {
|
|
43
|
+
return {
|
|
44
|
+
editorView: editorView,
|
|
45
|
+
isOffline: isOffline,
|
|
46
|
+
item: {
|
|
47
|
+
id: id,
|
|
48
|
+
isSelected: isSelected
|
|
49
|
+
},
|
|
50
|
+
menuOpenId: menuOpenId,
|
|
51
|
+
select: select,
|
|
52
|
+
surface: 'toolbar',
|
|
53
|
+
surfaceContext: surfaceContext
|
|
54
|
+
};
|
|
55
|
+
}, [editorView, id, isOffline, isSelected, menuOpenId, select, surfaceContext]);
|
|
56
|
+
return /*#__PURE__*/_react.default.createElement(_provider.QuickInsertProvider, {
|
|
57
|
+
value: contextValue
|
|
58
|
+
}, /*#__PURE__*/_react.default.createElement(Component, null, null));
|
|
59
|
+
};
|