@atlaskit/editor-plugin-type-ahead 14.0.1 → 14.0.2

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 (45) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/cjs/ui/registered-menu/RegisteredTypeAheadMenu.compiled.css +6 -0
  3. package/dist/cjs/ui/registered-menu/RegisteredTypeAheadMenu.js +62 -45
  4. package/dist/cjs/ui/registered-menu/TypeAheadItemRow.js +7 -5
  5. package/dist/cjs/ui/registered-menu/TypeAheadMenuFooter.compiled.css +3 -0
  6. package/dist/cjs/ui/registered-menu/TypeAheadMenuFooter.js +30 -0
  7. package/dist/cjs/ui/registered-menu/TypeAheadMenuRenderer.js +141 -0
  8. package/dist/cjs/ui/registered-menu/TypeAheadSectionRow.js +15 -0
  9. package/dist/cjs/ui/registered-menu/buildTypeAheadMenuModel.js +34 -16
  10. package/dist/cjs/ui/registered-menu/createTypeAheadRowRenderer.js +62 -0
  11. package/dist/cjs/ui/registered-menu/getTypeAheadGlobalViewMoreId.js +9 -0
  12. package/dist/cjs/ui/registered-menu/quick-insert/TypeAheadQuickInsertItem.js +7 -11
  13. package/dist/es2019/ui/registered-menu/RegisteredTypeAheadMenu.compiled.css +6 -0
  14. package/dist/es2019/ui/registered-menu/RegisteredTypeAheadMenu.js +47 -37
  15. package/dist/es2019/ui/registered-menu/TypeAheadItemRow.js +7 -5
  16. package/dist/es2019/ui/registered-menu/TypeAheadMenuFooter.compiled.css +3 -0
  17. package/dist/es2019/ui/registered-menu/TypeAheadMenuFooter.js +22 -0
  18. package/dist/es2019/ui/registered-menu/TypeAheadMenuRenderer.js +109 -0
  19. package/dist/es2019/ui/registered-menu/TypeAheadSectionRow.js +9 -0
  20. package/dist/es2019/ui/registered-menu/buildTypeAheadMenuModel.js +29 -8
  21. package/dist/es2019/ui/registered-menu/createTypeAheadRowRenderer.js +54 -0
  22. package/dist/es2019/ui/registered-menu/getTypeAheadGlobalViewMoreId.js +1 -0
  23. package/dist/es2019/ui/registered-menu/quick-insert/TypeAheadQuickInsertItem.js +5 -6
  24. package/dist/esm/ui/registered-menu/RegisteredTypeAheadMenu.compiled.css +6 -0
  25. package/dist/esm/ui/registered-menu/RegisteredTypeAheadMenu.js +62 -45
  26. package/dist/esm/ui/registered-menu/TypeAheadItemRow.js +7 -5
  27. package/dist/esm/ui/registered-menu/TypeAheadMenuFooter.compiled.css +3 -0
  28. package/dist/esm/ui/registered-menu/TypeAheadMenuFooter.js +23 -0
  29. package/dist/esm/ui/registered-menu/TypeAheadMenuRenderer.js +132 -0
  30. package/dist/esm/ui/registered-menu/TypeAheadSectionRow.js +8 -0
  31. package/dist/esm/ui/registered-menu/buildTypeAheadMenuModel.js +33 -16
  32. package/dist/esm/ui/registered-menu/createTypeAheadRowRenderer.js +55 -0
  33. package/dist/esm/ui/registered-menu/getTypeAheadGlobalViewMoreId.js +3 -0
  34. package/dist/esm/ui/registered-menu/quick-insert/TypeAheadQuickInsertItem.js +7 -10
  35. package/dist/types/ui/registered-menu/RegisteredTypeAheadMenu.d.ts +2 -1
  36. package/dist/types/ui/registered-menu/TypeAheadItemRow.d.ts +2 -1
  37. package/dist/types/ui/registered-menu/TypeAheadMenuFooter.d.ts +10 -0
  38. package/dist/types/ui/registered-menu/TypeAheadMenuRenderer.d.ts +15 -0
  39. package/dist/types/ui/registered-menu/TypeAheadSectionRow.d.ts +5 -0
  40. package/dist/types/ui/registered-menu/buildTypeAheadMenuModel.d.ts +5 -3
  41. package/dist/types/ui/registered-menu/createTypeAheadRowRenderer.d.ts +13 -0
  42. package/dist/types/ui/registered-menu/getTypeAheadGlobalViewMoreId.d.ts +1 -0
  43. package/dist/types/ui/registered-menu/quick-insert/TypeAheadQuickInsertItem.d.ts +1 -1
  44. package/dist/types/ui/registered-menu/typeAheadMenuTypes.d.ts +0 -1
  45. package/package.json +4 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @atlaskit/editor-plugin-type-ahead
2
2
 
3
+ ## 14.0.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [`7087f393ec725`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/7087f393ec725) -
8
+ Add the categorized registered Quick Insert browse experience with representative native elements
9
+ - Updated dependencies
10
+
3
11
  ## 14.0.1
4
12
 
5
13
  ### Patch Changes
@@ -0,0 +1,6 @@
1
+ ._2rko12b0{border-radius:var(--ds-radius-small,4px)}
2
+ ._1rjc1b66{padding-block:var(--ds-space-050,4px)}._16qs130s{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #1e1f2126,0 0 1px #1e1f214f)}
3
+ ._18m915vq{overflow-y:hidden}
4
+ ._1bsb5x59{width:340px}
5
+ ._1reo15vq{overflow-x:hidden}
6
+ ._bfhk1bhr{background-color:var(--ds-surface-overlay,#fff)}
@@ -1,3 +1,4 @@
1
+ /* RegisteredTypeAheadMenu.tsx generated by @compiled/babel-plugin v2.0.0 */
1
2
  "use strict";
2
3
 
3
4
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
@@ -6,27 +7,35 @@ Object.defineProperty(exports, "__esModule", {
6
7
  value: true
7
8
  });
8
9
  exports.RegisteredTypeAheadMenu = void 0;
10
+ require("./RegisteredTypeAheadMenu.compiled.css");
11
+ var _runtime = require("@compiled/react/runtime");
9
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
13
  var _react = _interopRequireWildcard(require("react"));
11
- var _reactIntl = require("react-intl");
14
+ var _typeAheadIsSectionOverflowItemKey = require("@atlaskit/editor-common/type-ahead-is-section-overflow-item-key");
12
15
  var _ui = require("@atlaskit/editor-common/ui");
13
16
  var _constants = require("@atlaskit/editor-shared-styles/constants");
14
17
  var _compiled = require("@atlaskit/primitives/compiled");
15
18
  var _InputQuery = require("../InputQuery");
16
19
  var _buildTypeAheadMenuModel = require("./buildTypeAheadMenuModel");
20
+ var _getTypeAheadGlobalViewMoreId = require("./getTypeAheadGlobalViewMoreId");
17
21
  var _getTypeAheadItemId = require("./getTypeAheadItemId");
18
- var _PassThrough = require("./PassThrough");
19
- var _TypeAheadItemRow = require("./TypeAheadItemRow");
22
+ var _TypeAheadMenuRenderer = require("./TypeAheadMenuRenderer");
20
23
  var _TypeAheadProvider = require("./TypeAheadProvider");
21
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 styles = {
26
+ menu: "_2rko12b0 _1reo15vq _18m915vq _1rjc1b66 _bfhk1bhr _16qs130s _1bsb5x59"
27
+ };
28
+ var DEFAULT_MENU_MAX_HEIGHT = 520;
22
29
  var POPUP_OFFSET = [0, 8];
30
+ var SECTION_OVERFLOW_LIMIT = 30;
23
31
  var RegisteredTypeAheadMenu = exports.RegisteredTypeAheadMenu = function RegisteredTypeAheadMenu(_ref) {
24
- var _model$root$component, _model$root;
25
32
  var anchorElement = _ref.anchorElement,
26
33
  api = _ref.api,
27
34
  cancel = _ref.cancel,
28
35
  editorView = _ref.editorView,
29
36
  forceFocus = _ref.forceFocus,
37
+ _ref$maxHeight = _ref.maxHeight,
38
+ maxHeight = _ref$maxHeight === void 0 ? DEFAULT_MENU_MAX_HEIGHT : _ref$maxHeight,
30
39
  onClose = _ref.onClose,
31
40
  onUndoRedo = _ref.onUndoRedo,
32
41
  popupsBoundariesElement = _ref.popupsBoundariesElement,
@@ -37,7 +46,6 @@ var RegisteredTypeAheadMenu = exports.RegisteredTypeAheadMenu = function Registe
37
46
  setQuery = _ref.setQuery,
38
47
  surface = _ref.surface,
39
48
  triggerHandler = _ref.triggerHandler;
40
- var intl = (0, _reactIntl.useIntl)();
41
49
  var generatedId = (0, _react.useId)();
42
50
  var listId = "".concat(surface.listIdPrefix, "-").concat(generatedId);
43
51
  var menuRef = (0, _react.useRef)(null);
@@ -49,39 +57,55 @@ var RegisteredTypeAheadMenu = exports.RegisteredTypeAheadMenu = function Registe
49
57
  var _api$uiControlRegistr, _api$uiControlRegistr2;
50
58
  return (_api$uiControlRegistr = api === null || api === void 0 || (_api$uiControlRegistr2 = api.uiControlRegistry) === null || _api$uiControlRegistr2 === void 0 ? void 0 : _api$uiControlRegistr2.actions.getComponents(surface.root.key)) !== null && _api$uiControlRegistr !== void 0 ? _api$uiControlRegistr : [];
51
59
  }, [api, surface.root.key]);
52
- var model = (0, _react.useMemo)(function () {
53
- return (0, _buildTypeAheadMenuModel.buildTypeAheadMenuModel)(components, surface.root);
54
- }, [components, surface.root]);
55
- var itemKeySignature = model.items.map(function (_ref2) {
56
- var key = _ref2.key;
57
- return key;
60
+ var hasSectionOverflowItems = (0, _react.useMemo)(function () {
61
+ return components.some(function (_ref2) {
62
+ var key = _ref2.key;
63
+ return (0, _typeAheadIsSectionOverflowItemKey.isSectionOverflowItemKey)(key);
64
+ });
65
+ }, [components]);
66
+ var menuModel = (0, _react.useMemo)(function () {
67
+ return (0, _buildTypeAheadMenuModel.buildTypeAheadMenuModel)(components, surface.root, hasSectionOverflowItems ? SECTION_OVERFLOW_LIMIT : undefined);
68
+ }, [components, hasSectionOverflowItems, surface.root]);
69
+ var rows = (0, _react.useMemo)(function () {
70
+ return menuModel.sections.flat();
71
+ }, [menuModel.sections]);
72
+ var selectableRowIndexes = (0, _react.useMemo)(function () {
73
+ return rows.flatMap(function (registration, rowIndex) {
74
+ return registration.type === 'menu-item' ? [rowIndex] : [];
75
+ });
76
+ }, [rows]);
77
+ var selectableRowKeys = selectableRowIndexes.map(function (index) {
78
+ var _rows$index;
79
+ return (_rows$index = rows[index]) === null || _rows$index === void 0 ? void 0 : _rows$index.key;
58
80
  }).join(',');
81
+ var selectableItemCount = selectableRowIndexes.length + (menuModel.footer ? 1 : 0);
59
82
  (0, _react.useLayoutEffect)(function () {
60
- setSelectedItemIndex(model.items.length > 0 ? 0 : -1);
61
- }, [itemKeySignature, model.items.length, query]);
83
+ setSelectedItemIndex(selectableItemCount > 0 ? 0 : -1);
84
+ }, [query, selectableItemCount, selectableRowKeys]);
62
85
  var selectActiveItem = (0, _react.useCallback)(function (_mode) {
63
- var _menuRef$current;
64
- if (selectedItemIndex < 0) {
65
- return;
86
+ var rowIndex = selectableRowIndexes[selectedItemIndex];
87
+ var selectedId = rowIndex !== undefined ? (0, _getTypeAheadItemId.getTypeAheadItemId)(listId, rowIndex) : menuModel.footer && selectedItemIndex === selectableRowIndexes.length ? (0, _getTypeAheadGlobalViewMoreId.getTypeAheadGlobalViewMoreId)(listId) : undefined;
88
+ if (selectedId) {
89
+ var _menuRef$current;
90
+ (_menuRef$current = menuRef.current) === null || _menuRef$current === void 0 || (_menuRef$current = _menuRef$current.ownerDocument.getElementById(selectedId)) === null || _menuRef$current === void 0 || _menuRef$current.click();
66
91
  }
67
- (_menuRef$current = menuRef.current) === null || _menuRef$current === void 0 || (_menuRef$current = _menuRef$current.ownerDocument.getElementById((0, _getTypeAheadItemId.getTypeAheadItemId)(listId, selectedItemIndex))) === null || _menuRef$current === void 0 || _menuRef$current.click();
68
- }, [listId, selectedItemIndex]);
92
+ }, [listId, menuModel.footer, selectableRowIndexes, selectedItemIndex]);
69
93
  var selectNextItem = (0, _react.useCallback)(function () {
70
94
  setSelectedItemIndex(function (currentIndex) {
71
- if (model.items.length === 0) {
95
+ if (selectableItemCount === 0) {
72
96
  return -1;
73
97
  }
74
- return currentIndex < 0 || currentIndex === model.items.length - 1 ? 0 : currentIndex + 1;
98
+ return currentIndex < 0 || currentIndex === selectableItemCount - 1 ? 0 : currentIndex + 1;
75
99
  });
76
- }, [model.items.length]);
100
+ }, [selectableItemCount]);
77
101
  var selectPreviousItem = (0, _react.useCallback)(function () {
78
102
  setSelectedItemIndex(function (currentIndex) {
79
- if (model.items.length === 0) {
103
+ if (selectableItemCount === 0) {
80
104
  return -1;
81
105
  }
82
- return currentIndex <= 0 ? model.items.length - 1 : currentIndex - 1;
106
+ return currentIndex <= 0 ? selectableItemCount - 1 : currentIndex - 1;
83
107
  });
84
- }, [model.items.length]);
108
+ }, [selectableItemCount]);
85
109
  var typeAheadContextValue = (0, _react.useMemo)(function () {
86
110
  return {
87
111
  api: api,
@@ -93,10 +117,9 @@ var RegisteredTypeAheadMenu = exports.RegisteredTypeAheadMenu = function Registe
93
117
  };
94
118
  }, [api, editorView, onClose, query, surface.inputMethod, triggerHandler]);
95
119
  var noOp = (0, _react.useCallback)(function () {}, []);
96
- var RootComponent = (_model$root$component = (_model$root = model.root) === null || _model$root === void 0 ? void 0 : _model$root.component) !== null && _model$root$component !== void 0 ? _model$root$component : _PassThrough.PassThrough;
97
120
  var SurfaceProvider = surface.Provider;
98
121
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_InputQuery.InputQuery, {
99
- activeDescendantId: selectedItemIndex >= 0 ? (0, _getTypeAheadItemId.getTypeAheadItemId)(listId, selectedItemIndex) : undefined,
122
+ activeDescendantId: selectableRowIndexes[selectedItemIndex] !== undefined ? (0, _getTypeAheadItemId.getTypeAheadItemId)(listId, selectableRowIndexes[selectedItemIndex]) : menuModel.footer && selectedItemIndex === selectableRowIndexes.length ? (0, _getTypeAheadGlobalViewMoreId.getTypeAheadGlobalViewMoreId)(listId) : undefined,
100
123
  cancel: cancel,
101
124
  editorView: editorView,
102
125
  forceFocus: forceFocus,
@@ -105,7 +128,7 @@ var RegisteredTypeAheadMenu = exports.RegisteredTypeAheadMenu = function Registe
105
128
  onQueryChange: setQuery,
106
129
  onQueryFocus: noOp,
107
130
  onUndoRedo: onUndoRedo,
108
- optionCount: model.items.length,
131
+ optionCount: selectableItemCount,
109
132
  reopenQuery: reopenQuery,
110
133
  selectNextItem: selectNextItem,
111
134
  selectPreviousItem: selectPreviousItem,
@@ -114,7 +137,8 @@ var RegisteredTypeAheadMenu = exports.RegisteredTypeAheadMenu = function Registe
114
137
  }), /*#__PURE__*/_react.default.createElement(_ui.Popup, {
115
138
  ariaLabel: null,
116
139
  boundariesElement: popupsBoundariesElement,
117
- fitWidth: 320,
140
+ fitHeight: maxHeight,
141
+ fitWidth: 340,
118
142
  mountTo: popupsMountPoint,
119
143
  offset: POPUP_OFFSET,
120
144
  preventOverflow: true,
@@ -123,24 +147,17 @@ var RegisteredTypeAheadMenu = exports.RegisteredTypeAheadMenu = function Registe
123
147
  zIndex: _constants.akEditorFloatingDialogZIndex
124
148
  }, /*#__PURE__*/_react.default.createElement(_compiled.Box, {
125
149
  ref: menuRef,
126
- backgroundColor: "elevation.surface.overlay",
127
150
  "data-registered-type-ahead-menu": "",
128
- padding: "space.050"
151
+ xcss: styles.menu
129
152
  }, /*#__PURE__*/_react.default.createElement(_TypeAheadProvider.TypeAheadProvider, {
130
153
  value: typeAheadContextValue
131
- }, /*#__PURE__*/_react.default.createElement(SurfaceProvider, null, /*#__PURE__*/_react.default.createElement(RootComponent, null, /*#__PURE__*/_react.default.createElement(_compiled.Box, {
132
- "aria-label": intl.formatMessage(surface.listLabel),
133
- id: listId,
134
- role: "listbox"
135
- }, model.items.map(function (registration, itemIndex) {
136
- return /*#__PURE__*/_react.default.createElement(_TypeAheadItemRow.TypeAheadItemRow, {
137
- isSelected: selectedItemIndex === itemIndex,
138
- itemIndex: itemIndex,
139
- Item: surface.Item,
140
- key: "".concat(registration.type, ":").concat(registration.key),
141
- listId: listId,
142
- onItemHover: setSelectedItemIndex,
143
- registration: registration
144
- });
145
- }))))))));
154
+ }, /*#__PURE__*/_react.default.createElement(SurfaceProvider, null, /*#__PURE__*/_react.default.createElement(_TypeAheadMenuRenderer.TypeAheadMenuRenderer, {
155
+ Item: surface.Item,
156
+ listLabel: surface.listLabel,
157
+ listId: listId,
158
+ maxHeight: maxHeight,
159
+ model: menuModel,
160
+ onItemHover: setSelectedItemIndex,
161
+ selectedItemIndex: selectedItemIndex
162
+ }))))));
146
163
  };
@@ -14,14 +14,16 @@ var TypeAheadItemRow = exports.TypeAheadItemRow = function TypeAheadItemRow(_ref
14
14
  Item = _ref.Item,
15
15
  listId = _ref.listId,
16
16
  onItemHover = _ref.onItemHover,
17
- registration = _ref.registration;
17
+ registration = _ref.registration,
18
+ rowIndex = _ref.rowIndex;
18
19
  var onMouseMove = (0, _react.useCallback)(function () {
19
20
  return onItemHover(itemIndex);
20
21
  }, [itemIndex, onItemHover]);
21
- return /*#__PURE__*/_react.default.createElement(Item, {
22
- id: (0, _getTypeAheadItemId.getTypeAheadItemId)(listId, itemIndex),
22
+ return /*#__PURE__*/_react.default.createElement("div", {
23
+ onMouseMove: onMouseMove
24
+ }, /*#__PURE__*/_react.default.createElement(Item, {
25
+ id: (0, _getTypeAheadItemId.getTypeAheadItemId)(listId, rowIndex),
23
26
  isSelected: isSelected,
24
- onMouseMove: onMouseMove,
25
27
  registration: registration
26
- });
28
+ }));
27
29
  };
@@ -0,0 +1,3 @@
1
+ ._1rjc1b66{padding-block:var(--ds-space-050,4px)}._15a5nqa1{border-top-style:solid}
2
+ ._1i531l7x{border-top-color:var(--ds-border,#0b120e24)}
3
+ ._uwhke4h9{border-top-width:var(--ds-border-width,1px)}
@@ -0,0 +1,30 @@
1
+ /* TypeAheadMenuFooter.tsx generated by @compiled/babel-plugin v2.0.0 */
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.TypeAheadMenuFooter = void 0;
9
+ require("./TypeAheadMenuFooter.compiled.css");
10
+ var _runtime = require("@compiled/react/runtime");
11
+ var _react = _interopRequireDefault(require("react"));
12
+ var _compiled = require("@atlaskit/primitives/compiled");
13
+ var styles = {
14
+ footer: "_1rjc1b66 _1i531l7x _15a5nqa1 _uwhke4h9"
15
+ };
16
+ var TypeAheadMenuFooter = exports.TypeAheadMenuFooter = function TypeAheadMenuFooter(_ref) {
17
+ var id = _ref.id,
18
+ isSelected = _ref.isSelected,
19
+ Item = _ref.Item,
20
+ onMouseMove = _ref.onMouseMove,
21
+ registration = _ref.registration;
22
+ return /*#__PURE__*/_react.default.createElement(_compiled.Box, {
23
+ onMouseMove: onMouseMove,
24
+ xcss: styles.footer
25
+ }, /*#__PURE__*/_react.default.createElement(Item, {
26
+ id: id,
27
+ isSelected: isSelected,
28
+ registration: registration
29
+ }));
30
+ };
@@ -0,0 +1,141 @@
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.TypeAheadMenuRenderer = 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 _CellMeasurer = require("react-virtualized/dist/commonjs/CellMeasurer");
13
+ var _List = require("react-virtualized/dist/commonjs/List");
14
+ var _typeAhead = require("@atlaskit/editor-common/type-ahead");
15
+ var _compiled = require("@atlaskit/primitives/compiled");
16
+ var _createTypeAheadRowRenderer = require("./createTypeAheadRowRenderer");
17
+ var _getTypeAheadGlobalViewMoreId = require("./getTypeAheadGlobalViewMoreId");
18
+ var _PassThrough = require("./PassThrough");
19
+ var _TypeAheadMenuFooter = require("./TypeAheadMenuFooter");
20
+ 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); }
21
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
22
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
23
+ 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; }
24
+ var LIST_WIDTH = 340;
25
+ var ESTIMATED_ROW_HEIGHT = 56;
26
+ var MENU_FOOTER_HEIGHT = 48;
27
+ var TypeAheadMenuRenderer = exports.TypeAheadMenuRenderer = function TypeAheadMenuRenderer(_ref) {
28
+ var _model$root$component;
29
+ var Item = _ref.Item,
30
+ listLabel = _ref.listLabel,
31
+ listId = _ref.listId,
32
+ maxHeight = _ref.maxHeight,
33
+ model = _ref.model,
34
+ onItemHover = _ref.onItemHover,
35
+ selectedItemIndex = _ref.selectedItemIndex;
36
+ var intl = (0, _reactIntl.useIntl)();
37
+ var listRef = (0, _react.useRef)(null);
38
+ var rows = (0, _react.useMemo)(function () {
39
+ return model.sections.flat();
40
+ }, [model.sections]);
41
+ var cache = (0, _react.useMemo)(function () {
42
+ return new _CellMeasurer.CellMeasurerCache({
43
+ defaultHeight: ESTIMATED_ROW_HEIGHT,
44
+ fixedWidth: true
45
+ });
46
+ }, []);
47
+ var itemIndexByRowIndex = (0, _react.useMemo)(function () {
48
+ var indexes = new Map();
49
+ var itemIndex = 0;
50
+ rows.forEach(function (registration, rowIndex) {
51
+ if (registration.type === 'menu-item') {
52
+ indexes.set(rowIndex, itemIndex++);
53
+ }
54
+ });
55
+ return indexes;
56
+ }, [rows]);
57
+ var selectedRowIndex = (0, _react.useMemo)(function () {
58
+ var _iterator = _createForOfIteratorHelper(itemIndexByRowIndex),
59
+ _step;
60
+ try {
61
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
62
+ var _step$value = (0, _slicedToArray2.default)(_step.value, 2),
63
+ rowIndex = _step$value[0],
64
+ itemIndex = _step$value[1];
65
+ if (itemIndex === selectedItemIndex) {
66
+ return rowIndex;
67
+ }
68
+ }
69
+ } catch (err) {
70
+ _iterator.e(err);
71
+ } finally {
72
+ _iterator.f();
73
+ }
74
+ return -1;
75
+ }, [itemIndexByRowIndex, selectedItemIndex]);
76
+ var rowKeySignature = (0, _react.useMemo)(function () {
77
+ return rows.map(function (_ref2) {
78
+ var key = _ref2.key,
79
+ type = _ref2.type;
80
+ return "".concat(type, ":").concat(key);
81
+ }).join('\0');
82
+ }, [rows]);
83
+ (0, _react.useLayoutEffect)(function () {
84
+ var _listRef$current, _listRef$current2;
85
+ cache.clearAll();
86
+ (_listRef$current = listRef.current) === null || _listRef$current === void 0 || _listRef$current.recomputeRowHeights();
87
+ (_listRef$current2 = listRef.current) === null || _listRef$current2 === void 0 || _listRef$current2.scrollToPosition(0);
88
+ }, [cache, rowKeySignature]);
89
+ (0, _react.useLayoutEffect)(function () {
90
+ if (selectedRowIndex >= 0) {
91
+ var _listRef$current3;
92
+ (_listRef$current3 = listRef.current) === null || _listRef$current3 === void 0 || _listRef$current3.scrollToRow(selectedRowIndex);
93
+ }
94
+ }, [selectedRowIndex]);
95
+ var renderRow = (0, _createTypeAheadRowRenderer.createTypeAheadRowRenderer)({
96
+ cache: cache,
97
+ itemIndexByRowIndex: itemIndexByRowIndex,
98
+ Item: Item,
99
+ listId: listId,
100
+ onItemHover: onItemHover,
101
+ rows: rows,
102
+ selectedItemIndex: selectedItemIndex
103
+ });
104
+ var footerItemIndex = itemIndexByRowIndex.size;
105
+ var onFooterItemHover = (0, _react.useCallback)(function () {
106
+ return onItemHover(footerItemIndex);
107
+ }, [footerItemIndex, onItemHover]);
108
+ if (!model.root) {
109
+ return null;
110
+ }
111
+ var RootComponent = (_model$root$component = model.root.component) !== null && _model$root$component !== void 0 ? _model$root$component : _PassThrough.PassThrough;
112
+ var listMaxHeight = Math.max(0, maxHeight - (model.footer ? MENU_FOOTER_HEIGHT : 0));
113
+ return /*#__PURE__*/_react.default.createElement(RootComponent, null, /*#__PURE__*/_react.default.createElement(_compiled.Box, {
114
+ "aria-label": intl.formatMessage(listLabel),
115
+ id: listId,
116
+ role: "listbox"
117
+ }, rows.length === 0 ? /*#__PURE__*/_react.default.createElement(_compiled.Box, {
118
+ paddingBlock: "space.150",
119
+ paddingInline: "space.250"
120
+ }, /*#__PURE__*/_react.default.createElement(_compiled.Text, {
121
+ align: "center",
122
+ as: "p"
123
+ }, intl.formatMessage(_typeAhead.typeAheadListMessages.emptySearchResults))) : /*#__PURE__*/_react.default.createElement(_List.List, {
124
+ containerRole: "presentation",
125
+ height: Math.min(rows.length * ESTIMATED_ROW_HEIGHT, listMaxHeight),
126
+ overscanRowCount: 3,
127
+ ref: listRef,
128
+ role: "presentation",
129
+ rowCount: rows.length,
130
+ rowHeight: cache.rowHeight,
131
+ rowRenderer: renderRow,
132
+ scrollToAlignment: "auto",
133
+ width: LIST_WIDTH
134
+ }), model.footer && /*#__PURE__*/_react.default.createElement(_TypeAheadMenuFooter.TypeAheadMenuFooter, {
135
+ id: (0, _getTypeAheadGlobalViewMoreId.getTypeAheadGlobalViewMoreId)(listId),
136
+ isSelected: selectedItemIndex === footerItemIndex,
137
+ Item: Item,
138
+ onMouseMove: onFooterItemHover,
139
+ registration: model.footer
140
+ })));
141
+ };
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.TypeAheadSectionRow = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _PassThrough = require("./PassThrough");
10
+ var TypeAheadSectionRow = exports.TypeAheadSectionRow = function TypeAheadSectionRow(_ref) {
11
+ var _registration$compone;
12
+ var registration = _ref.registration;
13
+ var Component = (_registration$compone = registration.component) !== null && _registration$compone !== void 0 ? _registration$compone : _PassThrough.PassThrough;
14
+ return /*#__PURE__*/_react.default.createElement(Component, null, null);
15
+ };
@@ -1,19 +1,24 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.buildTypeAheadMenuModel = void 0;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _typeAheadIsMenuFooterSectionKey = require("@atlaskit/editor-common/type-ahead-is-menu-footer-section-key");
10
+ var _typeAheadIsSectionOverflowItemKey = require("@atlaskit/editor-common/type-ahead-is-section-overflow-item-key");
7
11
  var _surfaceRenderer = require("@atlaskit/editor-ui-control-model/surface-renderer");
8
12
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
9
13
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
10
14
  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; }
11
- var buildTypeAheadMenuModel = exports.buildTypeAheadMenuModel = function buildTypeAheadMenuModel(components, rootComponent) {
15
+ var buildTypeAheadMenuModel = exports.buildTypeAheadMenuModel = function buildTypeAheadMenuModel(components, rootComponent, sectionOverflowLimit) {
12
16
  var _resolveSurface = (0, _surfaceRenderer.resolveSurface)(components, rootComponent),
13
17
  root = _resolveSurface.root,
14
18
  childrenMap = _resolveSurface.childrenMap,
15
19
  topLevelChildren = _resolveSurface.topLevelChildren;
16
- var items = [];
20
+ var sections = [];
21
+ var footer;
17
22
  var _iterator = _createForOfIteratorHelper(topLevelChildren !== null && topLevelChildren !== void 0 ? topLevelChildren : []),
18
23
  _step;
19
24
  try {
@@ -23,20 +28,32 @@ var buildTypeAheadMenuModel = exports.buildTypeAheadMenuModel = function buildTy
23
28
  if (section.type !== 'menu-section' || !(0, _surfaceRenderer.willComponentRender)(section, childrenMap)) {
24
29
  continue;
25
30
  }
26
- var _iterator2 = _createForOfIteratorHelper((_childrenMap$get = childrenMap.get(section.key)) !== null && _childrenMap$get !== void 0 ? _childrenMap$get : []),
27
- _step2;
28
- try {
29
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
30
- var child = _step2.value;
31
- if (child.type === 'menu-item' && (0, _surfaceRenderer.willComponentRender)(child, childrenMap)) {
32
- items.push(child);
33
- }
31
+ var children = (_childrenMap$get = childrenMap.get(section.key)) !== null && _childrenMap$get !== void 0 ? _childrenMap$get : [];
32
+ if ((0, _typeAheadIsMenuFooterSectionKey.isMenuFooterSectionKey)(section.key)) {
33
+ footer = children.find(function (child) {
34
+ return child.type === 'menu-item' && (0, _surfaceRenderer.willComponentRender)(child, childrenMap);
35
+ });
36
+ continue;
37
+ }
38
+ var viewMoreItem = void 0;
39
+ for (var index = children.length - 1; index >= 0; index--) {
40
+ var child = children[index];
41
+ if ((child === null || child === void 0 ? void 0 : child.type) === 'menu-item' && (0, _typeAheadIsSectionOverflowItemKey.isSectionOverflowItemKey)(child.key) && (0, _surfaceRenderer.willComponentRender)(child, childrenMap)) {
42
+ viewMoreItem = child;
43
+ break;
34
44
  }
35
- } catch (err) {
36
- _iterator2.e(err);
37
- } finally {
38
- _iterator2.f();
39
45
  }
46
+ var items = children.filter(function (child) {
47
+ return child.type === 'menu-item' && !(0, _typeAheadIsSectionOverflowItemKey.isSectionOverflowItemKey)(child.key) && (0, _surfaceRenderer.willComponentRender)(child, childrenMap);
48
+ });
49
+ if (items.length === 0) {
50
+ continue;
51
+ }
52
+ if (sectionOverflowLimit !== undefined && viewMoreItem !== undefined && items.length > sectionOverflowLimit) {
53
+ sections.push([section].concat((0, _toConsumableArray2.default)(items.slice(0, sectionOverflowLimit)), [viewMoreItem]));
54
+ continue;
55
+ }
56
+ sections.push([section].concat((0, _toConsumableArray2.default)(items)));
40
57
  }
41
58
  } catch (err) {
42
59
  _iterator.e(err);
@@ -44,7 +61,8 @@ var buildTypeAheadMenuModel = exports.buildTypeAheadMenuModel = function buildTy
44
61
  _iterator.f();
45
62
  }
46
63
  return {
47
- items: items,
48
- root: root
64
+ footer: footer,
65
+ root: root,
66
+ sections: sections
49
67
  };
50
68
  };
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.createTypeAheadRowRenderer = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _CellMeasurer = require("react-virtualized/dist/commonjs/CellMeasurer");
10
+ var _ListRow = require("../ListRow");
11
+ var _TypeAheadItemRow = require("./TypeAheadItemRow");
12
+ var _TypeAheadSectionRow = require("./TypeAheadSectionRow");
13
+ var noOp = function noOp() {};
14
+ var createTypeAheadRowRenderer = exports.createTypeAheadRowRenderer = function createTypeAheadRowRenderer(_ref) {
15
+ var cache = _ref.cache,
16
+ itemIndexByRowIndex = _ref.itemIndexByRowIndex,
17
+ Item = _ref.Item,
18
+ listId = _ref.listId,
19
+ onItemHover = _ref.onItemHover,
20
+ rows = _ref.rows,
21
+ selectedItemIndex = _ref.selectedItemIndex;
22
+ return function (_ref2) {
23
+ var index = _ref2.index,
24
+ key = _ref2.key,
25
+ parent = _ref2.parent,
26
+ style = _ref2.style,
27
+ isScrolling = _ref2.isScrolling,
28
+ isVisible = _ref2.isVisible;
29
+ var registration = rows[index];
30
+ if (!registration) {
31
+ return null;
32
+ }
33
+ var itemIndex = itemIndexByRowIndex.get(index);
34
+ return /*#__PURE__*/_react.default.createElement(_CellMeasurer.CellMeasurer, {
35
+ key: key,
36
+ cache: cache,
37
+ parent: parent,
38
+ columnIndex: 0,
39
+ rowIndex: index
40
+ }, function (_ref3) {
41
+ var measure = _ref3.measure;
42
+ return /*#__PURE__*/_react.default.createElement(_ListRow.ListRow, {
43
+ index: index,
44
+ isScrolling: isScrolling,
45
+ isVisible: isVisible,
46
+ measure: measure,
47
+ onMouseMove: noOp,
48
+ style: style
49
+ }, registration.type === 'menu-section' ? /*#__PURE__*/_react.default.createElement(_TypeAheadSectionRow.TypeAheadSectionRow, {
50
+ registration: registration
51
+ }) : /*#__PURE__*/_react.default.createElement(_TypeAheadItemRow.TypeAheadItemRow, {
52
+ Item: Item,
53
+ isSelected: itemIndex === selectedItemIndex,
54
+ itemIndex: itemIndex !== null && itemIndex !== void 0 ? itemIndex : 0,
55
+ listId: listId,
56
+ onItemHover: onItemHover,
57
+ registration: registration,
58
+ rowIndex: index
59
+ }));
60
+ });
61
+ };
62
+ };
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getTypeAheadGlobalViewMoreId = void 0;
7
+ var getTypeAheadGlobalViewMoreId = exports.getTypeAheadGlobalViewMoreId = function getTypeAheadGlobalViewMoreId(listId) {
8
+ return "".concat(listId, "-view-all");
9
+ };
@@ -1,36 +1,32 @@
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.TypeAheadQuickInsertItem = void 0;
9
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
8
  var _react = _interopRequireWildcard(require("react"));
11
9
  var _provider = require("@atlaskit/editor-common/quick-insert/provider");
12
10
  var _useQuickInsertContext = require("@atlaskit/editor-common/quick-insert/use-quick-insert-context");
13
11
  var _PassThrough = require("../PassThrough");
14
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); }
15
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
16
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
17
13
  var TypeAheadQuickInsertItem = exports.TypeAheadQuickInsertItem = function TypeAheadQuickInsertItem(_ref) {
18
14
  var _registration$compone;
19
15
  var id = _ref.id,
20
16
  isSelected = _ref.isSelected,
21
- onMouseMove = _ref.onMouseMove,
22
17
  registration = _ref.registration;
23
18
  var quickInsertContext = (0, _useQuickInsertContext.useQuickInsertContext)();
24
19
  var Component = (_registration$compone = registration.component) !== null && _registration$compone !== void 0 ? _registration$compone : _PassThrough.PassThrough;
25
20
  var contextValue = (0, _react.useMemo)(function () {
26
- return _objectSpread(_objectSpread({}, quickInsertContext), {}, {
21
+ return {
22
+ editorView: quickInsertContext.editorView,
27
23
  item: {
28
24
  id: id,
29
- isSelected: isSelected,
30
- onMouseMove: onMouseMove
31
- }
32
- });
33
- }, [id, isSelected, onMouseMove, quickInsertContext]);
25
+ isSelected: isSelected
26
+ },
27
+ select: quickInsertContext.select
28
+ };
29
+ }, [id, isSelected, quickInsertContext]);
34
30
  return /*#__PURE__*/_react.default.createElement(_provider.QuickInsertProvider, {
35
31
  value: contextValue
36
32
  }, /*#__PURE__*/_react.default.createElement(Component, null, null));
@@ -0,0 +1,6 @@
1
+ ._2rko12b0{border-radius:var(--ds-radius-small,4px)}
2
+ ._1rjc1b66{padding-block:var(--ds-space-050,4px)}._16qs130s{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #1e1f2126,0 0 1px #1e1f214f)}
3
+ ._18m915vq{overflow-y:hidden}
4
+ ._1bsb5x59{width:340px}
5
+ ._1reo15vq{overflow-x:hidden}
6
+ ._bfhk1bhr{background-color:var(--ds-surface-overlay,#fff)}