@burdenoff/website-sdk 2026.922.3 → 2026.922.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { createContext, useMemo, useContext, useState, useCallback, useLayoutEffect, useRef, useEffect, useId, version } from 'react';
3
3
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
- import { Instagram, Youtube, Facebook, Github, Linkedin, Twitter, Mail, Phone, MapPin, Clock, Send, CheckCircle, Upload, Globe, ChevronDown, Search, Rocket, ArrowRight, Download, ImageIcon, ChevronRight, Maximize2, Check, ArrowLeft, Sparkles, RotateCcw, Link2, History, Trash2, Paperclip, X, Mic, Square, ArrowUp, Info, ChevronLeft, BookOpenText, Layers, TriangleAlert, FileText, ExternalLink, ThumbsUp, ThumbsDown } from 'lucide-react';
4
+ import { Instagram, Youtube, Facebook, Github, Linkedin, Twitter, Mail, Phone, MapPin, Clock, Send, CheckCircle, Upload, Globe, ChevronDown, Search, Rocket, ArrowRight, Download, ImageIcon, ChevronRight, Maximize2, Check, ArrowLeft, Sparkles, RotateCcw, Link2, History, Trash2, Paperclip, X, Mic, Square, ArrowUp, Info, ChevronLeft, BookOpenText, Layers, TriangleAlert, FileText, ExternalLink, Copy, ThumbsUp, ThumbsDown } from 'lucide-react';
5
5
  import ReCAPTCHA4 from 'react-google-recaptcha';
6
6
  import { toast } from 'sonner';
7
7
  import { Helmet } from 'react-helmet-async';
@@ -5974,6 +5974,20 @@ var EN = {
5974
5974
  nextSuggestion: "Next suggestion",
5975
5975
  conceptIllustration: "Concept illustration",
5976
5976
  opensInNewTab: "opens in a new tab",
5977
+ conceptStripTitle: "Or start from a concept",
5978
+ conceptStripLabel: "Concepts you can ask about",
5979
+ conceptAsk: "Ask about {title} in {product}",
5980
+ conceptAskQuestion: "How does {title} work in {product}?",
5981
+ copyAnswer: "Copy answer",
5982
+ copyFailed: "Couldn't copy",
5983
+ groundedIn: "What this answer is based on",
5984
+ sourceCountOne: "1 source",
5985
+ sourceCountMany: "{count} sources",
5986
+ sourceKindConcept: "Concept",
5987
+ sourceKindDocs: "Documentation",
5988
+ sourceKindPricing: "Pricing",
5989
+ sourceKindUseCase: "Use case",
5990
+ sourceKindPage: "Product page",
5977
5991
  seoTitle: "Describe a problem, get an answer",
5978
5992
  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.",
5979
5993
  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.",
@@ -6042,6 +6056,20 @@ var ZH = {
6042
6056
  nextSuggestion: "\u4E0B\u4E00\u4E2A\u5EFA\u8BAE",
6043
6057
  conceptIllustration: "\u6982\u5FF5\u793A\u610F\u56FE",
6044
6058
  opensInNewTab: "\u5728\u65B0\u6807\u7B7E\u9875\u4E2D\u6253\u5F00",
6059
+ conceptStripTitle: "\u6216\u8005\u4ECE\u4E00\u4E2A\u6982\u5FF5\u5F00\u59CB",
6060
+ conceptStripLabel: "\u4F60\u53EF\u4EE5\u8BE2\u95EE\u7684\u6982\u5FF5",
6061
+ conceptAsk: "\u8BE2\u95EE {product} \u4E2D\u7684 {title}",
6062
+ conceptAskQuestion: "{product} \u7684 {title} \u662F\u600E\u4E48\u8FD0\u4F5C\u7684\uFF1F",
6063
+ copyAnswer: "\u590D\u5236\u56DE\u7B54",
6064
+ copyFailed: "\u590D\u5236\u5931\u8D25",
6065
+ groundedIn: "\u8FD9\u4E2A\u56DE\u7B54\u7684\u4F9D\u636E",
6066
+ sourceCountOne: "1 \u4E2A\u6765\u6E90",
6067
+ sourceCountMany: "{count} \u4E2A\u6765\u6E90",
6068
+ sourceKindConcept: "\u6982\u5FF5",
6069
+ sourceKindDocs: "\u6587\u6863",
6070
+ sourceKindPricing: "\u4EF7\u683C",
6071
+ sourceKindUseCase: "\u5E94\u7528\u573A\u666F",
6072
+ sourceKindPage: "\u4EA7\u54C1\u9875\u9762",
6045
6073
  seoTitle: "\u63CF\u8FF0\u95EE\u9898\uFF0C\u83B7\u5F97\u7B54\u6848",
6046
6074
  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",
6047
6075
  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",
@@ -6106,6 +6134,20 @@ var HI = {
6106
6134
  nextSuggestion: "\u0905\u0917\u0932\u093E \u0938\u0941\u091D\u093E\u0935",
6107
6135
  conceptIllustration: "\u0905\u0935\u0927\u093E\u0930\u0923\u093E \u091A\u093F\u0924\u094D\u0930\u0923",
6108
6136
  opensInNewTab: "\u0928\u090F \u091F\u0948\u092C \u092E\u0947\u0902 \u0916\u0941\u0932\u0924\u093E \u0939\u0948",
6137
+ conceptStripTitle: "\u092F\u093E \u0915\u093F\u0938\u0940 \u0905\u0935\u0927\u093E\u0930\u0923\u093E \u0938\u0947 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902",
6138
+ 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",
6139
+ conceptAsk: "{product} \u092E\u0947\u0902 {title} \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u092A\u0942\u091B\u0947\u0902",
6140
+ conceptAskQuestion: "{product} \u092E\u0947\u0902 {title} \u0915\u0948\u0938\u0947 \u0915\u093E\u092E \u0915\u0930\u0924\u093E \u0939\u0948?",
6141
+ copyAnswer: "\u0909\u0924\u094D\u0924\u0930 \u0915\u0949\u092A\u0940 \u0915\u0930\u0947\u0902",
6142
+ copyFailed: "\u0915\u0949\u092A\u0940 \u0928\u0939\u0940\u0902 \u0939\u094B \u0938\u0915\u093E",
6143
+ groundedIn: "\u092F\u0939 \u0909\u0924\u094D\u0924\u0930 \u0915\u093F\u0938 \u092A\u0930 \u0906\u0927\u093E\u0930\u093F\u0924 \u0939\u0948",
6144
+ sourceCountOne: "1 \u0938\u094D\u0930\u094B\u0924",
6145
+ sourceCountMany: "{count} \u0938\u094D\u0930\u094B\u0924",
6146
+ sourceKindConcept: "\u0905\u0935\u0927\u093E\u0930\u0923\u093E",
6147
+ sourceKindDocs: "\u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C",
6148
+ sourceKindPricing: "\u092E\u0942\u0932\u094D\u092F",
6149
+ sourceKindUseCase: "\u0909\u092A\u092F\u094B\u0917 \u0915\u093E \u0909\u0926\u093E\u0939\u0930\u0923",
6150
+ sourceKindPage: "\u0909\u0924\u094D\u092A\u093E\u0926 \u092A\u0947\u091C",
6109
6151
  seoTitle: "\u0938\u092E\u0938\u094D\u092F\u093E \u092C\u0924\u093E\u090F\u0902, \u091C\u0935\u093E\u092C \u092A\u093E\u090F\u0902",
6110
6152
  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",
6111
6153
  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",
@@ -6174,6 +6216,20 @@ var ES = {
6174
6216
  nextSuggestion: "Sugerencia siguiente",
6175
6217
  conceptIllustration: "Ilustraci\xF3n del concepto",
6176
6218
  opensInNewTab: "se abre en una pesta\xF1a nueva",
6219
+ conceptStripTitle: "O empieza por un concepto",
6220
+ conceptStripLabel: "Conceptos sobre los que puedes preguntar",
6221
+ conceptAsk: "Preguntar por {title} en {product}",
6222
+ conceptAskQuestion: "\xBFC\xF3mo funciona {title} en {product}?",
6223
+ copyAnswer: "Copiar respuesta",
6224
+ copyFailed: "No se pudo copiar",
6225
+ groundedIn: "En qu\xE9 se basa esta respuesta",
6226
+ sourceCountOne: "1 fuente",
6227
+ sourceCountMany: "{count} fuentes",
6228
+ sourceKindConcept: "Concepto",
6229
+ sourceKindDocs: "Documentaci\xF3n",
6230
+ sourceKindPricing: "Precios",
6231
+ sourceKindUseCase: "Caso de uso",
6232
+ sourceKindPage: "P\xE1gina de producto",
6177
6233
  seoTitle: "Describe un problema y obt\xE9n una respuesta",
6178
6234
  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.",
6179
6235
  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.",
@@ -6242,6 +6298,20 @@ var AR = {
6242
6298
  nextSuggestion: "\u0627\u0644\u0627\u0642\u062A\u0631\u0627\u062D \u0627\u0644\u062A\u0627\u0644\u064A",
6243
6299
  conceptIllustration: "\u0631\u0633\u0645 \u062A\u0648\u0636\u064A\u062D\u064A \u0644\u0644\u0645\u0641\u0647\u0648\u0645",
6244
6300
  opensInNewTab: "\u064A\u064F\u0641\u062A\u062D \u0641\u064A \u0639\u0644\u0627\u0645\u0629 \u062A\u0628\u0648\u064A\u0628 \u062C\u062F\u064A\u062F\u0629",
6301
+ conceptStripTitle: "\u0623\u0648 \u0627\u0628\u062F\u0623 \u0645\u0646 \u0645\u0641\u0647\u0648\u0645",
6302
+ conceptStripLabel: "\u0645\u0641\u0627\u0647\u064A\u0645 \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u0633\u0624\u0627\u0644 \u0639\u0646\u0647\u0627",
6303
+ conceptAsk: "\u0627\u0633\u0623\u0644 \u0639\u0646 {title} \u0641\u064A {product}",
6304
+ conceptAskQuestion: "\u0643\u064A\u0641 \u064A\u0639\u0645\u0644 {title} \u0641\u064A {product}\u061F",
6305
+ copyAnswer: "\u0646\u0633\u062E \u0627\u0644\u0625\u062C\u0627\u0628\u0629",
6306
+ copyFailed: "\u062A\u0639\u0630\u0651\u0631 \u0627\u0644\u0646\u0633\u062E",
6307
+ groundedIn: "\u0639\u0644\u0649 \u0645\u0627\u0630\u0627 \u062A\u0633\u062A\u0646\u062F \u0647\u0630\u0647 \u0627\u0644\u0625\u062C\u0627\u0628\u0629",
6308
+ sourceCountOne: "\u0645\u0635\u062F\u0631 \u0648\u0627\u062D\u062F",
6309
+ sourceCountMany: "{count} \u0645\u0635\u0627\u062F\u0631",
6310
+ sourceKindConcept: "\u0645\u0641\u0647\u0648\u0645",
6311
+ sourceKindDocs: "\u0627\u0644\u062A\u0648\u062B\u064A\u0642",
6312
+ sourceKindPricing: "\u0627\u0644\u0623\u0633\u0639\u0627\u0631",
6313
+ sourceKindUseCase: "\u062D\u0627\u0644\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645",
6314
+ sourceKindPage: "\u0635\u0641\u062D\u0629 \u0627\u0644\u0645\u0646\u062A\u062C",
6245
6315
  seoTitle: "\u0635\u0641 \u0645\u0634\u0643\u0644\u062A\u0643 \u0648\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 \u0625\u062C\u0627\u0628\u0629",
6246
6316
  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.",
6247
6317
  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.",
@@ -6310,6 +6380,20 @@ var TA = {
6310
6380
  nextSuggestion: "\u0B85\u0B9F\u0BC1\u0BA4\u0BCD\u0BA4 \u0BAA\u0BB0\u0BBF\u0BA8\u0BCD\u0BA4\u0BC1\u0BB0\u0BC8",
6311
6381
  conceptIllustration: "\u0B95\u0BB0\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1 \u0BB5\u0BBF\u0BB3\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BAE\u0BCD",
6312
6382
  opensInNewTab: "\u0BAA\u0BC1\u0BA4\u0BBF\u0BAF \u0BA4\u0BBE\u0BB5\u0BB2\u0BBF\u0BB2\u0BCD \u0BA4\u0BBF\u0BB1\u0B95\u0BCD\u0B95\u0BC1\u0BAE\u0BCD",
6383
+ 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",
6384
+ 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",
6385
+ conceptAsk: "{product} \u0B87\u0BB2\u0BCD {title} \u0BAA\u0BB1\u0BCD\u0BB1\u0BBF\u0B95\u0BCD \u0B95\u0BC7\u0BB3\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
6386
+ 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?",
6387
+ copyAnswer: "\u0BAA\u0BA4\u0BBF\u0BB2\u0BC8 \u0BA8\u0B95\u0BB2\u0BC6\u0B9F\u0BC1",
6388
+ copyFailed: "\u0BA8\u0B95\u0BB2\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95 \u0BAE\u0BC1\u0B9F\u0BBF\u0BAF\u0BB5\u0BBF\u0BB2\u0BCD\u0BB2\u0BC8",
6389
+ 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",
6390
+ sourceCountOne: "1 \u0BAE\u0BC2\u0BB2\u0BAE\u0BCD",
6391
+ sourceCountMany: "{count} \u0BAE\u0BC2\u0BB2\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
6392
+ sourceKindConcept: "\u0B95\u0BB0\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1",
6393
+ sourceKindDocs: "\u0B86\u0BB5\u0BA3\u0BAE\u0BCD",
6394
+ sourceKindPricing: "\u0BB5\u0BBF\u0BB2\u0BC8",
6395
+ sourceKindUseCase: "\u0BAA\u0BAF\u0BA9\u0BCD\u0BAA\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1 \u0BA8\u0BBF\u0BB2\u0BC8",
6396
+ sourceKindPage: "\u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\u0BAA\u0BCD \u0BAA\u0B95\u0BCD\u0B95\u0BAE\u0BCD",
6313
6397
  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",
6314
6398
  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.",
6315
6399
  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.",
@@ -6411,11 +6495,9 @@ var EXPLORE_OWN_MESSAGE_FIELDS = (
6411
6495
  }
6412
6496
  `
6413
6497
  );
6414
- var EXPLORE_CATALOG_QUERY = (
6498
+ var EXPLORE_CATALOG_ESTABLISHED_FIELDS = (
6415
6499
  /* GraphQL */
6416
6500
  `
6417
- query ExploreCatalog($productSlug: String) {
6418
- exploreCatalog(productSlug: $productSlug) {
6419
6501
  enabled
6420
6502
  products {
6421
6503
  slug
@@ -6433,11 +6515,35 @@ var EXPLORE_CATALOG_QUERY = (
6433
6515
  historyTurns
6434
6516
  }
6435
6517
  captchaRequired
6436
- recaptchaSiteKey
6518
+ recaptchaSiteKey`
6519
+ );
6520
+ var EXPLORE_CATALOG_HIGHLIGHT_FIELD = (
6521
+ /* GraphQL */
6522
+ `
6523
+ conceptHighlights {
6524
+ product
6525
+ productName
6526
+ title
6527
+ url
6528
+ imageUrl
6529
+ alt
6530
+ }`
6531
+ );
6532
+ function exploreCatalogDocument(extraFields) {
6533
+ return (
6534
+ /* GraphQL */
6535
+ `
6536
+ query ExploreCatalog($productSlug: String) {
6537
+ exploreCatalog(productSlug: $productSlug) {${EXPLORE_CATALOG_ESTABLISHED_FIELDS}${extraFields}
6437
6538
  }
6438
6539
  }
6439
6540
  `
6541
+ );
6542
+ }
6543
+ var EXPLORE_CATALOG_QUERY = exploreCatalogDocument(
6544
+ EXPLORE_CATALOG_HIGHLIGHT_FIELD
6440
6545
  );
6546
+ var EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS = exploreCatalogDocument("");
6441
6547
  var EXPLORE_MESSAGE_QUERY = (
6442
6548
  /* GraphQL */
6443
6549
  `
@@ -6978,7 +7084,12 @@ function buildFallbackCatalog(examplePrompts, welcome) {
6978
7084
  welcomeBody: welcome?.body ?? FALLBACK_WELCOME_BODY,
6979
7085
  limits: FALLBACK_EXPLORE_LIMITS,
6980
7086
  captchaRequired: false,
6981
- recaptchaSiteKey: null
7087
+ recaptchaSiteKey: null,
7088
+ // Empty, and deliberately not synthesised from `ECOSYSTEM_PRODUCTS`: a concept highlight
7089
+ // needs a real published illustration URL, and this SDK has no registry of them. An
7090
+ // invented path would render 38 broken frames on the one screen every prerender captures.
7091
+ // The strip renders nothing at all when the list is empty, which is the honest fallback.
7092
+ conceptHighlights: []
6982
7093
  };
6983
7094
  }
6984
7095
  function normalizeCatalog(raw, fallback) {
@@ -6995,9 +7106,27 @@ function normalizeCatalog(raw, fallback) {
6995
7106
  historyTurns: raw.limits?.historyTurns || fallback.limits.historyTurns
6996
7107
  },
6997
7108
  captchaRequired: raw.captchaRequired === true,
6998
- recaptchaSiteKey: raw.recaptchaSiteKey ?? null
7109
+ recaptchaSiteKey: raw.recaptchaSiteKey ?? null,
7110
+ // `[ExploreConceptHighlight!]!` on the wire, so a gateway that KNOWS the field always
7111
+ // sends an array. The one response that arrives without it is the retry against an older
7112
+ // supergraph (`EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS`) — that gateway does not answer
7113
+ // the full document at all, it refuses it. Either way
7114
+ // `catalog.conceptHighlights.filter(...)` on `undefined` would throw inside render,
7115
+ // blanking the welcome screen over a decorative strip.
7116
+ conceptHighlights: raw.conceptHighlights?.length ? raw.conceptHighlights : fallback.conceptHighlights
6999
7117
  };
7000
7118
  }
7119
+ var CATALOG_DOCUMENT_REJECTED_CODES = /* @__PURE__ */ new Set([
7120
+ "GRAPHQL_VALIDATION_FAILED",
7121
+ "HTTP_400"
7122
+ ]);
7123
+ function catalogRejectedTheHighlightField(res) {
7124
+ if (res.data?.exploreCatalog) return false;
7125
+ return (res.errors ?? []).some((error) => {
7126
+ const code = error.extensions?.code;
7127
+ return typeof code === "string" && CATALOG_DOCUMENT_REJECTED_CODES.has(code) || error.message.includes("conceptHighlights");
7128
+ });
7129
+ }
7001
7130
  var RATE_LIMIT_CODES = /* @__PURE__ */ new Set([
7002
7131
  "RATE_LIMITED",
7003
7132
  "HTTP_429",
@@ -7337,11 +7466,19 @@ function useExploreChat(options = {}) {
7337
7466
  useEffect(() => {
7338
7467
  let cancelled = false;
7339
7468
  const load = async () => {
7340
- const res = await client.query(
7469
+ const variables = { productSlug: productSlug ?? null };
7470
+ let res = await client.query(
7341
7471
  EXPLORE_CATALOG_QUERY,
7342
- { productSlug: productSlug ?? null }
7472
+ variables
7343
7473
  );
7344
7474
  if (cancelled || !mountedRef.current) return;
7475
+ if (catalogRejectedTheHighlightField(res)) {
7476
+ res = await client.query(
7477
+ EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS,
7478
+ variables
7479
+ );
7480
+ if (cancelled || !mountedRef.current) return;
7481
+ }
7345
7482
  const raw = res.data?.exploreCatalog;
7346
7483
  if (res.errors?.length || !raw) {
7347
7484
  console.warn(
@@ -8508,6 +8645,122 @@ function isInlineImageAllowed(src, origins) {
8508
8645
  if (url.protocol !== "https:" || url.username || url.password) return false;
8509
8646
  return origins.has(url.origin);
8510
8647
  }
8648
+ var REFERENCE_KIND_ORDER = [
8649
+ "CONCEPT",
8650
+ "DOCS",
8651
+ "PRICING",
8652
+ "USE_CASE",
8653
+ "PAGE"
8654
+ ];
8655
+ var PRODUCT_SUBDOMAINS = [
8656
+ "alphadocs.",
8657
+ "alphaapp.",
8658
+ "docs.",
8659
+ "alpha.",
8660
+ "app.",
8661
+ "www."
8662
+ ];
8663
+ function readCatalogUrl(raw) {
8664
+ let parsed;
8665
+ try {
8666
+ parsed = new URL(raw);
8667
+ } catch {
8668
+ return null;
8669
+ }
8670
+ if (parsed.protocol !== "https:") return null;
8671
+ const host = parsed.hostname.toLowerCase();
8672
+ const prefix = PRODUCT_SUBDOMAINS.find(
8673
+ (candidate) => host.startsWith(candidate)
8674
+ );
8675
+ const apex = prefix === void 0 ? host : host.slice(prefix.length);
8676
+ const port = parsed.port ? `:${parsed.port}` : "";
8677
+ return {
8678
+ origin: `https://${apex}${port}`,
8679
+ prefix,
8680
+ pathname: parsed.pathname
8681
+ };
8682
+ }
8683
+ function referenceKindOf(url, origins) {
8684
+ const parsed = readCatalogUrl(url);
8685
+ if (parsed === null || !origins.has(parsed.origin)) return null;
8686
+ if (parsed.prefix === "docs." || parsed.prefix === "alphadocs.")
8687
+ return "DOCS";
8688
+ const segment = parsed.pathname.toLowerCase().split("/").filter(Boolean)[0] ?? "";
8689
+ if (segment === "concept" || segment === "concepts") return "CONCEPT";
8690
+ if (segment === "docs") return "DOCS";
8691
+ if (segment === "pricing" || segment === "plans") return "PRICING";
8692
+ if (segment === "use-case" || segment === "use-cases" || segment === "solutions") {
8693
+ return "USE_CASE";
8694
+ }
8695
+ return "PAGE";
8696
+ }
8697
+ function productNamesByOrigin(products) {
8698
+ const names = /* @__PURE__ */ new Map();
8699
+ for (const product of products) {
8700
+ let url;
8701
+ try {
8702
+ url = new URL(product.website);
8703
+ } catch {
8704
+ continue;
8705
+ }
8706
+ if (url.protocol !== "https:") continue;
8707
+ const apex = url.hostname.replace(/^www\./, "");
8708
+ const port = url.port ? `:${url.port}` : "";
8709
+ const key = `https://${apex}${port}`;
8710
+ if (!names.has(key)) names.set(key, product.name);
8711
+ }
8712
+ return names;
8713
+ }
8714
+ function summariseReferences(references, origins, productNames) {
8715
+ const counts = /* @__PURE__ */ new Map();
8716
+ const products = [];
8717
+ for (const reference of references) {
8718
+ const kind = referenceKindOf(reference.url, origins);
8719
+ if (kind !== null) counts.set(kind, (counts.get(kind) ?? 0) + 1);
8720
+ const parsed = readCatalogUrl(reference.url);
8721
+ const name = (parsed === null ? void 0 : productNames.get(parsed.origin)) ?? (reference.product || null);
8722
+ if (name != null && !products.includes(name)) products.push(name);
8723
+ }
8724
+ return {
8725
+ total: references.length,
8726
+ kinds: REFERENCE_KIND_ORDER.filter((kind) => counts.has(kind)).map(
8727
+ (kind) => ({ kind, count: counts.get(kind) ?? 0 })
8728
+ ),
8729
+ products
8730
+ };
8731
+ }
8732
+ var CODE_FENCE = /^\s*(?:```|~~~)/;
8733
+ function answerPlainText(markdown) {
8734
+ const lines = [];
8735
+ let inFence = false;
8736
+ for (const raw of markdown.split("\n")) {
8737
+ if (CODE_FENCE.test(raw)) {
8738
+ inFence = !inFence;
8739
+ continue;
8740
+ }
8741
+ if (inFence) {
8742
+ lines.push(raw);
8743
+ continue;
8744
+ }
8745
+ let line = raw;
8746
+ line = line.replace(/!\[[^\]]*\]\([^)\s]*(?:\s+"[^"]*")?\)/g, "");
8747
+ line = line.replace(/\[([^\]]+)\]\(([^)\s]+)(?:\s+"[^"]*")?\)/g, "$1 ($2)");
8748
+ line = line.replace(/<(https?:\/\/[^>\s]+)>/g, "$1");
8749
+ line = line.replace(/^\s{0,3}#{1,6}\s+/, "");
8750
+ line = line.replace(/^\s{0,3}>\s?/, "");
8751
+ if (/^\s{0,3}([-*_])[ \t]*(?:\1[ \t]*){2,}$/.test(line)) {
8752
+ lines.push("");
8753
+ continue;
8754
+ }
8755
+ line = line.replace(/`([^`]+)`/g, "$1");
8756
+ line = line.replace(/\*\*([^*]+)\*\*/g, "$1");
8757
+ line = line.replace(/__([^_]+)__/g, "$1");
8758
+ line = line.replace(/(^|[^*\w])\*([^*\n]+)\*(?![*\w])/g, "$1$2");
8759
+ line = line.replace(/(^|[^_\w])_([^_\n]+)_(?![_\w])/g, "$1$2");
8760
+ lines.push(line.replace(/[ \t]+$/, ""));
8761
+ }
8762
+ return lines.join("\n").replace(/\n{3,}/g, "\n\n").trim();
8763
+ }
8511
8764
  var InlineImageScopeContext = createContext(null);
8512
8765
  var InsideLinkContext = createContext(false);
8513
8766
  function AnswerLink(props) {
@@ -8905,6 +9158,115 @@ function AnswerFeedback({
8905
9158
  }
8906
9159
  );
8907
9160
  }
9161
+ 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";
9162
+ function ProvenanceChips({
9163
+ strings: T,
9164
+ provenance
9165
+ }) {
9166
+ if (provenance.total === 0) return null;
9167
+ const kindLabels = {
9168
+ CONCEPT: T.sourceKindConcept,
9169
+ DOCS: T.sourceKindDocs,
9170
+ PRICING: T.sourceKindPricing,
9171
+ USE_CASE: T.sourceKindUseCase,
9172
+ PAGE: T.sourceKindPage
9173
+ };
9174
+ return /* @__PURE__ */ jsxs(
9175
+ "ul",
9176
+ {
9177
+ "data-boff-explore": "provenance",
9178
+ "aria-label": T.groundedIn,
9179
+ className: "flex flex-wrap items-center gap-1.5",
9180
+ children: [
9181
+ /* @__PURE__ */ jsxs("li", { "data-boff-explore": "provenance-count", className: PROVENANCE_CHIP, children: [
9182
+ /* @__PURE__ */ jsx(BookOpenText, { className: "h-3 w-3 shrink-0", "aria-hidden": "true" }),
9183
+ /* @__PURE__ */ jsx("span", { className: "truncate", children: provenance.total === 1 ? T.sourceCountOne : fill(T.sourceCountMany, { count: String(provenance.total) }) })
9184
+ ] }),
9185
+ provenance.kinds.map(({ kind, count }) => /* @__PURE__ */ jsx(
9186
+ "li",
9187
+ {
9188
+ "data-boff-explore": "provenance-kind",
9189
+ "data-kind": kind,
9190
+ "data-count": count,
9191
+ className: PROVENANCE_CHIP,
9192
+ children: /* @__PURE__ */ jsx("span", { className: "truncate", children: count > 1 ? `${kindLabels[kind]} \xB7 ${count}` : kindLabels[kind] })
9193
+ },
9194
+ kind
9195
+ )),
9196
+ provenance.products.map((name) => /* @__PURE__ */ jsx(
9197
+ "li",
9198
+ {
9199
+ "data-boff-explore": "provenance-product",
9200
+ className: PROVENANCE_CHIP,
9201
+ children: /* @__PURE__ */ jsx("span", { className: "truncate", children: name })
9202
+ },
9203
+ name
9204
+ ))
9205
+ ]
9206
+ }
9207
+ );
9208
+ }
9209
+ var COPY_FEEDBACK_MS = 2500;
9210
+ function AnswerActions({
9211
+ strings: T,
9212
+ text
9213
+ }) {
9214
+ const [outcome, setOutcome] = useState("idle");
9215
+ const resetRef = useRef(null);
9216
+ useEffect(
9217
+ () => () => {
9218
+ if (resetRef.current !== null) clearTimeout(resetRef.current);
9219
+ },
9220
+ []
9221
+ );
9222
+ const copy = useCallback(async () => {
9223
+ let copied = false;
9224
+ try {
9225
+ const clipboard = typeof navigator === "undefined" ? void 0 : navigator.clipboard;
9226
+ if (typeof clipboard?.writeText === "function") {
9227
+ await clipboard.writeText(text);
9228
+ copied = true;
9229
+ }
9230
+ } catch {
9231
+ copied = false;
9232
+ }
9233
+ setOutcome(copied ? "copied" : "failed");
9234
+ if (resetRef.current !== null) clearTimeout(resetRef.current);
9235
+ resetRef.current = setTimeout(() => setOutcome("idle"), COPY_FEEDBACK_MS);
9236
+ }, [text]);
9237
+ const label = outcome === "copied" ? T.copied : outcome === "failed" ? T.copyFailed : T.copyAnswer;
9238
+ return /* @__PURE__ */ jsxs(
9239
+ "div",
9240
+ {
9241
+ "data-boff-explore": "answer-actions",
9242
+ className: "flex flex-wrap items-center gap-2 pt-0.5",
9243
+ children: [
9244
+ /* @__PURE__ */ jsxs(
9245
+ "button",
9246
+ {
9247
+ "data-boff-explore": "copy-answer",
9248
+ "data-outcome": outcome,
9249
+ type: "button",
9250
+ title: label,
9251
+ onClick: () => {
9252
+ void copy();
9253
+ },
9254
+ className: cn(
9255
+ "inline-flex max-w-full items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs transition-colors",
9256
+ "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
9257
+ 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"
9258
+ ),
9259
+ children: [
9260
+ outcome === "copied" ? /* @__PURE__ */ jsx(Check, { className: "h-3 w-3 shrink-0", "aria-hidden": "true" }) : /* @__PURE__ */ jsx(Copy, { className: "h-3 w-3 shrink-0", "aria-hidden": "true" }),
9261
+ /* @__PURE__ */ jsx("span", { className: "truncate", children: label })
9262
+ ]
9263
+ }
9264
+ ),
9265
+ /* @__PURE__ */ jsx("span", { "data-boff-explore": "copy-status", role: "status", className: "sr-only", children: outcome === "idle" ? "" : label })
9266
+ ]
9267
+ }
9268
+ );
9269
+ }
8908
9270
  function UserBubble({
8909
9271
  strings: T,
8910
9272
  message
@@ -8950,6 +9312,7 @@ function AssistantBubble({
8950
9312
  message,
8951
9313
  activity,
8952
9314
  imageOrigins,
9315
+ productNames,
8953
9316
  onNavigate,
8954
9317
  anchorRef,
8955
9318
  onFollow,
@@ -8978,6 +9341,15 @@ function AssistantBubble({
8978
9341
  }),
8979
9342
  [T, completed, imageOrigins, failedImages, markImageFailed]
8980
9343
  );
9344
+ const provenance = useMemo(
9345
+ () => summariseReferences(message.references, imageOrigins, productNames),
9346
+ [message.references, imageOrigins, productNames]
9347
+ );
9348
+ const copyText = useMemo(
9349
+ () => answerPlainText(message.content),
9350
+ [message.content]
9351
+ );
9352
+ const grounded = completed && message.answered !== false;
8981
9353
  return /* @__PURE__ */ jsxs(
8982
9354
  "div",
8983
9355
  {
@@ -9027,6 +9399,7 @@ function AssistantBubble({
9027
9399
  /* @__PURE__ */ jsx("div", { className: "boff-prose boff-prose-sm boff-explore-body min-w-0 text-card-foreground", children: /* @__PURE__ */ jsx(InlineImageScopeContext.Provider, { value: imageScope, children: /* @__PURE__ */ jsx(Markdown, { components: ANSWER_MARKDOWN_COMPONENTS, children: body }) }) }),
9028
9400
  streaming ? /* @__PURE__ */ jsx("span", { className: "boff-explore-caret", "aria-hidden": "true" }) : null
9029
9401
  ] }) : null,
9402
+ grounded && provenance.total > 0 ? /* @__PURE__ */ jsx(ProvenanceChips, { strings: T, provenance }) : null,
9030
9403
  streaming ? /* @__PURE__ */ jsx(ThinkingIndicator, { activity }) : null,
9031
9404
  failed && !body ? /* @__PURE__ */ 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,
9032
9405
  message.references.length > 0 ? /* @__PURE__ */ jsxs("div", { children: [
@@ -9066,6 +9439,7 @@ function AssistantBubble({
9066
9439
  question
9067
9440
  )) })
9068
9441
  ] }) : null,
9442
+ completed && copyText !== "" ? /* @__PURE__ */ jsx(AnswerActions, { strings: T, text: copyText }) : null,
9069
9443
  completed && onFeedback ? /* @__PURE__ */ jsx(
9070
9444
  AnswerFeedback,
9071
9445
  {
@@ -9278,6 +9652,96 @@ function ProductStrip({
9278
9652
  }
9279
9653
  );
9280
9654
  }
9655
+ var MAX_CONCEPT_CARDS = 6;
9656
+ function ConceptStrip({
9657
+ strings: T,
9658
+ highlights,
9659
+ onAsk,
9660
+ disabled
9661
+ }) {
9662
+ const [failed, setFailed] = useState(() => /* @__PURE__ */ new Set());
9663
+ const markFailed = useCallback((src) => {
9664
+ setFailed(
9665
+ (current) => current.has(src) ? current : new Set(current).add(src)
9666
+ );
9667
+ }, []);
9668
+ const visible = highlights.filter(
9669
+ (highlight) => highlight.imageUrl !== "" && !failed.has(highlight.imageUrl)
9670
+ ).slice(0, MAX_CONCEPT_CARDS);
9671
+ if (visible.length === 0) return null;
9672
+ return /* @__PURE__ */ jsxs(
9673
+ "div",
9674
+ {
9675
+ "data-boff-explore": "concept-strip-block",
9676
+ className: "boff-explore-rise boff-explore-rise-3 mt-6",
9677
+ children: [
9678
+ /* @__PURE__ */ jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.conceptStripTitle }),
9679
+ /* @__PURE__ */ jsx(
9680
+ "ul",
9681
+ {
9682
+ "data-boff-explore": "concept-strip",
9683
+ "aria-label": T.conceptStripLabel,
9684
+ className: "boff-explore-strip flex min-w-0 snap-x gap-3 overflow-x-auto pb-1",
9685
+ children: visible.map((highlight) => /* @__PURE__ */ jsx(
9686
+ "li",
9687
+ {
9688
+ className: "shrink-0 snap-start",
9689
+ children: /* @__PURE__ */ jsxs(
9690
+ "button",
9691
+ {
9692
+ "data-boff-explore": "concept-card",
9693
+ "data-product": highlight.product,
9694
+ type: "button",
9695
+ disabled,
9696
+ "aria-label": fill(T.conceptAsk, {
9697
+ title: highlight.title,
9698
+ product: highlight.productName
9699
+ }),
9700
+ onClick: () => onAsk(
9701
+ fill(T.conceptAskQuestion, {
9702
+ title: highlight.title,
9703
+ product: highlight.productName
9704
+ })
9705
+ ),
9706
+ 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",
9707
+ children: [
9708
+ /* @__PURE__ */ jsxs("span", { className: "relative block aspect-[16/9] w-full overflow-hidden bg-muted", children: [
9709
+ /* @__PURE__ */ jsx(
9710
+ "img",
9711
+ {
9712
+ src: highlight.imageUrl,
9713
+ alt: highlight.alt,
9714
+ loading: "lazy",
9715
+ decoding: "async",
9716
+ onError: () => markFailed(highlight.imageUrl),
9717
+ className: "h-full w-full object-cover transition-transform duration-300 group-hover:scale-105"
9718
+ }
9719
+ ),
9720
+ /* @__PURE__ */ jsx(
9721
+ "span",
9722
+ {
9723
+ "aria-hidden": "true",
9724
+ 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",
9725
+ children: T.conceptIllustration
9726
+ }
9727
+ )
9728
+ ] }),
9729
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-col gap-0.5 p-2.5", children: [
9730
+ /* @__PURE__ */ jsx("span", { className: "line-clamp-2 text-xs font-semibold leading-snug text-card-foreground", children: highlight.title }),
9731
+ /* @__PURE__ */ jsx("span", { className: "truncate text-[11px] text-muted-foreground", children: highlight.productName })
9732
+ ] })
9733
+ ]
9734
+ }
9735
+ )
9736
+ },
9737
+ `${highlight.product}:${highlight.url}`
9738
+ ))
9739
+ }
9740
+ )
9741
+ ]
9742
+ }
9743
+ );
9744
+ }
9281
9745
  function DisclaimerDialog({
9282
9746
  open,
9283
9747
  onClose,
@@ -9384,6 +9848,7 @@ function WelcomeState({
9384
9848
  body,
9385
9849
  prompts,
9386
9850
  products,
9851
+ conceptHighlights,
9387
9852
  focusProduct,
9388
9853
  onPrompt,
9389
9854
  onFocus,
@@ -9422,6 +9887,15 @@ function WelcomeState({
9422
9887
  }
9423
9888
  )
9424
9889
  ] }) : null,
9890
+ /* @__PURE__ */ jsx(
9891
+ ConceptStrip,
9892
+ {
9893
+ strings: T,
9894
+ highlights: conceptHighlights,
9895
+ onAsk: onPrompt,
9896
+ disabled
9897
+ }
9898
+ ),
9425
9899
  products.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "boff-explore-rise boff-explore-rise-3 mt-6", children: [
9426
9900
  /* @__PURE__ */ jsx("p", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: T.focusProduct }),
9427
9901
  /* @__PURE__ */ jsx(
@@ -9543,6 +10017,10 @@ function ExplorePage({
9543
10017
  () => inlineImageOrigins(catalog.products),
9544
10018
  [catalog.products]
9545
10019
  );
10020
+ const productNames = useMemo(
10021
+ () => productNamesByOrigin(catalog.products),
10022
+ [catalog.products]
10023
+ );
9546
10024
  useEffect(() => {
9547
10025
  const el = textareaRef.current;
9548
10026
  if (!el) return;
@@ -10074,6 +10552,7 @@ function ExplorePage({
10074
10552
  body: resolvedBody,
10075
10553
  prompts,
10076
10554
  products: catalog.products,
10555
+ conceptHighlights: catalog.conceptHighlights,
10077
10556
  focusProduct,
10078
10557
  onPrompt: sendPrompt,
10079
10558
  onFocus: setFocusProduct,
@@ -10087,6 +10566,7 @@ function ExplorePage({
10087
10566
  message,
10088
10567
  activity,
10089
10568
  imageOrigins,
10569
+ productNames,
10090
10570
  onNavigate,
10091
10571
  anchorRef: message.id === latestAssistantId ? latestAssistantRef : void 0,
10092
10572
  onFollow: (kind, url) => recordClick(message.id, kind, url),
@@ -15048,6 +15528,6 @@ function StoreProductDetailPage({
15048
15528
  ] });
15049
15529
  }
15050
15530
 
15051
- export { BlogListPage, BlogPostPage, Button, CONCEPTS_PATH, CONCEPT_ILLUSTRATION_NOTICE, CONCEPT_PATH_PREFIX, CareersApplyForm, CareersSubmissionForm, CaseStudiesListPage, CaseStudyPage, ChangelogPage, ConceptDetailPage, ConceptsPage, ContactPage, ContentRenderer, ContractsPage, DEFAULT_CONTACT_CATEGORIES, DEFAULT_EXPLORE_EXAMPLE_PROMPTS, ECOSYSTEM_PRODUCTS, EXPLORE_CATALOG_QUERY, EXPLORE_LOCALES, EXPLORE_MESSAGE_QUERY, EXPLORE_RECAPTCHA_ACTION, ElectronDownloadLink, ExploreCta, ExplorePage, FALLBACK_EXPLORE_LIMITS, Input, Label, LaunchCountdown, Markdown, NewsletterForm, NewsletterPage, PageHead, PartnersPage, PressKitPage, PricingPage, PricingSection, ProblemsSolvedSection, ProductCard, ProductProvider, ResourceLinks, RybbitAnalytics, SEND_EXPLORE_MESSAGE_MUTATION, Select, SocialLinks, StarRating, StoreBrowsePage, StoreHomePage, StoreProductDetailPage, Textarea, TypeBadge, UnsubscribePage, WaitlistForm, WaitlistPage, WebSDKClient, WebSDKProvider, WebsiteSwitcher, buttonVariants, classifyExploreError, cn, conceptPath, detectElectronPlatform, fetchPublicJobPosting, fetchPublicJobPostings, fetchPublicJobPostingsForSubmission, formatDownloads, formatPrice2 as formatPrice, getConceptBySlug, getRecaptchaV3Token, isValidUrl, loadRecaptchaV3, useContentPage, useContentPages, useExploreChat, useProduct, useProductConfig, usePublicJobPosting, usePublicJobPostings, usePublicJobPostingsForSubmission, useWebSDK, useWebSDKConfig };
15531
+ export { BlogListPage, BlogPostPage, Button, CONCEPTS_PATH, CONCEPT_ILLUSTRATION_NOTICE, CONCEPT_PATH_PREFIX, CareersApplyForm, CareersSubmissionForm, CaseStudiesListPage, CaseStudyPage, ChangelogPage, ConceptDetailPage, ConceptsPage, ContactPage, ContentRenderer, ContractsPage, DEFAULT_CONTACT_CATEGORIES, DEFAULT_EXPLORE_EXAMPLE_PROMPTS, ECOSYSTEM_PRODUCTS, EXPLORE_CATALOG_QUERY, EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS, EXPLORE_LOCALES, EXPLORE_MESSAGE_QUERY, EXPLORE_RECAPTCHA_ACTION, ElectronDownloadLink, ExploreCta, ExplorePage, FALLBACK_EXPLORE_LIMITS, Input, Label, LaunchCountdown, Markdown, NewsletterForm, NewsletterPage, PageHead, PartnersPage, PressKitPage, PricingPage, PricingSection, ProblemsSolvedSection, ProductCard, ProductProvider, ResourceLinks, RybbitAnalytics, SEND_EXPLORE_MESSAGE_MUTATION, Select, SocialLinks, StarRating, StoreBrowsePage, StoreHomePage, StoreProductDetailPage, Textarea, TypeBadge, UnsubscribePage, WaitlistForm, WaitlistPage, WebSDKClient, WebSDKProvider, WebsiteSwitcher, buttonVariants, classifyExploreError, cn, conceptPath, detectElectronPlatform, fetchPublicJobPosting, fetchPublicJobPostings, fetchPublicJobPostingsForSubmission, formatDownloads, formatPrice2 as formatPrice, getConceptBySlug, getRecaptchaV3Token, isValidUrl, loadRecaptchaV3, useContentPage, useContentPages, useExploreChat, useProduct, useProductConfig, usePublicJobPosting, usePublicJobPostings, usePublicJobPostingsForSubmission, useWebSDK, useWebSDKConfig };
15052
15532
  //# sourceMappingURL=index.mjs.map
15053
15533
  //# sourceMappingURL=index.mjs.map