instantsearch.js 4.79.2 → 4.81.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.
Files changed (69) hide show
  1. package/cjs/components/Template/Template.js +1 -1
  2. package/cjs/connectors/chat/connectChat.js +200 -0
  3. package/cjs/connectors/index.js +7 -0
  4. package/cjs/connectors/index.umd.js +239 -0
  5. package/cjs/index.js +2 -2
  6. package/cjs/lib/InstantSearch.js +2 -10
  7. package/cjs/lib/chat/chat.js +177 -0
  8. package/cjs/lib/chat/index.js +27 -0
  9. package/cjs/lib/useStickToBottom.js +20 -0
  10. package/cjs/lib/version.js +1 -1
  11. package/cjs/templates/carousel/carousel.js +31 -4
  12. package/cjs/widgets/chat/chat.js +615 -0
  13. package/cjs/widgets/index/index.js +78 -24
  14. package/cjs/widgets/index.js +7 -0
  15. package/cjs/widgets/index.umd.js +267 -0
  16. package/dist/instantsearch.development.d.ts +123 -15
  17. package/dist/instantsearch.development.js +186 -91
  18. package/dist/instantsearch.development.js.map +1 -1
  19. package/dist/instantsearch.production.d.ts +123 -15
  20. package/dist/instantsearch.production.min.d.ts +123 -15
  21. package/dist/instantsearch.production.min.js +2 -2
  22. package/dist/instantsearch.production.min.js.map +1 -1
  23. package/es/components/Template/Template.js +1 -1
  24. package/es/connectors/chat/connectChat.d.ts +413 -0
  25. package/es/connectors/chat/connectChat.js +194 -0
  26. package/es/connectors/frequently-bought-together/connectFrequentlyBoughtTogether.d.ts +2 -0
  27. package/es/connectors/geo-search/connectGeoSearch.d.ts +1 -0
  28. package/es/connectors/hits/connectHits.d.ts +1 -0
  29. package/es/connectors/hits/connectHitsWithInsights.d.ts +1 -0
  30. package/es/connectors/index.d.ts +1 -0
  31. package/es/connectors/index.js +2 -1
  32. package/es/connectors/index.umd.d.ts +39 -0
  33. package/es/connectors/index.umd.js +47 -0
  34. package/es/connectors/infinite-hits/connectInfiniteHits.d.ts +1 -0
  35. package/es/connectors/infinite-hits/connectInfiniteHitsWithInsights.d.ts +1 -0
  36. package/es/connectors/looking-similar/connectLookingSimilar.d.ts +2 -0
  37. package/es/connectors/related-products/connectRelatedProducts.d.ts +2 -0
  38. package/es/connectors/trending-items/connectTrendingItems.d.ts +2 -0
  39. package/es/lib/InstantSearch.d.ts +2 -2
  40. package/es/lib/InstantSearch.js +2 -10
  41. package/es/lib/chat/chat.d.ts +40 -0
  42. package/es/lib/chat/chat.js +166 -0
  43. package/es/lib/chat/index.d.ts +7 -0
  44. package/es/lib/chat/index.js +5 -0
  45. package/es/lib/useStickToBottom.d.ts +1 -0
  46. package/es/lib/useStickToBottom.js +14 -0
  47. package/es/lib/version.d.ts +1 -1
  48. package/es/lib/version.js +1 -1
  49. package/es/templates/carousel/carousel.d.ts +10 -3
  50. package/es/templates/carousel/carousel.js +32 -5
  51. package/es/types/render-state.d.ts +2 -1
  52. package/es/types/templates.d.ts +1 -1
  53. package/es/types/widget.d.ts +2 -2
  54. package/es/widgets/chat/chat.d.ts +555 -0
  55. package/es/widgets/chat/chat.js +597 -0
  56. package/es/widgets/frequently-bought-together/frequently-bought-together.d.ts +3 -1
  57. package/es/widgets/geo-search/geo-search.d.ts +1 -0
  58. package/es/widgets/hits/hits.d.ts +1 -0
  59. package/es/widgets/index/index.d.ts +46 -2
  60. package/es/widgets/index/index.js +78 -24
  61. package/es/widgets/index.d.ts +1 -0
  62. package/es/widgets/index.js +2 -1
  63. package/es/widgets/index.umd.d.ts +44 -0
  64. package/es/widgets/index.umd.js +51 -0
  65. package/es/widgets/infinite-hits/infinite-hits.d.ts +1 -0
  66. package/es/widgets/looking-similar/looking-similar.d.ts +3 -1
  67. package/es/widgets/related-products/related-products.d.ts +3 -1
  68. package/es/widgets/trending-items/trending-items.d.ts +3 -1
  69. package/package.json +11 -7
@@ -60,7 +60,7 @@ var RawHtml = /*#__PURE__*/function (_Component) {
60
60
  });
61
61
  // if there is one TextNode first and one TextNode last, the
62
62
  // last one's nodeValue will be assigned to the first.
63
- if (this.nodes[0].nodeValue) {
63
+ if (this.nodes[0] && this.nodes[0].nodeValue) {
64
64
  this.nodes[0].nodeValue = '';
65
65
  }
66
66
  }
@@ -0,0 +1,413 @@
1
+ import { DefaultChatTransport } from 'ai';
2
+ import { Chat } from '../../lib/chat';
3
+ import type { AbstractChat, ChatInit as ChatInitAi, UIMessage } from '../../lib/chat';
4
+ import type { SendEventForHits } from '../../lib/utils';
5
+ import type { Connector, Renderer, Unmounter, UnknownWidgetParams, IndexUiState, IndexWidget } from '../../types';
6
+ import type { UserClientSideTool } from 'instantsearch-ui-components';
7
+ export type ChatRenderState<TUiMessage extends UIMessage = UIMessage> = {
8
+ indexUiState: IndexUiState;
9
+ input: string;
10
+ open: boolean;
11
+ /**
12
+ * Sends an event to the Insights middleware.
13
+ */
14
+ sendEvent: SendEventForHits;
15
+ setIndexUiState: IndexWidget['setIndexUiState'];
16
+ setInput: (input: string) => void;
17
+ setOpen: (open: boolean) => void;
18
+ /**
19
+ * Updates the `messages` state locally. This is useful when you want to
20
+ * edit the messages on the client, and then trigger the `reload` method
21
+ * manually to regenerate the AI response.
22
+ */
23
+ setMessages: (messages: TUiMessage[] | ((m: TUiMessage[]) => TUiMessage[])) => void;
24
+ } & Pick<AbstractChat<TUiMessage>, 'addToolResult' | 'clearError' | 'error' | 'id' | 'messages' | 'regenerate' | 'resumeStream' | 'sendMessage' | 'status' | 'stop'>;
25
+ export type ChatInitWithoutTransport<TUiMessage extends UIMessage> = Omit<ChatInitAi<TUiMessage>, 'transport'>;
26
+ export type ChatTransport = {
27
+ agentId?: string;
28
+ transport?: ConstructorParameters<typeof DefaultChatTransport>[0];
29
+ };
30
+ export type ChatInit<TUiMessage extends UIMessage> = ChatInitWithoutTransport<TUiMessage> & ChatTransport;
31
+ export type ChatConnectorParams<TUiMessage extends UIMessage = UIMessage> = ({
32
+ chat: Chat<TUiMessage>;
33
+ } | ChatInit<TUiMessage>) & {
34
+ /**
35
+ * Whether to resume an ongoing chat generation stream.
36
+ */
37
+ resume?: boolean;
38
+ /**
39
+ * Configuration for client-side tools.
40
+ */
41
+ tools?: Record<string, Omit<UserClientSideTool, 'layoutComponent'>>;
42
+ };
43
+ export type ChatWidgetDescription<TUiMessage extends UIMessage = UIMessage> = {
44
+ $$type: 'ais.chat';
45
+ renderState: ChatRenderState<TUiMessage>;
46
+ indexRenderState: Record<string, unknown>;
47
+ };
48
+ export type ChatConnector<TUiMessage extends UIMessage = UIMessage> = Connector<ChatWidgetDescription<TUiMessage>, ChatConnectorParams<TUiMessage>>;
49
+ declare const _default: <TWidgetParams extends UnknownWidgetParams>(renderFn: Renderer<ChatRenderState, TWidgetParams & ChatConnectorParams>, unmountFn?: Unmounter) => <TUiMessage extends UIMessage = UIMessage<unknown, import("ai").UIDataTypes, import("ai").UITools>>(widgetParams: TWidgetParams & ChatConnectorParams<TUiMessage>) => {
50
+ $$type: "ais.chat";
51
+ init(initOptions: import("../../types").InitOptions): void;
52
+ render(renderOptions: import("../../types").RenderOptions): void;
53
+ getRenderState(renderState: {
54
+ [x: string]: unknown;
55
+ answers?: import("../../types").WidgetRenderState<import("../answers/connectAnswers").AnswersRenderState, import("../answers/connectAnswers").AnswersConnectorParams> | undefined;
56
+ autocomplete?: import("../../types").WidgetRenderState<import("../autocomplete/connectAutocomplete").AutocompleteRenderState, import("../autocomplete/connectAutocomplete").AutocompleteConnectorParams> | undefined;
57
+ breadcrumb?: {
58
+ [rootAttribute: string]: import("../../types").WidgetRenderState<import("../breadcrumb/connectBreadcrumb").BreadcrumbRenderState, import("../breadcrumb/connectBreadcrumb").BreadcrumbConnectorParams>;
59
+ } | undefined;
60
+ clearRefinements?: import("../../types").WidgetRenderState<import("../clear-refinements/connectClearRefinements").ClearRefinementsRenderState, import("../clear-refinements/connectClearRefinements").ClearRefinementsConnectorParams> | undefined;
61
+ configure?: import("../../types").WidgetRenderState<import("../configure/connectConfigure").ConfigureRenderState, import("../configure/connectConfigure").ConfigureConnectorParams> | undefined;
62
+ currentRefinements?: import("../../types").WidgetRenderState<import("../current-refinements/connectCurrentRefinements").CurrentRefinementsRenderState, import("../current-refinements/connectCurrentRefinements").CurrentRefinementsConnectorParams> | undefined;
63
+ geoSearch?: import("../../types").WidgetRenderState<import("../geo-search/connectGeoSearch").GeoSearchRenderState<import("../../types").GeoHit>, import("../geo-search/connectGeoSearch").GeoSearchConnectorParams<import("../../types").GeoHit>> | undefined;
64
+ hierarchicalMenu?: {
65
+ [rootAttribute: string]: import("../../types").WidgetRenderState<import("../hierarchical-menu/connectHierarchicalMenu").HierarchicalMenuRenderState, import("../hierarchical-menu/connectHierarchicalMenu").HierarchicalMenuConnectorParams>;
66
+ } | undefined;
67
+ hits?: import("../../types").WidgetRenderState<import("../hits/connectHits").HitsRenderState<import("../../types").BaseHit>, import("../hits/connectHits").HitsConnectorParams<import("../../types").BaseHit>> | undefined;
68
+ hitsPerPage?: import("../../types").WidgetRenderState<import("../hits-per-page/connectHitsPerPage").HitsPerPageRenderState, import("../hits-per-page/connectHitsPerPage").HitsPerPageConnectorParams> | undefined;
69
+ infiniteHits?: import("../../types").WidgetRenderState<import("../infinite-hits/connectInfiniteHits").InfiniteHitsRenderState<import("../../types").BaseHit>, import("../infinite-hits/connectInfiniteHits").InfiniteHitsConnectorParams<import("../../types").BaseHit>> | undefined;
70
+ menu?: {
71
+ [attribute: string]: import("../../types").WidgetRenderState<import("../menu/connectMenu").MenuRenderState, import("../menu/connectMenu").MenuConnectorParams>;
72
+ } | undefined;
73
+ numericMenu?: {
74
+ [attribute: string]: import("../../types").WidgetRenderState<import("../numeric-menu/connectNumericMenu").NumericMenuRenderState, import("../numeric-menu/connectNumericMenu").NumericMenuConnectorParams>;
75
+ } | undefined;
76
+ pagination?: import("../../types").WidgetRenderState<import("../pagination/connectPagination").PaginationRenderState, import("../pagination/connectPagination").PaginationConnectorParams> | undefined;
77
+ poweredBy?: import("../../types").WidgetRenderState<import("../powered-by/connectPoweredBy").PoweredByRenderState, import("../powered-by/connectPoweredBy").PoweredByConnectorParams> | undefined;
78
+ queryRules?: import("../../types").WidgetRenderState<import("../query-rules/connectQueryRules").QueryRulesRenderState, import("../query-rules/connectQueryRules").QueryRulesConnectorParams> | undefined;
79
+ range?: {
80
+ [attribute: string]: import("../../types").WidgetRenderState<import("../range/connectRange").RangeRenderState, import("../range/connectRange").RangeConnectorParams>;
81
+ } | undefined;
82
+ ratingMenu?: {
83
+ [attribute: string]: import("../../types").WidgetRenderState<import("../rating-menu/connectRatingMenu").RatingMenuRenderState, import("../rating-menu/connectRatingMenu").RatingMenuConnectorParams>;
84
+ } | undefined;
85
+ refinementList?: {
86
+ [attribute: string]: import("../../types").WidgetRenderState<import("../refinement-list/connectRefinementList").RefinementListRenderState, import("../refinement-list/connectRefinementList").RefinementListConnectorParams>;
87
+ } | undefined;
88
+ relevantSort?: import("../../types").WidgetRenderState<import("../relevant-sort/connectRelevantSort").RelevantSortRenderState, import("../relevant-sort/connectRelevantSort").RelevantSortConnectorParams> | undefined;
89
+ searchBox?: import("../../types").WidgetRenderState<import("../search-box/connectSearchBox").SearchBoxRenderState, import("../search-box/connectSearchBox").SearchBoxConnectorParams> | undefined;
90
+ sortBy?: import("../../types").WidgetRenderState<import("../sort-by/connectSortBy").SortByRenderState, import("../sort-by/connectSortBy").SortByConnectorParams> | undefined;
91
+ stats?: import("../../types").WidgetRenderState<import("../stats/connectStats").StatsRenderState, import("../stats/connectStats").StatsConnectorParams> | undefined;
92
+ toggleRefinement?: {
93
+ [attribute: string]: import("../../types").WidgetRenderState<import("../toggle-refinement/connectToggleRefinement").ToggleRefinementRenderState, import("../toggle-refinement/connectToggleRefinement").ToggleRefinementConnectorParams>;
94
+ } | undefined;
95
+ voiceSearch?: import("../../types").WidgetRenderState<import("../voice-search/connectVoiceSearch").VoiceSearchRenderState, import("../voice-search/connectVoiceSearch").VoiceSearchConnectorParams> | undefined;
96
+ analytics?: import("../../types").WidgetRenderState<Record<string, unknown>, import("../../widgets/analytics/analytics").AnalyticsWidgetParams> | undefined;
97
+ places?: import("../../types").WidgetRenderState<Record<string, unknown>, import("../../widgets/places/places").PlacesWidgetParams> | undefined;
98
+ }): {
99
+ [x: string]: unknown;
100
+ answers?: import("../../types").WidgetRenderState<import("../answers/connectAnswers").AnswersRenderState, import("../answers/connectAnswers").AnswersConnectorParams> | undefined;
101
+ autocomplete?: import("../../types").WidgetRenderState<import("../autocomplete/connectAutocomplete").AutocompleteRenderState, import("../autocomplete/connectAutocomplete").AutocompleteConnectorParams> | undefined;
102
+ breadcrumb?: {
103
+ [rootAttribute: string]: import("../../types").WidgetRenderState<import("../breadcrumb/connectBreadcrumb").BreadcrumbRenderState, import("../breadcrumb/connectBreadcrumb").BreadcrumbConnectorParams>;
104
+ } | undefined;
105
+ clearRefinements?: import("../../types").WidgetRenderState<import("../clear-refinements/connectClearRefinements").ClearRefinementsRenderState, import("../clear-refinements/connectClearRefinements").ClearRefinementsConnectorParams> | undefined;
106
+ configure?: import("../../types").WidgetRenderState<import("../configure/connectConfigure").ConfigureRenderState, import("../configure/connectConfigure").ConfigureConnectorParams> | undefined;
107
+ currentRefinements?: import("../../types").WidgetRenderState<import("../current-refinements/connectCurrentRefinements").CurrentRefinementsRenderState, import("../current-refinements/connectCurrentRefinements").CurrentRefinementsConnectorParams> | undefined;
108
+ geoSearch?: import("../../types").WidgetRenderState<import("../geo-search/connectGeoSearch").GeoSearchRenderState<import("../../types").GeoHit>, import("../geo-search/connectGeoSearch").GeoSearchConnectorParams<import("../../types").GeoHit>> | undefined;
109
+ hierarchicalMenu?: {
110
+ [rootAttribute: string]: import("../../types").WidgetRenderState<import("../hierarchical-menu/connectHierarchicalMenu").HierarchicalMenuRenderState, import("../hierarchical-menu/connectHierarchicalMenu").HierarchicalMenuConnectorParams>;
111
+ } | undefined;
112
+ hits?: import("../../types").WidgetRenderState<import("../hits/connectHits").HitsRenderState<import("../../types").BaseHit>, import("../hits/connectHits").HitsConnectorParams<import("../../types").BaseHit>> | undefined;
113
+ hitsPerPage?: import("../../types").WidgetRenderState<import("../hits-per-page/connectHitsPerPage").HitsPerPageRenderState, import("../hits-per-page/connectHitsPerPage").HitsPerPageConnectorParams> | undefined;
114
+ infiniteHits?: import("../../types").WidgetRenderState<import("../infinite-hits/connectInfiniteHits").InfiniteHitsRenderState<import("../../types").BaseHit>, import("../infinite-hits/connectInfiniteHits").InfiniteHitsConnectorParams<import("../../types").BaseHit>> | undefined;
115
+ menu?: {
116
+ [attribute: string]: import("../../types").WidgetRenderState<import("../menu/connectMenu").MenuRenderState, import("../menu/connectMenu").MenuConnectorParams>;
117
+ } | undefined;
118
+ numericMenu?: {
119
+ [attribute: string]: import("../../types").WidgetRenderState<import("../numeric-menu/connectNumericMenu").NumericMenuRenderState, import("../numeric-menu/connectNumericMenu").NumericMenuConnectorParams>;
120
+ } | undefined;
121
+ pagination?: import("../../types").WidgetRenderState<import("../pagination/connectPagination").PaginationRenderState, import("../pagination/connectPagination").PaginationConnectorParams> | undefined;
122
+ poweredBy?: import("../../types").WidgetRenderState<import("../powered-by/connectPoweredBy").PoweredByRenderState, import("../powered-by/connectPoweredBy").PoweredByConnectorParams> | undefined;
123
+ queryRules?: import("../../types").WidgetRenderState<import("../query-rules/connectQueryRules").QueryRulesRenderState, import("../query-rules/connectQueryRules").QueryRulesConnectorParams> | undefined;
124
+ range?: {
125
+ [attribute: string]: import("../../types").WidgetRenderState<import("../range/connectRange").RangeRenderState, import("../range/connectRange").RangeConnectorParams>;
126
+ } | undefined;
127
+ ratingMenu?: {
128
+ [attribute: string]: import("../../types").WidgetRenderState<import("../rating-menu/connectRatingMenu").RatingMenuRenderState, import("../rating-menu/connectRatingMenu").RatingMenuConnectorParams>;
129
+ } | undefined;
130
+ refinementList?: {
131
+ [attribute: string]: import("../../types").WidgetRenderState<import("../refinement-list/connectRefinementList").RefinementListRenderState, import("../refinement-list/connectRefinementList").RefinementListConnectorParams>;
132
+ } | undefined;
133
+ relevantSort?: import("../../types").WidgetRenderState<import("../relevant-sort/connectRelevantSort").RelevantSortRenderState, import("../relevant-sort/connectRelevantSort").RelevantSortConnectorParams> | undefined;
134
+ searchBox?: import("../../types").WidgetRenderState<import("../search-box/connectSearchBox").SearchBoxRenderState, import("../search-box/connectSearchBox").SearchBoxConnectorParams> | undefined;
135
+ sortBy?: import("../../types").WidgetRenderState<import("../sort-by/connectSortBy").SortByRenderState, import("../sort-by/connectSortBy").SortByConnectorParams> | undefined;
136
+ stats?: import("../../types").WidgetRenderState<import("../stats/connectStats").StatsRenderState, import("../stats/connectStats").StatsConnectorParams> | undefined;
137
+ toggleRefinement?: {
138
+ [attribute: string]: import("../../types").WidgetRenderState<import("../toggle-refinement/connectToggleRefinement").ToggleRefinementRenderState, import("../toggle-refinement/connectToggleRefinement").ToggleRefinementConnectorParams>;
139
+ } | undefined;
140
+ voiceSearch?: import("../../types").WidgetRenderState<import("../voice-search/connectVoiceSearch").VoiceSearchRenderState, import("../voice-search/connectVoiceSearch").VoiceSearchConnectorParams> | undefined;
141
+ analytics?: import("../../types").WidgetRenderState<Record<string, unknown>, import("../../widgets/analytics/analytics").AnalyticsWidgetParams> | undefined;
142
+ places?: import("../../types").WidgetRenderState<Record<string, unknown>, import("../../widgets/places/places").PlacesWidgetParams> | undefined;
143
+ };
144
+ getWidgetRenderState(renderState: import("../../types").InitOptions | import("../../types").RenderOptions): {
145
+ indexUiState: Partial<{
146
+ query: string;
147
+ } & {
148
+ configure: import("algoliasearch-helper").PlainSearchParameters;
149
+ } & {
150
+ geoSearch: {
151
+ boundingBox: string;
152
+ };
153
+ } & {
154
+ hierarchicalMenu: {
155
+ [rootAttribute: string]: string[];
156
+ };
157
+ } & {
158
+ hitsPerPage: number;
159
+ } & {
160
+ page: number;
161
+ } & {
162
+ menu: {
163
+ [attribute: string]: string;
164
+ };
165
+ } & {
166
+ numericMenu: {
167
+ [attribute: string]: string;
168
+ };
169
+ } & {
170
+ page: number;
171
+ } & {
172
+ range: {
173
+ [attribute: string]: string;
174
+ };
175
+ } & {
176
+ ratingMenu: {
177
+ [attribute: string]: number | undefined;
178
+ };
179
+ } & {
180
+ refinementList: {
181
+ [attribute: string]: string[];
182
+ };
183
+ } & {
184
+ relevantSort: number;
185
+ } & {
186
+ query: string;
187
+ } & {
188
+ sortBy: string;
189
+ } & {
190
+ toggle: {
191
+ [attribute: string]: boolean;
192
+ };
193
+ } & {
194
+ query: string;
195
+ } & {
196
+ places: {
197
+ query: string;
198
+ position: string;
199
+ };
200
+ }>;
201
+ input: string;
202
+ open: boolean;
203
+ sendEvent: SendEventForHits;
204
+ setIndexUiState: (indexUiState: Partial<{
205
+ query: string;
206
+ } & {
207
+ configure: import("algoliasearch-helper").PlainSearchParameters;
208
+ } & {
209
+ geoSearch: {
210
+ boundingBox: string;
211
+ };
212
+ } & {
213
+ hierarchicalMenu: {
214
+ [rootAttribute: string]: string[];
215
+ };
216
+ } & {
217
+ hitsPerPage: number;
218
+ } & {
219
+ page: number;
220
+ } & {
221
+ menu: {
222
+ [attribute: string]: string;
223
+ };
224
+ } & {
225
+ numericMenu: {
226
+ [attribute: string]: string;
227
+ };
228
+ } & {
229
+ page: number;
230
+ } & {
231
+ range: {
232
+ [attribute: string]: string;
233
+ };
234
+ } & {
235
+ ratingMenu: {
236
+ [attribute: string]: number | undefined;
237
+ };
238
+ } & {
239
+ refinementList: {
240
+ [attribute: string]: string[];
241
+ };
242
+ } & {
243
+ relevantSort: number;
244
+ } & {
245
+ query: string;
246
+ } & {
247
+ sortBy: string;
248
+ } & {
249
+ toggle: {
250
+ [attribute: string]: boolean;
251
+ };
252
+ } & {
253
+ query: string;
254
+ } & {
255
+ places: {
256
+ query: string;
257
+ position: string;
258
+ };
259
+ }> | ((previousIndexUiState: Partial<{
260
+ query: string;
261
+ } & {
262
+ configure: import("algoliasearch-helper").PlainSearchParameters;
263
+ } & {
264
+ geoSearch: {
265
+ boundingBox: string;
266
+ };
267
+ } & {
268
+ hierarchicalMenu: {
269
+ [rootAttribute: string]: string[];
270
+ };
271
+ } & {
272
+ hitsPerPage: number;
273
+ } & {
274
+ page: number;
275
+ } & {
276
+ menu: {
277
+ [attribute: string]: string;
278
+ };
279
+ } & {
280
+ numericMenu: {
281
+ [attribute: string]: string;
282
+ };
283
+ } & {
284
+ page: number;
285
+ } & {
286
+ range: {
287
+ [attribute: string]: string;
288
+ };
289
+ } & {
290
+ ratingMenu: {
291
+ [attribute: string]: number | undefined;
292
+ };
293
+ } & {
294
+ refinementList: {
295
+ [attribute: string]: string[];
296
+ };
297
+ } & {
298
+ relevantSort: number;
299
+ } & {
300
+ query: string;
301
+ } & {
302
+ sortBy: string;
303
+ } & {
304
+ toggle: {
305
+ [attribute: string]: boolean;
306
+ };
307
+ } & {
308
+ query: string;
309
+ } & {
310
+ places: {
311
+ query: string;
312
+ position: string;
313
+ };
314
+ }>) => Partial<{
315
+ query: string;
316
+ } & {
317
+ configure: import("algoliasearch-helper").PlainSearchParameters;
318
+ } & {
319
+ geoSearch: {
320
+ boundingBox: string;
321
+ };
322
+ } & {
323
+ hierarchicalMenu: {
324
+ [rootAttribute: string]: string[];
325
+ };
326
+ } & {
327
+ hitsPerPage: number;
328
+ } & {
329
+ page: number;
330
+ } & {
331
+ menu: {
332
+ [attribute: string]: string;
333
+ };
334
+ } & {
335
+ numericMenu: {
336
+ [attribute: string]: string;
337
+ };
338
+ } & {
339
+ page: number;
340
+ } & {
341
+ range: {
342
+ [attribute: string]: string;
343
+ };
344
+ } & {
345
+ ratingMenu: {
346
+ [attribute: string]: number | undefined;
347
+ };
348
+ } & {
349
+ refinementList: {
350
+ [attribute: string]: string[];
351
+ };
352
+ } & {
353
+ relevantSort: number;
354
+ } & {
355
+ query: string;
356
+ } & {
357
+ sortBy: string;
358
+ } & {
359
+ toggle: {
360
+ [attribute: string]: boolean;
361
+ };
362
+ } & {
363
+ query: string;
364
+ } & {
365
+ places: {
366
+ query: string;
367
+ position: string;
368
+ };
369
+ }>)) => void;
370
+ setInput: (input: string) => void;
371
+ setOpen: (open: boolean) => void;
372
+ setMessages: (messagesParam: TUiMessage[] | ((m: TUiMessage[]) => TUiMessage[])) => void;
373
+ widgetParams: TWidgetParams & ChatConnectorParams<TUiMessage>;
374
+ addToolResult: <TOOL extends keyof (TUiMessage extends UIMessage<unknown, import("ai").UIDataTypes, infer TOOLS extends import("ai").UITools> ? TOOLS : import("ai").UITools)>({ tool, toolCallId, output, }: {
375
+ tool: TOOL;
376
+ toolCallId: string;
377
+ output: (TUiMessage extends UIMessage<unknown, import("ai").UIDataTypes, infer TOOLS extends import("ai").UITools> ? TOOLS : import("ai").UITools)[TOOL]["output"];
378
+ }) => Promise<void>;
379
+ clearError: () => void;
380
+ error: Error | undefined;
381
+ id: string;
382
+ messages: TUiMessage[];
383
+ regenerate: ({ messageId, ...options }?: {
384
+ messageId?: string;
385
+ } & import("ai").ChatRequestOptions) => Promise<void>;
386
+ resumeStream: (options?: import("ai").ChatRequestOptions) => Promise<void>;
387
+ sendMessage: (message?: (Omit<TUiMessage, "id" | "role"> & {
388
+ id?: TUiMessage["id"] | undefined;
389
+ role?: TUiMessage["role"] | undefined;
390
+ } & {
391
+ text?: never;
392
+ files?: never;
393
+ messageId?: string;
394
+ }) | {
395
+ text: string;
396
+ files?: FileList | import("ai").FileUIPart[];
397
+ metadata?: (TUiMessage extends UIMessage<infer METADATA, import("ai").UIDataTypes, import("ai").UITools> ? METADATA : unknown) | undefined;
398
+ parts?: never;
399
+ messageId?: string;
400
+ } | {
401
+ files: FileList | import("ai").FileUIPart[];
402
+ metadata?: (TUiMessage extends UIMessage<infer METADATA, import("ai").UIDataTypes, import("ai").UITools> ? METADATA : unknown) | undefined;
403
+ parts?: never;
404
+ messageId?: string;
405
+ } | undefined, options?: import("ai").ChatRequestOptions) => Promise<void>;
406
+ status: import("ai").ChatStatus;
407
+ stop: () => Promise<void>;
408
+ };
409
+ dispose(): void;
410
+ shouldRender(): true;
411
+ readonly chatInstance: Chat<TUiMessage>;
412
+ };
413
+ export default _default;
@@ -0,0 +1,194 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ var _excluded = ["resume", "tools"];
3
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
7
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
8
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
9
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
11
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
12
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
13
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
14
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
15
+ 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; }
16
+ import { DefaultChatTransport, lastAssistantMessageIsCompleteWithToolCalls } from 'ai';
17
+ import { Chat } from "../../lib/chat/index.js";
18
+ import { checkRendering, createDocumentationMessageGenerator, createSendEventForHits, getAppIdAndApiKey, noop, warning } from "../../lib/utils/index.js";
19
+ var withUsage = createDocumentationMessageGenerator({
20
+ name: 'chat',
21
+ connector: true
22
+ });
23
+ export default (function connectChat(renderFn) {
24
+ var unmountFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;
25
+ checkRendering(renderFn, withUsage());
26
+ return function (widgetParams) {
27
+ process.env.NODE_ENV === 'development' ? warning(false, 'Chat is not yet stable and will change in the future.') : void 0;
28
+ var _ref = widgetParams || {},
29
+ _ref$resume = _ref.resume,
30
+ resume = _ref$resume === void 0 ? false : _ref$resume,
31
+ _ref$tools = _ref.tools,
32
+ tools = _ref$tools === void 0 ? {} : _ref$tools,
33
+ options = _objectWithoutProperties(_ref, _excluded);
34
+ var _chatInstance;
35
+ var input = '';
36
+ var open = false;
37
+ var sendEvent;
38
+ var setInput;
39
+ var setOpen;
40
+ var setMessages = function setMessages(messagesParam) {
41
+ if (typeof messagesParam === 'function') {
42
+ messagesParam = messagesParam(_chatInstance.messages);
43
+ }
44
+ _chatInstance.messages = messagesParam;
45
+ };
46
+ var makeChatInstance = function makeChatInstance(instantSearchInstance) {
47
+ var transport;
48
+ var _getAppIdAndApiKey = getAppIdAndApiKey(instantSearchInstance.client),
49
+ _getAppIdAndApiKey2 = _slicedToArray(_getAppIdAndApiKey, 2),
50
+ appId = _getAppIdAndApiKey2[0],
51
+ apiKey = _getAppIdAndApiKey2[1];
52
+ if ('transport' in options && options.transport) {
53
+ transport = new DefaultChatTransport(options.transport);
54
+ }
55
+ if ('agentId' in options && options.agentId) {
56
+ var agentId = options.agentId;
57
+ if (!appId || !apiKey) {
58
+ throw new Error(withUsage('Could not extract Algolia credentials from the search client.'));
59
+ }
60
+ transport = new DefaultChatTransport({
61
+ api: "https://".concat(appId, ".algolia.net/agent-studio/1/agents/").concat(agentId, "/completions?compatibilityMode=ai-sdk-5"),
62
+ headers: {
63
+ 'x-algolia-application-id': appId,
64
+ 'x-algolia-api-Key': apiKey
65
+ }
66
+ });
67
+ }
68
+ if (!transport) {
69
+ throw new Error(withUsage('You need to provide either an `agentId` or a `transport`.'));
70
+ }
71
+ if ('chat' in options) {
72
+ return options.chat;
73
+ }
74
+ return new Chat(_objectSpread(_objectSpread({}, options), {}, {
75
+ transport: transport,
76
+ sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithToolCalls,
77
+ onToolCall: function onToolCall(_ref2) {
78
+ var toolCall = _ref2.toolCall;
79
+ var tool = tools[toolCall.toolName];
80
+ if (!tool) {
81
+ if (process.env.NODE_ENV === 'development') {
82
+ throw new Error("No tool implementation found for \"".concat(toolCall.toolName, "\". Please provide a tool implementation in the `tools` prop."));
83
+ }
84
+ return _chatInstance.addToolResult({
85
+ output: "No tool implemented for \"".concat(toolCall.toolName, "\"."),
86
+ tool: toolCall.toolName,
87
+ toolCallId: toolCall.toolCallId
88
+ });
89
+ }
90
+ if (tool.onToolCall) {
91
+ var addToolResult = function addToolResult(_ref3) {
92
+ var output = _ref3.output;
93
+ return _chatInstance.addToolResult({
94
+ output: output,
95
+ tool: toolCall.toolName,
96
+ toolCallId: toolCall.toolCallId
97
+ });
98
+ };
99
+ return tool.onToolCall(_objectSpread(_objectSpread({}, toolCall), {}, {
100
+ addToolResult: addToolResult
101
+ }));
102
+ }
103
+ return Promise.resolve();
104
+ }
105
+ }));
106
+ };
107
+ return {
108
+ $$type: 'ais.chat',
109
+ init: function init(initOptions) {
110
+ var _this = this;
111
+ var instantSearchInstance = initOptions.instantSearchInstance;
112
+ _chatInstance = makeChatInstance(instantSearchInstance);
113
+ var render = function render() {
114
+ renderFn(_objectSpread(_objectSpread({}, _this.getWidgetRenderState(initOptions)), {}, {
115
+ instantSearchInstance: initOptions.instantSearchInstance
116
+ }), false);
117
+ };
118
+ setOpen = function setOpen(o) {
119
+ open = o;
120
+ render();
121
+ };
122
+ setInput = function setInput(i) {
123
+ input = i;
124
+ render();
125
+ };
126
+ _chatInstance['~registerErrorCallback'](render);
127
+ _chatInstance['~registerMessagesCallback'](render);
128
+ _chatInstance['~registerStatusCallback'](render);
129
+ if (resume) {
130
+ _chatInstance.resumeStream();
131
+ }
132
+ renderFn(_objectSpread(_objectSpread({}, this.getWidgetRenderState(initOptions)), {}, {
133
+ instantSearchInstance: instantSearchInstance
134
+ }), true);
135
+ },
136
+ render: function render(renderOptions) {
137
+ renderFn(_objectSpread(_objectSpread({}, this.getWidgetRenderState(renderOptions)), {}, {
138
+ instantSearchInstance: renderOptions.instantSearchInstance
139
+ }), false);
140
+ },
141
+ getRenderState: function getRenderState(renderState) {
142
+ return renderState;
143
+ },
144
+ getWidgetRenderState: function getWidgetRenderState(renderState) {
145
+ var instantSearchInstance = renderState.instantSearchInstance,
146
+ parent = renderState.parent;
147
+ if (!_chatInstance) {
148
+ this.init(_objectSpread(_objectSpread({}, renderState), {}, {
149
+ uiState: {},
150
+ results: undefined
151
+ }));
152
+ }
153
+ if (!sendEvent) {
154
+ sendEvent = createSendEventForHits({
155
+ instantSearchInstance: renderState.instantSearchInstance,
156
+ helper: renderState.helper,
157
+ widgetType: this.$$type
158
+ });
159
+ }
160
+ return {
161
+ indexUiState: instantSearchInstance.getUiState()[parent.getIndexId()],
162
+ input: input,
163
+ open: open,
164
+ sendEvent: sendEvent,
165
+ setIndexUiState: parent.setIndexUiState.bind(parent),
166
+ setInput: setInput,
167
+ setOpen: setOpen,
168
+ setMessages: setMessages,
169
+ widgetParams: widgetParams,
170
+ // Chat instance render state
171
+ addToolResult: _chatInstance.addToolResult,
172
+ clearError: _chatInstance.clearError,
173
+ error: _chatInstance.error,
174
+ id: _chatInstance.id,
175
+ messages: _chatInstance.messages,
176
+ regenerate: _chatInstance.regenerate,
177
+ resumeStream: _chatInstance.resumeStream,
178
+ sendMessage: _chatInstance.sendMessage,
179
+ status: _chatInstance.status,
180
+ stop: _chatInstance.stop
181
+ };
182
+ },
183
+ dispose: function dispose() {
184
+ unmountFn();
185
+ },
186
+ shouldRender: function shouldRender() {
187
+ return true;
188
+ },
189
+ get chatInstance() {
190
+ return _chatInstance;
191
+ }
192
+ };
193
+ };
194
+ });
@@ -52,6 +52,7 @@ declare const _default: <TWidgetParams extends UnknownWidgetParams>(renderFn: Re
52
52
  init(initOptions: import("../../types").InitOptions): void;
53
53
  render(renderOptions: import("../../types").RenderOptions): void;
54
54
  getRenderState(renderState: {
55
+ [x: string]: unknown;
55
56
  answers?: import("../../types").WidgetRenderState<import("../answers/connectAnswers").AnswersRenderState, import("../answers/connectAnswers").AnswersConnectorParams> | undefined;
56
57
  autocomplete?: import("../../types").WidgetRenderState<import("../autocomplete/connectAutocomplete").AutocompleteRenderState, import("../autocomplete/connectAutocomplete").AutocompleteConnectorParams> | undefined;
57
58
  breadcrumb?: {
@@ -96,6 +97,7 @@ declare const _default: <TWidgetParams extends UnknownWidgetParams>(renderFn: Re
96
97
  analytics?: import("../../types").WidgetRenderState<Record<string, unknown>, import("../../widgets/analytics/analytics").AnalyticsWidgetParams> | undefined;
97
98
  places?: import("../../types").WidgetRenderState<Record<string, unknown>, import("../../widgets/places/places").PlacesWidgetParams> | undefined;
98
99
  }): {
100
+ [x: string]: unknown;
99
101
  answers?: import("../../types").WidgetRenderState<import("../answers/connectAnswers").AnswersRenderState, import("../answers/connectAnswers").AnswersConnectorParams> | undefined;
100
102
  autocomplete?: import("../../types").WidgetRenderState<import("../autocomplete/connectAutocomplete").AutocompleteRenderState, import("../autocomplete/connectAutocomplete").AutocompleteConnectorParams> | undefined;
101
103
  breadcrumb?: {
@@ -132,6 +132,7 @@ declare const _default: <TWidgetParams extends UnknownWidgetParams>(renderFn: Re
132
132
  widgetParams: TWidgetParams & GeoSearchConnectorParams<THit>;
133
133
  };
134
134
  getRenderState(renderState: {
135
+ [x: string]: unknown;
135
136
  answers?: WidgetRenderState<import("../answers/connectAnswers").AnswersRenderState, import("../answers/connectAnswers").AnswersConnectorParams> | undefined;
136
137
  autocomplete?: WidgetRenderState<import("../autocomplete/connectAutocomplete").AutocompleteRenderState, import("../autocomplete/connectAutocomplete").AutocompleteConnectorParams> | undefined;
137
138
  breadcrumb?: {
@@ -53,6 +53,7 @@ declare const _default: <TWidgetParams>(renderFn: Renderer<HitsRenderState, TWid
53
53
  init(initOptions: import("../../types").InitOptions): void;
54
54
  render(renderOptions: import("../../types").RenderOptions): void;
55
55
  getRenderState(renderState: {
56
+ [x: string]: unknown;
56
57
  answers?: WidgetRenderState<import("../answers/connectAnswers").AnswersRenderState, import("../answers/connectAnswers").AnswersConnectorParams> | undefined;
57
58
  autocomplete?: WidgetRenderState<import("../autocomplete/connectAutocomplete").AutocompleteRenderState, import("../autocomplete/connectAutocomplete").AutocompleteConnectorParams> | undefined;
58
59
  breadcrumb?: {