@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
package/dist/index.js
CHANGED
|
@@ -6004,6 +6004,20 @@ var EN = {
|
|
|
6004
6004
|
nextSuggestion: "Next suggestion",
|
|
6005
6005
|
conceptIllustration: "Concept illustration",
|
|
6006
6006
|
opensInNewTab: "opens in a new tab",
|
|
6007
|
+
conceptStripTitle: "Or start from a concept",
|
|
6008
|
+
conceptStripLabel: "Concepts you can ask about",
|
|
6009
|
+
conceptAsk: "Ask about {title} in {product}",
|
|
6010
|
+
conceptAskQuestion: "How does {title} work in {product}?",
|
|
6011
|
+
copyAnswer: "Copy answer",
|
|
6012
|
+
copyFailed: "Couldn't copy",
|
|
6013
|
+
groundedIn: "What this answer is based on",
|
|
6014
|
+
sourceCountOne: "1 source",
|
|
6015
|
+
sourceCountMany: "{count} sources",
|
|
6016
|
+
sourceKindConcept: "Concept",
|
|
6017
|
+
sourceKindDocs: "Documentation",
|
|
6018
|
+
sourceKindPricing: "Pricing",
|
|
6019
|
+
sourceKindUseCase: "Use case",
|
|
6020
|
+
sourceKindPage: "Product page",
|
|
6007
6021
|
seoTitle: "Describe a problem, get an answer",
|
|
6008
6022
|
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.",
|
|
6009
6023
|
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.",
|
|
@@ -6072,6 +6086,20 @@ var ZH = {
|
|
|
6072
6086
|
nextSuggestion: "\u4E0B\u4E00\u4E2A\u5EFA\u8BAE",
|
|
6073
6087
|
conceptIllustration: "\u6982\u5FF5\u793A\u610F\u56FE",
|
|
6074
6088
|
opensInNewTab: "\u5728\u65B0\u6807\u7B7E\u9875\u4E2D\u6253\u5F00",
|
|
6089
|
+
conceptStripTitle: "\u6216\u8005\u4ECE\u4E00\u4E2A\u6982\u5FF5\u5F00\u59CB",
|
|
6090
|
+
conceptStripLabel: "\u4F60\u53EF\u4EE5\u8BE2\u95EE\u7684\u6982\u5FF5",
|
|
6091
|
+
conceptAsk: "\u8BE2\u95EE {product} \u4E2D\u7684 {title}",
|
|
6092
|
+
conceptAskQuestion: "{product} \u7684 {title} \u662F\u600E\u4E48\u8FD0\u4F5C\u7684\uFF1F",
|
|
6093
|
+
copyAnswer: "\u590D\u5236\u56DE\u7B54",
|
|
6094
|
+
copyFailed: "\u590D\u5236\u5931\u8D25",
|
|
6095
|
+
groundedIn: "\u8FD9\u4E2A\u56DE\u7B54\u7684\u4F9D\u636E",
|
|
6096
|
+
sourceCountOne: "1 \u4E2A\u6765\u6E90",
|
|
6097
|
+
sourceCountMany: "{count} \u4E2A\u6765\u6E90",
|
|
6098
|
+
sourceKindConcept: "\u6982\u5FF5",
|
|
6099
|
+
sourceKindDocs: "\u6587\u6863",
|
|
6100
|
+
sourceKindPricing: "\u4EF7\u683C",
|
|
6101
|
+
sourceKindUseCase: "\u5E94\u7528\u573A\u666F",
|
|
6102
|
+
sourceKindPage: "\u4EA7\u54C1\u9875\u9762",
|
|
6075
6103
|
seoTitle: "\u63CF\u8FF0\u95EE\u9898\uFF0C\u83B7\u5F97\u7B54\u6848",
|
|
6076
6104
|
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",
|
|
6077
6105
|
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",
|
|
@@ -6136,6 +6164,20 @@ var HI = {
|
|
|
6136
6164
|
nextSuggestion: "\u0905\u0917\u0932\u093E \u0938\u0941\u091D\u093E\u0935",
|
|
6137
6165
|
conceptIllustration: "\u0905\u0935\u0927\u093E\u0930\u0923\u093E \u091A\u093F\u0924\u094D\u0930\u0923",
|
|
6138
6166
|
opensInNewTab: "\u0928\u090F \u091F\u0948\u092C \u092E\u0947\u0902 \u0916\u0941\u0932\u0924\u093E \u0939\u0948",
|
|
6167
|
+
conceptStripTitle: "\u092F\u093E \u0915\u093F\u0938\u0940 \u0905\u0935\u0927\u093E\u0930\u0923\u093E \u0938\u0947 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902",
|
|
6168
|
+
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",
|
|
6169
|
+
conceptAsk: "{product} \u092E\u0947\u0902 {title} \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u092A\u0942\u091B\u0947\u0902",
|
|
6170
|
+
conceptAskQuestion: "{product} \u092E\u0947\u0902 {title} \u0915\u0948\u0938\u0947 \u0915\u093E\u092E \u0915\u0930\u0924\u093E \u0939\u0948?",
|
|
6171
|
+
copyAnswer: "\u0909\u0924\u094D\u0924\u0930 \u0915\u0949\u092A\u0940 \u0915\u0930\u0947\u0902",
|
|
6172
|
+
copyFailed: "\u0915\u0949\u092A\u0940 \u0928\u0939\u0940\u0902 \u0939\u094B \u0938\u0915\u093E",
|
|
6173
|
+
groundedIn: "\u092F\u0939 \u0909\u0924\u094D\u0924\u0930 \u0915\u093F\u0938 \u092A\u0930 \u0906\u0927\u093E\u0930\u093F\u0924 \u0939\u0948",
|
|
6174
|
+
sourceCountOne: "1 \u0938\u094D\u0930\u094B\u0924",
|
|
6175
|
+
sourceCountMany: "{count} \u0938\u094D\u0930\u094B\u0924",
|
|
6176
|
+
sourceKindConcept: "\u0905\u0935\u0927\u093E\u0930\u0923\u093E",
|
|
6177
|
+
sourceKindDocs: "\u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C",
|
|
6178
|
+
sourceKindPricing: "\u092E\u0942\u0932\u094D\u092F",
|
|
6179
|
+
sourceKindUseCase: "\u0909\u092A\u092F\u094B\u0917 \u0915\u093E \u0909\u0926\u093E\u0939\u0930\u0923",
|
|
6180
|
+
sourceKindPage: "\u0909\u0924\u094D\u092A\u093E\u0926 \u092A\u0947\u091C",
|
|
6139
6181
|
seoTitle: "\u0938\u092E\u0938\u094D\u092F\u093E \u092C\u0924\u093E\u090F\u0902, \u091C\u0935\u093E\u092C \u092A\u093E\u090F\u0902",
|
|
6140
6182
|
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",
|
|
6141
6183
|
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",
|
|
@@ -6204,6 +6246,20 @@ var ES = {
|
|
|
6204
6246
|
nextSuggestion: "Sugerencia siguiente",
|
|
6205
6247
|
conceptIllustration: "Ilustraci\xF3n del concepto",
|
|
6206
6248
|
opensInNewTab: "se abre en una pesta\xF1a nueva",
|
|
6249
|
+
conceptStripTitle: "O empieza por un concepto",
|
|
6250
|
+
conceptStripLabel: "Conceptos sobre los que puedes preguntar",
|
|
6251
|
+
conceptAsk: "Preguntar por {title} en {product}",
|
|
6252
|
+
conceptAskQuestion: "\xBFC\xF3mo funciona {title} en {product}?",
|
|
6253
|
+
copyAnswer: "Copiar respuesta",
|
|
6254
|
+
copyFailed: "No se pudo copiar",
|
|
6255
|
+
groundedIn: "En qu\xE9 se basa esta respuesta",
|
|
6256
|
+
sourceCountOne: "1 fuente",
|
|
6257
|
+
sourceCountMany: "{count} fuentes",
|
|
6258
|
+
sourceKindConcept: "Concepto",
|
|
6259
|
+
sourceKindDocs: "Documentaci\xF3n",
|
|
6260
|
+
sourceKindPricing: "Precios",
|
|
6261
|
+
sourceKindUseCase: "Caso de uso",
|
|
6262
|
+
sourceKindPage: "P\xE1gina de producto",
|
|
6207
6263
|
seoTitle: "Describe un problema y obt\xE9n una respuesta",
|
|
6208
6264
|
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.",
|
|
6209
6265
|
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.",
|
|
@@ -6272,6 +6328,20 @@ var AR = {
|
|
|
6272
6328
|
nextSuggestion: "\u0627\u0644\u0627\u0642\u062A\u0631\u0627\u062D \u0627\u0644\u062A\u0627\u0644\u064A",
|
|
6273
6329
|
conceptIllustration: "\u0631\u0633\u0645 \u062A\u0648\u0636\u064A\u062D\u064A \u0644\u0644\u0645\u0641\u0647\u0648\u0645",
|
|
6274
6330
|
opensInNewTab: "\u064A\u064F\u0641\u062A\u062D \u0641\u064A \u0639\u0644\u0627\u0645\u0629 \u062A\u0628\u0648\u064A\u0628 \u062C\u062F\u064A\u062F\u0629",
|
|
6331
|
+
conceptStripTitle: "\u0623\u0648 \u0627\u0628\u062F\u0623 \u0645\u0646 \u0645\u0641\u0647\u0648\u0645",
|
|
6332
|
+
conceptStripLabel: "\u0645\u0641\u0627\u0647\u064A\u0645 \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u0633\u0624\u0627\u0644 \u0639\u0646\u0647\u0627",
|
|
6333
|
+
conceptAsk: "\u0627\u0633\u0623\u0644 \u0639\u0646 {title} \u0641\u064A {product}",
|
|
6334
|
+
conceptAskQuestion: "\u0643\u064A\u0641 \u064A\u0639\u0645\u0644 {title} \u0641\u064A {product}\u061F",
|
|
6335
|
+
copyAnswer: "\u0646\u0633\u062E \u0627\u0644\u0625\u062C\u0627\u0628\u0629",
|
|
6336
|
+
copyFailed: "\u062A\u0639\u0630\u0651\u0631 \u0627\u0644\u0646\u0633\u062E",
|
|
6337
|
+
groundedIn: "\u0639\u0644\u0649 \u0645\u0627\u0630\u0627 \u062A\u0633\u062A\u0646\u062F \u0647\u0630\u0647 \u0627\u0644\u0625\u062C\u0627\u0628\u0629",
|
|
6338
|
+
sourceCountOne: "\u0645\u0635\u062F\u0631 \u0648\u0627\u062D\u062F",
|
|
6339
|
+
sourceCountMany: "{count} \u0645\u0635\u0627\u062F\u0631",
|
|
6340
|
+
sourceKindConcept: "\u0645\u0641\u0647\u0648\u0645",
|
|
6341
|
+
sourceKindDocs: "\u0627\u0644\u062A\u0648\u062B\u064A\u0642",
|
|
6342
|
+
sourceKindPricing: "\u0627\u0644\u0623\u0633\u0639\u0627\u0631",
|
|
6343
|
+
sourceKindUseCase: "\u062D\u0627\u0644\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645",
|
|
6344
|
+
sourceKindPage: "\u0635\u0641\u062D\u0629 \u0627\u0644\u0645\u0646\u062A\u062C",
|
|
6275
6345
|
seoTitle: "\u0635\u0641 \u0645\u0634\u0643\u0644\u062A\u0643 \u0648\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 \u0625\u062C\u0627\u0628\u0629",
|
|
6276
6346
|
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.",
|
|
6277
6347
|
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.",
|
|
@@ -6340,6 +6410,20 @@ var TA = {
|
|
|
6340
6410
|
nextSuggestion: "\u0B85\u0B9F\u0BC1\u0BA4\u0BCD\u0BA4 \u0BAA\u0BB0\u0BBF\u0BA8\u0BCD\u0BA4\u0BC1\u0BB0\u0BC8",
|
|
6341
6411
|
conceptIllustration: "\u0B95\u0BB0\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1 \u0BB5\u0BBF\u0BB3\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BAE\u0BCD",
|
|
6342
6412
|
opensInNewTab: "\u0BAA\u0BC1\u0BA4\u0BBF\u0BAF \u0BA4\u0BBE\u0BB5\u0BB2\u0BBF\u0BB2\u0BCD \u0BA4\u0BBF\u0BB1\u0B95\u0BCD\u0B95\u0BC1\u0BAE\u0BCD",
|
|
6413
|
+
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",
|
|
6414
|
+
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",
|
|
6415
|
+
conceptAsk: "{product} \u0B87\u0BB2\u0BCD {title} \u0BAA\u0BB1\u0BCD\u0BB1\u0BBF\u0B95\u0BCD \u0B95\u0BC7\u0BB3\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
|
|
6416
|
+
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?",
|
|
6417
|
+
copyAnswer: "\u0BAA\u0BA4\u0BBF\u0BB2\u0BC8 \u0BA8\u0B95\u0BB2\u0BC6\u0B9F\u0BC1",
|
|
6418
|
+
copyFailed: "\u0BA8\u0B95\u0BB2\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95 \u0BAE\u0BC1\u0B9F\u0BBF\u0BAF\u0BB5\u0BBF\u0BB2\u0BCD\u0BB2\u0BC8",
|
|
6419
|
+
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",
|
|
6420
|
+
sourceCountOne: "1 \u0BAE\u0BC2\u0BB2\u0BAE\u0BCD",
|
|
6421
|
+
sourceCountMany: "{count} \u0BAE\u0BC2\u0BB2\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
|
|
6422
|
+
sourceKindConcept: "\u0B95\u0BB0\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1",
|
|
6423
|
+
sourceKindDocs: "\u0B86\u0BB5\u0BA3\u0BAE\u0BCD",
|
|
6424
|
+
sourceKindPricing: "\u0BB5\u0BBF\u0BB2\u0BC8",
|
|
6425
|
+
sourceKindUseCase: "\u0BAA\u0BAF\u0BA9\u0BCD\u0BAA\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1 \u0BA8\u0BBF\u0BB2\u0BC8",
|
|
6426
|
+
sourceKindPage: "\u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\u0BAA\u0BCD \u0BAA\u0B95\u0BCD\u0B95\u0BAE\u0BCD",
|
|
6343
6427
|
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",
|
|
6344
6428
|
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.",
|
|
6345
6429
|
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.",
|
|
@@ -6441,11 +6525,9 @@ var EXPLORE_OWN_MESSAGE_FIELDS = (
|
|
|
6441
6525
|
}
|
|
6442
6526
|
`
|
|
6443
6527
|
);
|
|
6444
|
-
var
|
|
6528
|
+
var EXPLORE_CATALOG_ESTABLISHED_FIELDS = (
|
|
6445
6529
|
/* GraphQL */
|
|
6446
6530
|
`
|
|
6447
|
-
query ExploreCatalog($productSlug: String) {
|
|
6448
|
-
exploreCatalog(productSlug: $productSlug) {
|
|
6449
6531
|
enabled
|
|
6450
6532
|
products {
|
|
6451
6533
|
slug
|
|
@@ -6463,11 +6545,35 @@ var EXPLORE_CATALOG_QUERY = (
|
|
|
6463
6545
|
historyTurns
|
|
6464
6546
|
}
|
|
6465
6547
|
captchaRequired
|
|
6466
|
-
recaptchaSiteKey
|
|
6548
|
+
recaptchaSiteKey`
|
|
6549
|
+
);
|
|
6550
|
+
var EXPLORE_CATALOG_HIGHLIGHT_FIELD = (
|
|
6551
|
+
/* GraphQL */
|
|
6552
|
+
`
|
|
6553
|
+
conceptHighlights {
|
|
6554
|
+
product
|
|
6555
|
+
productName
|
|
6556
|
+
title
|
|
6557
|
+
url
|
|
6558
|
+
imageUrl
|
|
6559
|
+
alt
|
|
6560
|
+
}`
|
|
6561
|
+
);
|
|
6562
|
+
function exploreCatalogDocument(extraFields) {
|
|
6563
|
+
return (
|
|
6564
|
+
/* GraphQL */
|
|
6565
|
+
`
|
|
6566
|
+
query ExploreCatalog($productSlug: String) {
|
|
6567
|
+
exploreCatalog(productSlug: $productSlug) {${EXPLORE_CATALOG_ESTABLISHED_FIELDS}${extraFields}
|
|
6467
6568
|
}
|
|
6468
6569
|
}
|
|
6469
6570
|
`
|
|
6571
|
+
);
|
|
6572
|
+
}
|
|
6573
|
+
var EXPLORE_CATALOG_QUERY = exploreCatalogDocument(
|
|
6574
|
+
EXPLORE_CATALOG_HIGHLIGHT_FIELD
|
|
6470
6575
|
);
|
|
6576
|
+
var EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS = exploreCatalogDocument("");
|
|
6471
6577
|
var EXPLORE_MESSAGE_QUERY = (
|
|
6472
6578
|
/* GraphQL */
|
|
6473
6579
|
`
|
|
@@ -7008,7 +7114,12 @@ function buildFallbackCatalog(examplePrompts, welcome) {
|
|
|
7008
7114
|
welcomeBody: welcome?.body ?? FALLBACK_WELCOME_BODY,
|
|
7009
7115
|
limits: FALLBACK_EXPLORE_LIMITS,
|
|
7010
7116
|
captchaRequired: false,
|
|
7011
|
-
recaptchaSiteKey: null
|
|
7117
|
+
recaptchaSiteKey: null,
|
|
7118
|
+
// Empty, and deliberately not synthesised from `ECOSYSTEM_PRODUCTS`: a concept highlight
|
|
7119
|
+
// needs a real published illustration URL, and this SDK has no registry of them. An
|
|
7120
|
+
// invented path would render 38 broken frames on the one screen every prerender captures.
|
|
7121
|
+
// The strip renders nothing at all when the list is empty, which is the honest fallback.
|
|
7122
|
+
conceptHighlights: []
|
|
7012
7123
|
};
|
|
7013
7124
|
}
|
|
7014
7125
|
function normalizeCatalog(raw, fallback) {
|
|
@@ -7025,9 +7136,27 @@ function normalizeCatalog(raw, fallback) {
|
|
|
7025
7136
|
historyTurns: raw.limits?.historyTurns || fallback.limits.historyTurns
|
|
7026
7137
|
},
|
|
7027
7138
|
captchaRequired: raw.captchaRequired === true,
|
|
7028
|
-
recaptchaSiteKey: raw.recaptchaSiteKey ?? null
|
|
7139
|
+
recaptchaSiteKey: raw.recaptchaSiteKey ?? null,
|
|
7140
|
+
// `[ExploreConceptHighlight!]!` on the wire, so a gateway that KNOWS the field always
|
|
7141
|
+
// sends an array. The one response that arrives without it is the retry against an older
|
|
7142
|
+
// supergraph (`EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS`) — that gateway does not answer
|
|
7143
|
+
// the full document at all, it refuses it. Either way
|
|
7144
|
+
// `catalog.conceptHighlights.filter(...)` on `undefined` would throw inside render,
|
|
7145
|
+
// blanking the welcome screen over a decorative strip.
|
|
7146
|
+
conceptHighlights: raw.conceptHighlights?.length ? raw.conceptHighlights : fallback.conceptHighlights
|
|
7029
7147
|
};
|
|
7030
7148
|
}
|
|
7149
|
+
var CATALOG_DOCUMENT_REJECTED_CODES = /* @__PURE__ */ new Set([
|
|
7150
|
+
"GRAPHQL_VALIDATION_FAILED",
|
|
7151
|
+
"HTTP_400"
|
|
7152
|
+
]);
|
|
7153
|
+
function catalogRejectedTheHighlightField(res) {
|
|
7154
|
+
if (res.data?.exploreCatalog) return false;
|
|
7155
|
+
return (res.errors ?? []).some((error) => {
|
|
7156
|
+
const code = error.extensions?.code;
|
|
7157
|
+
return typeof code === "string" && CATALOG_DOCUMENT_REJECTED_CODES.has(code) || error.message.includes("conceptHighlights");
|
|
7158
|
+
});
|
|
7159
|
+
}
|
|
7031
7160
|
var RATE_LIMIT_CODES = /* @__PURE__ */ new Set([
|
|
7032
7161
|
"RATE_LIMITED",
|
|
7033
7162
|
"HTTP_429",
|
|
@@ -7367,11 +7496,19 @@ function useExploreChat(options = {}) {
|
|
|
7367
7496
|
React.useEffect(() => {
|
|
7368
7497
|
let cancelled = false;
|
|
7369
7498
|
const load = async () => {
|
|
7370
|
-
const
|
|
7499
|
+
const variables = { productSlug: productSlug ?? null };
|
|
7500
|
+
let res = await client.query(
|
|
7371
7501
|
EXPLORE_CATALOG_QUERY,
|
|
7372
|
-
|
|
7502
|
+
variables
|
|
7373
7503
|
);
|
|
7374
7504
|
if (cancelled || !mountedRef.current) return;
|
|
7505
|
+
if (catalogRejectedTheHighlightField(res)) {
|
|
7506
|
+
res = await client.query(
|
|
7507
|
+
EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS,
|
|
7508
|
+
variables
|
|
7509
|
+
);
|
|
7510
|
+
if (cancelled || !mountedRef.current) return;
|
|
7511
|
+
}
|
|
7375
7512
|
const raw = res.data?.exploreCatalog;
|
|
7376
7513
|
if (res.errors?.length || !raw) {
|
|
7377
7514
|
console.warn(
|
|
@@ -8538,6 +8675,122 @@ function isInlineImageAllowed(src, origins) {
|
|
|
8538
8675
|
if (url.protocol !== "https:" || url.username || url.password) return false;
|
|
8539
8676
|
return origins.has(url.origin);
|
|
8540
8677
|
}
|
|
8678
|
+
var REFERENCE_KIND_ORDER = [
|
|
8679
|
+
"CONCEPT",
|
|
8680
|
+
"DOCS",
|
|
8681
|
+
"PRICING",
|
|
8682
|
+
"USE_CASE",
|
|
8683
|
+
"PAGE"
|
|
8684
|
+
];
|
|
8685
|
+
var PRODUCT_SUBDOMAINS = [
|
|
8686
|
+
"alphadocs.",
|
|
8687
|
+
"alphaapp.",
|
|
8688
|
+
"docs.",
|
|
8689
|
+
"alpha.",
|
|
8690
|
+
"app.",
|
|
8691
|
+
"www."
|
|
8692
|
+
];
|
|
8693
|
+
function readCatalogUrl(raw) {
|
|
8694
|
+
let parsed;
|
|
8695
|
+
try {
|
|
8696
|
+
parsed = new URL(raw);
|
|
8697
|
+
} catch {
|
|
8698
|
+
return null;
|
|
8699
|
+
}
|
|
8700
|
+
if (parsed.protocol !== "https:") return null;
|
|
8701
|
+
const host = parsed.hostname.toLowerCase();
|
|
8702
|
+
const prefix = PRODUCT_SUBDOMAINS.find(
|
|
8703
|
+
(candidate) => host.startsWith(candidate)
|
|
8704
|
+
);
|
|
8705
|
+
const apex = prefix === void 0 ? host : host.slice(prefix.length);
|
|
8706
|
+
const port = parsed.port ? `:${parsed.port}` : "";
|
|
8707
|
+
return {
|
|
8708
|
+
origin: `https://${apex}${port}`,
|
|
8709
|
+
prefix,
|
|
8710
|
+
pathname: parsed.pathname
|
|
8711
|
+
};
|
|
8712
|
+
}
|
|
8713
|
+
function referenceKindOf(url, origins) {
|
|
8714
|
+
const parsed = readCatalogUrl(url);
|
|
8715
|
+
if (parsed === null || !origins.has(parsed.origin)) return null;
|
|
8716
|
+
if (parsed.prefix === "docs." || parsed.prefix === "alphadocs.")
|
|
8717
|
+
return "DOCS";
|
|
8718
|
+
const segment = parsed.pathname.toLowerCase().split("/").filter(Boolean)[0] ?? "";
|
|
8719
|
+
if (segment === "concept" || segment === "concepts") return "CONCEPT";
|
|
8720
|
+
if (segment === "docs") return "DOCS";
|
|
8721
|
+
if (segment === "pricing" || segment === "plans") return "PRICING";
|
|
8722
|
+
if (segment === "use-case" || segment === "use-cases" || segment === "solutions") {
|
|
8723
|
+
return "USE_CASE";
|
|
8724
|
+
}
|
|
8725
|
+
return "PAGE";
|
|
8726
|
+
}
|
|
8727
|
+
function productNamesByOrigin(products) {
|
|
8728
|
+
const names = /* @__PURE__ */ new Map();
|
|
8729
|
+
for (const product of products) {
|
|
8730
|
+
let url;
|
|
8731
|
+
try {
|
|
8732
|
+
url = new URL(product.website);
|
|
8733
|
+
} catch {
|
|
8734
|
+
continue;
|
|
8735
|
+
}
|
|
8736
|
+
if (url.protocol !== "https:") continue;
|
|
8737
|
+
const apex = url.hostname.replace(/^www\./, "");
|
|
8738
|
+
const port = url.port ? `:${url.port}` : "";
|
|
8739
|
+
const key = `https://${apex}${port}`;
|
|
8740
|
+
if (!names.has(key)) names.set(key, product.name);
|
|
8741
|
+
}
|
|
8742
|
+
return names;
|
|
8743
|
+
}
|
|
8744
|
+
function summariseReferences(references, origins, productNames) {
|
|
8745
|
+
const counts = /* @__PURE__ */ new Map();
|
|
8746
|
+
const products = [];
|
|
8747
|
+
for (const reference of references) {
|
|
8748
|
+
const kind = referenceKindOf(reference.url, origins);
|
|
8749
|
+
if (kind !== null) counts.set(kind, (counts.get(kind) ?? 0) + 1);
|
|
8750
|
+
const parsed = readCatalogUrl(reference.url);
|
|
8751
|
+
const name = (parsed === null ? void 0 : productNames.get(parsed.origin)) ?? (reference.product || null);
|
|
8752
|
+
if (name != null && !products.includes(name)) products.push(name);
|
|
8753
|
+
}
|
|
8754
|
+
return {
|
|
8755
|
+
total: references.length,
|
|
8756
|
+
kinds: REFERENCE_KIND_ORDER.filter((kind) => counts.has(kind)).map(
|
|
8757
|
+
(kind) => ({ kind, count: counts.get(kind) ?? 0 })
|
|
8758
|
+
),
|
|
8759
|
+
products
|
|
8760
|
+
};
|
|
8761
|
+
}
|
|
8762
|
+
var CODE_FENCE = /^\s*(?:```|~~~)/;
|
|
8763
|
+
function answerPlainText(markdown) {
|
|
8764
|
+
const lines = [];
|
|
8765
|
+
let inFence = false;
|
|
8766
|
+
for (const raw of markdown.split("\n")) {
|
|
8767
|
+
if (CODE_FENCE.test(raw)) {
|
|
8768
|
+
inFence = !inFence;
|
|
8769
|
+
continue;
|
|
8770
|
+
}
|
|
8771
|
+
if (inFence) {
|
|
8772
|
+
lines.push(raw);
|
|
8773
|
+
continue;
|
|
8774
|
+
}
|
|
8775
|
+
let line = raw;
|
|
8776
|
+
line = line.replace(/!\[[^\]]*\]\([^)\s]*(?:\s+"[^"]*")?\)/g, "");
|
|
8777
|
+
line = line.replace(/\[([^\]]+)\]\(([^)\s]+)(?:\s+"[^"]*")?\)/g, "$1 ($2)");
|
|
8778
|
+
line = line.replace(/<(https?:\/\/[^>\s]+)>/g, "$1");
|
|
8779
|
+
line = line.replace(/^\s{0,3}#{1,6}\s+/, "");
|
|
8780
|
+
line = line.replace(/^\s{0,3}>\s?/, "");
|
|
8781
|
+
if (/^\s{0,3}([-*_])[ \t]*(?:\1[ \t]*){2,}$/.test(line)) {
|
|
8782
|
+
lines.push("");
|
|
8783
|
+
continue;
|
|
8784
|
+
}
|
|
8785
|
+
line = line.replace(/`([^`]+)`/g, "$1");
|
|
8786
|
+
line = line.replace(/\*\*([^*]+)\*\*/g, "$1");
|
|
8787
|
+
line = line.replace(/__([^_]+)__/g, "$1");
|
|
8788
|
+
line = line.replace(/(^|[^*\w])\*([^*\n]+)\*(?![*\w])/g, "$1$2");
|
|
8789
|
+
line = line.replace(/(^|[^_\w])_([^_\n]+)_(?![_\w])/g, "$1$2");
|
|
8790
|
+
lines.push(line.replace(/[ \t]+$/, ""));
|
|
8791
|
+
}
|
|
8792
|
+
return lines.join("\n").replace(/\n{3,}/g, "\n\n").trim();
|
|
8793
|
+
}
|
|
8541
8794
|
var InlineImageScopeContext = React.createContext(null);
|
|
8542
8795
|
var InsideLinkContext = React.createContext(false);
|
|
8543
8796
|
function AnswerLink(props) {
|
|
@@ -8935,6 +9188,115 @@ function AnswerFeedback({
|
|
|
8935
9188
|
}
|
|
8936
9189
|
);
|
|
8937
9190
|
}
|
|
9191
|
+
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";
|
|
9192
|
+
function ProvenanceChips({
|
|
9193
|
+
strings: T,
|
|
9194
|
+
provenance
|
|
9195
|
+
}) {
|
|
9196
|
+
if (provenance.total === 0) return null;
|
|
9197
|
+
const kindLabels = {
|
|
9198
|
+
CONCEPT: T.sourceKindConcept,
|
|
9199
|
+
DOCS: T.sourceKindDocs,
|
|
9200
|
+
PRICING: T.sourceKindPricing,
|
|
9201
|
+
USE_CASE: T.sourceKindUseCase,
|
|
9202
|
+
PAGE: T.sourceKindPage
|
|
9203
|
+
};
|
|
9204
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
9205
|
+
"ul",
|
|
9206
|
+
{
|
|
9207
|
+
"data-boff-explore": "provenance",
|
|
9208
|
+
"aria-label": T.groundedIn,
|
|
9209
|
+
className: "flex flex-wrap items-center gap-1.5",
|
|
9210
|
+
children: [
|
|
9211
|
+
/* @__PURE__ */ jsxRuntime.jsxs("li", { "data-boff-explore": "provenance-count", className: PROVENANCE_CHIP, children: [
|
|
9212
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.BookOpenText, { className: "h-3 w-3 shrink-0", "aria-hidden": "true" }),
|
|
9213
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: provenance.total === 1 ? T.sourceCountOne : fill(T.sourceCountMany, { count: String(provenance.total) }) })
|
|
9214
|
+
] }),
|
|
9215
|
+
provenance.kinds.map(({ kind, count }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
9216
|
+
"li",
|
|
9217
|
+
{
|
|
9218
|
+
"data-boff-explore": "provenance-kind",
|
|
9219
|
+
"data-kind": kind,
|
|
9220
|
+
"data-count": count,
|
|
9221
|
+
className: PROVENANCE_CHIP,
|
|
9222
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: count > 1 ? `${kindLabels[kind]} \xB7 ${count}` : kindLabels[kind] })
|
|
9223
|
+
},
|
|
9224
|
+
kind
|
|
9225
|
+
)),
|
|
9226
|
+
provenance.products.map((name) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
9227
|
+
"li",
|
|
9228
|
+
{
|
|
9229
|
+
"data-boff-explore": "provenance-product",
|
|
9230
|
+
className: PROVENANCE_CHIP,
|
|
9231
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: name })
|
|
9232
|
+
},
|
|
9233
|
+
name
|
|
9234
|
+
))
|
|
9235
|
+
]
|
|
9236
|
+
}
|
|
9237
|
+
);
|
|
9238
|
+
}
|
|
9239
|
+
var COPY_FEEDBACK_MS = 2500;
|
|
9240
|
+
function AnswerActions({
|
|
9241
|
+
strings: T,
|
|
9242
|
+
text
|
|
9243
|
+
}) {
|
|
9244
|
+
const [outcome, setOutcome] = React.useState("idle");
|
|
9245
|
+
const resetRef = React.useRef(null);
|
|
9246
|
+
React.useEffect(
|
|
9247
|
+
() => () => {
|
|
9248
|
+
if (resetRef.current !== null) clearTimeout(resetRef.current);
|
|
9249
|
+
},
|
|
9250
|
+
[]
|
|
9251
|
+
);
|
|
9252
|
+
const copy = React.useCallback(async () => {
|
|
9253
|
+
let copied = false;
|
|
9254
|
+
try {
|
|
9255
|
+
const clipboard = typeof navigator === "undefined" ? void 0 : navigator.clipboard;
|
|
9256
|
+
if (typeof clipboard?.writeText === "function") {
|
|
9257
|
+
await clipboard.writeText(text);
|
|
9258
|
+
copied = true;
|
|
9259
|
+
}
|
|
9260
|
+
} catch {
|
|
9261
|
+
copied = false;
|
|
9262
|
+
}
|
|
9263
|
+
setOutcome(copied ? "copied" : "failed");
|
|
9264
|
+
if (resetRef.current !== null) clearTimeout(resetRef.current);
|
|
9265
|
+
resetRef.current = setTimeout(() => setOutcome("idle"), COPY_FEEDBACK_MS);
|
|
9266
|
+
}, [text]);
|
|
9267
|
+
const label = outcome === "copied" ? T.copied : outcome === "failed" ? T.copyFailed : T.copyAnswer;
|
|
9268
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
9269
|
+
"div",
|
|
9270
|
+
{
|
|
9271
|
+
"data-boff-explore": "answer-actions",
|
|
9272
|
+
className: "flex flex-wrap items-center gap-2 pt-0.5",
|
|
9273
|
+
children: [
|
|
9274
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
9275
|
+
"button",
|
|
9276
|
+
{
|
|
9277
|
+
"data-boff-explore": "copy-answer",
|
|
9278
|
+
"data-outcome": outcome,
|
|
9279
|
+
type: "button",
|
|
9280
|
+
title: label,
|
|
9281
|
+
onClick: () => {
|
|
9282
|
+
void copy();
|
|
9283
|
+
},
|
|
9284
|
+
className: cn(
|
|
9285
|
+
"inline-flex max-w-full items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs transition-colors",
|
|
9286
|
+
"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
|
|
9287
|
+
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"
|
|
9288
|
+
),
|
|
9289
|
+
children: [
|
|
9290
|
+
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" }),
|
|
9291
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: label })
|
|
9292
|
+
]
|
|
9293
|
+
}
|
|
9294
|
+
),
|
|
9295
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "data-boff-explore": "copy-status", role: "status", className: "sr-only", children: outcome === "idle" ? "" : label })
|
|
9296
|
+
]
|
|
9297
|
+
}
|
|
9298
|
+
);
|
|
9299
|
+
}
|
|
8938
9300
|
function UserBubble({
|
|
8939
9301
|
strings: T,
|
|
8940
9302
|
message
|
|
@@ -8980,6 +9342,7 @@ function AssistantBubble({
|
|
|
8980
9342
|
message,
|
|
8981
9343
|
activity,
|
|
8982
9344
|
imageOrigins,
|
|
9345
|
+
productNames,
|
|
8983
9346
|
onNavigate,
|
|
8984
9347
|
anchorRef,
|
|
8985
9348
|
onFollow,
|
|
@@ -9008,6 +9371,15 @@ function AssistantBubble({
|
|
|
9008
9371
|
}),
|
|
9009
9372
|
[T, completed, imageOrigins, failedImages, markImageFailed]
|
|
9010
9373
|
);
|
|
9374
|
+
const provenance = React.useMemo(
|
|
9375
|
+
() => summariseReferences(message.references, imageOrigins, productNames),
|
|
9376
|
+
[message.references, imageOrigins, productNames]
|
|
9377
|
+
);
|
|
9378
|
+
const copyText = React.useMemo(
|
|
9379
|
+
() => answerPlainText(message.content),
|
|
9380
|
+
[message.content]
|
|
9381
|
+
);
|
|
9382
|
+
const grounded = completed && message.answered !== false;
|
|
9011
9383
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
9012
9384
|
"div",
|
|
9013
9385
|
{
|
|
@@ -9057,6 +9429,7 @@ function AssistantBubble({
|
|
|
9057
9429
|
/* @__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 }) }) }),
|
|
9058
9430
|
streaming ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "boff-explore-caret", "aria-hidden": "true" }) : null
|
|
9059
9431
|
] }) : null,
|
|
9432
|
+
grounded && provenance.total > 0 ? /* @__PURE__ */ jsxRuntime.jsx(ProvenanceChips, { strings: T, provenance }) : null,
|
|
9060
9433
|
streaming ? /* @__PURE__ */ jsxRuntime.jsx(ThinkingIndicator, { activity }) : null,
|
|
9061
9434
|
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,
|
|
9062
9435
|
message.references.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
@@ -9096,6 +9469,7 @@ function AssistantBubble({
|
|
|
9096
9469
|
question
|
|
9097
9470
|
)) })
|
|
9098
9471
|
] }) : null,
|
|
9472
|
+
completed && copyText !== "" ? /* @__PURE__ */ jsxRuntime.jsx(AnswerActions, { strings: T, text: copyText }) : null,
|
|
9099
9473
|
completed && onFeedback ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
9100
9474
|
AnswerFeedback,
|
|
9101
9475
|
{
|
|
@@ -9308,6 +9682,96 @@ function ProductStrip({
|
|
|
9308
9682
|
}
|
|
9309
9683
|
);
|
|
9310
9684
|
}
|
|
9685
|
+
var MAX_CONCEPT_CARDS = 6;
|
|
9686
|
+
function ConceptStrip({
|
|
9687
|
+
strings: T,
|
|
9688
|
+
highlights,
|
|
9689
|
+
onAsk,
|
|
9690
|
+
disabled
|
|
9691
|
+
}) {
|
|
9692
|
+
const [failed, setFailed] = React.useState(() => /* @__PURE__ */ new Set());
|
|
9693
|
+
const markFailed = React.useCallback((src) => {
|
|
9694
|
+
setFailed(
|
|
9695
|
+
(current) => current.has(src) ? current : new Set(current).add(src)
|
|
9696
|
+
);
|
|
9697
|
+
}, []);
|
|
9698
|
+
const visible = highlights.filter(
|
|
9699
|
+
(highlight) => highlight.imageUrl !== "" && !failed.has(highlight.imageUrl)
|
|
9700
|
+
).slice(0, MAX_CONCEPT_CARDS);
|
|
9701
|
+
if (visible.length === 0) return null;
|
|
9702
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
9703
|
+
"div",
|
|
9704
|
+
{
|
|
9705
|
+
"data-boff-explore": "concept-strip-block",
|
|
9706
|
+
className: "boff-explore-rise boff-explore-rise-3 mt-6",
|
|
9707
|
+
children: [
|
|
9708
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.conceptStripTitle }),
|
|
9709
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9710
|
+
"ul",
|
|
9711
|
+
{
|
|
9712
|
+
"data-boff-explore": "concept-strip",
|
|
9713
|
+
"aria-label": T.conceptStripLabel,
|
|
9714
|
+
className: "boff-explore-strip flex min-w-0 snap-x gap-3 overflow-x-auto pb-1",
|
|
9715
|
+
children: visible.map((highlight) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
9716
|
+
"li",
|
|
9717
|
+
{
|
|
9718
|
+
className: "shrink-0 snap-start",
|
|
9719
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
9720
|
+
"button",
|
|
9721
|
+
{
|
|
9722
|
+
"data-boff-explore": "concept-card",
|
|
9723
|
+
"data-product": highlight.product,
|
|
9724
|
+
type: "button",
|
|
9725
|
+
disabled,
|
|
9726
|
+
"aria-label": fill(T.conceptAsk, {
|
|
9727
|
+
title: highlight.title,
|
|
9728
|
+
product: highlight.productName
|
|
9729
|
+
}),
|
|
9730
|
+
onClick: () => onAsk(
|
|
9731
|
+
fill(T.conceptAskQuestion, {
|
|
9732
|
+
title: highlight.title,
|
|
9733
|
+
product: highlight.productName
|
|
9734
|
+
})
|
|
9735
|
+
),
|
|
9736
|
+
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",
|
|
9737
|
+
children: [
|
|
9738
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative block aspect-[16/9] w-full overflow-hidden bg-muted", children: [
|
|
9739
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9740
|
+
"img",
|
|
9741
|
+
{
|
|
9742
|
+
src: highlight.imageUrl,
|
|
9743
|
+
alt: highlight.alt,
|
|
9744
|
+
loading: "lazy",
|
|
9745
|
+
decoding: "async",
|
|
9746
|
+
onError: () => markFailed(highlight.imageUrl),
|
|
9747
|
+
className: "h-full w-full object-cover transition-transform duration-300 group-hover:scale-105"
|
|
9748
|
+
}
|
|
9749
|
+
),
|
|
9750
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9751
|
+
"span",
|
|
9752
|
+
{
|
|
9753
|
+
"aria-hidden": "true",
|
|
9754
|
+
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",
|
|
9755
|
+
children: T.conceptIllustration
|
|
9756
|
+
}
|
|
9757
|
+
)
|
|
9758
|
+
] }),
|
|
9759
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-col gap-0.5 p-2.5", children: [
|
|
9760
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "line-clamp-2 text-xs font-semibold leading-snug text-card-foreground", children: highlight.title }),
|
|
9761
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-[11px] text-muted-foreground", children: highlight.productName })
|
|
9762
|
+
] })
|
|
9763
|
+
]
|
|
9764
|
+
}
|
|
9765
|
+
)
|
|
9766
|
+
},
|
|
9767
|
+
`${highlight.product}:${highlight.url}`
|
|
9768
|
+
))
|
|
9769
|
+
}
|
|
9770
|
+
)
|
|
9771
|
+
]
|
|
9772
|
+
}
|
|
9773
|
+
);
|
|
9774
|
+
}
|
|
9311
9775
|
function DisclaimerDialog({
|
|
9312
9776
|
open,
|
|
9313
9777
|
onClose,
|
|
@@ -9414,6 +9878,7 @@ function WelcomeState({
|
|
|
9414
9878
|
body,
|
|
9415
9879
|
prompts,
|
|
9416
9880
|
products,
|
|
9881
|
+
conceptHighlights,
|
|
9417
9882
|
focusProduct,
|
|
9418
9883
|
onPrompt,
|
|
9419
9884
|
onFocus,
|
|
@@ -9452,6 +9917,15 @@ function WelcomeState({
|
|
|
9452
9917
|
}
|
|
9453
9918
|
)
|
|
9454
9919
|
] }) : null,
|
|
9920
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9921
|
+
ConceptStrip,
|
|
9922
|
+
{
|
|
9923
|
+
strings: T,
|
|
9924
|
+
highlights: conceptHighlights,
|
|
9925
|
+
onAsk: onPrompt,
|
|
9926
|
+
disabled
|
|
9927
|
+
}
|
|
9928
|
+
),
|
|
9455
9929
|
products.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-rise boff-explore-rise-3 mt-6", children: [
|
|
9456
9930
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.focusProduct }),
|
|
9457
9931
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -9573,6 +10047,10 @@ function ExplorePage({
|
|
|
9573
10047
|
() => inlineImageOrigins(catalog.products),
|
|
9574
10048
|
[catalog.products]
|
|
9575
10049
|
);
|
|
10050
|
+
const productNames = React.useMemo(
|
|
10051
|
+
() => productNamesByOrigin(catalog.products),
|
|
10052
|
+
[catalog.products]
|
|
10053
|
+
);
|
|
9576
10054
|
React.useEffect(() => {
|
|
9577
10055
|
const el = textareaRef.current;
|
|
9578
10056
|
if (!el) return;
|
|
@@ -10104,6 +10582,7 @@ function ExplorePage({
|
|
|
10104
10582
|
body: resolvedBody,
|
|
10105
10583
|
prompts,
|
|
10106
10584
|
products: catalog.products,
|
|
10585
|
+
conceptHighlights: catalog.conceptHighlights,
|
|
10107
10586
|
focusProduct,
|
|
10108
10587
|
onPrompt: sendPrompt,
|
|
10109
10588
|
onFocus: setFocusProduct,
|
|
@@ -10117,6 +10596,7 @@ function ExplorePage({
|
|
|
10117
10596
|
message,
|
|
10118
10597
|
activity,
|
|
10119
10598
|
imageOrigins,
|
|
10599
|
+
productNames,
|
|
10120
10600
|
onNavigate,
|
|
10121
10601
|
anchorRef: message.id === latestAssistantId ? latestAssistantRef : void 0,
|
|
10122
10602
|
onFollow: (kind, url) => recordClick(message.id, kind, url),
|
|
@@ -15098,6 +15578,7 @@ exports.DEFAULT_CONTACT_CATEGORIES = DEFAULT_CONTACT_CATEGORIES;
|
|
|
15098
15578
|
exports.DEFAULT_EXPLORE_EXAMPLE_PROMPTS = DEFAULT_EXPLORE_EXAMPLE_PROMPTS;
|
|
15099
15579
|
exports.ECOSYSTEM_PRODUCTS = ECOSYSTEM_PRODUCTS;
|
|
15100
15580
|
exports.EXPLORE_CATALOG_QUERY = EXPLORE_CATALOG_QUERY;
|
|
15581
|
+
exports.EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS = EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS;
|
|
15101
15582
|
exports.EXPLORE_LOCALES = EXPLORE_LOCALES;
|
|
15102
15583
|
exports.EXPLORE_MESSAGE_QUERY = EXPLORE_MESSAGE_QUERY;
|
|
15103
15584
|
exports.EXPLORE_RECAPTCHA_ACTION = EXPLORE_RECAPTCHA_ACTION;
|