instantsearch-ui-components 0.12.0 → 0.13.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/cjs/components/autocomplete/AutocompleteIndex.js +6 -1
- package/dist/cjs/components/autocomplete/AutocompleteSearch.js +70 -0
- package/dist/cjs/components/autocomplete/createAutocompletePropGetters.js +222 -0
- package/dist/cjs/components/autocomplete/icons.js +56 -0
- package/dist/cjs/components/autocomplete/index.js +22 -0
- package/dist/cjs/components/chat/icons.js +36 -36
- package/dist/cjs/version.js +1 -1
- package/dist/es/components/autocomplete/Autocomplete.d.ts +1 -1
- package/dist/es/components/autocomplete/AutocompleteIndex.d.ts +7 -0
- package/dist/es/components/autocomplete/AutocompleteIndex.js +6 -1
- package/dist/es/components/autocomplete/AutocompletePanel.d.ts +1 -1
- package/dist/es/components/autocomplete/AutocompleteSearch.d.ts +8 -0
- package/dist/es/components/autocomplete/AutocompleteSearch.js +63 -0
- package/dist/es/components/autocomplete/createAutocompletePropGetters.d.ts +49 -0
- package/dist/es/components/autocomplete/createAutocompletePropGetters.js +215 -0
- package/dist/es/components/autocomplete/icons.d.ts +7 -0
- package/dist/es/components/autocomplete/icons.js +48 -0
- package/dist/es/components/autocomplete/index.d.ts +2 -0
- package/dist/es/components/autocomplete/index.js +3 -1
- package/dist/es/components/chat/icons.js +36 -36
- package/dist/es/version.d.ts +1 -1
- package/dist/es/version.js +1 -1
- package/package.json +2 -2
|
@@ -13,13 +13,18 @@ function createAutocompleteIndexComponent(_ref) {
|
|
|
13
13
|
var createElement = _ref.createElement;
|
|
14
14
|
return function AutocompleteIndex(userProps) {
|
|
15
15
|
var items = userProps.items,
|
|
16
|
+
HeaderComponent = userProps.HeaderComponent,
|
|
16
17
|
ItemComponent = userProps.ItemComponent,
|
|
17
18
|
getItemProps = userProps.getItemProps,
|
|
18
19
|
_userProps$classNames = userProps.classNames,
|
|
19
20
|
classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames;
|
|
20
21
|
return createElement("div", {
|
|
21
22
|
className: (0, _cx.cx)('ais-AutocompleteIndex', classNames.root)
|
|
22
|
-
}, createElement("
|
|
23
|
+
}, HeaderComponent && createElement("div", {
|
|
24
|
+
className: (0, _cx.cx)('ais-AutocompleteIndexHeader', classNames.header)
|
|
25
|
+
}, createElement(HeaderComponent, {
|
|
26
|
+
items: items
|
|
27
|
+
})), createElement("ol", {
|
|
23
28
|
className: (0, _cx.cx)('ais-AutocompleteIndexList', classNames.list)
|
|
24
29
|
}, items.map(function (item, index) {
|
|
25
30
|
var _getItemProps = getItemProps(item, index),
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createAutocompleteSearchComponent = createAutocompleteSearchComponent;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var _icons = require("./icons");
|
|
10
|
+
function createAutocompleteSearchComponent(_ref) {
|
|
11
|
+
var createElement = _ref.createElement;
|
|
12
|
+
return function AutocompleteSearch(_ref2) {
|
|
13
|
+
var inputProps = _ref2.inputProps,
|
|
14
|
+
onClear = _ref2.onClear,
|
|
15
|
+
query = _ref2.query,
|
|
16
|
+
isSearchStalled = _ref2.isSearchStalled;
|
|
17
|
+
return createElement("form", {
|
|
18
|
+
className: "ais-AutocompleteForm",
|
|
19
|
+
action: "",
|
|
20
|
+
noValidate: true,
|
|
21
|
+
role: "search",
|
|
22
|
+
onSubmit: function onSubmit(e) {
|
|
23
|
+
return e.preventDefault();
|
|
24
|
+
}
|
|
25
|
+
}, createElement("div", {
|
|
26
|
+
className: "ais-AutocompleteInputWrapperPrefix"
|
|
27
|
+
}, createElement("label", {
|
|
28
|
+
className: "ais-AutocompleteLabel",
|
|
29
|
+
"aria-label": "Submit",
|
|
30
|
+
htmlFor: inputProps.id,
|
|
31
|
+
id: "".concat(inputProps.id, "-label")
|
|
32
|
+
}, createElement("button", {
|
|
33
|
+
className: "ais-AutocompleteSubmitButton",
|
|
34
|
+
type: "submit",
|
|
35
|
+
title: "Submit"
|
|
36
|
+
}, createElement(_icons.AutocompleteSubmitIcon, {
|
|
37
|
+
createElement: createElement
|
|
38
|
+
}))), createElement("div", {
|
|
39
|
+
className: "ais-AutocompleteLoadingIndicator",
|
|
40
|
+
hidden: !isSearchStalled
|
|
41
|
+
}, createElement(_icons.AutocompleteLoadingIcon, {
|
|
42
|
+
createElement: createElement
|
|
43
|
+
}))), createElement("div", {
|
|
44
|
+
className: "ais-AutocompleteInputWrapper"
|
|
45
|
+
}, createElement("input", (0, _extends2.default)({
|
|
46
|
+
className: "ais-AutocompleteInput",
|
|
47
|
+
"aria-autocomplete": "both",
|
|
48
|
+
"aria-labelledby": "".concat(inputProps.id, "-label"),
|
|
49
|
+
autoComplete: "off",
|
|
50
|
+
autoCorrect: "off",
|
|
51
|
+
autoCapitalize: "off",
|
|
52
|
+
enterKeyHint: "search",
|
|
53
|
+
spellCheck: "false",
|
|
54
|
+
placeholder: "",
|
|
55
|
+
maxLength: 512,
|
|
56
|
+
type: "search",
|
|
57
|
+
value: query
|
|
58
|
+
}, inputProps))), createElement("div", {
|
|
59
|
+
className: "ais-AutocompleteInputWrapperSuffix"
|
|
60
|
+
}, createElement("button", {
|
|
61
|
+
className: "ais-AutocompleteClearButton",
|
|
62
|
+
type: "reset",
|
|
63
|
+
title: "Clear",
|
|
64
|
+
hidden: query.length === 0 || isSearchStalled,
|
|
65
|
+
onClick: onClear
|
|
66
|
+
}, createElement(_icons.AutocompleteClearIcon, {
|
|
67
|
+
createElement: createElement
|
|
68
|
+
}))));
|
|
69
|
+
};
|
|
70
|
+
}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createAutocompletePropGetters = createAutocompletePropGetters;
|
|
8
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
function createAutocompletePropGetters(_ref) {
|
|
11
|
+
var useEffect = _ref.useEffect,
|
|
12
|
+
useId = _ref.useId,
|
|
13
|
+
useMemo = _ref.useMemo,
|
|
14
|
+
useRef = _ref.useRef,
|
|
15
|
+
useState = _ref.useState;
|
|
16
|
+
return function usePropGetters(_ref2) {
|
|
17
|
+
var indices = _ref2.indices,
|
|
18
|
+
indicesConfig = _ref2.indicesConfig,
|
|
19
|
+
onRefine = _ref2.onRefine,
|
|
20
|
+
globalOnSelect = _ref2.onSelect;
|
|
21
|
+
var getElementId = createGetElementId(useId());
|
|
22
|
+
var rootRef = useRef(null);
|
|
23
|
+
var _useState = useState(false),
|
|
24
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
25
|
+
isOpen = _useState2[0],
|
|
26
|
+
setIsOpen = _useState2[1];
|
|
27
|
+
var _useState3 = useState(undefined),
|
|
28
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
29
|
+
activeDescendant = _useState4[0],
|
|
30
|
+
setActiveDescendant = _useState4[1];
|
|
31
|
+
var _useMemo = useMemo(function () {
|
|
32
|
+
return buildItems({
|
|
33
|
+
indices: indices,
|
|
34
|
+
indicesConfig: indicesConfig,
|
|
35
|
+
getElementId: getElementId
|
|
36
|
+
});
|
|
37
|
+
}, [indices, indicesConfig, getElementId]),
|
|
38
|
+
items = _useMemo.items,
|
|
39
|
+
itemsIds = _useMemo.itemsIds;
|
|
40
|
+
useEffect(function () {
|
|
41
|
+
var onBodyClick = function onBodyClick(event) {
|
|
42
|
+
var _unwrapRef;
|
|
43
|
+
if ((_unwrapRef = unwrapRef(rootRef)) !== null && _unwrapRef !== void 0 && _unwrapRef.contains(event.target)) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
setIsOpen(false);
|
|
47
|
+
};
|
|
48
|
+
document.body.addEventListener('click', onBodyClick);
|
|
49
|
+
return function () {
|
|
50
|
+
document.body.removeEventListener('click', onBodyClick);
|
|
51
|
+
};
|
|
52
|
+
}, [rootRef]);
|
|
53
|
+
var getNextActiveDescendent = function getNextActiveDescendent(key) {
|
|
54
|
+
switch (key) {
|
|
55
|
+
case 'ArrowLeft':
|
|
56
|
+
case 'ArrowUp':
|
|
57
|
+
{
|
|
58
|
+
var prevIndex = itemsIds.indexOf(activeDescendant || '') - 1;
|
|
59
|
+
return itemsIds[prevIndex] || itemsIds[itemsIds.length - 1];
|
|
60
|
+
}
|
|
61
|
+
case 'ArrowRight':
|
|
62
|
+
case 'ArrowDown':
|
|
63
|
+
{
|
|
64
|
+
var nextIndex = itemsIds.indexOf(activeDescendant || '') + 1;
|
|
65
|
+
return itemsIds[nextIndex] || itemsIds[0];
|
|
66
|
+
}
|
|
67
|
+
default:
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
var submit = function submit() {
|
|
72
|
+
var actualActiveDescendant = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : activeDescendant;
|
|
73
|
+
setIsOpen(false);
|
|
74
|
+
if (actualActiveDescendant && items.has(actualActiveDescendant)) {
|
|
75
|
+
var _getQuery;
|
|
76
|
+
var _ref3 = items.get(actualActiveDescendant),
|
|
77
|
+
_item = _ref3.item,
|
|
78
|
+
_ref3$config = _ref3.config,
|
|
79
|
+
indexOnSelect = _ref3$config.onSelect,
|
|
80
|
+
getQuery = _ref3$config.getQuery,
|
|
81
|
+
getURL = _ref3$config.getURL;
|
|
82
|
+
var actualOnSelect = indexOnSelect !== null && indexOnSelect !== void 0 ? indexOnSelect : globalOnSelect;
|
|
83
|
+
actualOnSelect({
|
|
84
|
+
item: _item,
|
|
85
|
+
query: (_getQuery = getQuery === null || getQuery === void 0 ? void 0 : getQuery(_item)) !== null && _getQuery !== void 0 ? _getQuery : '',
|
|
86
|
+
url: getURL === null || getURL === void 0 ? void 0 : getURL(_item),
|
|
87
|
+
setQuery: function setQuery(query) {
|
|
88
|
+
return onRefine(query);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
setActiveDescendant(undefined);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
return {
|
|
95
|
+
getInputProps: function getInputProps() {
|
|
96
|
+
return {
|
|
97
|
+
id: getElementId('input'),
|
|
98
|
+
role: 'combobox',
|
|
99
|
+
'aria-autocomplete': 'list',
|
|
100
|
+
'aria-expanded': isOpen,
|
|
101
|
+
'aria-haspopup': 'grid',
|
|
102
|
+
'aria-controls': getElementId('panel'),
|
|
103
|
+
'aria-activedescendant': activeDescendant,
|
|
104
|
+
onFocus: function onFocus() {
|
|
105
|
+
return setIsOpen(true);
|
|
106
|
+
},
|
|
107
|
+
onKeyDown: function onKeyDown(event) {
|
|
108
|
+
if (event.key === 'Escape') {
|
|
109
|
+
setActiveDescendant(undefined);
|
|
110
|
+
setIsOpen(false);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
switch (event.key) {
|
|
114
|
+
case 'ArrowLeft':
|
|
115
|
+
case 'ArrowUp':
|
|
116
|
+
case 'ArrowRight':
|
|
117
|
+
case 'ArrowDown':
|
|
118
|
+
{
|
|
119
|
+
var _document$getElementB;
|
|
120
|
+
var nextActiveDescendent = getNextActiveDescendent(event.key);
|
|
121
|
+
setActiveDescendant(nextActiveDescendent);
|
|
122
|
+
(_document$getElementB = document.getElementById(nextActiveDescendent)) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.scrollIntoView(false);
|
|
123
|
+
event.preventDefault();
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
case 'Enter':
|
|
127
|
+
{
|
|
128
|
+
submit();
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
case 'Tab':
|
|
132
|
+
setIsOpen(false);
|
|
133
|
+
break;
|
|
134
|
+
default:
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
onKeyUp: function onKeyUp(event) {
|
|
139
|
+
switch (event.key) {
|
|
140
|
+
case 'ArrowLeft':
|
|
141
|
+
case 'ArrowUp':
|
|
142
|
+
case 'ArrowRight':
|
|
143
|
+
case 'ArrowDown':
|
|
144
|
+
case 'Escape':
|
|
145
|
+
case 'Return':
|
|
146
|
+
event.preventDefault();
|
|
147
|
+
return;
|
|
148
|
+
default:
|
|
149
|
+
setActiveDescendant(undefined);
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
},
|
|
155
|
+
getItemProps: function getItemProps(item, index) {
|
|
156
|
+
var id = getElementId('item', item.__indexName, index);
|
|
157
|
+
return {
|
|
158
|
+
id: id,
|
|
159
|
+
role: 'row',
|
|
160
|
+
'aria-selected': id === activeDescendant,
|
|
161
|
+
onSelect: function onSelect() {
|
|
162
|
+
return submit(id);
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
},
|
|
166
|
+
getPanelProps: function getPanelProps() {
|
|
167
|
+
return {
|
|
168
|
+
hidden: !isOpen,
|
|
169
|
+
id: getElementId('panel'),
|
|
170
|
+
role: 'grid',
|
|
171
|
+
'aria-labelledby': getElementId('input')
|
|
172
|
+
};
|
|
173
|
+
},
|
|
174
|
+
getRootProps: function getRootProps() {
|
|
175
|
+
return {
|
|
176
|
+
ref: rootRef
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
function buildItems(_ref4) {
|
|
183
|
+
var indices = _ref4.indices,
|
|
184
|
+
indicesConfig = _ref4.indicesConfig,
|
|
185
|
+
getElementId = _ref4.getElementId;
|
|
186
|
+
var itemsIds = [];
|
|
187
|
+
var items = new Map();
|
|
188
|
+
for (var i = 0; i < indicesConfig.length; i++) {
|
|
189
|
+
var _indices$i;
|
|
190
|
+
var config = indicesConfig[i];
|
|
191
|
+
var hits = ((_indices$i = indices[i]) === null || _indices$i === void 0 ? void 0 : _indices$i.hits) || [];
|
|
192
|
+
for (var position = 0; position < hits.length; position++) {
|
|
193
|
+
var itemId = getElementId('item', config.indexName, position);
|
|
194
|
+
items.set(itemId, {
|
|
195
|
+
item: hits[position],
|
|
196
|
+
config: config
|
|
197
|
+
});
|
|
198
|
+
itemsIds.push(itemId);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
items: items,
|
|
203
|
+
itemsIds: itemsIds
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
function createGetElementId(autocompleteId) {
|
|
207
|
+
return function getElementId() {
|
|
208
|
+
var prefix = 'autocomplete';
|
|
209
|
+
for (var _len = arguments.length, suffixes = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
210
|
+
suffixes[_key] = arguments[_key];
|
|
211
|
+
}
|
|
212
|
+
return "".concat(prefix).concat(autocompleteId).concat(suffixes.join(':'));
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Returns the framework-agnostic value of a ref.
|
|
218
|
+
*/
|
|
219
|
+
function unwrapRef(ref) {
|
|
220
|
+
return ref.current && (0, _typeof2.default)(ref.current) === 'object' && 'base' in ref.current ? ref.current.base // Preact
|
|
221
|
+
: ref.current; // React
|
|
222
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.AutocompleteClearIcon = AutocompleteClearIcon;
|
|
7
|
+
exports.AutocompleteLoadingIcon = AutocompleteLoadingIcon;
|
|
8
|
+
exports.AutocompleteSubmitIcon = AutocompleteSubmitIcon;
|
|
9
|
+
function AutocompleteSubmitIcon(_ref) {
|
|
10
|
+
var createElement = _ref.createElement;
|
|
11
|
+
return createElement("svg", {
|
|
12
|
+
className: "ais-AutocompleteSubmitIcon",
|
|
13
|
+
viewBox: "0 0 24 24",
|
|
14
|
+
width: "20",
|
|
15
|
+
height: "20",
|
|
16
|
+
fill: "currentColor"
|
|
17
|
+
}, createElement("path", {
|
|
18
|
+
d: "M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
21
|
+
function AutocompleteLoadingIcon(_ref2) {
|
|
22
|
+
var createElement = _ref2.createElement;
|
|
23
|
+
return createElement("svg", {
|
|
24
|
+
className: "ais-AutocompleteLoadingIcon",
|
|
25
|
+
viewBox: "0 0 100 100",
|
|
26
|
+
width: "20",
|
|
27
|
+
height: "20"
|
|
28
|
+
}, createElement("circle", {
|
|
29
|
+
cx: "50",
|
|
30
|
+
cy: "50",
|
|
31
|
+
fill: "none",
|
|
32
|
+
r: "35",
|
|
33
|
+
stroke: "currentColor",
|
|
34
|
+
strokeDasharray: "164.93361431346415 56.97787143782138",
|
|
35
|
+
strokeWidth: "6"
|
|
36
|
+
}, createElement("animateTransform", {
|
|
37
|
+
attributeName: "transform",
|
|
38
|
+
type: "rotate",
|
|
39
|
+
repeatCount: "indefinite",
|
|
40
|
+
dur: "1s",
|
|
41
|
+
values: "0 50 50;90 50 50;180 50 50;360 50 50",
|
|
42
|
+
keyTimes: "0;0.40;0.65;1"
|
|
43
|
+
})));
|
|
44
|
+
}
|
|
45
|
+
function AutocompleteClearIcon(_ref3) {
|
|
46
|
+
var createElement = _ref3.createElement;
|
|
47
|
+
return createElement("svg", {
|
|
48
|
+
className: "ais-AutocompleteClearIcon",
|
|
49
|
+
viewBox: "0 0 24 24",
|
|
50
|
+
width: "18",
|
|
51
|
+
height: "18",
|
|
52
|
+
fill: "currentColor"
|
|
53
|
+
}, createElement("path", {
|
|
54
|
+
d: "M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
@@ -36,6 +36,17 @@ Object.keys(_AutocompletePanel).forEach(function (key) {
|
|
|
36
36
|
}
|
|
37
37
|
});
|
|
38
38
|
});
|
|
39
|
+
var _AutocompleteSearch = require("./AutocompleteSearch");
|
|
40
|
+
Object.keys(_AutocompleteSearch).forEach(function (key) {
|
|
41
|
+
if (key === "default" || key === "__esModule") return;
|
|
42
|
+
if (key in exports && exports[key] === _AutocompleteSearch[key]) return;
|
|
43
|
+
Object.defineProperty(exports, key, {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
get: function get() {
|
|
46
|
+
return _AutocompleteSearch[key];
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
39
50
|
var _AutocompleteSuggestion = require("./AutocompleteSuggestion");
|
|
40
51
|
Object.keys(_AutocompleteSuggestion).forEach(function (key) {
|
|
41
52
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -46,4 +57,15 @@ Object.keys(_AutocompleteSuggestion).forEach(function (key) {
|
|
|
46
57
|
return _AutocompleteSuggestion[key];
|
|
47
58
|
}
|
|
48
59
|
});
|
|
60
|
+
});
|
|
61
|
+
var _createAutocompletePropGetters = require("./createAutocompletePropGetters");
|
|
62
|
+
Object.keys(_createAutocompletePropGetters).forEach(function (key) {
|
|
63
|
+
if (key === "default" || key === "__esModule") return;
|
|
64
|
+
if (key in exports && exports[key] === _createAutocompletePropGetters[key]) return;
|
|
65
|
+
Object.defineProperty(exports, key, {
|
|
66
|
+
enumerable: true,
|
|
67
|
+
get: function get() {
|
|
68
|
+
return _createAutocompletePropGetters[key];
|
|
69
|
+
}
|
|
70
|
+
});
|
|
49
71
|
});
|
|
@@ -228,12 +228,12 @@ function StopIconComponent(_ref9) {
|
|
|
228
228
|
rx: "1"
|
|
229
229
|
}));
|
|
230
230
|
}
|
|
231
|
-
function ReloadIconComponent(
|
|
232
|
-
var createElement =
|
|
233
|
-
|
|
234
|
-
width =
|
|
235
|
-
|
|
236
|
-
height =
|
|
231
|
+
function ReloadIconComponent(_ref0) {
|
|
232
|
+
var createElement = _ref0.createElement,
|
|
233
|
+
_ref0$width = _ref0.width,
|
|
234
|
+
width = _ref0$width === void 0 ? 16 : _ref0$width,
|
|
235
|
+
_ref0$height = _ref0.height,
|
|
236
|
+
height = _ref0$height === void 0 ? 16 : _ref0$height;
|
|
237
237
|
return createElement("svg", {
|
|
238
238
|
xmlns: "http://www.w3.org/2000/svg",
|
|
239
239
|
width: width,
|
|
@@ -254,12 +254,12 @@ function ReloadIconComponent(_ref10) {
|
|
|
254
254
|
d: "M3 21v-5h5"
|
|
255
255
|
}));
|
|
256
256
|
}
|
|
257
|
-
function CopyIconComponent(
|
|
258
|
-
var createElement =
|
|
259
|
-
|
|
260
|
-
width =
|
|
261
|
-
|
|
262
|
-
height =
|
|
257
|
+
function CopyIconComponent(_ref1) {
|
|
258
|
+
var createElement = _ref1.createElement,
|
|
259
|
+
_ref1$width = _ref1.width,
|
|
260
|
+
width = _ref1$width === void 0 ? 16 : _ref1$width,
|
|
261
|
+
_ref1$height = _ref1.height,
|
|
262
|
+
height = _ref1$height === void 0 ? 16 : _ref1$height;
|
|
263
263
|
return createElement("svg", {
|
|
264
264
|
xmlns: "http://www.w3.org/2000/svg",
|
|
265
265
|
width: width,
|
|
@@ -281,12 +281,12 @@ function CopyIconComponent(_ref11) {
|
|
|
281
281
|
d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"
|
|
282
282
|
}));
|
|
283
283
|
}
|
|
284
|
-
function MenuIconComponent(
|
|
285
|
-
var createElement =
|
|
286
|
-
|
|
287
|
-
width =
|
|
288
|
-
|
|
289
|
-
height =
|
|
284
|
+
function MenuIconComponent(_ref10) {
|
|
285
|
+
var createElement = _ref10.createElement,
|
|
286
|
+
_ref10$width = _ref10.width,
|
|
287
|
+
width = _ref10$width === void 0 ? 16 : _ref10$width,
|
|
288
|
+
_ref10$height = _ref10.height,
|
|
289
|
+
height = _ref10$height === void 0 ? 16 : _ref10$height;
|
|
290
290
|
return createElement("svg", {
|
|
291
291
|
xmlns: "http://www.w3.org/2000/svg",
|
|
292
292
|
width: width,
|
|
@@ -311,12 +311,12 @@ function MenuIconComponent(_ref12) {
|
|
|
311
311
|
r: "1"
|
|
312
312
|
}));
|
|
313
313
|
}
|
|
314
|
-
function LoadingSpinnerIconComponent(
|
|
315
|
-
var createElement =
|
|
316
|
-
|
|
317
|
-
width =
|
|
318
|
-
|
|
319
|
-
height =
|
|
314
|
+
function LoadingSpinnerIconComponent(_ref11) {
|
|
315
|
+
var createElement = _ref11.createElement,
|
|
316
|
+
_ref11$width = _ref11.width,
|
|
317
|
+
width = _ref11$width === void 0 ? 24 : _ref11$width,
|
|
318
|
+
_ref11$height = _ref11.height,
|
|
319
|
+
height = _ref11$height === void 0 ? 24 : _ref11$height;
|
|
320
320
|
return createElement("svg", {
|
|
321
321
|
viewBox: "12 12 24 24",
|
|
322
322
|
width: width,
|
|
@@ -333,12 +333,12 @@ function LoadingSpinnerIconComponent(_ref13) {
|
|
|
333
333
|
stroke: "currentColor"
|
|
334
334
|
}));
|
|
335
335
|
}
|
|
336
|
-
function ChevronLeftIconComponent(
|
|
337
|
-
var createElement =
|
|
338
|
-
|
|
339
|
-
width =
|
|
340
|
-
|
|
341
|
-
height =
|
|
336
|
+
function ChevronLeftIconComponent(_ref12) {
|
|
337
|
+
var createElement = _ref12.createElement,
|
|
338
|
+
_ref12$width = _ref12.width,
|
|
339
|
+
width = _ref12$width === void 0 ? 16 : _ref12$width,
|
|
340
|
+
_ref12$height = _ref12.height,
|
|
341
|
+
height = _ref12$height === void 0 ? 16 : _ref12$height;
|
|
342
342
|
return createElement("svg", {
|
|
343
343
|
xmlns: "http://www.w3.org/2000/svg",
|
|
344
344
|
width: width,
|
|
@@ -353,12 +353,12 @@ function ChevronLeftIconComponent(_ref14) {
|
|
|
353
353
|
d: "m15 18-6-6 6-6"
|
|
354
354
|
}));
|
|
355
355
|
}
|
|
356
|
-
function ChevronRightIconComponent(
|
|
357
|
-
var createElement =
|
|
358
|
-
|
|
359
|
-
width =
|
|
360
|
-
|
|
361
|
-
height =
|
|
356
|
+
function ChevronRightIconComponent(_ref13) {
|
|
357
|
+
var createElement = _ref13.createElement,
|
|
358
|
+
_ref13$width = _ref13.width,
|
|
359
|
+
width = _ref13$width === void 0 ? 16 : _ref13$width,
|
|
360
|
+
_ref13$height = _ref13.height,
|
|
361
|
+
height = _ref13$height === void 0 ? 16 : _ref13$height;
|
|
362
362
|
return createElement("svg", {
|
|
363
363
|
xmlns: "http://www.w3.org/2000/svg",
|
|
364
364
|
width: width,
|
package/dist/cjs/version.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** @jsx createElement */
|
|
2
2
|
import type { ComponentChildren, ComponentProps, Renderer } from '../../types';
|
|
3
|
-
export type AutocompleteProps = ComponentProps<'div'> & {
|
|
3
|
+
export type AutocompleteProps = Omit<ComponentProps<'div'>, 'children'> & {
|
|
4
4
|
children?: ComponentChildren;
|
|
5
5
|
classNames?: Partial<AutocompleteClassNames>;
|
|
6
6
|
};
|
|
@@ -5,6 +5,9 @@ export type AutocompleteIndexProps<T = {
|
|
|
5
5
|
__indexName: string;
|
|
6
6
|
} & Record<string, unknown>> = {
|
|
7
7
|
items: T[];
|
|
8
|
+
HeaderComponent?: (props: {
|
|
9
|
+
items: T[];
|
|
10
|
+
}) => JSX.Element;
|
|
8
11
|
ItemComponent: (props: {
|
|
9
12
|
item: T;
|
|
10
13
|
onSelect: () => void;
|
|
@@ -23,6 +26,10 @@ export type AutocompleteIndexClassNames = {
|
|
|
23
26
|
* Class names to apply to the list element
|
|
24
27
|
*/
|
|
25
28
|
list: string | string[];
|
|
29
|
+
/**
|
|
30
|
+
* Class names to apply to the header element
|
|
31
|
+
*/
|
|
32
|
+
header: string | string[];
|
|
26
33
|
/**
|
|
27
34
|
* Class names to apply to each item element
|
|
28
35
|
*/
|
|
@@ -6,13 +6,18 @@ export function createAutocompleteIndexComponent(_ref) {
|
|
|
6
6
|
var createElement = _ref.createElement;
|
|
7
7
|
return function AutocompleteIndex(userProps) {
|
|
8
8
|
var items = userProps.items,
|
|
9
|
+
HeaderComponent = userProps.HeaderComponent,
|
|
9
10
|
ItemComponent = userProps.ItemComponent,
|
|
10
11
|
getItemProps = userProps.getItemProps,
|
|
11
12
|
_userProps$classNames = userProps.classNames,
|
|
12
13
|
classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames;
|
|
13
14
|
return createElement("div", {
|
|
14
15
|
className: cx('ais-AutocompleteIndex', classNames.root)
|
|
15
|
-
}, createElement("
|
|
16
|
+
}, HeaderComponent && createElement("div", {
|
|
17
|
+
className: cx('ais-AutocompleteIndexHeader', classNames.header)
|
|
18
|
+
}, createElement(HeaderComponent, {
|
|
19
|
+
items: items
|
|
20
|
+
})), createElement("ol", {
|
|
16
21
|
className: cx('ais-AutocompleteIndexList', classNames.list)
|
|
17
22
|
}, items.map(function (item, index) {
|
|
18
23
|
var _getItemProps = getItemProps(item, index),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** @jsx createElement */
|
|
2
2
|
import type { ComponentChildren, ComponentProps, Renderer } from '../../types';
|
|
3
|
-
export type AutocompletePanelProps = ComponentProps<'div'> & {
|
|
3
|
+
export type AutocompletePanelProps = Omit<ComponentProps<'div'>, 'children'> & {
|
|
4
4
|
children?: ComponentChildren;
|
|
5
5
|
classNames?: Partial<AutocompletePanelClassNames>;
|
|
6
6
|
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ComponentProps, Renderer } from '../..';
|
|
2
|
+
export type AutocompleteSearchProps = {
|
|
3
|
+
inputProps: Partial<ComponentProps<'input'>>;
|
|
4
|
+
onClear: () => void;
|
|
5
|
+
query: string;
|
|
6
|
+
isSearchStalled: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare function createAutocompleteSearchComponent({ createElement }: Renderer): ({ inputProps, onClear, query, isSearchStalled, }: AutocompleteSearchProps) => JSX.Element;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import { AutocompleteClearIcon, AutocompleteLoadingIcon, AutocompleteSubmitIcon } from "./icons.js";
|
|
3
|
+
export function createAutocompleteSearchComponent(_ref) {
|
|
4
|
+
var createElement = _ref.createElement;
|
|
5
|
+
return function AutocompleteSearch(_ref2) {
|
|
6
|
+
var inputProps = _ref2.inputProps,
|
|
7
|
+
onClear = _ref2.onClear,
|
|
8
|
+
query = _ref2.query,
|
|
9
|
+
isSearchStalled = _ref2.isSearchStalled;
|
|
10
|
+
return createElement("form", {
|
|
11
|
+
className: "ais-AutocompleteForm",
|
|
12
|
+
action: "",
|
|
13
|
+
noValidate: true,
|
|
14
|
+
role: "search",
|
|
15
|
+
onSubmit: function onSubmit(e) {
|
|
16
|
+
return e.preventDefault();
|
|
17
|
+
}
|
|
18
|
+
}, createElement("div", {
|
|
19
|
+
className: "ais-AutocompleteInputWrapperPrefix"
|
|
20
|
+
}, createElement("label", {
|
|
21
|
+
className: "ais-AutocompleteLabel",
|
|
22
|
+
"aria-label": "Submit",
|
|
23
|
+
htmlFor: inputProps.id,
|
|
24
|
+
id: "".concat(inputProps.id, "-label")
|
|
25
|
+
}, createElement("button", {
|
|
26
|
+
className: "ais-AutocompleteSubmitButton",
|
|
27
|
+
type: "submit",
|
|
28
|
+
title: "Submit"
|
|
29
|
+
}, createElement(AutocompleteSubmitIcon, {
|
|
30
|
+
createElement: createElement
|
|
31
|
+
}))), createElement("div", {
|
|
32
|
+
className: "ais-AutocompleteLoadingIndicator",
|
|
33
|
+
hidden: !isSearchStalled
|
|
34
|
+
}, createElement(AutocompleteLoadingIcon, {
|
|
35
|
+
createElement: createElement
|
|
36
|
+
}))), createElement("div", {
|
|
37
|
+
className: "ais-AutocompleteInputWrapper"
|
|
38
|
+
}, createElement("input", _extends({
|
|
39
|
+
className: "ais-AutocompleteInput",
|
|
40
|
+
"aria-autocomplete": "both",
|
|
41
|
+
"aria-labelledby": "".concat(inputProps.id, "-label"),
|
|
42
|
+
autoComplete: "off",
|
|
43
|
+
autoCorrect: "off",
|
|
44
|
+
autoCapitalize: "off",
|
|
45
|
+
enterKeyHint: "search",
|
|
46
|
+
spellCheck: "false",
|
|
47
|
+
placeholder: "",
|
|
48
|
+
maxLength: 512,
|
|
49
|
+
type: "search",
|
|
50
|
+
value: query
|
|
51
|
+
}, inputProps))), createElement("div", {
|
|
52
|
+
className: "ais-AutocompleteInputWrapperSuffix"
|
|
53
|
+
}, createElement("button", {
|
|
54
|
+
className: "ais-AutocompleteClearButton",
|
|
55
|
+
type: "reset",
|
|
56
|
+
title: "Clear",
|
|
57
|
+
hidden: query.length === 0 || isSearchStalled,
|
|
58
|
+
onClick: onClear
|
|
59
|
+
}, createElement(AutocompleteClearIcon, {
|
|
60
|
+
createElement: createElement
|
|
61
|
+
}))));
|
|
62
|
+
};
|
|
63
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { ComponentProps } from '../../types';
|
|
2
|
+
type BaseHit = Record<string, unknown>;
|
|
3
|
+
export type AutocompleteIndexConfig<TItem extends BaseHit> = {
|
|
4
|
+
indexName: string;
|
|
5
|
+
getQuery?: (item: TItem) => string;
|
|
6
|
+
getURL?: (item: TItem) => string;
|
|
7
|
+
onSelect?: (params: {
|
|
8
|
+
item: TItem;
|
|
9
|
+
query: string;
|
|
10
|
+
setQuery: (query: string) => void;
|
|
11
|
+
url?: string;
|
|
12
|
+
}) => void;
|
|
13
|
+
};
|
|
14
|
+
type GetInputProps = () => Partial<ComponentProps<'input'>>;
|
|
15
|
+
type GetItemProps = (item: {
|
|
16
|
+
__indexName: string;
|
|
17
|
+
} & Record<string, unknown>, index: number) => Pick<ComponentProps<'li'>, 'id' | 'role' | 'aria-selected'> & {
|
|
18
|
+
onSelect: () => void;
|
|
19
|
+
};
|
|
20
|
+
type GetPanelProps = () => Pick<ComponentProps<'div'>, 'id' | 'hidden' | 'role' | 'aria-labelledby'>;
|
|
21
|
+
type GetRootProps = () => Pick<ComponentProps<'div'>, 'ref'>;
|
|
22
|
+
type CreateAutocompletePropGettersParams = {
|
|
23
|
+
useEffect: (effect: () => void, inputs?: readonly unknown[]) => void;
|
|
24
|
+
useId: () => string;
|
|
25
|
+
useMemo: <TType>(factory: () => TType, inputs: readonly unknown[]) => TType;
|
|
26
|
+
useRef: <TType>(initialValue: TType | null) => {
|
|
27
|
+
current: TType | null;
|
|
28
|
+
};
|
|
29
|
+
useState: <TType>(initialState: TType) => [TType, (newState: TType) => unknown];
|
|
30
|
+
};
|
|
31
|
+
type UsePropGetters<TItem extends BaseHit> = (params: {
|
|
32
|
+
indices: Array<{
|
|
33
|
+
indexName: string;
|
|
34
|
+
indexId: string;
|
|
35
|
+
hits: Array<{
|
|
36
|
+
[key: string]: unknown;
|
|
37
|
+
}>;
|
|
38
|
+
}>;
|
|
39
|
+
indicesConfig: Array<AutocompleteIndexConfig<TItem>>;
|
|
40
|
+
onRefine: (query: string) => void;
|
|
41
|
+
onSelect: NonNullable<AutocompleteIndexConfig<TItem>['onSelect']>;
|
|
42
|
+
}) => {
|
|
43
|
+
getInputProps: GetInputProps;
|
|
44
|
+
getItemProps: GetItemProps;
|
|
45
|
+
getPanelProps: GetPanelProps;
|
|
46
|
+
getRootProps: GetRootProps;
|
|
47
|
+
};
|
|
48
|
+
export declare function createAutocompletePropGetters({ useEffect, useId, useMemo, useRef, useState, }: CreateAutocompletePropGettersParams): <TItem extends BaseHit>({ indices, indicesConfig, onRefine, onSelect: globalOnSelect, }: Parameters<UsePropGetters<TItem>>[0]) => ReturnType<UsePropGetters<TItem>>;
|
|
49
|
+
export {};
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import _typeof from "@babel/runtime/helpers/typeof";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
export function createAutocompletePropGetters(_ref) {
|
|
4
|
+
var useEffect = _ref.useEffect,
|
|
5
|
+
useId = _ref.useId,
|
|
6
|
+
useMemo = _ref.useMemo,
|
|
7
|
+
useRef = _ref.useRef,
|
|
8
|
+
useState = _ref.useState;
|
|
9
|
+
return function usePropGetters(_ref2) {
|
|
10
|
+
var indices = _ref2.indices,
|
|
11
|
+
indicesConfig = _ref2.indicesConfig,
|
|
12
|
+
onRefine = _ref2.onRefine,
|
|
13
|
+
globalOnSelect = _ref2.onSelect;
|
|
14
|
+
var getElementId = createGetElementId(useId());
|
|
15
|
+
var rootRef = useRef(null);
|
|
16
|
+
var _useState = useState(false),
|
|
17
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
18
|
+
isOpen = _useState2[0],
|
|
19
|
+
setIsOpen = _useState2[1];
|
|
20
|
+
var _useState3 = useState(undefined),
|
|
21
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
22
|
+
activeDescendant = _useState4[0],
|
|
23
|
+
setActiveDescendant = _useState4[1];
|
|
24
|
+
var _useMemo = useMemo(function () {
|
|
25
|
+
return buildItems({
|
|
26
|
+
indices: indices,
|
|
27
|
+
indicesConfig: indicesConfig,
|
|
28
|
+
getElementId: getElementId
|
|
29
|
+
});
|
|
30
|
+
}, [indices, indicesConfig, getElementId]),
|
|
31
|
+
items = _useMemo.items,
|
|
32
|
+
itemsIds = _useMemo.itemsIds;
|
|
33
|
+
useEffect(function () {
|
|
34
|
+
var onBodyClick = function onBodyClick(event) {
|
|
35
|
+
var _unwrapRef;
|
|
36
|
+
if ((_unwrapRef = unwrapRef(rootRef)) !== null && _unwrapRef !== void 0 && _unwrapRef.contains(event.target)) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
setIsOpen(false);
|
|
40
|
+
};
|
|
41
|
+
document.body.addEventListener('click', onBodyClick);
|
|
42
|
+
return function () {
|
|
43
|
+
document.body.removeEventListener('click', onBodyClick);
|
|
44
|
+
};
|
|
45
|
+
}, [rootRef]);
|
|
46
|
+
var getNextActiveDescendent = function getNextActiveDescendent(key) {
|
|
47
|
+
switch (key) {
|
|
48
|
+
case 'ArrowLeft':
|
|
49
|
+
case 'ArrowUp':
|
|
50
|
+
{
|
|
51
|
+
var prevIndex = itemsIds.indexOf(activeDescendant || '') - 1;
|
|
52
|
+
return itemsIds[prevIndex] || itemsIds[itemsIds.length - 1];
|
|
53
|
+
}
|
|
54
|
+
case 'ArrowRight':
|
|
55
|
+
case 'ArrowDown':
|
|
56
|
+
{
|
|
57
|
+
var nextIndex = itemsIds.indexOf(activeDescendant || '') + 1;
|
|
58
|
+
return itemsIds[nextIndex] || itemsIds[0];
|
|
59
|
+
}
|
|
60
|
+
default:
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
var submit = function submit() {
|
|
65
|
+
var actualActiveDescendant = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : activeDescendant;
|
|
66
|
+
setIsOpen(false);
|
|
67
|
+
if (actualActiveDescendant && items.has(actualActiveDescendant)) {
|
|
68
|
+
var _getQuery;
|
|
69
|
+
var _ref3 = items.get(actualActiveDescendant),
|
|
70
|
+
_item = _ref3.item,
|
|
71
|
+
_ref3$config = _ref3.config,
|
|
72
|
+
indexOnSelect = _ref3$config.onSelect,
|
|
73
|
+
getQuery = _ref3$config.getQuery,
|
|
74
|
+
getURL = _ref3$config.getURL;
|
|
75
|
+
var actualOnSelect = indexOnSelect !== null && indexOnSelect !== void 0 ? indexOnSelect : globalOnSelect;
|
|
76
|
+
actualOnSelect({
|
|
77
|
+
item: _item,
|
|
78
|
+
query: (_getQuery = getQuery === null || getQuery === void 0 ? void 0 : getQuery(_item)) !== null && _getQuery !== void 0 ? _getQuery : '',
|
|
79
|
+
url: getURL === null || getURL === void 0 ? void 0 : getURL(_item),
|
|
80
|
+
setQuery: function setQuery(query) {
|
|
81
|
+
return onRefine(query);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
setActiveDescendant(undefined);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
return {
|
|
88
|
+
getInputProps: function getInputProps() {
|
|
89
|
+
return {
|
|
90
|
+
id: getElementId('input'),
|
|
91
|
+
role: 'combobox',
|
|
92
|
+
'aria-autocomplete': 'list',
|
|
93
|
+
'aria-expanded': isOpen,
|
|
94
|
+
'aria-haspopup': 'grid',
|
|
95
|
+
'aria-controls': getElementId('panel'),
|
|
96
|
+
'aria-activedescendant': activeDescendant,
|
|
97
|
+
onFocus: function onFocus() {
|
|
98
|
+
return setIsOpen(true);
|
|
99
|
+
},
|
|
100
|
+
onKeyDown: function onKeyDown(event) {
|
|
101
|
+
if (event.key === 'Escape') {
|
|
102
|
+
setActiveDescendant(undefined);
|
|
103
|
+
setIsOpen(false);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
switch (event.key) {
|
|
107
|
+
case 'ArrowLeft':
|
|
108
|
+
case 'ArrowUp':
|
|
109
|
+
case 'ArrowRight':
|
|
110
|
+
case 'ArrowDown':
|
|
111
|
+
{
|
|
112
|
+
var _document$getElementB;
|
|
113
|
+
var nextActiveDescendent = getNextActiveDescendent(event.key);
|
|
114
|
+
setActiveDescendant(nextActiveDescendent);
|
|
115
|
+
(_document$getElementB = document.getElementById(nextActiveDescendent)) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.scrollIntoView(false);
|
|
116
|
+
event.preventDefault();
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
case 'Enter':
|
|
120
|
+
{
|
|
121
|
+
submit();
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
case 'Tab':
|
|
125
|
+
setIsOpen(false);
|
|
126
|
+
break;
|
|
127
|
+
default:
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
onKeyUp: function onKeyUp(event) {
|
|
132
|
+
switch (event.key) {
|
|
133
|
+
case 'ArrowLeft':
|
|
134
|
+
case 'ArrowUp':
|
|
135
|
+
case 'ArrowRight':
|
|
136
|
+
case 'ArrowDown':
|
|
137
|
+
case 'Escape':
|
|
138
|
+
case 'Return':
|
|
139
|
+
event.preventDefault();
|
|
140
|
+
return;
|
|
141
|
+
default:
|
|
142
|
+
setActiveDescendant(undefined);
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
},
|
|
148
|
+
getItemProps: function getItemProps(item, index) {
|
|
149
|
+
var id = getElementId('item', item.__indexName, index);
|
|
150
|
+
return {
|
|
151
|
+
id: id,
|
|
152
|
+
role: 'row',
|
|
153
|
+
'aria-selected': id === activeDescendant,
|
|
154
|
+
onSelect: function onSelect() {
|
|
155
|
+
return submit(id);
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
},
|
|
159
|
+
getPanelProps: function getPanelProps() {
|
|
160
|
+
return {
|
|
161
|
+
hidden: !isOpen,
|
|
162
|
+
id: getElementId('panel'),
|
|
163
|
+
role: 'grid',
|
|
164
|
+
'aria-labelledby': getElementId('input')
|
|
165
|
+
};
|
|
166
|
+
},
|
|
167
|
+
getRootProps: function getRootProps() {
|
|
168
|
+
return {
|
|
169
|
+
ref: rootRef
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function buildItems(_ref4) {
|
|
176
|
+
var indices = _ref4.indices,
|
|
177
|
+
indicesConfig = _ref4.indicesConfig,
|
|
178
|
+
getElementId = _ref4.getElementId;
|
|
179
|
+
var itemsIds = [];
|
|
180
|
+
var items = new Map();
|
|
181
|
+
for (var i = 0; i < indicesConfig.length; i++) {
|
|
182
|
+
var _indices$i;
|
|
183
|
+
var config = indicesConfig[i];
|
|
184
|
+
var hits = ((_indices$i = indices[i]) === null || _indices$i === void 0 ? void 0 : _indices$i.hits) || [];
|
|
185
|
+
for (var position = 0; position < hits.length; position++) {
|
|
186
|
+
var itemId = getElementId('item', config.indexName, position);
|
|
187
|
+
items.set(itemId, {
|
|
188
|
+
item: hits[position],
|
|
189
|
+
config: config
|
|
190
|
+
});
|
|
191
|
+
itemsIds.push(itemId);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
items: items,
|
|
196
|
+
itemsIds: itemsIds
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
function createGetElementId(autocompleteId) {
|
|
200
|
+
return function getElementId() {
|
|
201
|
+
var prefix = 'autocomplete';
|
|
202
|
+
for (var _len = arguments.length, suffixes = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
203
|
+
suffixes[_key] = arguments[_key];
|
|
204
|
+
}
|
|
205
|
+
return "".concat(prefix).concat(autocompleteId).concat(suffixes.join(':'));
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Returns the framework-agnostic value of a ref.
|
|
211
|
+
*/
|
|
212
|
+
function unwrapRef(ref) {
|
|
213
|
+
return ref.current && _typeof(ref.current) === 'object' && 'base' in ref.current ? ref.current.base // Preact
|
|
214
|
+
: ref.current; // React
|
|
215
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** @jsx createElement */
|
|
2
|
+
import type { Renderer } from '../../types';
|
|
3
|
+
type IconProps = Pick<Renderer, 'createElement'>;
|
|
4
|
+
export declare function AutocompleteSubmitIcon({ createElement }: IconProps): JSX.Element;
|
|
5
|
+
export declare function AutocompleteLoadingIcon({ createElement }: IconProps): JSX.Element;
|
|
6
|
+
export declare function AutocompleteClearIcon({ createElement }: IconProps): JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export function AutocompleteSubmitIcon(_ref) {
|
|
2
|
+
var createElement = _ref.createElement;
|
|
3
|
+
return createElement("svg", {
|
|
4
|
+
className: "ais-AutocompleteSubmitIcon",
|
|
5
|
+
viewBox: "0 0 24 24",
|
|
6
|
+
width: "20",
|
|
7
|
+
height: "20",
|
|
8
|
+
fill: "currentColor"
|
|
9
|
+
}, createElement("path", {
|
|
10
|
+
d: "M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"
|
|
11
|
+
}));
|
|
12
|
+
}
|
|
13
|
+
export function AutocompleteLoadingIcon(_ref2) {
|
|
14
|
+
var createElement = _ref2.createElement;
|
|
15
|
+
return createElement("svg", {
|
|
16
|
+
className: "ais-AutocompleteLoadingIcon",
|
|
17
|
+
viewBox: "0 0 100 100",
|
|
18
|
+
width: "20",
|
|
19
|
+
height: "20"
|
|
20
|
+
}, createElement("circle", {
|
|
21
|
+
cx: "50",
|
|
22
|
+
cy: "50",
|
|
23
|
+
fill: "none",
|
|
24
|
+
r: "35",
|
|
25
|
+
stroke: "currentColor",
|
|
26
|
+
strokeDasharray: "164.93361431346415 56.97787143782138",
|
|
27
|
+
strokeWidth: "6"
|
|
28
|
+
}, createElement("animateTransform", {
|
|
29
|
+
attributeName: "transform",
|
|
30
|
+
type: "rotate",
|
|
31
|
+
repeatCount: "indefinite",
|
|
32
|
+
dur: "1s",
|
|
33
|
+
values: "0 50 50;90 50 50;180 50 50;360 50 50",
|
|
34
|
+
keyTimes: "0;0.40;0.65;1"
|
|
35
|
+
})));
|
|
36
|
+
}
|
|
37
|
+
export function AutocompleteClearIcon(_ref3) {
|
|
38
|
+
var createElement = _ref3.createElement;
|
|
39
|
+
return createElement("svg", {
|
|
40
|
+
className: "ais-AutocompleteClearIcon",
|
|
41
|
+
viewBox: "0 0 24 24",
|
|
42
|
+
width: "18",
|
|
43
|
+
height: "18",
|
|
44
|
+
fill: "currentColor"
|
|
45
|
+
}, createElement("path", {
|
|
46
|
+
d: "M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * from "./Autocomplete.js";
|
|
2
2
|
export * from "./AutocompleteIndex.js";
|
|
3
3
|
export * from "./AutocompletePanel.js";
|
|
4
|
-
export * from "./
|
|
4
|
+
export * from "./AutocompleteSearch.js";
|
|
5
|
+
export * from "./AutocompleteSuggestion.js";
|
|
6
|
+
export * from "./createAutocompletePropGetters.js";
|
|
@@ -208,12 +208,12 @@ export function StopIconComponent(_ref9) {
|
|
|
208
208
|
rx: "1"
|
|
209
209
|
}));
|
|
210
210
|
}
|
|
211
|
-
export function ReloadIconComponent(
|
|
212
|
-
var createElement =
|
|
213
|
-
|
|
214
|
-
width =
|
|
215
|
-
|
|
216
|
-
height =
|
|
211
|
+
export function ReloadIconComponent(_ref0) {
|
|
212
|
+
var createElement = _ref0.createElement,
|
|
213
|
+
_ref0$width = _ref0.width,
|
|
214
|
+
width = _ref0$width === void 0 ? 16 : _ref0$width,
|
|
215
|
+
_ref0$height = _ref0.height,
|
|
216
|
+
height = _ref0$height === void 0 ? 16 : _ref0$height;
|
|
217
217
|
return createElement("svg", {
|
|
218
218
|
xmlns: "http://www.w3.org/2000/svg",
|
|
219
219
|
width: width,
|
|
@@ -234,12 +234,12 @@ export function ReloadIconComponent(_ref10) {
|
|
|
234
234
|
d: "M3 21v-5h5"
|
|
235
235
|
}));
|
|
236
236
|
}
|
|
237
|
-
export function CopyIconComponent(
|
|
238
|
-
var createElement =
|
|
239
|
-
|
|
240
|
-
width =
|
|
241
|
-
|
|
242
|
-
height =
|
|
237
|
+
export function CopyIconComponent(_ref1) {
|
|
238
|
+
var createElement = _ref1.createElement,
|
|
239
|
+
_ref1$width = _ref1.width,
|
|
240
|
+
width = _ref1$width === void 0 ? 16 : _ref1$width,
|
|
241
|
+
_ref1$height = _ref1.height,
|
|
242
|
+
height = _ref1$height === void 0 ? 16 : _ref1$height;
|
|
243
243
|
return createElement("svg", {
|
|
244
244
|
xmlns: "http://www.w3.org/2000/svg",
|
|
245
245
|
width: width,
|
|
@@ -261,12 +261,12 @@ export function CopyIconComponent(_ref11) {
|
|
|
261
261
|
d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"
|
|
262
262
|
}));
|
|
263
263
|
}
|
|
264
|
-
export function MenuIconComponent(
|
|
265
|
-
var createElement =
|
|
266
|
-
|
|
267
|
-
width =
|
|
268
|
-
|
|
269
|
-
height =
|
|
264
|
+
export function MenuIconComponent(_ref10) {
|
|
265
|
+
var createElement = _ref10.createElement,
|
|
266
|
+
_ref10$width = _ref10.width,
|
|
267
|
+
width = _ref10$width === void 0 ? 16 : _ref10$width,
|
|
268
|
+
_ref10$height = _ref10.height,
|
|
269
|
+
height = _ref10$height === void 0 ? 16 : _ref10$height;
|
|
270
270
|
return createElement("svg", {
|
|
271
271
|
xmlns: "http://www.w3.org/2000/svg",
|
|
272
272
|
width: width,
|
|
@@ -291,12 +291,12 @@ export function MenuIconComponent(_ref12) {
|
|
|
291
291
|
r: "1"
|
|
292
292
|
}));
|
|
293
293
|
}
|
|
294
|
-
export function LoadingSpinnerIconComponent(
|
|
295
|
-
var createElement =
|
|
296
|
-
|
|
297
|
-
width =
|
|
298
|
-
|
|
299
|
-
height =
|
|
294
|
+
export function LoadingSpinnerIconComponent(_ref11) {
|
|
295
|
+
var createElement = _ref11.createElement,
|
|
296
|
+
_ref11$width = _ref11.width,
|
|
297
|
+
width = _ref11$width === void 0 ? 24 : _ref11$width,
|
|
298
|
+
_ref11$height = _ref11.height,
|
|
299
|
+
height = _ref11$height === void 0 ? 24 : _ref11$height;
|
|
300
300
|
return createElement("svg", {
|
|
301
301
|
viewBox: "12 12 24 24",
|
|
302
302
|
width: width,
|
|
@@ -313,12 +313,12 @@ export function LoadingSpinnerIconComponent(_ref13) {
|
|
|
313
313
|
stroke: "currentColor"
|
|
314
314
|
}));
|
|
315
315
|
}
|
|
316
|
-
export function ChevronLeftIconComponent(
|
|
317
|
-
var createElement =
|
|
318
|
-
|
|
319
|
-
width =
|
|
320
|
-
|
|
321
|
-
height =
|
|
316
|
+
export function ChevronLeftIconComponent(_ref12) {
|
|
317
|
+
var createElement = _ref12.createElement,
|
|
318
|
+
_ref12$width = _ref12.width,
|
|
319
|
+
width = _ref12$width === void 0 ? 16 : _ref12$width,
|
|
320
|
+
_ref12$height = _ref12.height,
|
|
321
|
+
height = _ref12$height === void 0 ? 16 : _ref12$height;
|
|
322
322
|
return createElement("svg", {
|
|
323
323
|
xmlns: "http://www.w3.org/2000/svg",
|
|
324
324
|
width: width,
|
|
@@ -333,12 +333,12 @@ export function ChevronLeftIconComponent(_ref14) {
|
|
|
333
333
|
d: "m15 18-6-6 6-6"
|
|
334
334
|
}));
|
|
335
335
|
}
|
|
336
|
-
export function ChevronRightIconComponent(
|
|
337
|
-
var createElement =
|
|
338
|
-
|
|
339
|
-
width =
|
|
340
|
-
|
|
341
|
-
height =
|
|
336
|
+
export function ChevronRightIconComponent(_ref13) {
|
|
337
|
+
var createElement = _ref13.createElement,
|
|
338
|
+
_ref13$width = _ref13.width,
|
|
339
|
+
width = _ref13$width === void 0 ? 16 : _ref13$width,
|
|
340
|
+
_ref13$height = _ref13.height,
|
|
341
|
+
height = _ref13$height === void 0 ? 16 : _ref13$height;
|
|
342
342
|
return createElement("svg", {
|
|
343
343
|
xmlns: "http://www.w3.org/2000/svg",
|
|
344
344
|
width: width,
|
package/dist/es/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default: "0.
|
|
1
|
+
declare const _default: "0.13.0";
|
|
2
2
|
export default _default;
|
package/dist/es/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export default '0.
|
|
1
|
+
export default '0.13.0';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "instantsearch-ui-components",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"description": "Common UI components for InstantSearch.",
|
|
5
5
|
"types": "dist/es/index.d.ts",
|
|
6
6
|
"main": "dist/cjs/index.js",
|
|
@@ -53,5 +53,5 @@
|
|
|
53
53
|
"zod": "^3.25.76 || ^4",
|
|
54
54
|
"zod-to-json-schema": "3.24.6"
|
|
55
55
|
},
|
|
56
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "89dc58afb61fbabb29e326d18543e51907eaea88"
|
|
57
57
|
}
|