@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
|
@@ -82,10 +82,44 @@ var EN = {
|
|
|
82
82
|
noAnswer: "I couldn't find this in our documentation, so the answer below is not grounded in a source. Try rephrasing, or",
|
|
83
83
|
answerDidNotArrive: "That answer didn't come through. Try asking again.",
|
|
84
84
|
askHuman: "ask a human",
|
|
85
|
+
// An offer, not a demand: this row sits under every answer on 38 marketing sites, so the
|
|
86
|
+
// wording has to be shruggable. "Was this helpful?" invites; "Please rate this answer"
|
|
87
|
+
// conscripts.
|
|
88
|
+
feedbackPrompt: "Was this helpful?",
|
|
89
|
+
feedbackHelpful: "Helpful",
|
|
90
|
+
feedbackNotHelpful: "Not helpful",
|
|
91
|
+
feedbackReasonTitle: "What was off?",
|
|
92
|
+
feedbackReasonInaccurate: "Inaccurate",
|
|
93
|
+
feedbackReasonIncomplete: "Incomplete",
|
|
94
|
+
feedbackReasonOffTopic: "Off topic",
|
|
95
|
+
feedbackReasonHardToFollow: "Hard to follow",
|
|
96
|
+
feedbackReasonOther: "Something else",
|
|
97
|
+
feedbackCommentPlaceholder: "Add a detail (optional)",
|
|
98
|
+
feedbackSend: "Send",
|
|
99
|
+
feedbackDismiss: "Dismiss",
|
|
100
|
+
feedbackThanks: "Thanks \u2014 that helps.",
|
|
101
|
+
feedbackNotSent: "That didn't send.",
|
|
85
102
|
prevSuggestion: "Previous suggestion",
|
|
86
103
|
nextSuggestion: "Next suggestion",
|
|
87
104
|
conceptIllustration: "Concept illustration",
|
|
88
105
|
opensInNewTab: "opens in a new tab",
|
|
106
|
+
conceptStripTitle: "Or start from a concept",
|
|
107
|
+
conceptStripLabel: "Concepts you can ask about",
|
|
108
|
+
conceptAsk: "Ask about {title} in {product}",
|
|
109
|
+
conceptAskQuestion: "How does {title} work in {product}?",
|
|
110
|
+
copyAnswer: "Copy answer",
|
|
111
|
+
copyFailed: "Couldn't copy",
|
|
112
|
+
groundedIn: "What this answer is based on",
|
|
113
|
+
sourceCountOne: "1 source",
|
|
114
|
+
sourceCountMany: "{count} sources",
|
|
115
|
+
sourceKindConcept: "Concept",
|
|
116
|
+
sourceKindDocs: "Documentation",
|
|
117
|
+
sourceKindPricing: "Pricing",
|
|
118
|
+
sourceKindUseCase: "Use case",
|
|
119
|
+
sourceKindPage: "Product page",
|
|
120
|
+
seoTitle: "Describe a problem, get an answer",
|
|
121
|
+
seoDescription: "Describe the problem you're facing in your own words and get an answer drawn from our product documentation, with links to the exact pages it came from.",
|
|
122
|
+
seoDescriptionProduct: "Describe the problem you're facing in your own words and get an answer drawn from {product}'s documentation \u2014 and every other product we build \u2014 with links to the exact pages it came from.",
|
|
89
123
|
capabilities: [
|
|
90
124
|
"Grounded in our own docs",
|
|
91
125
|
"Compare across the ecosystem",
|
|
@@ -133,10 +167,41 @@ var ZH = {
|
|
|
133
167
|
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",
|
|
134
168
|
answerDidNotArrive: "\u8FD9\u6761\u56DE\u7B54\u6CA1\u6709\u8FD4\u56DE\u3002\u8BF7\u518D\u95EE\u4E00\u6B21\u3002",
|
|
135
169
|
askHuman: "\u8054\u7CFB\u6211\u4EEC",
|
|
170
|
+
feedbackPrompt: "\u8FD9\u4E2A\u56DE\u7B54\u6709\u5E2E\u52A9\u5417\uFF1F",
|
|
171
|
+
feedbackHelpful: "\u6709\u5E2E\u52A9",
|
|
172
|
+
feedbackNotHelpful: "\u6CA1\u6709\u5E2E\u52A9",
|
|
173
|
+
feedbackReasonTitle: "\u54EA\u91CC\u4E0D\u5BF9\uFF1F",
|
|
174
|
+
feedbackReasonInaccurate: "\u4E0D\u51C6\u786E",
|
|
175
|
+
feedbackReasonIncomplete: "\u4E0D\u5B8C\u6574",
|
|
176
|
+
feedbackReasonOffTopic: "\u7B54\u975E\u6240\u95EE",
|
|
177
|
+
feedbackReasonHardToFollow: "\u770B\u4E0D\u592A\u61C2",
|
|
178
|
+
feedbackReasonOther: "\u5176\u4ED6\u539F\u56E0",
|
|
179
|
+
feedbackCommentPlaceholder: "\u8865\u5145\u8BF4\u660E\uFF08\u53EF\u9009\uFF09",
|
|
180
|
+
feedbackSend: "\u63D0\u4EA4",
|
|
181
|
+
feedbackDismiss: "\u5173\u95ED",
|
|
182
|
+
feedbackThanks: "\u8C22\u8C22\uFF0C\u8FD9\u5BF9\u6211\u4EEC\u5F88\u6709\u5E2E\u52A9\u3002",
|
|
183
|
+
feedbackNotSent: "\u6CA1\u6709\u63D0\u4EA4\u6210\u529F\u3002",
|
|
136
184
|
prevSuggestion: "\u4E0A\u4E00\u4E2A\u5EFA\u8BAE",
|
|
137
185
|
nextSuggestion: "\u4E0B\u4E00\u4E2A\u5EFA\u8BAE",
|
|
138
186
|
conceptIllustration: "\u6982\u5FF5\u793A\u610F\u56FE",
|
|
139
187
|
opensInNewTab: "\u5728\u65B0\u6807\u7B7E\u9875\u4E2D\u6253\u5F00",
|
|
188
|
+
conceptStripTitle: "\u6216\u8005\u4ECE\u4E00\u4E2A\u6982\u5FF5\u5F00\u59CB",
|
|
189
|
+
conceptStripLabel: "\u4F60\u53EF\u4EE5\u8BE2\u95EE\u7684\u6982\u5FF5",
|
|
190
|
+
conceptAsk: "\u8BE2\u95EE {product} \u4E2D\u7684 {title}",
|
|
191
|
+
conceptAskQuestion: "{product} \u7684 {title} \u662F\u600E\u4E48\u8FD0\u4F5C\u7684\uFF1F",
|
|
192
|
+
copyAnswer: "\u590D\u5236\u56DE\u7B54",
|
|
193
|
+
copyFailed: "\u590D\u5236\u5931\u8D25",
|
|
194
|
+
groundedIn: "\u8FD9\u4E2A\u56DE\u7B54\u7684\u4F9D\u636E",
|
|
195
|
+
sourceCountOne: "1 \u4E2A\u6765\u6E90",
|
|
196
|
+
sourceCountMany: "{count} \u4E2A\u6765\u6E90",
|
|
197
|
+
sourceKindConcept: "\u6982\u5FF5",
|
|
198
|
+
sourceKindDocs: "\u6587\u6863",
|
|
199
|
+
sourceKindPricing: "\u4EF7\u683C",
|
|
200
|
+
sourceKindUseCase: "\u5E94\u7528\u573A\u666F",
|
|
201
|
+
sourceKindPage: "\u4EA7\u54C1\u9875\u9762",
|
|
202
|
+
seoTitle: "\u63CF\u8FF0\u95EE\u9898\uFF0C\u83B7\u5F97\u7B54\u6848",
|
|
203
|
+
seoDescription: "\u7528\u4F60\u81EA\u5DF1\u7684\u8BDD\u63CF\u8FF0\u9047\u5230\u7684\u95EE\u9898\uFF0C\u5373\u53EF\u83B7\u5F97\u6765\u81EA\u6211\u4EEC\u4EA7\u54C1\u6587\u6863\u7684\u56DE\u7B54\uFF0C\u5E76\u9644\u4E0A\u7B54\u6848\u51FA\u5904\u7684\u9875\u9762\u94FE\u63A5\u3002",
|
|
204
|
+
seoDescriptionProduct: "\u7528\u4F60\u81EA\u5DF1\u7684\u8BDD\u63CF\u8FF0\u9047\u5230\u7684\u95EE\u9898\uFF0C\u5373\u53EF\u83B7\u5F97\u6765\u81EA {product} \u53CA\u6211\u4EEC\u5176\u4ED6\u4EA7\u54C1\u6587\u6863\u7684\u56DE\u7B54\uFF0C\u5E76\u9644\u4E0A\u7B54\u6848\u51FA\u5904\u7684\u9875\u9762\u94FE\u63A5\u3002",
|
|
140
205
|
capabilities: ["\u57FA\u4E8E\u6211\u4EEC\u81EA\u5DF1\u7684\u6587\u6863", "\u8DE8\u4EA7\u54C1\u5BF9\u6BD4", "\u76F4\u8FBE\u6B63\u786E\u7684\u9875\u9762"],
|
|
141
206
|
prompts: [
|
|
142
207
|
"\u6BCF\u95E8\u8BFE\u7A0B\u90FD\u8BB0\u5728\u4E0D\u540C\u7684\u8868\u683C\u91CC\u3002",
|
|
@@ -180,10 +245,41 @@ var HI = {
|
|
|
180
245
|
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",
|
|
181
246
|
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",
|
|
182
247
|
askHuman: "\u0939\u092E\u0938\u0947 \u0938\u0902\u092A\u0930\u094D\u0915 \u0915\u0930\u0947\u0902",
|
|
248
|
+
feedbackPrompt: "\u0915\u094D\u092F\u093E \u092F\u0939 \u0909\u0924\u094D\u0924\u0930 \u092E\u0926\u0926\u0917\u093E\u0930 \u0925\u093E?",
|
|
249
|
+
feedbackHelpful: "\u092E\u0926\u0926\u0917\u093E\u0930",
|
|
250
|
+
feedbackNotHelpful: "\u092E\u0926\u0926\u0917\u093E\u0930 \u0928\u0939\u0940\u0902",
|
|
251
|
+
feedbackReasonTitle: "\u0915\u094D\u092F\u093E \u0920\u0940\u0915 \u0928\u0939\u0940\u0902 \u0925\u093E?",
|
|
252
|
+
feedbackReasonInaccurate: "\u0917\u093C\u0932\u0924 \u091C\u093E\u0928\u0915\u093E\u0930\u0940",
|
|
253
|
+
feedbackReasonIncomplete: "\u0905\u0927\u0942\u0930\u093E",
|
|
254
|
+
feedbackReasonOffTopic: "\u0935\u093F\u0937\u092F \u0938\u0947 \u0939\u091F\u0915\u0930",
|
|
255
|
+
feedbackReasonHardToFollow: "\u0938\u092E\u091D\u0928\u0947 \u092E\u0947\u0902 \u092E\u0941\u0936\u094D\u0915\u093F\u0932",
|
|
256
|
+
feedbackReasonOther: "\u0915\u0941\u091B \u0914\u0930",
|
|
257
|
+
feedbackCommentPlaceholder: "\u0915\u0941\u091B \u0914\u0930 \u092C\u0924\u093E\u090F\u0902 (\u0935\u0948\u0915\u0932\u094D\u092A\u093F\u0915)",
|
|
258
|
+
feedbackSend: "\u092D\u0947\u091C\u0947\u0902",
|
|
259
|
+
feedbackDismiss: "\u092C\u0902\u0926 \u0915\u0930\u0947\u0902",
|
|
260
|
+
feedbackThanks: "\u0927\u0928\u094D\u092F\u0935\u093E\u0926, \u0907\u0938\u0938\u0947 \u092E\u0926\u0926 \u092E\u093F\u0932\u0924\u0940 \u0939\u0948\u0964",
|
|
261
|
+
feedbackNotSent: "\u092F\u0939 \u092D\u0947\u091C\u093E \u0928\u0939\u0940\u0902 \u091C\u093E \u0938\u0915\u093E\u0964",
|
|
183
262
|
prevSuggestion: "\u092A\u093F\u091B\u0932\u093E \u0938\u0941\u091D\u093E\u0935",
|
|
184
263
|
nextSuggestion: "\u0905\u0917\u0932\u093E \u0938\u0941\u091D\u093E\u0935",
|
|
185
264
|
conceptIllustration: "\u0905\u0935\u0927\u093E\u0930\u0923\u093E \u091A\u093F\u0924\u094D\u0930\u0923",
|
|
186
265
|
opensInNewTab: "\u0928\u090F \u091F\u0948\u092C \u092E\u0947\u0902 \u0916\u0941\u0932\u0924\u093E \u0939\u0948",
|
|
266
|
+
conceptStripTitle: "\u092F\u093E \u0915\u093F\u0938\u0940 \u0905\u0935\u0927\u093E\u0930\u0923\u093E \u0938\u0947 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902",
|
|
267
|
+
conceptStripLabel: "\u091C\u093F\u0928 \u0905\u0935\u0927\u093E\u0930\u0923\u093E\u0913\u0902 \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u0906\u092A \u092A\u0942\u091B \u0938\u0915\u0924\u0947 \u0939\u0948\u0902",
|
|
268
|
+
conceptAsk: "{product} \u092E\u0947\u0902 {title} \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u092A\u0942\u091B\u0947\u0902",
|
|
269
|
+
conceptAskQuestion: "{product} \u092E\u0947\u0902 {title} \u0915\u0948\u0938\u0947 \u0915\u093E\u092E \u0915\u0930\u0924\u093E \u0939\u0948?",
|
|
270
|
+
copyAnswer: "\u0909\u0924\u094D\u0924\u0930 \u0915\u0949\u092A\u0940 \u0915\u0930\u0947\u0902",
|
|
271
|
+
copyFailed: "\u0915\u0949\u092A\u0940 \u0928\u0939\u0940\u0902 \u0939\u094B \u0938\u0915\u093E",
|
|
272
|
+
groundedIn: "\u092F\u0939 \u0909\u0924\u094D\u0924\u0930 \u0915\u093F\u0938 \u092A\u0930 \u0906\u0927\u093E\u0930\u093F\u0924 \u0939\u0948",
|
|
273
|
+
sourceCountOne: "1 \u0938\u094D\u0930\u094B\u0924",
|
|
274
|
+
sourceCountMany: "{count} \u0938\u094D\u0930\u094B\u0924",
|
|
275
|
+
sourceKindConcept: "\u0905\u0935\u0927\u093E\u0930\u0923\u093E",
|
|
276
|
+
sourceKindDocs: "\u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C",
|
|
277
|
+
sourceKindPricing: "\u092E\u0942\u0932\u094D\u092F",
|
|
278
|
+
sourceKindUseCase: "\u0909\u092A\u092F\u094B\u0917 \u0915\u093E \u0909\u0926\u093E\u0939\u0930\u0923",
|
|
279
|
+
sourceKindPage: "\u0909\u0924\u094D\u092A\u093E\u0926 \u092A\u0947\u091C",
|
|
280
|
+
seoTitle: "\u0938\u092E\u0938\u094D\u092F\u093E \u092C\u0924\u093E\u090F\u0902, \u091C\u0935\u093E\u092C \u092A\u093E\u090F\u0902",
|
|
281
|
+
seoDescription: "\u0905\u092A\u0928\u0940 \u0938\u092E\u0938\u094D\u092F\u093E \u0905\u092A\u0928\u0947 \u0936\u092C\u094D\u0926\u094B\u0902 \u092E\u0947\u0902 \u092C\u0924\u093E\u090F\u0902 \u0914\u0930 \u0939\u092E\u093E\u0930\u0947 \u0909\u0924\u094D\u092A\u093E\u0926 \u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C\u094B\u0902 \u0938\u0947 \u0932\u093F\u092F\u093E \u0917\u092F\u093E \u091C\u0935\u093E\u092C \u092A\u093E\u090F\u0902, \u0938\u093E\u0925 \u092E\u0947\u0902 \u0909\u0928\u094D\u0939\u0940\u0902 \u092A\u0928\u094D\u0928\u094B\u0902 \u0915\u0947 \u0932\u093F\u0902\u0915 \u091C\u0939\u093E\u0901 \u0938\u0947 \u0935\u0939 \u0906\u092F\u093E \u0939\u0948\u0964",
|
|
282
|
+
seoDescriptionProduct: "\u0905\u092A\u0928\u0940 \u0938\u092E\u0938\u094D\u092F\u093E \u0905\u092A\u0928\u0947 \u0936\u092C\u094D\u0926\u094B\u0902 \u092E\u0947\u0902 \u092C\u0924\u093E\u090F\u0902 \u0914\u0930 {product} \u0924\u0925\u093E \u0939\u092E\u093E\u0930\u0947 \u092C\u093E\u0915\u0940 \u0909\u0924\u094D\u092A\u093E\u0926\u094B\u0902 \u0915\u0947 \u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C\u094B\u0902 \u0938\u0947 \u0932\u093F\u092F\u093E \u0917\u092F\u093E \u091C\u0935\u093E\u092C \u092A\u093E\u090F\u0902, \u0938\u093E\u0925 \u092E\u0947\u0902 \u0909\u0928\u094D\u0939\u0940\u0902 \u092A\u0928\u094D\u0928\u094B\u0902 \u0915\u0947 \u0932\u093F\u0902\u0915 \u091C\u0939\u093E\u0901 \u0938\u0947 \u0935\u0939 \u0906\u092F\u093E \u0939\u0948\u0964",
|
|
187
283
|
capabilities: [
|
|
188
284
|
"\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",
|
|
189
285
|
"\u0938\u092D\u0940 \u0909\u0924\u094D\u092A\u093E\u0926\u094B\u0902 \u0915\u0940 \u0924\u0941\u0932\u0928\u093E \u0915\u0930\u0947\u0902",
|
|
@@ -231,10 +327,41 @@ var ES = {
|
|
|
231
327
|
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",
|
|
232
328
|
answerDidNotArrive: "Esa respuesta no lleg\xF3. Int\xE9ntalo de nuevo.",
|
|
233
329
|
askHuman: "habla con una persona",
|
|
330
|
+
feedbackPrompt: "\xBFTe ha servido?",
|
|
331
|
+
feedbackHelpful: "Me sirve",
|
|
332
|
+
feedbackNotHelpful: "No me sirve",
|
|
333
|
+
feedbackReasonTitle: "\xBFQu\xE9 ha fallado?",
|
|
334
|
+
feedbackReasonInaccurate: "Es inexacta",
|
|
335
|
+
feedbackReasonIncomplete: "Est\xE1 incompleta",
|
|
336
|
+
feedbackReasonOffTopic: "No viene al caso",
|
|
337
|
+
feedbackReasonHardToFollow: "Cuesta seguirla",
|
|
338
|
+
feedbackReasonOther: "Otra cosa",
|
|
339
|
+
feedbackCommentPlaceholder: "A\xF1ade un detalle (opcional)",
|
|
340
|
+
feedbackSend: "Enviar",
|
|
341
|
+
feedbackDismiss: "Cerrar",
|
|
342
|
+
feedbackThanks: "Gracias, nos sirve.",
|
|
343
|
+
feedbackNotSent: "No se ha podido enviar.",
|
|
234
344
|
prevSuggestion: "Sugerencia anterior",
|
|
235
345
|
nextSuggestion: "Sugerencia siguiente",
|
|
236
346
|
conceptIllustration: "Ilustraci\xF3n del concepto",
|
|
237
347
|
opensInNewTab: "se abre en una pesta\xF1a nueva",
|
|
348
|
+
conceptStripTitle: "O empieza por un concepto",
|
|
349
|
+
conceptStripLabel: "Conceptos sobre los que puedes preguntar",
|
|
350
|
+
conceptAsk: "Preguntar por {title} en {product}",
|
|
351
|
+
conceptAskQuestion: "\xBFC\xF3mo funciona {title} en {product}?",
|
|
352
|
+
copyAnswer: "Copiar respuesta",
|
|
353
|
+
copyFailed: "No se pudo copiar",
|
|
354
|
+
groundedIn: "En qu\xE9 se basa esta respuesta",
|
|
355
|
+
sourceCountOne: "1 fuente",
|
|
356
|
+
sourceCountMany: "{count} fuentes",
|
|
357
|
+
sourceKindConcept: "Concepto",
|
|
358
|
+
sourceKindDocs: "Documentaci\xF3n",
|
|
359
|
+
sourceKindPricing: "Precios",
|
|
360
|
+
sourceKindUseCase: "Caso de uso",
|
|
361
|
+
sourceKindPage: "P\xE1gina de producto",
|
|
362
|
+
seoTitle: "Describe un problema y obt\xE9n una respuesta",
|
|
363
|
+
seoDescription: "Describe con tus palabras el problema que tienes y recibe una respuesta extra\xEDda de la documentaci\xF3n de nuestros productos, con enlaces a las p\xE1ginas exactas de las que procede.",
|
|
364
|
+
seoDescriptionProduct: "Describe con tus palabras el problema que tienes y recibe una respuesta extra\xEDda de la documentaci\xF3n de {product} y del resto de nuestros productos, con enlaces a las p\xE1ginas exactas de las que procede.",
|
|
238
365
|
capabilities: [
|
|
239
366
|
"Basado en nuestra documentaci\xF3n",
|
|
240
367
|
"Compara todo el ecosistema",
|
|
@@ -282,10 +409,41 @@ var AR = {
|
|
|
282
409
|
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",
|
|
283
410
|
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.",
|
|
284
411
|
askHuman: "\u062A\u062D\u062F\u0651\u062B \u0625\u0644\u0649 \u0634\u062E\u0635",
|
|
412
|
+
feedbackPrompt: "\u0647\u0644 \u0643\u0627\u0646\u062A \u0647\u0630\u0647 \u0627\u0644\u0625\u062C\u0627\u0628\u0629 \u0645\u0641\u064A\u062F\u0629\u061F",
|
|
413
|
+
feedbackHelpful: "\u0645\u0641\u064A\u062F\u0629",
|
|
414
|
+
feedbackNotHelpful: "\u063A\u064A\u0631 \u0645\u0641\u064A\u062F\u0629",
|
|
415
|
+
feedbackReasonTitle: "\u0645\u0627 \u0627\u0644\u062E\u0637\u0623 \u0641\u064A\u0647\u0627\u061F",
|
|
416
|
+
feedbackReasonInaccurate: "\u063A\u064A\u0631 \u062F\u0642\u064A\u0642\u0629",
|
|
417
|
+
feedbackReasonIncomplete: "\u0646\u0627\u0642\u0635\u0629",
|
|
418
|
+
feedbackReasonOffTopic: "\u062E\u0627\u0631\u062C \u0627\u0644\u0645\u0648\u0636\u0648\u0639",
|
|
419
|
+
feedbackReasonHardToFollow: "\u0635\u0639\u0628\u0629 \u0627\u0644\u0641\u0647\u0645",
|
|
420
|
+
feedbackReasonOther: "\u0634\u064A\u0621 \u0622\u062E\u0631",
|
|
421
|
+
feedbackCommentPlaceholder: "\u0623\u0636\u0641 \u062A\u0641\u0635\u064A\u0644\u0627\u064B (\u0627\u062E\u062A\u064A\u0627\u0631\u064A)",
|
|
422
|
+
feedbackSend: "\u0625\u0631\u0633\u0627\u0644",
|
|
423
|
+
feedbackDismiss: "\u0625\u063A\u0644\u0627\u0642",
|
|
424
|
+
feedbackThanks: "\u0634\u0643\u0631\u064B\u0627\u060C \u0647\u0630\u0627 \u064A\u0633\u0627\u0639\u062F\u0646\u0627.",
|
|
425
|
+
feedbackNotSent: "\u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u0625\u0631\u0633\u0627\u0644.",
|
|
285
426
|
prevSuggestion: "\u0627\u0644\u0627\u0642\u062A\u0631\u0627\u062D \u0627\u0644\u0633\u0627\u0628\u0642",
|
|
286
427
|
nextSuggestion: "\u0627\u0644\u0627\u0642\u062A\u0631\u0627\u062D \u0627\u0644\u062A\u0627\u0644\u064A",
|
|
287
428
|
conceptIllustration: "\u0631\u0633\u0645 \u062A\u0648\u0636\u064A\u062D\u064A \u0644\u0644\u0645\u0641\u0647\u0648\u0645",
|
|
288
429
|
opensInNewTab: "\u064A\u064F\u0641\u062A\u062D \u0641\u064A \u0639\u0644\u0627\u0645\u0629 \u062A\u0628\u0648\u064A\u0628 \u062C\u062F\u064A\u062F\u0629",
|
|
430
|
+
conceptStripTitle: "\u0623\u0648 \u0627\u0628\u062F\u0623 \u0645\u0646 \u0645\u0641\u0647\u0648\u0645",
|
|
431
|
+
conceptStripLabel: "\u0645\u0641\u0627\u0647\u064A\u0645 \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u0633\u0624\u0627\u0644 \u0639\u0646\u0647\u0627",
|
|
432
|
+
conceptAsk: "\u0627\u0633\u0623\u0644 \u0639\u0646 {title} \u0641\u064A {product}",
|
|
433
|
+
conceptAskQuestion: "\u0643\u064A\u0641 \u064A\u0639\u0645\u0644 {title} \u0641\u064A {product}\u061F",
|
|
434
|
+
copyAnswer: "\u0646\u0633\u062E \u0627\u0644\u0625\u062C\u0627\u0628\u0629",
|
|
435
|
+
copyFailed: "\u062A\u0639\u0630\u0651\u0631 \u0627\u0644\u0646\u0633\u062E",
|
|
436
|
+
groundedIn: "\u0639\u0644\u0649 \u0645\u0627\u0630\u0627 \u062A\u0633\u062A\u0646\u062F \u0647\u0630\u0647 \u0627\u0644\u0625\u062C\u0627\u0628\u0629",
|
|
437
|
+
sourceCountOne: "\u0645\u0635\u062F\u0631 \u0648\u0627\u062D\u062F",
|
|
438
|
+
sourceCountMany: "{count} \u0645\u0635\u0627\u062F\u0631",
|
|
439
|
+
sourceKindConcept: "\u0645\u0641\u0647\u0648\u0645",
|
|
440
|
+
sourceKindDocs: "\u0627\u0644\u062A\u0648\u062B\u064A\u0642",
|
|
441
|
+
sourceKindPricing: "\u0627\u0644\u0623\u0633\u0639\u0627\u0631",
|
|
442
|
+
sourceKindUseCase: "\u062D\u0627\u0644\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645",
|
|
443
|
+
sourceKindPage: "\u0635\u0641\u062D\u0629 \u0627\u0644\u0645\u0646\u062A\u062C",
|
|
444
|
+
seoTitle: "\u0635\u0641 \u0645\u0634\u0643\u0644\u062A\u0643 \u0648\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 \u0625\u062C\u0627\u0628\u0629",
|
|
445
|
+
seoDescription: "\u0635\u0641 \u0627\u0644\u0645\u0634\u0643\u0644\u0629 \u0627\u0644\u062A\u064A \u062A\u0648\u0627\u062C\u0647\u0647\u0627 \u0628\u0643\u0644\u0645\u0627\u062A\u0643 \u0648\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 \u0625\u062C\u0627\u0628\u0629 \u0645\u0633\u062A\u0645\u062F\u0629 \u0645\u0646 \u0648\u062B\u0627\u0626\u0642 \u0645\u0646\u062A\u062C\u0627\u062A\u0646\u0627\u060C \u0645\u0639 \u0631\u0648\u0627\u0628\u0637 \u0625\u0644\u0649 \u0627\u0644\u0635\u0641\u062D\u0627\u062A \u0627\u0644\u062A\u064A \u062C\u0627\u0621\u062A \u0645\u0646\u0647\u0627.",
|
|
446
|
+
seoDescriptionProduct: "\u0635\u0641 \u0627\u0644\u0645\u0634\u0643\u0644\u0629 \u0627\u0644\u062A\u064A \u062A\u0648\u0627\u062C\u0647\u0647\u0627 \u0628\u0643\u0644\u0645\u0627\u062A\u0643 \u0648\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 \u0625\u062C\u0627\u0628\u0629 \u0645\u0633\u062A\u0645\u062F\u0629 \u0645\u0646 \u0648\u062B\u0627\u0626\u0642 {product} \u0648\u0628\u0642\u064A\u0629 \u0645\u0646\u062A\u062C\u0627\u062A\u0646\u0627\u060C \u0645\u0639 \u0631\u0648\u0627\u0628\u0637 \u0625\u0644\u0649 \u0627\u0644\u0635\u0641\u062D\u0627\u062A \u0627\u0644\u062A\u064A \u062C\u0627\u0621\u062A \u0645\u0646\u0647\u0627.",
|
|
289
447
|
capabilities: [
|
|
290
448
|
"\u0645\u0628\u0646\u064A \u0639\u0644\u0649 \u0648\u062B\u0627\u0626\u0642\u0646\u0627",
|
|
291
449
|
"\u0642\u0627\u0631\u0646 \u0639\u0628\u0631 \u0627\u0644\u0645\u0646\u0638\u0648\u0645\u0629",
|
|
@@ -333,10 +491,41 @@ var TA = {
|
|
|
333
491
|
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",
|
|
334
492
|
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.",
|
|
335
493
|
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",
|
|
494
|
+
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?",
|
|
495
|
+
feedbackHelpful: "\u0BAA\u0BAF\u0BA9\u0BC1\u0BB3\u0BCD\u0BB3\u0BA4\u0BC1",
|
|
496
|
+
feedbackNotHelpful: "\u0BAA\u0BAF\u0BA9\u0BBF\u0BB2\u0BCD\u0BB2\u0BC8",
|
|
497
|
+
feedbackReasonTitle: "\u0B8E\u0BA9\u0BCD\u0BA9 \u0B9A\u0BB0\u0BBF\u0BAF\u0BBE\u0B95 \u0B87\u0BB2\u0BCD\u0BB2\u0BC8?",
|
|
498
|
+
feedbackReasonInaccurate: "\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BA4\u0B95\u0BB5\u0BB2\u0BCD",
|
|
499
|
+
feedbackReasonIncomplete: "\u0BAE\u0BC1\u0BB4\u0BC1\u0BAE\u0BC8\u0BAF\u0BB1\u0BCD\u0BB1\u0BA4\u0BC1",
|
|
500
|
+
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",
|
|
501
|
+
feedbackReasonHardToFollow: "\u0BAA\u0BC1\u0BB0\u0BBF\u0BA8\u0BCD\u0BA4\u0BC1\u0B95\u0BCA\u0BB3\u0BCD\u0BB3 \u0B95\u0B9F\u0BBF\u0BA9\u0BAE\u0BCD",
|
|
502
|
+
feedbackReasonOther: "\u0BB5\u0BC7\u0BB1\u0BC1 \u0B8F\u0BA4\u0BCB",
|
|
503
|
+
feedbackCommentPlaceholder: "\u0BAE\u0BC7\u0BB2\u0BC1\u0BAE\u0BCD \u0BB5\u0BBF\u0BB5\u0BB0\u0BAE\u0BCD (\u0BB5\u0BBF\u0BB0\u0BC1\u0BAA\u0BCD\u0BAA\u0BAE\u0BCD)",
|
|
504
|
+
feedbackSend: "\u0B85\u0BA9\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1",
|
|
505
|
+
feedbackDismiss: "\u0BAE\u0BC2\u0B9F\u0BC1",
|
|
506
|
+
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.",
|
|
507
|
+
feedbackNotSent: "\u0B85\u0BA9\u0BC1\u0BAA\u0BCD\u0BAA \u0BAE\u0BC1\u0B9F\u0BBF\u0BAF\u0BB5\u0BBF\u0BB2\u0BCD\u0BB2\u0BC8.",
|
|
336
508
|
prevSuggestion: "\u0BAE\u0BC1\u0BA8\u0BCD\u0BA4\u0BC8\u0BAF \u0BAA\u0BB0\u0BBF\u0BA8\u0BCD\u0BA4\u0BC1\u0BB0\u0BC8",
|
|
337
509
|
nextSuggestion: "\u0B85\u0B9F\u0BC1\u0BA4\u0BCD\u0BA4 \u0BAA\u0BB0\u0BBF\u0BA8\u0BCD\u0BA4\u0BC1\u0BB0\u0BC8",
|
|
338
510
|
conceptIllustration: "\u0B95\u0BB0\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1 \u0BB5\u0BBF\u0BB3\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BAE\u0BCD",
|
|
339
511
|
opensInNewTab: "\u0BAA\u0BC1\u0BA4\u0BBF\u0BAF \u0BA4\u0BBE\u0BB5\u0BB2\u0BBF\u0BB2\u0BCD \u0BA4\u0BBF\u0BB1\u0B95\u0BCD\u0B95\u0BC1\u0BAE\u0BCD",
|
|
512
|
+
conceptStripTitle: "\u0B85\u0BB2\u0BCD\u0BB2\u0BA4\u0BC1 \u0B92\u0BB0\u0BC1 \u0B95\u0BB0\u0BC1\u0BA4\u0BCD\u0BA4\u0BBF\u0BB2\u0BBF\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4\u0BC1 \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
|
|
513
|
+
conceptStripLabel: "\u0BA8\u0BC0\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B95\u0BC7\u0B9F\u0BCD\u0B95\u0B95\u0BCD\u0B95\u0BC2\u0B9F\u0BBF\u0BAF \u0B95\u0BB0\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BB3\u0BCD",
|
|
514
|
+
conceptAsk: "{product} \u0B87\u0BB2\u0BCD {title} \u0BAA\u0BB1\u0BCD\u0BB1\u0BBF\u0B95\u0BCD \u0B95\u0BC7\u0BB3\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
|
|
515
|
+
conceptAskQuestion: "{product} \u0B87\u0BB2\u0BCD {title} \u0B8E\u0BAA\u0BCD\u0BAA\u0B9F\u0BBF \u0BB5\u0BC7\u0BB2\u0BC8 \u0B9A\u0BC6\u0BAF\u0BCD\u0B95\u0BBF\u0BB1\u0BA4\u0BC1?",
|
|
516
|
+
copyAnswer: "\u0BAA\u0BA4\u0BBF\u0BB2\u0BC8 \u0BA8\u0B95\u0BB2\u0BC6\u0B9F\u0BC1",
|
|
517
|
+
copyFailed: "\u0BA8\u0B95\u0BB2\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95 \u0BAE\u0BC1\u0B9F\u0BBF\u0BAF\u0BB5\u0BBF\u0BB2\u0BCD\u0BB2\u0BC8",
|
|
518
|
+
groundedIn: "\u0B87\u0BA8\u0BCD\u0BA4\u0BAA\u0BCD \u0BAA\u0BA4\u0BBF\u0BB2\u0BCD \u0B8E\u0BA4\u0BC8 \u0B85\u0B9F\u0BBF\u0BAA\u0BCD\u0BAA\u0B9F\u0BC8\u0BAF\u0BBE\u0B95\u0B95\u0BCD \u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BA4\u0BC1",
|
|
519
|
+
sourceCountOne: "1 \u0BAE\u0BC2\u0BB2\u0BAE\u0BCD",
|
|
520
|
+
sourceCountMany: "{count} \u0BAE\u0BC2\u0BB2\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
|
|
521
|
+
sourceKindConcept: "\u0B95\u0BB0\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1",
|
|
522
|
+
sourceKindDocs: "\u0B86\u0BB5\u0BA3\u0BAE\u0BCD",
|
|
523
|
+
sourceKindPricing: "\u0BB5\u0BBF\u0BB2\u0BC8",
|
|
524
|
+
sourceKindUseCase: "\u0BAA\u0BAF\u0BA9\u0BCD\u0BAA\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1 \u0BA8\u0BBF\u0BB2\u0BC8",
|
|
525
|
+
sourceKindPage: "\u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\u0BAA\u0BCD \u0BAA\u0B95\u0BCD\u0B95\u0BAE\u0BCD",
|
|
526
|
+
seoTitle: "\u0B9A\u0BBF\u0B95\u0BCD\u0B95\u0BB2\u0BC8 \u0BB5\u0BBF\u0BB5\u0BB0\u0BBF\u0BAF\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD, \u0BAA\u0BA4\u0BBF\u0BB2\u0BCD \u0BAA\u0BC6\u0BB1\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
|
|
527
|
+
seoDescription: "\u0BA8\u0BC0\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0B95\u0BCA\u0BB3\u0BCD\u0BB3\u0BC1\u0BAE\u0BCD \u0B9A\u0BBF\u0B95\u0BCD\u0B95\u0BB2\u0BC8 \u0B89\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B9A\u0BCA\u0BA8\u0BCD\u0BA4 \u0BB5\u0BBE\u0BB0\u0BCD\u0BA4\u0BCD\u0BA4\u0BC8\u0B95\u0BB3\u0BBF\u0BB2\u0BCD \u0BB5\u0BBF\u0BB5\u0BB0\u0BBF\u0BAF\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD; \u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1 \u0B86\u0BB5\u0BA3\u0B99\u0BCD\u0B95\u0BB3\u0BBF\u0BB2\u0BBF\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4\u0BC1 \u0BAA\u0BA4\u0BBF\u0BB2\u0BCD \u0B95\u0BBF\u0B9F\u0BC8\u0B95\u0BCD\u0B95\u0BC1\u0BAE\u0BCD, \u0B85\u0BA4\u0BC1 \u0BB5\u0BA8\u0BCD\u0BA4 \u0BAA\u0B95\u0BCD\u0B95\u0B99\u0BCD\u0B95\u0BB3\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0B87\u0BA3\u0BC8\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BC1\u0B9F\u0BA9\u0BCD.",
|
|
528
|
+
seoDescriptionProduct: "{product} \u0BAE\u0BB1\u0BCD\u0BB1\u0BC1\u0BAE\u0BCD \u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0BAA\u0BBF\u0BB1 \u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BBF\u0BA9\u0BCD \u0B86\u0BB5\u0BA3\u0B99\u0BCD\u0B95\u0BB3\u0BBF\u0BB2\u0BBF\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4\u0BC1 \u0BAA\u0BA4\u0BBF\u0BB2\u0BCD \u0BAA\u0BC6\u0BB1, \u0BA8\u0BC0\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0B95\u0BCA\u0BB3\u0BCD\u0BB3\u0BC1\u0BAE\u0BCD \u0B9A\u0BBF\u0B95\u0BCD\u0B95\u0BB2\u0BC8 \u0B89\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B9A\u0BCA\u0BA8\u0BCD\u0BA4 \u0BB5\u0BBE\u0BB0\u0BCD\u0BA4\u0BCD\u0BA4\u0BC8\u0B95\u0BB3\u0BBF\u0BB2\u0BCD \u0BB5\u0BBF\u0BB5\u0BB0\u0BBF\u0BAF\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u2014 \u0B85\u0BA4\u0BC1 \u0BB5\u0BA8\u0BCD\u0BA4 \u0BAA\u0B95\u0BCD\u0B95\u0B99\u0BCD\u0B95\u0BB3\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0B87\u0BA3\u0BC8\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BC1\u0B9F\u0BA9\u0BCD.",
|
|
340
529
|
capabilities: [
|
|
341
530
|
"\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",
|
|
342
531
|
"\u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BC8 \u0B92\u0BAA\u0BCD\u0BAA\u0BBF\u0B9F\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
|
|
@@ -377,6 +566,193 @@ function exploreStrings(locale) {
|
|
|
377
566
|
function fill(template, values) {
|
|
378
567
|
return template.replace(/\{(\w+)\}/g, (match, key) => values[key] ?? match);
|
|
379
568
|
}
|
|
569
|
+
|
|
570
|
+
// src/components/explore-types.ts
|
|
571
|
+
var EXPLORE_FEEDBACK_REASONS = [
|
|
572
|
+
"INACCURATE",
|
|
573
|
+
"INCOMPLETE",
|
|
574
|
+
"OFF_TOPIC",
|
|
575
|
+
"HARD_TO_FOLLOW",
|
|
576
|
+
"OTHER"
|
|
577
|
+
];
|
|
578
|
+
var EXPLORE_MESSAGE_FIELDS = (
|
|
579
|
+
/* GraphQL */
|
|
580
|
+
`
|
|
581
|
+
id
|
|
582
|
+
conversationId
|
|
583
|
+
role
|
|
584
|
+
status
|
|
585
|
+
content
|
|
586
|
+
partialContent
|
|
587
|
+
activity
|
|
588
|
+
references {
|
|
589
|
+
url
|
|
590
|
+
title
|
|
591
|
+
description
|
|
592
|
+
product
|
|
593
|
+
imageUrl
|
|
594
|
+
index
|
|
595
|
+
}
|
|
596
|
+
ctas {
|
|
597
|
+
kind
|
|
598
|
+
label
|
|
599
|
+
url
|
|
600
|
+
product
|
|
601
|
+
}
|
|
602
|
+
followUps
|
|
603
|
+
answered
|
|
604
|
+
attachments {
|
|
605
|
+
name
|
|
606
|
+
mimeType
|
|
607
|
+
size
|
|
608
|
+
textExtracted
|
|
609
|
+
}
|
|
610
|
+
errorCode
|
|
611
|
+
createdAt
|
|
612
|
+
completedAt
|
|
613
|
+
`
|
|
614
|
+
);
|
|
615
|
+
var EXPLORE_OWN_MESSAGE_FIELDS = (
|
|
616
|
+
/* GraphQL */
|
|
617
|
+
`
|
|
618
|
+
${EXPLORE_MESSAGE_FIELDS}
|
|
619
|
+
feedback {
|
|
620
|
+
rating
|
|
621
|
+
reason
|
|
622
|
+
comment
|
|
623
|
+
createdAt
|
|
624
|
+
}
|
|
625
|
+
`
|
|
626
|
+
);
|
|
627
|
+
var EXPLORE_CATALOG_ESTABLISHED_FIELDS = (
|
|
628
|
+
/* GraphQL */
|
|
629
|
+
`
|
|
630
|
+
enabled
|
|
631
|
+
products {
|
|
632
|
+
slug
|
|
633
|
+
name
|
|
634
|
+
tagline
|
|
635
|
+
website
|
|
636
|
+
}
|
|
637
|
+
examplePrompts
|
|
638
|
+
welcomeTitle
|
|
639
|
+
welcomeBody
|
|
640
|
+
limits {
|
|
641
|
+
maxMessageLength
|
|
642
|
+
maxTurnsPerConversation
|
|
643
|
+
messagesPerDay
|
|
644
|
+
historyTurns
|
|
645
|
+
}
|
|
646
|
+
captchaRequired
|
|
647
|
+
recaptchaSiteKey`
|
|
648
|
+
);
|
|
649
|
+
var EXPLORE_CATALOG_HIGHLIGHT_FIELD = (
|
|
650
|
+
/* GraphQL */
|
|
651
|
+
`
|
|
652
|
+
conceptHighlights {
|
|
653
|
+
product
|
|
654
|
+
productName
|
|
655
|
+
title
|
|
656
|
+
url
|
|
657
|
+
imageUrl
|
|
658
|
+
alt
|
|
659
|
+
}`
|
|
660
|
+
);
|
|
661
|
+
function exploreCatalogDocument(extraFields) {
|
|
662
|
+
return (
|
|
663
|
+
/* GraphQL */
|
|
664
|
+
`
|
|
665
|
+
query ExploreCatalog($productSlug: String) {
|
|
666
|
+
exploreCatalog(productSlug: $productSlug) {${EXPLORE_CATALOG_ESTABLISHED_FIELDS}${extraFields}
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
`
|
|
670
|
+
);
|
|
671
|
+
}
|
|
672
|
+
var EXPLORE_CATALOG_QUERY = exploreCatalogDocument(
|
|
673
|
+
EXPLORE_CATALOG_HIGHLIGHT_FIELD
|
|
674
|
+
);
|
|
675
|
+
var EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS = exploreCatalogDocument("");
|
|
676
|
+
var EXPLORE_MESSAGE_QUERY = (
|
|
677
|
+
/* GraphQL */
|
|
678
|
+
`
|
|
679
|
+
query ExploreMessage($conversationToken: String!, $id: ID!) {
|
|
680
|
+
exploreMessage(conversationToken: $conversationToken, id: $id) {
|
|
681
|
+
${EXPLORE_OWN_MESSAGE_FIELDS}
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
`
|
|
685
|
+
);
|
|
686
|
+
var SEND_EXPLORE_MESSAGE_MUTATION = (
|
|
687
|
+
/* GraphQL */
|
|
688
|
+
`
|
|
689
|
+
mutation SendExploreMessage($input: SendExploreMessageInput!) {
|
|
690
|
+
sendExploreMessage(input: $input) {
|
|
691
|
+
conversation {
|
|
692
|
+
id
|
|
693
|
+
token
|
|
694
|
+
productSlug
|
|
695
|
+
turnCount
|
|
696
|
+
createdAt
|
|
697
|
+
}
|
|
698
|
+
userMessage {
|
|
699
|
+
${EXPLORE_OWN_MESSAGE_FIELDS}
|
|
700
|
+
}
|
|
701
|
+
assistantMessage {
|
|
702
|
+
${EXPLORE_OWN_MESSAGE_FIELDS}
|
|
703
|
+
}
|
|
704
|
+
remainingToday
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
`
|
|
708
|
+
);
|
|
709
|
+
var RECORD_EXPLORE_CLICK_MUTATION = (
|
|
710
|
+
/* GraphQL */
|
|
711
|
+
`
|
|
712
|
+
mutation RecordExploreClick($input: RecordExploreClickInput!) {
|
|
713
|
+
recordExploreClick(input: $input) {
|
|
714
|
+
recorded
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
`
|
|
718
|
+
);
|
|
719
|
+
var SUBMIT_EXPLORE_FEEDBACK_MUTATION = (
|
|
720
|
+
/* GraphQL */
|
|
721
|
+
`
|
|
722
|
+
mutation SubmitExploreFeedback($input: SubmitExploreFeedbackInput!) {
|
|
723
|
+
submitExploreFeedback(input: $input) {
|
|
724
|
+
recorded
|
|
725
|
+
feedback {
|
|
726
|
+
rating
|
|
727
|
+
reason
|
|
728
|
+
comment
|
|
729
|
+
createdAt
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
`
|
|
734
|
+
);
|
|
735
|
+
var EXPLORE_FEEDBACK_COMMENT_SOFT_MAX = 500;
|
|
736
|
+
var CREATE_EXPLORE_SHARE_LINK_MUTATION = (
|
|
737
|
+
/* GraphQL */
|
|
738
|
+
`
|
|
739
|
+
mutation CreateExploreShareLink($conversationToken: String!) {
|
|
740
|
+
createExploreShareLink(conversationToken: $conversationToken) {
|
|
741
|
+
shareToken
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
`
|
|
745
|
+
);
|
|
746
|
+
var EXPLORE_SHARED_CONVERSATION_QUERY = (
|
|
747
|
+
/* GraphQL */
|
|
748
|
+
`
|
|
749
|
+
query ExploreSharedConversation($shareToken: String!) {
|
|
750
|
+
exploreSharedConversation(shareToken: $shareToken) {
|
|
751
|
+
${EXPLORE_MESSAGE_FIELDS}
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
`
|
|
755
|
+
);
|
|
380
756
|
function MarkdownLink({
|
|
381
757
|
href,
|
|
382
758
|
children,
|
|
@@ -816,135 +1192,6 @@ function useWebSDK() {
|
|
|
816
1192
|
return client;
|
|
817
1193
|
}
|
|
818
1194
|
|
|
819
|
-
// src/components/explore-types.ts
|
|
820
|
-
var EXPLORE_MESSAGE_FIELDS = (
|
|
821
|
-
/* GraphQL */
|
|
822
|
-
`
|
|
823
|
-
id
|
|
824
|
-
conversationId
|
|
825
|
-
role
|
|
826
|
-
status
|
|
827
|
-
content
|
|
828
|
-
partialContent
|
|
829
|
-
activity
|
|
830
|
-
references {
|
|
831
|
-
url
|
|
832
|
-
title
|
|
833
|
-
description
|
|
834
|
-
product
|
|
835
|
-
imageUrl
|
|
836
|
-
index
|
|
837
|
-
}
|
|
838
|
-
ctas {
|
|
839
|
-
kind
|
|
840
|
-
label
|
|
841
|
-
url
|
|
842
|
-
product
|
|
843
|
-
}
|
|
844
|
-
followUps
|
|
845
|
-
answered
|
|
846
|
-
attachments {
|
|
847
|
-
name
|
|
848
|
-
mimeType
|
|
849
|
-
size
|
|
850
|
-
textExtracted
|
|
851
|
-
}
|
|
852
|
-
errorCode
|
|
853
|
-
createdAt
|
|
854
|
-
completedAt
|
|
855
|
-
`
|
|
856
|
-
);
|
|
857
|
-
var EXPLORE_CATALOG_QUERY = (
|
|
858
|
-
/* GraphQL */
|
|
859
|
-
`
|
|
860
|
-
query ExploreCatalog($productSlug: String) {
|
|
861
|
-
exploreCatalog(productSlug: $productSlug) {
|
|
862
|
-
enabled
|
|
863
|
-
products {
|
|
864
|
-
slug
|
|
865
|
-
name
|
|
866
|
-
tagline
|
|
867
|
-
website
|
|
868
|
-
}
|
|
869
|
-
examplePrompts
|
|
870
|
-
welcomeTitle
|
|
871
|
-
welcomeBody
|
|
872
|
-
limits {
|
|
873
|
-
maxMessageLength
|
|
874
|
-
maxTurnsPerConversation
|
|
875
|
-
messagesPerDay
|
|
876
|
-
historyTurns
|
|
877
|
-
}
|
|
878
|
-
captchaRequired
|
|
879
|
-
recaptchaSiteKey
|
|
880
|
-
}
|
|
881
|
-
}
|
|
882
|
-
`
|
|
883
|
-
);
|
|
884
|
-
var EXPLORE_MESSAGE_QUERY = (
|
|
885
|
-
/* GraphQL */
|
|
886
|
-
`
|
|
887
|
-
query ExploreMessage($conversationToken: String!, $id: ID!) {
|
|
888
|
-
exploreMessage(conversationToken: $conversationToken, id: $id) {
|
|
889
|
-
${EXPLORE_MESSAGE_FIELDS}
|
|
890
|
-
}
|
|
891
|
-
}
|
|
892
|
-
`
|
|
893
|
-
);
|
|
894
|
-
var SEND_EXPLORE_MESSAGE_MUTATION = (
|
|
895
|
-
/* GraphQL */
|
|
896
|
-
`
|
|
897
|
-
mutation SendExploreMessage($input: SendExploreMessageInput!) {
|
|
898
|
-
sendExploreMessage(input: $input) {
|
|
899
|
-
conversation {
|
|
900
|
-
id
|
|
901
|
-
token
|
|
902
|
-
productSlug
|
|
903
|
-
turnCount
|
|
904
|
-
createdAt
|
|
905
|
-
}
|
|
906
|
-
userMessage {
|
|
907
|
-
${EXPLORE_MESSAGE_FIELDS}
|
|
908
|
-
}
|
|
909
|
-
assistantMessage {
|
|
910
|
-
${EXPLORE_MESSAGE_FIELDS}
|
|
911
|
-
}
|
|
912
|
-
remainingToday
|
|
913
|
-
}
|
|
914
|
-
}
|
|
915
|
-
`
|
|
916
|
-
);
|
|
917
|
-
var RECORD_EXPLORE_CLICK_MUTATION = (
|
|
918
|
-
/* GraphQL */
|
|
919
|
-
`
|
|
920
|
-
mutation RecordExploreClick($input: RecordExploreClickInput!) {
|
|
921
|
-
recordExploreClick(input: $input) {
|
|
922
|
-
recorded
|
|
923
|
-
}
|
|
924
|
-
}
|
|
925
|
-
`
|
|
926
|
-
);
|
|
927
|
-
var CREATE_EXPLORE_SHARE_LINK_MUTATION = (
|
|
928
|
-
/* GraphQL */
|
|
929
|
-
`
|
|
930
|
-
mutation CreateExploreShareLink($conversationToken: String!) {
|
|
931
|
-
createExploreShareLink(conversationToken: $conversationToken) {
|
|
932
|
-
shareToken
|
|
933
|
-
}
|
|
934
|
-
}
|
|
935
|
-
`
|
|
936
|
-
);
|
|
937
|
-
var EXPLORE_SHARED_CONVERSATION_QUERY = (
|
|
938
|
-
/* GraphQL */
|
|
939
|
-
`
|
|
940
|
-
query ExploreSharedConversation($shareToken: String!) {
|
|
941
|
-
exploreSharedConversation(shareToken: $shareToken) {
|
|
942
|
-
${EXPLORE_MESSAGE_FIELDS}
|
|
943
|
-
}
|
|
944
|
-
}
|
|
945
|
-
`
|
|
946
|
-
);
|
|
947
|
-
|
|
948
1195
|
// src/data/products.ts
|
|
949
1196
|
var ECOSYSTEM_PRODUCTS = [
|
|
950
1197
|
{
|
|
@@ -1228,7 +1475,12 @@ function buildFallbackCatalog(examplePrompts, welcome) {
|
|
|
1228
1475
|
welcomeBody: welcome?.body ?? FALLBACK_WELCOME_BODY,
|
|
1229
1476
|
limits: FALLBACK_EXPLORE_LIMITS,
|
|
1230
1477
|
captchaRequired: false,
|
|
1231
|
-
recaptchaSiteKey: null
|
|
1478
|
+
recaptchaSiteKey: null,
|
|
1479
|
+
// Empty, and deliberately not synthesised from `ECOSYSTEM_PRODUCTS`: a concept highlight
|
|
1480
|
+
// needs a real published illustration URL, and this SDK has no registry of them. An
|
|
1481
|
+
// invented path would render 38 broken frames on the one screen every prerender captures.
|
|
1482
|
+
// The strip renders nothing at all when the list is empty, which is the honest fallback.
|
|
1483
|
+
conceptHighlights: []
|
|
1232
1484
|
};
|
|
1233
1485
|
}
|
|
1234
1486
|
function normalizeCatalog(raw, fallback) {
|
|
@@ -1245,9 +1497,27 @@ function normalizeCatalog(raw, fallback) {
|
|
|
1245
1497
|
historyTurns: raw.limits?.historyTurns || fallback.limits.historyTurns
|
|
1246
1498
|
},
|
|
1247
1499
|
captchaRequired: raw.captchaRequired === true,
|
|
1248
|
-
recaptchaSiteKey: raw.recaptchaSiteKey ?? null
|
|
1500
|
+
recaptchaSiteKey: raw.recaptchaSiteKey ?? null,
|
|
1501
|
+
// `[ExploreConceptHighlight!]!` on the wire, so a gateway that KNOWS the field always
|
|
1502
|
+
// sends an array. The one response that arrives without it is the retry against an older
|
|
1503
|
+
// supergraph (`EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS`) — that gateway does not answer
|
|
1504
|
+
// the full document at all, it refuses it. Either way
|
|
1505
|
+
// `catalog.conceptHighlights.filter(...)` on `undefined` would throw inside render,
|
|
1506
|
+
// blanking the welcome screen over a decorative strip.
|
|
1507
|
+
conceptHighlights: raw.conceptHighlights?.length ? raw.conceptHighlights : fallback.conceptHighlights
|
|
1249
1508
|
};
|
|
1250
1509
|
}
|
|
1510
|
+
var CATALOG_DOCUMENT_REJECTED_CODES = /* @__PURE__ */ new Set([
|
|
1511
|
+
"GRAPHQL_VALIDATION_FAILED",
|
|
1512
|
+
"HTTP_400"
|
|
1513
|
+
]);
|
|
1514
|
+
function catalogRejectedTheHighlightField(res) {
|
|
1515
|
+
if (res.data?.exploreCatalog) return false;
|
|
1516
|
+
return (res.errors ?? []).some((error) => {
|
|
1517
|
+
const code = error.extensions?.code;
|
|
1518
|
+
return typeof code === "string" && CATALOG_DOCUMENT_REJECTED_CODES.has(code) || error.message.includes("conceptHighlights");
|
|
1519
|
+
});
|
|
1520
|
+
}
|
|
1251
1521
|
var RATE_LIMIT_CODES = /* @__PURE__ */ new Set([
|
|
1252
1522
|
"RATE_LIMITED",
|
|
1253
1523
|
"HTTP_429",
|
|
@@ -1587,11 +1857,19 @@ function useExploreChat(options = {}) {
|
|
|
1587
1857
|
React.useEffect(() => {
|
|
1588
1858
|
let cancelled = false;
|
|
1589
1859
|
const load = async () => {
|
|
1590
|
-
const
|
|
1860
|
+
const variables = { productSlug: productSlug ?? null };
|
|
1861
|
+
let res = await client.query(
|
|
1591
1862
|
EXPLORE_CATALOG_QUERY,
|
|
1592
|
-
|
|
1863
|
+
variables
|
|
1593
1864
|
);
|
|
1594
1865
|
if (cancelled || !mountedRef.current) return;
|
|
1866
|
+
if (catalogRejectedTheHighlightField(res)) {
|
|
1867
|
+
res = await client.query(
|
|
1868
|
+
EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS,
|
|
1869
|
+
variables
|
|
1870
|
+
);
|
|
1871
|
+
if (cancelled || !mountedRef.current) return;
|
|
1872
|
+
}
|
|
1595
1873
|
const raw = res.data?.exploreCatalog;
|
|
1596
1874
|
if (res.errors?.length || !raw) {
|
|
1597
1875
|
console.warn(
|
|
@@ -1972,6 +2250,42 @@ function useExploreChat(options = {}) {
|
|
|
1972
2250
|
},
|
|
1973
2251
|
[client]
|
|
1974
2252
|
);
|
|
2253
|
+
const submitFeedback = React.useCallback(
|
|
2254
|
+
async (messageId, rating, detail) => {
|
|
2255
|
+
const token = conversationTokenRef.current;
|
|
2256
|
+
if (!token) return false;
|
|
2257
|
+
const comment = detail?.comment?.trim();
|
|
2258
|
+
const input = {
|
|
2259
|
+
conversationToken: token,
|
|
2260
|
+
messageId,
|
|
2261
|
+
rating,
|
|
2262
|
+
// Only meaningful with NOT_HELPFUL. The server stores null for HELPFUL either
|
|
2263
|
+
// way; sending it would just be noise the backend has to defend against.
|
|
2264
|
+
reason: rating === "NOT_HELPFUL" ? detail?.reason ?? null : null,
|
|
2265
|
+
comment: comment ? comment : null
|
|
2266
|
+
};
|
|
2267
|
+
try {
|
|
2268
|
+
const res = await client.mutate(
|
|
2269
|
+
SUBMIT_EXPLORE_FEEDBACK_MUTATION,
|
|
2270
|
+
{ input }
|
|
2271
|
+
);
|
|
2272
|
+
const result = res?.data?.submitExploreFeedback;
|
|
2273
|
+
if (!result?.recorded) return false;
|
|
2274
|
+
const recorded = result.feedback;
|
|
2275
|
+
if (recorded && mountedRef.current) {
|
|
2276
|
+
setMessages(
|
|
2277
|
+
(current) => current.map(
|
|
2278
|
+
(message) => message.id === messageId ? { ...message, feedback: recorded } : message
|
|
2279
|
+
)
|
|
2280
|
+
);
|
|
2281
|
+
}
|
|
2282
|
+
return true;
|
|
2283
|
+
} catch {
|
|
2284
|
+
return false;
|
|
2285
|
+
}
|
|
2286
|
+
},
|
|
2287
|
+
[client]
|
|
2288
|
+
);
|
|
1975
2289
|
return {
|
|
1976
2290
|
phase,
|
|
1977
2291
|
catalog,
|
|
@@ -1991,6 +2305,7 @@ function useExploreChat(options = {}) {
|
|
|
1991
2305
|
deleteConversation,
|
|
1992
2306
|
clearHistory,
|
|
1993
2307
|
recordClick,
|
|
2308
|
+
submitFeedback,
|
|
1994
2309
|
createShareLink,
|
|
1995
2310
|
isSharedView
|
|
1996
2311
|
};
|
|
@@ -2849,6 +3164,122 @@ function isInlineImageAllowed(src, origins) {
|
|
|
2849
3164
|
if (url.protocol !== "https:" || url.username || url.password) return false;
|
|
2850
3165
|
return origins.has(url.origin);
|
|
2851
3166
|
}
|
|
3167
|
+
var REFERENCE_KIND_ORDER = [
|
|
3168
|
+
"CONCEPT",
|
|
3169
|
+
"DOCS",
|
|
3170
|
+
"PRICING",
|
|
3171
|
+
"USE_CASE",
|
|
3172
|
+
"PAGE"
|
|
3173
|
+
];
|
|
3174
|
+
var PRODUCT_SUBDOMAINS = [
|
|
3175
|
+
"alphadocs.",
|
|
3176
|
+
"alphaapp.",
|
|
3177
|
+
"docs.",
|
|
3178
|
+
"alpha.",
|
|
3179
|
+
"app.",
|
|
3180
|
+
"www."
|
|
3181
|
+
];
|
|
3182
|
+
function readCatalogUrl(raw) {
|
|
3183
|
+
let parsed;
|
|
3184
|
+
try {
|
|
3185
|
+
parsed = new URL(raw);
|
|
3186
|
+
} catch {
|
|
3187
|
+
return null;
|
|
3188
|
+
}
|
|
3189
|
+
if (parsed.protocol !== "https:") return null;
|
|
3190
|
+
const host = parsed.hostname.toLowerCase();
|
|
3191
|
+
const prefix = PRODUCT_SUBDOMAINS.find(
|
|
3192
|
+
(candidate) => host.startsWith(candidate)
|
|
3193
|
+
);
|
|
3194
|
+
const apex = prefix === void 0 ? host : host.slice(prefix.length);
|
|
3195
|
+
const port = parsed.port ? `:${parsed.port}` : "";
|
|
3196
|
+
return {
|
|
3197
|
+
origin: `https://${apex}${port}`,
|
|
3198
|
+
prefix,
|
|
3199
|
+
pathname: parsed.pathname
|
|
3200
|
+
};
|
|
3201
|
+
}
|
|
3202
|
+
function referenceKindOf(url, origins) {
|
|
3203
|
+
const parsed = readCatalogUrl(url);
|
|
3204
|
+
if (parsed === null || !origins.has(parsed.origin)) return null;
|
|
3205
|
+
if (parsed.prefix === "docs." || parsed.prefix === "alphadocs.")
|
|
3206
|
+
return "DOCS";
|
|
3207
|
+
const segment = parsed.pathname.toLowerCase().split("/").filter(Boolean)[0] ?? "";
|
|
3208
|
+
if (segment === "concept" || segment === "concepts") return "CONCEPT";
|
|
3209
|
+
if (segment === "docs") return "DOCS";
|
|
3210
|
+
if (segment === "pricing" || segment === "plans") return "PRICING";
|
|
3211
|
+
if (segment === "use-case" || segment === "use-cases" || segment === "solutions") {
|
|
3212
|
+
return "USE_CASE";
|
|
3213
|
+
}
|
|
3214
|
+
return "PAGE";
|
|
3215
|
+
}
|
|
3216
|
+
function productNamesByOrigin(products) {
|
|
3217
|
+
const names = /* @__PURE__ */ new Map();
|
|
3218
|
+
for (const product of products) {
|
|
3219
|
+
let url;
|
|
3220
|
+
try {
|
|
3221
|
+
url = new URL(product.website);
|
|
3222
|
+
} catch {
|
|
3223
|
+
continue;
|
|
3224
|
+
}
|
|
3225
|
+
if (url.protocol !== "https:") continue;
|
|
3226
|
+
const apex = url.hostname.replace(/^www\./, "");
|
|
3227
|
+
const port = url.port ? `:${url.port}` : "";
|
|
3228
|
+
const key = `https://${apex}${port}`;
|
|
3229
|
+
if (!names.has(key)) names.set(key, product.name);
|
|
3230
|
+
}
|
|
3231
|
+
return names;
|
|
3232
|
+
}
|
|
3233
|
+
function summariseReferences(references, origins, productNames) {
|
|
3234
|
+
const counts = /* @__PURE__ */ new Map();
|
|
3235
|
+
const products = [];
|
|
3236
|
+
for (const reference of references) {
|
|
3237
|
+
const kind = referenceKindOf(reference.url, origins);
|
|
3238
|
+
if (kind !== null) counts.set(kind, (counts.get(kind) ?? 0) + 1);
|
|
3239
|
+
const parsed = readCatalogUrl(reference.url);
|
|
3240
|
+
const name = (parsed === null ? void 0 : productNames.get(parsed.origin)) ?? (reference.product || null);
|
|
3241
|
+
if (name != null && !products.includes(name)) products.push(name);
|
|
3242
|
+
}
|
|
3243
|
+
return {
|
|
3244
|
+
total: references.length,
|
|
3245
|
+
kinds: REFERENCE_KIND_ORDER.filter((kind) => counts.has(kind)).map(
|
|
3246
|
+
(kind) => ({ kind, count: counts.get(kind) ?? 0 })
|
|
3247
|
+
),
|
|
3248
|
+
products
|
|
3249
|
+
};
|
|
3250
|
+
}
|
|
3251
|
+
var CODE_FENCE = /^\s*(?:```|~~~)/;
|
|
3252
|
+
function answerPlainText(markdown) {
|
|
3253
|
+
const lines = [];
|
|
3254
|
+
let inFence = false;
|
|
3255
|
+
for (const raw of markdown.split("\n")) {
|
|
3256
|
+
if (CODE_FENCE.test(raw)) {
|
|
3257
|
+
inFence = !inFence;
|
|
3258
|
+
continue;
|
|
3259
|
+
}
|
|
3260
|
+
if (inFence) {
|
|
3261
|
+
lines.push(raw);
|
|
3262
|
+
continue;
|
|
3263
|
+
}
|
|
3264
|
+
let line = raw;
|
|
3265
|
+
line = line.replace(/!\[[^\]]*\]\([^)\s]*(?:\s+"[^"]*")?\)/g, "");
|
|
3266
|
+
line = line.replace(/\[([^\]]+)\]\(([^)\s]+)(?:\s+"[^"]*")?\)/g, "$1 ($2)");
|
|
3267
|
+
line = line.replace(/<(https?:\/\/[^>\s]+)>/g, "$1");
|
|
3268
|
+
line = line.replace(/^\s{0,3}#{1,6}\s+/, "");
|
|
3269
|
+
line = line.replace(/^\s{0,3}>\s?/, "");
|
|
3270
|
+
if (/^\s{0,3}([-*_])[ \t]*(?:\1[ \t]*){2,}$/.test(line)) {
|
|
3271
|
+
lines.push("");
|
|
3272
|
+
continue;
|
|
3273
|
+
}
|
|
3274
|
+
line = line.replace(/`([^`]+)`/g, "$1");
|
|
3275
|
+
line = line.replace(/\*\*([^*]+)\*\*/g, "$1");
|
|
3276
|
+
line = line.replace(/__([^_]+)__/g, "$1");
|
|
3277
|
+
line = line.replace(/(^|[^*\w])\*([^*\n]+)\*(?![*\w])/g, "$1$2");
|
|
3278
|
+
line = line.replace(/(^|[^_\w])_([^_\n]+)_(?![_\w])/g, "$1$2");
|
|
3279
|
+
lines.push(line.replace(/[ \t]+$/, ""));
|
|
3280
|
+
}
|
|
3281
|
+
return lines.join("\n").replace(/\n{3,}/g, "\n\n").trim();
|
|
3282
|
+
}
|
|
2852
3283
|
var InlineImageScopeContext = React.createContext(null);
|
|
2853
3284
|
var InsideLinkContext = React.createContext(false);
|
|
2854
3285
|
function AnswerLink(props) {
|
|
@@ -3046,6 +3477,315 @@ function ThinkingIndicator({ activity }) {
|
|
|
3046
3477
|
}
|
|
3047
3478
|
);
|
|
3048
3479
|
}
|
|
3480
|
+
function AnswerFeedback({
|
|
3481
|
+
strings: T,
|
|
3482
|
+
messageId,
|
|
3483
|
+
feedback,
|
|
3484
|
+
onSubmit
|
|
3485
|
+
}) {
|
|
3486
|
+
const [local, setLocal] = React.useState(null);
|
|
3487
|
+
const [failed, setFailed] = React.useState(false);
|
|
3488
|
+
const [sending, setSending] = React.useState(false);
|
|
3489
|
+
const [chooserOpen, setChooserOpen] = React.useState(false);
|
|
3490
|
+
const [reason, setReason] = React.useState(null);
|
|
3491
|
+
const [comment, setComment] = React.useState("");
|
|
3492
|
+
const downRef = React.useRef(null);
|
|
3493
|
+
const firstReasonRef = React.useRef(null);
|
|
3494
|
+
const inFlightRef = React.useRef(false);
|
|
3495
|
+
const panelId = `boff-explore-feedback-${messageId}`;
|
|
3496
|
+
const rating = local ?? feedback?.rating ?? null;
|
|
3497
|
+
const rated = rating !== null;
|
|
3498
|
+
const reasonLabels = {
|
|
3499
|
+
INACCURATE: T.feedbackReasonInaccurate,
|
|
3500
|
+
INCOMPLETE: T.feedbackReasonIncomplete,
|
|
3501
|
+
OFF_TOPIC: T.feedbackReasonOffTopic,
|
|
3502
|
+
HARD_TO_FOLLOW: T.feedbackReasonHardToFollow,
|
|
3503
|
+
OTHER: T.feedbackReasonOther
|
|
3504
|
+
};
|
|
3505
|
+
const closeChooser = React.useCallback(() => {
|
|
3506
|
+
setChooserOpen(false);
|
|
3507
|
+
downRef.current?.focus();
|
|
3508
|
+
}, []);
|
|
3509
|
+
const submit = React.useCallback(
|
|
3510
|
+
async (next, detail) => {
|
|
3511
|
+
if (inFlightRef.current) return;
|
|
3512
|
+
inFlightRef.current = true;
|
|
3513
|
+
setSending(true);
|
|
3514
|
+
setFailed(false);
|
|
3515
|
+
setLocal(next);
|
|
3516
|
+
const recorded = await onSubmit(next, detail);
|
|
3517
|
+
inFlightRef.current = false;
|
|
3518
|
+
setSending(false);
|
|
3519
|
+
if (recorded) return;
|
|
3520
|
+
setLocal(null);
|
|
3521
|
+
setFailed(true);
|
|
3522
|
+
},
|
|
3523
|
+
[onSubmit]
|
|
3524
|
+
);
|
|
3525
|
+
const onThumbUp = React.useCallback(() => {
|
|
3526
|
+
setChooserOpen(false);
|
|
3527
|
+
void submit("HELPFUL");
|
|
3528
|
+
}, [submit]);
|
|
3529
|
+
const onThumbDown = React.useCallback(() => {
|
|
3530
|
+
setChooserOpen((open) => !open);
|
|
3531
|
+
}, []);
|
|
3532
|
+
const onSendReason = React.useCallback(() => {
|
|
3533
|
+
setChooserOpen(false);
|
|
3534
|
+
void submit("NOT_HELPFUL", { reason, comment });
|
|
3535
|
+
}, [comment, reason, submit]);
|
|
3536
|
+
React.useEffect(() => {
|
|
3537
|
+
if (!chooserOpen) return;
|
|
3538
|
+
firstReasonRef.current?.focus();
|
|
3539
|
+
}, [chooserOpen]);
|
|
3540
|
+
const thumbClass = (active) => cn(
|
|
3541
|
+
"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full border transition-colors",
|
|
3542
|
+
"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
|
|
3543
|
+
"disabled:pointer-events-none disabled:opacity-50",
|
|
3544
|
+
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"
|
|
3545
|
+
);
|
|
3546
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3547
|
+
"div",
|
|
3548
|
+
{
|
|
3549
|
+
"data-boff-explore": "feedback",
|
|
3550
|
+
"data-rating": rating ?? "none",
|
|
3551
|
+
className: "pt-0.5",
|
|
3552
|
+
children: [
|
|
3553
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-x-2 gap-y-1", children: [
|
|
3554
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3555
|
+
"p",
|
|
3556
|
+
{
|
|
3557
|
+
"data-boff-explore": "feedback-status",
|
|
3558
|
+
role: "status",
|
|
3559
|
+
className: "text-xs text-muted-foreground",
|
|
3560
|
+
children: failed ? T.feedbackNotSent : rated ? T.feedbackThanks : T.feedbackPrompt
|
|
3561
|
+
}
|
|
3562
|
+
),
|
|
3563
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
|
|
3564
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3565
|
+
"button",
|
|
3566
|
+
{
|
|
3567
|
+
"data-boff-explore": "feedback-up",
|
|
3568
|
+
type: "button",
|
|
3569
|
+
disabled: sending,
|
|
3570
|
+
"aria-label": T.feedbackHelpful,
|
|
3571
|
+
title: T.feedbackHelpful,
|
|
3572
|
+
"aria-pressed": rating === "HELPFUL",
|
|
3573
|
+
onClick: onThumbUp,
|
|
3574
|
+
className: thumbClass(rating === "HELPFUL"),
|
|
3575
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ThumbsUp, { className: "h-3.5 w-3.5", "aria-hidden": "true" })
|
|
3576
|
+
}
|
|
3577
|
+
),
|
|
3578
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3579
|
+
"button",
|
|
3580
|
+
{
|
|
3581
|
+
ref: downRef,
|
|
3582
|
+
"data-boff-explore": "feedback-down",
|
|
3583
|
+
type: "button",
|
|
3584
|
+
disabled: sending,
|
|
3585
|
+
"aria-label": T.feedbackNotHelpful,
|
|
3586
|
+
title: T.feedbackNotHelpful,
|
|
3587
|
+
"aria-pressed": rating === "NOT_HELPFUL",
|
|
3588
|
+
"aria-expanded": chooserOpen,
|
|
3589
|
+
"aria-controls": chooserOpen ? panelId : void 0,
|
|
3590
|
+
onClick: onThumbDown,
|
|
3591
|
+
className: thumbClass(rating === "NOT_HELPFUL" || chooserOpen),
|
|
3592
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ThumbsDown, { className: "h-3.5 w-3.5", "aria-hidden": "true" })
|
|
3593
|
+
}
|
|
3594
|
+
)
|
|
3595
|
+
] })
|
|
3596
|
+
] }),
|
|
3597
|
+
chooserOpen ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3598
|
+
"div",
|
|
3599
|
+
{
|
|
3600
|
+
id: panelId,
|
|
3601
|
+
"data-boff-explore": "feedback-reasons",
|
|
3602
|
+
role: "group",
|
|
3603
|
+
"aria-label": T.feedbackReasonTitle,
|
|
3604
|
+
onKeyDown: (event) => {
|
|
3605
|
+
if (event.key !== "Escape") return;
|
|
3606
|
+
event.stopPropagation();
|
|
3607
|
+
closeChooser();
|
|
3608
|
+
},
|
|
3609
|
+
className: "boff-explore-fade mt-2 rounded-xl border border-border bg-card p-3",
|
|
3610
|
+
children: [
|
|
3611
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-medium text-card-foreground", children: T.feedbackReasonTitle }),
|
|
3612
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1.5", children: EXPLORE_FEEDBACK_REASONS.map((code, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
3613
|
+
"button",
|
|
3614
|
+
{
|
|
3615
|
+
ref: index === 0 ? firstReasonRef : void 0,
|
|
3616
|
+
"data-boff-explore": "feedback-reason",
|
|
3617
|
+
"data-reason": code,
|
|
3618
|
+
type: "button",
|
|
3619
|
+
"aria-pressed": reason === code,
|
|
3620
|
+
onClick: () => setReason((current) => current === code ? null : code),
|
|
3621
|
+
className: cn(
|
|
3622
|
+
"inline-flex max-w-full items-center rounded-full border px-3 py-1 text-xs transition-colors",
|
|
3623
|
+
"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
|
|
3624
|
+
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"
|
|
3625
|
+
),
|
|
3626
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: reasonLabels[code] })
|
|
3627
|
+
},
|
|
3628
|
+
code
|
|
3629
|
+
)) }),
|
|
3630
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 flex flex-wrap items-center gap-2", children: [
|
|
3631
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3632
|
+
"input",
|
|
3633
|
+
{
|
|
3634
|
+
"data-boff-explore": "feedback-comment",
|
|
3635
|
+
type: "text",
|
|
3636
|
+
value: comment,
|
|
3637
|
+
onChange: (event) => setComment(event.target.value),
|
|
3638
|
+
onKeyDown: (event) => {
|
|
3639
|
+
if (event.key !== "Enter") return;
|
|
3640
|
+
event.preventDefault();
|
|
3641
|
+
onSendReason();
|
|
3642
|
+
},
|
|
3643
|
+
"aria-label": T.feedbackCommentPlaceholder,
|
|
3644
|
+
placeholder: T.feedbackCommentPlaceholder,
|
|
3645
|
+
maxLength: EXPLORE_FEEDBACK_COMMENT_SOFT_MAX,
|
|
3646
|
+
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"
|
|
3647
|
+
}
|
|
3648
|
+
),
|
|
3649
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3650
|
+
Button,
|
|
3651
|
+
{
|
|
3652
|
+
"data-boff-explore": "feedback-send",
|
|
3653
|
+
type: "button",
|
|
3654
|
+
size: "sm",
|
|
3655
|
+
disabled: sending,
|
|
3656
|
+
onClick: onSendReason,
|
|
3657
|
+
children: T.feedbackSend
|
|
3658
|
+
}
|
|
3659
|
+
),
|
|
3660
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3661
|
+
Button,
|
|
3662
|
+
{
|
|
3663
|
+
"data-boff-explore": "feedback-dismiss",
|
|
3664
|
+
type: "button",
|
|
3665
|
+
size: "sm",
|
|
3666
|
+
variant: "ghost",
|
|
3667
|
+
className: "text-muted-foreground",
|
|
3668
|
+
onClick: closeChooser,
|
|
3669
|
+
children: T.feedbackDismiss
|
|
3670
|
+
}
|
|
3671
|
+
)
|
|
3672
|
+
] })
|
|
3673
|
+
]
|
|
3674
|
+
}
|
|
3675
|
+
) : null
|
|
3676
|
+
]
|
|
3677
|
+
}
|
|
3678
|
+
);
|
|
3679
|
+
}
|
|
3680
|
+
var PROVENANCE_CHIP = "inline-flex max-w-full items-center gap-1 rounded-full border border-border bg-muted/60 px-2 py-0.5 text-[11px] leading-5 text-muted-foreground";
|
|
3681
|
+
function ProvenanceChips({
|
|
3682
|
+
strings: T,
|
|
3683
|
+
provenance
|
|
3684
|
+
}) {
|
|
3685
|
+
if (provenance.total === 0) return null;
|
|
3686
|
+
const kindLabels = {
|
|
3687
|
+
CONCEPT: T.sourceKindConcept,
|
|
3688
|
+
DOCS: T.sourceKindDocs,
|
|
3689
|
+
PRICING: T.sourceKindPricing,
|
|
3690
|
+
USE_CASE: T.sourceKindUseCase,
|
|
3691
|
+
PAGE: T.sourceKindPage
|
|
3692
|
+
};
|
|
3693
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3694
|
+
"ul",
|
|
3695
|
+
{
|
|
3696
|
+
"data-boff-explore": "provenance",
|
|
3697
|
+
"aria-label": T.groundedIn,
|
|
3698
|
+
className: "flex flex-wrap items-center gap-1.5",
|
|
3699
|
+
children: [
|
|
3700
|
+
/* @__PURE__ */ jsxRuntime.jsxs("li", { "data-boff-explore": "provenance-count", className: PROVENANCE_CHIP, children: [
|
|
3701
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.BookOpenText, { className: "h-3 w-3 shrink-0", "aria-hidden": "true" }),
|
|
3702
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: provenance.total === 1 ? T.sourceCountOne : fill(T.sourceCountMany, { count: String(provenance.total) }) })
|
|
3703
|
+
] }),
|
|
3704
|
+
provenance.kinds.map(({ kind, count }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
3705
|
+
"li",
|
|
3706
|
+
{
|
|
3707
|
+
"data-boff-explore": "provenance-kind",
|
|
3708
|
+
"data-kind": kind,
|
|
3709
|
+
"data-count": count,
|
|
3710
|
+
className: PROVENANCE_CHIP,
|
|
3711
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: count > 1 ? `${kindLabels[kind]} \xB7 ${count}` : kindLabels[kind] })
|
|
3712
|
+
},
|
|
3713
|
+
kind
|
|
3714
|
+
)),
|
|
3715
|
+
provenance.products.map((name) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
3716
|
+
"li",
|
|
3717
|
+
{
|
|
3718
|
+
"data-boff-explore": "provenance-product",
|
|
3719
|
+
className: PROVENANCE_CHIP,
|
|
3720
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: name })
|
|
3721
|
+
},
|
|
3722
|
+
name
|
|
3723
|
+
))
|
|
3724
|
+
]
|
|
3725
|
+
}
|
|
3726
|
+
);
|
|
3727
|
+
}
|
|
3728
|
+
var COPY_FEEDBACK_MS = 2500;
|
|
3729
|
+
function AnswerActions({
|
|
3730
|
+
strings: T,
|
|
3731
|
+
text
|
|
3732
|
+
}) {
|
|
3733
|
+
const [outcome, setOutcome] = React.useState("idle");
|
|
3734
|
+
const resetRef = React.useRef(null);
|
|
3735
|
+
React.useEffect(
|
|
3736
|
+
() => () => {
|
|
3737
|
+
if (resetRef.current !== null) clearTimeout(resetRef.current);
|
|
3738
|
+
},
|
|
3739
|
+
[]
|
|
3740
|
+
);
|
|
3741
|
+
const copy = React.useCallback(async () => {
|
|
3742
|
+
let copied = false;
|
|
3743
|
+
try {
|
|
3744
|
+
const clipboard = typeof navigator === "undefined" ? void 0 : navigator.clipboard;
|
|
3745
|
+
if (typeof clipboard?.writeText === "function") {
|
|
3746
|
+
await clipboard.writeText(text);
|
|
3747
|
+
copied = true;
|
|
3748
|
+
}
|
|
3749
|
+
} catch {
|
|
3750
|
+
copied = false;
|
|
3751
|
+
}
|
|
3752
|
+
setOutcome(copied ? "copied" : "failed");
|
|
3753
|
+
if (resetRef.current !== null) clearTimeout(resetRef.current);
|
|
3754
|
+
resetRef.current = setTimeout(() => setOutcome("idle"), COPY_FEEDBACK_MS);
|
|
3755
|
+
}, [text]);
|
|
3756
|
+
const label = outcome === "copied" ? T.copied : outcome === "failed" ? T.copyFailed : T.copyAnswer;
|
|
3757
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3758
|
+
"div",
|
|
3759
|
+
{
|
|
3760
|
+
"data-boff-explore": "answer-actions",
|
|
3761
|
+
className: "flex flex-wrap items-center gap-2 pt-0.5",
|
|
3762
|
+
children: [
|
|
3763
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3764
|
+
"button",
|
|
3765
|
+
{
|
|
3766
|
+
"data-boff-explore": "copy-answer",
|
|
3767
|
+
"data-outcome": outcome,
|
|
3768
|
+
type: "button",
|
|
3769
|
+
title: label,
|
|
3770
|
+
onClick: () => {
|
|
3771
|
+
void copy();
|
|
3772
|
+
},
|
|
3773
|
+
className: cn(
|
|
3774
|
+
"inline-flex max-w-full items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs transition-colors",
|
|
3775
|
+
"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
|
|
3776
|
+
outcome === "failed" ? "border-destructive/40 bg-card text-destructive" : "border-border bg-card text-muted-foreground hover:border-primary/40 hover:bg-accent hover:text-foreground"
|
|
3777
|
+
),
|
|
3778
|
+
children: [
|
|
3779
|
+
outcome === "copied" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-3 w-3 shrink-0", "aria-hidden": "true" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { className: "h-3 w-3 shrink-0", "aria-hidden": "true" }),
|
|
3780
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: label })
|
|
3781
|
+
]
|
|
3782
|
+
}
|
|
3783
|
+
),
|
|
3784
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { "data-boff-explore": "copy-status", role: "status", className: "sr-only", children: outcome === "idle" ? "" : label })
|
|
3785
|
+
]
|
|
3786
|
+
}
|
|
3787
|
+
);
|
|
3788
|
+
}
|
|
3049
3789
|
function UserBubble({
|
|
3050
3790
|
strings: T,
|
|
3051
3791
|
message
|
|
@@ -3091,10 +3831,12 @@ function AssistantBubble({
|
|
|
3091
3831
|
message,
|
|
3092
3832
|
activity,
|
|
3093
3833
|
imageOrigins,
|
|
3834
|
+
productNames,
|
|
3094
3835
|
onNavigate,
|
|
3095
3836
|
anchorRef,
|
|
3096
3837
|
onFollow,
|
|
3097
|
-
onFollowUp
|
|
3838
|
+
onFollowUp,
|
|
3839
|
+
onFeedback
|
|
3098
3840
|
}) {
|
|
3099
3841
|
const streaming = message.status === "PENDING" || message.status === "RUNNING";
|
|
3100
3842
|
const body = message.content || message.partialContent || "";
|
|
@@ -3118,6 +3860,15 @@ function AssistantBubble({
|
|
|
3118
3860
|
}),
|
|
3119
3861
|
[T, completed, imageOrigins, failedImages, markImageFailed]
|
|
3120
3862
|
);
|
|
3863
|
+
const provenance = React.useMemo(
|
|
3864
|
+
() => summariseReferences(message.references, imageOrigins, productNames),
|
|
3865
|
+
[message.references, imageOrigins, productNames]
|
|
3866
|
+
);
|
|
3867
|
+
const copyText = React.useMemo(
|
|
3868
|
+
() => answerPlainText(message.content),
|
|
3869
|
+
[message.content]
|
|
3870
|
+
);
|
|
3871
|
+
const grounded = completed && message.answered !== false;
|
|
3121
3872
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3122
3873
|
"div",
|
|
3123
3874
|
{
|
|
@@ -3167,6 +3918,7 @@ function AssistantBubble({
|
|
|
3167
3918
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "boff-prose boff-prose-sm boff-explore-body min-w-0 text-card-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(InlineImageScopeContext.Provider, { value: imageScope, children: /* @__PURE__ */ jsxRuntime.jsx(Markdown, { components: ANSWER_MARKDOWN_COMPONENTS, children: body }) }) }),
|
|
3168
3919
|
streaming ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "boff-explore-caret", "aria-hidden": "true" }) : null
|
|
3169
3920
|
] }) : null,
|
|
3921
|
+
grounded && provenance.total > 0 ? /* @__PURE__ */ jsxRuntime.jsx(ProvenanceChips, { strings: T, provenance }) : null,
|
|
3170
3922
|
streaming ? /* @__PURE__ */ jsxRuntime.jsx(ThinkingIndicator, { activity }) : null,
|
|
3171
3923
|
failed && !body ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-2xl rounded-tl-md border border-border bg-muted px-4 py-3 text-sm text-muted-foreground", children: T.answerDidNotArrive }) : null,
|
|
3172
3924
|
message.references.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
@@ -3205,7 +3957,17 @@ function AssistantBubble({
|
|
|
3205
3957
|
},
|
|
3206
3958
|
question
|
|
3207
3959
|
)) })
|
|
3208
|
-
] }) : null
|
|
3960
|
+
] }) : null,
|
|
3961
|
+
completed && copyText !== "" ? /* @__PURE__ */ jsxRuntime.jsx(AnswerActions, { strings: T, text: copyText }) : null,
|
|
3962
|
+
completed && onFeedback ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
3963
|
+
AnswerFeedback,
|
|
3964
|
+
{
|
|
3965
|
+
strings: T,
|
|
3966
|
+
messageId: message.id,
|
|
3967
|
+
feedback: message.feedback,
|
|
3968
|
+
onSubmit: onFeedback
|
|
3969
|
+
}
|
|
3970
|
+
) : null
|
|
3209
3971
|
] })
|
|
3210
3972
|
]
|
|
3211
3973
|
}
|
|
@@ -3409,6 +4171,96 @@ function ProductStrip({
|
|
|
3409
4171
|
}
|
|
3410
4172
|
);
|
|
3411
4173
|
}
|
|
4174
|
+
var MAX_CONCEPT_CARDS = 6;
|
|
4175
|
+
function ConceptStrip({
|
|
4176
|
+
strings: T,
|
|
4177
|
+
highlights,
|
|
4178
|
+
onAsk,
|
|
4179
|
+
disabled
|
|
4180
|
+
}) {
|
|
4181
|
+
const [failed, setFailed] = React.useState(() => /* @__PURE__ */ new Set());
|
|
4182
|
+
const markFailed = React.useCallback((src) => {
|
|
4183
|
+
setFailed(
|
|
4184
|
+
(current) => current.has(src) ? current : new Set(current).add(src)
|
|
4185
|
+
);
|
|
4186
|
+
}, []);
|
|
4187
|
+
const visible = highlights.filter(
|
|
4188
|
+
(highlight) => highlight.imageUrl !== "" && !failed.has(highlight.imageUrl)
|
|
4189
|
+
).slice(0, MAX_CONCEPT_CARDS);
|
|
4190
|
+
if (visible.length === 0) return null;
|
|
4191
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4192
|
+
"div",
|
|
4193
|
+
{
|
|
4194
|
+
"data-boff-explore": "concept-strip-block",
|
|
4195
|
+
className: "boff-explore-rise boff-explore-rise-3 mt-6",
|
|
4196
|
+
children: [
|
|
4197
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.conceptStripTitle }),
|
|
4198
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4199
|
+
"ul",
|
|
4200
|
+
{
|
|
4201
|
+
"data-boff-explore": "concept-strip",
|
|
4202
|
+
"aria-label": T.conceptStripLabel,
|
|
4203
|
+
className: "boff-explore-strip flex min-w-0 snap-x gap-3 overflow-x-auto pb-1",
|
|
4204
|
+
children: visible.map((highlight) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
4205
|
+
"li",
|
|
4206
|
+
{
|
|
4207
|
+
className: "shrink-0 snap-start",
|
|
4208
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4209
|
+
"button",
|
|
4210
|
+
{
|
|
4211
|
+
"data-boff-explore": "concept-card",
|
|
4212
|
+
"data-product": highlight.product,
|
|
4213
|
+
type: "button",
|
|
4214
|
+
disabled,
|
|
4215
|
+
"aria-label": fill(T.conceptAsk, {
|
|
4216
|
+
title: highlight.title,
|
|
4217
|
+
product: highlight.productName
|
|
4218
|
+
}),
|
|
4219
|
+
onClick: () => onAsk(
|
|
4220
|
+
fill(T.conceptAskQuestion, {
|
|
4221
|
+
title: highlight.title,
|
|
4222
|
+
product: highlight.productName
|
|
4223
|
+
})
|
|
4224
|
+
),
|
|
4225
|
+
className: "group flex w-40 flex-col overflow-hidden rounded-xl border border-border bg-card text-left shadow-sm transition-colors hover:border-primary/50 hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring sm:w-48",
|
|
4226
|
+
children: [
|
|
4227
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative block aspect-[16/9] w-full overflow-hidden bg-muted", children: [
|
|
4228
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4229
|
+
"img",
|
|
4230
|
+
{
|
|
4231
|
+
src: highlight.imageUrl,
|
|
4232
|
+
alt: highlight.alt,
|
|
4233
|
+
loading: "lazy",
|
|
4234
|
+
decoding: "async",
|
|
4235
|
+
onError: () => markFailed(highlight.imageUrl),
|
|
4236
|
+
className: "h-full w-full object-cover transition-transform duration-300 group-hover:scale-105"
|
|
4237
|
+
}
|
|
4238
|
+
),
|
|
4239
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4240
|
+
"span",
|
|
4241
|
+
{
|
|
4242
|
+
"aria-hidden": "true",
|
|
4243
|
+
className: "pointer-events-none absolute left-1.5 top-1.5 rounded-full border border-border bg-background/90 px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-foreground",
|
|
4244
|
+
children: T.conceptIllustration
|
|
4245
|
+
}
|
|
4246
|
+
)
|
|
4247
|
+
] }),
|
|
4248
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-col gap-0.5 p-2.5", children: [
|
|
4249
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "line-clamp-2 text-xs font-semibold leading-snug text-card-foreground", children: highlight.title }),
|
|
4250
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-[11px] text-muted-foreground", children: highlight.productName })
|
|
4251
|
+
] })
|
|
4252
|
+
]
|
|
4253
|
+
}
|
|
4254
|
+
)
|
|
4255
|
+
},
|
|
4256
|
+
`${highlight.product}:${highlight.url}`
|
|
4257
|
+
))
|
|
4258
|
+
}
|
|
4259
|
+
)
|
|
4260
|
+
]
|
|
4261
|
+
}
|
|
4262
|
+
);
|
|
4263
|
+
}
|
|
3412
4264
|
function DisclaimerDialog({
|
|
3413
4265
|
open,
|
|
3414
4266
|
onClose,
|
|
@@ -3515,6 +4367,7 @@ function WelcomeState({
|
|
|
3515
4367
|
body,
|
|
3516
4368
|
prompts,
|
|
3517
4369
|
products,
|
|
4370
|
+
conceptHighlights,
|
|
3518
4371
|
focusProduct,
|
|
3519
4372
|
onPrompt,
|
|
3520
4373
|
onFocus,
|
|
@@ -3553,6 +4406,15 @@ function WelcomeState({
|
|
|
3553
4406
|
}
|
|
3554
4407
|
)
|
|
3555
4408
|
] }) : null,
|
|
4409
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4410
|
+
ConceptStrip,
|
|
4411
|
+
{
|
|
4412
|
+
strings: T,
|
|
4413
|
+
highlights: conceptHighlights,
|
|
4414
|
+
onAsk: onPrompt,
|
|
4415
|
+
disabled
|
|
4416
|
+
}
|
|
4417
|
+
),
|
|
3556
4418
|
products.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "boff-explore-rise boff-explore-rise-3 mt-6", children: [
|
|
3557
4419
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.focusProduct }),
|
|
3558
4420
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3609,6 +4471,7 @@ function ExplorePage({
|
|
|
3609
4471
|
deleteConversation,
|
|
3610
4472
|
clearHistory,
|
|
3611
4473
|
recordClick,
|
|
4474
|
+
submitFeedback,
|
|
3612
4475
|
createShareLink,
|
|
3613
4476
|
isSharedView
|
|
3614
4477
|
} = useExploreChat({
|
|
@@ -3665,10 +4528,18 @@ function ExplorePage({
|
|
|
3665
4528
|
() => catalog.products.find((p) => p.slug === focusProduct)?.name ?? null,
|
|
3666
4529
|
[catalog.products, focusProduct]
|
|
3667
4530
|
);
|
|
4531
|
+
const headProductName = React.useMemo(
|
|
4532
|
+
() => productSlug ? catalog.products.find((p) => p.slug === productSlug)?.name ?? null : null,
|
|
4533
|
+
[catalog.products, productSlug]
|
|
4534
|
+
);
|
|
3668
4535
|
const imageOrigins = React.useMemo(
|
|
3669
4536
|
() => inlineImageOrigins(catalog.products),
|
|
3670
4537
|
[catalog.products]
|
|
3671
4538
|
);
|
|
4539
|
+
const productNames = React.useMemo(
|
|
4540
|
+
() => productNamesByOrigin(catalog.products),
|
|
4541
|
+
[catalog.products]
|
|
4542
|
+
);
|
|
3672
4543
|
React.useEffect(() => {
|
|
3673
4544
|
const el = textareaRef.current;
|
|
3674
4545
|
if (!el) return;
|
|
@@ -4029,16 +4900,17 @@ function ExplorePage({
|
|
|
4029
4900
|
),
|
|
4030
4901
|
style: rootStyle,
|
|
4031
4902
|
children: [
|
|
4032
|
-
|
|
4903
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4033
4904
|
PageHead,
|
|
4034
4905
|
{
|
|
4035
|
-
title: seo
|
|
4036
|
-
description: seo
|
|
4037
|
-
|
|
4038
|
-
|
|
4039
|
-
|
|
4906
|
+
title: seo?.title ?? T.seoTitle,
|
|
4907
|
+
description: seo?.description ?? (headProductName ? fill(T.seoDescriptionProduct, { product: headProductName }) : T.seoDescription),
|
|
4908
|
+
productName: seo?.title ? void 0 : headProductName ?? void 0,
|
|
4909
|
+
keywords: seo?.keywords,
|
|
4910
|
+
image: seo?.image,
|
|
4911
|
+
url: seo?.url
|
|
4040
4912
|
}
|
|
4041
|
-
)
|
|
4913
|
+
),
|
|
4042
4914
|
/* @__PURE__ */ jsxRuntime.jsx(ProseStyles, {}),
|
|
4043
4915
|
/* @__PURE__ */ jsxRuntime.jsx(ExploreStyles, {}),
|
|
4044
4916
|
!showWelcome ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2.5 border-b border-border px-4 py-2.5", children: [
|
|
@@ -4199,6 +5071,7 @@ function ExplorePage({
|
|
|
4199
5071
|
body: resolvedBody,
|
|
4200
5072
|
prompts,
|
|
4201
5073
|
products: catalog.products,
|
|
5074
|
+
conceptHighlights: catalog.conceptHighlights,
|
|
4202
5075
|
focusProduct,
|
|
4203
5076
|
onPrompt: sendPrompt,
|
|
4204
5077
|
onFocus: setFocusProduct,
|
|
@@ -4212,10 +5085,12 @@ function ExplorePage({
|
|
|
4212
5085
|
message,
|
|
4213
5086
|
activity,
|
|
4214
5087
|
imageOrigins,
|
|
5088
|
+
productNames,
|
|
4215
5089
|
onNavigate,
|
|
4216
5090
|
anchorRef: message.id === latestAssistantId ? latestAssistantRef : void 0,
|
|
4217
5091
|
onFollow: (kind, url) => recordClick(message.id, kind, url),
|
|
4218
|
-
onFollowUp: sendPrompt
|
|
5092
|
+
onFollowUp: sendPrompt,
|
|
5093
|
+
onFeedback: isSharedView ? void 0 : (rating, detail) => submitFeedback(message.id, rating, detail)
|
|
4219
5094
|
},
|
|
4220
5095
|
message.id
|
|
4221
5096
|
)
|
|
@@ -4514,8 +5389,12 @@ function ExplorePage({
|
|
|
4514
5389
|
}
|
|
4515
5390
|
|
|
4516
5391
|
exports.ExplorePage = ExplorePage;
|
|
5392
|
+
exports.answerPlainText = answerPlainText;
|
|
4517
5393
|
exports.inlineImageOrigins = inlineImageOrigins;
|
|
4518
5394
|
exports.isInlineImageAllowed = isInlineImageAllowed;
|
|
4519
5395
|
exports.logoUrlOf = logoUrlOf;
|
|
5396
|
+
exports.productNamesByOrigin = productNamesByOrigin;
|
|
5397
|
+
exports.referenceKindOf = referenceKindOf;
|
|
5398
|
+
exports.summariseReferences = summariseReferences;
|
|
4520
5399
|
//# sourceMappingURL=explore.js.map
|
|
4521
5400
|
//# sourceMappingURL=explore.js.map
|