@burdenoff/website-sdk 2026.922.3 → 2026.922.4

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.
@@ -103,6 +103,20 @@ var EN = {
103
103
  nextSuggestion: "Next suggestion",
104
104
  conceptIllustration: "Concept illustration",
105
105
  opensInNewTab: "opens in a new tab",
106
+ conceptStripTitle: "Or start from a concept",
107
+ conceptStripLabel: "Concepts you can ask about",
108
+ conceptAsk: "Ask about {title} in {product}",
109
+ conceptAskQuestion: "How does {title} work in {product}?",
110
+ copyAnswer: "Copy answer",
111
+ copyFailed: "Couldn't copy",
112
+ groundedIn: "What this answer is based on",
113
+ sourceCountOne: "1 source",
114
+ sourceCountMany: "{count} sources",
115
+ sourceKindConcept: "Concept",
116
+ sourceKindDocs: "Documentation",
117
+ sourceKindPricing: "Pricing",
118
+ sourceKindUseCase: "Use case",
119
+ sourceKindPage: "Product page",
106
120
  seoTitle: "Describe a problem, get an answer",
107
121
  seoDescription: "Describe the problem you're facing in your own words and get an answer drawn from our product documentation, with links to the exact pages it came from.",
108
122
  seoDescriptionProduct: "Describe the problem you're facing in your own words and get an answer drawn from {product}'s documentation \u2014 and every other product we build \u2014 with links to the exact pages it came from.",
@@ -171,6 +185,20 @@ var ZH = {
171
185
  nextSuggestion: "\u4E0B\u4E00\u4E2A\u5EFA\u8BAE",
172
186
  conceptIllustration: "\u6982\u5FF5\u793A\u610F\u56FE",
173
187
  opensInNewTab: "\u5728\u65B0\u6807\u7B7E\u9875\u4E2D\u6253\u5F00",
188
+ conceptStripTitle: "\u6216\u8005\u4ECE\u4E00\u4E2A\u6982\u5FF5\u5F00\u59CB",
189
+ conceptStripLabel: "\u4F60\u53EF\u4EE5\u8BE2\u95EE\u7684\u6982\u5FF5",
190
+ conceptAsk: "\u8BE2\u95EE {product} \u4E2D\u7684 {title}",
191
+ conceptAskQuestion: "{product} \u7684 {title} \u662F\u600E\u4E48\u8FD0\u4F5C\u7684\uFF1F",
192
+ copyAnswer: "\u590D\u5236\u56DE\u7B54",
193
+ copyFailed: "\u590D\u5236\u5931\u8D25",
194
+ groundedIn: "\u8FD9\u4E2A\u56DE\u7B54\u7684\u4F9D\u636E",
195
+ sourceCountOne: "1 \u4E2A\u6765\u6E90",
196
+ sourceCountMany: "{count} \u4E2A\u6765\u6E90",
197
+ sourceKindConcept: "\u6982\u5FF5",
198
+ sourceKindDocs: "\u6587\u6863",
199
+ sourceKindPricing: "\u4EF7\u683C",
200
+ sourceKindUseCase: "\u5E94\u7528\u573A\u666F",
201
+ sourceKindPage: "\u4EA7\u54C1\u9875\u9762",
174
202
  seoTitle: "\u63CF\u8FF0\u95EE\u9898\uFF0C\u83B7\u5F97\u7B54\u6848",
175
203
  seoDescription: "\u7528\u4F60\u81EA\u5DF1\u7684\u8BDD\u63CF\u8FF0\u9047\u5230\u7684\u95EE\u9898\uFF0C\u5373\u53EF\u83B7\u5F97\u6765\u81EA\u6211\u4EEC\u4EA7\u54C1\u6587\u6863\u7684\u56DE\u7B54\uFF0C\u5E76\u9644\u4E0A\u7B54\u6848\u51FA\u5904\u7684\u9875\u9762\u94FE\u63A5\u3002",
176
204
  seoDescriptionProduct: "\u7528\u4F60\u81EA\u5DF1\u7684\u8BDD\u63CF\u8FF0\u9047\u5230\u7684\u95EE\u9898\uFF0C\u5373\u53EF\u83B7\u5F97\u6765\u81EA {product} \u53CA\u6211\u4EEC\u5176\u4ED6\u4EA7\u54C1\u6587\u6863\u7684\u56DE\u7B54\uFF0C\u5E76\u9644\u4E0A\u7B54\u6848\u51FA\u5904\u7684\u9875\u9762\u94FE\u63A5\u3002",
@@ -235,6 +263,20 @@ var HI = {
235
263
  nextSuggestion: "\u0905\u0917\u0932\u093E \u0938\u0941\u091D\u093E\u0935",
236
264
  conceptIllustration: "\u0905\u0935\u0927\u093E\u0930\u0923\u093E \u091A\u093F\u0924\u094D\u0930\u0923",
237
265
  opensInNewTab: "\u0928\u090F \u091F\u0948\u092C \u092E\u0947\u0902 \u0916\u0941\u0932\u0924\u093E \u0939\u0948",
266
+ conceptStripTitle: "\u092F\u093E \u0915\u093F\u0938\u0940 \u0905\u0935\u0927\u093E\u0930\u0923\u093E \u0938\u0947 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902",
267
+ conceptStripLabel: "\u091C\u093F\u0928 \u0905\u0935\u0927\u093E\u0930\u0923\u093E\u0913\u0902 \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u0906\u092A \u092A\u0942\u091B \u0938\u0915\u0924\u0947 \u0939\u0948\u0902",
268
+ conceptAsk: "{product} \u092E\u0947\u0902 {title} \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u092A\u0942\u091B\u0947\u0902",
269
+ conceptAskQuestion: "{product} \u092E\u0947\u0902 {title} \u0915\u0948\u0938\u0947 \u0915\u093E\u092E \u0915\u0930\u0924\u093E \u0939\u0948?",
270
+ copyAnswer: "\u0909\u0924\u094D\u0924\u0930 \u0915\u0949\u092A\u0940 \u0915\u0930\u0947\u0902",
271
+ copyFailed: "\u0915\u0949\u092A\u0940 \u0928\u0939\u0940\u0902 \u0939\u094B \u0938\u0915\u093E",
272
+ groundedIn: "\u092F\u0939 \u0909\u0924\u094D\u0924\u0930 \u0915\u093F\u0938 \u092A\u0930 \u0906\u0927\u093E\u0930\u093F\u0924 \u0939\u0948",
273
+ sourceCountOne: "1 \u0938\u094D\u0930\u094B\u0924",
274
+ sourceCountMany: "{count} \u0938\u094D\u0930\u094B\u0924",
275
+ sourceKindConcept: "\u0905\u0935\u0927\u093E\u0930\u0923\u093E",
276
+ sourceKindDocs: "\u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C",
277
+ sourceKindPricing: "\u092E\u0942\u0932\u094D\u092F",
278
+ sourceKindUseCase: "\u0909\u092A\u092F\u094B\u0917 \u0915\u093E \u0909\u0926\u093E\u0939\u0930\u0923",
279
+ sourceKindPage: "\u0909\u0924\u094D\u092A\u093E\u0926 \u092A\u0947\u091C",
238
280
  seoTitle: "\u0938\u092E\u0938\u094D\u092F\u093E \u092C\u0924\u093E\u090F\u0902, \u091C\u0935\u093E\u092C \u092A\u093E\u090F\u0902",
239
281
  seoDescription: "\u0905\u092A\u0928\u0940 \u0938\u092E\u0938\u094D\u092F\u093E \u0905\u092A\u0928\u0947 \u0936\u092C\u094D\u0926\u094B\u0902 \u092E\u0947\u0902 \u092C\u0924\u093E\u090F\u0902 \u0914\u0930 \u0939\u092E\u093E\u0930\u0947 \u0909\u0924\u094D\u092A\u093E\u0926 \u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C\u094B\u0902 \u0938\u0947 \u0932\u093F\u092F\u093E \u0917\u092F\u093E \u091C\u0935\u093E\u092C \u092A\u093E\u090F\u0902, \u0938\u093E\u0925 \u092E\u0947\u0902 \u0909\u0928\u094D\u0939\u0940\u0902 \u092A\u0928\u094D\u0928\u094B\u0902 \u0915\u0947 \u0932\u093F\u0902\u0915 \u091C\u0939\u093E\u0901 \u0938\u0947 \u0935\u0939 \u0906\u092F\u093E \u0939\u0948\u0964",
240
282
  seoDescriptionProduct: "\u0905\u092A\u0928\u0940 \u0938\u092E\u0938\u094D\u092F\u093E \u0905\u092A\u0928\u0947 \u0936\u092C\u094D\u0926\u094B\u0902 \u092E\u0947\u0902 \u092C\u0924\u093E\u090F\u0902 \u0914\u0930 {product} \u0924\u0925\u093E \u0939\u092E\u093E\u0930\u0947 \u092C\u093E\u0915\u0940 \u0909\u0924\u094D\u092A\u093E\u0926\u094B\u0902 \u0915\u0947 \u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C\u094B\u0902 \u0938\u0947 \u0932\u093F\u092F\u093E \u0917\u092F\u093E \u091C\u0935\u093E\u092C \u092A\u093E\u090F\u0902, \u0938\u093E\u0925 \u092E\u0947\u0902 \u0909\u0928\u094D\u0939\u0940\u0902 \u092A\u0928\u094D\u0928\u094B\u0902 \u0915\u0947 \u0932\u093F\u0902\u0915 \u091C\u0939\u093E\u0901 \u0938\u0947 \u0935\u0939 \u0906\u092F\u093E \u0939\u0948\u0964",
@@ -303,6 +345,20 @@ var ES = {
303
345
  nextSuggestion: "Sugerencia siguiente",
304
346
  conceptIllustration: "Ilustraci\xF3n del concepto",
305
347
  opensInNewTab: "se abre en una pesta\xF1a nueva",
348
+ conceptStripTitle: "O empieza por un concepto",
349
+ conceptStripLabel: "Conceptos sobre los que puedes preguntar",
350
+ conceptAsk: "Preguntar por {title} en {product}",
351
+ conceptAskQuestion: "\xBFC\xF3mo funciona {title} en {product}?",
352
+ copyAnswer: "Copiar respuesta",
353
+ copyFailed: "No se pudo copiar",
354
+ groundedIn: "En qu\xE9 se basa esta respuesta",
355
+ sourceCountOne: "1 fuente",
356
+ sourceCountMany: "{count} fuentes",
357
+ sourceKindConcept: "Concepto",
358
+ sourceKindDocs: "Documentaci\xF3n",
359
+ sourceKindPricing: "Precios",
360
+ sourceKindUseCase: "Caso de uso",
361
+ sourceKindPage: "P\xE1gina de producto",
306
362
  seoTitle: "Describe un problema y obt\xE9n una respuesta",
307
363
  seoDescription: "Describe con tus palabras el problema que tienes y recibe una respuesta extra\xEDda de la documentaci\xF3n de nuestros productos, con enlaces a las p\xE1ginas exactas de las que procede.",
308
364
  seoDescriptionProduct: "Describe con tus palabras el problema que tienes y recibe una respuesta extra\xEDda de la documentaci\xF3n de {product} y del resto de nuestros productos, con enlaces a las p\xE1ginas exactas de las que procede.",
@@ -371,6 +427,20 @@ var AR = {
371
427
  nextSuggestion: "\u0627\u0644\u0627\u0642\u062A\u0631\u0627\u062D \u0627\u0644\u062A\u0627\u0644\u064A",
372
428
  conceptIllustration: "\u0631\u0633\u0645 \u062A\u0648\u0636\u064A\u062D\u064A \u0644\u0644\u0645\u0641\u0647\u0648\u0645",
373
429
  opensInNewTab: "\u064A\u064F\u0641\u062A\u062D \u0641\u064A \u0639\u0644\u0627\u0645\u0629 \u062A\u0628\u0648\u064A\u0628 \u062C\u062F\u064A\u062F\u0629",
430
+ conceptStripTitle: "\u0623\u0648 \u0627\u0628\u062F\u0623 \u0645\u0646 \u0645\u0641\u0647\u0648\u0645",
431
+ conceptStripLabel: "\u0645\u0641\u0627\u0647\u064A\u0645 \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u0633\u0624\u0627\u0644 \u0639\u0646\u0647\u0627",
432
+ conceptAsk: "\u0627\u0633\u0623\u0644 \u0639\u0646 {title} \u0641\u064A {product}",
433
+ conceptAskQuestion: "\u0643\u064A\u0641 \u064A\u0639\u0645\u0644 {title} \u0641\u064A {product}\u061F",
434
+ copyAnswer: "\u0646\u0633\u062E \u0627\u0644\u0625\u062C\u0627\u0628\u0629",
435
+ copyFailed: "\u062A\u0639\u0630\u0651\u0631 \u0627\u0644\u0646\u0633\u062E",
436
+ groundedIn: "\u0639\u0644\u0649 \u0645\u0627\u0630\u0627 \u062A\u0633\u062A\u0646\u062F \u0647\u0630\u0647 \u0627\u0644\u0625\u062C\u0627\u0628\u0629",
437
+ sourceCountOne: "\u0645\u0635\u062F\u0631 \u0648\u0627\u062D\u062F",
438
+ sourceCountMany: "{count} \u0645\u0635\u0627\u062F\u0631",
439
+ sourceKindConcept: "\u0645\u0641\u0647\u0648\u0645",
440
+ sourceKindDocs: "\u0627\u0644\u062A\u0648\u062B\u064A\u0642",
441
+ sourceKindPricing: "\u0627\u0644\u0623\u0633\u0639\u0627\u0631",
442
+ sourceKindUseCase: "\u062D\u0627\u0644\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645",
443
+ sourceKindPage: "\u0635\u0641\u062D\u0629 \u0627\u0644\u0645\u0646\u062A\u062C",
374
444
  seoTitle: "\u0635\u0641 \u0645\u0634\u0643\u0644\u062A\u0643 \u0648\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 \u0625\u062C\u0627\u0628\u0629",
375
445
  seoDescription: "\u0635\u0641 \u0627\u0644\u0645\u0634\u0643\u0644\u0629 \u0627\u0644\u062A\u064A \u062A\u0648\u0627\u062C\u0647\u0647\u0627 \u0628\u0643\u0644\u0645\u0627\u062A\u0643 \u0648\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 \u0625\u062C\u0627\u0628\u0629 \u0645\u0633\u062A\u0645\u062F\u0629 \u0645\u0646 \u0648\u062B\u0627\u0626\u0642 \u0645\u0646\u062A\u062C\u0627\u062A\u0646\u0627\u060C \u0645\u0639 \u0631\u0648\u0627\u0628\u0637 \u0625\u0644\u0649 \u0627\u0644\u0635\u0641\u062D\u0627\u062A \u0627\u0644\u062A\u064A \u062C\u0627\u0621\u062A \u0645\u0646\u0647\u0627.",
376
446
  seoDescriptionProduct: "\u0635\u0641 \u0627\u0644\u0645\u0634\u0643\u0644\u0629 \u0627\u0644\u062A\u064A \u062A\u0648\u0627\u062C\u0647\u0647\u0627 \u0628\u0643\u0644\u0645\u0627\u062A\u0643 \u0648\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 \u0625\u062C\u0627\u0628\u0629 \u0645\u0633\u062A\u0645\u062F\u0629 \u0645\u0646 \u0648\u062B\u0627\u0626\u0642 {product} \u0648\u0628\u0642\u064A\u0629 \u0645\u0646\u062A\u062C\u0627\u062A\u0646\u0627\u060C \u0645\u0639 \u0631\u0648\u0627\u0628\u0637 \u0625\u0644\u0649 \u0627\u0644\u0635\u0641\u062D\u0627\u062A \u0627\u0644\u062A\u064A \u062C\u0627\u0621\u062A \u0645\u0646\u0647\u0627.",
@@ -439,6 +509,20 @@ var TA = {
439
509
  nextSuggestion: "\u0B85\u0B9F\u0BC1\u0BA4\u0BCD\u0BA4 \u0BAA\u0BB0\u0BBF\u0BA8\u0BCD\u0BA4\u0BC1\u0BB0\u0BC8",
440
510
  conceptIllustration: "\u0B95\u0BB0\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1 \u0BB5\u0BBF\u0BB3\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BAE\u0BCD",
441
511
  opensInNewTab: "\u0BAA\u0BC1\u0BA4\u0BBF\u0BAF \u0BA4\u0BBE\u0BB5\u0BB2\u0BBF\u0BB2\u0BCD \u0BA4\u0BBF\u0BB1\u0B95\u0BCD\u0B95\u0BC1\u0BAE\u0BCD",
512
+ conceptStripTitle: "\u0B85\u0BB2\u0BCD\u0BB2\u0BA4\u0BC1 \u0B92\u0BB0\u0BC1 \u0B95\u0BB0\u0BC1\u0BA4\u0BCD\u0BA4\u0BBF\u0BB2\u0BBF\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4\u0BC1 \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
513
+ conceptStripLabel: "\u0BA8\u0BC0\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B95\u0BC7\u0B9F\u0BCD\u0B95\u0B95\u0BCD\u0B95\u0BC2\u0B9F\u0BBF\u0BAF \u0B95\u0BB0\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BB3\u0BCD",
514
+ conceptAsk: "{product} \u0B87\u0BB2\u0BCD {title} \u0BAA\u0BB1\u0BCD\u0BB1\u0BBF\u0B95\u0BCD \u0B95\u0BC7\u0BB3\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
515
+ conceptAskQuestion: "{product} \u0B87\u0BB2\u0BCD {title} \u0B8E\u0BAA\u0BCD\u0BAA\u0B9F\u0BBF \u0BB5\u0BC7\u0BB2\u0BC8 \u0B9A\u0BC6\u0BAF\u0BCD\u0B95\u0BBF\u0BB1\u0BA4\u0BC1?",
516
+ copyAnswer: "\u0BAA\u0BA4\u0BBF\u0BB2\u0BC8 \u0BA8\u0B95\u0BB2\u0BC6\u0B9F\u0BC1",
517
+ copyFailed: "\u0BA8\u0B95\u0BB2\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95 \u0BAE\u0BC1\u0B9F\u0BBF\u0BAF\u0BB5\u0BBF\u0BB2\u0BCD\u0BB2\u0BC8",
518
+ groundedIn: "\u0B87\u0BA8\u0BCD\u0BA4\u0BAA\u0BCD \u0BAA\u0BA4\u0BBF\u0BB2\u0BCD \u0B8E\u0BA4\u0BC8 \u0B85\u0B9F\u0BBF\u0BAA\u0BCD\u0BAA\u0B9F\u0BC8\u0BAF\u0BBE\u0B95\u0B95\u0BCD \u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BA4\u0BC1",
519
+ sourceCountOne: "1 \u0BAE\u0BC2\u0BB2\u0BAE\u0BCD",
520
+ sourceCountMany: "{count} \u0BAE\u0BC2\u0BB2\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
521
+ sourceKindConcept: "\u0B95\u0BB0\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1",
522
+ sourceKindDocs: "\u0B86\u0BB5\u0BA3\u0BAE\u0BCD",
523
+ sourceKindPricing: "\u0BB5\u0BBF\u0BB2\u0BC8",
524
+ sourceKindUseCase: "\u0BAA\u0BAF\u0BA9\u0BCD\u0BAA\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1 \u0BA8\u0BBF\u0BB2\u0BC8",
525
+ sourceKindPage: "\u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\u0BAA\u0BCD \u0BAA\u0B95\u0BCD\u0B95\u0BAE\u0BCD",
442
526
  seoTitle: "\u0B9A\u0BBF\u0B95\u0BCD\u0B95\u0BB2\u0BC8 \u0BB5\u0BBF\u0BB5\u0BB0\u0BBF\u0BAF\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD, \u0BAA\u0BA4\u0BBF\u0BB2\u0BCD \u0BAA\u0BC6\u0BB1\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
443
527
  seoDescription: "\u0BA8\u0BC0\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0B95\u0BCA\u0BB3\u0BCD\u0BB3\u0BC1\u0BAE\u0BCD \u0B9A\u0BBF\u0B95\u0BCD\u0B95\u0BB2\u0BC8 \u0B89\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B9A\u0BCA\u0BA8\u0BCD\u0BA4 \u0BB5\u0BBE\u0BB0\u0BCD\u0BA4\u0BCD\u0BA4\u0BC8\u0B95\u0BB3\u0BBF\u0BB2\u0BCD \u0BB5\u0BBF\u0BB5\u0BB0\u0BBF\u0BAF\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD; \u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1 \u0B86\u0BB5\u0BA3\u0B99\u0BCD\u0B95\u0BB3\u0BBF\u0BB2\u0BBF\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4\u0BC1 \u0BAA\u0BA4\u0BBF\u0BB2\u0BCD \u0B95\u0BBF\u0B9F\u0BC8\u0B95\u0BCD\u0B95\u0BC1\u0BAE\u0BCD, \u0B85\u0BA4\u0BC1 \u0BB5\u0BA8\u0BCD\u0BA4 \u0BAA\u0B95\u0BCD\u0B95\u0B99\u0BCD\u0B95\u0BB3\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0B87\u0BA3\u0BC8\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BC1\u0B9F\u0BA9\u0BCD.",
444
528
  seoDescriptionProduct: "{product} \u0BAE\u0BB1\u0BCD\u0BB1\u0BC1\u0BAE\u0BCD \u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0BAA\u0BBF\u0BB1 \u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BBF\u0BA9\u0BCD \u0B86\u0BB5\u0BA3\u0B99\u0BCD\u0B95\u0BB3\u0BBF\u0BB2\u0BBF\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4\u0BC1 \u0BAA\u0BA4\u0BBF\u0BB2\u0BCD \u0BAA\u0BC6\u0BB1, \u0BA8\u0BC0\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0B95\u0BCA\u0BB3\u0BCD\u0BB3\u0BC1\u0BAE\u0BCD \u0B9A\u0BBF\u0B95\u0BCD\u0B95\u0BB2\u0BC8 \u0B89\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B9A\u0BCA\u0BA8\u0BCD\u0BA4 \u0BB5\u0BBE\u0BB0\u0BCD\u0BA4\u0BCD\u0BA4\u0BC8\u0B95\u0BB3\u0BBF\u0BB2\u0BCD \u0BB5\u0BBF\u0BB5\u0BB0\u0BBF\u0BAF\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u2014 \u0B85\u0BA4\u0BC1 \u0BB5\u0BA8\u0BCD\u0BA4 \u0BAA\u0B95\u0BCD\u0B95\u0B99\u0BCD\u0B95\u0BB3\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0B87\u0BA3\u0BC8\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BC1\u0B9F\u0BA9\u0BCD.",
@@ -540,11 +624,9 @@ var EXPLORE_OWN_MESSAGE_FIELDS = (
540
624
  }
541
625
  `
542
626
  );
543
- var EXPLORE_CATALOG_QUERY = (
627
+ var EXPLORE_CATALOG_ESTABLISHED_FIELDS = (
544
628
  /* GraphQL */
545
629
  `
546
- query ExploreCatalog($productSlug: String) {
547
- exploreCatalog(productSlug: $productSlug) {
548
630
  enabled
549
631
  products {
550
632
  slug
@@ -562,11 +644,35 @@ var EXPLORE_CATALOG_QUERY = (
562
644
  historyTurns
563
645
  }
564
646
  captchaRequired
565
- recaptchaSiteKey
647
+ recaptchaSiteKey`
648
+ );
649
+ var EXPLORE_CATALOG_HIGHLIGHT_FIELD = (
650
+ /* GraphQL */
651
+ `
652
+ conceptHighlights {
653
+ product
654
+ productName
655
+ title
656
+ url
657
+ imageUrl
658
+ alt
659
+ }`
660
+ );
661
+ function exploreCatalogDocument(extraFields) {
662
+ return (
663
+ /* GraphQL */
664
+ `
665
+ query ExploreCatalog($productSlug: String) {
666
+ exploreCatalog(productSlug: $productSlug) {${EXPLORE_CATALOG_ESTABLISHED_FIELDS}${extraFields}
566
667
  }
567
668
  }
568
669
  `
670
+ );
671
+ }
672
+ var EXPLORE_CATALOG_QUERY = exploreCatalogDocument(
673
+ EXPLORE_CATALOG_HIGHLIGHT_FIELD
569
674
  );
675
+ var EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS = exploreCatalogDocument("");
570
676
  var EXPLORE_MESSAGE_QUERY = (
571
677
  /* GraphQL */
572
678
  `
@@ -1369,7 +1475,12 @@ function buildFallbackCatalog(examplePrompts, welcome) {
1369
1475
  welcomeBody: welcome?.body ?? FALLBACK_WELCOME_BODY,
1370
1476
  limits: FALLBACK_EXPLORE_LIMITS,
1371
1477
  captchaRequired: false,
1372
- recaptchaSiteKey: null
1478
+ recaptchaSiteKey: null,
1479
+ // Empty, and deliberately not synthesised from `ECOSYSTEM_PRODUCTS`: a concept highlight
1480
+ // needs a real published illustration URL, and this SDK has no registry of them. An
1481
+ // invented path would render 38 broken frames on the one screen every prerender captures.
1482
+ // The strip renders nothing at all when the list is empty, which is the honest fallback.
1483
+ conceptHighlights: []
1373
1484
  };
1374
1485
  }
1375
1486
  function normalizeCatalog(raw, fallback) {
@@ -1386,9 +1497,27 @@ function normalizeCatalog(raw, fallback) {
1386
1497
  historyTurns: raw.limits?.historyTurns || fallback.limits.historyTurns
1387
1498
  },
1388
1499
  captchaRequired: raw.captchaRequired === true,
1389
- recaptchaSiteKey: raw.recaptchaSiteKey ?? null
1500
+ recaptchaSiteKey: raw.recaptchaSiteKey ?? null,
1501
+ // `[ExploreConceptHighlight!]!` on the wire, so a gateway that KNOWS the field always
1502
+ // sends an array. The one response that arrives without it is the retry against an older
1503
+ // supergraph (`EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS`) — that gateway does not answer
1504
+ // the full document at all, it refuses it. Either way
1505
+ // `catalog.conceptHighlights.filter(...)` on `undefined` would throw inside render,
1506
+ // blanking the welcome screen over a decorative strip.
1507
+ conceptHighlights: raw.conceptHighlights?.length ? raw.conceptHighlights : fallback.conceptHighlights
1390
1508
  };
1391
1509
  }
1510
+ var CATALOG_DOCUMENT_REJECTED_CODES = /* @__PURE__ */ new Set([
1511
+ "GRAPHQL_VALIDATION_FAILED",
1512
+ "HTTP_400"
1513
+ ]);
1514
+ function catalogRejectedTheHighlightField(res) {
1515
+ if (res.data?.exploreCatalog) return false;
1516
+ return (res.errors ?? []).some((error) => {
1517
+ const code = error.extensions?.code;
1518
+ return typeof code === "string" && CATALOG_DOCUMENT_REJECTED_CODES.has(code) || error.message.includes("conceptHighlights");
1519
+ });
1520
+ }
1392
1521
  var RATE_LIMIT_CODES = /* @__PURE__ */ new Set([
1393
1522
  "RATE_LIMITED",
1394
1523
  "HTTP_429",
@@ -1728,11 +1857,19 @@ function useExploreChat(options = {}) {
1728
1857
  React.useEffect(() => {
1729
1858
  let cancelled = false;
1730
1859
  const load = async () => {
1731
- const res = await client.query(
1860
+ const variables = { productSlug: productSlug ?? null };
1861
+ let res = await client.query(
1732
1862
  EXPLORE_CATALOG_QUERY,
1733
- { productSlug: productSlug ?? null }
1863
+ variables
1734
1864
  );
1735
1865
  if (cancelled || !mountedRef.current) return;
1866
+ if (catalogRejectedTheHighlightField(res)) {
1867
+ res = await client.query(
1868
+ EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS,
1869
+ variables
1870
+ );
1871
+ if (cancelled || !mountedRef.current) return;
1872
+ }
1736
1873
  const raw = res.data?.exploreCatalog;
1737
1874
  if (res.errors?.length || !raw) {
1738
1875
  console.warn(
@@ -3027,6 +3164,122 @@ function isInlineImageAllowed(src, origins) {
3027
3164
  if (url.protocol !== "https:" || url.username || url.password) return false;
3028
3165
  return origins.has(url.origin);
3029
3166
  }
3167
+ var REFERENCE_KIND_ORDER = [
3168
+ "CONCEPT",
3169
+ "DOCS",
3170
+ "PRICING",
3171
+ "USE_CASE",
3172
+ "PAGE"
3173
+ ];
3174
+ var PRODUCT_SUBDOMAINS = [
3175
+ "alphadocs.",
3176
+ "alphaapp.",
3177
+ "docs.",
3178
+ "alpha.",
3179
+ "app.",
3180
+ "www."
3181
+ ];
3182
+ function readCatalogUrl(raw) {
3183
+ let parsed;
3184
+ try {
3185
+ parsed = new URL(raw);
3186
+ } catch {
3187
+ return null;
3188
+ }
3189
+ if (parsed.protocol !== "https:") return null;
3190
+ const host = parsed.hostname.toLowerCase();
3191
+ const prefix = PRODUCT_SUBDOMAINS.find(
3192
+ (candidate) => host.startsWith(candidate)
3193
+ );
3194
+ const apex = prefix === void 0 ? host : host.slice(prefix.length);
3195
+ const port = parsed.port ? `:${parsed.port}` : "";
3196
+ return {
3197
+ origin: `https://${apex}${port}`,
3198
+ prefix,
3199
+ pathname: parsed.pathname
3200
+ };
3201
+ }
3202
+ function referenceKindOf(url, origins) {
3203
+ const parsed = readCatalogUrl(url);
3204
+ if (parsed === null || !origins.has(parsed.origin)) return null;
3205
+ if (parsed.prefix === "docs." || parsed.prefix === "alphadocs.")
3206
+ return "DOCS";
3207
+ const segment = parsed.pathname.toLowerCase().split("/").filter(Boolean)[0] ?? "";
3208
+ if (segment === "concept" || segment === "concepts") return "CONCEPT";
3209
+ if (segment === "docs") return "DOCS";
3210
+ if (segment === "pricing" || segment === "plans") return "PRICING";
3211
+ if (segment === "use-case" || segment === "use-cases" || segment === "solutions") {
3212
+ return "USE_CASE";
3213
+ }
3214
+ return "PAGE";
3215
+ }
3216
+ function productNamesByOrigin(products) {
3217
+ const names = /* @__PURE__ */ new Map();
3218
+ for (const product of products) {
3219
+ let url;
3220
+ try {
3221
+ url = new URL(product.website);
3222
+ } catch {
3223
+ continue;
3224
+ }
3225
+ if (url.protocol !== "https:") continue;
3226
+ const apex = url.hostname.replace(/^www\./, "");
3227
+ const port = url.port ? `:${url.port}` : "";
3228
+ const key = `https://${apex}${port}`;
3229
+ if (!names.has(key)) names.set(key, product.name);
3230
+ }
3231
+ return names;
3232
+ }
3233
+ function summariseReferences(references, origins, productNames) {
3234
+ const counts = /* @__PURE__ */ new Map();
3235
+ const products = [];
3236
+ for (const reference of references) {
3237
+ const kind = referenceKindOf(reference.url, origins);
3238
+ if (kind !== null) counts.set(kind, (counts.get(kind) ?? 0) + 1);
3239
+ const parsed = readCatalogUrl(reference.url);
3240
+ const name = (parsed === null ? void 0 : productNames.get(parsed.origin)) ?? (reference.product || null);
3241
+ if (name != null && !products.includes(name)) products.push(name);
3242
+ }
3243
+ return {
3244
+ total: references.length,
3245
+ kinds: REFERENCE_KIND_ORDER.filter((kind) => counts.has(kind)).map(
3246
+ (kind) => ({ kind, count: counts.get(kind) ?? 0 })
3247
+ ),
3248
+ products
3249
+ };
3250
+ }
3251
+ var CODE_FENCE = /^\s*(?:```|~~~)/;
3252
+ function answerPlainText(markdown) {
3253
+ const lines = [];
3254
+ let inFence = false;
3255
+ for (const raw of markdown.split("\n")) {
3256
+ if (CODE_FENCE.test(raw)) {
3257
+ inFence = !inFence;
3258
+ continue;
3259
+ }
3260
+ if (inFence) {
3261
+ lines.push(raw);
3262
+ continue;
3263
+ }
3264
+ let line = raw;
3265
+ line = line.replace(/!\[[^\]]*\]\([^)\s]*(?:\s+"[^"]*")?\)/g, "");
3266
+ line = line.replace(/\[([^\]]+)\]\(([^)\s]+)(?:\s+"[^"]*")?\)/g, "$1 ($2)");
3267
+ line = line.replace(/<(https?:\/\/[^>\s]+)>/g, "$1");
3268
+ line = line.replace(/^\s{0,3}#{1,6}\s+/, "");
3269
+ line = line.replace(/^\s{0,3}>\s?/, "");
3270
+ if (/^\s{0,3}([-*_])[ \t]*(?:\1[ \t]*){2,}$/.test(line)) {
3271
+ lines.push("");
3272
+ continue;
3273
+ }
3274
+ line = line.replace(/`([^`]+)`/g, "$1");
3275
+ line = line.replace(/\*\*([^*]+)\*\*/g, "$1");
3276
+ line = line.replace(/__([^_]+)__/g, "$1");
3277
+ line = line.replace(/(^|[^*\w])\*([^*\n]+)\*(?![*\w])/g, "$1$2");
3278
+ line = line.replace(/(^|[^_\w])_([^_\n]+)_(?![_\w])/g, "$1$2");
3279
+ lines.push(line.replace(/[ \t]+$/, ""));
3280
+ }
3281
+ return lines.join("\n").replace(/\n{3,}/g, "\n\n").trim();
3282
+ }
3030
3283
  var InlineImageScopeContext = React.createContext(null);
3031
3284
  var InsideLinkContext = React.createContext(false);
3032
3285
  function AnswerLink(props) {
@@ -3424,6 +3677,115 @@ function AnswerFeedback({
3424
3677
  }
3425
3678
  );
3426
3679
  }
3680
+ var PROVENANCE_CHIP = "inline-flex max-w-full items-center gap-1 rounded-full border border-border bg-muted/60 px-2 py-0.5 text-[11px] leading-5 text-muted-foreground";
3681
+ function ProvenanceChips({
3682
+ strings: T,
3683
+ provenance
3684
+ }) {
3685
+ if (provenance.total === 0) return null;
3686
+ const kindLabels = {
3687
+ CONCEPT: T.sourceKindConcept,
3688
+ DOCS: T.sourceKindDocs,
3689
+ PRICING: T.sourceKindPricing,
3690
+ USE_CASE: T.sourceKindUseCase,
3691
+ PAGE: T.sourceKindPage
3692
+ };
3693
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3694
+ "ul",
3695
+ {
3696
+ "data-boff-explore": "provenance",
3697
+ "aria-label": T.groundedIn,
3698
+ className: "flex flex-wrap items-center gap-1.5",
3699
+ children: [
3700
+ /* @__PURE__ */ jsxRuntime.jsxs("li", { "data-boff-explore": "provenance-count", className: PROVENANCE_CHIP, children: [
3701
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.BookOpenText, { className: "h-3 w-3 shrink-0", "aria-hidden": "true" }),
3702
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: provenance.total === 1 ? T.sourceCountOne : fill(T.sourceCountMany, { count: String(provenance.total) }) })
3703
+ ] }),
3704
+ provenance.kinds.map(({ kind, count }) => /* @__PURE__ */ jsxRuntime.jsx(
3705
+ "li",
3706
+ {
3707
+ "data-boff-explore": "provenance-kind",
3708
+ "data-kind": kind,
3709
+ "data-count": count,
3710
+ className: PROVENANCE_CHIP,
3711
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: count > 1 ? `${kindLabels[kind]} \xB7 ${count}` : kindLabels[kind] })
3712
+ },
3713
+ kind
3714
+ )),
3715
+ provenance.products.map((name) => /* @__PURE__ */ jsxRuntime.jsx(
3716
+ "li",
3717
+ {
3718
+ "data-boff-explore": "provenance-product",
3719
+ className: PROVENANCE_CHIP,
3720
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: name })
3721
+ },
3722
+ name
3723
+ ))
3724
+ ]
3725
+ }
3726
+ );
3727
+ }
3728
+ var COPY_FEEDBACK_MS = 2500;
3729
+ function AnswerActions({
3730
+ strings: T,
3731
+ text
3732
+ }) {
3733
+ const [outcome, setOutcome] = React.useState("idle");
3734
+ const resetRef = React.useRef(null);
3735
+ React.useEffect(
3736
+ () => () => {
3737
+ if (resetRef.current !== null) clearTimeout(resetRef.current);
3738
+ },
3739
+ []
3740
+ );
3741
+ const copy = React.useCallback(async () => {
3742
+ let copied = false;
3743
+ try {
3744
+ const clipboard = typeof navigator === "undefined" ? void 0 : navigator.clipboard;
3745
+ if (typeof clipboard?.writeText === "function") {
3746
+ await clipboard.writeText(text);
3747
+ copied = true;
3748
+ }
3749
+ } catch {
3750
+ copied = false;
3751
+ }
3752
+ setOutcome(copied ? "copied" : "failed");
3753
+ if (resetRef.current !== null) clearTimeout(resetRef.current);
3754
+ resetRef.current = setTimeout(() => setOutcome("idle"), COPY_FEEDBACK_MS);
3755
+ }, [text]);
3756
+ const label = outcome === "copied" ? T.copied : outcome === "failed" ? T.copyFailed : T.copyAnswer;
3757
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3758
+ "div",
3759
+ {
3760
+ "data-boff-explore": "answer-actions",
3761
+ className: "flex flex-wrap items-center gap-2 pt-0.5",
3762
+ children: [
3763
+ /* @__PURE__ */ jsxRuntime.jsxs(
3764
+ "button",
3765
+ {
3766
+ "data-boff-explore": "copy-answer",
3767
+ "data-outcome": outcome,
3768
+ type: "button",
3769
+ title: label,
3770
+ onClick: () => {
3771
+ void copy();
3772
+ },
3773
+ className: cn(
3774
+ "inline-flex max-w-full items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs transition-colors",
3775
+ "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
3776
+ outcome === "failed" ? "border-destructive/40 bg-card text-destructive" : "border-border bg-card text-muted-foreground hover:border-primary/40 hover:bg-accent hover:text-foreground"
3777
+ ),
3778
+ children: [
3779
+ outcome === "copied" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-3 w-3 shrink-0", "aria-hidden": "true" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { className: "h-3 w-3 shrink-0", "aria-hidden": "true" }),
3780
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: label })
3781
+ ]
3782
+ }
3783
+ ),
3784
+ /* @__PURE__ */ jsxRuntime.jsx("span", { "data-boff-explore": "copy-status", role: "status", className: "sr-only", children: outcome === "idle" ? "" : label })
3785
+ ]
3786
+ }
3787
+ );
3788
+ }
3427
3789
  function UserBubble({
3428
3790
  strings: T,
3429
3791
  message
@@ -3469,6 +3831,7 @@ function AssistantBubble({
3469
3831
  message,
3470
3832
  activity,
3471
3833
  imageOrigins,
3834
+ productNames,
3472
3835
  onNavigate,
3473
3836
  anchorRef,
3474
3837
  onFollow,
@@ -3497,6 +3860,15 @@ function AssistantBubble({
3497
3860
  }),
3498
3861
  [T, completed, imageOrigins, failedImages, markImageFailed]
3499
3862
  );
3863
+ const provenance = React.useMemo(
3864
+ () => summariseReferences(message.references, imageOrigins, productNames),
3865
+ [message.references, imageOrigins, productNames]
3866
+ );
3867
+ const copyText = React.useMemo(
3868
+ () => answerPlainText(message.content),
3869
+ [message.content]
3870
+ );
3871
+ const grounded = completed && message.answered !== false;
3500
3872
  return /* @__PURE__ */ jsxRuntime.jsxs(
3501
3873
  "div",
3502
3874
  {
@@ -3546,6 +3918,7 @@ function AssistantBubble({
3546
3918
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "boff-prose boff-prose-sm boff-explore-body min-w-0 text-card-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(InlineImageScopeContext.Provider, { value: imageScope, children: /* @__PURE__ */ jsxRuntime.jsx(Markdown, { components: ANSWER_MARKDOWN_COMPONENTS, children: body }) }) }),
3547
3919
  streaming ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "boff-explore-caret", "aria-hidden": "true" }) : null
3548
3920
  ] }) : null,
3921
+ grounded && provenance.total > 0 ? /* @__PURE__ */ jsxRuntime.jsx(ProvenanceChips, { strings: T, provenance }) : null,
3549
3922
  streaming ? /* @__PURE__ */ jsxRuntime.jsx(ThinkingIndicator, { activity }) : null,
3550
3923
  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: T.answerDidNotArrive }) : null,
3551
3924
  message.references.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -3585,6 +3958,7 @@ function AssistantBubble({
3585
3958
  question
3586
3959
  )) })
3587
3960
  ] }) : null,
3961
+ completed && copyText !== "" ? /* @__PURE__ */ jsxRuntime.jsx(AnswerActions, { strings: T, text: copyText }) : null,
3588
3962
  completed && onFeedback ? /* @__PURE__ */ jsxRuntime.jsx(
3589
3963
  AnswerFeedback,
3590
3964
  {
@@ -3797,6 +4171,96 @@ function ProductStrip({
3797
4171
  }
3798
4172
  );
3799
4173
  }
4174
+ var MAX_CONCEPT_CARDS = 6;
4175
+ function ConceptStrip({
4176
+ strings: T,
4177
+ highlights,
4178
+ onAsk,
4179
+ disabled
4180
+ }) {
4181
+ const [failed, setFailed] = React.useState(() => /* @__PURE__ */ new Set());
4182
+ const markFailed = React.useCallback((src) => {
4183
+ setFailed(
4184
+ (current) => current.has(src) ? current : new Set(current).add(src)
4185
+ );
4186
+ }, []);
4187
+ const visible = highlights.filter(
4188
+ (highlight) => highlight.imageUrl !== "" && !failed.has(highlight.imageUrl)
4189
+ ).slice(0, MAX_CONCEPT_CARDS);
4190
+ if (visible.length === 0) return null;
4191
+ return /* @__PURE__ */ jsxRuntime.jsxs(
4192
+ "div",
4193
+ {
4194
+ "data-boff-explore": "concept-strip-block",
4195
+ className: "boff-explore-rise boff-explore-rise-3 mt-6",
4196
+ children: [
4197
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.conceptStripTitle }),
4198
+ /* @__PURE__ */ jsxRuntime.jsx(
4199
+ "ul",
4200
+ {
4201
+ "data-boff-explore": "concept-strip",
4202
+ "aria-label": T.conceptStripLabel,
4203
+ className: "boff-explore-strip flex min-w-0 snap-x gap-3 overflow-x-auto pb-1",
4204
+ children: visible.map((highlight) => /* @__PURE__ */ jsxRuntime.jsx(
4205
+ "li",
4206
+ {
4207
+ className: "shrink-0 snap-start",
4208
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
4209
+ "button",
4210
+ {
4211
+ "data-boff-explore": "concept-card",
4212
+ "data-product": highlight.product,
4213
+ type: "button",
4214
+ disabled,
4215
+ "aria-label": fill(T.conceptAsk, {
4216
+ title: highlight.title,
4217
+ product: highlight.productName
4218
+ }),
4219
+ onClick: () => onAsk(
4220
+ fill(T.conceptAskQuestion, {
4221
+ title: highlight.title,
4222
+ product: highlight.productName
4223
+ })
4224
+ ),
4225
+ className: "group flex w-40 flex-col overflow-hidden rounded-xl border border-border bg-card text-left shadow-sm transition-colors hover:border-primary/50 hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring sm:w-48",
4226
+ children: [
4227
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative block aspect-[16/9] w-full overflow-hidden bg-muted", children: [
4228
+ /* @__PURE__ */ jsxRuntime.jsx(
4229
+ "img",
4230
+ {
4231
+ src: highlight.imageUrl,
4232
+ alt: highlight.alt,
4233
+ loading: "lazy",
4234
+ decoding: "async",
4235
+ onError: () => markFailed(highlight.imageUrl),
4236
+ className: "h-full w-full object-cover transition-transform duration-300 group-hover:scale-105"
4237
+ }
4238
+ ),
4239
+ /* @__PURE__ */ jsxRuntime.jsx(
4240
+ "span",
4241
+ {
4242
+ "aria-hidden": "true",
4243
+ className: "pointer-events-none absolute left-1.5 top-1.5 rounded-full border border-border bg-background/90 px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-foreground",
4244
+ children: T.conceptIllustration
4245
+ }
4246
+ )
4247
+ ] }),
4248
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-col gap-0.5 p-2.5", children: [
4249
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "line-clamp-2 text-xs font-semibold leading-snug text-card-foreground", children: highlight.title }),
4250
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-[11px] text-muted-foreground", children: highlight.productName })
4251
+ ] })
4252
+ ]
4253
+ }
4254
+ )
4255
+ },
4256
+ `${highlight.product}:${highlight.url}`
4257
+ ))
4258
+ }
4259
+ )
4260
+ ]
4261
+ }
4262
+ );
4263
+ }
3800
4264
  function DisclaimerDialog({
3801
4265
  open,
3802
4266
  onClose,
@@ -3903,6 +4367,7 @@ function WelcomeState({
3903
4367
  body,
3904
4368
  prompts,
3905
4369
  products,
4370
+ conceptHighlights,
3906
4371
  focusProduct,
3907
4372
  onPrompt,
3908
4373
  onFocus,
@@ -3941,6 +4406,15 @@ function WelcomeState({
3941
4406
  }
3942
4407
  )
3943
4408
  ] }) : null,
4409
+ /* @__PURE__ */ jsxRuntime.jsx(
4410
+ ConceptStrip,
4411
+ {
4412
+ strings: T,
4413
+ highlights: conceptHighlights,
4414
+ onAsk: onPrompt,
4415
+ disabled
4416
+ }
4417
+ ),
3944
4418
  products.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-rise boff-explore-rise-3 mt-6", children: [
3945
4419
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.focusProduct }),
3946
4420
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -4062,6 +4536,10 @@ function ExplorePage({
4062
4536
  () => inlineImageOrigins(catalog.products),
4063
4537
  [catalog.products]
4064
4538
  );
4539
+ const productNames = React.useMemo(
4540
+ () => productNamesByOrigin(catalog.products),
4541
+ [catalog.products]
4542
+ );
4065
4543
  React.useEffect(() => {
4066
4544
  const el = textareaRef.current;
4067
4545
  if (!el) return;
@@ -4593,6 +5071,7 @@ function ExplorePage({
4593
5071
  body: resolvedBody,
4594
5072
  prompts,
4595
5073
  products: catalog.products,
5074
+ conceptHighlights: catalog.conceptHighlights,
4596
5075
  focusProduct,
4597
5076
  onPrompt: sendPrompt,
4598
5077
  onFocus: setFocusProduct,
@@ -4606,6 +5085,7 @@ function ExplorePage({
4606
5085
  message,
4607
5086
  activity,
4608
5087
  imageOrigins,
5088
+ productNames,
4609
5089
  onNavigate,
4610
5090
  anchorRef: message.id === latestAssistantId ? latestAssistantRef : void 0,
4611
5091
  onFollow: (kind, url) => recordClick(message.id, kind, url),
@@ -4909,8 +5389,12 @@ function ExplorePage({
4909
5389
  }
4910
5390
 
4911
5391
  exports.ExplorePage = ExplorePage;
5392
+ exports.answerPlainText = answerPlainText;
4912
5393
  exports.inlineImageOrigins = inlineImageOrigins;
4913
5394
  exports.isInlineImageAllowed = isInlineImageAllowed;
4914
5395
  exports.logoUrlOf = logoUrlOf;
5396
+ exports.productNamesByOrigin = productNamesByOrigin;
5397
+ exports.referenceKindOf = referenceKindOf;
5398
+ exports.summariseReferences = summariseReferences;
4915
5399
  //# sourceMappingURL=explore.js.map
4916
5400
  //# sourceMappingURL=explore.js.map