@burdenoff/website-sdk 2026.922.2 → 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
@@ -5983,10 +5983,44 @@ var EN = {
5983
5983
  noAnswer: "I couldn't find this in our documentation, so the answer below is not grounded in a source. Try rephrasing, or",
5984
5984
  answerDidNotArrive: "That answer didn't come through. Try asking again.",
5985
5985
  askHuman: "ask a human",
5986
+ // An offer, not a demand: this row sits under every answer on 38 marketing sites, so the
5987
+ // wording has to be shruggable. "Was this helpful?" invites; "Please rate this answer"
5988
+ // conscripts.
5989
+ feedbackPrompt: "Was this helpful?",
5990
+ feedbackHelpful: "Helpful",
5991
+ feedbackNotHelpful: "Not helpful",
5992
+ feedbackReasonTitle: "What was off?",
5993
+ feedbackReasonInaccurate: "Inaccurate",
5994
+ feedbackReasonIncomplete: "Incomplete",
5995
+ feedbackReasonOffTopic: "Off topic",
5996
+ feedbackReasonHardToFollow: "Hard to follow",
5997
+ feedbackReasonOther: "Something else",
5998
+ feedbackCommentPlaceholder: "Add a detail (optional)",
5999
+ feedbackSend: "Send",
6000
+ feedbackDismiss: "Dismiss",
6001
+ feedbackThanks: "Thanks \u2014 that helps.",
6002
+ feedbackNotSent: "That didn't send.",
5986
6003
  prevSuggestion: "Previous suggestion",
5987
6004
  nextSuggestion: "Next suggestion",
5988
6005
  conceptIllustration: "Concept illustration",
5989
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",
6021
+ seoTitle: "Describe a problem, get an answer",
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.",
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.",
5990
6024
  capabilities: [
5991
6025
  "Grounded in our own docs",
5992
6026
  "Compare across the ecosystem",
@@ -6034,10 +6068,41 @@ var ZH = {
6034
6068
  noAnswer: "\u6211\u5728\u6587\u6863\u4E2D\u6CA1\u6709\u627E\u5230\u76F8\u5173\u5185\u5BB9\uFF0C\u4E0B\u9762\u7684\u56DE\u7B54\u6CA1\u6709\u6765\u6E90\u652F\u6301\u3002\u8BF7\u6362\u4E2A\u8BF4\u6CD5\uFF0C\u6216",
6035
6069
  answerDidNotArrive: "\u8FD9\u6761\u56DE\u7B54\u6CA1\u6709\u8FD4\u56DE\u3002\u8BF7\u518D\u95EE\u4E00\u6B21\u3002",
6036
6070
  askHuman: "\u8054\u7CFB\u6211\u4EEC",
6071
+ feedbackPrompt: "\u8FD9\u4E2A\u56DE\u7B54\u6709\u5E2E\u52A9\u5417\uFF1F",
6072
+ feedbackHelpful: "\u6709\u5E2E\u52A9",
6073
+ feedbackNotHelpful: "\u6CA1\u6709\u5E2E\u52A9",
6074
+ feedbackReasonTitle: "\u54EA\u91CC\u4E0D\u5BF9\uFF1F",
6075
+ feedbackReasonInaccurate: "\u4E0D\u51C6\u786E",
6076
+ feedbackReasonIncomplete: "\u4E0D\u5B8C\u6574",
6077
+ feedbackReasonOffTopic: "\u7B54\u975E\u6240\u95EE",
6078
+ feedbackReasonHardToFollow: "\u770B\u4E0D\u592A\u61C2",
6079
+ feedbackReasonOther: "\u5176\u4ED6\u539F\u56E0",
6080
+ feedbackCommentPlaceholder: "\u8865\u5145\u8BF4\u660E\uFF08\u53EF\u9009\uFF09",
6081
+ feedbackSend: "\u63D0\u4EA4",
6082
+ feedbackDismiss: "\u5173\u95ED",
6083
+ feedbackThanks: "\u8C22\u8C22\uFF0C\u8FD9\u5BF9\u6211\u4EEC\u5F88\u6709\u5E2E\u52A9\u3002",
6084
+ feedbackNotSent: "\u6CA1\u6709\u63D0\u4EA4\u6210\u529F\u3002",
6037
6085
  prevSuggestion: "\u4E0A\u4E00\u4E2A\u5EFA\u8BAE",
6038
6086
  nextSuggestion: "\u4E0B\u4E00\u4E2A\u5EFA\u8BAE",
6039
6087
  conceptIllustration: "\u6982\u5FF5\u793A\u610F\u56FE",
6040
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",
6103
+ seoTitle: "\u63CF\u8FF0\u95EE\u9898\uFF0C\u83B7\u5F97\u7B54\u6848",
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",
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",
6041
6106
  capabilities: ["\u57FA\u4E8E\u6211\u4EEC\u81EA\u5DF1\u7684\u6587\u6863", "\u8DE8\u4EA7\u54C1\u5BF9\u6BD4", "\u76F4\u8FBE\u6B63\u786E\u7684\u9875\u9762"],
6042
6107
  prompts: [
6043
6108
  "\u6BCF\u95E8\u8BFE\u7A0B\u90FD\u8BB0\u5728\u4E0D\u540C\u7684\u8868\u683C\u91CC\u3002",
@@ -6081,10 +6146,41 @@ var HI = {
6081
6146
  noAnswer: "\u092F\u0939 \u092E\u0941\u091D\u0947 \u0939\u092E\u093E\u0930\u0947 \u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C\u094B\u0902 \u092E\u0947\u0902 \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E, \u0907\u0938\u0932\u093F\u090F \u0928\u0940\u091A\u0947 \u0926\u093F\u092F\u093E \u0909\u0924\u094D\u0924\u0930 \u0915\u093F\u0938\u0940 \u0938\u094D\u0930\u094B\u0924 \u092A\u0930 \u0906\u0927\u093E\u0930\u093F\u0924 \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 \u0926\u0942\u0938\u0930\u0947 \u0936\u092C\u094D\u0926\u094B\u0902 \u092E\u0947\u0902 \u092A\u0942\u091B\u0947\u0902, \u092F\u093E",
6082
6147
  answerDidNotArrive: "\u0935\u0939 \u0909\u0924\u094D\u0924\u0930 \u0928\u0939\u0940\u0902 \u0906 \u0938\u0915\u093E\u0964 \u0915\u0943\u092A\u092F\u093E \u0926\u094B\u092C\u093E\u0930\u093E \u092A\u0942\u091B\u0947\u0902\u0964",
6083
6148
  askHuman: "\u0939\u092E\u0938\u0947 \u0938\u0902\u092A\u0930\u094D\u0915 \u0915\u0930\u0947\u0902",
6149
+ feedbackPrompt: "\u0915\u094D\u092F\u093E \u092F\u0939 \u0909\u0924\u094D\u0924\u0930 \u092E\u0926\u0926\u0917\u093E\u0930 \u0925\u093E?",
6150
+ feedbackHelpful: "\u092E\u0926\u0926\u0917\u093E\u0930",
6151
+ feedbackNotHelpful: "\u092E\u0926\u0926\u0917\u093E\u0930 \u0928\u0939\u0940\u0902",
6152
+ feedbackReasonTitle: "\u0915\u094D\u092F\u093E \u0920\u0940\u0915 \u0928\u0939\u0940\u0902 \u0925\u093E?",
6153
+ feedbackReasonInaccurate: "\u0917\u093C\u0932\u0924 \u091C\u093E\u0928\u0915\u093E\u0930\u0940",
6154
+ feedbackReasonIncomplete: "\u0905\u0927\u0942\u0930\u093E",
6155
+ feedbackReasonOffTopic: "\u0935\u093F\u0937\u092F \u0938\u0947 \u0939\u091F\u0915\u0930",
6156
+ feedbackReasonHardToFollow: "\u0938\u092E\u091D\u0928\u0947 \u092E\u0947\u0902 \u092E\u0941\u0936\u094D\u0915\u093F\u0932",
6157
+ feedbackReasonOther: "\u0915\u0941\u091B \u0914\u0930",
6158
+ feedbackCommentPlaceholder: "\u0915\u0941\u091B \u0914\u0930 \u092C\u0924\u093E\u090F\u0902 (\u0935\u0948\u0915\u0932\u094D\u092A\u093F\u0915)",
6159
+ feedbackSend: "\u092D\u0947\u091C\u0947\u0902",
6160
+ feedbackDismiss: "\u092C\u0902\u0926 \u0915\u0930\u0947\u0902",
6161
+ feedbackThanks: "\u0927\u0928\u094D\u092F\u0935\u093E\u0926, \u0907\u0938\u0938\u0947 \u092E\u0926\u0926 \u092E\u093F\u0932\u0924\u0940 \u0939\u0948\u0964",
6162
+ feedbackNotSent: "\u092F\u0939 \u092D\u0947\u091C\u093E \u0928\u0939\u0940\u0902 \u091C\u093E \u0938\u0915\u093E\u0964",
6084
6163
  prevSuggestion: "\u092A\u093F\u091B\u0932\u093E \u0938\u0941\u091D\u093E\u0935",
6085
6164
  nextSuggestion: "\u0905\u0917\u0932\u093E \u0938\u0941\u091D\u093E\u0935",
6086
6165
  conceptIllustration: "\u0905\u0935\u0927\u093E\u0930\u0923\u093E \u091A\u093F\u0924\u094D\u0930\u0923",
6087
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",
6181
+ seoTitle: "\u0938\u092E\u0938\u094D\u092F\u093E \u092C\u0924\u093E\u090F\u0902, \u091C\u0935\u093E\u092C \u092A\u093E\u090F\u0902",
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",
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",
6088
6184
  capabilities: [
6089
6185
  "\u0939\u092E\u093E\u0930\u0947 \u0905\u092A\u0928\u0947 \u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C\u094B\u0902 \u092A\u0930 \u0906\u0927\u093E\u0930\u093F\u0924",
6090
6186
  "\u0938\u092D\u0940 \u0909\u0924\u094D\u092A\u093E\u0926\u094B\u0902 \u0915\u0940 \u0924\u0941\u0932\u0928\u093E \u0915\u0930\u0947\u0902",
@@ -6132,10 +6228,41 @@ var ES = {
6132
6228
  noAnswer: "No he encontrado esto en nuestra documentaci\xF3n, as\xED que la respuesta de abajo no se apoya en ninguna fuente. Prueba a reformularla, o",
6133
6229
  answerDidNotArrive: "Esa respuesta no lleg\xF3. Int\xE9ntalo de nuevo.",
6134
6230
  askHuman: "habla con una persona",
6231
+ feedbackPrompt: "\xBFTe ha servido?",
6232
+ feedbackHelpful: "Me sirve",
6233
+ feedbackNotHelpful: "No me sirve",
6234
+ feedbackReasonTitle: "\xBFQu\xE9 ha fallado?",
6235
+ feedbackReasonInaccurate: "Es inexacta",
6236
+ feedbackReasonIncomplete: "Est\xE1 incompleta",
6237
+ feedbackReasonOffTopic: "No viene al caso",
6238
+ feedbackReasonHardToFollow: "Cuesta seguirla",
6239
+ feedbackReasonOther: "Otra cosa",
6240
+ feedbackCommentPlaceholder: "A\xF1ade un detalle (opcional)",
6241
+ feedbackSend: "Enviar",
6242
+ feedbackDismiss: "Cerrar",
6243
+ feedbackThanks: "Gracias, nos sirve.",
6244
+ feedbackNotSent: "No se ha podido enviar.",
6135
6245
  prevSuggestion: "Sugerencia anterior",
6136
6246
  nextSuggestion: "Sugerencia siguiente",
6137
6247
  conceptIllustration: "Ilustraci\xF3n del concepto",
6138
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",
6263
+ seoTitle: "Describe un problema y obt\xE9n una respuesta",
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.",
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.",
6139
6266
  capabilities: [
6140
6267
  "Basado en nuestra documentaci\xF3n",
6141
6268
  "Compara todo el ecosistema",
@@ -6183,10 +6310,41 @@ var AR = {
6183
6310
  noAnswer: "\u0644\u0645 \u0623\u062C\u062F \u0647\u0630\u0627 \u0641\u064A \u0648\u062B\u0627\u0626\u0642\u0646\u0627\u060C \u0644\u0630\u0627 \u0641\u0627\u0644\u0625\u062C\u0627\u0628\u0629 \u0623\u062F\u0646\u0627\u0647 \u063A\u064A\u0631 \u0645\u0633\u062A\u0646\u062F\u0629 \u0625\u0644\u0649 \u0645\u0635\u062F\u0631. \u062D\u0627\u0648\u0644 \u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0635\u064A\u0627\u063A\u0629\u060C \u0623\u0648",
6184
6311
  answerDidNotArrive: "\u0644\u0645 \u062A\u0635\u0644 \u0647\u0630\u0647 \u0627\u0644\u0625\u062C\u0627\u0628\u0629. \u064A\u0631\u062C\u0649 \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629 \u0645\u0631\u0629 \u0623\u062E\u0631\u0649.",
6185
6312
  askHuman: "\u062A\u062D\u062F\u0651\u062B \u0625\u0644\u0649 \u0634\u062E\u0635",
6313
+ feedbackPrompt: "\u0647\u0644 \u0643\u0627\u0646\u062A \u0647\u0630\u0647 \u0627\u0644\u0625\u062C\u0627\u0628\u0629 \u0645\u0641\u064A\u062F\u0629\u061F",
6314
+ feedbackHelpful: "\u0645\u0641\u064A\u062F\u0629",
6315
+ feedbackNotHelpful: "\u063A\u064A\u0631 \u0645\u0641\u064A\u062F\u0629",
6316
+ feedbackReasonTitle: "\u0645\u0627 \u0627\u0644\u062E\u0637\u0623 \u0641\u064A\u0647\u0627\u061F",
6317
+ feedbackReasonInaccurate: "\u063A\u064A\u0631 \u062F\u0642\u064A\u0642\u0629",
6318
+ feedbackReasonIncomplete: "\u0646\u0627\u0642\u0635\u0629",
6319
+ feedbackReasonOffTopic: "\u062E\u0627\u0631\u062C \u0627\u0644\u0645\u0648\u0636\u0648\u0639",
6320
+ feedbackReasonHardToFollow: "\u0635\u0639\u0628\u0629 \u0627\u0644\u0641\u0647\u0645",
6321
+ feedbackReasonOther: "\u0634\u064A\u0621 \u0622\u062E\u0631",
6322
+ feedbackCommentPlaceholder: "\u0623\u0636\u0641 \u062A\u0641\u0635\u064A\u0644\u0627\u064B (\u0627\u062E\u062A\u064A\u0627\u0631\u064A)",
6323
+ feedbackSend: "\u0625\u0631\u0633\u0627\u0644",
6324
+ feedbackDismiss: "\u0625\u063A\u0644\u0627\u0642",
6325
+ feedbackThanks: "\u0634\u0643\u0631\u064B\u0627\u060C \u0647\u0630\u0627 \u064A\u0633\u0627\u0639\u062F\u0646\u0627.",
6326
+ feedbackNotSent: "\u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u0625\u0631\u0633\u0627\u0644.",
6186
6327
  prevSuggestion: "\u0627\u0644\u0627\u0642\u062A\u0631\u0627\u062D \u0627\u0644\u0633\u0627\u0628\u0642",
6187
6328
  nextSuggestion: "\u0627\u0644\u0627\u0642\u062A\u0631\u0627\u062D \u0627\u0644\u062A\u0627\u0644\u064A",
6188
6329
  conceptIllustration: "\u0631\u0633\u0645 \u062A\u0648\u0636\u064A\u062D\u064A \u0644\u0644\u0645\u0641\u0647\u0648\u0645",
6189
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",
6345
+ seoTitle: "\u0635\u0641 \u0645\u0634\u0643\u0644\u062A\u0643 \u0648\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 \u0625\u062C\u0627\u0628\u0629",
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.",
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.",
6190
6348
  capabilities: [
6191
6349
  "\u0645\u0628\u0646\u064A \u0639\u0644\u0649 \u0648\u062B\u0627\u0626\u0642\u0646\u0627",
6192
6350
  "\u0642\u0627\u0631\u0646 \u0639\u0628\u0631 \u0627\u0644\u0645\u0646\u0638\u0648\u0645\u0629",
@@ -6234,10 +6392,41 @@ var TA = {
6234
6392
  noAnswer: "\u0B87\u0BA4\u0BC1 \u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B86\u0BB5\u0BA3\u0B99\u0BCD\u0B95\u0BB3\u0BBF\u0BB2\u0BCD \u0B95\u0BBF\u0B9F\u0BC8\u0B95\u0BCD\u0B95\u0BB5\u0BBF\u0BB2\u0BCD\u0BB2\u0BC8, \u0B8E\u0BA9\u0BB5\u0BC7 \u0B95\u0BC0\u0BB4\u0BC7 \u0B89\u0BB3\u0BCD\u0BB3 \u0BAA\u0BA4\u0BBF\u0BB2\u0BC1\u0B95\u0BCD\u0B95\u0BC1 \u0BAE\u0BC2\u0BB2\u0BAE\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8. \u0BB5\u0BC7\u0BB1\u0BC1 \u0BB5\u0B95\u0BC8\u0BAF\u0BBF\u0BB2\u0BCD \u0B95\u0BC7\u0BB3\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD, \u0B85\u0BB2\u0BCD\u0BB2\u0BA4\u0BC1",
6235
6393
  answerDidNotArrive: "\u0B85\u0BA8\u0BCD\u0BA4\u0BAA\u0BCD \u0BAA\u0BA4\u0BBF\u0BB2\u0BCD \u0BB5\u0BB0\u0BB5\u0BBF\u0BB2\u0BCD\u0BB2\u0BC8. \u0BAE\u0BC0\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD \u0B95\u0BC7\u0B9F\u0BCD\u0B9F\u0BC1\u0BAA\u0BCD \u0BAA\u0BBE\u0BB0\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD.",
6236
6394
  askHuman: "\u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BC8\u0BA4\u0BCD \u0BA4\u0BCA\u0B9F\u0BB0\u0BCD\u0BAA\u0BC1 \u0B95\u0BCA\u0BB3\u0BCD\u0BB3\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
6395
+ feedbackPrompt: "\u0B87\u0BA8\u0BCD\u0BA4\u0BAA\u0BCD \u0BAA\u0BA4\u0BBF\u0BB2\u0BCD \u0BAA\u0BAF\u0BA9\u0BC1\u0BB3\u0BCD\u0BB3\u0BA4\u0BBE\u0B95 \u0B87\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4\u0BA4\u0BBE?",
6396
+ feedbackHelpful: "\u0BAA\u0BAF\u0BA9\u0BC1\u0BB3\u0BCD\u0BB3\u0BA4\u0BC1",
6397
+ feedbackNotHelpful: "\u0BAA\u0BAF\u0BA9\u0BBF\u0BB2\u0BCD\u0BB2\u0BC8",
6398
+ feedbackReasonTitle: "\u0B8E\u0BA9\u0BCD\u0BA9 \u0B9A\u0BB0\u0BBF\u0BAF\u0BBE\u0B95 \u0B87\u0BB2\u0BCD\u0BB2\u0BC8?",
6399
+ feedbackReasonInaccurate: "\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BA4\u0B95\u0BB5\u0BB2\u0BCD",
6400
+ feedbackReasonIncomplete: "\u0BAE\u0BC1\u0BB4\u0BC1\u0BAE\u0BC8\u0BAF\u0BB1\u0BCD\u0BB1\u0BA4\u0BC1",
6401
+ feedbackReasonOffTopic: "\u0BA4\u0BB2\u0BC8\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BCD\u0B95\u0BC1 \u0B85\u0BAA\u0BCD\u0BAA\u0BBE\u0BB1\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1",
6402
+ feedbackReasonHardToFollow: "\u0BAA\u0BC1\u0BB0\u0BBF\u0BA8\u0BCD\u0BA4\u0BC1\u0B95\u0BCA\u0BB3\u0BCD\u0BB3 \u0B95\u0B9F\u0BBF\u0BA9\u0BAE\u0BCD",
6403
+ feedbackReasonOther: "\u0BB5\u0BC7\u0BB1\u0BC1 \u0B8F\u0BA4\u0BCB",
6404
+ feedbackCommentPlaceholder: "\u0BAE\u0BC7\u0BB2\u0BC1\u0BAE\u0BCD \u0BB5\u0BBF\u0BB5\u0BB0\u0BAE\u0BCD (\u0BB5\u0BBF\u0BB0\u0BC1\u0BAA\u0BCD\u0BAA\u0BAE\u0BCD)",
6405
+ feedbackSend: "\u0B85\u0BA9\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1",
6406
+ feedbackDismiss: "\u0BAE\u0BC2\u0B9F\u0BC1",
6407
+ feedbackThanks: "\u0BA8\u0BA9\u0BCD\u0BB1\u0BBF, \u0B87\u0BA4\u0BC1 \u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BC1\u0B95\u0BCD\u0B95\u0BC1 \u0B89\u0BA4\u0BB5\u0BC1\u0B95\u0BBF\u0BB1\u0BA4\u0BC1.",
6408
+ feedbackNotSent: "\u0B85\u0BA9\u0BC1\u0BAA\u0BCD\u0BAA \u0BAE\u0BC1\u0B9F\u0BBF\u0BAF\u0BB5\u0BBF\u0BB2\u0BCD\u0BB2\u0BC8.",
6237
6409
  prevSuggestion: "\u0BAE\u0BC1\u0BA8\u0BCD\u0BA4\u0BC8\u0BAF \u0BAA\u0BB0\u0BBF\u0BA8\u0BCD\u0BA4\u0BC1\u0BB0\u0BC8",
6238
6410
  nextSuggestion: "\u0B85\u0B9F\u0BC1\u0BA4\u0BCD\u0BA4 \u0BAA\u0BB0\u0BBF\u0BA8\u0BCD\u0BA4\u0BC1\u0BB0\u0BC8",
6239
6411
  conceptIllustration: "\u0B95\u0BB0\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1 \u0BB5\u0BBF\u0BB3\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BAE\u0BCD",
6240
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",
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",
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.",
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.",
6241
6430
  capabilities: [
6242
6431
  "\u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B9A\u0BCA\u0BA8\u0BCD\u0BA4 \u0B86\u0BB5\u0BA3\u0B99\u0BCD\u0B95\u0BB3\u0BBF\u0BA9\u0BCD \u0B85\u0B9F\u0BBF\u0BAA\u0BCD\u0BAA\u0B9F\u0BC8\u0BAF\u0BBF\u0BB2\u0BCD",
6243
6432
  "\u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BC8 \u0B92\u0BAA\u0BCD\u0BAA\u0BBF\u0B9F\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
@@ -6278,6 +6467,193 @@ function exploreStrings(locale) {
6278
6467
  function fill(template, values) {
6279
6468
  return template.replace(/\{(\w+)\}/g, (match, key) => values[key] ?? match);
6280
6469
  }
6470
+
6471
+ // src/components/explore-types.ts
6472
+ var EXPLORE_FEEDBACK_REASONS = [
6473
+ "INACCURATE",
6474
+ "INCOMPLETE",
6475
+ "OFF_TOPIC",
6476
+ "HARD_TO_FOLLOW",
6477
+ "OTHER"
6478
+ ];
6479
+ var EXPLORE_MESSAGE_FIELDS = (
6480
+ /* GraphQL */
6481
+ `
6482
+ id
6483
+ conversationId
6484
+ role
6485
+ status
6486
+ content
6487
+ partialContent
6488
+ activity
6489
+ references {
6490
+ url
6491
+ title
6492
+ description
6493
+ product
6494
+ imageUrl
6495
+ index
6496
+ }
6497
+ ctas {
6498
+ kind
6499
+ label
6500
+ url
6501
+ product
6502
+ }
6503
+ followUps
6504
+ answered
6505
+ attachments {
6506
+ name
6507
+ mimeType
6508
+ size
6509
+ textExtracted
6510
+ }
6511
+ errorCode
6512
+ createdAt
6513
+ completedAt
6514
+ `
6515
+ );
6516
+ var EXPLORE_OWN_MESSAGE_FIELDS = (
6517
+ /* GraphQL */
6518
+ `
6519
+ ${EXPLORE_MESSAGE_FIELDS}
6520
+ feedback {
6521
+ rating
6522
+ reason
6523
+ comment
6524
+ createdAt
6525
+ }
6526
+ `
6527
+ );
6528
+ var EXPLORE_CATALOG_ESTABLISHED_FIELDS = (
6529
+ /* GraphQL */
6530
+ `
6531
+ enabled
6532
+ products {
6533
+ slug
6534
+ name
6535
+ tagline
6536
+ website
6537
+ }
6538
+ examplePrompts
6539
+ welcomeTitle
6540
+ welcomeBody
6541
+ limits {
6542
+ maxMessageLength
6543
+ maxTurnsPerConversation
6544
+ messagesPerDay
6545
+ historyTurns
6546
+ }
6547
+ captchaRequired
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}
6568
+ }
6569
+ }
6570
+ `
6571
+ );
6572
+ }
6573
+ var EXPLORE_CATALOG_QUERY = exploreCatalogDocument(
6574
+ EXPLORE_CATALOG_HIGHLIGHT_FIELD
6575
+ );
6576
+ var EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS = exploreCatalogDocument("");
6577
+ var EXPLORE_MESSAGE_QUERY = (
6578
+ /* GraphQL */
6579
+ `
6580
+ query ExploreMessage($conversationToken: String!, $id: ID!) {
6581
+ exploreMessage(conversationToken: $conversationToken, id: $id) {
6582
+ ${EXPLORE_OWN_MESSAGE_FIELDS}
6583
+ }
6584
+ }
6585
+ `
6586
+ );
6587
+ var SEND_EXPLORE_MESSAGE_MUTATION = (
6588
+ /* GraphQL */
6589
+ `
6590
+ mutation SendExploreMessage($input: SendExploreMessageInput!) {
6591
+ sendExploreMessage(input: $input) {
6592
+ conversation {
6593
+ id
6594
+ token
6595
+ productSlug
6596
+ turnCount
6597
+ createdAt
6598
+ }
6599
+ userMessage {
6600
+ ${EXPLORE_OWN_MESSAGE_FIELDS}
6601
+ }
6602
+ assistantMessage {
6603
+ ${EXPLORE_OWN_MESSAGE_FIELDS}
6604
+ }
6605
+ remainingToday
6606
+ }
6607
+ }
6608
+ `
6609
+ );
6610
+ var RECORD_EXPLORE_CLICK_MUTATION = (
6611
+ /* GraphQL */
6612
+ `
6613
+ mutation RecordExploreClick($input: RecordExploreClickInput!) {
6614
+ recordExploreClick(input: $input) {
6615
+ recorded
6616
+ }
6617
+ }
6618
+ `
6619
+ );
6620
+ var SUBMIT_EXPLORE_FEEDBACK_MUTATION = (
6621
+ /* GraphQL */
6622
+ `
6623
+ mutation SubmitExploreFeedback($input: SubmitExploreFeedbackInput!) {
6624
+ submitExploreFeedback(input: $input) {
6625
+ recorded
6626
+ feedback {
6627
+ rating
6628
+ reason
6629
+ comment
6630
+ createdAt
6631
+ }
6632
+ }
6633
+ }
6634
+ `
6635
+ );
6636
+ var EXPLORE_FEEDBACK_COMMENT_SOFT_MAX = 500;
6637
+ var CREATE_EXPLORE_SHARE_LINK_MUTATION = (
6638
+ /* GraphQL */
6639
+ `
6640
+ mutation CreateExploreShareLink($conversationToken: String!) {
6641
+ createExploreShareLink(conversationToken: $conversationToken) {
6642
+ shareToken
6643
+ }
6644
+ }
6645
+ `
6646
+ );
6647
+ var EXPLORE_SHARED_CONVERSATION_QUERY = (
6648
+ /* GraphQL */
6649
+ `
6650
+ query ExploreSharedConversation($shareToken: String!) {
6651
+ exploreSharedConversation(shareToken: $shareToken) {
6652
+ ${EXPLORE_MESSAGE_FIELDS}
6653
+ }
6654
+ }
6655
+ `
6656
+ );
6281
6657
  var PROSE_CSS = `
6282
6658
  .boff-prose {
6283
6659
  max-width: none;
@@ -6455,135 +6831,6 @@ function ProseStyles() {
6455
6831
  return /* @__PURE__ */ jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: PROSE_CSS } });
6456
6832
  }
6457
6833
 
6458
- // src/components/explore-types.ts
6459
- var EXPLORE_MESSAGE_FIELDS = (
6460
- /* GraphQL */
6461
- `
6462
- id
6463
- conversationId
6464
- role
6465
- status
6466
- content
6467
- partialContent
6468
- activity
6469
- references {
6470
- url
6471
- title
6472
- description
6473
- product
6474
- imageUrl
6475
- index
6476
- }
6477
- ctas {
6478
- kind
6479
- label
6480
- url
6481
- product
6482
- }
6483
- followUps
6484
- answered
6485
- attachments {
6486
- name
6487
- mimeType
6488
- size
6489
- textExtracted
6490
- }
6491
- errorCode
6492
- createdAt
6493
- completedAt
6494
- `
6495
- );
6496
- var EXPLORE_CATALOG_QUERY = (
6497
- /* GraphQL */
6498
- `
6499
- query ExploreCatalog($productSlug: String) {
6500
- exploreCatalog(productSlug: $productSlug) {
6501
- enabled
6502
- products {
6503
- slug
6504
- name
6505
- tagline
6506
- website
6507
- }
6508
- examplePrompts
6509
- welcomeTitle
6510
- welcomeBody
6511
- limits {
6512
- maxMessageLength
6513
- maxTurnsPerConversation
6514
- messagesPerDay
6515
- historyTurns
6516
- }
6517
- captchaRequired
6518
- recaptchaSiteKey
6519
- }
6520
- }
6521
- `
6522
- );
6523
- var EXPLORE_MESSAGE_QUERY = (
6524
- /* GraphQL */
6525
- `
6526
- query ExploreMessage($conversationToken: String!, $id: ID!) {
6527
- exploreMessage(conversationToken: $conversationToken, id: $id) {
6528
- ${EXPLORE_MESSAGE_FIELDS}
6529
- }
6530
- }
6531
- `
6532
- );
6533
- var SEND_EXPLORE_MESSAGE_MUTATION = (
6534
- /* GraphQL */
6535
- `
6536
- mutation SendExploreMessage($input: SendExploreMessageInput!) {
6537
- sendExploreMessage(input: $input) {
6538
- conversation {
6539
- id
6540
- token
6541
- productSlug
6542
- turnCount
6543
- createdAt
6544
- }
6545
- userMessage {
6546
- ${EXPLORE_MESSAGE_FIELDS}
6547
- }
6548
- assistantMessage {
6549
- ${EXPLORE_MESSAGE_FIELDS}
6550
- }
6551
- remainingToday
6552
- }
6553
- }
6554
- `
6555
- );
6556
- var RECORD_EXPLORE_CLICK_MUTATION = (
6557
- /* GraphQL */
6558
- `
6559
- mutation RecordExploreClick($input: RecordExploreClickInput!) {
6560
- recordExploreClick(input: $input) {
6561
- recorded
6562
- }
6563
- }
6564
- `
6565
- );
6566
- var CREATE_EXPLORE_SHARE_LINK_MUTATION = (
6567
- /* GraphQL */
6568
- `
6569
- mutation CreateExploreShareLink($conversationToken: String!) {
6570
- createExploreShareLink(conversationToken: $conversationToken) {
6571
- shareToken
6572
- }
6573
- }
6574
- `
6575
- );
6576
- var EXPLORE_SHARED_CONVERSATION_QUERY = (
6577
- /* GraphQL */
6578
- `
6579
- query ExploreSharedConversation($shareToken: String!) {
6580
- exploreSharedConversation(shareToken: $shareToken) {
6581
- ${EXPLORE_MESSAGE_FIELDS}
6582
- }
6583
- }
6584
- `
6585
- );
6586
-
6587
6834
  // src/data/products.ts
6588
6835
  var ECOSYSTEM_PRODUCTS = [
6589
6836
  {
@@ -6867,7 +7114,12 @@ function buildFallbackCatalog(examplePrompts, welcome) {
6867
7114
  welcomeBody: welcome?.body ?? FALLBACK_WELCOME_BODY,
6868
7115
  limits: FALLBACK_EXPLORE_LIMITS,
6869
7116
  captchaRequired: false,
6870
- 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: []
6871
7123
  };
6872
7124
  }
6873
7125
  function normalizeCatalog(raw, fallback) {
@@ -6884,9 +7136,27 @@ function normalizeCatalog(raw, fallback) {
6884
7136
  historyTurns: raw.limits?.historyTurns || fallback.limits.historyTurns
6885
7137
  },
6886
7138
  captchaRequired: raw.captchaRequired === true,
6887
- 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
6888
7147
  };
6889
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
+ }
6890
7160
  var RATE_LIMIT_CODES = /* @__PURE__ */ new Set([
6891
7161
  "RATE_LIMITED",
6892
7162
  "HTTP_429",
@@ -7226,11 +7496,19 @@ function useExploreChat(options = {}) {
7226
7496
  React.useEffect(() => {
7227
7497
  let cancelled = false;
7228
7498
  const load = async () => {
7229
- const res = await client.query(
7499
+ const variables = { productSlug: productSlug ?? null };
7500
+ let res = await client.query(
7230
7501
  EXPLORE_CATALOG_QUERY,
7231
- { productSlug: productSlug ?? null }
7502
+ variables
7232
7503
  );
7233
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
+ }
7234
7512
  const raw = res.data?.exploreCatalog;
7235
7513
  if (res.errors?.length || !raw) {
7236
7514
  console.warn(
@@ -7611,6 +7889,42 @@ function useExploreChat(options = {}) {
7611
7889
  },
7612
7890
  [client]
7613
7891
  );
7892
+ const submitFeedback = React.useCallback(
7893
+ async (messageId, rating, detail) => {
7894
+ const token = conversationTokenRef.current;
7895
+ if (!token) return false;
7896
+ const comment = detail?.comment?.trim();
7897
+ const input = {
7898
+ conversationToken: token,
7899
+ messageId,
7900
+ rating,
7901
+ // Only meaningful with NOT_HELPFUL. The server stores null for HELPFUL either
7902
+ // way; sending it would just be noise the backend has to defend against.
7903
+ reason: rating === "NOT_HELPFUL" ? detail?.reason ?? null : null,
7904
+ comment: comment ? comment : null
7905
+ };
7906
+ try {
7907
+ const res = await client.mutate(
7908
+ SUBMIT_EXPLORE_FEEDBACK_MUTATION,
7909
+ { input }
7910
+ );
7911
+ const result = res?.data?.submitExploreFeedback;
7912
+ if (!result?.recorded) return false;
7913
+ const recorded = result.feedback;
7914
+ if (recorded && mountedRef.current) {
7915
+ setMessages(
7916
+ (current) => current.map(
7917
+ (message) => message.id === messageId ? { ...message, feedback: recorded } : message
7918
+ )
7919
+ );
7920
+ }
7921
+ return true;
7922
+ } catch {
7923
+ return false;
7924
+ }
7925
+ },
7926
+ [client]
7927
+ );
7614
7928
  return {
7615
7929
  phase,
7616
7930
  catalog,
@@ -7630,6 +7944,7 @@ function useExploreChat(options = {}) {
7630
7944
  deleteConversation,
7631
7945
  clearHistory,
7632
7946
  recordClick,
7947
+ submitFeedback,
7633
7948
  createShareLink,
7634
7949
  isSharedView
7635
7950
  };
@@ -8360,6 +8675,122 @@ function isInlineImageAllowed(src, origins) {
8360
8675
  if (url.protocol !== "https:" || url.username || url.password) return false;
8361
8676
  return origins.has(url.origin);
8362
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
+ }
8363
8794
  var InlineImageScopeContext = React.createContext(null);
8364
8795
  var InsideLinkContext = React.createContext(false);
8365
8796
  function AnswerLink(props) {
@@ -8557,6 +8988,315 @@ function ThinkingIndicator({ activity }) {
8557
8988
  }
8558
8989
  );
8559
8990
  }
8991
+ function AnswerFeedback({
8992
+ strings: T,
8993
+ messageId,
8994
+ feedback,
8995
+ onSubmit
8996
+ }) {
8997
+ const [local, setLocal] = React.useState(null);
8998
+ const [failed, setFailed] = React.useState(false);
8999
+ const [sending, setSending] = React.useState(false);
9000
+ const [chooserOpen, setChooserOpen] = React.useState(false);
9001
+ const [reason, setReason] = React.useState(null);
9002
+ const [comment, setComment] = React.useState("");
9003
+ const downRef = React.useRef(null);
9004
+ const firstReasonRef = React.useRef(null);
9005
+ const inFlightRef = React.useRef(false);
9006
+ const panelId = `boff-explore-feedback-${messageId}`;
9007
+ const rating = local ?? feedback?.rating ?? null;
9008
+ const rated = rating !== null;
9009
+ const reasonLabels = {
9010
+ INACCURATE: T.feedbackReasonInaccurate,
9011
+ INCOMPLETE: T.feedbackReasonIncomplete,
9012
+ OFF_TOPIC: T.feedbackReasonOffTopic,
9013
+ HARD_TO_FOLLOW: T.feedbackReasonHardToFollow,
9014
+ OTHER: T.feedbackReasonOther
9015
+ };
9016
+ const closeChooser = React.useCallback(() => {
9017
+ setChooserOpen(false);
9018
+ downRef.current?.focus();
9019
+ }, []);
9020
+ const submit = React.useCallback(
9021
+ async (next, detail) => {
9022
+ if (inFlightRef.current) return;
9023
+ inFlightRef.current = true;
9024
+ setSending(true);
9025
+ setFailed(false);
9026
+ setLocal(next);
9027
+ const recorded = await onSubmit(next, detail);
9028
+ inFlightRef.current = false;
9029
+ setSending(false);
9030
+ if (recorded) return;
9031
+ setLocal(null);
9032
+ setFailed(true);
9033
+ },
9034
+ [onSubmit]
9035
+ );
9036
+ const onThumbUp = React.useCallback(() => {
9037
+ setChooserOpen(false);
9038
+ void submit("HELPFUL");
9039
+ }, [submit]);
9040
+ const onThumbDown = React.useCallback(() => {
9041
+ setChooserOpen((open) => !open);
9042
+ }, []);
9043
+ const onSendReason = React.useCallback(() => {
9044
+ setChooserOpen(false);
9045
+ void submit("NOT_HELPFUL", { reason, comment });
9046
+ }, [comment, reason, submit]);
9047
+ React.useEffect(() => {
9048
+ if (!chooserOpen) return;
9049
+ firstReasonRef.current?.focus();
9050
+ }, [chooserOpen]);
9051
+ const thumbClass = (active) => cn(
9052
+ "inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full border transition-colors",
9053
+ "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
9054
+ "disabled:pointer-events-none disabled:opacity-50",
9055
+ active ? "border-primary/40 bg-accent text-primary" : "border-border bg-card text-muted-foreground hover:border-primary/40 hover:bg-accent hover:text-foreground"
9056
+ );
9057
+ return /* @__PURE__ */ jsxRuntime.jsxs(
9058
+ "div",
9059
+ {
9060
+ "data-boff-explore": "feedback",
9061
+ "data-rating": rating ?? "none",
9062
+ className: "pt-0.5",
9063
+ children: [
9064
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-x-2 gap-y-1", children: [
9065
+ /* @__PURE__ */ jsxRuntime.jsx(
9066
+ "p",
9067
+ {
9068
+ "data-boff-explore": "feedback-status",
9069
+ role: "status",
9070
+ className: "text-xs text-muted-foreground",
9071
+ children: failed ? T.feedbackNotSent : rated ? T.feedbackThanks : T.feedbackPrompt
9072
+ }
9073
+ ),
9074
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
9075
+ /* @__PURE__ */ jsxRuntime.jsx(
9076
+ "button",
9077
+ {
9078
+ "data-boff-explore": "feedback-up",
9079
+ type: "button",
9080
+ disabled: sending,
9081
+ "aria-label": T.feedbackHelpful,
9082
+ title: T.feedbackHelpful,
9083
+ "aria-pressed": rating === "HELPFUL",
9084
+ onClick: onThumbUp,
9085
+ className: thumbClass(rating === "HELPFUL"),
9086
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ThumbsUp, { className: "h-3.5 w-3.5", "aria-hidden": "true" })
9087
+ }
9088
+ ),
9089
+ /* @__PURE__ */ jsxRuntime.jsx(
9090
+ "button",
9091
+ {
9092
+ ref: downRef,
9093
+ "data-boff-explore": "feedback-down",
9094
+ type: "button",
9095
+ disabled: sending,
9096
+ "aria-label": T.feedbackNotHelpful,
9097
+ title: T.feedbackNotHelpful,
9098
+ "aria-pressed": rating === "NOT_HELPFUL",
9099
+ "aria-expanded": chooserOpen,
9100
+ "aria-controls": chooserOpen ? panelId : void 0,
9101
+ onClick: onThumbDown,
9102
+ className: thumbClass(rating === "NOT_HELPFUL" || chooserOpen),
9103
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ThumbsDown, { className: "h-3.5 w-3.5", "aria-hidden": "true" })
9104
+ }
9105
+ )
9106
+ ] })
9107
+ ] }),
9108
+ chooserOpen ? /* @__PURE__ */ jsxRuntime.jsxs(
9109
+ "div",
9110
+ {
9111
+ id: panelId,
9112
+ "data-boff-explore": "feedback-reasons",
9113
+ role: "group",
9114
+ "aria-label": T.feedbackReasonTitle,
9115
+ onKeyDown: (event) => {
9116
+ if (event.key !== "Escape") return;
9117
+ event.stopPropagation();
9118
+ closeChooser();
9119
+ },
9120
+ className: "boff-explore-fade mt-2 rounded-xl border border-border bg-card p-3",
9121
+ children: [
9122
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-medium text-card-foreground", children: T.feedbackReasonTitle }),
9123
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1.5", children: EXPLORE_FEEDBACK_REASONS.map((code, index) => /* @__PURE__ */ jsxRuntime.jsx(
9124
+ "button",
9125
+ {
9126
+ ref: index === 0 ? firstReasonRef : void 0,
9127
+ "data-boff-explore": "feedback-reason",
9128
+ "data-reason": code,
9129
+ type: "button",
9130
+ "aria-pressed": reason === code,
9131
+ onClick: () => setReason((current) => current === code ? null : code),
9132
+ className: cn(
9133
+ "inline-flex max-w-full items-center rounded-full border px-3 py-1 text-xs transition-colors",
9134
+ "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
9135
+ reason === code ? "border-primary/40 bg-accent text-primary" : "border-border bg-background text-muted-foreground hover:border-primary/40 hover:bg-accent hover:text-foreground"
9136
+ ),
9137
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: reasonLabels[code] })
9138
+ },
9139
+ code
9140
+ )) }),
9141
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 flex flex-wrap items-center gap-2", children: [
9142
+ /* @__PURE__ */ jsxRuntime.jsx(
9143
+ "input",
9144
+ {
9145
+ "data-boff-explore": "feedback-comment",
9146
+ type: "text",
9147
+ value: comment,
9148
+ onChange: (event) => setComment(event.target.value),
9149
+ onKeyDown: (event) => {
9150
+ if (event.key !== "Enter") return;
9151
+ event.preventDefault();
9152
+ onSendReason();
9153
+ },
9154
+ "aria-label": T.feedbackCommentPlaceholder,
9155
+ placeholder: T.feedbackCommentPlaceholder,
9156
+ maxLength: EXPLORE_FEEDBACK_COMMENT_SOFT_MAX,
9157
+ className: "min-w-0 flex-1 rounded-md border border-border bg-background px-2 py-1 text-base text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring sm:text-sm"
9158
+ }
9159
+ ),
9160
+ /* @__PURE__ */ jsxRuntime.jsx(
9161
+ Button,
9162
+ {
9163
+ "data-boff-explore": "feedback-send",
9164
+ type: "button",
9165
+ size: "sm",
9166
+ disabled: sending,
9167
+ onClick: onSendReason,
9168
+ children: T.feedbackSend
9169
+ }
9170
+ ),
9171
+ /* @__PURE__ */ jsxRuntime.jsx(
9172
+ Button,
9173
+ {
9174
+ "data-boff-explore": "feedback-dismiss",
9175
+ type: "button",
9176
+ size: "sm",
9177
+ variant: "ghost",
9178
+ className: "text-muted-foreground",
9179
+ onClick: closeChooser,
9180
+ children: T.feedbackDismiss
9181
+ }
9182
+ )
9183
+ ] })
9184
+ ]
9185
+ }
9186
+ ) : null
9187
+ ]
9188
+ }
9189
+ );
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
+ }
8560
9300
  function UserBubble({
8561
9301
  strings: T,
8562
9302
  message
@@ -8602,10 +9342,12 @@ function AssistantBubble({
8602
9342
  message,
8603
9343
  activity,
8604
9344
  imageOrigins,
9345
+ productNames,
8605
9346
  onNavigate,
8606
9347
  anchorRef,
8607
9348
  onFollow,
8608
- onFollowUp
9349
+ onFollowUp,
9350
+ onFeedback
8609
9351
  }) {
8610
9352
  const streaming = message.status === "PENDING" || message.status === "RUNNING";
8611
9353
  const body = message.content || message.partialContent || "";
@@ -8629,6 +9371,15 @@ function AssistantBubble({
8629
9371
  }),
8630
9372
  [T, completed, imageOrigins, failedImages, markImageFailed]
8631
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;
8632
9383
  return /* @__PURE__ */ jsxRuntime.jsxs(
8633
9384
  "div",
8634
9385
  {
@@ -8678,6 +9429,7 @@ function AssistantBubble({
8678
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 }) }) }),
8679
9430
  streaming ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "boff-explore-caret", "aria-hidden": "true" }) : null
8680
9431
  ] }) : null,
9432
+ grounded && provenance.total > 0 ? /* @__PURE__ */ jsxRuntime.jsx(ProvenanceChips, { strings: T, provenance }) : null,
8681
9433
  streaming ? /* @__PURE__ */ jsxRuntime.jsx(ThinkingIndicator, { activity }) : null,
8682
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,
8683
9435
  message.references.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -8716,7 +9468,17 @@ function AssistantBubble({
8716
9468
  },
8717
9469
  question
8718
9470
  )) })
8719
- ] }) : null
9471
+ ] }) : null,
9472
+ completed && copyText !== "" ? /* @__PURE__ */ jsxRuntime.jsx(AnswerActions, { strings: T, text: copyText }) : null,
9473
+ completed && onFeedback ? /* @__PURE__ */ jsxRuntime.jsx(
9474
+ AnswerFeedback,
9475
+ {
9476
+ strings: T,
9477
+ messageId: message.id,
9478
+ feedback: message.feedback,
9479
+ onSubmit: onFeedback
9480
+ }
9481
+ ) : null
8720
9482
  ] })
8721
9483
  ]
8722
9484
  }
@@ -8920,6 +9682,96 @@ function ProductStrip({
8920
9682
  }
8921
9683
  );
8922
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
+ }
8923
9775
  function DisclaimerDialog({
8924
9776
  open,
8925
9777
  onClose,
@@ -9026,6 +9878,7 @@ function WelcomeState({
9026
9878
  body,
9027
9879
  prompts,
9028
9880
  products,
9881
+ conceptHighlights,
9029
9882
  focusProduct,
9030
9883
  onPrompt,
9031
9884
  onFocus,
@@ -9064,6 +9917,15 @@ function WelcomeState({
9064
9917
  }
9065
9918
  )
9066
9919
  ] }) : null,
9920
+ /* @__PURE__ */ jsxRuntime.jsx(
9921
+ ConceptStrip,
9922
+ {
9923
+ strings: T,
9924
+ highlights: conceptHighlights,
9925
+ onAsk: onPrompt,
9926
+ disabled
9927
+ }
9928
+ ),
9067
9929
  products.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-rise boff-explore-rise-3 mt-6", children: [
9068
9930
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.focusProduct }),
9069
9931
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -9120,6 +9982,7 @@ function ExplorePage({
9120
9982
  deleteConversation,
9121
9983
  clearHistory,
9122
9984
  recordClick,
9985
+ submitFeedback,
9123
9986
  createShareLink,
9124
9987
  isSharedView
9125
9988
  } = useExploreChat({
@@ -9176,10 +10039,18 @@ function ExplorePage({
9176
10039
  () => catalog.products.find((p) => p.slug === focusProduct)?.name ?? null,
9177
10040
  [catalog.products, focusProduct]
9178
10041
  );
10042
+ const headProductName = React.useMemo(
10043
+ () => productSlug ? catalog.products.find((p) => p.slug === productSlug)?.name ?? null : null,
10044
+ [catalog.products, productSlug]
10045
+ );
9179
10046
  const imageOrigins = React.useMemo(
9180
10047
  () => inlineImageOrigins(catalog.products),
9181
10048
  [catalog.products]
9182
10049
  );
10050
+ const productNames = React.useMemo(
10051
+ () => productNamesByOrigin(catalog.products),
10052
+ [catalog.products]
10053
+ );
9183
10054
  React.useEffect(() => {
9184
10055
  const el = textareaRef.current;
9185
10056
  if (!el) return;
@@ -9540,16 +10411,17 @@ function ExplorePage({
9540
10411
  ),
9541
10412
  style: rootStyle,
9542
10413
  children: [
9543
- seo ? /* @__PURE__ */ jsxRuntime.jsx(
10414
+ /* @__PURE__ */ jsxRuntime.jsx(
9544
10415
  PageHead,
9545
10416
  {
9546
- title: seo.title ?? "Explore \u2014 ask anything about our products",
9547
- description: seo.description ?? "Ask questions in plain English and get answers drawn from our product documentation, with links to the exact pages they came from.",
9548
- keywords: seo.keywords,
9549
- image: seo.image,
9550
- url: seo.url
10417
+ title: seo?.title ?? T.seoTitle,
10418
+ description: seo?.description ?? (headProductName ? fill(T.seoDescriptionProduct, { product: headProductName }) : T.seoDescription),
10419
+ productName: seo?.title ? void 0 : headProductName ?? void 0,
10420
+ keywords: seo?.keywords,
10421
+ image: seo?.image,
10422
+ url: seo?.url
9551
10423
  }
9552
- ) : null,
10424
+ ),
9553
10425
  /* @__PURE__ */ jsxRuntime.jsx(ProseStyles, {}),
9554
10426
  /* @__PURE__ */ jsxRuntime.jsx(ExploreStyles, {}),
9555
10427
  !showWelcome ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2.5 border-b border-border px-4 py-2.5", children: [
@@ -9710,6 +10582,7 @@ function ExplorePage({
9710
10582
  body: resolvedBody,
9711
10583
  prompts,
9712
10584
  products: catalog.products,
10585
+ conceptHighlights: catalog.conceptHighlights,
9713
10586
  focusProduct,
9714
10587
  onPrompt: sendPrompt,
9715
10588
  onFocus: setFocusProduct,
@@ -9723,10 +10596,12 @@ function ExplorePage({
9723
10596
  message,
9724
10597
  activity,
9725
10598
  imageOrigins,
10599
+ productNames,
9726
10600
  onNavigate,
9727
10601
  anchorRef: message.id === latestAssistantId ? latestAssistantRef : void 0,
9728
10602
  onFollow: (kind, url) => recordClick(message.id, kind, url),
9729
- onFollowUp: sendPrompt
10603
+ onFollowUp: sendPrompt,
10604
+ onFeedback: isSharedView ? void 0 : (rating, detail) => submitFeedback(message.id, rating, detail)
9730
10605
  },
9731
10606
  message.id
9732
10607
  )
@@ -14703,6 +15578,7 @@ exports.DEFAULT_CONTACT_CATEGORIES = DEFAULT_CONTACT_CATEGORIES;
14703
15578
  exports.DEFAULT_EXPLORE_EXAMPLE_PROMPTS = DEFAULT_EXPLORE_EXAMPLE_PROMPTS;
14704
15579
  exports.ECOSYSTEM_PRODUCTS = ECOSYSTEM_PRODUCTS;
14705
15580
  exports.EXPLORE_CATALOG_QUERY = EXPLORE_CATALOG_QUERY;
15581
+ exports.EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS = EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS;
14706
15582
  exports.EXPLORE_LOCALES = EXPLORE_LOCALES;
14707
15583
  exports.EXPLORE_MESSAGE_QUERY = EXPLORE_MESSAGE_QUERY;
14708
15584
  exports.EXPLORE_RECAPTCHA_ACTION = EXPLORE_RECAPTCHA_ACTION;