@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.
- package/dist/components/explore.d.mts +70 -2
- package/dist/components/explore.d.ts +70 -2
- package/dist/components/explore.js +492 -8
- package/dist/components/explore.js.map +1 -1
- package/dist/components/explore.mjs +490 -10
- package/dist/components/explore.mjs.map +1 -1
- package/dist/{explore-types-CPF1QoMn.d.mts → explore-types-DvQPiL1t.d.mts} +58 -2
- package/dist/{explore-types-CPF1QoMn.d.ts → explore-types-DvQPiL1t.d.ts} +58 -2
- package/dist/hooks/index.d.mts +2 -2
- package/dist/hooks/index.d.ts +2 -2
- package/dist/hooks/index.js +61 -8
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +61 -8
- package/dist/hooks/index.mjs.map +1 -1
- package/dist/index.d.mts +36 -2
- package/dist/index.d.ts +36 -2
- package/dist/index.js +489 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +490 -10
- package/dist/index.mjs.map +1 -1
- package/dist/{use-explore-chat--CxNtkrJ.d.ts → use-explore-chat-CNEdKBc1.d.ts} +1 -1
- package/dist/{use-explore-chat-C6Y8JQMj.d.mts → use-explore-chat-Dgm-jf96.d.mts} +1 -1
- package/package.json +1 -1
|
@@ -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
|
|
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
|
|
1860
|
+
const variables = { productSlug: productSlug ?? null };
|
|
1861
|
+
let res = await client.query(
|
|
1732
1862
|
EXPLORE_CATALOG_QUERY,
|
|
1733
|
-
|
|
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
|