@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/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 EXPLORE_CATALOG_QUERY = (
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 res = await client.query(
7499
+ const variables = { productSlug: productSlug ?? null };
7500
+ let res = await client.query(
7371
7501
  EXPLORE_CATALOG_QUERY,
7372
- { productSlug: productSlug ?? null }
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;