@burdenoff/website-sdk 2026.829.4 → 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.
@@ -40,6 +40,289 @@ var remarkGfm__default = /*#__PURE__*/_interopDefault(remarkGfm);
40
40
  var __defProp = Object.defineProperty;
41
41
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
42
42
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
43
+
44
+ // src/components/explore-i18n.ts
45
+ var EXPLORE_LOCALES = ["en", "zh", "hi", "es", "ar", "ta"];
46
+ var RTL_LOCALES = /* @__PURE__ */ new Set(["ar"]);
47
+ function isRtlLocale(locale) {
48
+ return RTL_LOCALES.has(locale);
49
+ }
50
+ var EN = {
51
+ badge: "AI answers, grounded in our documentation",
52
+ welcomeTitle: "Ask anything about our products",
53
+ welcomeBody: "Describe what you are trying to do and I will point you at the product, the page and the next step.",
54
+ tryAsking: "Try asking",
55
+ focusProduct: "Focus on a product",
56
+ allProducts: "All products",
57
+ showAll: "All",
58
+ showLess: "Show less",
59
+ sources: "Sources",
60
+ nextYouCouldAsk: "Next you could ask",
61
+ placeholder: "Ask anything about our products\u2026",
62
+ placeholderProduct: "Ask about {product}\u2026",
63
+ send: "Send",
64
+ stop: "Stop",
65
+ newChat: "New chat",
66
+ history: "History",
67
+ clearHistory: "Clear history",
68
+ share: "Share",
69
+ copied: "Copied",
70
+ copying: "Copying\u2026",
71
+ shareUnavailable: "Unavailable",
72
+ disclaimer: "Disclaimer",
73
+ disclaimerShort: "Grounded in our docs \u2014 check anything important.",
74
+ dictate: "Dictate your question",
75
+ stopDictating: "Stop dictating",
76
+ noAnswer: "I couldn't find this in our documentation, so the answer below is not grounded in a source. Try rephrasing, or",
77
+ askHuman: "ask a human",
78
+ prevSuggestion: "Previous suggestion",
79
+ nextSuggestion: "Next suggestion",
80
+ capabilities: [
81
+ "Grounded in our own docs",
82
+ "Compare across the ecosystem",
83
+ "Straight to the right page"
84
+ ],
85
+ prompts: [
86
+ "What does this product actually do?",
87
+ "Which product fits my team?",
88
+ "How do I get started, step by step?",
89
+ "How much does it cost?"
90
+ ]
91
+ };
92
+ var ZH = {
93
+ badge: "\u57FA\u4E8E\u6211\u4EEC\u6587\u6863\u7684 AI \u56DE\u7B54",
94
+ welcomeTitle: "\u5173\u4E8E\u6211\u4EEC\u7684\u4EA7\u54C1\uFF0C\u968F\u4FBF\u95EE",
95
+ 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",
96
+ tryAsking: "\u8BD5\u7740\u95EE",
97
+ focusProduct: "\u805A\u7126\u67D0\u4E2A\u4EA7\u54C1",
98
+ allProducts: "\u5168\u90E8\u4EA7\u54C1",
99
+ showAll: "\u5168\u90E8",
100
+ showLess: "\u6536\u8D77",
101
+ sources: "\u6765\u6E90",
102
+ nextYouCouldAsk: "\u4F60\u8FD8\u53EF\u4EE5\u95EE",
103
+ placeholder: "\u5173\u4E8E\u6211\u4EEC\u7684\u4EA7\u54C1\uFF0C\u968F\u4FBF\u95EE\u2026",
104
+ placeholderProduct: "\u8BE2\u95EE\u5173\u4E8E {product} \u7684\u95EE\u9898\u2026",
105
+ send: "\u53D1\u9001",
106
+ stop: "\u505C\u6B62",
107
+ newChat: "\u65B0\u5BF9\u8BDD",
108
+ history: "\u5386\u53F2",
109
+ clearHistory: "\u6E05\u9664\u5386\u53F2",
110
+ share: "\u5206\u4EAB",
111
+ copied: "\u5DF2\u590D\u5236",
112
+ copying: "\u590D\u5236\u4E2D\u2026",
113
+ shareUnavailable: "\u4E0D\u53EF\u7528",
114
+ disclaimer: "\u514D\u8D23\u58F0\u660E",
115
+ disclaimerShort: "\u5185\u5BB9\u57FA\u4E8E\u6211\u4EEC\u7684\u6587\u6863\uFF0C\u91CD\u8981\u4FE1\u606F\u8BF7\u81EA\u884C\u6838\u5BF9\u3002",
116
+ dictate: "\u8BED\u97F3\u8F93\u5165",
117
+ stopDictating: "\u505C\u6B62\u8BED\u97F3\u8F93\u5165",
118
+ 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",
119
+ askHuman: "\u8054\u7CFB\u6211\u4EEC",
120
+ prevSuggestion: "\u4E0A\u4E00\u4E2A\u5EFA\u8BAE",
121
+ nextSuggestion: "\u4E0B\u4E00\u4E2A\u5EFA\u8BAE",
122
+ capabilities: ["\u57FA\u4E8E\u6211\u4EEC\u81EA\u5DF1\u7684\u6587\u6863", "\u8DE8\u4EA7\u54C1\u5BF9\u6BD4", "\u76F4\u8FBE\u6B63\u786E\u7684\u9875\u9762"],
123
+ prompts: [
124
+ "\u8FD9\u4E2A\u4EA7\u54C1\u5230\u5E95\u80FD\u505A\u4EC0\u4E48\uFF1F",
125
+ "\u54EA\u4E2A\u4EA7\u54C1\u9002\u5408\u6211\u7684\u56E2\u961F\uFF1F",
126
+ "\u5982\u4F55\u4E00\u6B65\u6B65\u5F00\u59CB\u4F7F\u7528\uFF1F",
127
+ "\u4EF7\u683C\u662F\u591A\u5C11\uFF1F"
128
+ ]
129
+ };
130
+ var HI = {
131
+ 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",
132
+ 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",
133
+ 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",
134
+ tryAsking: "\u092F\u0939 \u092A\u0942\u091B\u0915\u0930 \u0926\u0947\u0916\u0947\u0902",
135
+ focusProduct: "\u0915\u093F\u0938\u0940 \u0909\u0924\u094D\u092A\u093E\u0926 \u092A\u0930 \u0927\u094D\u092F\u093E\u0928 \u0926\u0947\u0902",
136
+ allProducts: "\u0938\u092D\u0940 \u0909\u0924\u094D\u092A\u093E\u0926",
137
+ showAll: "\u0938\u092D\u0940",
138
+ showLess: "\u0915\u092E \u0926\u093F\u0916\u093E\u090F\u0901",
139
+ sources: "\u0938\u094D\u0930\u094B\u0924",
140
+ nextYouCouldAsk: "\u0906\u0917\u0947 \u0906\u092A \u092A\u0942\u091B \u0938\u0915\u0924\u0947 \u0939\u0948\u0902",
141
+ 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",
142
+ placeholderProduct: "{product} \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u092A\u0942\u091B\u0947\u0902\u2026",
143
+ send: "\u092D\u0947\u091C\u0947\u0902",
144
+ stop: "\u0930\u094B\u0915\u0947\u0902",
145
+ newChat: "\u0928\u0908 \u092C\u093E\u0924\u091A\u0940\u0924",
146
+ history: "\u0907\u0924\u093F\u0939\u093E\u0938",
147
+ clearHistory: "\u0907\u0924\u093F\u0939\u093E\u0938 \u092E\u093F\u091F\u093E\u090F\u0901",
148
+ share: "\u0938\u093E\u091D\u093E \u0915\u0930\u0947\u0902",
149
+ copied: "\u0915\u0949\u092A\u0940 \u0939\u094B \u0917\u092F\u093E",
150
+ copying: "\u0915\u0949\u092A\u0940 \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026",
151
+ shareUnavailable: "\u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902",
152
+ disclaimer: "\u0905\u0938\u094D\u0935\u0940\u0915\u0930\u0923",
153
+ 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",
154
+ dictate: "\u092C\u094B\u0932\u0915\u0930 \u092A\u0942\u091B\u0947\u0902",
155
+ stopDictating: "\u092C\u094B\u0932\u0928\u093E \u092C\u0902\u0926 \u0915\u0930\u0947\u0902",
156
+ 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",
157
+ askHuman: "\u0939\u092E\u0938\u0947 \u0938\u0902\u092A\u0930\u094D\u0915 \u0915\u0930\u0947\u0902",
158
+ prevSuggestion: "\u092A\u093F\u091B\u0932\u093E \u0938\u0941\u091D\u093E\u0935",
159
+ nextSuggestion: "\u0905\u0917\u0932\u093E \u0938\u0941\u091D\u093E\u0935",
160
+ capabilities: [
161
+ "\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",
162
+ "\u0938\u092D\u0940 \u0909\u0924\u094D\u092A\u093E\u0926\u094B\u0902 \u0915\u0940 \u0924\u0941\u0932\u0928\u093E \u0915\u0930\u0947\u0902",
163
+ "\u0938\u0940\u0927\u0947 \u0938\u0939\u0940 \u092A\u0947\u091C \u092A\u0930"
164
+ ],
165
+ prompts: [
166
+ "\u092F\u0939 \u0909\u0924\u094D\u092A\u093E\u0926 \u0905\u0938\u0932 \u092E\u0947\u0902 \u0915\u094D\u092F\u093E \u0915\u0930\u0924\u093E \u0939\u0948?",
167
+ "\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?",
168
+ "\u0936\u0941\u0930\u0941\u0906\u0924 \u0915\u0948\u0938\u0947 \u0915\u0930\u0947\u0902, \u091A\u0930\u0923 \u0926\u0930 \u091A\u0930\u0923?",
169
+ "\u0907\u0938\u0915\u0940 \u0915\u0940\u092E\u0924 \u0915\u093F\u0924\u0928\u0940 \u0939\u0948?"
170
+ ]
171
+ };
172
+ var ES = {
173
+ badge: "Respuestas de IA basadas en nuestra documentaci\xF3n",
174
+ welcomeTitle: "Pregunta lo que quieras sobre nuestros productos",
175
+ welcomeBody: "Cu\xE9ntame qu\xE9 necesitas hacer y te indicar\xE9 el producto, la p\xE1gina y el siguiente paso.",
176
+ tryAsking: "Prueba a preguntar",
177
+ focusProduct: "Centrarse en un producto",
178
+ allProducts: "Todos los productos",
179
+ showAll: "Todos",
180
+ showLess: "Ver menos",
181
+ sources: "Fuentes",
182
+ nextYouCouldAsk: "Tambi\xE9n puedes preguntar",
183
+ placeholder: "Pregunta lo que quieras sobre nuestros productos\u2026",
184
+ placeholderProduct: "Pregunta sobre {product}\u2026",
185
+ send: "Enviar",
186
+ stop: "Detener",
187
+ newChat: "Nueva conversaci\xF3n",
188
+ history: "Historial",
189
+ clearHistory: "Borrar historial",
190
+ share: "Compartir",
191
+ copied: "Copiado",
192
+ copying: "Copiando\u2026",
193
+ shareUnavailable: "No disponible",
194
+ disclaimer: "Aviso",
195
+ disclaimerShort: "Basado en nuestra documentaci\xF3n: comprueba cualquier dato importante.",
196
+ dictate: "Dictar tu pregunta",
197
+ stopDictating: "Dejar de dictar",
198
+ 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",
199
+ askHuman: "habla con una persona",
200
+ prevSuggestion: "Sugerencia anterior",
201
+ nextSuggestion: "Sugerencia siguiente",
202
+ capabilities: [
203
+ "Basado en nuestra documentaci\xF3n",
204
+ "Compara todo el ecosistema",
205
+ "Directo a la p\xE1gina correcta"
206
+ ],
207
+ prompts: [
208
+ "\xBFQu\xE9 hace realmente este producto?",
209
+ "\xBFQu\xE9 producto encaja con mi equipo?",
210
+ "\xBFC\xF3mo empiezo, paso a paso?",
211
+ "\xBFCu\xE1nto cuesta?"
212
+ ]
213
+ };
214
+ var AR = {
215
+ 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",
216
+ welcomeTitle: "\u0627\u0633\u0623\u0644 \u0623\u064A \u0634\u064A\u0621 \u0639\u0646 \u0645\u0646\u062A\u062C\u0627\u062A\u0646\u0627",
217
+ 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.",
218
+ tryAsking: "\u062C\u0631\u0651\u0628 \u0623\u0646 \u062A\u0633\u0623\u0644",
219
+ focusProduct: "\u0627\u0644\u062A\u0631\u0643\u064A\u0632 \u0639\u0644\u0649 \u0645\u0646\u062A\u062C",
220
+ allProducts: "\u0643\u0644 \u0627\u0644\u0645\u0646\u062A\u062C\u0627\u062A",
221
+ showAll: "\u0627\u0644\u0643\u0644",
222
+ showLess: "\u0639\u0631\u0636 \u0623\u0642\u0644",
223
+ sources: "\u0627\u0644\u0645\u0635\u0627\u062F\u0631",
224
+ nextYouCouldAsk: "\u064A\u0645\u0643\u0646\u0643 \u0623\u0646 \u062A\u0633\u0623\u0644 \u0628\u0639\u062F \u0630\u0644\u0643",
225
+ placeholder: "\u0627\u0633\u0623\u0644 \u0623\u064A \u0634\u064A\u0621 \u0639\u0646 \u0645\u0646\u062A\u062C\u0627\u062A\u0646\u0627\u2026",
226
+ placeholderProduct: "\u0627\u0633\u0623\u0644 \u0639\u0646 {product}\u2026",
227
+ send: "\u0625\u0631\u0633\u0627\u0644",
228
+ stop: "\u0625\u064A\u0642\u0627\u0641",
229
+ newChat: "\u0645\u062D\u0627\u062F\u062B\u0629 \u062C\u062F\u064A\u062F\u0629",
230
+ history: "\u0627\u0644\u0633\u062C\u0644",
231
+ clearHistory: "\u0645\u0633\u062D \u0627\u0644\u0633\u062C\u0644",
232
+ share: "\u0645\u0634\u0627\u0631\u0643\u0629",
233
+ copied: "\u062A\u0645 \u0627\u0644\u0646\u0633\u062E",
234
+ copying: "\u062C\u0627\u0631\u064D \u0627\u0644\u0646\u0633\u062E\u2026",
235
+ shareUnavailable: "\u063A\u064A\u0631 \u0645\u062A\u0627\u062D",
236
+ disclaimer: "\u0625\u062E\u0644\u0627\u0621 \u0645\u0633\u0624\u0648\u0644\u064A\u0629",
237
+ 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.",
238
+ dictate: "\u0623\u0645\u0644\u0650 \u0633\u0624\u0627\u0644\u0643",
239
+ stopDictating: "\u0625\u064A\u0642\u0627\u0641 \u0627\u0644\u0625\u0645\u0644\u0627\u0621",
240
+ 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",
241
+ askHuman: "\u062A\u062D\u062F\u0651\u062B \u0625\u0644\u0649 \u0634\u062E\u0635",
242
+ prevSuggestion: "\u0627\u0644\u0627\u0642\u062A\u0631\u0627\u062D \u0627\u0644\u0633\u0627\u0628\u0642",
243
+ nextSuggestion: "\u0627\u0644\u0627\u0642\u062A\u0631\u0627\u062D \u0627\u0644\u062A\u0627\u0644\u064A",
244
+ capabilities: [
245
+ "\u0645\u0628\u0646\u064A \u0639\u0644\u0649 \u0648\u062B\u0627\u0626\u0642\u0646\u0627",
246
+ "\u0642\u0627\u0631\u0646 \u0639\u0628\u0631 \u0627\u0644\u0645\u0646\u0638\u0648\u0645\u0629",
247
+ "\u0645\u0628\u0627\u0634\u0631\u0629\u064B \u0625\u0644\u0649 \u0627\u0644\u0635\u0641\u062D\u0629 \u0627\u0644\u0635\u062D\u064A\u062D\u0629"
248
+ ],
249
+ prompts: [
250
+ "\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",
251
+ "\u0623\u064A \u0645\u0646\u062A\u062C \u064A\u0646\u0627\u0633\u0628 \u0641\u0631\u064A\u0642\u064A\u061F",
252
+ "\u0643\u064A\u0641 \u0623\u0628\u062F\u0623 \u062E\u0637\u0648\u0629 \u0628\u062E\u0637\u0648\u0629\u061F",
253
+ "\u0643\u0645 \u062A\u0628\u0644\u063A \u0627\u0644\u062A\u0643\u0644\u0641\u0629\u061F"
254
+ ]
255
+ };
256
+ var TA = {
257
+ 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",
258
+ 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",
259
+ 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.",
260
+ tryAsking: "\u0B87\u0BA4\u0BC8\u0B95\u0BCD \u0B95\u0BC7\u0B9F\u0BCD\u0B9F\u0BC1\u0BAA\u0BCD \u0BAA\u0BBE\u0BB0\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
261
+ focusProduct: "\u0B92\u0BB0\u0BC1 \u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BBF\u0BB2\u0BCD \u0B95\u0BB5\u0BA9\u0BAE\u0BCD",
262
+ allProducts: "\u0B85\u0BA9\u0BC8\u0BA4\u0BCD\u0BA4\u0BC1 \u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD",
263
+ showAll: "\u0B85\u0BA9\u0BC8\u0BA4\u0BCD\u0BA4\u0BC1\u0BAE\u0BCD",
264
+ showLess: "\u0B95\u0BC1\u0BB1\u0BC8\u0BB5\u0BBE\u0B95\u0B95\u0BCD \u0B95\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1",
265
+ sources: "\u0BAE\u0BC2\u0BB2\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
266
+ nextYouCouldAsk: "\u0B85\u0B9F\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1 \u0BA8\u0BC0\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B95\u0BC7\u0B9F\u0BCD\u0B95\u0BB2\u0BBE\u0BAE\u0BCD",
267
+ 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",
268
+ placeholderProduct: "{product} \u0BAA\u0BB1\u0BCD\u0BB1\u0BBF\u0B95\u0BCD \u0B95\u0BC7\u0BB3\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD\u2026",
269
+ send: "\u0B85\u0BA9\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1",
270
+ stop: "\u0BA8\u0BBF\u0BB1\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1",
271
+ newChat: "\u0BAA\u0BC1\u0BA4\u0BBF\u0BAF \u0B89\u0BB0\u0BC8\u0BAF\u0BBE\u0B9F\u0BB2\u0BCD",
272
+ history: "\u0BB5\u0BB0\u0BB2\u0BBE\u0BB1\u0BC1",
273
+ clearHistory: "\u0BB5\u0BB0\u0BB2\u0BBE\u0BB1\u0BCD\u0BB1\u0BC8 \u0B85\u0BB4\u0BBF",
274
+ share: "\u0BAA\u0B95\u0BBF\u0BB0\u0BCD",
275
+ copied: "\u0BA8\u0B95\u0BB2\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1",
276
+ copying: "\u0BA8\u0B95\u0BB2\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95\u0BBF\u0BB1\u0BA4\u0BC1\u2026",
277
+ shareUnavailable: "\u0B95\u0BBF\u0B9F\u0BC8\u0B95\u0BCD\u0B95\u0BB5\u0BBF\u0BB2\u0BCD\u0BB2\u0BC8",
278
+ disclaimer: "\u0BAA\u0BCA\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0BA4\u0BCD \u0BA4\u0BC1\u0BB1\u0BAA\u0BCD\u0BAA\u0BC1",
279
+ 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.",
280
+ 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",
281
+ stopDictating: "\u0BAA\u0BC7\u0B9A\u0BC1\u0BB5\u0BA4\u0BC8 \u0BA8\u0BBF\u0BB1\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1",
282
+ 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",
283
+ 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",
284
+ prevSuggestion: "\u0BAE\u0BC1\u0BA8\u0BCD\u0BA4\u0BC8\u0BAF \u0BAA\u0BB0\u0BBF\u0BA8\u0BCD\u0BA4\u0BC1\u0BB0\u0BC8",
285
+ nextSuggestion: "\u0B85\u0B9F\u0BC1\u0BA4\u0BCD\u0BA4 \u0BAA\u0BB0\u0BBF\u0BA8\u0BCD\u0BA4\u0BC1\u0BB0\u0BC8",
286
+ capabilities: [
287
+ "\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",
288
+ "\u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BC8 \u0B92\u0BAA\u0BCD\u0BAA\u0BBF\u0B9F\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
289
+ "\u0BA8\u0BC7\u0BB0\u0BBE\u0B95 \u0B9A\u0BB0\u0BBF\u0BAF\u0BBE\u0BA9 \u0BAA\u0B95\u0BCD\u0B95\u0BA4\u0BCD\u0BA4\u0BBF\u0BB1\u0BCD\u0B95\u0BC1"
290
+ ],
291
+ prompts: [
292
+ "\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?",
293
+ "\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?",
294
+ "\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?",
295
+ "\u0B87\u0BA4\u0BA9\u0BCD \u0BB5\u0BBF\u0BB2\u0BC8 \u0B8E\u0BA9\u0BCD\u0BA9?"
296
+ ]
297
+ };
298
+ var STRINGS = {
299
+ en: EN,
300
+ zh: ZH,
301
+ hi: HI,
302
+ es: ES,
303
+ ar: AR,
304
+ ta: TA
305
+ };
306
+ function resolveExploreLocale(explicit) {
307
+ const candidates = [
308
+ explicit,
309
+ typeof document === "undefined" ? void 0 : document.documentElement.lang,
310
+ typeof navigator === "undefined" ? void 0 : navigator.language
311
+ ];
312
+ for (const candidate of candidates) {
313
+ if (!candidate) continue;
314
+ const primary = candidate.toLowerCase().split("-")[0];
315
+ const match = EXPLORE_LOCALES.find((locale) => locale === primary);
316
+ if (match) return match;
317
+ }
318
+ return "en";
319
+ }
320
+ function exploreStrings(locale) {
321
+ return STRINGS[locale] ?? EN;
322
+ }
323
+ function fill(template, values) {
324
+ return template.replace(/\{(\w+)\}/g, (match, key) => values[key] ?? match);
325
+ }
43
326
  var defaultComponents = {
44
327
  a: ({ href, children, ...props }) => {
45
328
  const isExternal = typeof href === "string" && (href.startsWith("http://") || href.startsWith("https://"));
@@ -1785,6 +2068,39 @@ function useSpeechInput({
1785
2068
  );
1786
2069
  return { supported, listening, interim, error, start, stop, toggle };
1787
2070
  }
2071
+ var SWIPE_THRESHOLD = 40;
2072
+ function useSwipe({
2073
+ onSwipeLeft,
2074
+ onSwipeRight,
2075
+ enabled = true
2076
+ }) {
2077
+ const start = React.useRef(null);
2078
+ const onPointerDown = React.useCallback(
2079
+ (event) => {
2080
+ if (!enabled) return;
2081
+ start.current = { x: event.clientX, y: event.clientY };
2082
+ },
2083
+ [enabled]
2084
+ );
2085
+ const onPointerUp = React.useCallback(
2086
+ (event) => {
2087
+ const from = start.current;
2088
+ start.current = null;
2089
+ if (!enabled || !from) return;
2090
+ const dx = event.clientX - from.x;
2091
+ const dy = event.clientY - from.y;
2092
+ if (Math.abs(dx) < SWIPE_THRESHOLD || Math.abs(dx) <= Math.abs(dy))
2093
+ return;
2094
+ if (dx < 0) onSwipeLeft?.();
2095
+ else onSwipeRight?.();
2096
+ },
2097
+ [enabled, onSwipeLeft, onSwipeRight]
2098
+ );
2099
+ const onPointerCancel = React.useCallback(() => {
2100
+ start.current = null;
2101
+ }, []);
2102
+ return { onPointerDown, onPointerUp, onPointerCancel };
2103
+ }
1788
2104
  function canonicalFromLocation() {
1789
2105
  if (typeof window === "undefined" || !window.location) return void 0;
1790
2106
  const { origin, pathname } = window.location;
@@ -1997,6 +2313,70 @@ var EXPLORE_CSS = `
1997
2313
  max-width: 100%;
1998
2314
  height: auto;
1999
2315
  }
2316
+
2317
+ /* ---- Ambient backdrop -----------------------------------------------------------------
2318
+ Two very low-opacity radial washes behind the welcome state, drifting slowly. Painted on
2319
+ a pseudo-element with pointer-events:none so it can never intercept a click \u2014 a
2320
+ decorative overlay that swallows clicks is a bug we have shipped before.
2321
+ Colours come from the product's own --primary token, so this picks up each site's palette
2322
+ instead of introducing one. */
2323
+ .boff-explore-aura {
2324
+ position: relative;
2325
+ isolation: isolate;
2326
+ }
2327
+ .boff-explore-aura::before {
2328
+ content: "";
2329
+ position: absolute;
2330
+ inset: -10% -20% auto -20%;
2331
+ height: 60%;
2332
+ z-index: -1;
2333
+ pointer-events: none;
2334
+ background:
2335
+ radial-gradient(38% 55% at 22% 30%, hsl(var(--primary) / 0.10), transparent 70%),
2336
+ radial-gradient(32% 48% at 78% 18%, hsl(var(--primary) / 0.07), transparent 72%);
2337
+ filter: blur(6px);
2338
+ animation: boff-explore-drift 26s ease-in-out infinite alternate;
2339
+ }
2340
+ @keyframes boff-explore-drift {
2341
+ from { transform: translate3d(-1.5%, -1%, 0) scale(1); }
2342
+ to { transform: translate3d(1.5%, 1.5%, 0) scale(1.06); }
2343
+ }
2344
+
2345
+ /* Entrance: content settles rather than snapping in. Short, and only once. */
2346
+ @keyframes boff-explore-rise {
2347
+ from { opacity: 0; transform: translateY(6px); }
2348
+ to { opacity: 1; transform: none; }
2349
+ }
2350
+ .boff-explore-rise {
2351
+ animation: boff-explore-rise 380ms cubic-bezier(0.22, 1, 0.36, 1) both;
2352
+ }
2353
+ .boff-explore-rise-1 { animation-delay: 40ms; }
2354
+ .boff-explore-rise-2 { animation-delay: 90ms; }
2355
+ .boff-explore-rise-3 { animation-delay: 140ms; }
2356
+
2357
+ /* A soft sheen that crosses the send button while a turn is in flight \u2014 enough to say
2358
+ "working" without another spinner competing with the thinking dots. */
2359
+ @keyframes boff-explore-sheen {
2360
+ from { transform: translateX(-120%); }
2361
+ to { transform: translateX(220%); }
2362
+ }
2363
+ .boff-explore-busy { position: relative; overflow: hidden; }
2364
+ .boff-explore-busy::after {
2365
+ content: "";
2366
+ position: absolute;
2367
+ inset: 0;
2368
+ pointer-events: none;
2369
+ background: linear-gradient(100deg, transparent 20%, hsl(var(--primary) / 0.22) 50%, transparent 80%);
2370
+ animation: boff-explore-sheen 1.5s ease-in-out infinite;
2371
+ }
2372
+
2373
+ /* Every one of the above is decoration. Reduced motion removes the movement and keeps the
2374
+ final state, rather than leaving content mid-animation and invisible. */
2375
+ @media (prefers-reduced-motion: reduce) {
2376
+ .boff-explore-aura::before,
2377
+ .boff-explore-busy::after { animation: none; }
2378
+ .boff-explore-rise { animation: none; opacity: 1; transform: none; }
2379
+ }
2000
2380
  `;
2001
2381
  function ExploreStyles() {
2002
2382
  return /* @__PURE__ */ jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: EXPLORE_CSS } });
@@ -2205,6 +2585,7 @@ function UserBubble({ message }) {
2205
2585
  ) });
2206
2586
  }
2207
2587
  function AssistantBubble({
2588
+ strings: T,
2208
2589
  message,
2209
2590
  activity,
2210
2591
  onNavigate,
@@ -2221,7 +2602,7 @@ function AssistantBubble({
2221
2602
  ref: anchorRef,
2222
2603
  "data-boff-explore": "assistant",
2223
2604
  "data-status": message.status,
2224
- className: "flex scroll-mt-4 gap-3",
2605
+ className: "boff-explore-rise flex scroll-mt-4 gap-3",
2225
2606
  children: [
2226
2607
  /* @__PURE__ */ jsxRuntime.jsx(
2227
2608
  "span",
@@ -2252,7 +2633,7 @@ function AssistantBubble({
2252
2633
  event.preventDefault();
2253
2634
  onNavigate("/contact");
2254
2635
  },
2255
- children: "ask a human"
2636
+ children: T.askHuman
2256
2637
  }
2257
2638
  ),
2258
2639
  "."
@@ -2267,7 +2648,7 @@ function AssistantBubble({
2267
2648
  streaming ? /* @__PURE__ */ jsxRuntime.jsx(ThinkingIndicator, { activity }) : null,
2268
2649
  failed && !body ? /* @__PURE__ */ jsxRuntime.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,
2269
2650
  message.references.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2270
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: "Sources" }),
2651
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.sources }),
2271
2652
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3", children: message.references.map((reference) => /* @__PURE__ */ jsxRuntime.jsx(
2272
2653
  ReferenceCard,
2273
2654
  {
@@ -2287,7 +2668,7 @@ function AssistantBubble({
2287
2668
  `${cta.kind}-${cta.url}`
2288
2669
  )) }) : null,
2289
2670
  message.status === "COMPLETED" && (message.followUps?.length ?? 0) > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5 pt-0.5", children: [
2290
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-medium text-muted-foreground", children: "Next you could ask" }),
2671
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-medium text-muted-foreground", children: T.nextYouCouldAsk }),
2291
2672
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1.5", children: (message.followUps ?? []).map((question) => /* @__PURE__ */ jsxRuntime.jsxs(
2292
2673
  "button",
2293
2674
  {
@@ -2349,6 +2730,7 @@ function ErrorBanner({
2349
2730
  );
2350
2731
  }
2351
2732
  function PromptCarousel({
2733
+ strings: T,
2352
2734
  prompts,
2353
2735
  onPrompt,
2354
2736
  disabled
@@ -2363,6 +2745,11 @@ function PromptCarousel({
2363
2745
  },
2364
2746
  [count]
2365
2747
  );
2748
+ const swipe = useSwipe({
2749
+ onSwipeLeft: () => go(1),
2750
+ onSwipeRight: () => go(-1),
2751
+ enabled: count > 1
2752
+ });
2366
2753
  React.useEffect(() => {
2367
2754
  if (paused || disabled || count < 2) return;
2368
2755
  if (typeof window !== "undefined" && window.matchMedia?.("(prefers-reduced-motion: reduce)").matches) {
@@ -2375,7 +2762,7 @@ function PromptCarousel({
2375
2762
  return /* @__PURE__ */ jsxRuntime.jsxs(
2376
2763
  "div",
2377
2764
  {
2378
- className: "flex min-w-0 items-center gap-1.5",
2765
+ className: "flex min-w-0 touch-pan-y items-center gap-1.5",
2379
2766
  role: "group",
2380
2767
  "aria-roledescription": "carousel",
2381
2768
  "aria-label": "Example questions",
@@ -2383,14 +2770,15 @@ function PromptCarousel({
2383
2770
  onMouseLeave: () => setPaused(false),
2384
2771
  onFocusCapture: () => setPaused(true),
2385
2772
  onBlurCapture: () => setPaused(false),
2773
+ ...swipe,
2386
2774
  children: [
2387
2775
  count > 1 ? /* @__PURE__ */ jsxRuntime.jsx(
2388
2776
  "button",
2389
2777
  {
2390
2778
  type: "button",
2391
- "aria-label": "Previous suggestion",
2779
+ "aria-label": T.prevSuggestion,
2392
2780
  onClick: () => go(-1),
2393
- 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",
2781
+ 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",
2394
2782
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { className: "h-4 w-4" })
2395
2783
  }
2396
2784
  ) : null,
@@ -2417,7 +2805,7 @@ function PromptCarousel({
2417
2805
  "button",
2418
2806
  {
2419
2807
  type: "button",
2420
- "aria-label": "Next suggestion",
2808
+ "aria-label": T.nextSuggestion,
2421
2809
  onClick: () => go(1),
2422
2810
  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",
2423
2811
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "h-4 w-4" })
@@ -2428,6 +2816,7 @@ function PromptCarousel({
2428
2816
  );
2429
2817
  }
2430
2818
  function ProductStrip({
2819
+ strings: T,
2431
2820
  products,
2432
2821
  focusProduct,
2433
2822
  onFocus
@@ -2462,7 +2851,7 @@ function ProductStrip({
2462
2851
  "aria-pressed": focusProduct === null,
2463
2852
  onClick: () => onFocus(null),
2464
2853
  className: chipClass(focusProduct === null),
2465
- children: "All products"
2854
+ children: T.allProducts
2466
2855
  }
2467
2856
  ),
2468
2857
  products.map((product) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -2491,7 +2880,7 @@ function ProductStrip({
2491
2880
  "aria-expanded": expanded,
2492
2881
  onClick: () => setExpanded((v) => !v),
2493
2882
  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",
2494
- children: expanded ? "Show less" : `All ${products.length}`
2883
+ children: expanded ? T.showLess : `${T.showAll} ${products.length}`
2495
2884
  }
2496
2885
  ) : null
2497
2886
  ]
@@ -2599,6 +2988,7 @@ function DisclaimerDialog({
2599
2988
  );
2600
2989
  }
2601
2990
  function WelcomeState({
2991
+ strings: T,
2602
2992
  title,
2603
2993
  body,
2604
2994
  prompts,
@@ -2608,43 +2998,45 @@ function WelcomeState({
2608
2998
  onFocus,
2609
2999
  disabled
2610
3000
  }) {
2611
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto w-full max-w-3xl px-4 py-8 sm:py-12", children: [
2612
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
3001
+ return /* @__PURE__ */ jsxRuntime.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: [
3002
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-rise text-center", children: [
2613
3003
  /* @__PURE__ */ jsxRuntime.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: [
2614
3004
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "h-3.5 w-3.5" }),
2615
- "AI answers, grounded in our documentation"
3005
+ T.badge
2616
3006
  ] }),
2617
3007
  /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "mt-4 text-balance break-words text-2xl font-bold tracking-tight sm:text-4xl", children: title }),
2618
3008
  /* @__PURE__ */ jsxRuntime.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 })
2619
3009
  ] }),
2620
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "mt-7 grid gap-2.5 sm:grid-cols-3", children: CAPABILITIES.map(({ icon: Icon, title: capTitle, body: capBody }) => /* @__PURE__ */ jsxRuntime.jsxs(
3010
+ /* @__PURE__ */ jsxRuntime.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__ */ jsxRuntime.jsxs(
2621
3011
  "li",
2622
3012
  {
2623
- className: "rounded-xl border border-border/70 bg-card/60 p-3.5 text-left transition-colors hover:border-border",
3013
+ 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",
2624
3014
  children: [
2625
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mb-2.5 flex h-8 w-8 items-center justify-center rounded-lg bg-primary/10 text-primary", children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "h-4 w-4" }) }),
2626
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-semibold text-card-foreground", children: capTitle }),
2627
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs leading-relaxed text-muted-foreground", children: capBody })
3015
+ /* @__PURE__ */ jsxRuntime.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__ */ jsxRuntime.jsx(Icon, { className: "h-3.5 w-3.5 sm:h-4 sm:w-4" }) }),
3016
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[11px] font-semibold leading-tight text-card-foreground sm:text-sm sm:leading-normal", children: T.capabilities[i] ?? "" }),
3017
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 hidden text-xs leading-relaxed text-muted-foreground sm:block", children: capBody })
2628
3018
  ]
2629
3019
  },
2630
- capTitle
3020
+ i
2631
3021
  )) }),
2632
- prompts.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-8", children: [
2633
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: "Try asking" }),
3022
+ prompts.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-rise boff-explore-rise-2 mt-8", children: [
3023
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.tryAsking }),
2634
3024
  /* @__PURE__ */ jsxRuntime.jsx(
2635
3025
  PromptCarousel,
2636
3026
  {
3027
+ strings: T,
2637
3028
  prompts,
2638
3029
  onPrompt,
2639
3030
  disabled
2640
3031
  }
2641
3032
  )
2642
3033
  ] }) : null,
2643
- products.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-6", children: [
2644
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: "Focus on a product" }),
3034
+ products.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-rise boff-explore-rise-3 mt-6", children: [
3035
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.focusProduct }),
2645
3036
  /* @__PURE__ */ jsxRuntime.jsx(
2646
3037
  ProductStrip,
2647
3038
  {
3039
+ strings: T,
2648
3040
  products,
2649
3041
  focusProduct,
2650
3042
  onFocus
@@ -2663,7 +3055,8 @@ function ExplorePage({
2663
3055
  onNavigate,
2664
3056
  onSend,
2665
3057
  welcomeTitle,
2666
- welcomeBody
3058
+ welcomeBody,
3059
+ locale
2667
3060
  }) {
2668
3061
  const pageUrl = React.useMemo(
2669
3062
  () => typeof window === "undefined" ? void 0 : window.location.href,
@@ -2707,6 +3100,12 @@ function ExplorePage({
2707
3100
  }
2708
3101
  });
2709
3102
  speechStopRef.current = speech.stop;
3103
+ const activeLocale = React.useMemo(
3104
+ () => resolveExploreLocale(locale),
3105
+ [locale]
3106
+ );
3107
+ const T = React.useMemo(() => exploreStrings(activeLocale), [activeLocale]);
3108
+ const rtl = isRtlLocale(activeLocale);
2710
3109
  const [disclaimerOpen, setDisclaimerOpen] = React.useState(false);
2711
3110
  const [shareLabel, setShareLabel] = React.useState("Share");
2712
3111
  const [shareUrl, setShareUrl] = React.useState(null);
@@ -2821,6 +3220,8 @@ function ExplorePage({
2821
3220
  {
2822
3221
  "data-boff-explore": "page",
2823
3222
  "data-phase": phase,
3223
+ "data-locale": activeLocale,
3224
+ dir: rtl ? "rtl" : void 0,
2824
3225
  className: cn(
2825
3226
  "flex w-full min-w-0 flex-col overflow-x-hidden bg-background text-foreground",
2826
3227
  heightMode === "auto" && "min-h-[70vh]",
@@ -2982,10 +3383,17 @@ function ExplorePage({
2982
3383
  role: "log",
2983
3384
  "aria-live": "polite",
2984
3385
  "aria-label": "Explore conversation",
2985
- className: "boff-explore-scroll min-h-0 min-w-0 flex-1 overflow-y-auto overflow-x-hidden",
3386
+ className: cn(
3387
+ "boff-explore-scroll min-h-0 min-w-0 flex-1 overflow-y-auto overflow-x-hidden",
3388
+ // Only while the welcome state is showing: a flex column is what lets its
3389
+ // `my-auto` centre the block on a tall screen. The transcript must NOT be a flex
3390
+ // column — that would fight the natural top-down flow of messages.
3391
+ showWelcome && "flex flex-col"
3392
+ ),
2986
3393
  children: showWelcome ? /* @__PURE__ */ jsxRuntime.jsx(
2987
3394
  WelcomeState,
2988
3395
  {
3396
+ strings: T,
2989
3397
  title: resolvedTitle,
2990
3398
  body: resolvedBody,
2991
3399
  prompts,
@@ -2999,6 +3407,7 @@ function ExplorePage({
2999
3407
  (message) => message.role === "USER" ? /* @__PURE__ */ jsxRuntime.jsx(UserBubble, { message }, message.id) : /* @__PURE__ */ jsxRuntime.jsx(
3000
3408
  AssistantBubble,
3001
3409
  {
3410
+ strings: T,
3002
3411
  message,
3003
3412
  activity,
3004
3413
  onNavigate,
@@ -3035,6 +3444,7 @@ function ExplorePage({
3035
3444
  {
3036
3445
  className: cn(
3037
3446
  "flex min-w-0 items-end gap-2 rounded-2xl border bg-card p-2 shadow-sm transition-all",
3447
+ busy && "boff-explore-busy",
3038
3448
  overLimit ? "border-destructive/60" : "border-border focus-within:border-primary/40 focus-within:ring-1 focus-within:ring-ring"
3039
3449
  ),
3040
3450
  children: [
@@ -3054,7 +3464,9 @@ function ExplorePage({
3054
3464
  composingRef.current = false;
3055
3465
  },
3056
3466
  "aria-label": "Ask a question",
3057
- 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",
3467
+ placeholder: composerDisabled ? phase === "limited" ? "Message limit reached \u2014 please try again later" : "Explore is unavailable right now" : focusedProductName ? fill(T.placeholderProduct, {
3468
+ product: focusedProductName
3469
+ }) : T.placeholder,
3058
3470
  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"
3059
3471
  }
3060
3472
  ),
@@ -3067,9 +3479,9 @@ function ExplorePage({
3067
3479
  size: "icon",
3068
3480
  variant: speech.listening ? "default" : "ghost",
3069
3481
  disabled: composerDisabled,
3070
- "aria-label": speech.listening ? "Stop dictating" : "Dictate your question",
3482
+ "aria-label": speech.listening ? T.stopDictating : T.dictate,
3071
3483
  "aria-pressed": speech.listening,
3072
- title: speech.listening ? "Stop dictating" : "Dictate your question",
3484
+ title: speech.listening ? T.stopDictating : T.dictate,
3073
3485
  onClick: speech.toggle,
3074
3486
  className: cn(speech.listening && "animate-pulse"),
3075
3487
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Mic, { className: "h-4 w-4" })
@@ -3169,7 +3581,7 @@ function ExplorePage({
3169
3581
  )
3170
3582
  ] }) : null,
3171
3583
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-muted-foreground", children: [
3172
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate", children: "Grounded in our docs \u2014 check anything important." }),
3584
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate", children: T.disclaimerShort }),
3173
3585
  /* @__PURE__ */ jsxRuntime.jsx(
3174
3586
  "button",
3175
3587
  {
@@ -3177,7 +3589,7 @@ function ExplorePage({
3177
3589
  "data-boff-explore": "disclaimer",
3178
3590
  onClick: () => setDisclaimerOpen(true),
3179
3591
  className: "shrink-0 underline underline-offset-2 transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
3180
- children: "Disclaimer"
3592
+ children: T.disclaimer
3181
3593
  }
3182
3594
  )
3183
3595
  ] })