@atlaskit/editor-plugin-type-ahead 13.2.0 → 13.2.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 (69) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/pm-plugins/commands/insert-type-ahead-item.js +96 -1
  3. package/dist/cjs/ui/ContentComponent.js +4 -0
  4. package/dist/cjs/ui/InputQuery.js +21 -14
  5. package/dist/cjs/ui/WrapperTypeAhead.js +23 -1
  6. package/dist/cjs/ui/hooks/use-load-items.js +6 -1
  7. package/dist/cjs/ui/registered-menu/PassThrough.js +10 -0
  8. package/dist/cjs/ui/registered-menu/RegisteredTypeAheadMenu.js +146 -0
  9. package/dist/cjs/ui/registered-menu/TypeAheadContext.js +8 -0
  10. package/dist/cjs/ui/registered-menu/TypeAheadItemRow.js +27 -0
  11. package/dist/cjs/ui/registered-menu/TypeAheadProvider.js +8 -0
  12. package/dist/cjs/ui/registered-menu/buildTypeAheadMenuModel.js +50 -0
  13. package/dist/cjs/ui/registered-menu/getTypeAheadItemId.js +9 -0
  14. package/dist/cjs/ui/registered-menu/quick-insert/TypeAheadQuickInsertItem.js +37 -0
  15. package/dist/cjs/ui/registered-menu/quick-insert/TypeAheadQuickInsertProvider.js +41 -0
  16. package/dist/cjs/ui/registered-menu/typeAheadMenuTypes.js +5 -0
  17. package/dist/cjs/ui/registered-menu/typeAheadSurfaces.js +26 -0
  18. package/dist/cjs/ui/registered-menu/useTypeAheadContext.js +15 -0
  19. package/dist/es2019/pm-plugins/commands/insert-type-ahead-item.js +97 -0
  20. package/dist/es2019/ui/ContentComponent.js +4 -0
  21. package/dist/es2019/ui/InputQuery.js +15 -8
  22. package/dist/es2019/ui/WrapperTypeAhead.js +23 -1
  23. package/dist/es2019/ui/hooks/use-load-items.js +6 -2
  24. package/dist/es2019/ui/registered-menu/PassThrough.js +3 -0
  25. package/dist/es2019/ui/registered-menu/RegisteredTypeAheadMenu.js +127 -0
  26. package/dist/es2019/ui/registered-menu/TypeAheadContext.js +2 -0
  27. package/dist/es2019/ui/registered-menu/TypeAheadItemRow.js +18 -0
  28. package/dist/es2019/ui/registered-menu/TypeAheadProvider.js +2 -0
  29. package/dist/es2019/ui/registered-menu/buildTypeAheadMenuModel.js +24 -0
  30. package/dist/es2019/ui/registered-menu/getTypeAheadItemId.js +1 -0
  31. package/dist/es2019/ui/registered-menu/quick-insert/TypeAheadQuickInsertItem.js +25 -0
  32. package/dist/es2019/ui/registered-menu/quick-insert/TypeAheadQuickInsertProvider.js +33 -0
  33. package/dist/es2019/ui/registered-menu/typeAheadMenuTypes.js +1 -0
  34. package/dist/es2019/ui/registered-menu/typeAheadSurfaces.js +20 -0
  35. package/dist/es2019/ui/registered-menu/useTypeAheadContext.js +9 -0
  36. package/dist/esm/pm-plugins/commands/insert-type-ahead-item.js +95 -0
  37. package/dist/esm/ui/ContentComponent.js +4 -0
  38. package/dist/esm/ui/InputQuery.js +21 -14
  39. package/dist/esm/ui/WrapperTypeAhead.js +23 -1
  40. package/dist/esm/ui/hooks/use-load-items.js +6 -1
  41. package/dist/esm/ui/registered-menu/PassThrough.js +4 -0
  42. package/dist/esm/ui/registered-menu/RegisteredTypeAheadMenu.js +137 -0
  43. package/dist/esm/ui/registered-menu/TypeAheadContext.js +2 -0
  44. package/dist/esm/ui/registered-menu/TypeAheadItemRow.js +19 -0
  45. package/dist/esm/ui/registered-menu/TypeAheadProvider.js +2 -0
  46. package/dist/esm/ui/registered-menu/buildTypeAheadMenuModel.js +44 -0
  47. package/dist/esm/ui/registered-menu/getTypeAheadItemId.js +3 -0
  48. package/dist/esm/ui/registered-menu/quick-insert/TypeAheadQuickInsertItem.js +28 -0
  49. package/dist/esm/ui/registered-menu/quick-insert/TypeAheadQuickInsertProvider.js +33 -0
  50. package/dist/esm/ui/registered-menu/typeAheadMenuTypes.js +1 -0
  51. package/dist/esm/ui/registered-menu/typeAheadSurfaces.js +20 -0
  52. package/dist/esm/ui/registered-menu/useTypeAheadContext.js +9 -0
  53. package/dist/types/pm-plugins/commands/insert-type-ahead-item.d.ts +7 -0
  54. package/dist/types/typeAheadPluginType.d.ts +3 -1
  55. package/dist/types/ui/InputQuery.d.ts +10 -2
  56. package/dist/types/ui/hooks/use-load-items.d.ts +1 -1
  57. package/dist/types/ui/registered-menu/PassThrough.d.ts +2 -0
  58. package/dist/types/ui/registered-menu/RegisteredTypeAheadMenu.d.ts +30 -0
  59. package/dist/types/ui/registered-menu/TypeAheadContext.d.ts +14 -0
  60. package/dist/types/ui/registered-menu/TypeAheadItemRow.d.ts +11 -0
  61. package/dist/types/ui/registered-menu/TypeAheadProvider.d.ts +3 -0
  62. package/dist/types/ui/registered-menu/buildTypeAheadMenuModel.d.ts +7 -0
  63. package/dist/types/ui/registered-menu/getTypeAheadItemId.d.ts +1 -0
  64. package/dist/types/ui/registered-menu/quick-insert/TypeAheadQuickInsertItem.d.ts +3 -0
  65. package/dist/types/ui/registered-menu/quick-insert/TypeAheadQuickInsertProvider.d.ts +2 -0
  66. package/dist/types/ui/registered-menu/typeAheadMenuTypes.d.ts +9 -0
  67. package/dist/types/ui/registered-menu/typeAheadSurfaces.d.ts +17 -0
  68. package/dist/types/ui/registered-menu/useTypeAheadContext.d.ts +2 -0
  69. package/package.json +8 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @atlaskit/editor-plugin-type-ahead
2
2
 
3
+ ## 13.2.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [`4bc741a70d678`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/4bc741a70d678) -
8
+ Add the first registry-backed Quick Insert slice with Table
9
+ - Updated dependencies
10
+
11
+ ## 13.2.1
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies
16
+
3
17
  ## 13.2.0
4
18
 
5
19
  ### Minor Changes
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.insertTypeAheadItem = void 0;
7
+ exports.performTypeAheadSelection = exports.insertTypeAheadItem = void 0;
8
8
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
9
  var _steps = require("@atlaskit/adf-schema/steps");
10
10
  var _typeAhead = require("@atlaskit/editor-common/type-ahead");
@@ -202,4 +202,99 @@ var insertTypeAheadItem = exports.insertTypeAheadItem = function insertTypeAhead
202
202
  view.dispatch(tr);
203
203
  view.focus();
204
204
  };
205
+ };
206
+ var executeTypeAheadSelection = function executeTypeAheadSelection(view) {
207
+ return function (_ref5) {
208
+ var selectItem = _ref5.selectItem,
209
+ handler = _ref5.handler,
210
+ mode = _ref5.mode,
211
+ query = _ref5.query,
212
+ sourceListItem = _ref5.sourceListItem;
213
+ var pluginState = (0, _utils.getPluginState)(view.state);
214
+ if (!pluginState) {
215
+ return;
216
+ }
217
+ var stats = (pluginState.stats || new _statsModifier.StatsModifier()).serialize();
218
+ var meta = {
219
+ mode: mode,
220
+ query: query,
221
+ stats: stats,
222
+ sourceListItem: sourceListItem
223
+ };
224
+ var tr = view.state.tr;
225
+ var trigger = handler.trigger;
226
+ var text = "".concat(trigger).concat(query);
227
+ if (mode === _typeAhead.SelectItemMode.SPACE) {
228
+ text = text.trim().concat(' ');
229
+ }
230
+ var selectedIndex = -1;
231
+ var wasInsertedBySpace = mode === _typeAhead.SelectItemMode.SPACE;
232
+ var textStartPosition = tr.selection.from;
233
+ var insertItem = function insertItem(newEditorState) {
234
+ var insertCallback = createInsertCallback({
235
+ editorState: newEditorState,
236
+ query: query,
237
+ mode: mode,
238
+ handler: handler,
239
+ wasInsertedBySpace: wasInsertedBySpace,
240
+ selectedIndex: selectedIndex,
241
+ textInserted: text,
242
+ textStartPosition: textStartPosition
243
+ });
244
+ var wasInsertCallbackCalled = false;
245
+ var insertCallbackProxy = new Proxy(insertCallback, {
246
+ apply: function apply(target, _thisContext, argumentsList) {
247
+ wasInsertCallbackCalled = true;
248
+ return target.apply(void 0, (0, _toConsumableArray2.default)(argumentsList));
249
+ }
250
+ });
251
+ var nextTr = selectItem(newEditorState, insertCallbackProxy, meta);
252
+ if (!wasInsertCallbackCalled && nextTr) {
253
+ (0, _prosemirrorHistory.closeHistory)(nextTr);
254
+ if (!nextTr.getMeta(_key.pluginKey)) {
255
+ (0, _closeTypeAhead.closeTypeAhead)(nextTr);
256
+ }
257
+ }
258
+ return nextTr || false;
259
+ };
260
+ var position = {
261
+ start: tr.selection.from,
262
+ end: tr.selection.from + text.length
263
+ };
264
+ tr.setMeta(_key.pluginKey, {
265
+ action: _actions.ACTIONS.INSERT_RAW_QUERY,
266
+ params: createDeleteRawTextCallback({
267
+ wasInsertedBySpace: wasInsertedBySpace,
268
+ selectedIndex: selectedIndex,
269
+ insertItem: insertItem,
270
+ position: position,
271
+ query: query,
272
+ trigger: trigger
273
+ })
274
+ });
275
+ tr.insertText(text);
276
+ (0, _prosemirrorHistory.closeHistory)(tr);
277
+ view.dispatch(tr);
278
+ view.focus();
279
+ };
280
+ };
281
+ var performTypeAheadSelection = exports.performTypeAheadSelection = function performTypeAheadSelection(view) {
282
+ return function (_ref6) {
283
+ var inputMethod = _ref6.inputMethod,
284
+ selectionHandler = _ref6.selectionHandler,
285
+ handler = _ref6.handler,
286
+ query = _ref6.query;
287
+ executeTypeAheadSelection(view)({
288
+ handler: handler,
289
+ mode: _typeAhead.SelectItemMode.SELECTED,
290
+ query: query,
291
+ sourceListItem: [],
292
+ selectItem: function selectItem(_state, insert) {
293
+ return selectionHandler({
294
+ insert: insert,
295
+ source: inputMethod
296
+ });
297
+ }
298
+ });
299
+ };
205
300
  };
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.ContentComponent = ContentComponent;
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
  var _hooks = require("@atlaskit/editor-common/hooks");
10
+ var _typeAheadSurfaces = require("./registered-menu/typeAheadSurfaces");
10
11
  var _TypeAheadMenu = require("./TypeAheadMenu");
11
12
  function ContentComponent(_ref) {
12
13
  var api = _ref.api,
@@ -36,6 +37,9 @@ function ContentComponent(_ref) {
36
37
  if (items === undefined || sections === undefined || decorationSet === undefined || errorInfo === undefined || decorationElement === undefined || query === undefined || selectedIndex === undefined) {
37
38
  return null;
38
39
  }
40
+ if ((0, _typeAheadSurfaces.getTypeAheadSurface)(triggerHandler === null || triggerHandler === void 0 ? void 0 : triggerHandler.id)) {
41
+ return null;
42
+ }
39
43
  return /*#__PURE__*/_react.default.createElement(_TypeAheadMenu.TypeAheadMenu, {
40
44
  editorView: editorView,
41
45
  popupMountRef: popupMountRef
@@ -92,7 +92,9 @@ var getAriaLabel = function getAriaLabel(triggerPrefix, _intl) {
92
92
  }
93
93
  };
94
94
  var InputQuery = exports.InputQuery = /*#__PURE__*/_react.default.memo(function (_ref) {
95
- var triggerQueryPrefix = _ref.triggerQueryPrefix,
95
+ var _ref2;
96
+ var activeDescendantId = _ref.activeDescendantId,
97
+ triggerQueryPrefix = _ref.triggerQueryPrefix,
96
98
  cancel = _ref.cancel,
97
99
  onQueryChange = _ref.onQueryChange,
98
100
  onItemSelect = _ref.onItemSelect,
@@ -103,7 +105,11 @@ var InputQuery = exports.InputQuery = /*#__PURE__*/_react.default.memo(function
103
105
  onQueryFocus = _ref.onQueryFocus,
104
106
  onUndoRedo = _ref.onUndoRedo,
105
107
  editorView = _ref.editorView,
106
- items = _ref.items;
108
+ items = _ref.items,
109
+ listId = _ref.listId,
110
+ optionCount = _ref.optionCount,
111
+ shouldKeepOpenOnRegisteredMenu = _ref.shouldKeepOpenOnRegisteredMenu;
112
+ var resolvedOptionCount = (_ref2 = optionCount !== null && optionCount !== void 0 ? optionCount : items === null || items === void 0 ? void 0 : items.length) !== null && _ref2 !== void 0 ? _ref2 : 0;
107
113
  var ref = (0, _react.useRef)(document.createElement('span'));
108
114
  var inputRef = (0, _react.useRef)(null);
109
115
  var _useState = (0, _react.useState)(null),
@@ -146,9 +152,9 @@ var InputQuery = exports.InputQuery = /*#__PURE__*/_react.default.memo(function
146
152
  var raw = ((_ref$current2 = ref.current) === null || _ref$current2 === void 0 ? void 0 : _ref$current2.textContent) || '';
147
153
  var text = cleanedInputContent();
148
154
  var stopDefault = false;
149
- var _ref2 = (0, _utils2.getPluginState)(editorView.state) || {},
150
- selectedIndex = _ref2.selectedIndex,
151
- removePrefixTriggerOnCancel = _ref2.removePrefixTriggerOnCancel;
155
+ var _ref3 = (0, _utils2.getPluginState)(editorView.state) || {},
156
+ selectedIndex = _ref3.selectedIndex,
157
+ removePrefixTriggerOnCancel = _ref3.removePrefixTriggerOnCancel;
152
158
  setInFocus(true);
153
159
  switch (key) {
154
160
  case ' ':
@@ -235,8 +241,8 @@ var InputQuery = exports.InputQuery = /*#__PURE__*/_react.default.memo(function
235
241
  }
236
242
  var browser = (0, _browser.getBrowserInfo)();
237
243
  var element = ref.current;
238
- var _ref3 = (0, _utils2.getPluginState)(editorView.state) || {},
239
- removePrefixTriggerOnCancel = _ref3.removePrefixTriggerOnCancel;
244
+ var _ref4 = (0, _utils2.getPluginState)(editorView.state) || {},
245
+ removePrefixTriggerOnCancel = _ref4.removePrefixTriggerOnCancel;
240
246
  var onFocusIn = function onFocusIn(_event) {
241
247
  onQueryFocus();
242
248
  };
@@ -289,7 +295,7 @@ var InputQuery = exports.InputQuery = /*#__PURE__*/_react.default.memo(function
289
295
  // Given the user is changing the focus
290
296
  // When the target is inside the TypeAhead Popup
291
297
  // Then the popup should stay open
292
- if (relatedTarget instanceof HTMLElement && relatedTarget.closest && relatedTarget.closest(".".concat(_constants.TYPE_AHEAD_POPUP_CONTENT_CLASS))) {
298
+ if (relatedTarget instanceof HTMLElement && relatedTarget.closest && (relatedTarget.closest(".".concat(_constants.TYPE_AHEAD_POPUP_CONTENT_CLASS)) || shouldKeepOpenOnRegisteredMenu && relatedTarget.closest('[data-registered-type-ahead-menu]'))) {
293
299
  return;
294
300
  }
295
301
 
@@ -408,7 +414,7 @@ var InputQuery = exports.InputQuery = /*#__PURE__*/_react.default.memo(function
408
414
  element.removeEventListener('input', onInput);
409
415
  }
410
416
  };
411
- }, [triggerQueryPrefix, cleanedInputContent, onQueryFocus, cancel, checkKeyEvent, editorView.state, isEditorControlsEnabled]);
417
+ }, [triggerQueryPrefix, cleanedInputContent, onQueryFocus, cancel, checkKeyEvent, editorView.state, isEditorControlsEnabled, shouldKeepOpenOnRegisteredMenu]);
412
418
  (0, _react.useLayoutEffect)(function () {
413
419
  var hasReopenQuery = typeof reopenQuery === 'string' && reopenQuery.trim().length > 0;
414
420
  if (ref.current && forceFocus) {
@@ -457,9 +463,10 @@ var InputQuery = exports.InputQuery = /*#__PURE__*/_react.default.memo(function
457
463
  tabIndex: -1,
458
464
  onInput: isSearchPlaceholderEnabled ? onInput : undefined,
459
465
  role: "combobox",
460
- "aria-controls": _constants.TYPE_AHEAD_DECORATION_ELEMENT_ID,
466
+ "aria-activedescendant": activeDescendantId,
467
+ "aria-controls": listId !== null && listId !== void 0 ? listId : _constants.TYPE_AHEAD_DECORATION_ELEMENT_ID,
461
468
  "aria-autocomplete": "list",
462
- "aria-expanded": items.length !== 0,
469
+ "aria-expanded": resolvedOptionCount !== 0,
463
470
  "aria-labelledby": assistiveHintID,
464
471
  suppressContentEditableWarning: true,
465
472
  "data-query-prefix": triggerQueryPrefix
@@ -477,10 +484,10 @@ var InputQuery = exports.InputQuery = /*#__PURE__*/_react.default.memo(function
477
484
  display: 'none'
478
485
  }
479
486
  }, intl.formatMessage(_typeAhead.typeAheadListMessages.inputQueryAssistiveLabel)), (0, _react2.jsx)(_ui.AssistiveText, {
480
- assistiveText: items.length === 0 ? intl.formatMessage(_typeAhead.typeAheadListMessages.noSearchResultsLabel, {
481
- itemsLength: items.length
487
+ assistiveText: resolvedOptionCount === 0 ? intl.formatMessage(_typeAhead.typeAheadListMessages.noSearchResultsLabel, {
488
+ itemsLength: resolvedOptionCount
482
489
  }) : '',
483
- isInFocus: items.length === 0 || isInFocus,
490
+ isInFocus: resolvedOptionCount === 0 || isInFocus,
484
491
  id: _constants.TYPE_AHEAD_DECORATION_ELEMENT_ID
485
492
  }));
486
493
  });
@@ -22,6 +22,8 @@ var _useItemInsert3 = require("./hooks/use-item-insert");
22
22
  var _useLoadItems = require("./hooks/use-load-items");
23
23
  var _useOnForceSelect = require("./hooks/use-on-force-select");
24
24
  var _InputQuery = require("./InputQuery");
25
+ var _RegisteredTypeAheadMenu = require("./registered-menu/RegisteredTypeAheadMenu");
26
+ var _typeAheadSurfaces = require("./registered-menu/typeAheadSurfaces");
25
27
  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
28
  var WrapperTypeAhead = exports.WrapperTypeAhead = /*#__PURE__*/_react.default.memo(function (_ref) {
27
29
  var triggerHandler = _ref.triggerHandler,
@@ -53,7 +55,8 @@ var WrapperTypeAhead = exports.WrapperTypeAhead = /*#__PURE__*/_react.default.me
53
55
  setQuery = _useState4[1];
54
56
  var queryRef = (0, _react.useRef)(query);
55
57
  var editorViewRef = (0, _react.useRef)(editorView);
56
- var items = (0, _useLoadItems.useLoadItems)(triggerHandler, editorView, query, showMoreOptionsButton, api, intl);
58
+ var registeredSurface = (0, _typeAheadSurfaces.getTypeAheadSurface)(triggerHandler.id);
59
+ var items = (0, _useLoadItems.useLoadItems)(triggerHandler, editorView, query, showMoreOptionsButton, api, intl, !registeredSurface);
57
60
  (0, _react.useEffect)(function () {
58
61
  if (!closed && (0, _platformFeatureFlags.fg)('platform_editor_ease_of_use_metrics')) {
59
62
  var _api$metrics;
@@ -160,6 +163,25 @@ var WrapperTypeAhead = exports.WrapperTypeAhead = /*#__PURE__*/_react.default.me
160
163
  if (!triggerHandler) {
161
164
  return null;
162
165
  }
166
+ if (registeredSurface) {
167
+ return /*#__PURE__*/_react.default.createElement(_RegisteredTypeAheadMenu.RegisteredTypeAheadMenu, {
168
+ anchorElement: anchorElement,
169
+ api: api,
170
+ cancel: cancel,
171
+ editorView: editorView,
172
+ forceFocus: shouldFocusCursorInsideQuery,
173
+ onClose: closePopup,
174
+ onUndoRedo: onUndoRedo,
175
+ popupsBoundariesElement: popupsBoundariesElement,
176
+ popupsMountPoint: popupsMountPoint,
177
+ popupsScrollableElement: popupsScrollableElement,
178
+ query: query,
179
+ reopenQuery: reopenQuery,
180
+ setQuery: setQuery,
181
+ surface: registeredSurface,
182
+ triggerHandler: triggerHandler
183
+ });
184
+ }
163
185
  return /*#__PURE__*/_react.default.createElement(_InputQuery.InputQuery, {
164
186
  triggerQueryPrefix: triggerHandler === null || triggerHandler === void 0 ? void 0 : triggerHandler.trigger,
165
187
  onQueryChange: setQuery,
@@ -15,6 +15,7 @@ var _updateListItems = require("../../pm-plugins/commands/update-list-items");
15
15
  var _buildSectionedResult2 = require("./build-sectioned-result");
16
16
  var EMPTY_LIST_ITEM = [];
17
17
  var useLoadItems = exports.useLoadItems = function useLoadItems(triggerHandler, editorView, query, showViewMore, api, intl) {
18
+ var enabled = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true;
18
19
  var _useState = (0, _react.useState)(EMPTY_LIST_ITEM),
19
20
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
20
21
  items = _useState2[0],
@@ -24,6 +25,10 @@ var useLoadItems = exports.useLoadItems = function useLoadItems(triggerHandler,
24
25
  var latestQueryRef = (0, _react.useRef)(query);
25
26
  latestQueryRef.current = query;
26
27
  (0, _react.useEffect)(function () {
28
+ if (!enabled) {
29
+ setItems(EMPTY_LIST_ITEM);
30
+ return;
31
+ }
27
32
  var requestQuery = query;
28
33
  var isStaleRequest = function isStaleRequest() {
29
34
  return latestQueryRef.current !== requestQuery;
@@ -128,7 +133,7 @@ var useLoadItems = exports.useLoadItems = function useLoadItems(triggerHandler,
128
133
  // ignore because EditorView is mutable but we don't want to
129
134
  // call loadItems when it changes, only when the query changes
130
135
  // eslint-disable-next-line react-hooks/exhaustive-deps
131
- }, [triggerHandler, query, intl]);
136
+ }, [triggerHandler, query, intl, enabled]);
132
137
  (0, _react.useEffect)(function () {
133
138
  return function () {
134
139
  componentIsMounted.current = false;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PassThrough = void 0;
7
+ var PassThrough = exports.PassThrough = function PassThrough(_ref) {
8
+ var children = _ref.children;
9
+ return children;
10
+ };
@@ -0,0 +1,146 @@
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.RegisteredTypeAheadMenu = 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 _ui = require("@atlaskit/editor-common/ui");
13
+ var _constants = require("@atlaskit/editor-shared-styles/constants");
14
+ var _compiled = require("@atlaskit/primitives/compiled");
15
+ var _InputQuery = require("../InputQuery");
16
+ var _buildTypeAheadMenuModel = require("./buildTypeAheadMenuModel");
17
+ var _getTypeAheadItemId = require("./getTypeAheadItemId");
18
+ var _PassThrough = require("./PassThrough");
19
+ var _TypeAheadItemRow = require("./TypeAheadItemRow");
20
+ var _TypeAheadProvider = require("./TypeAheadProvider");
21
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
22
+ var POPUP_OFFSET = [0, 8];
23
+ var RegisteredTypeAheadMenu = exports.RegisteredTypeAheadMenu = function RegisteredTypeAheadMenu(_ref) {
24
+ var _model$root$component, _model$root;
25
+ var anchorElement = _ref.anchorElement,
26
+ api = _ref.api,
27
+ cancel = _ref.cancel,
28
+ editorView = _ref.editorView,
29
+ forceFocus = _ref.forceFocus,
30
+ onClose = _ref.onClose,
31
+ onUndoRedo = _ref.onUndoRedo,
32
+ popupsBoundariesElement = _ref.popupsBoundariesElement,
33
+ popupsMountPoint = _ref.popupsMountPoint,
34
+ popupsScrollableElement = _ref.popupsScrollableElement,
35
+ query = _ref.query,
36
+ reopenQuery = _ref.reopenQuery,
37
+ setQuery = _ref.setQuery,
38
+ surface = _ref.surface,
39
+ triggerHandler = _ref.triggerHandler;
40
+ var intl = (0, _reactIntl.useIntl)();
41
+ var generatedId = (0, _react.useId)();
42
+ var listId = "".concat(surface.listIdPrefix, "-").concat(generatedId);
43
+ var menuRef = (0, _react.useRef)(null);
44
+ var _useState = (0, _react.useState)(0),
45
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
46
+ selectedItemIndex = _useState2[0],
47
+ setSelectedItemIndex = _useState2[1];
48
+ var components = (0, _react.useMemo)(function () {
49
+ var _api$uiControlRegistr, _api$uiControlRegistr2;
50
+ 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
+ }, [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;
58
+ }).join(',');
59
+ (0, _react.useLayoutEffect)(function () {
60
+ setSelectedItemIndex(model.items.length > 0 ? 0 : -1);
61
+ }, [itemKeySignature, model.items.length, query]);
62
+ var selectActiveItem = (0, _react.useCallback)(function (_mode) {
63
+ var _menuRef$current;
64
+ if (selectedItemIndex < 0) {
65
+ return;
66
+ }
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]);
69
+ var selectNextItem = (0, _react.useCallback)(function () {
70
+ setSelectedItemIndex(function (currentIndex) {
71
+ if (model.items.length === 0) {
72
+ return -1;
73
+ }
74
+ return currentIndex < 0 || currentIndex === model.items.length - 1 ? 0 : currentIndex + 1;
75
+ });
76
+ }, [model.items.length]);
77
+ var selectPreviousItem = (0, _react.useCallback)(function () {
78
+ setSelectedItemIndex(function (currentIndex) {
79
+ if (model.items.length === 0) {
80
+ return -1;
81
+ }
82
+ return currentIndex <= 0 ? model.items.length - 1 : currentIndex - 1;
83
+ });
84
+ }, [model.items.length]);
85
+ var typeAheadContextValue = (0, _react.useMemo)(function () {
86
+ return {
87
+ api: api,
88
+ editorView: editorView,
89
+ inputMethod: surface.inputMethod,
90
+ onClose: onClose,
91
+ query: query,
92
+ triggerHandler: triggerHandler
93
+ };
94
+ }, [api, editorView, onClose, query, surface.inputMethod, triggerHandler]);
95
+ 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
+ var SurfaceProvider = surface.Provider;
98
+ 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,
100
+ cancel: cancel,
101
+ editorView: editorView,
102
+ forceFocus: forceFocus,
103
+ listId: listId,
104
+ onItemSelect: selectActiveItem,
105
+ onQueryChange: setQuery,
106
+ onQueryFocus: noOp,
107
+ onUndoRedo: onUndoRedo,
108
+ optionCount: model.items.length,
109
+ reopenQuery: reopenQuery,
110
+ selectNextItem: selectNextItem,
111
+ selectPreviousItem: selectPreviousItem,
112
+ shouldKeepOpenOnRegisteredMenu: true,
113
+ triggerQueryPrefix: triggerHandler.trigger
114
+ }), /*#__PURE__*/_react.default.createElement(_ui.Popup, {
115
+ ariaLabel: null,
116
+ boundariesElement: popupsBoundariesElement,
117
+ fitWidth: 320,
118
+ mountTo: popupsMountPoint,
119
+ offset: POPUP_OFFSET,
120
+ preventOverflow: true,
121
+ scrollableElement: popupsScrollableElement,
122
+ target: anchorElement,
123
+ zIndex: _constants.akEditorFloatingDialogZIndex
124
+ }, /*#__PURE__*/_react.default.createElement(_compiled.Box, {
125
+ ref: menuRef,
126
+ backgroundColor: "elevation.surface.overlay",
127
+ "data-registered-type-ahead-menu": "",
128
+ padding: "space.050"
129
+ }, /*#__PURE__*/_react.default.createElement(_TypeAheadProvider.TypeAheadProvider, {
130
+ 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
+ }))))))));
146
+ };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TypeAheadContext = void 0;
7
+ var _react = require("react");
8
+ var TypeAheadContext = exports.TypeAheadContext = /*#__PURE__*/(0, _react.createContext)(null);
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.TypeAheadItemRow = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _getTypeAheadItemId = require("./getTypeAheadItemId");
10
+ 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); }
11
+ var TypeAheadItemRow = exports.TypeAheadItemRow = function TypeAheadItemRow(_ref) {
12
+ var isSelected = _ref.isSelected,
13
+ itemIndex = _ref.itemIndex,
14
+ Item = _ref.Item,
15
+ listId = _ref.listId,
16
+ onItemHover = _ref.onItemHover,
17
+ registration = _ref.registration;
18
+ var onMouseMove = (0, _react.useCallback)(function () {
19
+ return onItemHover(itemIndex);
20
+ }, [itemIndex, onItemHover]);
21
+ return /*#__PURE__*/_react.default.createElement(Item, {
22
+ id: (0, _getTypeAheadItemId.getTypeAheadItemId)(listId, itemIndex),
23
+ isSelected: isSelected,
24
+ onMouseMove: onMouseMove,
25
+ registration: registration
26
+ });
27
+ };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TypeAheadProvider = void 0;
7
+ var _TypeAheadContext = require("./TypeAheadContext");
8
+ var TypeAheadProvider = exports.TypeAheadProvider = _TypeAheadContext.TypeAheadContext.Provider;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.buildTypeAheadMenuModel = void 0;
7
+ var _surfaceRenderer = require("@atlaskit/editor-ui-control-model/surface-renderer");
8
+ 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
+ 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
+ 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) {
12
+ var _resolveSurface = (0, _surfaceRenderer.resolveSurface)(components, rootComponent),
13
+ root = _resolveSurface.root,
14
+ childrenMap = _resolveSurface.childrenMap,
15
+ topLevelChildren = _resolveSurface.topLevelChildren;
16
+ var items = [];
17
+ var _iterator = _createForOfIteratorHelper(topLevelChildren !== null && topLevelChildren !== void 0 ? topLevelChildren : []),
18
+ _step;
19
+ try {
20
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
21
+ var _childrenMap$get;
22
+ var section = _step.value;
23
+ if (section.type !== 'menu-section' || !(0, _surfaceRenderer.willComponentRender)(section, childrenMap)) {
24
+ continue;
25
+ }
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
+ }
34
+ }
35
+ } catch (err) {
36
+ _iterator2.e(err);
37
+ } finally {
38
+ _iterator2.f();
39
+ }
40
+ }
41
+ } catch (err) {
42
+ _iterator.e(err);
43
+ } finally {
44
+ _iterator.f();
45
+ }
46
+ return {
47
+ items: items,
48
+ root: root
49
+ };
50
+ };
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getTypeAheadItemId = void 0;
7
+ var getTypeAheadItemId = exports.getTypeAheadItemId = function getTypeAheadItemId(listId, itemIndex) {
8
+ return "".concat(listId, "--").concat(itemIndex);
9
+ };
@@ -0,0 +1,37 @@
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.TypeAheadQuickInsertItem = void 0;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _provider = require("@atlaskit/editor-common/quick-insert/provider");
12
+ var _useQuickInsertContext = require("@atlaskit/editor-common/quick-insert/use-quick-insert-context");
13
+ var _PassThrough = require("../PassThrough");
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
+ 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
+ var TypeAheadQuickInsertItem = exports.TypeAheadQuickInsertItem = function TypeAheadQuickInsertItem(_ref) {
18
+ var _registration$compone;
19
+ var id = _ref.id,
20
+ isSelected = _ref.isSelected,
21
+ onMouseMove = _ref.onMouseMove,
22
+ registration = _ref.registration;
23
+ var quickInsertContext = (0, _useQuickInsertContext.useQuickInsertContext)();
24
+ var Component = (_registration$compone = registration.component) !== null && _registration$compone !== void 0 ? _registration$compone : _PassThrough.PassThrough;
25
+ var contextValue = (0, _react.useMemo)(function () {
26
+ return _objectSpread(_objectSpread({}, quickInsertContext), {}, {
27
+ item: {
28
+ id: id,
29
+ isSelected: isSelected,
30
+ onMouseMove: onMouseMove
31
+ }
32
+ });
33
+ }, [id, isSelected, onMouseMove, quickInsertContext]);
34
+ return /*#__PURE__*/_react.default.createElement(_provider.QuickInsertProvider, {
35
+ value: contextValue
36
+ }, /*#__PURE__*/_react.default.createElement(Component, null, null));
37
+ };