@atlaskit/editor-plugin-insert-block 18.0.6 → 18.1.1

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 (43) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/cjs/ui/ToolbarInsertBlock/block-insert-element-browser.js +21 -3
  3. package/dist/cjs/ui/ToolbarInsertBlock/block-insert-menu.js +3 -1
  4. package/dist/cjs/ui/ToolbarInsertBlock/index.js +3 -1
  5. package/dist/cjs/ui/registered-insert-menu/RegisteredInsertButton.js +122 -0
  6. package/dist/cjs/ui/registered-insert-menu/RegisteredInsertMenu.compiled.css +11 -0
  7. package/dist/cjs/ui/registered-insert-menu/RegisteredInsertMenu.js +154 -0
  8. package/dist/cjs/ui/registered-insert-menu/RegisteredInsertMenuContent.js +53 -0
  9. package/dist/cjs/ui/registered-insert-menu/RegisteredInsertMenuItem.js +59 -0
  10. package/dist/cjs/ui/registered-insert-menu/RegisteredInsertMenuList.compiled.css +4 -0
  11. package/dist/cjs/ui/registered-insert-menu/RegisteredInsertMenuList.js +205 -0
  12. package/dist/cjs/ui/toolbar-components.js +5 -1
  13. package/dist/es2019/ui/ToolbarInsertBlock/block-insert-element-browser.js +21 -2
  14. package/dist/es2019/ui/ToolbarInsertBlock/block-insert-menu.js +3 -1
  15. package/dist/es2019/ui/ToolbarInsertBlock/index.js +3 -1
  16. package/dist/es2019/ui/registered-insert-menu/RegisteredInsertButton.js +107 -0
  17. package/dist/es2019/ui/registered-insert-menu/RegisteredInsertMenu.compiled.css +11 -0
  18. package/dist/es2019/ui/registered-insert-menu/RegisteredInsertMenu.js +117 -0
  19. package/dist/es2019/ui/registered-insert-menu/RegisteredInsertMenuContent.js +43 -0
  20. package/dist/es2019/ui/registered-insert-menu/RegisteredInsertMenuItem.js +49 -0
  21. package/dist/es2019/ui/registered-insert-menu/RegisteredInsertMenuList.compiled.css +4 -0
  22. package/dist/es2019/ui/registered-insert-menu/RegisteredInsertMenuList.js +161 -0
  23. package/dist/es2019/ui/toolbar-components.js +5 -1
  24. package/dist/esm/ui/ToolbarInsertBlock/block-insert-element-browser.js +21 -2
  25. package/dist/esm/ui/ToolbarInsertBlock/block-insert-menu.js +3 -1
  26. package/dist/esm/ui/ToolbarInsertBlock/index.js +3 -1
  27. package/dist/esm/ui/registered-insert-menu/RegisteredInsertButton.js +113 -0
  28. package/dist/esm/ui/registered-insert-menu/RegisteredInsertMenu.compiled.css +11 -0
  29. package/dist/esm/ui/registered-insert-menu/RegisteredInsertMenu.js +145 -0
  30. package/dist/esm/ui/registered-insert-menu/RegisteredInsertMenuContent.js +44 -0
  31. package/dist/esm/ui/registered-insert-menu/RegisteredInsertMenuItem.js +51 -0
  32. package/dist/esm/ui/registered-insert-menu/RegisteredInsertMenuList.compiled.css +4 -0
  33. package/dist/esm/ui/registered-insert-menu/RegisteredInsertMenuList.js +196 -0
  34. package/dist/esm/ui/toolbar-components.js +5 -1
  35. package/dist/types/types/index.d.ts +3 -1
  36. package/dist/types/ui/ToolbarInsertBlock/block-insert-element-browser.d.ts +1 -0
  37. package/dist/types/ui/ToolbarInsertBlock/block-insert-menu.d.ts +1 -0
  38. package/dist/types/ui/registered-insert-menu/RegisteredInsertButton.d.ts +12 -0
  39. package/dist/types/ui/registered-insert-menu/RegisteredInsertMenu.d.ts +12 -0
  40. package/dist/types/ui/registered-insert-menu/RegisteredInsertMenuContent.d.ts +15 -0
  41. package/dist/types/ui/registered-insert-menu/RegisteredInsertMenuItem.d.ts +15 -0
  42. package/dist/types/ui/registered-insert-menu/RegisteredInsertMenuList.d.ts +23 -0
  43. package/package.json +11 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # @atlaskit/editor-plugin-insert-block
2
2
 
3
+ ## 18.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+
9
+ ## 18.1.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [`df59babd59961`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/df59babd59961) -
14
+ Use registered Quick Insert items in both primary toolbar implementations when
15
+ `platform_editor_slash_command` is enabled, independently of the controls and AIFC experiments.
16
+ Share the registered menu model through an explicit editor-common subpath and use compact
17
+ presentation for typeahead and toolbar items.
18
+
19
+ Virtualize the toolbar menu, keep keyboard-selected items visible, and restore the bounded popup's
20
+ themed background and scrolling. Dismiss the popup on outside clicks and inset the search field
21
+ from its edges. When the experiment is enabled, ignore absent legacy Quick Insert handlers to
22
+ prevent suggestion crashes.
23
+
24
+ Provide persisted toolbar docking preferences in editor examples to support testing the primary
25
+ toolbar Insert menu.
26
+
27
+ ### Patch Changes
28
+
29
+ - Updated dependencies
30
+
3
31
  ## 18.0.6
4
32
 
5
33
  ### 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 = _interopRequireDefault(require("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(_InsertMenu.default, {
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
+ };
@@ -0,0 +1,4 @@
1
+ ._1rjc1b66{padding-block:var(--ds-space-050,4px)}._15a5nqa1{border-top-style:solid}
2
+ ._1i531l7x{border-top-color:var(--ds-border,#0b120e24)}
3
+ ._1o9zidpf{flex-shrink:0}
4
+ ._uwhke4h9{border-top-width:var(--ds-border-width,1px)}