react-instantsearch 7.33.1 → 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.1 | © 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.1';
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.99.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);
@@ -14054,6 +14078,77 @@
14054
14078
  return useConnector(connectChat, props, additionalWidgetProperties);
14055
14079
  }
14056
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
+
14057
14152
  var withUsage$m = createDocumentationMessageGenerator({
14058
14153
  name: 'clear-refinements',
14059
14154
  connector: true
@@ -20130,13 +20225,9 @@
20130
20225
  if (status === 'submitted') return true;
20131
20226
  if (!lastPart) return true;
20132
20227
  if (isPartText(lastPart)) return false;
20133
- if (isPartTool(lastPart)) {
20134
- if (lastPart.state === 'output-available') return false;
20135
- if (lastPart.state === 'input-streaming') {
20136
- var tool = findTool(lastPart.type, tools);
20137
- return !(tool === null || tool === void 0 ? void 0 : tool.streamInput);
20138
- }
20139
- 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);
20140
20231
  }
20141
20232
  return true;
20142
20233
  };
@@ -20144,7 +20235,7 @@
20144
20235
  function createChatOverlayLayoutComponent(param) {
20145
20236
  var createElement = param.createElement;
20146
20237
  return function ChatOverlayLayout(userProps) {
20147
- 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)
20148
20239
  userProps.messages;
20149
20240
  userProps.status;
20150
20241
  userProps.isClearing;
@@ -20162,7 +20253,6 @@
20162
20253
  "headerComponent",
20163
20254
  "messagesComponent",
20164
20255
  "promptComponent",
20165
- "toggleButtonComponent",
20166
20256
  "classNames",
20167
20257
  "className",
20168
20258
  "messages",
@@ -20181,9 +20271,7 @@
20181
20271
  className: cx('ais-Chat', 'ais-ChatOverlayLayout', maximized && 'ais-ChatOverlayLayout--maximized', classNames.root, className)
20182
20272
  }), /*#__PURE__*/ createElement("div", {
20183
20273
  className: cx('ais-Chat-container', open && 'ais-Chat-container--open', maximized && 'ais-Chat-container--maximized', classNames.container)
20184
- }, headerComponent, messagesComponent, promptComponent), /*#__PURE__*/ createElement("div", {
20185
- className: "ais-Chat-toggleButtonWrapper"
20186
- }, toggleButtonComponent));
20274
+ }, headerComponent, messagesComponent, promptComponent));
20187
20275
  };
20188
20276
  }
20189
20277
 
@@ -20372,42 +20460,8 @@
20372
20460
  };
20373
20461
  }
20374
20462
 
20375
- function createChatToggleButtonComponent(param) {
20376
- var createElement = param.createElement;
20377
- var Button = createButtonComponent({
20378
- createElement: createElement
20379
- });
20380
- return function ChatToggleButton(userProps) {
20381
- 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, [
20382
- "open",
20383
- "onClick",
20384
- "toggleIconComponent",
20385
- "classNames",
20386
- "className"
20387
- ]);
20388
- var defaultIcon = open ? /*#__PURE__*/ createElement(ChevronUpIcon, {
20389
- createElement: createElement
20390
- }) : /*#__PURE__*/ createElement(SparklesIcon, {
20391
- createElement: createElement
20392
- });
20393
- return /*#__PURE__*/ createElement(Button, _object_spread({
20394
- variant: "primary",
20395
- size: "md",
20396
- iconOnly: true,
20397
- className: cx('ais-ChatToggleButton', open && 'ais-ChatToggleButton--open', classNames.root, className),
20398
- onClick: onClick
20399
- }, props), ToggleIcon ? /*#__PURE__*/ createElement(ToggleIcon, {
20400
- isOpen: open
20401
- }) : defaultIcon);
20402
- };
20403
- }
20404
-
20405
20463
  function createChatComponent(param) {
20406
20464
  var createElement = param.createElement, Fragment = param.Fragment;
20407
- var ChatToggleButton = createChatToggleButtonComponent({
20408
- createElement: createElement,
20409
- Fragment: Fragment
20410
- });
20411
20465
  var ChatHeader = createChatHeaderComponent({
20412
20466
  createElement: createElement,
20413
20467
  Fragment: Fragment
@@ -20429,17 +20483,15 @@
20429
20483
  Fragment: Fragment
20430
20484
  });
20431
20485
  return function Chat(userProps) {
20432
- 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, [
20433
20487
  "open",
20434
20488
  "maximized",
20435
20489
  "headerProps",
20436
- "toggleButtonProps",
20437
20490
  "messagesProps",
20438
20491
  "suggestionsProps",
20439
20492
  "promptProps",
20440
20493
  "headerComponent",
20441
20494
  "promptComponent",
20442
- "toggleButtonComponent",
20443
20495
  "suggestionsComponent",
20444
20496
  "layoutComponent",
20445
20497
  "classNames",
@@ -20463,24 +20515,12 @@
20463
20515
  var promptComponent = createElement(PromptComponent || ChatPrompt, _object_spread_props(_object_spread({}, promptProps), {
20464
20516
  classNames: classNames.prompt
20465
20517
  }));
20466
- var toggleButtonComponent = createElement(ToggleButtonComponent || ChatToggleButton, _object_spread_props(_object_spread({}, toggleButtonProps), {
20467
- classNames: classNames.toggleButton,
20468
- onClick: function onClick() {
20469
- var _toggleButtonProps_onClick;
20470
- (_toggleButtonProps_onClick = toggleButtonProps.onClick) === null || _toggleButtonProps_onClick === void 0 ? void 0 : _toggleButtonProps_onClick.call(toggleButtonProps);
20471
- if (!open) {
20472
- var _promptProps_promptRef_current, _promptProps_promptRef;
20473
- (_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();
20474
- }
20475
- }
20476
- }));
20477
20518
  return /*#__PURE__*/ createElement(LayoutComponent, _object_spread_props(_object_spread({}, props), {
20478
20519
  open: open,
20479
20520
  maximized: maximized,
20480
20521
  headerComponent: headerComponent,
20481
20522
  messagesComponent: messagesComponent,
20482
20523
  promptComponent: promptComponent,
20483
- toggleButtonComponent: toggleButtonComponent,
20484
20524
  classNames: {
20485
20525
  root: classNames.root,
20486
20526
  container: classNames.container
@@ -20506,8 +20546,7 @@
20506
20546
  return function ChatInlineLayout(userProps) {
20507
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;
20508
20548
  userProps.open;
20509
- userProps.maximized;
20510
- userProps.toggleButtonComponent; // Chat state props (destructured to avoid spreading on div)
20549
+ userProps.maximized; // Chat state props (destructured to avoid spreading on div)
20511
20550
  userProps.messages;
20512
20551
  userProps.status;
20513
20552
  userProps.isClearing;
@@ -20527,7 +20566,6 @@
20527
20566
  "className",
20528
20567
  "open",
20529
20568
  "maximized",
20530
- "toggleButtonComponent",
20531
20569
  "messages",
20532
20570
  "status",
20533
20571
  "isClearing",
@@ -20552,7 +20590,7 @@
20552
20590
  var createElement = param.createElement;
20553
20591
  var originalMargins = new WeakMap();
20554
20592
  return function ChatSidePanelLayout(userProps) {
20555
- 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)
20556
20594
  userProps.messages;
20557
20595
  userProps.status;
20558
20596
  userProps.isClearing;
@@ -20570,7 +20608,6 @@
20570
20608
  "headerComponent",
20571
20609
  "messagesComponent",
20572
20610
  "promptComponent",
20573
- "toggleButtonComponent",
20574
20611
  "classNames",
20575
20612
  "className",
20576
20613
  "parentElement",
@@ -20607,9 +20644,7 @@
20607
20644
  className: cx('ais-Chat', 'ais-ChatSidePanelLayout', maximized && 'ais-ChatSidePanelLayout--maximized', classNames.root, className)
20608
20645
  }), /*#__PURE__*/ createElement("div", {
20609
20646
  className: cx('ais-Chat-container', open && 'ais-Chat-container--open', maximized && 'ais-Chat-container--maximized', classNames.container)
20610
- }, headerComponent, messagesComponent, promptComponent), /*#__PURE__*/ createElement("div", {
20611
- className: "ais-Chat-toggleButtonWrapper"
20612
- }, toggleButtonComponent));
20647
+ }, headerComponent, messagesComponent, promptComponent));
20613
20648
  };
20614
20649
  }
20615
20650
 
@@ -20649,6 +20684,36 @@
20649
20684
  };
20650
20685
  }
20651
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
+
20652
20717
  var DEFAULT_TRANSLATIONS$1 = {
20653
20718
  streamingLabel: 'Curating results…'
20654
20719
  };
@@ -22004,22 +22069,25 @@
22004
22069
  };
22005
22070
  }
22006
22071
  function EXPERIMENTAL_Autocomplete(_0) {
22007
- 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, [
22008
22073
  "indices",
22009
22074
  "showQuerySuggestions",
22010
22075
  "showPromptSuggestions",
22011
22076
  "showRecent",
22012
22077
  "searchParameters",
22013
22078
  "detachedMediaQuery",
22014
- "translations"
22079
+ "translations",
22080
+ "aiMode"
22015
22081
  ]);
22016
22082
  var _showRecent_classNames, _showRecent_classNames1, _showRecent_classNames2, _showRecent_classNames3;
22017
22083
  var translations = _object_spread({}, DEFAULT_TRANSLATIONS, userTranslations);
22018
22084
  var _useInstantSearch = useInstantSearch(), indexUiState = _useInstantSearch.indexUiState, indexRenderState = _useInstantSearch.indexRenderState, status = _useInstantSearch.status;
22019
- var refine = useSearchBox({}, {
22085
+ var refine = useSearchBox({}, _object_spread({
22020
22086
  $$type: 'ais.autocomplete',
22021
22087
  $$widgetType: 'ais.autocomplete'
22022
- }).refine;
22088
+ }, aiMode ? {
22089
+ opensChat: true
22090
+ } : {})).refine;
22023
22091
  var isSearchStalled = status === 'stalled';
22024
22092
  var searchParameters = _object_spread({
22025
22093
  hitsPerPage: 5
@@ -22108,6 +22176,7 @@
22108
22176
  indexName: index.indexName
22109
22177
  }, /*#__PURE__*/ React.createElement(Configure, index.searchParameters));
22110
22178
  }), /*#__PURE__*/ React.createElement(InnerAutocomplete, _object_spread_props(_object_spread({}, props), {
22179
+ aiMode: aiMode,
22111
22180
  indicesConfig: indicesConfig,
22112
22181
  refineSearchBox: refine,
22113
22182
  isSearchStalled: isSearchStalled,
@@ -22582,6 +22651,9 @@
22582
22651
  createElement: React.createElement,
22583
22652
  Fragment: React.Fragment
22584
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;
22585
22657
 
22586
22658
  var ChatSidePanelLayout = createChatSidePanelLayoutComponent({
22587
22659
  createElement: React.createElement,
@@ -22751,16 +22823,13 @@
22751
22823
  var _ref = [
22752
22824
  _0,
22753
22825
  _1
22754
- ], _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, [
22755
22827
  "tools",
22756
- "toggleButtonProps",
22757
22828
  "headerProps",
22758
22829
  "messagesProps",
22759
22830
  "promptProps",
22760
22831
  "itemComponent",
22761
22832
  "layoutComponent",
22762
- "toggleButtonComponent",
22763
- "toggleButtonIconComponent",
22764
22833
  "headerComponent",
22765
22834
  "headerTitleIconComponent",
22766
22835
  "headerCloseIconComponent",
@@ -22781,7 +22850,8 @@
22781
22850
  "classNames",
22782
22851
  "translations",
22783
22852
  "title",
22784
- "getSearchPageURL"
22853
+ "getSearchPageURL",
22854
+ "disableTriggerValidation"
22785
22855
  ]), _rest1 = _sliced_to_array(_rest, 1), ref = _rest1[0];
22786
22856
  var promptTranslations = translations.prompt, headerTranslations = translations.header, messageTranslations = translations.message, messagesTranslations = translations.messages;
22787
22857
  var _useInstantSearch = useInstantSearch(), indexUiState = _useInstantSearch.indexUiState, setIndexUiState = _useInstantSearch.setIndexUiState;
@@ -22799,8 +22869,14 @@
22799
22869
  itemComponent,
22800
22870
  userTools
22801
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;
22802
22877
  var chatState = useChat(_object_spread_props(_object_spread({}, props), {
22803
- tools: tools
22878
+ tools: tools,
22879
+ disableTriggerValidation: effectiveDisableTriggerValidation
22804
22880
  }));
22805
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;
22806
22882
  React.useImperativeHandle(ref, function() {
@@ -22839,15 +22915,7 @@
22839
22915
  layoutComponent: layoutComponent,
22840
22916
  headerComponent: headerComponent,
22841
22917
  promptComponent: promptComponent,
22842
- toggleButtonComponent: toggleButtonComponent,
22843
22918
  suggestionsComponent: suggestionsComponent,
22844
- toggleButtonProps: _object_spread({
22845
- open: open,
22846
- onClick: function onClick() {
22847
- return setOpen(!open);
22848
- },
22849
- toggleIconComponent: toggleButtonIconComponent
22850
- }, toggleButtonProps),
22851
22919
  headerProps: _object_spread({
22852
22920
  onClose: function onClose() {
22853
22921
  return setOpen(false);
@@ -22936,6 +23004,38 @@
22936
23004
  }
22937
23005
  var Chat = /*#__PURE__*/ React.forwardRef(ChatInner);
22938
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
+
22939
23039
  function ClearRefinements$1(_0) {
22940
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, [
22941
23041
  "classNames",
@@ -24298,9 +24398,11 @@
24298
24398
  ]);
24299
24399
  var _useSearchBox = useSearchBox({
24300
24400
  queryHook: queryHook
24301
- }, {
24401
+ }, _object_spread({
24302
24402
  $$widgetType: 'ais.searchBox'
24303
- }), query = _useSearchBox.query, refine = _useSearchBox.refine, isSearchStalled = _useSearchBox.isSearchStalled;
24403
+ }, aiMode ? {
24404
+ opensChat: true
24405
+ } : {})), query = _useSearchBox.query, refine = _useSearchBox.refine, isSearchStalled = _useSearchBox.isSearchStalled;
24304
24406
  var indexRenderState = useInstantSearch().indexRenderState;
24305
24407
  var _useState = _sliced_to_array(React.useState(query), 2), inputValue = _useState[0], setInputValue = _useState[1];
24306
24408
  var inputRef = React.useRef(null);
@@ -24712,6 +24814,7 @@
24712
24814
  exports.ChatMessageLoader = ChatMessageLoader;
24713
24815
  exports.ChatOverlayLayout = ChatOverlayLayout;
24714
24816
  exports.ChatSidePanelLayout = ChatSidePanelLayout;
24817
+ exports.ChatTrigger = ChatTrigger;
24715
24818
  exports.ClearRefinements = ClearRefinements;
24716
24819
  exports.Configure = Configure;
24717
24820
  exports.CurrentRefinements = CurrentRefinements;
@@ -24757,6 +24860,7 @@
24757
24860
  exports.useAutocomplete = useAutocomplete;
24758
24861
  exports.useBreadcrumb = useBreadcrumb;
24759
24862
  exports.useChat = useChat;
24863
+ exports.useChatTrigger = useChatTrigger;
24760
24864
  exports.useClearRefinements = useClearRefinements;
24761
24865
  exports.useConfigure = useConfigure;
24762
24866
  exports.useConnector = useConnector;