@algolia/autocomplete-js 1.5.5 → 1.6.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.
- package/dist/esm/autocomplete.js +7 -3
- package/dist/esm/createAutocompleteDom.js +5 -1
- package/dist/esm/getDefaultOptions.d.ts +6 -2
- package/dist/esm/getDefaultOptions.js +8 -3
- 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/setProperties.js +8 -1
- package/dist/umd/index.development.js +63 -46
- 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
|
@@ -6,6 +6,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
6
6
|
|
|
7
7
|
import { createAutocomplete } from '@algolia/autocomplete-core';
|
|
8
8
|
import { createRef, debounce, getItemsCount } from '@algolia/autocomplete-shared';
|
|
9
|
+
import htm from 'htm';
|
|
9
10
|
import { createAutocompleteDom } from './createAutocompleteDom';
|
|
10
11
|
import { createEffectWrapper } from './createEffectWrapper';
|
|
11
12
|
import { createReactiveWrapper } from './createReactiveWrapper';
|
|
@@ -94,6 +95,9 @@ export function autocomplete(options) {
|
|
|
94
95
|
setContext: autocomplete.value.setContext,
|
|
95
96
|
refresh: autocomplete.value.refresh
|
|
96
97
|
};
|
|
98
|
+
var html = reactive(function () {
|
|
99
|
+
return htm.bind(props.value.renderer.renderer.createElement);
|
|
100
|
+
});
|
|
97
101
|
var dom = reactive(function () {
|
|
98
102
|
return createAutocompleteDom({
|
|
99
103
|
autocomplete: autocomplete.value,
|
|
@@ -128,12 +132,12 @@ export function autocomplete(options) {
|
|
|
128
132
|
classNames: props.value.renderer.classNames,
|
|
129
133
|
components: props.value.renderer.components,
|
|
130
134
|
container: props.value.renderer.container,
|
|
131
|
-
|
|
135
|
+
html: html.value,
|
|
132
136
|
dom: dom.value,
|
|
133
|
-
Fragment: props.value.renderer.renderer.Fragment,
|
|
134
137
|
panelContainer: isDetached.value ? dom.value.detachedContainer : props.value.renderer.panelContainer,
|
|
135
138
|
propGetters: propGetters,
|
|
136
|
-
state: lastStateRef.current
|
|
139
|
+
state: lastStateRef.current,
|
|
140
|
+
renderer: props.value.renderer.renderer
|
|
137
141
|
};
|
|
138
142
|
var render = !getItemsCount(state) && !hasNoResultsSourceTemplateRef.current && props.value.renderer.renderNoResults || props.value.renderer.render;
|
|
139
143
|
renderSearchBox(renderProps);
|
|
@@ -142,8 +142,12 @@ export function createAutocompleteDom(_ref) {
|
|
|
142
142
|
type: 'button',
|
|
143
143
|
class: classNames.detachedCancelButton,
|
|
144
144
|
textContent: translations.detachedCancelButtonText,
|
|
145
|
-
|
|
145
|
+
// Prevent `onTouchStart` from closing the panel
|
|
146
|
+
// since it should be initiated by `onClick` only
|
|
147
|
+
onTouchStart: function onTouchStart(event) {
|
|
146
148
|
event.stopPropagation();
|
|
149
|
+
},
|
|
150
|
+
onClick: function onClick() {
|
|
147
151
|
autocomplete.setIsOpen(false);
|
|
148
152
|
setIsModalOpen(false);
|
|
149
153
|
}
|
|
@@ -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 | undefined;
|
|
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';
|
|
@@ -49,7 +49,8 @@ var defaultRender = function defaultRender(_ref, root) {
|
|
|
49
49
|
|
|
50
50
|
var defaultRenderer = {
|
|
51
51
|
createElement: preactCreateElement,
|
|
52
|
-
Fragment: PreactFragment
|
|
52
|
+
Fragment: PreactFragment,
|
|
53
|
+
render: render
|
|
53
54
|
};
|
|
54
55
|
export function getDefaultOptions(options) {
|
|
55
56
|
var _core$id;
|
|
@@ -81,7 +82,11 @@ export function getDefaultOptions(options) {
|
|
|
81
82
|
|
|
82
83
|
var containerElement = getHTMLElement(environment, container);
|
|
83
84
|
invariant(containerElement.tagName !== 'INPUT', 'The `container` option does not support `input` elements. You need to change the container to a `div`.');
|
|
84
|
-
|
|
85
|
+
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(!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;
|
|
87
|
+
|
|
88
|
+
var defaultedRenderer = _objectSpread(_objectSpread({}, defaultRenderer), renderer);
|
|
89
|
+
|
|
85
90
|
var defaultComponents = {
|
|
86
91
|
Highlight: createHighlightComponent(defaultedRenderer),
|
|
87
92
|
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: 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
|
*
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Touch-specific event aliases
|
|
5
|
+
*
|
|
6
|
+
* See https://w3c.github.io/touch-events/#extensions-to-the-globaleventhandlers-mixin
|
|
7
|
+
*/
|
|
8
|
+
var TOUCH_EVENTS_ALIASES = ['ontouchstart', 'ontouchend', 'ontouchmove', 'ontouchcancel'];
|
|
3
9
|
/*
|
|
4
10
|
* Taken from Preact
|
|
5
11
|
*
|
|
6
12
|
* See https://github.com/preactjs/preact/blob/6ab49d9020740127577bf4af66bf63f4af7f9fee/src/diff/props.js#L58-L151
|
|
7
13
|
*/
|
|
14
|
+
|
|
8
15
|
function setStyle(style, key, value) {
|
|
9
16
|
if (value === null) {
|
|
10
17
|
style[key] = '';
|
|
@@ -50,7 +57,7 @@ export function setProperty(dom, name, value) {
|
|
|
50
57
|
else if (name[0] === 'o' && name[1] === 'n') {
|
|
51
58
|
useCapture = name !== (name = name.replace(/Capture$/, ''));
|
|
52
59
|
nameLower = name.toLowerCase();
|
|
53
|
-
if (nameLower in dom) name = nameLower;
|
|
60
|
+
if (nameLower in dom || TOUCH_EVENTS_ALIASES.includes(nameLower)) name = nameLower;
|
|
54
61
|
name = name.slice(2);
|
|
55
62
|
if (!dom._listeners) dom._listeners = {};
|
|
56
63
|
dom._listeners[name] = value;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @algolia/autocomplete-js 1.
|
|
1
|
+
/*! @algolia/autocomplete-js 1.6.0 | MIT License | © Algolia, Inc. and contributors | https://github.com/algolia/autocomplete */
|
|
2
2
|
(function (global, factory) {
|
|
3
3
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
|
4
4
|
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
|
@@ -311,7 +311,7 @@
|
|
|
311
311
|
|
|
312
312
|
var noop = function noop() {};
|
|
313
313
|
|
|
314
|
-
var version = '1.
|
|
314
|
+
var version = '1.6.0';
|
|
315
315
|
|
|
316
316
|
var userAgents$1 = [{
|
|
317
317
|
segment: 'autocomplete-core',
|
|
@@ -584,14 +584,6 @@
|
|
|
584
584
|
});
|
|
585
585
|
}
|
|
586
586
|
|
|
587
|
-
var chromeRegex = /(crmo|crios|chrome)/i;
|
|
588
|
-
var edgeRegex = /edg(e|ios|a)?/i;
|
|
589
|
-
var samsungBrowserRegex = /samsungbrowser/i;
|
|
590
|
-
var chromiumRegex = /chromium/i;
|
|
591
|
-
function isChrome(userAgent) {
|
|
592
|
-
return Boolean(userAgent && userAgent.match(chromeRegex) && !userAgent.match(edgeRegex) && !userAgent.match(samsungBrowserRegex) && !userAgent.match(chromiumRegex));
|
|
593
|
-
}
|
|
594
|
-
|
|
595
587
|
// We don't have access to the autocomplete source when we call `onKeyDown`
|
|
596
588
|
// or `onClick` because those are native browser events.
|
|
597
589
|
// However, we can get the source from the suggestion index.
|
|
@@ -2032,7 +2024,7 @@
|
|
|
2032
2024
|
|
|
2033
2025
|
var activeItem = getActiveItem(store.getState());
|
|
2034
2026
|
var userAgent = (_props$environment$na = props.environment.navigator) === null || _props$environment$na === void 0 ? void 0 : _props$environment$na.userAgent;
|
|
2035
|
-
var shouldFallbackKeyHint = isSamsung(userAgent)
|
|
2027
|
+
var shouldFallbackKeyHint = isSamsung(userAgent);
|
|
2036
2028
|
var enterKeyHint = activeItem !== null && activeItem !== void 0 && activeItem.itemUrl && !shouldFallbackKeyHint ? 'go' : 'search';
|
|
2037
2029
|
return _objectSpread$6({
|
|
2038
2030
|
'aria-autocomplete': 'both',
|
|
@@ -2605,6 +2597,8 @@
|
|
|
2605
2597
|
}, propGetters), setters);
|
|
2606
2598
|
}
|
|
2607
2599
|
|
|
2600
|
+
var n$1=function(t,s,r,e){var u;s[0]=0;for(var h=1;h<s.length;h++){var p=s[h++],a=s[h]?(s[0]|=p?1:2,r[s[h++]]):s[++h];3===p?e[0]=a:4===p?e[1]=Object.assign(e[1]||{},a):5===p?(e[1]=e[1]||{})[s[++h]]=a:6===p?e[1][s[++h]]+=a+"":p?(u=t.apply(a,n$1(t,a,r,["",null])),e.push(u),a[0]?s[0]|=2:(s[h-2]=0,s[h]=u)):e.push(a);}return e},t$1=new Map;function htm(s){var r=t$1.get(this);return r||(r=new Map,t$1.set(this,r)),(r=n$1(this,r.get(s)||(r.set(s,r=function(n){for(var t,s,r=1,e="",u="",h=[0],p=function(n){1===r&&(n||(e=e.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?h.push(0,n,e):3===r&&(n||e)?(h.push(3,n,e),r=2):2===r&&"..."===e&&n?h.push(4,n,0):2===r&&e&&!n?h.push(5,0,!0,e):r>=5&&((e||!n&&5===r)&&(h.push(r,0,e,s),r=6),n&&(h.push(r,n,0,s),r=6)),e="";},a=0;a<n.length;a++){a&&(1===r&&p(),p(a));for(var l=0;l<n[a].length;l++)t=n[a][l],1===r?"<"===t?(p(),h=[h],r=3):e+=t:4===r?"--"===e&&">"===t?(r=1,e=""):e=t+e[0]:u?t===u?u="":e+=t:'"'===t||"'"===t?u=t:">"===t?(p(),r=1):r&&("="===t?(r=5,s=e,e=""):"/"===t&&(r<5||">"===n[a][l+1])?(p(),3===r&&(h=h[0]),r=h,(h=h[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(p(),r=2):e+=t),3===r&&"!--"===e&&(r=4,h=h[0]);}return p(),h}(s)),r),arguments,[])).length>1?r:r[0]}
|
|
2601
|
+
|
|
2608
2602
|
var ClearIcon = function ClearIcon(_ref) {
|
|
2609
2603
|
var environment = _ref.environment;
|
|
2610
2604
|
var element = environment.document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
|
@@ -2675,11 +2669,18 @@
|
|
|
2675
2669
|
|
|
2676
2670
|
/* eslint-disable */
|
|
2677
2671
|
|
|
2672
|
+
/**
|
|
2673
|
+
* Touch-specific event aliases
|
|
2674
|
+
*
|
|
2675
|
+
* See https://w3c.github.io/touch-events/#extensions-to-the-globaleventhandlers-mixin
|
|
2676
|
+
*/
|
|
2677
|
+
var TOUCH_EVENTS_ALIASES = ['ontouchstart', 'ontouchend', 'ontouchmove', 'ontouchcancel'];
|
|
2678
2678
|
/*
|
|
2679
2679
|
* Taken from Preact
|
|
2680
2680
|
*
|
|
2681
2681
|
* See https://github.com/preactjs/preact/blob/6ab49d9020740127577bf4af66bf63f4af7f9fee/src/diff/props.js#L58-L151
|
|
2682
2682
|
*/
|
|
2683
|
+
|
|
2683
2684
|
function setStyle(style, key, value) {
|
|
2684
2685
|
if (value === null) {
|
|
2685
2686
|
style[key] = '';
|
|
@@ -2725,7 +2726,7 @@
|
|
|
2725
2726
|
else if (name[0] === 'o' && name[1] === 'n') {
|
|
2726
2727
|
useCapture = name !== (name = name.replace(/Capture$/, ''));
|
|
2727
2728
|
nameLower = name.toLowerCase();
|
|
2728
|
-
if (nameLower in dom) name = nameLower;
|
|
2729
|
+
if (nameLower in dom || TOUCH_EVENTS_ALIASES.includes(nameLower)) name = nameLower;
|
|
2729
2730
|
name = name.slice(2);
|
|
2730
2731
|
if (!dom._listeners) dom._listeners = {};
|
|
2731
2732
|
dom._listeners[name] = value;
|
|
@@ -2985,8 +2986,12 @@
|
|
|
2985
2986
|
type: 'button',
|
|
2986
2987
|
class: classNames.detachedCancelButton,
|
|
2987
2988
|
textContent: translations.detachedCancelButtonText,
|
|
2988
|
-
|
|
2989
|
+
// Prevent `onTouchStart` from closing the panel
|
|
2990
|
+
// since it should be initiated by `onClick` only
|
|
2991
|
+
onTouchStart: function onTouchStart(event) {
|
|
2989
2992
|
event.stopPropagation();
|
|
2993
|
+
},
|
|
2994
|
+
onClick: function onClick() {
|
|
2990
2995
|
autocomplete.setIsOpen(false);
|
|
2991
2996
|
setIsModalOpen(false);
|
|
2992
2997
|
}
|
|
@@ -3659,7 +3664,8 @@
|
|
|
3659
3664
|
|
|
3660
3665
|
var defaultRenderer = {
|
|
3661
3666
|
createElement: v,
|
|
3662
|
-
Fragment: d
|
|
3667
|
+
Fragment: d,
|
|
3668
|
+
render: S
|
|
3663
3669
|
};
|
|
3664
3670
|
function getDefaultOptions(options) {
|
|
3665
3671
|
var _core$id;
|
|
@@ -3691,7 +3697,11 @@
|
|
|
3691
3697
|
|
|
3692
3698
|
var containerElement = getHTMLElement(environment, container);
|
|
3693
3699
|
invariant(containerElement.tagName !== 'INPUT', 'The `container` option does not support `input` elements. You need to change the container to a `div`.');
|
|
3694
|
-
|
|
3700
|
+
"development" !== '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;
|
|
3701
|
+
"development" !== '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;
|
|
3702
|
+
|
|
3703
|
+
var defaultedRenderer = _objectSpread2(_objectSpread2({}, defaultRenderer), renderer);
|
|
3704
|
+
|
|
3695
3705
|
var defaultComponents = {
|
|
3696
3706
|
Highlight: createHighlightComponent(defaultedRenderer),
|
|
3697
3707
|
ReverseHighlight: createReverseHighlightComponent(defaultedRenderer),
|
|
@@ -3844,13 +3854,13 @@
|
|
|
3844
3854
|
var autocomplete = _ref2.autocomplete,
|
|
3845
3855
|
autocompleteScopeApi = _ref2.autocompleteScopeApi,
|
|
3846
3856
|
classNames = _ref2.classNames,
|
|
3847
|
-
|
|
3857
|
+
html = _ref2.html,
|
|
3848
3858
|
dom = _ref2.dom,
|
|
3849
|
-
Fragment = _ref2.Fragment,
|
|
3850
3859
|
panelContainer = _ref2.panelContainer,
|
|
3851
3860
|
propGetters = _ref2.propGetters,
|
|
3852
3861
|
state = _ref2.state,
|
|
3853
|
-
components = _ref2.components
|
|
3862
|
+
components = _ref2.components,
|
|
3863
|
+
renderer = _ref2.renderer;
|
|
3854
3864
|
|
|
3855
3865
|
if (!state.isOpen) {
|
|
3856
3866
|
if (panelContainer.contains(dom.panel)) {
|
|
@@ -3874,28 +3884,30 @@
|
|
|
3874
3884
|
}).map(function (_ref4, sourceIndex) {
|
|
3875
3885
|
var source = _ref4.source,
|
|
3876
3886
|
items = _ref4.items;
|
|
3877
|
-
return createElement("section", {
|
|
3887
|
+
return renderer.createElement("section", {
|
|
3878
3888
|
key: sourceIndex,
|
|
3879
3889
|
className: classNames.source,
|
|
3880
3890
|
"data-autocomplete-source-id": source.sourceId
|
|
3881
|
-
}, source.templates.header && createElement("div", {
|
|
3891
|
+
}, source.templates.header && renderer.createElement("div", {
|
|
3882
3892
|
className: classNames.sourceHeader
|
|
3883
3893
|
}, source.templates.header({
|
|
3884
3894
|
components: components,
|
|
3885
|
-
createElement: createElement,
|
|
3886
|
-
Fragment: Fragment,
|
|
3895
|
+
createElement: renderer.createElement,
|
|
3896
|
+
Fragment: renderer.Fragment,
|
|
3887
3897
|
items: items,
|
|
3888
3898
|
source: source,
|
|
3889
|
-
state: state
|
|
3890
|
-
|
|
3899
|
+
state: state,
|
|
3900
|
+
html: html
|
|
3901
|
+
})), source.templates.noResults && items.length === 0 ? renderer.createElement("div", {
|
|
3891
3902
|
className: classNames.sourceNoResults
|
|
3892
3903
|
}, source.templates.noResults({
|
|
3893
3904
|
components: components,
|
|
3894
|
-
createElement: createElement,
|
|
3895
|
-
Fragment: Fragment,
|
|
3905
|
+
createElement: renderer.createElement,
|
|
3906
|
+
Fragment: renderer.Fragment,
|
|
3896
3907
|
source: source,
|
|
3897
|
-
state: state
|
|
3898
|
-
|
|
3908
|
+
state: state,
|
|
3909
|
+
html: html
|
|
3910
|
+
})) : renderer.createElement("ul", _extends({
|
|
3899
3911
|
className: classNames.list
|
|
3900
3912
|
}, propGetters.getListProps(_objectSpread2({
|
|
3901
3913
|
state: state,
|
|
@@ -3905,7 +3917,7 @@
|
|
|
3905
3917
|
item: item,
|
|
3906
3918
|
source: source
|
|
3907
3919
|
});
|
|
3908
|
-
return createElement("li", _extends({
|
|
3920
|
+
return renderer.createElement("li", _extends({
|
|
3909
3921
|
key: itemProps.id,
|
|
3910
3922
|
className: classNames.item
|
|
3911
3923
|
}, propGetters.getItemProps(_objectSpread2({
|
|
@@ -3913,39 +3925,41 @@
|
|
|
3913
3925
|
props: itemProps
|
|
3914
3926
|
}, autocompleteScopeApi))), source.templates.item({
|
|
3915
3927
|
components: components,
|
|
3916
|
-
createElement: createElement,
|
|
3917
|
-
Fragment: Fragment,
|
|
3928
|
+
createElement: renderer.createElement,
|
|
3929
|
+
Fragment: renderer.Fragment,
|
|
3918
3930
|
item: item,
|
|
3919
|
-
state: state
|
|
3931
|
+
state: state,
|
|
3932
|
+
html: html
|
|
3920
3933
|
}));
|
|
3921
|
-
})), source.templates.footer && createElement("div", {
|
|
3934
|
+
})), source.templates.footer && renderer.createElement("div", {
|
|
3922
3935
|
className: classNames.sourceFooter
|
|
3923
3936
|
}, source.templates.footer({
|
|
3924
3937
|
components: components,
|
|
3925
|
-
createElement: createElement,
|
|
3926
|
-
Fragment: Fragment,
|
|
3938
|
+
createElement: renderer.createElement,
|
|
3939
|
+
Fragment: renderer.Fragment,
|
|
3927
3940
|
items: items,
|
|
3928
3941
|
source: source,
|
|
3929
|
-
state: state
|
|
3942
|
+
state: state,
|
|
3943
|
+
html: html
|
|
3930
3944
|
})));
|
|
3931
3945
|
});
|
|
3932
|
-
var children = createElement(Fragment, null, createElement("div", {
|
|
3946
|
+
var children = renderer.createElement(renderer.Fragment, null, renderer.createElement("div", {
|
|
3933
3947
|
className: classNames.panelLayout
|
|
3934
|
-
}, sections), createElement("div", {
|
|
3948
|
+
}, sections), renderer.createElement("div", {
|
|
3935
3949
|
className: "aa-GradientBottom"
|
|
3936
3950
|
}));
|
|
3937
3951
|
var elements = sections.reduce(function (acc, current) {
|
|
3938
3952
|
acc[current.props['data-autocomplete-source-id']] = current;
|
|
3939
3953
|
return acc;
|
|
3940
3954
|
}, {});
|
|
3941
|
-
render(_objectSpread2({
|
|
3955
|
+
render(_objectSpread2(_objectSpread2({
|
|
3942
3956
|
children: children,
|
|
3943
3957
|
state: state,
|
|
3944
3958
|
sections: sections,
|
|
3945
|
-
elements: elements
|
|
3946
|
-
|
|
3947
|
-
|
|
3948
|
-
|
|
3959
|
+
elements: elements
|
|
3960
|
+
}, renderer), {}, {
|
|
3961
|
+
components: components,
|
|
3962
|
+
html: html
|
|
3949
3963
|
}, autocompleteScopeApi), dom.panel);
|
|
3950
3964
|
}
|
|
3951
3965
|
|
|
@@ -4034,6 +4048,9 @@
|
|
|
4034
4048
|
setContext: autocomplete.value.setContext,
|
|
4035
4049
|
refresh: autocomplete.value.refresh
|
|
4036
4050
|
};
|
|
4051
|
+
var html = reactive(function () {
|
|
4052
|
+
return htm.bind(props.value.renderer.renderer.createElement);
|
|
4053
|
+
});
|
|
4037
4054
|
var dom = reactive(function () {
|
|
4038
4055
|
return createAutocompleteDom({
|
|
4039
4056
|
autocomplete: autocomplete.value,
|
|
@@ -4068,12 +4085,12 @@
|
|
|
4068
4085
|
classNames: props.value.renderer.classNames,
|
|
4069
4086
|
components: props.value.renderer.components,
|
|
4070
4087
|
container: props.value.renderer.container,
|
|
4071
|
-
|
|
4088
|
+
html: html.value,
|
|
4072
4089
|
dom: dom.value,
|
|
4073
|
-
Fragment: props.value.renderer.renderer.Fragment,
|
|
4074
4090
|
panelContainer: isDetached.value ? dom.value.detachedContainer : props.value.renderer.panelContainer,
|
|
4075
4091
|
propGetters: propGetters,
|
|
4076
|
-
state: lastStateRef.current
|
|
4092
|
+
state: lastStateRef.current,
|
|
4093
|
+
renderer: props.value.renderer.renderer
|
|
4077
4094
|
};
|
|
4078
4095
|
var render = !getItemsCount(state) && !hasNoResultsSourceTemplateRef.current && props.value.renderer.renderNoResults || props.value.renderer.render;
|
|
4079
4096
|
renderSearchBox(renderProps);
|