react-instantsearch 7.33.0 → 7.34.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.
@@ -1,4 +1,4 @@
1
- /*! React InstantSearch 7.33.0 | © Algolia, Inc. and contributors; MIT License | https://github.com/algolia/instantsearch */
1
+ /*! React InstantSearch 7.34.0 | © Algolia, Inc. and contributors; MIT License | https://github.com/algolia/instantsearch */
2
2
  (function (global, factory) {
3
3
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :
4
4
  typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) :
@@ -24,7 +24,7 @@
24
24
 
25
25
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
26
26
 
27
- var version$2 = '7.33.0';
27
+ var version$2 = '7.34.0';
28
28
 
29
29
  function _define_property(obj, key, value) {
30
30
  if (key in obj) {
@@ -5980,7 +5980,7 @@
5980
5980
  }
5981
5981
  }
5982
5982
 
5983
- var withUsage$u = createDocumentationMessageGenerator({
5983
+ var withUsage$v = createDocumentationMessageGenerator({
5984
5984
  name: 'configure',
5985
5985
  connector: true
5986
5986
  });
@@ -5996,7 +5996,7 @@
5996
5996
  var renderFn = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : noop, unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
5997
5997
  return function(widgetParams) {
5998
5998
  if (!widgetParams || !isPlainObject(widgetParams.searchParameters)) {
5999
- throw new Error(withUsage$u('The `searchParameters` option expects an object.'));
5999
+ throw new Error(withUsage$v('The `searchParameters` option expects an object.'));
6000
6000
  }
6001
6001
  var connectorState = {};
6002
6002
  function refine(helper) {
@@ -7620,13 +7620,13 @@
7620
7620
  return null;
7621
7621
  }
7622
7622
 
7623
- var withUsage$t = createDocumentationMessageGenerator({
7623
+ var withUsage$u = createDocumentationMessageGenerator({
7624
7624
  name: 'dynamic-widgets',
7625
7625
  connector: true
7626
7626
  });
7627
7627
  var connectDynamicWidgets = function connectDynamicWidgets(renderFn) {
7628
7628
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
7629
- checkRendering(renderFn, withUsage$t());
7629
+ checkRendering(renderFn, withUsage$u());
7630
7630
  return function(widgetParams) {
7631
7631
  var widgets = widgetParams.widgets, _widgetParams_maxValuesPerFacet = widgetParams.maxValuesPerFacet, maxValuesPerFacet = _widgetParams_maxValuesPerFacet === void 0 ? 20 : _widgetParams_maxValuesPerFacet, _widgetParams_facets = widgetParams.facets, facets = _widgetParams_facets === void 0 ? [
7632
7632
  '*'
@@ -7636,10 +7636,10 @@
7636
7636
  if (!(widgets && Array.isArray(widgets) && widgets.every(function(widget) {
7637
7637
  return (typeof widget === "undefined" ? "undefined" : _type_of(widget)) === 'object';
7638
7638
  }))) {
7639
- throw new Error(withUsage$t('The `widgets` option expects an array of widgets.'));
7639
+ throw new Error(withUsage$u('The `widgets` option expects an array of widgets.'));
7640
7640
  }
7641
7641
  if (!Array.isArray(facets)) {
7642
- throw new Error(withUsage$t("The `facets` option only accepts an array of facets, you passed ".concat(JSON.stringify(facets))));
7642
+ throw new Error(withUsage$u("The `facets` option only accepts an array of facets, you passed ".concat(JSON.stringify(facets))));
7643
7643
  }
7644
7644
  var localWidgets = new Map();
7645
7645
  return {
@@ -7741,7 +7741,7 @@
7741
7741
  results: results
7742
7742
  });
7743
7743
  if (!Array.isArray(attributesToRender)) {
7744
- throw new Error(withUsage$t('The `transformItems` option expects a function that returns an Array.'));
7744
+ throw new Error(withUsage$u('The `transformItems` option expects a function that returns an Array.'));
7745
7745
  }
7746
7746
  return {
7747
7747
  attributesToRender: attributesToRender,
@@ -8062,19 +8062,19 @@
8062
8062
  return toFeedSearchResults(lastResults._state, raw);
8063
8063
  });
8064
8064
  }
8065
- var withUsage$s = createDocumentationMessageGenerator({
8065
+ var withUsage$t = createDocumentationMessageGenerator({
8066
8066
  name: 'feeds',
8067
8067
  connector: true
8068
8068
  });
8069
8069
  var connectFeeds = function connectFeeds(renderFn) {
8070
8070
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
8071
- checkRendering(renderFn, withUsage$s());
8071
+ checkRendering(renderFn, withUsage$t());
8072
8072
  return function(widgetParams) {
8073
8073
  var isolated = widgetParams.isolated, _widgetParams_transformFeeds = widgetParams.transformFeeds, transformFeeds = _widgetParams_transformFeeds === void 0 ? function(feeds) {
8074
8074
  return feeds;
8075
8075
  } : _widgetParams_transformFeeds;
8076
8076
  if (isolated !== false) {
8077
- throw new Error(withUsage$s('The `isolated` option currently only supports `false`.'));
8077
+ throw new Error(withUsage$t('The `isolated` option currently only supports `false`.'));
8078
8078
  }
8079
8079
  return {
8080
8080
  $$type: 'ais.feeds',
@@ -8082,7 +8082,7 @@
8082
8082
  init: function init(initOptions) {
8083
8083
  var instantSearchInstance = initOptions.instantSearchInstance;
8084
8084
  if (!instantSearchInstance.compositionID) {
8085
- throw new Error(withUsage$s('The `feeds` widget requires a composition-based InstantSearch instance (compositionID must be set).'));
8085
+ throw new Error(withUsage$t('The `feeds` widget requires a composition-based InstantSearch instance (compositionID must be set).'));
8086
8086
  }
8087
8087
  hydrateFeedsFromInitialResultsIfNeeded(instantSearchInstance, initOptions.parent);
8088
8088
  renderFn(_object_spread_props(_object_spread({}, this.getWidgetRenderState(initOptions)), {
@@ -8128,12 +8128,12 @@
8128
8128
  ];
8129
8129
  feedIDs = transformFeeds(feedIDs);
8130
8130
  if (!Array.isArray(feedIDs)) {
8131
- throw new Error(withUsage$s('The `transformFeeds` option expects a function that returns an Array.'));
8131
+ throw new Error(withUsage$t('The `transformFeeds` option expects a function that returns an Array.'));
8132
8132
  }
8133
8133
  if (!feedIDs.every(function(feedID) {
8134
8134
  return typeof feedID === 'string';
8135
8135
  })) {
8136
- throw new Error(withUsage$s('The `transformFeeds` option expects a function that returns an array of feed IDs (strings).'));
8136
+ throw new Error(withUsage$t('The `transformFeeds` option expects a function that returns an array of feed IDs (strings).'));
8137
8137
  }
8138
8138
  return {
8139
8139
  feedIDs: feedIDs,
@@ -8244,7 +8244,7 @@
8244
8244
  }));
8245
8245
  }
8246
8246
 
8247
- var withUsage$r = createDocumentationMessageGenerator({
8247
+ var withUsage$s = createDocumentationMessageGenerator({
8248
8248
  name: 'index-widget'
8249
8249
  });
8250
8250
  /**
@@ -8338,7 +8338,7 @@
8338
8338
  }
8339
8339
  var index = function index(widgetParams) {
8340
8340
  if (widgetParams === undefined || widgetParams.indexName === undefined && !widgetParams.EXPERIMENTAL_isolated) {
8341
- throw new Error(withUsage$r('The `indexName` option is required.'));
8341
+ throw new Error(withUsage$s('The `indexName` option is required.'));
8342
8342
  }
8343
8343
  // When isolated=true, we use an empty string as the default indexName.
8344
8344
  // This is intentional: isolated indices do not require a real index name.
@@ -8428,7 +8428,7 @@
8428
8428
  addWidgets: function addWidgets(widgets) {
8429
8429
  var _this = this;
8430
8430
  if (!Array.isArray(widgets)) {
8431
- throw new Error(withUsage$r('The `addWidgets` method expects an array of widgets.'));
8431
+ throw new Error(withUsage$s('The `addWidgets` method expects an array of widgets.'));
8432
8432
  }
8433
8433
  var flatWidgets = widgets.reduce(function(acc, w) {
8434
8434
  return acc.concat(Array.isArray(w) ? w : [
@@ -8438,7 +8438,7 @@
8438
8438
  if (flatWidgets.some(function(widget) {
8439
8439
  return typeof widget.init !== 'function' && typeof widget.render !== 'function';
8440
8440
  })) {
8441
- throw new Error(withUsage$r('The widget definition expects a `render` and/or an `init` method.'));
8441
+ throw new Error(withUsage$s('The widget definition expects a `render` and/or an `init` method.'));
8442
8442
  }
8443
8443
  flatWidgets.forEach(function(widget) {
8444
8444
  widget.parent = _this;
@@ -8498,7 +8498,7 @@
8498
8498
  removeWidgets: function removeWidgets(widgets) {
8499
8499
  var _this = this;
8500
8500
  if (!Array.isArray(widgets)) {
8501
- throw new Error(withUsage$r('The `removeWidgets` method expects an array of widgets.'));
8501
+ throw new Error(withUsage$s('The `removeWidgets` method expects an array of widgets.'));
8502
8502
  }
8503
8503
  var flatWidgets = widgets.reduce(function(acc, w) {
8504
8504
  return acc.concat(Array.isArray(w) ? w : [
@@ -8508,7 +8508,7 @@
8508
8508
  if (flatWidgets.some(function(widget) {
8509
8509
  return typeof widget.dispose !== 'function';
8510
8510
  })) {
8511
- throw new Error(withUsage$r('The widget definition expects a `dispose` method.'));
8511
+ throw new Error(withUsage$s('The widget definition expects a `dispose` method.'));
8512
8512
  }
8513
8513
  localWidgets = localWidgets.filter(function(widget) {
8514
8514
  return flatWidgets.indexOf(widget) === -1;
@@ -10821,9 +10821,9 @@
10821
10821
  };
10822
10822
  }
10823
10823
 
10824
- var version = '4.98.0';
10824
+ var version = '4.100.0';
10825
10825
 
10826
- var withUsage$q = createDocumentationMessageGenerator({
10826
+ var withUsage$r = createDocumentationMessageGenerator({
10827
10827
  name: 'instantsearch'
10828
10828
  });
10829
10829
  function defaultCreateURL() {
@@ -10879,7 +10879,7 @@
10879
10879
  _this.setMaxListeners(100);
10880
10880
  var _options_indexName = options.indexName, indexName = _options_indexName === void 0 ? '' : _options_indexName, compositionID = options.compositionID, numberLocale = options.numberLocale, _options_initialUiState = options.initialUiState, initialUiState = _options_initialUiState === void 0 ? {} : _options_initialUiState, _options_routing = options.routing, routing = _options_routing === void 0 ? null : _options_routing, _options_insights = options.insights, insights = _options_insights === void 0 ? undefined : _options_insights, searchFunction = options.searchFunction, _options_stalledSearchDelay = options.stalledSearchDelay, stalledSearchDelay = _options_stalledSearchDelay === void 0 ? 200 : _options_stalledSearchDelay, _options_searchClient = options.searchClient, searchClient = _options_searchClient === void 0 ? null : _options_searchClient, _options_insightsClient = options.insightsClient, insightsClient = _options_insightsClient === void 0 ? null : _options_insightsClient, _options_onStateChange = options.onStateChange, onStateChange = _options_onStateChange === void 0 ? null : _options_onStateChange, _options_future1 = options.future, future = _options_future1 === void 0 ? _object_spread({}, INSTANTSEARCH_FUTURE_DEFAULTS, options.future || {}) : _options_future1;
10881
10881
  if (searchClient === null) {
10882
- throw new Error(withUsage$q('The `searchClient` option is required.'));
10882
+ throw new Error(withUsage$r('The `searchClient` option is required.'));
10883
10883
  }
10884
10884
  if (typeof searchClient.search !== 'function') {
10885
10885
  throw new Error("The `searchClient` must implement a `search` method.\n\nSee: https://www.algolia.com/doc/guides/building-search-ui/going-further/backend-search/in-depth/backend-instantsearch/js/");
@@ -10888,7 +10888,7 @@
10888
10888
  searchClient.addAlgoliaAgent("instantsearch.js (".concat(version, ")"));
10889
10889
  }
10890
10890
  if (insightsClient && typeof insightsClient !== 'function') {
10891
- throw new Error(withUsage$q('The `insightsClient` option should be a function.'));
10891
+ throw new Error(withUsage$r('The `insightsClient` option should be a function.'));
10892
10892
  }
10893
10893
  _this.client = searchClient;
10894
10894
  _this.future = future;
@@ -11036,12 +11036,12 @@
11036
11036
  * @param widgets The array of widgets to add to InstantSearch.
11037
11037
  */ function addWidgets(widgets) {
11038
11038
  if (!Array.isArray(widgets)) {
11039
- throw new Error(withUsage$q('The `addWidgets` method expects an array of widgets. Please use `addWidget`.'));
11039
+ throw new Error(withUsage$r('The `addWidgets` method expects an array of widgets. Please use `addWidget`.'));
11040
11040
  }
11041
11041
  if (this.compositionID && widgets.some(function(w) {
11042
11042
  return !Array.isArray(w) && isIndexWidget(w) && !w._isolated;
11043
11043
  })) {
11044
- throw new Error(withUsage$q('The `index` widget cannot be used with a composition-based InstantSearch implementation.'));
11044
+ throw new Error(withUsage$r('The `index` widget cannot be used with a composition-based InstantSearch implementation.'));
11045
11045
  }
11046
11046
  this.mainIndex.addWidgets(widgets);
11047
11047
  return this;
@@ -11070,7 +11070,7 @@
11070
11070
  * The widgets must implement a `dispose()` method to clear their states.
11071
11071
  */ function removeWidgets(widgets) {
11072
11072
  if (!Array.isArray(widgets)) {
11073
- throw new Error(withUsage$q('The `removeWidgets` method expects an array of widgets. Please use `removeWidget`.'));
11073
+ throw new Error(withUsage$r('The `removeWidgets` method expects an array of widgets. Please use `removeWidget`.'));
11074
11074
  }
11075
11075
  this.mainIndex.removeWidgets(widgets);
11076
11076
  return this;
@@ -11084,7 +11084,7 @@
11084
11084
  */ function start() {
11085
11085
  var _this = this;
11086
11086
  if (this.started) {
11087
- throw new Error(withUsage$q('The `start` method has already been called once.'));
11087
+ throw new Error(withUsage$r('The `start` method has already been called once.'));
11088
11088
  }
11089
11089
  // This Helper is used for the queries, we don't care about its state. The
11090
11090
  // states are managed at the `index` level. We use this Helper to create
@@ -11286,7 +11286,7 @@
11286
11286
  var _this = this;
11287
11287
  var callOnStateChange = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
11288
11288
  if (!this.mainHelper) {
11289
- throw new Error(withUsage$q('The `start` method needs to be called before `setUiState`.'));
11289
+ throw new Error(withUsage$r('The `start` method needs to be called before `setUiState`.'));
11290
11290
  }
11291
11291
  // We refresh the index UI state to update the local UI state that the
11292
11292
  // main index passes to the function form of `setUiState`.
@@ -11323,7 +11323,7 @@
11323
11323
  value: function createURL() {
11324
11324
  var nextState = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
11325
11325
  if (!this.started) {
11326
- throw new Error(withUsage$q('The `start` method needs to be called before `createURL`.'));
11326
+ throw new Error(withUsage$r('The `start` method needs to be called before `createURL`.'));
11327
11327
  }
11328
11328
  return this._createURL(nextState);
11329
11329
  }
@@ -11332,7 +11332,7 @@
11332
11332
  key: "refresh",
11333
11333
  value: function refresh() {
11334
11334
  if (!this.mainHelper) {
11335
- throw new Error(withUsage$q('The `start` method needs to be called before `refresh`.'));
11335
+ throw new Error(withUsage$r('The `start` method needs to be called before `refresh`.'));
11336
11336
  }
11337
11337
  this.mainHelper.clearCache().search();
11338
11338
  }
@@ -11839,13 +11839,13 @@
11839
11839
  }, children);
11840
11840
  }
11841
11841
 
11842
- var withUsage$p = createDocumentationMessageGenerator({
11842
+ var withUsage$q = createDocumentationMessageGenerator({
11843
11843
  name: 'autocomplete',
11844
11844
  connector: true
11845
11845
  });
11846
11846
  var connectAutocomplete = function connectAutocomplete(renderFn) {
11847
11847
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
11848
- checkRendering(renderFn, withUsage$p());
11848
+ checkRendering(renderFn, withUsage$q());
11849
11849
  return function(widgetParams) {
11850
11850
  var _ref = widgetParams || {}, _ref_escapeHTML = _ref.escapeHTML, escapeHTML = _ref_escapeHTML === void 0 ? true : _ref_escapeHTML, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(indices) {
11851
11851
  return indices;
@@ -11954,20 +11954,20 @@
11954
11954
  return useConnector(connectAutocomplete, props, additionalWidgetProperties);
11955
11955
  }
11956
11956
 
11957
- var withUsage$o = createDocumentationMessageGenerator({
11957
+ var withUsage$p = createDocumentationMessageGenerator({
11958
11958
  name: 'breadcrumb',
11959
11959
  connector: true
11960
11960
  });
11961
11961
  var connectBreadcrumb = function connectBreadcrumb(renderFn) {
11962
11962
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
11963
- checkRendering(renderFn, withUsage$o());
11963
+ checkRendering(renderFn, withUsage$p());
11964
11964
  var connectorState = {};
11965
11965
  return function(widgetParams) {
11966
11966
  var _ref = widgetParams || {}, attributes = _ref.attributes, _ref_separator = _ref.separator, separator = _ref_separator === void 0 ? ' > ' : _ref_separator, _ref_rootPath = _ref.rootPath, rootPath = _ref_rootPath === void 0 ? null : _ref_rootPath, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(items) {
11967
11967
  return items;
11968
11968
  } : _ref_transformItems;
11969
11969
  if (!attributes || !Array.isArray(attributes) || attributes.length === 0) {
11970
- throw new Error(withUsage$o('The `attributes` option expects an array of strings.'));
11970
+ throw new Error(withUsage$p('The `attributes` option expects an array of strings.'));
11971
11971
  }
11972
11972
  var _attributes = _sliced_to_array(attributes, 1), hierarchicalFacetName = _attributes[0];
11973
11973
  function getRefinedState(state, facetValue) {
@@ -13638,7 +13638,7 @@
13638
13638
  return DefaultChatTransport;
13639
13639
  }(HttpChatTransport);
13640
13640
 
13641
- var withUsage$n = createDocumentationMessageGenerator({
13641
+ var withUsage$o = createDocumentationMessageGenerator({
13642
13642
  name: 'chat',
13643
13643
  connector: true
13644
13644
  });
@@ -13689,15 +13689,16 @@
13689
13689
  }
13690
13690
  var connectChat = function connectChat(renderFn) {
13691
13691
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
13692
- checkRendering(renderFn, withUsage$n());
13692
+ checkRendering(renderFn, withUsage$o());
13693
13693
  return function(widgetParams) {
13694
- var _ref = widgetParams || {}, _ref_resume = _ref.resume, resume = _ref_resume === void 0 ? false : _ref_resume, _ref_tools = _ref.tools, tools = _ref_tools === void 0 ? {} : _ref_tools, _ref_type = _ref.type, type = _ref_type === void 0 ? 'chat' : _ref_type, context = _ref.context, initialUserMessage = _ref.initialUserMessage, initialMessages = _ref.initialMessages, options = _object_without_properties(_ref, [
13694
+ var _ref = widgetParams || {}, _ref_resume = _ref.resume, resume = _ref_resume === void 0 ? false : _ref_resume, _ref_tools = _ref.tools, tools = _ref_tools === void 0 ? {} : _ref_tools, _ref_type = _ref.type, type = _ref_type === void 0 ? 'chat' : _ref_type, context = _ref.context, initialUserMessage = _ref.initialUserMessage, initialMessages = _ref.initialMessages, _ref_disableTriggerValidation = _ref.disableTriggerValidation, disableTriggerValidation = _ref_disableTriggerValidation === void 0 ? false : _ref_disableTriggerValidation, options = _object_without_properties(_ref, [
13695
13695
  "resume",
13696
13696
  "tools",
13697
13697
  "type",
13698
13698
  "context",
13699
13699
  "initialUserMessage",
13700
- "initialMessages"
13700
+ "initialMessages",
13701
+ "disableTriggerValidation"
13701
13702
  ]);
13702
13703
  var _chatInstance;
13703
13704
  var input = '';
@@ -13709,6 +13710,7 @@
13709
13710
  var focusInput;
13710
13711
  var setIsClearing;
13711
13712
  var setFeedbackState;
13713
+ var hasValidatedEntryPoints = false;
13712
13714
  var agentId = 'agentId' in options ? options.agentId : undefined;
13713
13715
  var feedbackState = {};
13714
13716
  var _sendChatMessageFeedback;
@@ -13752,6 +13754,22 @@
13752
13754
  feedbackState = {};
13753
13755
  setIsClearing(false);
13754
13756
  };
13757
+ var validateEntryPoints = function validateEntryPoints(instantSearchInstance) {
13758
+ if (disableTriggerValidation || hasValidatedEntryPoints) {
13759
+ return;
13760
+ }
13761
+ // warning only relevant once mounted
13762
+ if (!instantSearchInstance.mainIndex) {
13763
+ return;
13764
+ }
13765
+ walkIndex(instantSearchInstance.mainIndex, function(indexWidget) {
13766
+ var widgets = indexWidget.getWidgets();
13767
+ if (widgets.some(function(w) {
13768
+ return w.opensChat === true;
13769
+ })) ;
13770
+ });
13771
+ hasValidatedEntryPoints = true;
13772
+ };
13755
13773
  var makeChatInstance = function makeChatInstance(instantSearchInstance) {
13756
13774
  var transport;
13757
13775
  var client = instantSearchInstance.client;
@@ -13801,7 +13819,7 @@
13801
13819
  }
13802
13820
  if ('agentId' in options && options.agentId) {
13803
13821
  if (!appId || !apiKey) {
13804
- throw new Error(withUsage$n('Could not extract Algolia credentials from the search client.'));
13822
+ throw new Error(withUsage$o('Could not extract Algolia credentials from the search client.'));
13805
13823
  }
13806
13824
  var baseApi = "https://".concat(appId, ".algolia.net/agent-studio/1/agents/").concat(agentId, "/completions?compatibilityMode=ai-sdk-5");
13807
13825
  transport = new DefaultChatTransport({
@@ -13826,7 +13844,7 @@
13826
13844
  });
13827
13845
  }
13828
13846
  if (!transport) {
13829
- throw new Error(withUsage$n('You need to provide either an `agentId` or a `transport`.'));
13847
+ throw new Error(withUsage$o('You need to provide either an `agentId` or a `transport`.'));
13830
13848
  }
13831
13849
  if ('chat' in options) {
13832
13850
  return options.chat;
@@ -13878,6 +13896,7 @@
13878
13896
  init: function init(initOptions) {
13879
13897
  var _this = this;
13880
13898
  var instantSearchInstance = initOptions.instantSearchInstance;
13899
+ validateEntryPoints(instantSearchInstance);
13881
13900
  _chatInstance = makeChatInstance(instantSearchInstance);
13882
13901
  var render = function render() {
13883
13902
  renderFn(_object_spread_props(_object_spread({}, _this.getWidgetRenderState(initOptions)), {
@@ -13887,6 +13906,10 @@
13887
13906
  setOpen = function setOpen(o) {
13888
13907
  open = o;
13889
13908
  render();
13909
+ // `open` is read by sibling widgets (e.g. `chatTrigger`) via the
13910
+ // shared `renderState`. Schedule a full re-render so they pick up
13911
+ // the new value instead of staying frozen on their initial state.
13912
+ initOptions.instantSearchInstance.scheduleRender();
13890
13913
  };
13891
13914
  focusInput = function focusInput() {
13892
13915
  setOpen(true);
@@ -13907,7 +13930,7 @@
13907
13930
  if (agentId && feedback) {
13908
13931
  var _getAppIdAndApiKey = _sliced_to_array(getAppIdAndApiKey(initOptions.instantSearchInstance.client), 2), appId = _getAppIdAndApiKey[0], apiKey = _getAppIdAndApiKey[1];
13909
13932
  if (!appId || !apiKey) {
13910
- throw new Error(withUsage$n('Could not extract Algolia credentials from the search client.'));
13933
+ throw new Error(withUsage$o('Could not extract Algolia credentials from the search client.'));
13911
13934
  }
13912
13935
  feedbackAbortController = new AbortController();
13913
13936
  _sendChatMessageFeedback = function _sendChatMessageFeedback(messageId, vote) {
@@ -13948,6 +13971,7 @@
13948
13971
  }), true);
13949
13972
  },
13950
13973
  render: function render(renderOptions) {
13974
+ validateEntryPoints(renderOptions.instantSearchInstance);
13951
13975
  renderFn(_object_spread_props(_object_spread({}, this.getWidgetRenderState(renderOptions)), {
13952
13976
  instantSearchInstance: renderOptions.instantSearchInstance
13953
13977
  }), false);
@@ -13994,47 +14018,15 @@
13994
14018
  message
13995
14019
  ].concat(_to_consumable_array(rest)));
13996
14020
  }
13997
- var resolvedContext = typeof context === 'function' ? context() : context;
13998
- var serializedContext;
13999
- try {
14000
- serializedContext = JSON.stringify(resolvedContext);
14001
- } catch (unused) {
14002
- var _chatInstance3;
14003
- return (_chatInstance3 = _chatInstance).sendMessage.apply(_chatInstance3, [
14004
- message
14005
- ].concat(_to_consumable_array(rest)));
14006
- }
14007
- var contextTextPart = {
14008
- type: 'text',
14009
- text: '<context>'.concat(serializedContext).concat('</context>')
14010
- };
14011
- if ('parts' in message && message.parts) {
14012
- var _chatInstance4;
14013
- return (_chatInstance4 = _chatInstance).sendMessage.apply(_chatInstance4, [
14014
- _object_spread_props(_object_spread({}, message), {
14015
- parts: [
14016
- contextTextPart
14017
- ].concat(_to_consumable_array(message.parts)),
14018
- text: undefined,
14019
- files: undefined
14020
- })
14021
- ].concat(_to_consumable_array(rest)));
14022
- }
14023
- var textContent = 'text' in message && message.text ? message.text : '';
14021
+ // Resolve once per send; let the server validate the payload and
14022
+ // surface any contract violations.
14023
+ var turnContext = typeof context === 'function' ? context() : context;
14024
14024
  return (_chatInstance1 = _chatInstance).sendMessage.apply(_chatInstance1, [
14025
- {
14026
- parts: [
14027
- contextTextPart,
14028
- {
14029
- type: 'text',
14030
- text: textContent
14031
- }
14032
- ],
14033
- metadata: message.metadata,
14034
- messageId: message.messageId,
14035
- files: undefined,
14036
- text: undefined
14037
- }
14025
+ _object_spread_props(_object_spread({}, message), {
14026
+ metadata: _object_spread_props(_object_spread({}, message.metadata), {
14027
+ turnContext: turnContext
14028
+ })
14029
+ })
14038
14030
  ].concat(_to_consumable_array(rest)));
14039
14031
  };
14040
14032
  return {
@@ -14086,6 +14078,77 @@
14086
14078
  return useConnector(connectChat, props, additionalWidgetProperties);
14087
14079
  }
14088
14080
 
14081
+ var withUsage$n = createDocumentationMessageGenerator({
14082
+ name: 'chatTrigger',
14083
+ connector: true
14084
+ });
14085
+ // Reads the sibling chat widget's render state from the live cross-index
14086
+ // `instantSearchInstance.renderState` map. We resolve at call time so that
14087
+ // `toggleOpen` always sees the latest `open`/`setOpen` values.
14088
+ function getChatRenderState(options) {
14089
+ var _options_parent, _options_instantSearchInstance_renderState_indexId;
14090
+ var indexId = (_options_parent = options.parent) === null || _options_parent === void 0 ? void 0 : _options_parent.getIndexId();
14091
+ if (!indexId) return undefined;
14092
+ return (_options_instantSearchInstance_renderState_indexId = options.instantSearchInstance.renderState[indexId]) === null || _options_instantSearchInstance_renderState_indexId === void 0 ? void 0 : _options_instantSearchInstance_renderState_indexId.chat;
14093
+ }
14094
+ var connectChatTrigger = function connectChatTrigger(renderFn) {
14095
+ var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
14096
+ checkRendering(renderFn, withUsage$n());
14097
+ return function(widgetParams) {
14098
+ var params = widgetParams !== null && widgetParams !== void 0 ? widgetParams : {};
14099
+ var lastOptions = null;
14100
+ function toggleOpen() {
14101
+ if (!lastOptions) return;
14102
+ var chatState = getChatRenderState(lastOptions);
14103
+ if (!chatState) return;
14104
+ if (chatState.open) {
14105
+ var _chatState_setOpen;
14106
+ (_chatState_setOpen = chatState.setOpen) === null || _chatState_setOpen === void 0 ? void 0 : _chatState_setOpen.call(chatState, false);
14107
+ } else {
14108
+ openChat(chatState);
14109
+ }
14110
+ }
14111
+ return {
14112
+ $$type: 'ais.chatTrigger',
14113
+ opensChat: true,
14114
+ init: function init(initOptions) {
14115
+ lastOptions = initOptions;
14116
+ renderFn(_object_spread_props(_object_spread({}, this.getWidgetRenderState(initOptions)), {
14117
+ instantSearchInstance: initOptions.instantSearchInstance
14118
+ }), true);
14119
+ },
14120
+ render: function render(renderOptions) {
14121
+ lastOptions = renderOptions;
14122
+ renderFn(_object_spread_props(_object_spread({}, this.getWidgetRenderState(renderOptions)), {
14123
+ instantSearchInstance: renderOptions.instantSearchInstance
14124
+ }), false);
14125
+ },
14126
+ dispose: function dispose() {
14127
+ unmountFn();
14128
+ },
14129
+ getWidgetRenderState: function getWidgetRenderState(renderOptions) {
14130
+ var _ref;
14131
+ var chatState = getChatRenderState(renderOptions);
14132
+ return {
14133
+ open: (_ref = chatState === null || chatState === void 0 ? void 0 : chatState.open) !== null && _ref !== void 0 ? _ref : false,
14134
+ toggleOpen: toggleOpen,
14135
+ widgetParams: params
14136
+ };
14137
+ },
14138
+ getRenderState: function getRenderState(renderState, renderOptions) {
14139
+ return _object_spread_props(_object_spread({}, renderState), {
14140
+ chatTrigger: this.getWidgetRenderState(renderOptions)
14141
+ });
14142
+ }
14143
+ };
14144
+ };
14145
+ };
14146
+
14147
+ function useChatTrigger() {
14148
+ var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, additionalWidgetProperties = arguments.length > 1 ? arguments[1] : void 0;
14149
+ return useConnector(connectChatTrigger, props, additionalWidgetProperties);
14150
+ }
14151
+
14089
14152
  var withUsage$m = createDocumentationMessageGenerator({
14090
14153
  name: 'clear-refinements',
14091
14154
  connector: true
@@ -17442,7 +17505,7 @@
17442
17505
  var unmountFn = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : noop;
17443
17506
  checkRendering(renderFn, withUsage$2());
17444
17507
  return function(widgetParams) {
17445
- var _ref = widgetParams || {}, facetName = _ref.facetName, limit = _ref.limit, threshold = _ref.threshold, fallbackParameters = _ref.fallbackParameters, queryParameters = _ref.queryParameters, _ref_escapeHTML = _ref.escapeHTML, escapeHTML = _ref_escapeHTML === void 0 ? true : _ref_escapeHTML, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(items) {
17508
+ var _ref = widgetParams || {}, facetName = _ref.facetName, limit = _ref.limit, threshold = _ref.threshold, fallbackParameters = _ref.fallbackParameters, _ref_escapeHTML = _ref.escapeHTML, escapeHTML = _ref_escapeHTML === void 0 ? true : _ref_escapeHTML, _ref_transformItems = _ref.transformItems, transformItems = _ref_transformItems === void 0 ? function(items) {
17446
17509
  return items;
17447
17510
  } : _ref_transformItems;
17448
17511
  if (!facetName) {
@@ -17510,7 +17573,6 @@
17510
17573
  maxRecommendations: limit,
17511
17574
  threshold: threshold,
17512
17575
  fallbackParameters: fallbackParameters ? _object_spread({}, fallbackParameters, escapeHTML ? TAG_PLACEHOLDER : {}) : undefined,
17513
- queryParameters: _object_spread({}, queryParameters, escapeHTML ? TAG_PLACEHOLDER : {}),
17514
17576
  $$id: this.$$id
17515
17577
  });
17516
17578
  }
@@ -19741,6 +19803,10 @@
19741
19803
  return null;
19742
19804
  }
19743
19805
  if (part.type === 'text') {
19806
+ // Back-compat shim for sessions started before the move from a
19807
+ // `<context>{...}</context>` text part to `metadata.turnContext`.
19808
+ // Safe to remove once existing sessionStorage transcripts have
19809
+ // rolled over (~2 weeks after release).
19744
19810
  if (part.text.startsWith('<context>') && part.text.endsWith('</context>')) {
19745
19811
  return null;
19746
19812
  }
@@ -20159,13 +20225,9 @@
20159
20225
  if (status === 'submitted') return true;
20160
20226
  if (!lastPart) return true;
20161
20227
  if (isPartText(lastPart)) return false;
20162
- if (isPartTool(lastPart)) {
20163
- if (lastPart.state === 'output-available') return false;
20164
- if (lastPart.state === 'input-streaming') {
20165
- var tool = findTool(lastPart.type, tools);
20166
- return !(tool === null || tool === void 0 ? void 0 : tool.streamInput);
20167
- }
20168
- return true;
20228
+ if (isPartTool(lastPart) && lastPart.state === 'input-streaming') {
20229
+ var tool = findTool(lastPart.type, tools);
20230
+ return !(tool === null || tool === void 0 ? void 0 : tool.streamInput);
20169
20231
  }
20170
20232
  return true;
20171
20233
  };
@@ -20173,7 +20235,7 @@
20173
20235
  function createChatOverlayLayoutComponent(param) {
20174
20236
  var createElement = param.createElement;
20175
20237
  return function ChatOverlayLayout(userProps) {
20176
- var open = userProps.open, maximized = userProps.maximized, headerComponent = userProps.headerComponent, messagesComponent = userProps.messagesComponent, promptComponent = userProps.promptComponent, toggleButtonComponent = userProps.toggleButtonComponent, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, className = userProps.className; // Chat state props (destructured to avoid spreading on div)
20238
+ var open = userProps.open, maximized = userProps.maximized, headerComponent = userProps.headerComponent, messagesComponent = userProps.messagesComponent, promptComponent = userProps.promptComponent, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, className = userProps.className; // Chat state props (destructured to avoid spreading on div)
20177
20239
  userProps.messages;
20178
20240
  userProps.status;
20179
20241
  userProps.isClearing;
@@ -20191,7 +20253,6 @@
20191
20253
  "headerComponent",
20192
20254
  "messagesComponent",
20193
20255
  "promptComponent",
20194
- "toggleButtonComponent",
20195
20256
  "classNames",
20196
20257
  "className",
20197
20258
  "messages",
@@ -20210,9 +20271,7 @@
20210
20271
  className: cx('ais-Chat', 'ais-ChatOverlayLayout', maximized && 'ais-ChatOverlayLayout--maximized', classNames.root, className)
20211
20272
  }), /*#__PURE__*/ createElement("div", {
20212
20273
  className: cx('ais-Chat-container', open && 'ais-Chat-container--open', maximized && 'ais-Chat-container--maximized', classNames.container)
20213
- }, headerComponent, messagesComponent, promptComponent), /*#__PURE__*/ createElement("div", {
20214
- className: "ais-Chat-toggleButtonWrapper"
20215
- }, toggleButtonComponent));
20274
+ }, headerComponent, messagesComponent, promptComponent));
20216
20275
  };
20217
20276
  }
20218
20277
 
@@ -20401,42 +20460,8 @@
20401
20460
  };
20402
20461
  }
20403
20462
 
20404
- function createChatToggleButtonComponent(param) {
20405
- var createElement = param.createElement;
20406
- var Button = createButtonComponent({
20407
- createElement: createElement
20408
- });
20409
- return function ChatToggleButton(userProps) {
20410
- var open = userProps.open, onClick = userProps.onClick, ToggleIcon = userProps.toggleIconComponent, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, className = userProps.className, props = _object_without_properties(userProps, [
20411
- "open",
20412
- "onClick",
20413
- "toggleIconComponent",
20414
- "classNames",
20415
- "className"
20416
- ]);
20417
- var defaultIcon = open ? /*#__PURE__*/ createElement(ChevronUpIcon, {
20418
- createElement: createElement
20419
- }) : /*#__PURE__*/ createElement(SparklesIcon, {
20420
- createElement: createElement
20421
- });
20422
- return /*#__PURE__*/ createElement(Button, _object_spread({
20423
- variant: "primary",
20424
- size: "md",
20425
- iconOnly: true,
20426
- className: cx('ais-ChatToggleButton', open && 'ais-ChatToggleButton--open', classNames.root, className),
20427
- onClick: onClick
20428
- }, props), ToggleIcon ? /*#__PURE__*/ createElement(ToggleIcon, {
20429
- isOpen: open
20430
- }) : defaultIcon);
20431
- };
20432
- }
20433
-
20434
20463
  function createChatComponent(param) {
20435
20464
  var createElement = param.createElement, Fragment = param.Fragment;
20436
- var ChatToggleButton = createChatToggleButtonComponent({
20437
- createElement: createElement,
20438
- Fragment: Fragment
20439
- });
20440
20465
  var ChatHeader = createChatHeaderComponent({
20441
20466
  createElement: createElement,
20442
20467
  Fragment: Fragment
@@ -20458,17 +20483,15 @@
20458
20483
  Fragment: Fragment
20459
20484
  });
20460
20485
  return function Chat(userProps) {
20461
- var open = userProps.open, _userProps_maximized = userProps.maximized, maximized = _userProps_maximized === void 0 ? false : _userProps_maximized, headerProps = userProps.headerProps, toggleButtonProps = userProps.toggleButtonProps, messagesProps = userProps.messagesProps, suggestionsProps = userProps.suggestionsProps, _userProps_promptProps = userProps.promptProps, promptProps = _userProps_promptProps === void 0 ? {} : _userProps_promptProps, HeaderComponent = userProps.headerComponent, PromptComponent = userProps.promptComponent, ToggleButtonComponent = userProps.toggleButtonComponent, SuggestionsComponent = userProps.suggestionsComponent, tmp = userProps.layoutComponent, LayoutComponent = tmp === void 0 ? OverlayLayout : tmp, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, className = userProps.className, sendMessage = userProps.sendMessage, regenerate = userProps.regenerate, stop = userProps.stop, error = userProps.error, props = _object_without_properties(userProps, [
20486
+ var open = userProps.open, _userProps_maximized = userProps.maximized, maximized = _userProps_maximized === void 0 ? false : _userProps_maximized, headerProps = userProps.headerProps, messagesProps = userProps.messagesProps, suggestionsProps = userProps.suggestionsProps, _userProps_promptProps = userProps.promptProps, promptProps = _userProps_promptProps === void 0 ? {} : _userProps_promptProps, HeaderComponent = userProps.headerComponent, PromptComponent = userProps.promptComponent, SuggestionsComponent = userProps.suggestionsComponent, tmp = userProps.layoutComponent, LayoutComponent = tmp === void 0 ? OverlayLayout : tmp, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, className = userProps.className, sendMessage = userProps.sendMessage, regenerate = userProps.regenerate, stop = userProps.stop, error = userProps.error, props = _object_without_properties(userProps, [
20462
20487
  "open",
20463
20488
  "maximized",
20464
20489
  "headerProps",
20465
- "toggleButtonProps",
20466
20490
  "messagesProps",
20467
20491
  "suggestionsProps",
20468
20492
  "promptProps",
20469
20493
  "headerComponent",
20470
20494
  "promptComponent",
20471
- "toggleButtonComponent",
20472
20495
  "suggestionsComponent",
20473
20496
  "layoutComponent",
20474
20497
  "classNames",
@@ -20492,24 +20515,12 @@
20492
20515
  var promptComponent = createElement(PromptComponent || ChatPrompt, _object_spread_props(_object_spread({}, promptProps), {
20493
20516
  classNames: classNames.prompt
20494
20517
  }));
20495
- var toggleButtonComponent = createElement(ToggleButtonComponent || ChatToggleButton, _object_spread_props(_object_spread({}, toggleButtonProps), {
20496
- classNames: classNames.toggleButton,
20497
- onClick: function onClick() {
20498
- var _toggleButtonProps_onClick;
20499
- (_toggleButtonProps_onClick = toggleButtonProps.onClick) === null || _toggleButtonProps_onClick === void 0 ? void 0 : _toggleButtonProps_onClick.call(toggleButtonProps);
20500
- if (!open) {
20501
- var _promptProps_promptRef_current, _promptProps_promptRef;
20502
- (_promptProps_promptRef = promptProps.promptRef) === null || _promptProps_promptRef === void 0 ? void 0 : (_promptProps_promptRef_current = _promptProps_promptRef.current) === null || _promptProps_promptRef_current === void 0 ? void 0 : _promptProps_promptRef_current.focus();
20503
- }
20504
- }
20505
- }));
20506
20518
  return /*#__PURE__*/ createElement(LayoutComponent, _object_spread_props(_object_spread({}, props), {
20507
20519
  open: open,
20508
20520
  maximized: maximized,
20509
20521
  headerComponent: headerComponent,
20510
20522
  messagesComponent: messagesComponent,
20511
20523
  promptComponent: promptComponent,
20512
- toggleButtonComponent: toggleButtonComponent,
20513
20524
  classNames: {
20514
20525
  root: classNames.root,
20515
20526
  container: classNames.container
@@ -20535,8 +20546,7 @@
20535
20546
  return function ChatInlineLayout(userProps) {
20536
20547
  var headerComponent = userProps.headerComponent, messagesComponent = userProps.messagesComponent, promptComponent = userProps.promptComponent, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, className = userProps.className;
20537
20548
  userProps.open;
20538
- userProps.maximized;
20539
- userProps.toggleButtonComponent; // Chat state props (destructured to avoid spreading on div)
20549
+ userProps.maximized; // Chat state props (destructured to avoid spreading on div)
20540
20550
  userProps.messages;
20541
20551
  userProps.status;
20542
20552
  userProps.isClearing;
@@ -20556,7 +20566,6 @@
20556
20566
  "className",
20557
20567
  "open",
20558
20568
  "maximized",
20559
- "toggleButtonComponent",
20560
20569
  "messages",
20561
20570
  "status",
20562
20571
  "isClearing",
@@ -20581,7 +20590,7 @@
20581
20590
  var createElement = param.createElement;
20582
20591
  var originalMargins = new WeakMap();
20583
20592
  return function ChatSidePanelLayout(userProps) {
20584
- var open = userProps.open, maximized = userProps.maximized, headerComponent = userProps.headerComponent, messagesComponent = userProps.messagesComponent, promptComponent = userProps.promptComponent, toggleButtonComponent = userProps.toggleButtonComponent, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, className = userProps.className, parentElement = userProps.parentElement; // Chat state props (destructured to avoid spreading on div)
20593
+ var open = userProps.open, maximized = userProps.maximized, headerComponent = userProps.headerComponent, messagesComponent = userProps.messagesComponent, promptComponent = userProps.promptComponent, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, className = userProps.className, parentElement = userProps.parentElement; // Chat state props (destructured to avoid spreading on div)
20585
20594
  userProps.messages;
20586
20595
  userProps.status;
20587
20596
  userProps.isClearing;
@@ -20599,7 +20608,6 @@
20599
20608
  "headerComponent",
20600
20609
  "messagesComponent",
20601
20610
  "promptComponent",
20602
- "toggleButtonComponent",
20603
20611
  "classNames",
20604
20612
  "className",
20605
20613
  "parentElement",
@@ -20636,9 +20644,7 @@
20636
20644
  className: cx('ais-Chat', 'ais-ChatSidePanelLayout', maximized && 'ais-ChatSidePanelLayout--maximized', classNames.root, className)
20637
20645
  }), /*#__PURE__*/ createElement("div", {
20638
20646
  className: cx('ais-Chat-container', open && 'ais-Chat-container--open', maximized && 'ais-Chat-container--maximized', classNames.container)
20639
- }, headerComponent, messagesComponent, promptComponent), /*#__PURE__*/ createElement("div", {
20640
- className: "ais-Chat-toggleButtonWrapper"
20641
- }, toggleButtonComponent));
20647
+ }, headerComponent, messagesComponent, promptComponent));
20642
20648
  };
20643
20649
  }
20644
20650
 
@@ -20678,6 +20684,36 @@
20678
20684
  };
20679
20685
  }
20680
20686
 
20687
+ function createChatToggleButtonComponent(param) {
20688
+ var createElement = param.createElement;
20689
+ var Button = createButtonComponent({
20690
+ createElement: createElement
20691
+ });
20692
+ return function ChatToggleButton(userProps) {
20693
+ var open = userProps.open, onClick = userProps.onClick, ToggleIcon = userProps.toggleIconComponent, _userProps_classNames = userProps.classNames, classNames = _userProps_classNames === void 0 ? {} : _userProps_classNames, className = userProps.className, props = _object_without_properties(userProps, [
20694
+ "open",
20695
+ "onClick",
20696
+ "toggleIconComponent",
20697
+ "classNames",
20698
+ "className"
20699
+ ]);
20700
+ var defaultIcon = open ? /*#__PURE__*/ createElement(ChevronUpIcon, {
20701
+ createElement: createElement
20702
+ }) : /*#__PURE__*/ createElement(SparklesIcon, {
20703
+ createElement: createElement
20704
+ });
20705
+ return /*#__PURE__*/ createElement(Button, _object_spread({
20706
+ variant: "primary",
20707
+ size: "md",
20708
+ iconOnly: true,
20709
+ className: cx('ais-ChatToggleButton', open && 'ais-ChatToggleButton--open', classNames.root, className),
20710
+ onClick: onClick
20711
+ }, props), ToggleIcon ? /*#__PURE__*/ createElement(ToggleIcon, {
20712
+ isOpen: open
20713
+ }) : defaultIcon);
20714
+ };
20715
+ }
20716
+
20681
20717
  var DEFAULT_TRANSLATIONS$1 = {
20682
20718
  streamingLabel: 'Curating results…'
20683
20719
  };
@@ -22033,22 +22069,25 @@
22033
22069
  };
22034
22070
  }
22035
22071
  function EXPERIMENTAL_Autocomplete(_0) {
22036
- var _0_indices = _0.indices, indices = _0_indices === void 0 ? [] : _0_indices, showQuerySuggestions = _0.showQuerySuggestions, showPromptSuggestions = _0.showPromptSuggestions, showRecent = _0.showRecent, userSearchParameters = _0.searchParameters, detachedMediaQuery = _0.detachedMediaQuery, tmp = _0.translations, userTranslations = tmp === void 0 ? {} : tmp, props = _object_without_properties(_0, [
22072
+ var _0_indices = _0.indices, indices = _0_indices === void 0 ? [] : _0_indices, showQuerySuggestions = _0.showQuerySuggestions, showPromptSuggestions = _0.showPromptSuggestions, showRecent = _0.showRecent, userSearchParameters = _0.searchParameters, detachedMediaQuery = _0.detachedMediaQuery, tmp = _0.translations, userTranslations = tmp === void 0 ? {} : tmp, aiMode = _0.aiMode, props = _object_without_properties(_0, [
22037
22073
  "indices",
22038
22074
  "showQuerySuggestions",
22039
22075
  "showPromptSuggestions",
22040
22076
  "showRecent",
22041
22077
  "searchParameters",
22042
22078
  "detachedMediaQuery",
22043
- "translations"
22079
+ "translations",
22080
+ "aiMode"
22044
22081
  ]);
22045
22082
  var _showRecent_classNames, _showRecent_classNames1, _showRecent_classNames2, _showRecent_classNames3;
22046
22083
  var translations = _object_spread({}, DEFAULT_TRANSLATIONS, userTranslations);
22047
22084
  var _useInstantSearch = useInstantSearch(), indexUiState = _useInstantSearch.indexUiState, indexRenderState = _useInstantSearch.indexRenderState, status = _useInstantSearch.status;
22048
- var refine = useSearchBox({}, {
22085
+ var refine = useSearchBox({}, _object_spread({
22049
22086
  $$type: 'ais.autocomplete',
22050
22087
  $$widgetType: 'ais.autocomplete'
22051
- }).refine;
22088
+ }, aiMode ? {
22089
+ opensChat: true
22090
+ } : {})).refine;
22052
22091
  var isSearchStalled = status === 'stalled';
22053
22092
  var searchParameters = _object_spread({
22054
22093
  hitsPerPage: 5
@@ -22137,6 +22176,7 @@
22137
22176
  indexName: index.indexName
22138
22177
  }, /*#__PURE__*/ React.createElement(Configure, index.searchParameters));
22139
22178
  }), /*#__PURE__*/ React.createElement(InnerAutocomplete, _object_spread_props(_object_spread({}, props), {
22179
+ aiMode: aiMode,
22140
22180
  indicesConfig: indicesConfig,
22141
22181
  refineSearchBox: refine,
22142
22182
  isSearchStalled: isSearchStalled,
@@ -22611,6 +22651,9 @@
22611
22651
  createElement: React.createElement,
22612
22652
  Fragment: React.Fragment
22613
22653
  });
22654
+ // Marker used by `<Chat>` to auto-exempt inline layouts from the entry-point
22655
+ // validation, since inline chats are always visible (no trigger needed).
22656
+ ChatInlineLayout.$$inlineLayout = true;
22614
22657
 
22615
22658
  var ChatSidePanelLayout = createChatSidePanelLayoutComponent({
22616
22659
  createElement: React.createElement,
@@ -22780,16 +22823,13 @@
22780
22823
  var _ref = [
22781
22824
  _0,
22782
22825
  _1
22783
- ], _ref1 = _to_array(_ref), _ref2 = _ref1[0], _rest = _ref1.slice(1), userTools = _ref2.tools, toggleButtonProps = _ref2.toggleButtonProps, headerProps = _ref2.headerProps, messagesProps = _ref2.messagesProps, promptProps = _ref2.promptProps, itemComponent = _ref2.itemComponent, layoutComponent = _ref2.layoutComponent, toggleButtonComponent = _ref2.toggleButtonComponent, toggleButtonIconComponent = _ref2.toggleButtonIconComponent, headerComponent = _ref2.headerComponent, headerTitleIconComponent = _ref2.headerTitleIconComponent, headerCloseIconComponent = _ref2.headerCloseIconComponent, headerMinimizeIconComponent = _ref2.headerMinimizeIconComponent, headerMaximizeIconComponent = _ref2.headerMaximizeIconComponent, loaderComponent = _ref2.loaderComponent, messagesErrorComponent = _ref2.messagesErrorComponent, promptComponent = _ref2.promptComponent, promptHeaderComponent = _ref2.promptHeaderComponent, promptFooterComponent = _ref2.promptFooterComponent, assistantMessageLeadingComponent = _ref2.assistantMessageLeadingComponent, assistantMessageFooterComponent = _ref2.assistantMessageFooterComponent, userMessageLeadingComponent = _ref2.userMessageLeadingComponent, userMessageFooterComponent = _ref2.userMessageFooterComponent, emptyComponent = _ref2.emptyComponent, actionsComponent = _ref2.actionsComponent, suggestionsComponent = _ref2.suggestionsComponent, classNames = _ref2.classNames, _ref_translations = _ref2.translations, translations = _ref_translations === void 0 ? {} : _ref_translations, title = _ref2.title, getSearchPageURL = _ref2.getSearchPageURL, props = _object_without_properties(_ref2, [
22826
+ ], _ref1 = _to_array(_ref), _ref2 = _ref1[0], _rest = _ref1.slice(1), userTools = _ref2.tools, headerProps = _ref2.headerProps, messagesProps = _ref2.messagesProps, promptProps = _ref2.promptProps, itemComponent = _ref2.itemComponent, layoutComponent = _ref2.layoutComponent, headerComponent = _ref2.headerComponent, headerTitleIconComponent = _ref2.headerTitleIconComponent, headerCloseIconComponent = _ref2.headerCloseIconComponent, headerMinimizeIconComponent = _ref2.headerMinimizeIconComponent, headerMaximizeIconComponent = _ref2.headerMaximizeIconComponent, loaderComponent = _ref2.loaderComponent, messagesErrorComponent = _ref2.messagesErrorComponent, promptComponent = _ref2.promptComponent, promptHeaderComponent = _ref2.promptHeaderComponent, promptFooterComponent = _ref2.promptFooterComponent, assistantMessageLeadingComponent = _ref2.assistantMessageLeadingComponent, assistantMessageFooterComponent = _ref2.assistantMessageFooterComponent, userMessageLeadingComponent = _ref2.userMessageLeadingComponent, userMessageFooterComponent = _ref2.userMessageFooterComponent, emptyComponent = _ref2.emptyComponent, actionsComponent = _ref2.actionsComponent, suggestionsComponent = _ref2.suggestionsComponent, classNames = _ref2.classNames, _ref_translations = _ref2.translations, translations = _ref_translations === void 0 ? {} : _ref_translations, title = _ref2.title, getSearchPageURL = _ref2.getSearchPageURL, _ref_disableTriggerValidation = _ref2.disableTriggerValidation, disableTriggerValidation = _ref_disableTriggerValidation === void 0 ? false : _ref_disableTriggerValidation, props = _object_without_properties(_ref2, [
22784
22827
  "tools",
22785
- "toggleButtonProps",
22786
22828
  "headerProps",
22787
22829
  "messagesProps",
22788
22830
  "promptProps",
22789
22831
  "itemComponent",
22790
22832
  "layoutComponent",
22791
- "toggleButtonComponent",
22792
- "toggleButtonIconComponent",
22793
22833
  "headerComponent",
22794
22834
  "headerTitleIconComponent",
22795
22835
  "headerCloseIconComponent",
@@ -22810,7 +22850,8 @@
22810
22850
  "classNames",
22811
22851
  "translations",
22812
22852
  "title",
22813
- "getSearchPageURL"
22853
+ "getSearchPageURL",
22854
+ "disableTriggerValidation"
22814
22855
  ]), _rest1 = _sliced_to_array(_rest, 1), ref = _rest1[0];
22815
22856
  var promptTranslations = translations.prompt, headerTranslations = translations.header, messageTranslations = translations.message, messagesTranslations = translations.messages;
22816
22857
  var _useInstantSearch = useInstantSearch(), indexUiState = _useInstantSearch.indexUiState, setIndexUiState = _useInstantSearch.setIndexUiState;
@@ -22828,8 +22869,14 @@
22828
22869
  itemComponent,
22829
22870
  userTools
22830
22871
  ]);
22872
+ // Inline layouts are always visible, so they don't require a `<ChatTrigger />`
22873
+ // (or AI mode) to be present. We detect this via a `$$inlineLayout` marker
22874
+ // set on the layout component, which is consistent across flavors.
22875
+ var isInlineLayoutComponent = typeof layoutComponent === 'function' && layoutComponent.$$inlineLayout === true;
22876
+ var effectiveDisableTriggerValidation = disableTriggerValidation || isInlineLayoutComponent;
22831
22877
  var chatState = useChat(_object_spread_props(_object_spread({}, props), {
22832
- tools: tools
22878
+ tools: tools,
22879
+ disableTriggerValidation: effectiveDisableTriggerValidation
22833
22880
  }));
22834
22881
  var messages = chatState.messages, sendMessage = chatState.sendMessage, status = chatState.status, regenerate = chatState.regenerate, stop = chatState.stop, error = chatState.error, input = chatState.input, setInput = chatState.setInput, open = chatState.open, setOpen = chatState.setOpen, isClearing = chatState.isClearing, clearMessages = chatState.clearMessages, onClearTransitionEnd = chatState.onClearTransitionEnd, toolsFromConnector = chatState.tools, suggestions = chatState.suggestions, onFeedback = chatState.sendChatMessageFeedback, feedbackState = chatState.feedbackState;
22835
22882
  React.useImperativeHandle(ref, function() {
@@ -22868,15 +22915,7 @@
22868
22915
  layoutComponent: layoutComponent,
22869
22916
  headerComponent: headerComponent,
22870
22917
  promptComponent: promptComponent,
22871
- toggleButtonComponent: toggleButtonComponent,
22872
22918
  suggestionsComponent: suggestionsComponent,
22873
- toggleButtonProps: _object_spread({
22874
- open: open,
22875
- onClick: function onClick() {
22876
- return setOpen(!open);
22877
- },
22878
- toggleIconComponent: toggleButtonIconComponent
22879
- }, toggleButtonProps),
22880
22919
  headerProps: _object_spread({
22881
22920
  onClose: function onClose() {
22882
22921
  return setOpen(false);
@@ -22965,6 +23004,38 @@
22965
23004
  }
22966
23005
  var Chat = /*#__PURE__*/ React.forwardRef(ChatInner);
22967
23006
 
23007
+ var ChatToggleButton = createChatToggleButtonComponent({
23008
+ createElement: React.createElement,
23009
+ Fragment: React.Fragment
23010
+ });
23011
+ function ChatTrigger(_0) {
23012
+ var classNames = _0.classNames, toggleIconComponent = _0.toggleIconComponent, onClick = _0.onClick, _0_floating = _0.floating, floating = _0_floating === void 0 ? true : _0_floating, props = _object_without_properties(_0, [
23013
+ "classNames",
23014
+ "toggleIconComponent",
23015
+ "onClick",
23016
+ "floating"
23017
+ ]);
23018
+ var _useChatTrigger = useChatTrigger({}, {
23019
+ $$widgetType: 'ais.chatTrigger'
23020
+ }), open = _useChatTrigger.open, toggleOpen = _useChatTrigger.toggleOpen;
23021
+ var handleClick = function handleClick() {
23022
+ toggleOpen();
23023
+ onClick === null || onClick === void 0 ? void 0 : onClick();
23024
+ };
23025
+ var rootClassName = [
23026
+ floating && 'ais-ChatToggleButton--floating',
23027
+ classNames === null || classNames === void 0 ? void 0 : classNames.root
23028
+ ].filter(Boolean).flat();
23029
+ return /*#__PURE__*/ React.createElement(ChatToggleButton, _object_spread({
23030
+ open: open,
23031
+ onClick: handleClick,
23032
+ classNames: _object_spread_props(_object_spread({}, classNames), {
23033
+ root: rootClassName
23034
+ }),
23035
+ toggleIconComponent: toggleIconComponent
23036
+ }, props));
23037
+ }
23038
+
22968
23039
  function ClearRefinements$1(_0) {
22969
23040
  var _0_classNames = _0.classNames, classNames = _0_classNames === void 0 ? {} : _0_classNames, _0_disabled = _0.disabled, disabled = _0_disabled === void 0 ? false : _0_disabled, _0_onClick = _0.onClick, onClick = _0_onClick === void 0 ? function() {} : _0_onClick, translations = _0.translations, props = _object_without_properties(_0, [
22970
23041
  "classNames",
@@ -24327,9 +24398,11 @@
24327
24398
  ]);
24328
24399
  var _useSearchBox = useSearchBox({
24329
24400
  queryHook: queryHook
24330
- }, {
24401
+ }, _object_spread({
24331
24402
  $$widgetType: 'ais.searchBox'
24332
- }), query = _useSearchBox.query, refine = _useSearchBox.refine, isSearchStalled = _useSearchBox.isSearchStalled;
24403
+ }, aiMode ? {
24404
+ opensChat: true
24405
+ } : {})), query = _useSearchBox.query, refine = _useSearchBox.refine, isSearchStalled = _useSearchBox.isSearchStalled;
24333
24406
  var indexRenderState = useInstantSearch().indexRenderState;
24334
24407
  var _useState = _sliced_to_array(React.useState(query), 2), inputValue = _useState[0], setInputValue = _useState[1];
24335
24408
  var inputRef = React.useRef(null);
@@ -24659,12 +24732,11 @@
24659
24732
  Fragment: React.Fragment
24660
24733
  });
24661
24734
  function TrendingFacets(_0) {
24662
- var facetName = _0.facetName, limit = _0.limit, threshold = _0.threshold, fallbackParameters = _0.fallbackParameters, queryParameters = _0.queryParameters, escapeHTML = _0.escapeHTML, transformItems = _0.transformItems, itemComponent = _0.itemComponent, headerComponent = _0.headerComponent, emptyComponent = _0.emptyComponent, props = _object_without_properties(_0, [
24735
+ var facetName = _0.facetName, limit = _0.limit, threshold = _0.threshold, fallbackParameters = _0.fallbackParameters, escapeHTML = _0.escapeHTML, transformItems = _0.transformItems, itemComponent = _0.itemComponent, headerComponent = _0.headerComponent, emptyComponent = _0.emptyComponent, props = _object_without_properties(_0, [
24663
24736
  "facetName",
24664
24737
  "limit",
24665
24738
  "threshold",
24666
24739
  "fallbackParameters",
24667
- "queryParameters",
24668
24740
  "escapeHTML",
24669
24741
  "transformItems",
24670
24742
  "itemComponent",
@@ -24677,7 +24749,6 @@
24677
24749
  limit: limit,
24678
24750
  threshold: threshold,
24679
24751
  fallbackParameters: fallbackParameters,
24680
- queryParameters: queryParameters,
24681
24752
  escapeHTML: escapeHTML,
24682
24753
  transformItems: transformItems
24683
24754
  }, {
@@ -24743,6 +24814,7 @@
24743
24814
  exports.ChatMessageLoader = ChatMessageLoader;
24744
24815
  exports.ChatOverlayLayout = ChatOverlayLayout;
24745
24816
  exports.ChatSidePanelLayout = ChatSidePanelLayout;
24817
+ exports.ChatTrigger = ChatTrigger;
24746
24818
  exports.ClearRefinements = ClearRefinements;
24747
24819
  exports.Configure = Configure;
24748
24820
  exports.CurrentRefinements = CurrentRefinements;
@@ -24788,6 +24860,7 @@
24788
24860
  exports.useAutocomplete = useAutocomplete;
24789
24861
  exports.useBreadcrumb = useBreadcrumb;
24790
24862
  exports.useChat = useChat;
24863
+ exports.useChatTrigger = useChatTrigger;
24791
24864
  exports.useClearRefinements = useClearRefinements;
24792
24865
  exports.useConfigure = useConfigure;
24793
24866
  exports.useConnector = useConnector;