@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/components/explore.d.mts +81 -3
- package/dist/components/explore.d.ts +81 -3
- package/dist/components/explore.js +1022 -143
- package/dist/components/explore.js.map +1 -1
- package/dist/components/explore.mjs +1020 -145
- package/dist/components/explore.mjs.map +1 -1
- package/dist/{explore-types-CLw19R76.d.mts → explore-types-DvQPiL1t.d.mts} +97 -4
- package/dist/{explore-types-CLw19R76.d.ts → explore-types-DvQPiL1t.d.ts} +97 -4
- package/dist/hooks/index.d.mts +2 -2
- package/dist/hooks/index.d.ts +2 -2
- package/dist/hooks/index.js +129 -11
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +129 -11
- package/dist/hooks/index.mjs.map +1 -1
- package/dist/index.d.mts +63 -2
- package/dist/index.d.ts +63 -2
- package/dist/index.js +1019 -143
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1020 -145
- package/dist/index.mjs.map +1 -1
- package/dist/{use-explore-chat-DC47G-C3.d.mts → use-explore-chat-CNEdKBc1.d.ts} +13 -1
- package/dist/{use-explore-chat-DyPMkzXA.d.ts → use-explore-chat-Dgm-jf96.d.mts} +13 -1
- package/package.json +1 -1
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
|
|
7499
|
+
const variables = { productSlug: productSlug ?? null };
|
|
7500
|
+
let res = await client.query(
|
|
7230
7501
|
EXPLORE_CATALOG_QUERY,
|
|
7231
|
-
|
|
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
|
-
|
|
10414
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9544
10415
|
PageHead,
|
|
9545
10416
|
{
|
|
9546
|
-
title: seo
|
|
9547
|
-
description: seo
|
|
9548
|
-
|
|
9549
|
-
|
|
9550
|
-
|
|
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
|
-
)
|
|
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;
|