react-instantsearch 7.39.1 → 7.41.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/widgets/Autocomplete.js +28 -16
- package/dist/cjs/widgets/Chat.js +1 -1
- package/dist/cjs/widgets/chat/tools/SearchIndexTool.js +14 -86
- package/dist/es/index.js +1 -1
- package/dist/es/widgets/Autocomplete.d.ts +10 -1
- package/dist/es/widgets/Autocomplete.js +18 -14
- package/dist/es/widgets/Chat.js +2 -2
- package/dist/es/widgets/chat/tools/SearchIndexTool.js +16 -88
- package/dist/es/widgets/index.js +1 -1
- package/dist/umd/ReactInstantSearch.js +958 -558
- package/dist/umd/ReactInstantSearch.min.js +3 -3
- package/package.json +5 -5
|
@@ -3,9 +3,17 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
function _export(target, all) {
|
|
7
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
_export(exports, {
|
|
13
|
+
get Autocomplete () {
|
|
14
|
+
return Autocomplete;
|
|
15
|
+
},
|
|
16
|
+
get EXPERIMENTAL_Autocomplete () {
|
|
9
17
|
return EXPERIMENTAL_Autocomplete;
|
|
10
18
|
}
|
|
11
19
|
});
|
|
@@ -18,13 +26,13 @@ var _to_consumable_array = require("@swc/helpers/_/_to_consumable_array");
|
|
|
18
26
|
var _type_of = require("@swc/helpers/_/_type_of");
|
|
19
27
|
var _instantsearchuicomponents = require("instantsearch-ui-components");
|
|
20
28
|
var _chat = require("instantsearch.js/cjs/lib/chat");
|
|
21
|
-
require("instantsearch.js/cjs/lib/utils");
|
|
29
|
+
var _utils = require("instantsearch.js/cjs/lib/utils");
|
|
22
30
|
var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
|
23
31
|
var _reactinstantsearchcore = require("react-instantsearch-core");
|
|
24
32
|
var _AutocompleteSearch = require("../components/AutocompleteSearch");
|
|
25
33
|
var _Highlight = require("./Highlight");
|
|
26
34
|
var _ReverseHighlight = require("./ReverseHighlight");
|
|
27
|
-
var
|
|
35
|
+
var AutocompleteUiComponent = (0, _instantsearchuicomponents.createAutocompleteComponent)({
|
|
28
36
|
createElement: _react.createElement,
|
|
29
37
|
Fragment: _react.Fragment
|
|
30
38
|
});
|
|
@@ -210,19 +218,20 @@ function getMediaQueryList(mediaQuery) {
|
|
|
210
218
|
setIsModalOpen: setIsModalOpen
|
|
211
219
|
};
|
|
212
220
|
}
|
|
213
|
-
function
|
|
221
|
+
function Autocomplete(props) {
|
|
214
222
|
var _showRecent_classNames, _showRecent_classNames1, _showRecent_classNames2, _showRecent_classNames3;
|
|
215
223
|
var indices = 'indices' in props ? props.indices : undefined;
|
|
216
224
|
var feeds = 'feeds' in props ? props.feeds : undefined;
|
|
217
225
|
var isFeedsMode = feeds !== undefined;
|
|
218
|
-
var showQuerySuggestions = props.showQuerySuggestions, showPromptSuggestions = props.showPromptSuggestions, showRecent = props.showRecent, userSearchParameters = props.searchParameters, detachedMediaQuery = props.detachedMediaQuery, tmp = props.translations, userTranslations = tmp === void 0 ? {} : tmp, transformItems = props.transformItems, restProps = _object_without_properties._(props, [
|
|
226
|
+
var showQuerySuggestions = props.showQuerySuggestions, showPromptSuggestions = props.showPromptSuggestions, showRecent = props.showRecent, userSearchParameters = props.searchParameters, detachedMediaQuery = props.detachedMediaQuery, tmp = props.translations, userTranslations = tmp === void 0 ? {} : tmp, transformItems = props.transformItems, _props_requiresSearch = props.requiresSearch, requiresSearch = _props_requiresSearch === void 0 ? true : _props_requiresSearch, restProps = _object_without_properties._(props, [
|
|
219
227
|
"showQuerySuggestions",
|
|
220
228
|
"showPromptSuggestions",
|
|
221
229
|
"showRecent",
|
|
222
230
|
"searchParameters",
|
|
223
231
|
"detachedMediaQuery",
|
|
224
232
|
"translations",
|
|
225
|
-
"transformItems"
|
|
233
|
+
"transformItems",
|
|
234
|
+
"requiresSearch"
|
|
226
235
|
]);
|
|
227
236
|
var autoFocus = restProps.autoFocus, placeholder = restProps.placeholder, classNames = restProps.classNames;
|
|
228
237
|
// Eager-mount only when `autoFocus` is set — otherwise wait for first focus
|
|
@@ -231,19 +240,21 @@ function EXPERIMENTAL_Autocomplete(props) {
|
|
|
231
240
|
var translations = _object_spread._({}, DEFAULT_TRANSLATIONS, userTranslations);
|
|
232
241
|
var _useInstantSearch = (0, _reactinstantsearchcore.useInstantSearch)(), indexUiState = _useInstantSearch.indexUiState, indexRenderState = _useInstantSearch.indexRenderState, status = _useInstantSearch.status;
|
|
233
242
|
var compositionID = (0, _reactinstantsearchcore.useInstantSearchContext)().compositionID;
|
|
243
|
+
var dependsOn = requiresSearch ? 'search' : 'none';
|
|
234
244
|
var refine = (0, _reactinstantsearchcore.useSearchBox)({}, _object_spread._({
|
|
235
245
|
$$type: 'ais.autocomplete',
|
|
236
|
-
$$widgetType: 'ais.autocomplete'
|
|
246
|
+
$$widgetType: 'ais.autocomplete',
|
|
247
|
+
dependsOn: dependsOn
|
|
237
248
|
}, props.aiMode ? {
|
|
238
249
|
opensChat: true
|
|
239
250
|
} : {})).refine;
|
|
240
251
|
var domId = useAutocompleteId();
|
|
241
252
|
var instanceKey = domId.replace(/:/g, '');
|
|
242
253
|
if (isFeedsMode && indices !== undefined) {
|
|
243
|
-
throw new Error('
|
|
254
|
+
throw new Error('Autocomplete: `feeds` and `indices` are mutually exclusive.');
|
|
244
255
|
}
|
|
245
256
|
if (isFeedsMode && !compositionID) {
|
|
246
|
-
throw new Error('
|
|
257
|
+
throw new Error('Autocomplete in feeds-mode requires a composition-based <InstantSearch> (compositionID must be set).');
|
|
247
258
|
}
|
|
248
259
|
var isSearchStalled = status === 'stalled';
|
|
249
260
|
var searchParameters = _object_spread._({
|
|
@@ -458,7 +469,7 @@ function EXPERIMENTAL_Autocomplete(props) {
|
|
|
458
469
|
}
|
|
459
470
|
setActivated(true);
|
|
460
471
|
};
|
|
461
|
-
return /*#__PURE__*/ _react.default.createElement(
|
|
472
|
+
return /*#__PURE__*/ _react.default.createElement(AutocompleteUiComponent, _object_spread_props._(_object_spread._({}, shellRootProps), {
|
|
462
473
|
classNames: classNames
|
|
463
474
|
}), isDetached ? /*#__PURE__*/ _react.default.createElement(AutocompleteDetachedSearchButton, {
|
|
464
475
|
query: (_indexUiState_query = indexUiState.query) !== null && _indexUiState_query !== void 0 ? _indexUiState_query : '',
|
|
@@ -501,7 +512,7 @@ function EXPERIMENTAL_Autocomplete(props) {
|
|
|
501
512
|
}));
|
|
502
513
|
if (isFeedsMode) {
|
|
503
514
|
return /*#__PURE__*/ _react.default.createElement(_reactinstantsearchcore.Index, {
|
|
504
|
-
|
|
515
|
+
isolated: true,
|
|
505
516
|
indexName: compositionID,
|
|
506
517
|
indexId: "ais-autocomplete-".concat(instanceKey)
|
|
507
518
|
}, /*#__PURE__*/ _react.default.createElement(_reactinstantsearchcore.Configure, searchParameters), /*#__PURE__*/ _react.default.createElement(_reactinstantsearchcore.Feeds, {
|
|
@@ -512,7 +523,7 @@ function EXPERIMENTAL_Autocomplete(props) {
|
|
|
512
523
|
}), innerAutocomplete);
|
|
513
524
|
}
|
|
514
525
|
return /*#__PURE__*/ _react.default.createElement(_reactinstantsearchcore.Index, {
|
|
515
|
-
|
|
526
|
+
isolated: true,
|
|
516
527
|
indexId: "ais-autocomplete-".concat(instanceKey)
|
|
517
528
|
}, /*#__PURE__*/ _react.default.createElement(_reactinstantsearchcore.Configure, searchParameters), indicesConfig.map(function(index) {
|
|
518
529
|
return /*#__PURE__*/ _react.default.createElement(_reactinstantsearchcore.Index, {
|
|
@@ -522,6 +533,7 @@ function EXPERIMENTAL_Autocomplete(props) {
|
|
|
522
533
|
}, /*#__PURE__*/ _react.default.createElement(_reactinstantsearchcore.Configure, index.searchParameters));
|
|
523
534
|
}), innerAutocomplete);
|
|
524
535
|
}
|
|
536
|
+
var EXPERIMENTAL_Autocomplete = (0, _utils.deprecate)(Autocomplete, 'EXPERIMENTAL_Autocomplete is no longer experimental. Please use Autocomplete instead.');
|
|
525
537
|
function InnerAutocomplete(_0) {
|
|
526
538
|
var indicesConfig = _0.indicesConfig, refineSearchBox = _0.refineSearchBox, isSearchStalled = _0.isSearchStalled, getSearchPageURL = _0.getSearchPageURL, userOnSelect = _0.onSelect, indexUiState = _0.indexUiState, isSearchPage = _0.isSearchPage, PanelComponent = _0.panelComponent, showRecent = _0.showRecent, recentSearchConfig = _0.recentSearchConfig, showQuerySuggestions = _0.showQuerySuggestions, showPromptSuggestions = _0.showPromptSuggestions, chatRenderState = _0.chatRenderState, transformItems = _0.transformItems, placeholder = _0.placeholder, autoFocus = _0.autoFocus, translations = _0.translations, classNames = _0.classNames, aiMode = _0.aiMode, domId = _0.domId, detached = _0.detached, props = _object_without_properties._(_0, [
|
|
527
539
|
"indicesConfig",
|
|
@@ -807,7 +819,7 @@ function InnerAutocomplete(_0) {
|
|
|
807
819
|
"ref"
|
|
808
820
|
]);
|
|
809
821
|
if (isDetached) {
|
|
810
|
-
return /*#__PURE__*/ _react.default.createElement(
|
|
822
|
+
return /*#__PURE__*/ _react.default.createElement(AutocompleteUiComponent, _object_spread_props._(_object_spread._({}, props, rootProps), {
|
|
811
823
|
rootRef: rootRef,
|
|
812
824
|
classNames: classNames
|
|
813
825
|
}), /*#__PURE__*/ _react.default.createElement(AutocompleteDetachedSearchButton, {
|
|
@@ -833,7 +845,7 @@ function InnerAutocomplete(_0) {
|
|
|
833
845
|
}, searchBoxContent), panelContent)));
|
|
834
846
|
}
|
|
835
847
|
// Normal (non-detached) rendering
|
|
836
|
-
return /*#__PURE__*/ _react.default.createElement(
|
|
848
|
+
return /*#__PURE__*/ _react.default.createElement(AutocompleteUiComponent, _object_spread_props._(_object_spread._({}, props, rootProps), {
|
|
837
849
|
rootRef: rootRef,
|
|
838
850
|
classNames: classNames
|
|
839
851
|
}), searchBoxContent, panelContent);
|
package/dist/cjs/widgets/Chat.js
CHANGED
|
@@ -52,7 +52,7 @@ var _SearchIndexTool = require("./chat/tools/SearchIndexTool");
|
|
|
52
52
|
var ChatUiComponent = (0, _instantsearchuicomponents.createChatComponent)({
|
|
53
53
|
createElement: _react.createElement,
|
|
54
54
|
Fragment: _react.Fragment,
|
|
55
|
-
|
|
55
|
+
useMemo: _react.useMemo,
|
|
56
56
|
useState: _react.useState
|
|
57
57
|
});
|
|
58
58
|
function createDefaultTools(itemComponent, getSearchPageURL) {
|
|
@@ -10,98 +10,26 @@ Object.defineProperty(exports, "createCarouselTool", {
|
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
12
|
var _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
|
|
13
|
-
var _object_spread = require("@swc/helpers/_/_object_spread");
|
|
14
13
|
var _instantsearchuicomponents = require("instantsearch-ui-components");
|
|
15
|
-
var _utils = require("instantsearch.js/cjs/lib/utils");
|
|
16
14
|
var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
|
17
|
-
var _components = require("../../../components");
|
|
18
15
|
function createCarouselTool(showViewAll, itemComponent, getSearchPageURL) {
|
|
19
|
-
var
|
|
20
|
-
createElement: _react.createElement
|
|
16
|
+
var SearchLayoutUIComponent = (0, _instantsearchuicomponents.createCarouselToolComponent)({
|
|
17
|
+
createElement: _react.createElement,
|
|
18
|
+
Fragment: _react.Fragment,
|
|
19
|
+
useMemo: _react.useMemo,
|
|
20
|
+
useRef: _react.useRef,
|
|
21
|
+
useState: _react.useState
|
|
21
22
|
});
|
|
22
|
-
function SearchLayoutComponent(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
var hitsWithAbsolutePosition = (0, _utils.addAbsolutePosition)((output === null || output === void 0 ? void 0 : output.hits) || [], 0, ((_ref = input === null || input === void 0 ? void 0 : input.number_of_results) !== null && _ref !== void 0 ? _ref : output === null || output === void 0 ? void 0 : (_output_hits = output.hits) === null || _output_hits === void 0 ? void 0 : _output_hits.length) || 5);
|
|
29
|
-
var items = (0, _utils.addQueryID)(hitsWithAbsolutePosition, output === null || output === void 0 ? void 0 : output.queryID);
|
|
30
|
-
var MemoedHeaderComponent = _react.default.useMemo(function() {
|
|
31
|
-
return function(props) {
|
|
32
|
-
return /*#__PURE__*/ _react.default.createElement(HeaderComponent, _object_spread._({
|
|
33
|
-
nbHits: output === null || output === void 0 ? void 0 : output.nbHits,
|
|
34
|
-
input: input,
|
|
35
|
-
hitsPerPage: items.length,
|
|
36
|
-
onClose: onClose,
|
|
37
|
-
applyFilters: applyFilters
|
|
38
|
-
}, props));
|
|
39
|
-
};
|
|
40
|
-
}, [
|
|
41
|
-
items.length,
|
|
42
|
-
input,
|
|
43
|
-
output === null || output === void 0 ? void 0 : output.nbHits,
|
|
44
|
-
applyFilters,
|
|
45
|
-
onClose
|
|
46
|
-
]);
|
|
47
|
-
return /*#__PURE__*/ _react.default.createElement(_components.Carousel, {
|
|
48
|
-
items: items,
|
|
23
|
+
var SearchLayoutComponent = function SearchLayoutComponent(toolProps) {
|
|
24
|
+
return /*#__PURE__*/ _react.default.createElement(SearchLayoutUIComponent, {
|
|
25
|
+
getSearchPageURL: getSearchPageURL,
|
|
26
|
+
headerProps: {
|
|
27
|
+
showViewAll: showViewAll
|
|
28
|
+
},
|
|
49
29
|
itemComponent: itemComponent,
|
|
50
|
-
|
|
51
|
-
showNavigation: false,
|
|
52
|
-
headerComponent: MemoedHeaderComponent
|
|
30
|
+
toolProps: toolProps
|
|
53
31
|
});
|
|
54
|
-
}
|
|
55
|
-
function HeaderComponent(param) {
|
|
56
|
-
var canScrollLeft = param.canScrollLeft, canScrollRight = param.canScrollRight, scrollLeft = param.scrollLeft, scrollRight = param.scrollRight, nbHits = param.nbHits, input = param.input, hitsPerPage = param.hitsPerPage, applyFilters = param.applyFilters, onClose = param.onClose;
|
|
57
|
-
if ((hitsPerPage !== null && hitsPerPage !== void 0 ? hitsPerPage : 0) < 1) {
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
return /*#__PURE__*/ _react.default.createElement("div", {
|
|
61
|
-
className: "ais-ChatToolSearchIndexCarouselHeader"
|
|
62
|
-
}, /*#__PURE__*/ _react.default.createElement("div", {
|
|
63
|
-
className: "ais-ChatToolSearchIndexCarouselHeaderResults"
|
|
64
|
-
}, nbHits && /*#__PURE__*/ _react.default.createElement("div", {
|
|
65
|
-
className: "ais-ChatToolSearchIndexCarouselHeaderCount"
|
|
66
|
-
}, hitsPerPage !== null && hitsPerPage !== void 0 ? hitsPerPage : 0, " of ", nbHits.toLocaleString(), " result", nbHits > 1 ? 's' : ''), showViewAll && /*#__PURE__*/ _react.default.createElement(Button, {
|
|
67
|
-
variant: "ghost",
|
|
68
|
-
size: "sm",
|
|
69
|
-
onClick: function onClick() {
|
|
70
|
-
if (!input || !applyFilters) return;
|
|
71
|
-
var params = applyFilters({
|
|
72
|
-
query: input.query,
|
|
73
|
-
facetFilters: (0, _instantsearchuicomponents.getFacetFiltersFromToolInput)(input)
|
|
74
|
-
});
|
|
75
|
-
if (getSearchPageURL && new URL(getSearchPageURL(params)).pathname !== window.location.pathname) {
|
|
76
|
-
window.location.href = getSearchPageURL(params);
|
|
77
|
-
}
|
|
78
|
-
onClose();
|
|
79
|
-
},
|
|
80
|
-
className: "ais-ChatToolSearchIndexCarouselHeaderViewAll"
|
|
81
|
-
}, "View all", /*#__PURE__*/ _react.default.createElement(_instantsearchuicomponents.ArrowRightIcon, {
|
|
82
|
-
createElement: _react.createElement
|
|
83
|
-
}))), (hitsPerPage !== null && hitsPerPage !== void 0 ? hitsPerPage : 0) > 2 && /*#__PURE__*/ _react.default.createElement("div", {
|
|
84
|
-
className: "ais-ChatToolSearchIndexCarouselHeaderScrollButtons"
|
|
85
|
-
}, /*#__PURE__*/ _react.default.createElement(Button, {
|
|
86
|
-
variant: "outline",
|
|
87
|
-
size: "sm",
|
|
88
|
-
iconOnly: true,
|
|
89
|
-
onClick: scrollLeft,
|
|
90
|
-
disabled: !canScrollLeft,
|
|
91
|
-
className: "ais-ChatToolSearchIndexCarouselHeaderScrollButton"
|
|
92
|
-
}, /*#__PURE__*/ _react.default.createElement(_instantsearchuicomponents.ChevronLeftIcon, {
|
|
93
|
-
createElement: _react.createElement
|
|
94
|
-
})), /*#__PURE__*/ _react.default.createElement(Button, {
|
|
95
|
-
variant: "outline",
|
|
96
|
-
size: "sm",
|
|
97
|
-
iconOnly: true,
|
|
98
|
-
onClick: scrollRight,
|
|
99
|
-
disabled: !canScrollRight,
|
|
100
|
-
className: "ais-ChatToolSearchIndexCarouselHeaderScrollButton"
|
|
101
|
-
}, /*#__PURE__*/ _react.default.createElement(_instantsearchuicomponents.ChevronRightIcon, {
|
|
102
|
-
createElement: _react.createElement
|
|
103
|
-
}))));
|
|
104
|
-
}
|
|
32
|
+
};
|
|
105
33
|
return {
|
|
106
34
|
layoutComponent: SearchLayoutComponent
|
|
107
35
|
};
|
package/dist/es/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from 'react-instantsearch-core';
|
|
2
2
|
export { useStickToBottom } from './lib/useStickToBottom.js';
|
|
3
|
-
export { EXPERIMENTAL_Autocomplete } from './widgets/Autocomplete.js';
|
|
3
|
+
export { Autocomplete, EXPERIMENTAL_Autocomplete } from './widgets/Autocomplete.js';
|
|
4
4
|
export { Breadcrumb } from './widgets/Breadcrumb.js';
|
|
5
5
|
export { DisplayResultsToolType, MemorizeToolType, MemorySearchToolType, PonderToolType, RecommendToolType, SearchIndexToolType } from 'instantsearch.js/es/lib/chat/index.js';
|
|
6
6
|
export { Chat, createDefaultTools } from './widgets/Chat.js';
|
|
@@ -92,6 +92,13 @@ type AutocompleteCommonProps<TItem extends BaseHit> = ComponentProps<'div'> & {
|
|
|
92
92
|
getSearchPageURL?: (nextUiState: IndexUiState) => string;
|
|
93
93
|
onSelect?: AutocompleteIndexConfig<TItem>['onSelect'];
|
|
94
94
|
transformItems?: (indices: TransformItemsIndicesConfig[]) => TransformItemsIndicesConfig[];
|
|
95
|
+
/**
|
|
96
|
+
* Whether this widget should make InstantSearch require a main search request.
|
|
97
|
+
* If this is the only widget, and you mark `requiresSearch: false`, no search request will happen.
|
|
98
|
+
*
|
|
99
|
+
* @default true
|
|
100
|
+
*/
|
|
101
|
+
requiresSearch?: boolean;
|
|
95
102
|
panelComponent?: (props: {
|
|
96
103
|
elements: PanelElements;
|
|
97
104
|
indices: ReturnType<typeof useAutocomplete>['indices'];
|
|
@@ -135,5 +142,7 @@ export type AutocompleteFeedsProps<TItem extends BaseHit> = AutocompleteCommonPr
|
|
|
135
142
|
showPromptSuggestions?: FeedsShowPromptSuggestionsConfig;
|
|
136
143
|
};
|
|
137
144
|
export type AutocompleteProps<TItem extends BaseHit> = AutocompleteIndicesProps<TItem> | AutocompleteFeedsProps<TItem>;
|
|
138
|
-
export declare function
|
|
145
|
+
export declare function Autocomplete<TItem extends BaseHit = BaseHit>(props: AutocompleteProps<TItem>): React.JSX.Element;
|
|
146
|
+
/** @deprecated use Autocomplete instead */
|
|
147
|
+
export declare const EXPERIMENTAL_Autocomplete: typeof Autocomplete;
|
|
139
148
|
export {};
|
|
@@ -6,14 +6,14 @@ import { _ as _$3 } from '@swc/helpers/esm/_to_consumable_array.js';
|
|
|
6
6
|
import { _ as _$5 } from '@swc/helpers/esm/_type_of.js';
|
|
7
7
|
import { createAutocompleteComponent, createAutocompletePanelComponent, createAutocompleteIndexComponent, createAutocompleteSuggestionComponent, createAutocompletePromptSuggestionComponent, createAutocompleteRecentSearchComponent, createAutocompleteDetachedContainerComponent, createAutocompleteDetachedOverlayComponent, createAutocompleteDetachedFormContainerComponent, createAutocompleteDetachedSearchButtonComponent, createAutocompletePropGetters, createAutocompleteStorage, cx, getPromptSuggestionHits, isPromptSuggestion } from 'instantsearch-ui-components';
|
|
8
8
|
import { openChat, isChatBusy } from 'instantsearch.js/es/lib/chat/index.js';
|
|
9
|
-
import 'instantsearch.js/es/lib/utils/index.js';
|
|
9
|
+
import { deprecate } from 'instantsearch.js/es/lib/utils/index.js';
|
|
10
10
|
import React, { createElement, Fragment, useEffect, useMemo, useRef, useState, useLayoutEffect } from 'react';
|
|
11
11
|
import { useInstantSearch, useInstantSearchContext, useSearchBox, Index, Configure, Feeds, useAutocomplete } from 'react-instantsearch-core';
|
|
12
12
|
import { AutocompleteSearch } from '../components/AutocompleteSearch.js';
|
|
13
13
|
import { Highlight } from './Highlight.js';
|
|
14
14
|
import { ReverseHighlight } from './ReverseHighlight.js';
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var AutocompleteUiComponent = createAutocompleteComponent({
|
|
17
17
|
createElement: createElement,
|
|
18
18
|
Fragment: Fragment
|
|
19
19
|
});
|
|
@@ -199,19 +199,20 @@ function getMediaQueryList(mediaQuery) {
|
|
|
199
199
|
setIsModalOpen: setIsModalOpen
|
|
200
200
|
};
|
|
201
201
|
}
|
|
202
|
-
function
|
|
202
|
+
function Autocomplete(props) {
|
|
203
203
|
var _showRecent_classNames, _showRecent_classNames1, _showRecent_classNames2, _showRecent_classNames3;
|
|
204
204
|
var indices = 'indices' in props ? props.indices : undefined;
|
|
205
205
|
var feeds = 'feeds' in props ? props.feeds : undefined;
|
|
206
206
|
var isFeedsMode = feeds !== undefined;
|
|
207
|
-
var showQuerySuggestions = props.showQuerySuggestions, showPromptSuggestions = props.showPromptSuggestions, showRecent = props.showRecent, userSearchParameters = props.searchParameters, detachedMediaQuery = props.detachedMediaQuery, tmp = props.translations, userTranslations = tmp === void 0 ? {} : tmp, transformItems = props.transformItems, restProps = _(props, [
|
|
207
|
+
var showQuerySuggestions = props.showQuerySuggestions, showPromptSuggestions = props.showPromptSuggestions, showRecent = props.showRecent, userSearchParameters = props.searchParameters, detachedMediaQuery = props.detachedMediaQuery, tmp = props.translations, userTranslations = tmp === void 0 ? {} : tmp, transformItems = props.transformItems, _props_requiresSearch = props.requiresSearch, requiresSearch = _props_requiresSearch === void 0 ? true : _props_requiresSearch, restProps = _(props, [
|
|
208
208
|
"showQuerySuggestions",
|
|
209
209
|
"showPromptSuggestions",
|
|
210
210
|
"showRecent",
|
|
211
211
|
"searchParameters",
|
|
212
212
|
"detachedMediaQuery",
|
|
213
213
|
"translations",
|
|
214
|
-
"transformItems"
|
|
214
|
+
"transformItems",
|
|
215
|
+
"requiresSearch"
|
|
215
216
|
]);
|
|
216
217
|
var autoFocus = restProps.autoFocus, placeholder = restProps.placeholder, classNames = restProps.classNames;
|
|
217
218
|
// Eager-mount only when `autoFocus` is set — otherwise wait for first focus
|
|
@@ -220,19 +221,21 @@ function EXPERIMENTAL_Autocomplete(props) {
|
|
|
220
221
|
var translations = _$2({}, DEFAULT_TRANSLATIONS, userTranslations);
|
|
221
222
|
var _useInstantSearch = useInstantSearch(), indexUiState = _useInstantSearch.indexUiState, indexRenderState = _useInstantSearch.indexRenderState, status = _useInstantSearch.status;
|
|
222
223
|
var compositionID = useInstantSearchContext().compositionID;
|
|
224
|
+
var dependsOn = requiresSearch ? 'search' : 'none';
|
|
223
225
|
var refine = useSearchBox({}, _$2({
|
|
224
226
|
$$type: 'ais.autocomplete',
|
|
225
|
-
$$widgetType: 'ais.autocomplete'
|
|
227
|
+
$$widgetType: 'ais.autocomplete',
|
|
228
|
+
dependsOn: dependsOn
|
|
226
229
|
}, props.aiMode ? {
|
|
227
230
|
opensChat: true
|
|
228
231
|
} : {})).refine;
|
|
229
232
|
var domId = useAutocompleteId();
|
|
230
233
|
var instanceKey = domId.replace(/:/g, '');
|
|
231
234
|
if (isFeedsMode && indices !== undefined) {
|
|
232
|
-
throw new Error('
|
|
235
|
+
throw new Error('Autocomplete: `feeds` and `indices` are mutually exclusive.');
|
|
233
236
|
}
|
|
234
237
|
if (isFeedsMode && !compositionID) {
|
|
235
|
-
throw new Error('
|
|
238
|
+
throw new Error('Autocomplete in feeds-mode requires a composition-based <InstantSearch> (compositionID must be set).');
|
|
236
239
|
}
|
|
237
240
|
var isSearchStalled = status === 'stalled';
|
|
238
241
|
var searchParameters = _$2({
|
|
@@ -447,7 +450,7 @@ function EXPERIMENTAL_Autocomplete(props) {
|
|
|
447
450
|
}
|
|
448
451
|
setActivated(true);
|
|
449
452
|
};
|
|
450
|
-
return /*#__PURE__*/ React.createElement(
|
|
453
|
+
return /*#__PURE__*/ React.createElement(AutocompleteUiComponent, _$4(_$2({}, shellRootProps), {
|
|
451
454
|
classNames: classNames
|
|
452
455
|
}), isDetached ? /*#__PURE__*/ React.createElement(AutocompleteDetachedSearchButton, {
|
|
453
456
|
query: (_indexUiState_query = indexUiState.query) !== null && _indexUiState_query !== void 0 ? _indexUiState_query : '',
|
|
@@ -490,7 +493,7 @@ function EXPERIMENTAL_Autocomplete(props) {
|
|
|
490
493
|
}));
|
|
491
494
|
if (isFeedsMode) {
|
|
492
495
|
return /*#__PURE__*/ React.createElement(Index, {
|
|
493
|
-
|
|
496
|
+
isolated: true,
|
|
494
497
|
indexName: compositionID,
|
|
495
498
|
indexId: "ais-autocomplete-".concat(instanceKey)
|
|
496
499
|
}, /*#__PURE__*/ React.createElement(Configure, searchParameters), /*#__PURE__*/ React.createElement(Feeds, {
|
|
@@ -501,7 +504,7 @@ function EXPERIMENTAL_Autocomplete(props) {
|
|
|
501
504
|
}), innerAutocomplete);
|
|
502
505
|
}
|
|
503
506
|
return /*#__PURE__*/ React.createElement(Index, {
|
|
504
|
-
|
|
507
|
+
isolated: true,
|
|
505
508
|
indexId: "ais-autocomplete-".concat(instanceKey)
|
|
506
509
|
}, /*#__PURE__*/ React.createElement(Configure, searchParameters), indicesConfig.map(function(index) {
|
|
507
510
|
return /*#__PURE__*/ React.createElement(Index, {
|
|
@@ -511,6 +514,7 @@ function EXPERIMENTAL_Autocomplete(props) {
|
|
|
511
514
|
}, /*#__PURE__*/ React.createElement(Configure, index.searchParameters));
|
|
512
515
|
}), innerAutocomplete);
|
|
513
516
|
}
|
|
517
|
+
/** @deprecated use Autocomplete instead */ var EXPERIMENTAL_Autocomplete = deprecate(Autocomplete, 'EXPERIMENTAL_Autocomplete is no longer experimental. Please use Autocomplete instead.');
|
|
514
518
|
function InnerAutocomplete(_0) {
|
|
515
519
|
var indicesConfig = _0.indicesConfig, refineSearchBox = _0.refineSearchBox, isSearchStalled = _0.isSearchStalled, getSearchPageURL = _0.getSearchPageURL, userOnSelect = _0.onSelect, indexUiState = _0.indexUiState, isSearchPage = _0.isSearchPage, PanelComponent = _0.panelComponent, showRecent = _0.showRecent, recentSearchConfig = _0.recentSearchConfig, showQuerySuggestions = _0.showQuerySuggestions, showPromptSuggestions = _0.showPromptSuggestions, chatRenderState = _0.chatRenderState, transformItems = _0.transformItems, placeholder = _0.placeholder, autoFocus = _0.autoFocus, translations = _0.translations, classNames = _0.classNames, aiMode = _0.aiMode, domId = _0.domId, detached = _0.detached, props = _(_0, [
|
|
516
520
|
"indicesConfig",
|
|
@@ -796,7 +800,7 @@ function InnerAutocomplete(_0) {
|
|
|
796
800
|
"ref"
|
|
797
801
|
]);
|
|
798
802
|
if (isDetached) {
|
|
799
|
-
return /*#__PURE__*/ React.createElement(
|
|
803
|
+
return /*#__PURE__*/ React.createElement(AutocompleteUiComponent, _$4(_$2({}, props, rootProps), {
|
|
800
804
|
rootRef: rootRef,
|
|
801
805
|
classNames: classNames
|
|
802
806
|
}), /*#__PURE__*/ React.createElement(AutocompleteDetachedSearchButton, {
|
|
@@ -822,7 +826,7 @@ function InnerAutocomplete(_0) {
|
|
|
822
826
|
}, searchBoxContent), panelContent)));
|
|
823
827
|
}
|
|
824
828
|
// Normal (non-detached) rendering
|
|
825
|
-
return /*#__PURE__*/ React.createElement(
|
|
829
|
+
return /*#__PURE__*/ React.createElement(AutocompleteUiComponent, _$4(_$2({}, props, rootProps), {
|
|
826
830
|
rootRef: rootRef,
|
|
827
831
|
classNames: classNames
|
|
828
832
|
}), searchBoxContent, panelContent);
|
|
@@ -852,4 +856,4 @@ function ConditionalHighlight(param) {
|
|
|
852
856
|
});
|
|
853
857
|
}
|
|
854
858
|
|
|
855
|
-
export { EXPERIMENTAL_Autocomplete };
|
|
859
|
+
export { Autocomplete, EXPERIMENTAL_Autocomplete };
|
package/dist/es/widgets/Chat.js
CHANGED
|
@@ -7,7 +7,7 @@ import { _ as _$1 } from '@swc/helpers/esm/_to_array.js';
|
|
|
7
7
|
import { createChatComponent } from 'instantsearch-ui-components';
|
|
8
8
|
import { SearchIndexToolType, RecommendToolType, DisplayResultsToolType, MemorizeToolType, MemorySearchToolType, PonderToolType } from 'instantsearch.js/es/lib/chat/index.js';
|
|
9
9
|
export { DisplayResultsToolType, MemorizeToolType, MemorySearchToolType, PonderToolType, RecommendToolType, SearchIndexToolType } from 'instantsearch.js/es/lib/chat/index.js';
|
|
10
|
-
import React, { createElement, Fragment,
|
|
10
|
+
import React, { createElement, Fragment, useMemo, useState, useRef, useImperativeHandle, useEffect } from 'react';
|
|
11
11
|
import { useInstantSearch, useChat } from 'react-instantsearch-core';
|
|
12
12
|
import { useStickToBottom } from '../lib/useStickToBottom.js';
|
|
13
13
|
import { createDisplayResultsTool } from './chat/tools/DisplayResultsTool.js';
|
|
@@ -16,7 +16,7 @@ import { createCarouselTool } from './chat/tools/SearchIndexTool.js';
|
|
|
16
16
|
var ChatUiComponent = createChatComponent({
|
|
17
17
|
createElement: createElement,
|
|
18
18
|
Fragment: Fragment,
|
|
19
|
-
|
|
19
|
+
useMemo: useMemo,
|
|
20
20
|
useState: useState
|
|
21
21
|
});
|
|
22
22
|
function createDefaultTools(itemComponent, getSearchPageURL) {
|
|
@@ -1,96 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { addAbsolutePosition, addQueryID } from 'instantsearch.js/es/lib/utils/index.js';
|
|
4
|
-
import React, { createElement } from 'react';
|
|
5
|
-
import { Carousel } from '../../../components/Carousel.js';
|
|
1
|
+
import { createCarouselToolComponent } from 'instantsearch-ui-components';
|
|
2
|
+
import React, { createElement, Fragment, useMemo, useRef, useState } from 'react';
|
|
6
3
|
|
|
7
4
|
function createCarouselTool(showViewAll, itemComponent, getSearchPageURL) {
|
|
8
|
-
var
|
|
9
|
-
createElement: createElement
|
|
5
|
+
var SearchLayoutUIComponent = createCarouselToolComponent({
|
|
6
|
+
createElement: createElement,
|
|
7
|
+
Fragment: Fragment,
|
|
8
|
+
useMemo: useMemo,
|
|
9
|
+
useRef: useRef,
|
|
10
|
+
useState: useState
|
|
10
11
|
});
|
|
11
|
-
function SearchLayoutComponent(
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
var hitsWithAbsolutePosition = addAbsolutePosition((output === null || output === void 0 ? void 0 : output.hits) || [], 0, ((_ref = input === null || input === void 0 ? void 0 : input.number_of_results) !== null && _ref !== void 0 ? _ref : output === null || output === void 0 ? void 0 : (_output_hits = output.hits) === null || _output_hits === void 0 ? void 0 : _output_hits.length) || 5);
|
|
18
|
-
var items = addQueryID(hitsWithAbsolutePosition, output === null || output === void 0 ? void 0 : output.queryID);
|
|
19
|
-
var MemoedHeaderComponent = React.useMemo(function() {
|
|
20
|
-
return function(props) {
|
|
21
|
-
return /*#__PURE__*/ React.createElement(HeaderComponent, _({
|
|
22
|
-
nbHits: output === null || output === void 0 ? void 0 : output.nbHits,
|
|
23
|
-
input: input,
|
|
24
|
-
hitsPerPage: items.length,
|
|
25
|
-
onClose: onClose,
|
|
26
|
-
applyFilters: applyFilters
|
|
27
|
-
}, props));
|
|
28
|
-
};
|
|
29
|
-
}, [
|
|
30
|
-
items.length,
|
|
31
|
-
input,
|
|
32
|
-
output === null || output === void 0 ? void 0 : output.nbHits,
|
|
33
|
-
applyFilters,
|
|
34
|
-
onClose
|
|
35
|
-
]);
|
|
36
|
-
return /*#__PURE__*/ React.createElement(Carousel, {
|
|
37
|
-
items: items,
|
|
12
|
+
var SearchLayoutComponent = function SearchLayoutComponent(toolProps) {
|
|
13
|
+
return /*#__PURE__*/ React.createElement(SearchLayoutUIComponent, {
|
|
14
|
+
getSearchPageURL: getSearchPageURL,
|
|
15
|
+
headerProps: {
|
|
16
|
+
showViewAll: showViewAll
|
|
17
|
+
},
|
|
38
18
|
itemComponent: itemComponent,
|
|
39
|
-
|
|
40
|
-
showNavigation: false,
|
|
41
|
-
headerComponent: MemoedHeaderComponent
|
|
19
|
+
toolProps: toolProps
|
|
42
20
|
});
|
|
43
|
-
}
|
|
44
|
-
function HeaderComponent(param) {
|
|
45
|
-
var canScrollLeft = param.canScrollLeft, canScrollRight = param.canScrollRight, scrollLeft = param.scrollLeft, scrollRight = param.scrollRight, nbHits = param.nbHits, input = param.input, hitsPerPage = param.hitsPerPage, applyFilters = param.applyFilters, onClose = param.onClose;
|
|
46
|
-
if ((hitsPerPage !== null && hitsPerPage !== void 0 ? hitsPerPage : 0) < 1) {
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
return /*#__PURE__*/ React.createElement("div", {
|
|
50
|
-
className: "ais-ChatToolSearchIndexCarouselHeader"
|
|
51
|
-
}, /*#__PURE__*/ React.createElement("div", {
|
|
52
|
-
className: "ais-ChatToolSearchIndexCarouselHeaderResults"
|
|
53
|
-
}, nbHits && /*#__PURE__*/ React.createElement("div", {
|
|
54
|
-
className: "ais-ChatToolSearchIndexCarouselHeaderCount"
|
|
55
|
-
}, hitsPerPage !== null && hitsPerPage !== void 0 ? hitsPerPage : 0, " of ", nbHits.toLocaleString(), " result", nbHits > 1 ? 's' : ''), showViewAll && /*#__PURE__*/ React.createElement(Button, {
|
|
56
|
-
variant: "ghost",
|
|
57
|
-
size: "sm",
|
|
58
|
-
onClick: function onClick() {
|
|
59
|
-
if (!input || !applyFilters) return;
|
|
60
|
-
var params = applyFilters({
|
|
61
|
-
query: input.query,
|
|
62
|
-
facetFilters: getFacetFiltersFromToolInput(input)
|
|
63
|
-
});
|
|
64
|
-
if (getSearchPageURL && new URL(getSearchPageURL(params)).pathname !== window.location.pathname) {
|
|
65
|
-
window.location.href = getSearchPageURL(params);
|
|
66
|
-
}
|
|
67
|
-
onClose();
|
|
68
|
-
},
|
|
69
|
-
className: "ais-ChatToolSearchIndexCarouselHeaderViewAll"
|
|
70
|
-
}, "View all", /*#__PURE__*/ React.createElement(ArrowRightIcon, {
|
|
71
|
-
createElement: createElement
|
|
72
|
-
}))), (hitsPerPage !== null && hitsPerPage !== void 0 ? hitsPerPage : 0) > 2 && /*#__PURE__*/ React.createElement("div", {
|
|
73
|
-
className: "ais-ChatToolSearchIndexCarouselHeaderScrollButtons"
|
|
74
|
-
}, /*#__PURE__*/ React.createElement(Button, {
|
|
75
|
-
variant: "outline",
|
|
76
|
-
size: "sm",
|
|
77
|
-
iconOnly: true,
|
|
78
|
-
onClick: scrollLeft,
|
|
79
|
-
disabled: !canScrollLeft,
|
|
80
|
-
className: "ais-ChatToolSearchIndexCarouselHeaderScrollButton"
|
|
81
|
-
}, /*#__PURE__*/ React.createElement(ChevronLeftIcon, {
|
|
82
|
-
createElement: createElement
|
|
83
|
-
})), /*#__PURE__*/ React.createElement(Button, {
|
|
84
|
-
variant: "outline",
|
|
85
|
-
size: "sm",
|
|
86
|
-
iconOnly: true,
|
|
87
|
-
onClick: scrollRight,
|
|
88
|
-
disabled: !canScrollRight,
|
|
89
|
-
className: "ais-ChatToolSearchIndexCarouselHeaderScrollButton"
|
|
90
|
-
}, /*#__PURE__*/ React.createElement(ChevronRightIcon, {
|
|
91
|
-
createElement: createElement
|
|
92
|
-
}))));
|
|
93
|
-
}
|
|
21
|
+
};
|
|
94
22
|
return {
|
|
95
23
|
layoutComponent: SearchLayoutComponent
|
|
96
24
|
};
|
package/dist/es/widgets/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { EXPERIMENTAL_Autocomplete } from './Autocomplete.js';
|
|
1
|
+
export { Autocomplete, EXPERIMENTAL_Autocomplete } from './Autocomplete.js';
|
|
2
2
|
export { Breadcrumb } from './Breadcrumb.js';
|
|
3
3
|
export { Chat, createDefaultTools } from './Chat.js';
|
|
4
4
|
export { ChatTrigger } from './ChatTrigger.js';
|