@algolia/autocomplete-js 1.5.7 → 1.6.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.
- package/dist/esm/autocomplete.js +29 -5
- package/dist/esm/components/Highlight.d.ts +4 -1
- package/dist/esm/components/Highlight.js +6 -2
- package/dist/esm/components/ReverseHighlight.d.ts +4 -1
- package/dist/esm/components/ReverseHighlight.js +6 -2
- package/dist/esm/components/ReverseSnippet.d.ts +4 -1
- package/dist/esm/components/ReverseSnippet.js +6 -2
- package/dist/esm/components/Snippet.d.ts +4 -1
- package/dist/esm/components/Snippet.js +6 -2
- package/dist/esm/getDefaultOptions.d.ts +6 -2
- package/dist/esm/getDefaultOptions.js +10 -4
- package/dist/esm/render.d.ts +6 -7
- package/dist/esm/render.js +33 -29
- package/dist/esm/types/AutocompleteRender.d.ts +3 -1
- package/dist/esm/types/AutocompleteRenderer.d.ts +6 -0
- package/dist/esm/types/AutocompleteSource.d.ts +3 -2
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/pickBy.d.ts +4 -0
- package/dist/esm/utils/pickBy.js +34 -0
- package/dist/umd/index.development.js +165 -60
- package/dist/umd/index.development.js.map +1 -1
- package/dist/umd/index.production.js +2 -2
- package/dist/umd/index.production.js.map +1 -1
- package/package.json +5 -4
package/dist/esm/autocomplete.js
CHANGED
|
@@ -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; }
|
|
@@ -6,6 +12,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
6
12
|
|
|
7
13
|
import { createAutocomplete } from '@algolia/autocomplete-core';
|
|
8
14
|
import { createRef, debounce, getItemsCount } from '@algolia/autocomplete-shared';
|
|
15
|
+
import htm from 'htm';
|
|
9
16
|
import { createAutocompleteDom } from './createAutocompleteDom';
|
|
10
17
|
import { createEffectWrapper } from './createEffectWrapper';
|
|
11
18
|
import { createReactiveWrapper } from './createReactiveWrapper';
|
|
@@ -13,7 +20,7 @@ import { getDefaultOptions } from './getDefaultOptions';
|
|
|
13
20
|
import { getPanelPlacementStyle } from './getPanelPlacementStyle';
|
|
14
21
|
import { renderPanel, renderSearchBox } from './render';
|
|
15
22
|
import { userAgents } from './userAgents';
|
|
16
|
-
import { mergeDeep, setProperties } from './utils';
|
|
23
|
+
import { mergeDeep, pickBy, setProperties } from './utils';
|
|
17
24
|
export function autocomplete(options) {
|
|
18
25
|
var _createEffectWrapper = createEffectWrapper(),
|
|
19
26
|
runEffect = _createEffectWrapper.runEffect,
|
|
@@ -94,6 +101,9 @@ export function autocomplete(options) {
|
|
|
94
101
|
setContext: autocomplete.value.setContext,
|
|
95
102
|
refresh: autocomplete.value.refresh
|
|
96
103
|
};
|
|
104
|
+
var html = reactive(function () {
|
|
105
|
+
return htm.bind(props.value.renderer.renderer.createElement);
|
|
106
|
+
});
|
|
97
107
|
var dom = reactive(function () {
|
|
98
108
|
return createAutocompleteDom({
|
|
99
109
|
autocomplete: autocomplete.value,
|
|
@@ -128,12 +138,12 @@ export function autocomplete(options) {
|
|
|
128
138
|
classNames: props.value.renderer.classNames,
|
|
129
139
|
components: props.value.renderer.components,
|
|
130
140
|
container: props.value.renderer.container,
|
|
131
|
-
|
|
141
|
+
html: html.value,
|
|
132
142
|
dom: dom.value,
|
|
133
|
-
Fragment: props.value.renderer.renderer.Fragment,
|
|
134
143
|
panelContainer: isDetached.value ? dom.value.detachedContainer : props.value.renderer.panelContainer,
|
|
135
144
|
propGetters: propGetters,
|
|
136
|
-
state: lastStateRef.current
|
|
145
|
+
state: lastStateRef.current,
|
|
146
|
+
renderer: props.value.renderer.renderer
|
|
137
147
|
};
|
|
138
148
|
var render = !getItemsCount(state) && !hasNoResultsSourceTemplateRef.current && props.value.renderer.renderNoResults || props.value.renderer.render;
|
|
139
149
|
renderSearchBox(renderProps);
|
|
@@ -269,7 +279,21 @@ export function autocomplete(options) {
|
|
|
269
279
|
function update() {
|
|
270
280
|
var updatedOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
271
281
|
cleanupEffects();
|
|
272
|
-
|
|
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
|
+
}),
|
|
273
297
|
initialState: lastStateRef.current
|
|
274
298
|
}, updatedOptions);
|
|
275
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):
|
|
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
|
-
|
|
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):
|
|
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
|
-
|
|
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):
|
|
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
|
-
|
|
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):
|
|
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
|
-
|
|
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
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { BaseItem } from '@algolia/autocomplete-core';
|
|
3
|
-
import { AutocompleteClassNames, AutocompleteOptions, AutocompleteRender
|
|
3
|
+
import { AutocompleteClassNames, AutocompleteOptions, AutocompleteRender } from './types';
|
|
4
4
|
export declare function getDefaultOptions<TItem extends BaseItem>(options: AutocompleteOptions<TItem>): {
|
|
5
5
|
renderer: {
|
|
6
6
|
classNames: AutocompleteClassNames;
|
|
@@ -156,7 +156,11 @@ export declare function getDefaultOptions<TItem extends BaseItem>(options: Autoc
|
|
|
156
156
|
panelPlacement: "start" | "end" | "full-width" | "input-wrapper-width";
|
|
157
157
|
render: AutocompleteRender<any> | AutocompleteRender<TItem>;
|
|
158
158
|
renderNoResults: AutocompleteRender<TItem> | undefined;
|
|
159
|
-
renderer:
|
|
159
|
+
renderer: {
|
|
160
|
+
createElement: import("./types").Pragma;
|
|
161
|
+
Fragment: any;
|
|
162
|
+
render: import("./types").Render;
|
|
163
|
+
};
|
|
160
164
|
detachedMediaQuery: string;
|
|
161
165
|
components: {
|
|
162
166
|
[x: string]: (props: any) => JSX.Element;
|
|
@@ -10,7 +10,7 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
|
|
|
10
10
|
|
|
11
11
|
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
12
|
|
|
13
|
-
import { generateAutocompleteId, invariant } from '@algolia/autocomplete-shared';
|
|
13
|
+
import { generateAutocompleteId, invariant, warn } from '@algolia/autocomplete-shared';
|
|
14
14
|
import { createElement as preactCreateElement, Fragment as PreactFragment, render } from 'preact';
|
|
15
15
|
import { createHighlightComponent, createReverseHighlightComponent, createReverseSnippetComponent, createSnippetComponent } from './components';
|
|
16
16
|
import { getHTMLElement, mergeClassNames } from './utils';
|
|
@@ -43,13 +43,15 @@ var defaultClassNames = {
|
|
|
43
43
|
};
|
|
44
44
|
|
|
45
45
|
var defaultRender = function defaultRender(_ref, root) {
|
|
46
|
-
var children = _ref.children
|
|
46
|
+
var children = _ref.children,
|
|
47
|
+
render = _ref.render;
|
|
47
48
|
render(children, root);
|
|
48
49
|
};
|
|
49
50
|
|
|
50
51
|
var defaultRenderer = {
|
|
51
52
|
createElement: preactCreateElement,
|
|
52
|
-
Fragment: PreactFragment
|
|
53
|
+
Fragment: PreactFragment,
|
|
54
|
+
render: render
|
|
53
55
|
};
|
|
54
56
|
export function getDefaultOptions(options) {
|
|
55
57
|
var _core$id;
|
|
@@ -81,7 +83,11 @@ export function getDefaultOptions(options) {
|
|
|
81
83
|
|
|
82
84
|
var containerElement = getHTMLElement(environment, container);
|
|
83
85
|
invariant(containerElement.tagName !== 'INPUT', 'The `container` option does not support `input` elements. You need to change the container to a `div`.');
|
|
84
|
-
|
|
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.' + '\nSee https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-js/autocomplete/#param-render') : void 0;
|
|
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
|
+
|
|
89
|
+
var defaultedRenderer = _objectSpread(_objectSpread({}, defaultRenderer), renderer);
|
|
90
|
+
|
|
85
91
|
var defaultComponents = {
|
|
86
92
|
Highlight: createHighlightComponent(defaultedRenderer),
|
|
87
93
|
ReverseHighlight: createReverseHighlightComponent(defaultedRenderer),
|
package/dist/esm/render.d.ts
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
/** @jsx createElement */
|
|
2
|
-
import { AutocompleteApi as AutocompleteCoreApi, AutocompleteScopeApi } from '@algolia/autocomplete-core';
|
|
3
|
-
import {
|
|
4
|
-
import { AutocompleteClassNames, AutocompleteComponents, AutocompleteDom, AutocompletePropGetters, AutocompleteRender, AutocompleteState, Pragma, PragmaFrag } from './types';
|
|
1
|
+
/** @jsx renderer.createElement */
|
|
2
|
+
import { AutocompleteApi as AutocompleteCoreApi, AutocompleteScopeApi, BaseItem } from '@algolia/autocomplete-core';
|
|
3
|
+
import { AutocompleteClassNames, AutocompleteComponents, AutocompleteDom, AutocompletePropGetters, AutocompleteRender, AutocompleteRenderer, AutocompleteState, HTMLTemplate } from './types';
|
|
5
4
|
declare type RenderProps<TItem extends BaseItem> = {
|
|
6
5
|
autocomplete: AutocompleteCoreApi<TItem>;
|
|
7
6
|
autocompleteScopeApi: AutocompleteScopeApi<TItem>;
|
|
8
7
|
classNames: AutocompleteClassNames;
|
|
9
8
|
components: AutocompleteComponents;
|
|
10
|
-
|
|
9
|
+
html: HTMLTemplate;
|
|
11
10
|
dom: AutocompleteDom;
|
|
12
|
-
Fragment: PragmaFrag;
|
|
13
11
|
panelContainer: HTMLElement;
|
|
14
12
|
propGetters: AutocompletePropGetters<TItem>;
|
|
15
13
|
state: AutocompleteState<TItem>;
|
|
14
|
+
renderer: Required<AutocompleteRenderer>;
|
|
16
15
|
};
|
|
17
16
|
export declare function renderSearchBox<TItem extends BaseItem>({ autocomplete, autocompleteScopeApi, dom, propGetters, state, }: RenderProps<TItem>): void;
|
|
18
|
-
export declare function renderPanel<TItem extends BaseItem>(render: AutocompleteRender<TItem>, { autocomplete, autocompleteScopeApi, classNames,
|
|
17
|
+
export declare function renderPanel<TItem extends BaseItem>(render: AutocompleteRender<TItem>, { autocomplete, autocompleteScopeApi, classNames, html, dom, panelContainer, propGetters, state, components, renderer, }: RenderProps<TItem>): void;
|
|
19
18
|
export {};
|
package/dist/esm/render.js
CHANGED
|
@@ -6,7 +6,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
6
6
|
|
|
7
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
8
|
|
|
9
|
-
/** @jsx createElement */
|
|
9
|
+
/** @jsx renderer.createElement */
|
|
10
10
|
import { setProperties, setPropertiesWithoutEvents } from './utils';
|
|
11
11
|
export function renderSearchBox(_ref) {
|
|
12
12
|
var autocomplete = _ref.autocomplete,
|
|
@@ -39,13 +39,13 @@ export function renderPanel(render, _ref2) {
|
|
|
39
39
|
var autocomplete = _ref2.autocomplete,
|
|
40
40
|
autocompleteScopeApi = _ref2.autocompleteScopeApi,
|
|
41
41
|
classNames = _ref2.classNames,
|
|
42
|
-
|
|
42
|
+
html = _ref2.html,
|
|
43
43
|
dom = _ref2.dom,
|
|
44
|
-
Fragment = _ref2.Fragment,
|
|
45
44
|
panelContainer = _ref2.panelContainer,
|
|
46
45
|
propGetters = _ref2.propGetters,
|
|
47
46
|
state = _ref2.state,
|
|
48
|
-
components = _ref2.components
|
|
47
|
+
components = _ref2.components,
|
|
48
|
+
renderer = _ref2.renderer;
|
|
49
49
|
|
|
50
50
|
if (!state.isOpen) {
|
|
51
51
|
if (panelContainer.contains(dom.panel)) {
|
|
@@ -69,28 +69,30 @@ export function renderPanel(render, _ref2) {
|
|
|
69
69
|
}).map(function (_ref4, sourceIndex) {
|
|
70
70
|
var source = _ref4.source,
|
|
71
71
|
items = _ref4.items;
|
|
72
|
-
return createElement("section", {
|
|
72
|
+
return renderer.createElement("section", {
|
|
73
73
|
key: sourceIndex,
|
|
74
74
|
className: classNames.source,
|
|
75
75
|
"data-autocomplete-source-id": source.sourceId
|
|
76
|
-
}, source.templates.header && createElement("div", {
|
|
76
|
+
}, source.templates.header && renderer.createElement("div", {
|
|
77
77
|
className: classNames.sourceHeader
|
|
78
78
|
}, source.templates.header({
|
|
79
79
|
components: components,
|
|
80
|
-
createElement: createElement,
|
|
81
|
-
Fragment: Fragment,
|
|
80
|
+
createElement: renderer.createElement,
|
|
81
|
+
Fragment: renderer.Fragment,
|
|
82
82
|
items: items,
|
|
83
83
|
source: source,
|
|
84
|
-
state: state
|
|
85
|
-
|
|
84
|
+
state: state,
|
|
85
|
+
html: html
|
|
86
|
+
})), source.templates.noResults && items.length === 0 ? renderer.createElement("div", {
|
|
86
87
|
className: classNames.sourceNoResults
|
|
87
88
|
}, source.templates.noResults({
|
|
88
89
|
components: components,
|
|
89
|
-
createElement: createElement,
|
|
90
|
-
Fragment: Fragment,
|
|
90
|
+
createElement: renderer.createElement,
|
|
91
|
+
Fragment: renderer.Fragment,
|
|
91
92
|
source: source,
|
|
92
|
-
state: state
|
|
93
|
-
|
|
93
|
+
state: state,
|
|
94
|
+
html: html
|
|
95
|
+
})) : renderer.createElement("ul", _extends({
|
|
94
96
|
className: classNames.list
|
|
95
97
|
}, propGetters.getListProps(_objectSpread({
|
|
96
98
|
state: state,
|
|
@@ -100,7 +102,7 @@ export function renderPanel(render, _ref2) {
|
|
|
100
102
|
item: item,
|
|
101
103
|
source: source
|
|
102
104
|
});
|
|
103
|
-
return createElement("li", _extends({
|
|
105
|
+
return renderer.createElement("li", _extends({
|
|
104
106
|
key: itemProps.id,
|
|
105
107
|
className: classNames.item
|
|
106
108
|
}, propGetters.getItemProps(_objectSpread({
|
|
@@ -108,38 +110,40 @@ export function renderPanel(render, _ref2) {
|
|
|
108
110
|
props: itemProps
|
|
109
111
|
}, autocompleteScopeApi))), source.templates.item({
|
|
110
112
|
components: components,
|
|
111
|
-
createElement: createElement,
|
|
112
|
-
Fragment: Fragment,
|
|
113
|
+
createElement: renderer.createElement,
|
|
114
|
+
Fragment: renderer.Fragment,
|
|
113
115
|
item: item,
|
|
114
|
-
state: state
|
|
116
|
+
state: state,
|
|
117
|
+
html: html
|
|
115
118
|
}));
|
|
116
|
-
})), source.templates.footer && createElement("div", {
|
|
119
|
+
})), source.templates.footer && renderer.createElement("div", {
|
|
117
120
|
className: classNames.sourceFooter
|
|
118
121
|
}, source.templates.footer({
|
|
119
122
|
components: components,
|
|
120
|
-
createElement: createElement,
|
|
121
|
-
Fragment: Fragment,
|
|
123
|
+
createElement: renderer.createElement,
|
|
124
|
+
Fragment: renderer.Fragment,
|
|
122
125
|
items: items,
|
|
123
126
|
source: source,
|
|
124
|
-
state: state
|
|
127
|
+
state: state,
|
|
128
|
+
html: html
|
|
125
129
|
})));
|
|
126
130
|
});
|
|
127
|
-
var children = createElement(Fragment, null, createElement("div", {
|
|
131
|
+
var children = renderer.createElement(renderer.Fragment, null, renderer.createElement("div", {
|
|
128
132
|
className: classNames.panelLayout
|
|
129
|
-
}, sections), createElement("div", {
|
|
133
|
+
}, sections), renderer.createElement("div", {
|
|
130
134
|
className: "aa-GradientBottom"
|
|
131
135
|
}));
|
|
132
136
|
var elements = sections.reduce(function (acc, current) {
|
|
133
137
|
acc[current.props['data-autocomplete-source-id']] = current;
|
|
134
138
|
return acc;
|
|
135
139
|
}, {});
|
|
136
|
-
render(_objectSpread({
|
|
140
|
+
render(_objectSpread(_objectSpread({
|
|
137
141
|
children: children,
|
|
138
142
|
state: state,
|
|
139
143
|
sections: sections,
|
|
140
|
-
elements: elements
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
+
elements: elements
|
|
145
|
+
}, renderer), {}, {
|
|
146
|
+
components: components,
|
|
147
|
+
html: html
|
|
144
148
|
}, autocompleteScopeApi), dom.panel);
|
|
145
149
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AutocompleteScopeApi, BaseItem } from '@algolia/autocomplete-core';
|
|
2
2
|
import { AutocompleteComponents } from './AutocompleteComponents';
|
|
3
|
-
import { Pragma, PragmaFrag, VNode } from './AutocompleteRenderer';
|
|
3
|
+
import { HTMLTemplate, Pragma, PragmaFrag, Render, VNode } from './AutocompleteRenderer';
|
|
4
4
|
import { AutocompleteState } from './AutocompleteState';
|
|
5
5
|
export declare type AutocompleteRender<TItem extends BaseItem> = (params: AutocompleteScopeApi<TItem> & {
|
|
6
6
|
children: VNode;
|
|
@@ -10,4 +10,6 @@ export declare type AutocompleteRender<TItem extends BaseItem> = (params: Autoco
|
|
|
10
10
|
components: AutocompleteComponents;
|
|
11
11
|
createElement: Pragma;
|
|
12
12
|
Fragment: PragmaFrag;
|
|
13
|
+
html: HTMLTemplate;
|
|
14
|
+
render: Render;
|
|
13
15
|
}, root: HTMLElement) => void;
|
|
@@ -10,6 +10,7 @@ export declare type VNode<TProps = any> = {
|
|
|
10
10
|
key?: any;
|
|
11
11
|
};
|
|
12
12
|
};
|
|
13
|
+
export declare type Render = (vnode: ComponentChild, parent: Element | Document | ShadowRoot | DocumentFragment, replaceNode?: Element | Text | undefined) => void;
|
|
13
14
|
export declare type AutocompleteRenderer = {
|
|
14
15
|
/**
|
|
15
16
|
* The function to create virtual nodes.
|
|
@@ -23,5 +24,10 @@ export declare type AutocompleteRenderer = {
|
|
|
23
24
|
* @default preact.Fragment
|
|
24
25
|
*/
|
|
25
26
|
Fragment: PragmaFrag;
|
|
27
|
+
/**
|
|
28
|
+
* The function to render children to an element.
|
|
29
|
+
*/
|
|
30
|
+
render?: Render;
|
|
26
31
|
};
|
|
32
|
+
export declare type HTMLTemplate = (strings: TemplateStringsArray, ...values: any[]) => VNode | VNode[];
|
|
27
33
|
export {};
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { AutocompleteSource as AutocompleteCoreSource, InternalAutocompleteSource as InternalAutocompleteCoreSource, BaseItem } from '@algolia/autocomplete-core';
|
|
2
2
|
import { AutocompleteComponents } from './AutocompleteComponents';
|
|
3
|
-
import { AutocompleteRenderer, VNode } from './AutocompleteRenderer';
|
|
3
|
+
import { AutocompleteRenderer, HTMLTemplate, VNode } from './AutocompleteRenderer';
|
|
4
4
|
import { AutocompleteState } from './AutocompleteState';
|
|
5
5
|
declare type Template<TParams> = (params: TParams & AutocompleteRenderer & {
|
|
6
6
|
components: AutocompleteComponents;
|
|
7
|
-
|
|
7
|
+
html: HTMLTemplate;
|
|
8
|
+
}) => VNode | VNode[] | string;
|
|
8
9
|
/**
|
|
9
10
|
* Templates to display in the autocomplete panel.
|
|
10
11
|
*
|
package/dist/esm/utils/index.js
CHANGED
|
@@ -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
|
+
}
|