@algolia/autocomplete-js 1.6.1 → 1.7.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.
@@ -1,3 +1,9 @@
1
+ var _excluded = ["components"];
2
+
3
+ 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; }
4
+
5
+ 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; }
6
+
1
7
  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
8
 
3
9
  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; }
@@ -14,7 +20,7 @@ import { getDefaultOptions } from './getDefaultOptions';
14
20
  import { getPanelPlacementStyle } from './getPanelPlacementStyle';
15
21
  import { renderPanel, renderSearchBox } from './render';
16
22
  import { userAgents } from './userAgents';
17
- import { mergeDeep, setProperties } from './utils';
23
+ import { mergeDeep, pickBy, setProperties } from './utils';
18
24
  export function autocomplete(options) {
19
25
  var _createEffectWrapper = createEffectWrapper(),
20
26
  runEffect = _createEffectWrapper.runEffect,
@@ -273,7 +279,21 @@ export function autocomplete(options) {
273
279
  function update() {
274
280
  var updatedOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
275
281
  cleanupEffects();
276
- optionsRef.current = mergeDeep(props.value.renderer, props.value.core, {
282
+
283
+ var _props$value$renderer = props.value.renderer,
284
+ components = _props$value$renderer.components,
285
+ rendererProps = _objectWithoutProperties(_props$value$renderer, _excluded);
286
+
287
+ optionsRef.current = mergeDeep(rendererProps, props.value.core, {
288
+ // We need to filter out default components so they can be replaced with
289
+ // a new `renderer`, without getting rid of user components.
290
+ // @MAJOR Deal with registering components with the same name as the
291
+ // default ones. If we disallow overriding default components, we'd just
292
+ // need to pass all `components` here.
293
+ components: pickBy(components, function (_ref4) {
294
+ var value = _ref4.value;
295
+ return !value.hasOwnProperty('__autocomplete_componentName');
296
+ }),
277
297
  initialState: lastStateRef.current
278
298
  }, updatedOptions);
279
299
  runReactives();
@@ -1,3 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { AutocompleteRenderer, HighlightHitParams } from '../types';
3
- export declare function createHighlightComponent({ createElement, Fragment, }: AutocompleteRenderer): <THit>({ hit, attribute, tagName, }: HighlightHitParams<THit>) => JSX.Element;
3
+ export declare function createHighlightComponent({ createElement, Fragment, }: AutocompleteRenderer): {
4
+ <THit>({ hit, attribute, tagName, }: HighlightHitParams<THit>): JSX.Element;
5
+ __autocomplete_componentName: string;
6
+ };
@@ -2,7 +2,8 @@ import { parseAlgoliaHitHighlight } from '@algolia/autocomplete-preset-algolia';
2
2
  export function createHighlightComponent(_ref) {
3
3
  var createElement = _ref.createElement,
4
4
  Fragment = _ref.Fragment;
5
- return function Highlight(_ref2) {
5
+
6
+ function Highlight(_ref2) {
6
7
  var hit = _ref2.hit,
7
8
  attribute = _ref2.attribute,
8
9
  _ref2$tagName = _ref2.tagName,
@@ -15,5 +16,8 @@ export function createHighlightComponent(_ref) {
15
16
  key: index
16
17
  }, x.value) : x.value;
17
18
  }));
18
- };
19
+ }
20
+
21
+ Highlight.__autocomplete_componentName = 'Highlight';
22
+ return Highlight;
19
23
  }
@@ -1,3 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { AutocompleteRenderer, HighlightHitParams } from '../types';
3
- export declare function createReverseHighlightComponent({ createElement, Fragment, }: AutocompleteRenderer): <THit>({ hit, attribute, tagName, }: HighlightHitParams<THit>) => JSX.Element;
3
+ export declare function createReverseHighlightComponent({ createElement, Fragment, }: AutocompleteRenderer): {
4
+ <THit>({ hit, attribute, tagName, }: HighlightHitParams<THit>): JSX.Element;
5
+ __autocomplete_componentName: string;
6
+ };
@@ -2,7 +2,8 @@ import { parseAlgoliaHitReverseHighlight } from '@algolia/autocomplete-preset-al
2
2
  export function createReverseHighlightComponent(_ref) {
3
3
  var createElement = _ref.createElement,
4
4
  Fragment = _ref.Fragment;
5
- return function ReverseHighlight(_ref2) {
5
+
6
+ function ReverseHighlight(_ref2) {
6
7
  var hit = _ref2.hit,
7
8
  attribute = _ref2.attribute,
8
9
  _ref2$tagName = _ref2.tagName,
@@ -15,5 +16,8 @@ export function createReverseHighlightComponent(_ref) {
15
16
  key: index
16
17
  }, x.value) : x.value;
17
18
  }));
18
- };
19
+ }
20
+
21
+ ReverseHighlight.__autocomplete_componentName = 'ReverseHighlight';
22
+ return ReverseHighlight;
19
23
  }
@@ -1,3 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { AutocompleteRenderer, HighlightHitParams } from '../types';
3
- export declare function createReverseSnippetComponent({ createElement, Fragment, }: AutocompleteRenderer): <THit>({ hit, attribute, tagName, }: HighlightHitParams<THit>) => JSX.Element;
3
+ export declare function createReverseSnippetComponent({ createElement, Fragment, }: AutocompleteRenderer): {
4
+ <THit>({ hit, attribute, tagName, }: HighlightHitParams<THit>): JSX.Element;
5
+ __autocomplete_componentName: string;
6
+ };
@@ -2,7 +2,8 @@ import { parseAlgoliaHitReverseSnippet } from '@algolia/autocomplete-preset-algo
2
2
  export function createReverseSnippetComponent(_ref) {
3
3
  var createElement = _ref.createElement,
4
4
  Fragment = _ref.Fragment;
5
- return function ReverseSnippet(_ref2) {
5
+
6
+ function ReverseSnippet(_ref2) {
6
7
  var hit = _ref2.hit,
7
8
  attribute = _ref2.attribute,
8
9
  _ref2$tagName = _ref2.tagName,
@@ -15,5 +16,8 @@ export function createReverseSnippetComponent(_ref) {
15
16
  key: index
16
17
  }, x.value) : x.value;
17
18
  }));
18
- };
19
+ }
20
+
21
+ ReverseSnippet.__autocomplete_componentName = 'ReverseSnippet';
22
+ return ReverseSnippet;
19
23
  }
@@ -1,3 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { AutocompleteRenderer, HighlightHitParams } from '../types';
3
- export declare function createSnippetComponent({ createElement, Fragment, }: AutocompleteRenderer): <THit>({ hit, attribute, tagName, }: HighlightHitParams<THit>) => JSX.Element;
3
+ export declare function createSnippetComponent({ createElement, Fragment, }: AutocompleteRenderer): {
4
+ <THit>({ hit, attribute, tagName, }: HighlightHitParams<THit>): JSX.Element;
5
+ __autocomplete_componentName: string;
6
+ };
@@ -2,7 +2,8 @@ import { parseAlgoliaHitSnippet } from '@algolia/autocomplete-preset-algolia';
2
2
  export function createSnippetComponent(_ref) {
3
3
  var createElement = _ref.createElement,
4
4
  Fragment = _ref.Fragment;
5
- return function Snippet(_ref2) {
5
+
6
+ function Snippet(_ref2) {
6
7
  var hit = _ref2.hit,
7
8
  attribute = _ref2.attribute,
8
9
  _ref2$tagName = _ref2.tagName,
@@ -15,5 +16,8 @@ export function createSnippetComponent(_ref) {
15
16
  key: index
16
17
  }, x.value) : x.value;
17
18
  }));
18
- };
19
+ }
20
+
21
+ Snippet.__autocomplete_componentName = 'Snippet';
22
+ return Snippet;
19
23
  }
@@ -78,10 +78,7 @@ export function createAutocompleteDom(_ref) {
78
78
  getInputProps: propGetters.getInputProps,
79
79
  getInputPropsCore: autocomplete.getInputProps,
80
80
  autocompleteScopeApi: autocompleteScopeApi,
81
- onDetachedEscape: isDetached ? function () {
82
- autocomplete.setIsOpen(false);
83
- setIsModalOpen(false);
84
- } : undefined
81
+ isDetached: isDetached
85
82
  });
86
83
  var inputWrapperPrefix = createDomElement('div', {
87
84
  class: classNames.inputWrapperPrefix,
@@ -6,7 +6,7 @@ declare type InputProps = {
6
6
  environment: AutocompleteEnvironment;
7
7
  getInputProps: AutocompletePropGetters<any>['getInputProps'];
8
8
  getInputPropsCore: AutocompleteCoreApi<any>['getInputProps'];
9
- onDetachedEscape?(): void;
9
+ isDetached: boolean;
10
10
  state: AutocompleteState<any>;
11
11
  };
12
12
  export declare const Input: AutocompleteElement<InputProps, HTMLInputElement>;
@@ -1,4 +1,4 @@
1
- var _excluded = ["autocompleteScopeApi", "environment", "classNames", "getInputProps", "getInputPropsCore", "onDetachedEscape", "state"];
1
+ var _excluded = ["autocompleteScopeApi", "environment", "classNames", "getInputProps", "getInputPropsCore", "isDetached", "state"];
2
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
4
 
@@ -18,7 +18,7 @@ export var Input = function Input(_ref) {
18
18
  classNames = _ref.classNames,
19
19
  getInputProps = _ref.getInputProps,
20
20
  getInputPropsCore = _ref.getInputPropsCore,
21
- onDetachedEscape = _ref.onDetachedEscape,
21
+ isDetached = _ref.isDetached,
22
22
  state = _ref.state,
23
23
  props = _objectWithoutProperties(_ref, _excluded);
24
24
 
@@ -33,9 +33,8 @@ export var Input = function Input(_ref) {
33
33
  }, autocompleteScopeApi));
34
34
  setProperties(element, _objectSpread(_objectSpread({}, inputProps), {}, {
35
35
  onKeyDown: function onKeyDown(event) {
36
- if (onDetachedEscape && event.key === 'Escape') {
37
- event.preventDefault();
38
- onDetachedEscape();
36
+ // In detached mode we don't want to close the panel when hittin `Tab`.
37
+ if (isDetached && event.key === 'Tab') {
39
38
  return;
40
39
  }
41
40
 
@@ -9,12 +9,14 @@ export declare function getDefaultOptions<TItem extends BaseItem>(options: Autoc
9
9
  props: {
10
10
  onTouchStart(event: TouchEvent): void;
11
11
  onTouchMove(event: TouchEvent): void;
12
+ onMouseDown(event: MouseEvent): void;
12
13
  };
13
14
  } & {
14
15
  state: import("./types").AutocompleteState<TItem>;
15
16
  } & import("@algolia/autocomplete-core").AutocompleteScopeApi<TItem>) => {
16
17
  onTouchStart(event: TouchEvent): void;
17
18
  onTouchMove(event: TouchEvent): void;
19
+ onMouseDown(event: MouseEvent): void;
18
20
  };
19
21
  getFormProps: (params: {
20
22
  props: {
@@ -83,7 +83,7 @@ export function getDefaultOptions(options) {
83
83
 
84
84
  var containerElement = getHTMLElement(environment, container);
85
85
  invariant(containerElement.tagName !== 'INPUT', 'The `container` option does not support `input` elements. You need to change the container to a `div`.');
86
- process.env.NODE_ENV !== 'production' ? warn(Boolean(!render || (renderer === null || renderer === void 0 ? void 0 : renderer.render)), "You provided the `render` option but did not provide a `renderer.render`. Since v1.6.0, you can provide a `render` function directly in `renderer`." + "\nTo get rid of this warning, do any of the following depending on your use case." + "\n- If you are using the `render` option only to override Autocomplete's default `render` function, pass the `render` function into `renderer` and remove the `render` option." + '\n- If you are using the `render` option to customize the layout, pass your `render` function into `renderer` and use it from the provided parameters of the `render` option.' + '\nSee https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-render') : void 0;
86
+ process.env.NODE_ENV !== 'production' ? warn(!(render && renderer && !(renderer !== null && renderer !== void 0 && renderer.render)), "You provided the `render` option but did not provide a `renderer.render`. Since v1.6.0, you can provide a `render` function directly in `renderer`." + "\nTo get rid of this warning, do any of the following depending on your use case." + "\n- If you are using the `render` option only to override Autocomplete's default `render` function, pass the `render` function into `renderer` and remove the `render` option." + '\n- If you are using the `render` option to customize the layout, pass your `render` function into `renderer` and use it from the provided parameters of the `render` option.' + '\n- If you are using the `render` option to work with React 18, pass an empty `render` function into `renderer`.' + '\nSee https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-render') : void 0;
87
87
  process.env.NODE_ENV !== 'production' ? warn(!renderer || render || renderer.Fragment && renderer.createElement && renderer.render, "You provided an incomplete `renderer` (missing: ".concat([!(renderer !== null && renderer !== void 0 && renderer.createElement) && '`renderer.createElement`', !(renderer !== null && renderer !== void 0 && renderer.Fragment) && '`renderer.Fragment`', !(renderer !== null && renderer !== void 0 && renderer.render) && '`renderer.render`'].filter(Boolean).join(', '), "). This can cause rendering issues.") + '\nSee https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-renderer') : void 0;
88
88
 
89
89
  var defaultedRenderer = _objectSpread(_objectSpread({}, defaultRenderer), renderer);
@@ -1,13 +1,13 @@
1
1
  /// <reference types="react" />
2
2
  export declare type Pragma = (type: any, props: Record<string, any> | null, ...children: ComponentChildren[]) => JSX.Element;
3
3
  export declare type PragmaFrag = any;
4
- declare type ComponentChild = VNode<any> | object | string | number | boolean | null | undefined;
4
+ declare type ComponentChild = VNode<any> | string | number | boolean | null | undefined;
5
5
  declare type ComponentChildren = ComponentChild[] | ComponentChild;
6
- export declare type VNode<TProps = any> = {
6
+ export declare type VNode<TProps = {}> = {
7
7
  type: any;
8
+ key: string | number | any;
8
9
  props: TProps & {
9
10
  children: ComponentChildren;
10
- key?: any;
11
11
  };
12
12
  };
13
13
  export declare type Render = (vnode: ComponentChild, parent: Element | Document | ShadowRoot | DocumentFragment, replaceNode?: Element | Text | undefined) => void;
@@ -1,4 +1,5 @@
1
1
  export * from './getHTMLElement';
2
2
  export * from './mergeClassNames';
3
3
  export * from './mergeDeep';
4
+ export * from './pickBy';
4
5
  export * from './setProperties';
@@ -1,4 +1,5 @@
1
1
  export * from './getHTMLElement';
2
2
  export * from './mergeClassNames';
3
3
  export * from './mergeDeep';
4
+ export * from './pickBy';
4
5
  export * from './setProperties';
@@ -0,0 +1,4 @@
1
+ export declare function pickBy<TValue = unknown>(obj: Record<string, TValue>, predicate: (value: {
2
+ key: string;
3
+ value: TValue;
4
+ }) => boolean): Record<string, TValue>;
@@ -0,0 +1,34 @@
1
+ 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
+ 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
+
7
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
8
+
9
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
+
11
+ 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); }
12
+
13
+ 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; }
14
+
15
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
16
+
17
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
18
+
19
+ export function pickBy(obj, predicate) {
20
+ return Object.entries(obj).reduce(function (acc, _ref) {
21
+ var _ref2 = _slicedToArray(_ref, 2),
22
+ key = _ref2[0],
23
+ value = _ref2[1];
24
+
25
+ if (predicate({
26
+ key: key,
27
+ value: value
28
+ })) {
29
+ return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, key, value));
30
+ }
31
+
32
+ return acc;
33
+ }, {});
34
+ }