@burdenoff/website-sdk 2026.829.3 → 2026.829.5

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.
@@ -14,6 +14,289 @@ import { twMerge } from 'tailwind-merge';
14
14
  var __defProp = Object.defineProperty;
15
15
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
16
16
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
17
+
18
+ // src/components/explore-i18n.ts
19
+ var EXPLORE_LOCALES = ["en", "zh", "hi", "es", "ar", "ta"];
20
+ var RTL_LOCALES = /* @__PURE__ */ new Set(["ar"]);
21
+ function isRtlLocale(locale) {
22
+ return RTL_LOCALES.has(locale);
23
+ }
24
+ var EN = {
25
+ badge: "AI answers, grounded in our documentation",
26
+ welcomeTitle: "Ask anything about our products",
27
+ welcomeBody: "Describe what you are trying to do and I will point you at the product, the page and the next step.",
28
+ tryAsking: "Try asking",
29
+ focusProduct: "Focus on a product",
30
+ allProducts: "All products",
31
+ showAll: "All",
32
+ showLess: "Show less",
33
+ sources: "Sources",
34
+ nextYouCouldAsk: "Next you could ask",
35
+ placeholder: "Ask anything about our products\u2026",
36
+ placeholderProduct: "Ask about {product}\u2026",
37
+ send: "Send",
38
+ stop: "Stop",
39
+ newChat: "New chat",
40
+ history: "History",
41
+ clearHistory: "Clear history",
42
+ share: "Share",
43
+ copied: "Copied",
44
+ copying: "Copying\u2026",
45
+ shareUnavailable: "Unavailable",
46
+ disclaimer: "Disclaimer",
47
+ disclaimerShort: "Grounded in our docs \u2014 check anything important.",
48
+ dictate: "Dictate your question",
49
+ stopDictating: "Stop dictating",
50
+ noAnswer: "I couldn't find this in our documentation, so the answer below is not grounded in a source. Try rephrasing, or",
51
+ askHuman: "ask a human",
52
+ prevSuggestion: "Previous suggestion",
53
+ nextSuggestion: "Next suggestion",
54
+ capabilities: [
55
+ "Grounded in our own docs",
56
+ "Compare across the ecosystem",
57
+ "Straight to the right page"
58
+ ],
59
+ prompts: [
60
+ "What does this product actually do?",
61
+ "Which product fits my team?",
62
+ "How do I get started, step by step?",
63
+ "How much does it cost?"
64
+ ]
65
+ };
66
+ var ZH = {
67
+ badge: "\u57FA\u4E8E\u6211\u4EEC\u6587\u6863\u7684 AI \u56DE\u7B54",
68
+ welcomeTitle: "\u5173\u4E8E\u6211\u4EEC\u7684\u4EA7\u54C1\uFF0C\u968F\u4FBF\u95EE",
69
+ welcomeBody: "\u63CF\u8FF0\u4F60\u60F3\u505A\u7684\u4E8B\uFF0C\u6211\u4F1A\u4E3A\u4F60\u6307\u51FA\u5BF9\u5E94\u7684\u4EA7\u54C1\u3001\u9875\u9762\u548C\u4E0B\u4E00\u6B65\u3002",
70
+ tryAsking: "\u8BD5\u7740\u95EE",
71
+ focusProduct: "\u805A\u7126\u67D0\u4E2A\u4EA7\u54C1",
72
+ allProducts: "\u5168\u90E8\u4EA7\u54C1",
73
+ showAll: "\u5168\u90E8",
74
+ showLess: "\u6536\u8D77",
75
+ sources: "\u6765\u6E90",
76
+ nextYouCouldAsk: "\u4F60\u8FD8\u53EF\u4EE5\u95EE",
77
+ placeholder: "\u5173\u4E8E\u6211\u4EEC\u7684\u4EA7\u54C1\uFF0C\u968F\u4FBF\u95EE\u2026",
78
+ placeholderProduct: "\u8BE2\u95EE\u5173\u4E8E {product} \u7684\u95EE\u9898\u2026",
79
+ send: "\u53D1\u9001",
80
+ stop: "\u505C\u6B62",
81
+ newChat: "\u65B0\u5BF9\u8BDD",
82
+ history: "\u5386\u53F2",
83
+ clearHistory: "\u6E05\u9664\u5386\u53F2",
84
+ share: "\u5206\u4EAB",
85
+ copied: "\u5DF2\u590D\u5236",
86
+ copying: "\u590D\u5236\u4E2D\u2026",
87
+ shareUnavailable: "\u4E0D\u53EF\u7528",
88
+ disclaimer: "\u514D\u8D23\u58F0\u660E",
89
+ disclaimerShort: "\u5185\u5BB9\u57FA\u4E8E\u6211\u4EEC\u7684\u6587\u6863\uFF0C\u91CD\u8981\u4FE1\u606F\u8BF7\u81EA\u884C\u6838\u5BF9\u3002",
90
+ dictate: "\u8BED\u97F3\u8F93\u5165",
91
+ stopDictating: "\u505C\u6B62\u8BED\u97F3\u8F93\u5165",
92
+ noAnswer: "\u6211\u5728\u6587\u6863\u4E2D\u6CA1\u6709\u627E\u5230\u76F8\u5173\u5185\u5BB9\uFF0C\u4E0B\u9762\u7684\u56DE\u7B54\u6CA1\u6709\u6765\u6E90\u652F\u6301\u3002\u8BF7\u6362\u4E2A\u8BF4\u6CD5\uFF0C\u6216",
93
+ askHuman: "\u8054\u7CFB\u6211\u4EEC",
94
+ prevSuggestion: "\u4E0A\u4E00\u4E2A\u5EFA\u8BAE",
95
+ nextSuggestion: "\u4E0B\u4E00\u4E2A\u5EFA\u8BAE",
96
+ capabilities: ["\u57FA\u4E8E\u6211\u4EEC\u81EA\u5DF1\u7684\u6587\u6863", "\u8DE8\u4EA7\u54C1\u5BF9\u6BD4", "\u76F4\u8FBE\u6B63\u786E\u7684\u9875\u9762"],
97
+ prompts: [
98
+ "\u8FD9\u4E2A\u4EA7\u54C1\u5230\u5E95\u80FD\u505A\u4EC0\u4E48\uFF1F",
99
+ "\u54EA\u4E2A\u4EA7\u54C1\u9002\u5408\u6211\u7684\u56E2\u961F\uFF1F",
100
+ "\u5982\u4F55\u4E00\u6B65\u6B65\u5F00\u59CB\u4F7F\u7528\uFF1F",
101
+ "\u4EF7\u683C\u662F\u591A\u5C11\uFF1F"
102
+ ]
103
+ };
104
+ var HI = {
105
+ badge: "\u0939\u092E\u093E\u0930\u0947 \u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C\u094B\u0902 \u092A\u0930 \u0906\u0927\u093E\u0930\u093F\u0924 AI \u0909\u0924\u094D\u0924\u0930",
106
+ welcomeTitle: "\u0939\u092E\u093E\u0930\u0947 \u0909\u0924\u094D\u092A\u093E\u0926\u094B\u0902 \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u0915\u0941\u091B \u092D\u0940 \u092A\u0942\u091B\u0947\u0902",
107
+ welcomeBody: "\u092C\u0924\u093E\u0907\u090F \u0906\u092A \u0915\u094D\u092F\u093E \u0915\u0930\u0928\u093E \u091A\u093E\u0939\u0924\u0947 \u0939\u0948\u0902, \u0914\u0930 \u092E\u0948\u0902 \u0906\u092A\u0915\u094B \u0938\u0939\u0940 \u0909\u0924\u094D\u092A\u093E\u0926, \u092A\u0947\u091C \u0914\u0930 \u0905\u0917\u0932\u093E \u0915\u0926\u092E \u092C\u0924\u093E\u090A\u0901\u0917\u093E\u0964",
108
+ tryAsking: "\u092F\u0939 \u092A\u0942\u091B\u0915\u0930 \u0926\u0947\u0916\u0947\u0902",
109
+ focusProduct: "\u0915\u093F\u0938\u0940 \u0909\u0924\u094D\u092A\u093E\u0926 \u092A\u0930 \u0927\u094D\u092F\u093E\u0928 \u0926\u0947\u0902",
110
+ allProducts: "\u0938\u092D\u0940 \u0909\u0924\u094D\u092A\u093E\u0926",
111
+ showAll: "\u0938\u092D\u0940",
112
+ showLess: "\u0915\u092E \u0926\u093F\u0916\u093E\u090F\u0901",
113
+ sources: "\u0938\u094D\u0930\u094B\u0924",
114
+ nextYouCouldAsk: "\u0906\u0917\u0947 \u0906\u092A \u092A\u0942\u091B \u0938\u0915\u0924\u0947 \u0939\u0948\u0902",
115
+ placeholder: "\u0939\u092E\u093E\u0930\u0947 \u0909\u0924\u094D\u092A\u093E\u0926\u094B\u0902 \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u0915\u0941\u091B \u092D\u0940 \u092A\u0942\u091B\u0947\u0902\u2026",
116
+ placeholderProduct: "{product} \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u092A\u0942\u091B\u0947\u0902\u2026",
117
+ send: "\u092D\u0947\u091C\u0947\u0902",
118
+ stop: "\u0930\u094B\u0915\u0947\u0902",
119
+ newChat: "\u0928\u0908 \u092C\u093E\u0924\u091A\u0940\u0924",
120
+ history: "\u0907\u0924\u093F\u0939\u093E\u0938",
121
+ clearHistory: "\u0907\u0924\u093F\u0939\u093E\u0938 \u092E\u093F\u091F\u093E\u090F\u0901",
122
+ share: "\u0938\u093E\u091D\u093E \u0915\u0930\u0947\u0902",
123
+ copied: "\u0915\u0949\u092A\u0940 \u0939\u094B \u0917\u092F\u093E",
124
+ copying: "\u0915\u0949\u092A\u0940 \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026",
125
+ shareUnavailable: "\u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902",
126
+ disclaimer: "\u0905\u0938\u094D\u0935\u0940\u0915\u0930\u0923",
127
+ disclaimerShort: "\u092F\u0939 \u0939\u092E\u093E\u0930\u0947 \u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C\u094B\u0902 \u092A\u0930 \u0906\u0927\u093E\u0930\u093F\u0924 \u0939\u0948 \u2014 \u092E\u0939\u0924\u094D\u0935\u092A\u0942\u0930\u094D\u0923 \u092C\u093E\u0924\u0947\u0902 \u091C\u093C\u0930\u0942\u0930 \u091C\u093E\u0901\u091A \u0932\u0947\u0902\u0964",
128
+ dictate: "\u092C\u094B\u0932\u0915\u0930 \u092A\u0942\u091B\u0947\u0902",
129
+ stopDictating: "\u092C\u094B\u0932\u0928\u093E \u092C\u0902\u0926 \u0915\u0930\u0947\u0902",
130
+ noAnswer: "\u092F\u0939 \u092E\u0941\u091D\u0947 \u0939\u092E\u093E\u0930\u0947 \u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C\u094B\u0902 \u092E\u0947\u0902 \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E, \u0907\u0938\u0932\u093F\u090F \u0928\u0940\u091A\u0947 \u0926\u093F\u092F\u093E \u0909\u0924\u094D\u0924\u0930 \u0915\u093F\u0938\u0940 \u0938\u094D\u0930\u094B\u0924 \u092A\u0930 \u0906\u0927\u093E\u0930\u093F\u0924 \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 \u0926\u0942\u0938\u0930\u0947 \u0936\u092C\u094D\u0926\u094B\u0902 \u092E\u0947\u0902 \u092A\u0942\u091B\u0947\u0902, \u092F\u093E",
131
+ askHuman: "\u0939\u092E\u0938\u0947 \u0938\u0902\u092A\u0930\u094D\u0915 \u0915\u0930\u0947\u0902",
132
+ prevSuggestion: "\u092A\u093F\u091B\u0932\u093E \u0938\u0941\u091D\u093E\u0935",
133
+ nextSuggestion: "\u0905\u0917\u0932\u093E \u0938\u0941\u091D\u093E\u0935",
134
+ capabilities: [
135
+ "\u0939\u092E\u093E\u0930\u0947 \u0905\u092A\u0928\u0947 \u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C\u094B\u0902 \u092A\u0930 \u0906\u0927\u093E\u0930\u093F\u0924",
136
+ "\u0938\u092D\u0940 \u0909\u0924\u094D\u092A\u093E\u0926\u094B\u0902 \u0915\u0940 \u0924\u0941\u0932\u0928\u093E \u0915\u0930\u0947\u0902",
137
+ "\u0938\u0940\u0927\u0947 \u0938\u0939\u0940 \u092A\u0947\u091C \u092A\u0930"
138
+ ],
139
+ prompts: [
140
+ "\u092F\u0939 \u0909\u0924\u094D\u092A\u093E\u0926 \u0905\u0938\u0932 \u092E\u0947\u0902 \u0915\u094D\u092F\u093E \u0915\u0930\u0924\u093E \u0939\u0948?",
141
+ "\u092E\u0947\u0930\u0940 \u091F\u0940\u092E \u0915\u0947 \u0932\u093F\u090F \u0915\u094C\u0928 \u0938\u093E \u0909\u0924\u094D\u092A\u093E\u0926 \u0938\u0939\u0940 \u0939\u0948?",
142
+ "\u0936\u0941\u0930\u0941\u0906\u0924 \u0915\u0948\u0938\u0947 \u0915\u0930\u0947\u0902, \u091A\u0930\u0923 \u0926\u0930 \u091A\u0930\u0923?",
143
+ "\u0907\u0938\u0915\u0940 \u0915\u0940\u092E\u0924 \u0915\u093F\u0924\u0928\u0940 \u0939\u0948?"
144
+ ]
145
+ };
146
+ var ES = {
147
+ badge: "Respuestas de IA basadas en nuestra documentaci\xF3n",
148
+ welcomeTitle: "Pregunta lo que quieras sobre nuestros productos",
149
+ welcomeBody: "Cu\xE9ntame qu\xE9 necesitas hacer y te indicar\xE9 el producto, la p\xE1gina y el siguiente paso.",
150
+ tryAsking: "Prueba a preguntar",
151
+ focusProduct: "Centrarse en un producto",
152
+ allProducts: "Todos los productos",
153
+ showAll: "Todos",
154
+ showLess: "Ver menos",
155
+ sources: "Fuentes",
156
+ nextYouCouldAsk: "Tambi\xE9n puedes preguntar",
157
+ placeholder: "Pregunta lo que quieras sobre nuestros productos\u2026",
158
+ placeholderProduct: "Pregunta sobre {product}\u2026",
159
+ send: "Enviar",
160
+ stop: "Detener",
161
+ newChat: "Nueva conversaci\xF3n",
162
+ history: "Historial",
163
+ clearHistory: "Borrar historial",
164
+ share: "Compartir",
165
+ copied: "Copiado",
166
+ copying: "Copiando\u2026",
167
+ shareUnavailable: "No disponible",
168
+ disclaimer: "Aviso",
169
+ disclaimerShort: "Basado en nuestra documentaci\xF3n: comprueba cualquier dato importante.",
170
+ dictate: "Dictar tu pregunta",
171
+ stopDictating: "Dejar de dictar",
172
+ noAnswer: "No he encontrado esto en nuestra documentaci\xF3n, as\xED que la respuesta de abajo no se apoya en ninguna fuente. Prueba a reformularla, o",
173
+ askHuman: "habla con una persona",
174
+ prevSuggestion: "Sugerencia anterior",
175
+ nextSuggestion: "Sugerencia siguiente",
176
+ capabilities: [
177
+ "Basado en nuestra documentaci\xF3n",
178
+ "Compara todo el ecosistema",
179
+ "Directo a la p\xE1gina correcta"
180
+ ],
181
+ prompts: [
182
+ "\xBFQu\xE9 hace realmente este producto?",
183
+ "\xBFQu\xE9 producto encaja con mi equipo?",
184
+ "\xBFC\xF3mo empiezo, paso a paso?",
185
+ "\xBFCu\xE1nto cuesta?"
186
+ ]
187
+ };
188
+ var AR = {
189
+ badge: "\u0625\u062C\u0627\u0628\u0627\u062A \u0630\u0643\u0627\u0621 \u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0645\u0628\u0646\u064A\u0629 \u0639\u0644\u0649 \u0648\u062B\u0627\u0626\u0642\u0646\u0627",
190
+ welcomeTitle: "\u0627\u0633\u0623\u0644 \u0623\u064A \u0634\u064A\u0621 \u0639\u0646 \u0645\u0646\u062A\u062C\u0627\u062A\u0646\u0627",
191
+ welcomeBody: "\u0635\u0650\u0641 \u0645\u0627 \u062A\u0631\u064A\u062F \u0625\u0646\u062C\u0627\u0632\u0647 \u0648\u0633\u0623\u062F\u0644\u0651\u0643 \u0639\u0644\u0649 \u0627\u0644\u0645\u0646\u062A\u062C \u0648\u0627\u0644\u0635\u0641\u062D\u0629 \u0648\u0627\u0644\u062E\u0637\u0648\u0629 \u0627\u0644\u062A\u0627\u0644\u064A\u0629.",
192
+ tryAsking: "\u062C\u0631\u0651\u0628 \u0623\u0646 \u062A\u0633\u0623\u0644",
193
+ focusProduct: "\u0627\u0644\u062A\u0631\u0643\u064A\u0632 \u0639\u0644\u0649 \u0645\u0646\u062A\u062C",
194
+ allProducts: "\u0643\u0644 \u0627\u0644\u0645\u0646\u062A\u062C\u0627\u062A",
195
+ showAll: "\u0627\u0644\u0643\u0644",
196
+ showLess: "\u0639\u0631\u0636 \u0623\u0642\u0644",
197
+ sources: "\u0627\u0644\u0645\u0635\u0627\u062F\u0631",
198
+ nextYouCouldAsk: "\u064A\u0645\u0643\u0646\u0643 \u0623\u0646 \u062A\u0633\u0623\u0644 \u0628\u0639\u062F \u0630\u0644\u0643",
199
+ placeholder: "\u0627\u0633\u0623\u0644 \u0623\u064A \u0634\u064A\u0621 \u0639\u0646 \u0645\u0646\u062A\u062C\u0627\u062A\u0646\u0627\u2026",
200
+ placeholderProduct: "\u0627\u0633\u0623\u0644 \u0639\u0646 {product}\u2026",
201
+ send: "\u0625\u0631\u0633\u0627\u0644",
202
+ stop: "\u0625\u064A\u0642\u0627\u0641",
203
+ newChat: "\u0645\u062D\u0627\u062F\u062B\u0629 \u062C\u062F\u064A\u062F\u0629",
204
+ history: "\u0627\u0644\u0633\u062C\u0644",
205
+ clearHistory: "\u0645\u0633\u062D \u0627\u0644\u0633\u062C\u0644",
206
+ share: "\u0645\u0634\u0627\u0631\u0643\u0629",
207
+ copied: "\u062A\u0645 \u0627\u0644\u0646\u0633\u062E",
208
+ copying: "\u062C\u0627\u0631\u064D \u0627\u0644\u0646\u0633\u062E\u2026",
209
+ shareUnavailable: "\u063A\u064A\u0631 \u0645\u062A\u0627\u062D",
210
+ disclaimer: "\u0625\u062E\u0644\u0627\u0621 \u0645\u0633\u0624\u0648\u0644\u064A\u0629",
211
+ disclaimerShort: "\u0645\u0628\u0646\u064A \u0639\u0644\u0649 \u0648\u062B\u0627\u0626\u0642\u0646\u0627 \u2014 \u062A\u062D\u0642\u0651\u0642 \u0645\u0646 \u0623\u064A \u0645\u0639\u0644\u0648\u0645\u0629 \u0645\u0647\u0645\u0629.",
212
+ dictate: "\u0623\u0645\u0644\u0650 \u0633\u0624\u0627\u0644\u0643",
213
+ stopDictating: "\u0625\u064A\u0642\u0627\u0641 \u0627\u0644\u0625\u0645\u0644\u0627\u0621",
214
+ noAnswer: "\u0644\u0645 \u0623\u062C\u062F \u0647\u0630\u0627 \u0641\u064A \u0648\u062B\u0627\u0626\u0642\u0646\u0627\u060C \u0644\u0630\u0627 \u0641\u0627\u0644\u0625\u062C\u0627\u0628\u0629 \u0623\u062F\u0646\u0627\u0647 \u063A\u064A\u0631 \u0645\u0633\u062A\u0646\u062F\u0629 \u0625\u0644\u0649 \u0645\u0635\u062F\u0631. \u062D\u0627\u0648\u0644 \u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0635\u064A\u0627\u063A\u0629\u060C \u0623\u0648",
215
+ askHuman: "\u062A\u062D\u062F\u0651\u062B \u0625\u0644\u0649 \u0634\u062E\u0635",
216
+ prevSuggestion: "\u0627\u0644\u0627\u0642\u062A\u0631\u0627\u062D \u0627\u0644\u0633\u0627\u0628\u0642",
217
+ nextSuggestion: "\u0627\u0644\u0627\u0642\u062A\u0631\u0627\u062D \u0627\u0644\u062A\u0627\u0644\u064A",
218
+ capabilities: [
219
+ "\u0645\u0628\u0646\u064A \u0639\u0644\u0649 \u0648\u062B\u0627\u0626\u0642\u0646\u0627",
220
+ "\u0642\u0627\u0631\u0646 \u0639\u0628\u0631 \u0627\u0644\u0645\u0646\u0638\u0648\u0645\u0629",
221
+ "\u0645\u0628\u0627\u0634\u0631\u0629\u064B \u0625\u0644\u0649 \u0627\u0644\u0635\u0641\u062D\u0629 \u0627\u0644\u0635\u062D\u064A\u062D\u0629"
222
+ ],
223
+ prompts: [
224
+ "\u0645\u0627 \u0627\u0644\u0630\u064A \u064A\u0641\u0639\u0644\u0647 \u0647\u0630\u0627 \u0627\u0644\u0645\u0646\u062A\u062C \u0641\u0639\u0644\u064A\u064B\u0627\u061F",
225
+ "\u0623\u064A \u0645\u0646\u062A\u062C \u064A\u0646\u0627\u0633\u0628 \u0641\u0631\u064A\u0642\u064A\u061F",
226
+ "\u0643\u064A\u0641 \u0623\u0628\u062F\u0623 \u062E\u0637\u0648\u0629 \u0628\u062E\u0637\u0648\u0629\u061F",
227
+ "\u0643\u0645 \u062A\u0628\u0644\u063A \u0627\u0644\u062A\u0643\u0644\u0641\u0629\u061F"
228
+ ]
229
+ };
230
+ var TA = {
231
+ badge: "\u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B86\u0BB5\u0BA3\u0B99\u0BCD\u0B95\u0BB3\u0BC8 \u0B85\u0B9F\u0BBF\u0BAA\u0BCD\u0BAA\u0B9F\u0BC8\u0BAF\u0BBE\u0B95\u0B95\u0BCD \u0B95\u0BCA\u0BA3\u0BCD\u0B9F AI \u0BAA\u0BA4\u0BBF\u0BB2\u0BCD\u0B95\u0BB3\u0BCD",
232
+ welcomeTitle: "\u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD \u0BAA\u0BB1\u0BCD\u0BB1\u0BBF \u0B8E\u0BA4\u0BC8\u0BAF\u0BC1\u0BAE\u0BCD \u0B95\u0BC7\u0BB3\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
233
+ welcomeBody: "\u0BA8\u0BC0\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B8E\u0BA9\u0BCD\u0BA9 \u0B9A\u0BC6\u0BAF\u0BCD\u0BAF \u0BB5\u0BBF\u0BB0\u0BC1\u0BAE\u0BCD\u0BAA\u0BC1\u0B95\u0BBF\u0BB1\u0BC0\u0BB0\u0BCD\u0B95\u0BB3\u0BCD \u0B8E\u0BA9\u0BCD\u0BB1\u0BC1 \u0B9A\u0BCA\u0BB2\u0BCD\u0BB2\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD; \u0B9A\u0BB0\u0BBF\u0BAF\u0BBE\u0BA9 \u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1, \u0BAA\u0B95\u0BCD\u0B95\u0BAE\u0BCD, \u0B85\u0B9F\u0BC1\u0BA4\u0BCD\u0BA4 \u0BAA\u0B9F\u0BBF \u0B86\u0B95\u0BBF\u0BAF\u0BB5\u0BB1\u0BCD\u0BB1\u0BC8\u0B95\u0BCD \u0B95\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B95\u0BBF\u0BB1\u0BC7\u0BA9\u0BCD.",
234
+ tryAsking: "\u0B87\u0BA4\u0BC8\u0B95\u0BCD \u0B95\u0BC7\u0B9F\u0BCD\u0B9F\u0BC1\u0BAA\u0BCD \u0BAA\u0BBE\u0BB0\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
235
+ focusProduct: "\u0B92\u0BB0\u0BC1 \u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BBF\u0BB2\u0BCD \u0B95\u0BB5\u0BA9\u0BAE\u0BCD",
236
+ allProducts: "\u0B85\u0BA9\u0BC8\u0BA4\u0BCD\u0BA4\u0BC1 \u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD",
237
+ showAll: "\u0B85\u0BA9\u0BC8\u0BA4\u0BCD\u0BA4\u0BC1\u0BAE\u0BCD",
238
+ showLess: "\u0B95\u0BC1\u0BB1\u0BC8\u0BB5\u0BBE\u0B95\u0B95\u0BCD \u0B95\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1",
239
+ sources: "\u0BAE\u0BC2\u0BB2\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
240
+ nextYouCouldAsk: "\u0B85\u0B9F\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1 \u0BA8\u0BC0\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B95\u0BC7\u0B9F\u0BCD\u0B95\u0BB2\u0BBE\u0BAE\u0BCD",
241
+ placeholder: "\u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD \u0BAA\u0BB1\u0BCD\u0BB1\u0BBF \u0B8E\u0BA4\u0BC8\u0BAF\u0BC1\u0BAE\u0BCD \u0B95\u0BC7\u0BB3\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD\u2026",
242
+ placeholderProduct: "{product} \u0BAA\u0BB1\u0BCD\u0BB1\u0BBF\u0B95\u0BCD \u0B95\u0BC7\u0BB3\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD\u2026",
243
+ send: "\u0B85\u0BA9\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1",
244
+ stop: "\u0BA8\u0BBF\u0BB1\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1",
245
+ newChat: "\u0BAA\u0BC1\u0BA4\u0BBF\u0BAF \u0B89\u0BB0\u0BC8\u0BAF\u0BBE\u0B9F\u0BB2\u0BCD",
246
+ history: "\u0BB5\u0BB0\u0BB2\u0BBE\u0BB1\u0BC1",
247
+ clearHistory: "\u0BB5\u0BB0\u0BB2\u0BBE\u0BB1\u0BCD\u0BB1\u0BC8 \u0B85\u0BB4\u0BBF",
248
+ share: "\u0BAA\u0B95\u0BBF\u0BB0\u0BCD",
249
+ copied: "\u0BA8\u0B95\u0BB2\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1",
250
+ copying: "\u0BA8\u0B95\u0BB2\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95\u0BBF\u0BB1\u0BA4\u0BC1\u2026",
251
+ shareUnavailable: "\u0B95\u0BBF\u0B9F\u0BC8\u0B95\u0BCD\u0B95\u0BB5\u0BBF\u0BB2\u0BCD\u0BB2\u0BC8",
252
+ disclaimer: "\u0BAA\u0BCA\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0BA4\u0BCD \u0BA4\u0BC1\u0BB1\u0BAA\u0BCD\u0BAA\u0BC1",
253
+ disclaimerShort: "\u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B86\u0BB5\u0BA3\u0B99\u0BCD\u0B95\u0BB3\u0BC8 \u0B85\u0B9F\u0BBF\u0BAA\u0BCD\u0BAA\u0B9F\u0BC8\u0BAF\u0BBE\u0B95\u0B95\u0BCD \u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BA4\u0BC1 \u2014 \u0BAE\u0BC1\u0B95\u0BCD\u0B95\u0BBF\u0BAF\u0BAE\u0BBE\u0BA9\u0BA4\u0BC8\u0B9A\u0BCD \u0B9A\u0BB0\u0BBF\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BB5\u0BC1\u0BAE\u0BCD.",
254
+ dictate: "\u0B89\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B95\u0BC7\u0BB3\u0BCD\u0BB5\u0BBF\u0BAF\u0BC8\u0BAA\u0BCD \u0BAA\u0BC7\u0B9A\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
255
+ stopDictating: "\u0BAA\u0BC7\u0B9A\u0BC1\u0BB5\u0BA4\u0BC8 \u0BA8\u0BBF\u0BB1\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1",
256
+ noAnswer: "\u0B87\u0BA4\u0BC1 \u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B86\u0BB5\u0BA3\u0B99\u0BCD\u0B95\u0BB3\u0BBF\u0BB2\u0BCD \u0B95\u0BBF\u0B9F\u0BC8\u0B95\u0BCD\u0B95\u0BB5\u0BBF\u0BB2\u0BCD\u0BB2\u0BC8, \u0B8E\u0BA9\u0BB5\u0BC7 \u0B95\u0BC0\u0BB4\u0BC7 \u0B89\u0BB3\u0BCD\u0BB3 \u0BAA\u0BA4\u0BBF\u0BB2\u0BC1\u0B95\u0BCD\u0B95\u0BC1 \u0BAE\u0BC2\u0BB2\u0BAE\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8. \u0BB5\u0BC7\u0BB1\u0BC1 \u0BB5\u0B95\u0BC8\u0BAF\u0BBF\u0BB2\u0BCD \u0B95\u0BC7\u0BB3\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD, \u0B85\u0BB2\u0BCD\u0BB2\u0BA4\u0BC1",
257
+ askHuman: "\u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BC8\u0BA4\u0BCD \u0BA4\u0BCA\u0B9F\u0BB0\u0BCD\u0BAA\u0BC1 \u0B95\u0BCA\u0BB3\u0BCD\u0BB3\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
258
+ prevSuggestion: "\u0BAE\u0BC1\u0BA8\u0BCD\u0BA4\u0BC8\u0BAF \u0BAA\u0BB0\u0BBF\u0BA8\u0BCD\u0BA4\u0BC1\u0BB0\u0BC8",
259
+ nextSuggestion: "\u0B85\u0B9F\u0BC1\u0BA4\u0BCD\u0BA4 \u0BAA\u0BB0\u0BBF\u0BA8\u0BCD\u0BA4\u0BC1\u0BB0\u0BC8",
260
+ capabilities: [
261
+ "\u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B9A\u0BCA\u0BA8\u0BCD\u0BA4 \u0B86\u0BB5\u0BA3\u0B99\u0BCD\u0B95\u0BB3\u0BBF\u0BA9\u0BCD \u0B85\u0B9F\u0BBF\u0BAA\u0BCD\u0BAA\u0B9F\u0BC8\u0BAF\u0BBF\u0BB2\u0BCD",
262
+ "\u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BC8 \u0B92\u0BAA\u0BCD\u0BAA\u0BBF\u0B9F\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
263
+ "\u0BA8\u0BC7\u0BB0\u0BBE\u0B95 \u0B9A\u0BB0\u0BBF\u0BAF\u0BBE\u0BA9 \u0BAA\u0B95\u0BCD\u0B95\u0BA4\u0BCD\u0BA4\u0BBF\u0BB1\u0BCD\u0B95\u0BC1"
264
+ ],
265
+ prompts: [
266
+ "\u0B87\u0BA8\u0BCD\u0BA4\u0BA4\u0BCD \u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1 \u0B89\u0BA3\u0BCD\u0BAE\u0BC8\u0BAF\u0BBF\u0BB2\u0BCD \u0B8E\u0BA9\u0BCD\u0BA9 \u0B9A\u0BC6\u0BAF\u0BCD\u0B95\u0BBF\u0BB1\u0BA4\u0BC1?",
267
+ "\u0B8E\u0BA9\u0BCD \u0B95\u0BC1\u0BB4\u0BC1\u0BB5\u0BBF\u0BB1\u0BCD\u0B95\u0BC1 \u0B8E\u0BA8\u0BCD\u0BA4\u0BA4\u0BCD \u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1 \u0BAA\u0BCA\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4\u0BC1\u0BAE\u0BCD?",
268
+ "\u0BAA\u0B9F\u0BBF\u0BAA\u0BCD\u0BAA\u0B9F\u0BBF\u0BAF\u0BBE\u0B95 \u0B8E\u0BAA\u0BCD\u0BAA\u0B9F\u0BBF\u0BA4\u0BCD \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95\u0BC1\u0BB5\u0BA4\u0BC1?",
269
+ "\u0B87\u0BA4\u0BA9\u0BCD \u0BB5\u0BBF\u0BB2\u0BC8 \u0B8E\u0BA9\u0BCD\u0BA9?"
270
+ ]
271
+ };
272
+ var STRINGS = {
273
+ en: EN,
274
+ zh: ZH,
275
+ hi: HI,
276
+ es: ES,
277
+ ar: AR,
278
+ ta: TA
279
+ };
280
+ function resolveExploreLocale(explicit) {
281
+ const candidates = [
282
+ explicit,
283
+ typeof document === "undefined" ? void 0 : document.documentElement.lang,
284
+ typeof navigator === "undefined" ? void 0 : navigator.language
285
+ ];
286
+ for (const candidate of candidates) {
287
+ if (!candidate) continue;
288
+ const primary = candidate.toLowerCase().split("-")[0];
289
+ const match = EXPLORE_LOCALES.find((locale) => locale === primary);
290
+ if (match) return match;
291
+ }
292
+ return "en";
293
+ }
294
+ function exploreStrings(locale) {
295
+ return STRINGS[locale] ?? EN;
296
+ }
297
+ function fill(template, values) {
298
+ return template.replace(/\{(\w+)\}/g, (match, key) => values[key] ?? match);
299
+ }
17
300
  var defaultComponents = {
18
301
  a: ({ href, children, ...props }) => {
19
302
  const isExternal = typeof href === "string" && (href.startsWith("http://") || href.startsWith("https://"));
@@ -1759,6 +2042,39 @@ function useSpeechInput({
1759
2042
  );
1760
2043
  return { supported, listening, interim, error, start, stop, toggle };
1761
2044
  }
2045
+ var SWIPE_THRESHOLD = 40;
2046
+ function useSwipe({
2047
+ onSwipeLeft,
2048
+ onSwipeRight,
2049
+ enabled = true
2050
+ }) {
2051
+ const start = useRef(null);
2052
+ const onPointerDown = useCallback(
2053
+ (event) => {
2054
+ if (!enabled) return;
2055
+ start.current = { x: event.clientX, y: event.clientY };
2056
+ },
2057
+ [enabled]
2058
+ );
2059
+ const onPointerUp = useCallback(
2060
+ (event) => {
2061
+ const from = start.current;
2062
+ start.current = null;
2063
+ if (!enabled || !from) return;
2064
+ const dx = event.clientX - from.x;
2065
+ const dy = event.clientY - from.y;
2066
+ if (Math.abs(dx) < SWIPE_THRESHOLD || Math.abs(dx) <= Math.abs(dy))
2067
+ return;
2068
+ if (dx < 0) onSwipeLeft?.();
2069
+ else onSwipeRight?.();
2070
+ },
2071
+ [enabled, onSwipeLeft, onSwipeRight]
2072
+ );
2073
+ const onPointerCancel = useCallback(() => {
2074
+ start.current = null;
2075
+ }, []);
2076
+ return { onPointerDown, onPointerUp, onPointerCancel };
2077
+ }
1762
2078
  function canonicalFromLocation() {
1763
2079
  if (typeof window === "undefined" || !window.location) return void 0;
1764
2080
  const { origin, pathname } = window.location;
@@ -1971,6 +2287,70 @@ var EXPLORE_CSS = `
1971
2287
  max-width: 100%;
1972
2288
  height: auto;
1973
2289
  }
2290
+
2291
+ /* ---- Ambient backdrop -----------------------------------------------------------------
2292
+ Two very low-opacity radial washes behind the welcome state, drifting slowly. Painted on
2293
+ a pseudo-element with pointer-events:none so it can never intercept a click \u2014 a
2294
+ decorative overlay that swallows clicks is a bug we have shipped before.
2295
+ Colours come from the product's own --primary token, so this picks up each site's palette
2296
+ instead of introducing one. */
2297
+ .boff-explore-aura {
2298
+ position: relative;
2299
+ isolation: isolate;
2300
+ }
2301
+ .boff-explore-aura::before {
2302
+ content: "";
2303
+ position: absolute;
2304
+ inset: -10% -20% auto -20%;
2305
+ height: 60%;
2306
+ z-index: -1;
2307
+ pointer-events: none;
2308
+ background:
2309
+ radial-gradient(38% 55% at 22% 30%, hsl(var(--primary) / 0.10), transparent 70%),
2310
+ radial-gradient(32% 48% at 78% 18%, hsl(var(--primary) / 0.07), transparent 72%);
2311
+ filter: blur(6px);
2312
+ animation: boff-explore-drift 26s ease-in-out infinite alternate;
2313
+ }
2314
+ @keyframes boff-explore-drift {
2315
+ from { transform: translate3d(-1.5%, -1%, 0) scale(1); }
2316
+ to { transform: translate3d(1.5%, 1.5%, 0) scale(1.06); }
2317
+ }
2318
+
2319
+ /* Entrance: content settles rather than snapping in. Short, and only once. */
2320
+ @keyframes boff-explore-rise {
2321
+ from { opacity: 0; transform: translateY(6px); }
2322
+ to { opacity: 1; transform: none; }
2323
+ }
2324
+ .boff-explore-rise {
2325
+ animation: boff-explore-rise 380ms cubic-bezier(0.22, 1, 0.36, 1) both;
2326
+ }
2327
+ .boff-explore-rise-1 { animation-delay: 40ms; }
2328
+ .boff-explore-rise-2 { animation-delay: 90ms; }
2329
+ .boff-explore-rise-3 { animation-delay: 140ms; }
2330
+
2331
+ /* A soft sheen that crosses the send button while a turn is in flight \u2014 enough to say
2332
+ "working" without another spinner competing with the thinking dots. */
2333
+ @keyframes boff-explore-sheen {
2334
+ from { transform: translateX(-120%); }
2335
+ to { transform: translateX(220%); }
2336
+ }
2337
+ .boff-explore-busy { position: relative; overflow: hidden; }
2338
+ .boff-explore-busy::after {
2339
+ content: "";
2340
+ position: absolute;
2341
+ inset: 0;
2342
+ pointer-events: none;
2343
+ background: linear-gradient(100deg, transparent 20%, hsl(var(--primary) / 0.22) 50%, transparent 80%);
2344
+ animation: boff-explore-sheen 1.5s ease-in-out infinite;
2345
+ }
2346
+
2347
+ /* Every one of the above is decoration. Reduced motion removes the movement and keeps the
2348
+ final state, rather than leaving content mid-animation and invisible. */
2349
+ @media (prefers-reduced-motion: reduce) {
2350
+ .boff-explore-aura::before,
2351
+ .boff-explore-busy::after { animation: none; }
2352
+ .boff-explore-rise { animation: none; opacity: 1; transform: none; }
2353
+ }
1974
2354
  `;
1975
2355
  function ExploreStyles() {
1976
2356
  return /* @__PURE__ */ jsx("style", { dangerouslySetInnerHTML: { __html: EXPLORE_CSS } });
@@ -2179,6 +2559,7 @@ function UserBubble({ message }) {
2179
2559
  ) });
2180
2560
  }
2181
2561
  function AssistantBubble({
2562
+ strings: T,
2182
2563
  message,
2183
2564
  activity,
2184
2565
  onNavigate,
@@ -2195,7 +2576,7 @@ function AssistantBubble({
2195
2576
  ref: anchorRef,
2196
2577
  "data-boff-explore": "assistant",
2197
2578
  "data-status": message.status,
2198
- className: "flex scroll-mt-4 gap-3",
2579
+ className: "boff-explore-rise flex scroll-mt-4 gap-3",
2199
2580
  children: [
2200
2581
  /* @__PURE__ */ jsx(
2201
2582
  "span",
@@ -2226,7 +2607,7 @@ function AssistantBubble({
2226
2607
  event.preventDefault();
2227
2608
  onNavigate("/contact");
2228
2609
  },
2229
- children: "ask a human"
2610
+ children: T.askHuman
2230
2611
  }
2231
2612
  ),
2232
2613
  "."
@@ -2241,7 +2622,7 @@ function AssistantBubble({
2241
2622
  streaming ? /* @__PURE__ */ jsx(ThinkingIndicator, { activity }) : null,
2242
2623
  failed && !body ? /* @__PURE__ */ jsx("div", { className: "rounded-2xl rounded-tl-md border border-border bg-muted px-4 py-3 text-sm text-muted-foreground", children: "That answer didn't come through. Try asking again." }) : null,
2243
2624
  message.references.length > 0 ? /* @__PURE__ */ jsxs("div", { children: [
2244
- /* @__PURE__ */ jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: "Sources" }),
2625
+ /* @__PURE__ */ jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.sources }),
2245
2626
  /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3", children: message.references.map((reference) => /* @__PURE__ */ jsx(
2246
2627
  ReferenceCard,
2247
2628
  {
@@ -2261,7 +2642,7 @@ function AssistantBubble({
2261
2642
  `${cta.kind}-${cta.url}`
2262
2643
  )) }) : null,
2263
2644
  message.status === "COMPLETED" && (message.followUps?.length ?? 0) > 0 ? /* @__PURE__ */ jsxs("div", { className: "space-y-1.5 pt-0.5", children: [
2264
- /* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-muted-foreground", children: "Next you could ask" }),
2645
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-muted-foreground", children: T.nextYouCouldAsk }),
2265
2646
  /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1.5", children: (message.followUps ?? []).map((question) => /* @__PURE__ */ jsxs(
2266
2647
  "button",
2267
2648
  {
@@ -2323,6 +2704,7 @@ function ErrorBanner({
2323
2704
  );
2324
2705
  }
2325
2706
  function PromptCarousel({
2707
+ strings: T,
2326
2708
  prompts,
2327
2709
  onPrompt,
2328
2710
  disabled
@@ -2337,6 +2719,11 @@ function PromptCarousel({
2337
2719
  },
2338
2720
  [count]
2339
2721
  );
2722
+ const swipe = useSwipe({
2723
+ onSwipeLeft: () => go(1),
2724
+ onSwipeRight: () => go(-1),
2725
+ enabled: count > 1
2726
+ });
2340
2727
  useEffect(() => {
2341
2728
  if (paused || disabled || count < 2) return;
2342
2729
  if (typeof window !== "undefined" && window.matchMedia?.("(prefers-reduced-motion: reduce)").matches) {
@@ -2349,7 +2736,7 @@ function PromptCarousel({
2349
2736
  return /* @__PURE__ */ jsxs(
2350
2737
  "div",
2351
2738
  {
2352
- className: "flex min-w-0 items-center gap-1.5",
2739
+ className: "flex min-w-0 touch-pan-y items-center gap-1.5",
2353
2740
  role: "group",
2354
2741
  "aria-roledescription": "carousel",
2355
2742
  "aria-label": "Example questions",
@@ -2357,14 +2744,15 @@ function PromptCarousel({
2357
2744
  onMouseLeave: () => setPaused(false),
2358
2745
  onFocusCapture: () => setPaused(true),
2359
2746
  onBlurCapture: () => setPaused(false),
2747
+ ...swipe,
2360
2748
  children: [
2361
2749
  count > 1 ? /* @__PURE__ */ jsx(
2362
2750
  "button",
2363
2751
  {
2364
2752
  type: "button",
2365
- "aria-label": "Previous suggestion",
2753
+ "aria-label": T.prevSuggestion,
2366
2754
  onClick: () => go(-1),
2367
- className: "hidden h-8 w-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring sm:inline-flex",
2755
+ className: "inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
2368
2756
  children: /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4" })
2369
2757
  }
2370
2758
  ) : null,
@@ -2391,7 +2779,7 @@ function PromptCarousel({
2391
2779
  "button",
2392
2780
  {
2393
2781
  type: "button",
2394
- "aria-label": "Next suggestion",
2782
+ "aria-label": T.nextSuggestion,
2395
2783
  onClick: () => go(1),
2396
2784
  className: "inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
2397
2785
  children: /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4" })
@@ -2402,6 +2790,7 @@ function PromptCarousel({
2402
2790
  );
2403
2791
  }
2404
2792
  function ProductStrip({
2793
+ strings: T,
2405
2794
  products,
2406
2795
  focusProduct,
2407
2796
  onFocus
@@ -2436,7 +2825,7 @@ function ProductStrip({
2436
2825
  "aria-pressed": focusProduct === null,
2437
2826
  onClick: () => onFocus(null),
2438
2827
  className: chipClass(focusProduct === null),
2439
- children: "All products"
2828
+ children: T.allProducts
2440
2829
  }
2441
2830
  ),
2442
2831
  products.map((product) => /* @__PURE__ */ jsx(
@@ -2465,7 +2854,7 @@ function ProductStrip({
2465
2854
  "aria-expanded": expanded,
2466
2855
  onClick: () => setExpanded((v) => !v),
2467
2856
  className: "shrink-0 whitespace-nowrap rounded-full px-2 py-1 text-xs font-medium text-primary underline-offset-4 hover:underline focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
2468
- children: expanded ? "Show less" : `All ${products.length}`
2857
+ children: expanded ? T.showLess : `${T.showAll} ${products.length}`
2469
2858
  }
2470
2859
  ) : null
2471
2860
  ]
@@ -2573,6 +2962,7 @@ function DisclaimerDialog({
2573
2962
  );
2574
2963
  }
2575
2964
  function WelcomeState({
2965
+ strings: T,
2576
2966
  title,
2577
2967
  body,
2578
2968
  prompts,
@@ -2582,43 +2972,45 @@ function WelcomeState({
2582
2972
  onFocus,
2583
2973
  disabled
2584
2974
  }) {
2585
- return /* @__PURE__ */ jsxs("div", { className: "mx-auto w-full max-w-3xl px-4 py-8 sm:py-12", children: [
2586
- /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
2975
+ return /* @__PURE__ */ jsxs("div", { className: "boff-explore-aura mx-auto my-auto w-full max-w-3xl px-4 py-6 sm:py-8 lg:py-10", children: [
2976
+ /* @__PURE__ */ jsxs("div", { className: "boff-explore-rise text-center", children: [
2587
2977
  /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5 rounded-full border border-border bg-muted px-3 py-1 text-xs font-medium text-muted-foreground", children: [
2588
2978
  /* @__PURE__ */ jsx(Sparkles, { className: "h-3.5 w-3.5" }),
2589
- "AI answers, grounded in our documentation"
2979
+ T.badge
2590
2980
  ] }),
2591
2981
  /* @__PURE__ */ jsx("h1", { className: "mt-4 text-balance break-words text-2xl font-bold tracking-tight sm:text-4xl", children: title }),
2592
2982
  /* @__PURE__ */ jsx("p", { className: "mx-auto mt-2.5 max-w-2xl text-pretty text-sm leading-relaxed text-muted-foreground sm:text-lg", children: body })
2593
2983
  ] }),
2594
- /* @__PURE__ */ jsx("ul", { className: "mt-7 grid gap-2.5 sm:grid-cols-3", children: CAPABILITIES.map(({ icon: Icon, title: capTitle, body: capBody }) => /* @__PURE__ */ jsxs(
2984
+ /* @__PURE__ */ jsx("ul", { className: "boff-explore-rise boff-explore-rise-1 mt-6 grid grid-cols-3 gap-2 sm:mt-7 sm:gap-2.5", children: CAPABILITIES.map(({ icon: Icon, body: capBody }, i) => /* @__PURE__ */ jsxs(
2595
2985
  "li",
2596
2986
  {
2597
- className: "rounded-xl border border-border/70 bg-card/60 p-3.5 text-left transition-colors hover:border-border",
2987
+ className: "rounded-xl border border-border/70 bg-card/60 p-2.5 text-center transition-colors hover:border-border sm:p-3.5 sm:text-left",
2598
2988
  children: [
2599
- /* @__PURE__ */ jsx("span", { className: "mb-2.5 flex h-8 w-8 items-center justify-center rounded-lg bg-primary/10 text-primary", children: /* @__PURE__ */ jsx(Icon, { className: "h-4 w-4" }) }),
2600
- /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold text-card-foreground", children: capTitle }),
2601
- /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs leading-relaxed text-muted-foreground", children: capBody })
2989
+ /* @__PURE__ */ jsx("span", { className: "mx-auto mb-1.5 flex h-7 w-7 items-center justify-center rounded-lg bg-primary/10 text-primary sm:mx-0 sm:mb-2.5 sm:h-8 sm:w-8", children: /* @__PURE__ */ jsx(Icon, { className: "h-3.5 w-3.5 sm:h-4 sm:w-4" }) }),
2990
+ /* @__PURE__ */ jsx("p", { className: "text-[11px] font-semibold leading-tight text-card-foreground sm:text-sm sm:leading-normal", children: T.capabilities[i] ?? "" }),
2991
+ /* @__PURE__ */ jsx("p", { className: "mt-1 hidden text-xs leading-relaxed text-muted-foreground sm:block", children: capBody })
2602
2992
  ]
2603
2993
  },
2604
- capTitle
2994
+ i
2605
2995
  )) }),
2606
- prompts.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "mt-8", children: [
2607
- /* @__PURE__ */ jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: "Try asking" }),
2996
+ prompts.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "boff-explore-rise boff-explore-rise-2 mt-8", children: [
2997
+ /* @__PURE__ */ jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.tryAsking }),
2608
2998
  /* @__PURE__ */ jsx(
2609
2999
  PromptCarousel,
2610
3000
  {
3001
+ strings: T,
2611
3002
  prompts,
2612
3003
  onPrompt,
2613
3004
  disabled
2614
3005
  }
2615
3006
  )
2616
3007
  ] }) : null,
2617
- products.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "mt-6", children: [
2618
- /* @__PURE__ */ jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: "Focus on a product" }),
3008
+ products.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "boff-explore-rise boff-explore-rise-3 mt-6", children: [
3009
+ /* @__PURE__ */ jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.focusProduct }),
2619
3010
  /* @__PURE__ */ jsx(
2620
3011
  ProductStrip,
2621
3012
  {
3013
+ strings: T,
2622
3014
  products,
2623
3015
  focusProduct,
2624
3016
  onFocus
@@ -2637,7 +3029,8 @@ function ExplorePage({
2637
3029
  onNavigate,
2638
3030
  onSend,
2639
3031
  welcomeTitle,
2640
- welcomeBody
3032
+ welcomeBody,
3033
+ locale
2641
3034
  }) {
2642
3035
  const pageUrl = useMemo(
2643
3036
  () => typeof window === "undefined" ? void 0 : window.location.href,
@@ -2681,8 +3074,15 @@ function ExplorePage({
2681
3074
  }
2682
3075
  });
2683
3076
  speechStopRef.current = speech.stop;
3077
+ const activeLocale = useMemo(
3078
+ () => resolveExploreLocale(locale),
3079
+ [locale]
3080
+ );
3081
+ const T = useMemo(() => exploreStrings(activeLocale), [activeLocale]);
3082
+ const rtl = isRtlLocale(activeLocale);
2684
3083
  const [disclaimerOpen, setDisclaimerOpen] = useState(false);
2685
3084
  const [shareLabel, setShareLabel] = useState("Share");
3085
+ const [shareUrl, setShareUrl] = useState(null);
2686
3086
  const scrollRef = useRef(null);
2687
3087
  const latestAssistantRef = useRef(null);
2688
3088
  const alignedForRef = useRef(null);
@@ -2739,6 +3139,7 @@ function ExplorePage({
2739
3139
  }, [activity, latestAssistantId, messages]);
2740
3140
  const handleShare = useCallback(async () => {
2741
3141
  setShareLabel("Copying\u2026");
3142
+ setShareUrl(null);
2742
3143
  const token = await createShareLink();
2743
3144
  if (!token) {
2744
3145
  setShareLabel("Unavailable");
@@ -2750,11 +3151,11 @@ function ExplorePage({
2750
3151
  try {
2751
3152
  await navigator.clipboard.writeText(url);
2752
3153
  setShareLabel("Copied");
3154
+ setTimeout(() => setShareLabel("Share"), 2500);
2753
3155
  } catch {
2754
- window.prompt("Copy this link", url);
3156
+ setShareUrl(url);
2755
3157
  setShareLabel("Share");
2756
3158
  }
2757
- setTimeout(() => setShareLabel("Share"), 2500);
2758
3159
  }, [createShareLink, pageUrl]);
2759
3160
  const submitDraft = useCallback(() => {
2760
3161
  const text = draft.trim();
@@ -2793,6 +3194,8 @@ function ExplorePage({
2793
3194
  {
2794
3195
  "data-boff-explore": "page",
2795
3196
  "data-phase": phase,
3197
+ "data-locale": activeLocale,
3198
+ dir: rtl ? "rtl" : void 0,
2796
3199
  className: cn(
2797
3200
  "flex w-full min-w-0 flex-col overflow-x-hidden bg-background text-foreground",
2798
3201
  heightMode === "auto" && "min-h-[70vh]",
@@ -2954,10 +3357,17 @@ function ExplorePage({
2954
3357
  role: "log",
2955
3358
  "aria-live": "polite",
2956
3359
  "aria-label": "Explore conversation",
2957
- className: "boff-explore-scroll min-h-0 min-w-0 flex-1 overflow-y-auto overflow-x-hidden",
3360
+ className: cn(
3361
+ "boff-explore-scroll min-h-0 min-w-0 flex-1 overflow-y-auto overflow-x-hidden",
3362
+ // Only while the welcome state is showing: a flex column is what lets its
3363
+ // `my-auto` centre the block on a tall screen. The transcript must NOT be a flex
3364
+ // column — that would fight the natural top-down flow of messages.
3365
+ showWelcome && "flex flex-col"
3366
+ ),
2958
3367
  children: showWelcome ? /* @__PURE__ */ jsx(
2959
3368
  WelcomeState,
2960
3369
  {
3370
+ strings: T,
2961
3371
  title: resolvedTitle,
2962
3372
  body: resolvedBody,
2963
3373
  prompts,
@@ -2971,6 +3381,7 @@ function ExplorePage({
2971
3381
  (message) => message.role === "USER" ? /* @__PURE__ */ jsx(UserBubble, { message }, message.id) : /* @__PURE__ */ jsx(
2972
3382
  AssistantBubble,
2973
3383
  {
3384
+ strings: T,
2974
3385
  message,
2975
3386
  activity,
2976
3387
  onNavigate,
@@ -3007,6 +3418,7 @@ function ExplorePage({
3007
3418
  {
3008
3419
  className: cn(
3009
3420
  "flex min-w-0 items-end gap-2 rounded-2xl border bg-card p-2 shadow-sm transition-all",
3421
+ busy && "boff-explore-busy",
3010
3422
  overLimit ? "border-destructive/60" : "border-border focus-within:border-primary/40 focus-within:ring-1 focus-within:ring-ring"
3011
3423
  ),
3012
3424
  children: [
@@ -3026,7 +3438,9 @@ function ExplorePage({
3026
3438
  composingRef.current = false;
3027
3439
  },
3028
3440
  "aria-label": "Ask a question",
3029
- placeholder: composerDisabled ? phase === "limited" ? "Message limit reached \u2014 please try again later" : "Explore is unavailable right now" : focusedProductName ? `Ask about ${focusedProductName}\u2026` : "Ask anything about our products\u2026",
3441
+ placeholder: composerDisabled ? phase === "limited" ? "Message limit reached \u2014 please try again later" : "Explore is unavailable right now" : focusedProductName ? fill(T.placeholderProduct, {
3442
+ product: focusedProductName
3443
+ }) : T.placeholder,
3030
3444
  className: "max-h-[200px] min-h-[44px] w-full min-w-0 flex-1 resize-none border-0 bg-transparent px-2 py-2.5 text-sm shadow-none focus-visible:ring-0 md:text-sm"
3031
3445
  }
3032
3446
  ),
@@ -3039,9 +3453,9 @@ function ExplorePage({
3039
3453
  size: "icon",
3040
3454
  variant: speech.listening ? "default" : "ghost",
3041
3455
  disabled: composerDisabled,
3042
- "aria-label": speech.listening ? "Stop dictating" : "Dictate your question",
3456
+ "aria-label": speech.listening ? T.stopDictating : T.dictate,
3043
3457
  "aria-pressed": speech.listening,
3044
- title: speech.listening ? "Stop dictating" : "Dictate your question",
3458
+ title: speech.listening ? T.stopDictating : T.dictate,
3045
3459
  onClick: speech.toggle,
3046
3460
  className: cn(speech.listening && "animate-pulse"),
3047
3461
  children: /* @__PURE__ */ jsx(Mic, { className: "h-4 w-4" })
@@ -3118,8 +3532,30 @@ function ExplorePage({
3118
3532
  }
3119
3533
  )
3120
3534
  ] }),
3535
+ shareUrl ? /* @__PURE__ */ jsxs("div", { className: "mt-2 flex items-center gap-2", children: [
3536
+ /* @__PURE__ */ jsx(
3537
+ "input",
3538
+ {
3539
+ "data-boff-explore": "share-url",
3540
+ readOnly: true,
3541
+ value: shareUrl,
3542
+ "aria-label": "Read-only link to this conversation",
3543
+ onFocus: (event) => event.currentTarget.select(),
3544
+ className: "min-w-0 flex-1 rounded-md border border-border bg-muted px-2 py-1 text-xs text-muted-foreground"
3545
+ }
3546
+ ),
3547
+ /* @__PURE__ */ jsx(
3548
+ "button",
3549
+ {
3550
+ type: "button",
3551
+ className: "shrink-0 text-xs underline underline-offset-2",
3552
+ onClick: () => setShareUrl(null),
3553
+ children: "Done"
3554
+ }
3555
+ )
3556
+ ] }) : null,
3121
3557
  /* @__PURE__ */ jsxs("div", { className: "mt-2 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-muted-foreground", children: [
3122
- /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children: "Grounded in our docs \u2014 check anything important." }),
3558
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children: T.disclaimerShort }),
3123
3559
  /* @__PURE__ */ jsx(
3124
3560
  "button",
3125
3561
  {
@@ -3127,7 +3563,7 @@ function ExplorePage({
3127
3563
  "data-boff-explore": "disclaimer",
3128
3564
  onClick: () => setDisclaimerOpen(true),
3129
3565
  className: "shrink-0 underline underline-offset-2 transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
3130
- children: "Disclaimer"
3566
+ children: T.disclaimer
3131
3567
  }
3132
3568
  )
3133
3569
  ] })