@algolia/autocomplete-core 1.8.2 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/esm/createAutocomplete.js +12 -9
  2. package/dist/esm/createStore.js +4 -5
  3. package/dist/esm/getAutocompleteSetters.d.ts +6 -6
  4. package/dist/esm/getAutocompleteSetters.js +4 -11
  5. package/dist/esm/getCompletion.js +0 -3
  6. package/dist/esm/getDefaultProps.js +6 -22
  7. package/dist/esm/getPropGetters.js +40 -69
  8. package/dist/esm/metadata.js +6 -9
  9. package/dist/esm/onInput.js +25 -34
  10. package/dist/esm/onKeyDown.js +30 -40
  11. package/dist/esm/reshape.d.ts +1 -1
  12. package/dist/esm/reshape.js +17 -19
  13. package/dist/esm/resolve.js +10 -28
  14. package/dist/esm/stateReducer.js +7 -24
  15. package/dist/esm/types/AutocompleteStore.d.ts +1 -3
  16. package/dist/esm/types/AutocompleteSubscribers.d.ts +1 -2
  17. package/dist/esm/types/index.d.ts +16 -11
  18. package/dist/esm/types/index.js +3 -12
  19. package/dist/esm/utils/createCancelablePromise.js +0 -8
  20. package/dist/esm/utils/createConcurrentSafePromise.js +0 -1
  21. package/dist/esm/utils/getActiveItem.d.ts +1 -1
  22. package/dist/esm/utils/getActiveItem.js +4 -12
  23. package/dist/esm/utils/getNextActiveItemId.js +0 -4
  24. package/dist/esm/utils/getNormalizedSources.js +5 -10
  25. package/dist/esm/utils/mapToAlgoliaResponse.d.ts +1 -1
  26. package/dist/esm/utils/mapToAlgoliaResponse.js +4 -6
  27. package/dist/umd/index.development.js +961 -387
  28. package/dist/umd/index.development.js.map +1 -1
  29. package/dist/umd/index.production.js +2 -2
  30. package/dist/umd/index.production.js.map +1 -1
  31. package/package.json +6 -5
  32. package/dist/esm/types/AutocompleteApi.d.ts +0 -15
  33. package/dist/esm/types/AutocompleteApi.js +0 -1
  34. package/dist/esm/types/AutocompleteCollection.d.ts +0 -10
  35. package/dist/esm/types/AutocompleteCollection.js +0 -1
  36. package/dist/esm/types/AutocompleteContext.d.ts +0 -3
  37. package/dist/esm/types/AutocompleteContext.js +0 -1
  38. package/dist/esm/types/AutocompleteEnvironment.d.ts +0 -13
  39. package/dist/esm/types/AutocompleteEnvironment.js +0 -1
  40. package/dist/esm/types/AutocompleteNavigator.d.ts +0 -28
  41. package/dist/esm/types/AutocompleteNavigator.js +0 -1
  42. package/dist/esm/types/AutocompleteOptions.d.ts +0 -185
  43. package/dist/esm/types/AutocompleteOptions.js +0 -1
  44. package/dist/esm/types/AutocompletePlugin.d.ts +0 -43
  45. package/dist/esm/types/AutocompletePlugin.js +0 -1
  46. package/dist/esm/types/AutocompletePropGetters.d.ts +0 -100
  47. package/dist/esm/types/AutocompletePropGetters.js +0 -1
  48. package/dist/esm/types/AutocompleteReshape.d.ts +0 -25
  49. package/dist/esm/types/AutocompleteReshape.js +0 -1
  50. package/dist/esm/types/AutocompleteSetters.d.ts +0 -46
  51. package/dist/esm/types/AutocompleteSetters.js +0 -1
  52. package/dist/esm/types/AutocompleteSource.d.ts +0 -75
  53. package/dist/esm/types/AutocompleteSource.js +0 -1
  54. package/dist/esm/types/AutocompleteState.d.ts +0 -12
  55. package/dist/esm/types/AutocompleteState.js +0 -1
@@ -1,15 +1,12 @@
1
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
1
2
  var _excluded = ["event", "nextState", "props", "query", "refresh", "store"];
2
-
3
3
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
-
5
4
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
-
7
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8
-
5
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
7
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
9
8
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
10
-
11
9
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
12
-
13
10
  import { reshape } from './reshape';
14
11
  import { preResolve, resolve, postResolve } from './resolve';
15
12
  import { cancelable, createConcurrentSafePromise, getActiveItem } from './utils';
@@ -17,29 +14,25 @@ var lastStalledId = null;
17
14
  var runConcurrentSafePromise = createConcurrentSafePromise();
18
15
  export function onInput(_ref) {
19
16
  var event = _ref.event,
20
- _ref$nextState = _ref.nextState,
21
- nextState = _ref$nextState === void 0 ? {} : _ref$nextState,
22
- props = _ref.props,
23
- query = _ref.query,
24
- refresh = _ref.refresh,
25
- store = _ref.store,
26
- setters = _objectWithoutProperties(_ref, _excluded);
27
-
17
+ _ref$nextState = _ref.nextState,
18
+ nextState = _ref$nextState === void 0 ? {} : _ref$nextState,
19
+ props = _ref.props,
20
+ query = _ref.query,
21
+ refresh = _ref.refresh,
22
+ store = _ref.store,
23
+ setters = _objectWithoutProperties(_ref, _excluded);
28
24
  if (lastStalledId) {
29
25
  props.environment.clearTimeout(lastStalledId);
30
26
  }
31
-
32
27
  var setCollections = setters.setCollections,
33
- setIsOpen = setters.setIsOpen,
34
- setQuery = setters.setQuery,
35
- setActiveItemId = setters.setActiveItemId,
36
- setStatus = setters.setStatus;
28
+ setIsOpen = setters.setIsOpen,
29
+ setQuery = setters.setQuery,
30
+ setActiveItemId = setters.setActiveItemId,
31
+ setStatus = setters.setStatus;
37
32
  setQuery(query);
38
33
  setActiveItemId(props.defaultActiveItemId);
39
-
40
34
  if (!query && props.openOnFocus === false) {
41
35
  var _nextState$isOpen;
42
-
43
36
  var collections = store.getState().collections.map(function (collection) {
44
37
  return _objectSpread(_objectSpread({}, collection), {}, {
45
38
  items: []
@@ -49,28 +42,28 @@ export function onInput(_ref) {
49
42
  setCollections(collections);
50
43
  setIsOpen((_nextState$isOpen = nextState.isOpen) !== null && _nextState$isOpen !== void 0 ? _nextState$isOpen : props.shouldPanelOpen({
51
44
  state: store.getState()
52
- })); // We make sure to update the latest resolved value of the tracked
45
+ }));
46
+
47
+ // We make sure to update the latest resolved value of the tracked
53
48
  // promises to keep late resolving promises from "cancelling" the state
54
49
  // updates performed in this code path.
55
50
  // We chain with a void promise to respect `onInput`'s expected return type.
56
-
57
51
  var _request = cancelable(runConcurrentSafePromise(collections).then(function () {
58
52
  return Promise.resolve();
59
53
  }));
60
-
61
54
  return store.pendingRequests.add(_request);
62
55
  }
63
-
64
56
  setStatus('loading');
65
57
  lastStalledId = props.environment.setTimeout(function () {
66
58
  setStatus('stalled');
67
- }, props.stallThreshold); // We track the entire promise chain triggered by `onInput` before mutating
59
+ }, props.stallThreshold);
60
+
61
+ // We track the entire promise chain triggered by `onInput` before mutating
68
62
  // the Autocomplete state to make sure that any state manipulation is based on
69
63
  // fresh data regardless of when promises individually resolve.
70
64
  // We don't track nested promises and only rely on the full chain resolution,
71
65
  // meaning we should only ever manipulate the state once this concurrent-safe
72
66
  // promise is resolved.
73
-
74
67
  var request = cancelable(runConcurrentSafePromise(props.getSources(_objectSpread({
75
68
  query: query,
76
69
  refresh: refresh,
@@ -95,11 +88,11 @@ export function onInput(_ref) {
95
88
  });
96
89
  }))).then(function (collections) {
97
90
  var _nextState$isOpen2;
98
-
99
91
  // Parameters passed to `onInput` could be stale when the following code
100
92
  // executes, because `onInput` calls may not resolve in order.
101
93
  // If it becomes a problem we'll need to save the last passed parameters.
102
94
  // See: https://codesandbox.io/s/agitated-cookies-y290z
95
+
103
96
  setStatus('idle');
104
97
  setCollections(collections);
105
98
  var isPanelOpen = props.shouldPanelOpen({
@@ -107,12 +100,11 @@ export function onInput(_ref) {
107
100
  });
108
101
  setIsOpen((_nextState$isOpen2 = nextState.isOpen) !== null && _nextState$isOpen2 !== void 0 ? _nextState$isOpen2 : props.openOnFocus && !query && isPanelOpen || isPanelOpen);
109
102
  var highlightedItem = getActiveItem(store.getState());
110
-
111
103
  if (store.getState().activeItemId !== null && highlightedItem) {
112
104
  var item = highlightedItem.item,
113
- itemInputValue = highlightedItem.itemInputValue,
114
- itemUrl = highlightedItem.itemUrl,
115
- source = highlightedItem.source;
105
+ itemInputValue = highlightedItem.itemInputValue,
106
+ itemUrl = highlightedItem.itemUrl,
107
+ source = highlightedItem.source;
116
108
  source.onActive(_objectSpread({
117
109
  event: event,
118
110
  item: item,
@@ -125,7 +117,6 @@ export function onInput(_ref) {
125
117
  }
126
118
  }).finally(function () {
127
119
  setStatus('idle');
128
-
129
120
  if (lastStalledId) {
130
121
  props.environment.clearTimeout(lastStalledId);
131
122
  }
@@ -1,29 +1,24 @@
1
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
1
2
  var _excluded = ["event", "props", "refresh", "store"];
2
-
3
3
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
-
5
4
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
-
7
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8
-
5
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
7
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
9
8
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
10
-
11
9
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
12
-
13
10
  import { onInput } from './onInput';
14
11
  import { getActiveItem } from './utils';
15
12
  export function onKeyDown(_ref) {
16
13
  var event = _ref.event,
17
- props = _ref.props,
18
- refresh = _ref.refresh,
19
- store = _ref.store,
20
- setters = _objectWithoutProperties(_ref, _excluded);
21
-
14
+ props = _ref.props,
15
+ refresh = _ref.refresh,
16
+ store = _ref.store,
17
+ setters = _objectWithoutProperties(_ref, _excluded);
22
18
  if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
23
19
  // eslint-disable-next-line no-inner-declarations
24
20
  var triggerScrollIntoView = function triggerScrollIntoView() {
25
21
  var nodeItem = props.environment.document.getElementById("".concat(props.id, "-item-").concat(store.getState().activeItemId));
26
-
27
22
  if (nodeItem) {
28
23
  if (nodeItem.scrollIntoViewIfNeeded) {
29
24
  nodeItem.scrollIntoViewIfNeeded(false);
@@ -32,16 +27,13 @@ export function onKeyDown(_ref) {
32
27
  }
33
28
  }
34
29
  }; // eslint-disable-next-line no-inner-declarations
35
-
36
-
37
30
  var triggerOnActive = function triggerOnActive() {
38
31
  var highlightedItem = getActiveItem(store.getState());
39
-
40
32
  if (store.getState().activeItemId !== null && highlightedItem) {
41
33
  var item = highlightedItem.item,
42
- itemInputValue = highlightedItem.itemInputValue,
43
- itemUrl = highlightedItem.itemUrl,
44
- source = highlightedItem.source;
34
+ itemInputValue = highlightedItem.itemInputValue,
35
+ itemUrl = highlightedItem.itemUrl,
36
+ source = highlightedItem.source;
45
37
  source.onActive(_objectSpread({
46
38
  event: event,
47
39
  item: item,
@@ -54,11 +46,10 @@ export function onKeyDown(_ref) {
54
46
  }
55
47
  }; // Default browser behavior changes the caret placement on ArrowUp and
56
48
  // ArrowDown.
49
+ event.preventDefault();
57
50
 
58
-
59
- event.preventDefault(); // When re-opening the panel, we need to split the logic to keep the actions
51
+ // When re-opening the panel, we need to split the logic to keep the actions
60
52
  // synchronized as `onInput` returns a promise.
61
-
62
53
  if (store.getState().isOpen === false && (props.openOnFocus || Boolean(store.getState().query))) {
63
54
  onInput(_objectSpread({
64
55
  event: event,
@@ -70,10 +61,10 @@ export function onKeyDown(_ref) {
70
61
  store.dispatch(event.key, {
71
62
  nextActiveItemId: props.defaultActiveItemId
72
63
  });
73
- triggerOnActive(); // Since we rely on the DOM, we need to wait for all the micro tasks to
64
+ triggerOnActive();
65
+ // Since we rely on the DOM, we need to wait for all the micro tasks to
74
66
  // finish (which include re-opening the panel) to make sure all the
75
67
  // elements are available.
76
-
77
68
  setTimeout(triggerScrollIntoView, 0);
78
69
  });
79
70
  } else {
@@ -86,18 +77,20 @@ export function onKeyDown(_ref) {
86
77
  // from removing the query right away because we first want to close the
87
78
  // panel.
88
79
  event.preventDefault();
89
- store.dispatch(event.key, null); // Hitting the `Escape` key signals the end of a user interaction with the
80
+ store.dispatch(event.key, null);
81
+
82
+ // Hitting the `Escape` key signals the end of a user interaction with the
90
83
  // autocomplete. At this point, we should ignore any requests that are still
91
84
  // pending and could reopen the panel once they resolve, because that would
92
85
  // result in an unsolicited UI behavior.
93
-
94
86
  store.pendingRequests.cancelAll();
95
87
  } else if (event.key === 'Tab') {
96
- store.dispatch('blur', null); // Hitting the `Escape` key signals the end of a user interaction with the
88
+ store.dispatch('blur', null);
89
+
90
+ // Hitting the `Escape` key signals the end of a user interaction with the
97
91
  // autocomplete. At this point, we should ignore any requests that are still
98
92
  // pending and could reopen the panel once they resolve, because that would
99
93
  // result in an unsolicited UI behavior.
100
-
101
94
  store.pendingRequests.cancelAll();
102
95
  } else if (event.key === 'Enter') {
103
96
  // No active item, so we let the browser handle the native `onSubmit` form
@@ -112,20 +105,17 @@ export function onKeyDown(_ref) {
112
105
  if (!props.debug) {
113
106
  store.pendingRequests.cancelAll();
114
107
  }
115
-
116
108
  return;
117
- } // This prevents the `onSubmit` event to be sent because an item is
118
- // highlighted.
119
-
109
+ }
120
110
 
111
+ // This prevents the `onSubmit` event to be sent because an item is
112
+ // highlighted.
121
113
  event.preventDefault();
122
-
123
114
  var _ref2 = getActiveItem(store.getState()),
124
- item = _ref2.item,
125
- itemInputValue = _ref2.itemInputValue,
126
- itemUrl = _ref2.itemUrl,
127
- source = _ref2.source;
128
-
115
+ item = _ref2.item,
116
+ itemInputValue = _ref2.itemInputValue,
117
+ itemUrl = _ref2.itemUrl,
118
+ source = _ref2.source;
129
119
  if (event.metaKey || event.ctrlKey) {
130
120
  if (itemUrl !== undefined) {
131
121
  source.onSelect(_objectSpread({
@@ -160,7 +150,8 @@ export function onKeyDown(_ref) {
160
150
  state: store.getState()
161
151
  });
162
152
  }
163
- } else if (event.altKey) {// Keep native browser behavior
153
+ } else if (event.altKey) {
154
+ // Keep native browser behavior
164
155
  } else {
165
156
  if (itemUrl !== undefined) {
166
157
  source.onSelect(_objectSpread({
@@ -179,7 +170,6 @@ export function onKeyDown(_ref) {
179
170
  });
180
171
  return;
181
172
  }
182
-
183
173
  onInput(_objectSpread({
184
174
  event: event,
185
175
  nextState: {
@@ -5,7 +5,7 @@ declare type ReshapeParams<TItem extends BaseItem> = {
5
5
  state: AutocompleteState<TItem>;
6
6
  };
7
7
  export declare function reshape<TItem extends BaseItem>({ collections, props, state, }: ReshapeParams<TItem>): {
8
- source: import("./types").AutocompleteReshapeSource<TItem>;
8
+ source: import("@algolia/autocomplete-shared/dist/esm/core/AutocompleteReshape").AutocompleteReshapeSource<TItem>;
9
9
  items: TItem[];
10
10
  }[];
11
11
  export {};
@@ -1,14 +1,14 @@
1
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
1
2
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
-
3
3
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
-
5
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
-
4
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
6
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
7
7
  import { flatten } from '@algolia/autocomplete-shared';
8
8
  export function reshape(_ref) {
9
9
  var collections = _ref.collections,
10
- props = _ref.props,
11
- state = _ref.state;
10
+ props = _ref.props,
11
+ state = _ref.state;
12
12
  // Sources are grouped by `sourceId` to conveniently pick them via destructuring.
13
13
  // Example: `const { recentSearchesPlugin } = sourcesBySourceId`
14
14
  var originalSourcesBySourceId = collections.reduce(function (acc, collection) {
@@ -19,25 +19,23 @@ export function reshape(_ref) {
19
19
  }
20
20
  })));
21
21
  }, {});
22
-
23
22
  var _props$plugins$reduce = props.plugins.reduce(function (acc, plugin) {
24
- if (plugin.reshape) {
25
- return plugin.reshape(acc);
26
- }
27
-
28
- return acc;
29
- }, {
30
- sourcesBySourceId: originalSourcesBySourceId,
31
- state: state
32
- }),
33
- sourcesBySourceId = _props$plugins$reduce.sourcesBySourceId;
34
-
23
+ if (plugin.reshape) {
24
+ return plugin.reshape(acc);
25
+ }
26
+ return acc;
27
+ }, {
28
+ sourcesBySourceId: originalSourcesBySourceId,
29
+ state: state
30
+ }),
31
+ sourcesBySourceId = _props$plugins$reduce.sourcesBySourceId;
35
32
  var reshapeSources = props.reshape({
36
33
  sourcesBySourceId: sourcesBySourceId,
37
34
  sources: Object.values(sourcesBySourceId),
38
35
  state: state
39
- }); // We reconstruct the collections with the items modified by the `reshape` prop.
36
+ });
40
37
 
38
+ // We reconstruct the collections with the items modified by the `reshape` prop.
41
39
  return flatten(reshapeSources).filter(Boolean).map(function (source) {
42
40
  return {
43
41
  source: source,
@@ -1,39 +1,27 @@
1
1
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
-
3
2
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
-
5
3
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
-
7
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8
-
4
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
6
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
9
7
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
10
-
11
8
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
12
-
13
9
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
14
-
15
10
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
16
-
17
11
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
18
-
19
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
20
-
12
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
21
13
  import { decycle, flatten, invariant } from '@algolia/autocomplete-shared';
22
14
  import { mapToAlgoliaResponse } from './utils';
23
-
24
15
  function isDescription(item) {
25
16
  return Boolean(item.execute);
26
17
  }
27
-
28
18
  function isRequesterDescription(description) {
29
19
  return Boolean(description === null || description === void 0 ? void 0 : description.execute);
30
20
  }
31
-
32
21
  export function preResolve(itemsOrDescription, sourceId, state) {
33
22
  if (isRequesterDescription(itemsOrDescription)) {
34
23
  var contextParameters = itemsOrDescription.requesterId === 'algolia' ? Object.assign.apply(Object, [{}].concat(_toConsumableArray(Object.keys(state.context).map(function (key) {
35
24
  var _state$context$key;
36
-
37
25
  return (_state$context$key = state.context[key]) === null || _state$context$key === void 0 ? void 0 : _state$context$key.__algoliaSearchParameters;
38
26
  })))) : {};
39
27
  return _objectSpread(_objectSpread({}, itemsOrDescription), {}, {
@@ -48,7 +36,6 @@ export function preResolve(itemsOrDescription, sourceId, state) {
48
36
  })
49
37
  });
50
38
  }
51
-
52
39
  return {
53
40
  items: itemsOrDescription,
54
41
  sourceId: sourceId
@@ -60,18 +47,15 @@ export function resolve(items) {
60
47
  acc.push(current);
61
48
  return acc;
62
49
  }
63
-
64
50
  var searchClient = current.searchClient,
65
- execute = current.execute,
66
- requesterId = current.requesterId,
67
- requests = current.requests;
51
+ execute = current.execute,
52
+ requesterId = current.requesterId,
53
+ requests = current.requests;
68
54
  var container = acc.find(function (item) {
69
55
  return isDescription(current) && isDescription(item) && item.searchClient === searchClient && Boolean(requesterId) && item.requesterId === requesterId;
70
56
  });
71
-
72
57
  if (container) {
73
58
  var _container$items;
74
-
75
59
  (_container$items = container.items).push.apply(_container$items, _toConsumableArray(requests));
76
60
  } else {
77
61
  var request = {
@@ -82,18 +66,16 @@ export function resolve(items) {
82
66
  };
83
67
  acc.push(request);
84
68
  }
85
-
86
69
  return acc;
87
70
  }, []);
88
71
  var values = packed.map(function (maybeDescription) {
89
72
  if (!isDescription(maybeDescription)) {
90
73
  return Promise.resolve(maybeDescription);
91
74
  }
92
-
93
75
  var _ref = maybeDescription,
94
- execute = _ref.execute,
95
- items = _ref.items,
96
- searchClient = _ref.searchClient;
76
+ execute = _ref.execute,
77
+ items = _ref.items,
78
+ searchClient = _ref.searchClient;
97
79
  return execute({
98
80
  searchClient: searchClient,
99
81
  requests: items
@@ -1,9 +1,9 @@
1
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
1
2
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
-
3
3
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
-
5
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
-
4
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
6
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
7
7
  import { getItemsCount, invariant } from '@algolia/autocomplete-shared';
8
8
  import { getCompletion } from './getCompletion';
9
9
  import { getNextActiveItemId } from './utils';
@@ -15,7 +15,6 @@ export var stateReducer = function stateReducer(state, action) {
15
15
  activeItemId: action.payload
16
16
  });
17
17
  }
18
-
19
18
  case 'setQuery':
20
19
  {
21
20
  return _objectSpread(_objectSpread({}, state), {}, {
@@ -23,61 +22,52 @@ export var stateReducer = function stateReducer(state, action) {
23
22
  completion: null
24
23
  });
25
24
  }
26
-
27
25
  case 'setCollections':
28
26
  {
29
27
  return _objectSpread(_objectSpread({}, state), {}, {
30
28
  collections: action.payload
31
29
  });
32
30
  }
33
-
34
31
  case 'setIsOpen':
35
32
  {
36
33
  return _objectSpread(_objectSpread({}, state), {}, {
37
34
  isOpen: action.payload
38
35
  });
39
36
  }
40
-
41
37
  case 'setStatus':
42
38
  {
43
39
  return _objectSpread(_objectSpread({}, state), {}, {
44
40
  status: action.payload
45
41
  });
46
42
  }
47
-
48
43
  case 'setContext':
49
44
  {
50
45
  return _objectSpread(_objectSpread({}, state), {}, {
51
46
  context: _objectSpread(_objectSpread({}, state.context), action.payload)
52
47
  });
53
48
  }
54
-
55
49
  case 'ArrowDown':
56
50
  {
57
51
  var nextState = _objectSpread(_objectSpread({}, state), {}, {
58
52
  activeItemId: action.payload.hasOwnProperty('nextActiveItemId') ? action.payload.nextActiveItemId : getNextActiveItemId(1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId)
59
53
  });
60
-
61
54
  return _objectSpread(_objectSpread({}, nextState), {}, {
62
55
  completion: getCompletion({
63
56
  state: nextState
64
57
  })
65
58
  });
66
59
  }
67
-
68
60
  case 'ArrowUp':
69
61
  {
70
62
  var _nextState = _objectSpread(_objectSpread({}, state), {}, {
71
63
  activeItemId: getNextActiveItemId(-1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId)
72
64
  });
73
-
74
65
  return _objectSpread(_objectSpread({}, _nextState), {}, {
75
66
  completion: getCompletion({
76
67
  state: _nextState
77
68
  })
78
69
  });
79
70
  }
80
-
81
71
  case 'Escape':
82
72
  {
83
73
  if (state.isOpen) {
@@ -87,7 +77,6 @@ export var stateReducer = function stateReducer(state, action) {
87
77
  completion: null
88
78
  });
89
79
  }
90
-
91
80
  return _objectSpread(_objectSpread({}, state), {}, {
92
81
  activeItemId: null,
93
82
  query: '',
@@ -95,7 +84,6 @@ export var stateReducer = function stateReducer(state, action) {
95
84
  collections: []
96
85
  });
97
86
  }
98
-
99
87
  case 'submit':
100
88
  {
101
89
  return _objectSpread(_objectSpread({}, state), {}, {
@@ -104,12 +92,13 @@ export var stateReducer = function stateReducer(state, action) {
104
92
  status: 'idle'
105
93
  });
106
94
  }
107
-
108
95
  case 'reset':
109
96
  {
110
97
  return _objectSpread(_objectSpread({}, state), {}, {
111
- activeItemId: // Since we open the panel on reset when openOnFocus=true
98
+ activeItemId:
99
+ // Since we open the panel on reset when openOnFocus=true
112
100
  // we need to restore the highlighted index to the defaultActiveItemId. (DocSearch use-case)
101
+
113
102
  // Since we close the panel when openOnFocus=false
114
103
  // we lose track of the highlighted index. (Query-suggestions use-case)
115
104
  action.props.openOnFocus === true ? action.props.defaultActiveItemId : null,
@@ -117,7 +106,6 @@ export var stateReducer = function stateReducer(state, action) {
117
106
  query: ''
118
107
  });
119
108
  }
120
-
121
109
  case 'focus':
122
110
  {
123
111
  return _objectSpread(_objectSpread({}, state), {}, {
@@ -127,33 +115,28 @@ export var stateReducer = function stateReducer(state, action) {
127
115
  })
128
116
  });
129
117
  }
130
-
131
118
  case 'blur':
132
119
  {
133
120
  if (action.props.debug) {
134
121
  return state;
135
122
  }
136
-
137
123
  return _objectSpread(_objectSpread({}, state), {}, {
138
124
  isOpen: false,
139
125
  activeItemId: null
140
126
  });
141
127
  }
142
-
143
128
  case 'mousemove':
144
129
  {
145
130
  return _objectSpread(_objectSpread({}, state), {}, {
146
131
  activeItemId: action.payload
147
132
  });
148
133
  }
149
-
150
134
  case 'mouseleave':
151
135
  {
152
136
  return _objectSpread(_objectSpread({}, state), {}, {
153
137
  activeItemId: action.props.defaultActiveItemId
154
138
  });
155
139
  }
156
-
157
140
  default:
158
141
  invariant(false, "The reducer action ".concat(JSON.stringify(action.type), " is not supported."));
159
142
  return state;
@@ -1,7 +1,5 @@
1
1
  import { CancelablePromiseList } from '../utils';
2
- import { BaseItem } from './AutocompleteApi';
3
- import { InternalAutocompleteOptions } from './AutocompleteOptions';
4
- import { AutocompleteState } from './AutocompleteState';
2
+ import { BaseItem, InternalAutocompleteOptions, AutocompleteState } from './';
5
3
  export interface AutocompleteStore<TItem extends BaseItem> {
6
4
  getState(): AutocompleteState<TItem>;
7
5
  dispatch(action: ActionType, payload: any): void;
@@ -1,5 +1,4 @@
1
- import { BaseItem } from './AutocompleteApi';
2
- import { OnActiveParams, OnResolveParams, OnSelectParams } from './AutocompleteSource';
1
+ import { BaseItem, OnActiveParams, OnResolveParams, OnSelectParams } from './';
3
2
  export declare type AutocompleteSubscriber<TItem extends BaseItem> = {
4
3
  onSelect(params: OnSelectParams<TItem>): void;
5
4
  onActive(params: OnActiveParams<TItem>): void;