@burdenoff/website-sdk 2026.1024.1 → 2026.1027.1
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/README.md +77 -1
- package/dist/components/explore-cta.d.mts +10 -1
- package/dist/components/explore-cta.d.ts +10 -1
- package/dist/components/explore-cta.js +82 -74
- package/dist/components/explore-cta.js.map +1 -1
- package/dist/components/explore-cta.mjs +83 -75
- package/dist/components/explore-cta.mjs.map +1 -1
- package/dist/components/explore.d.mts +2 -2
- package/dist/components/explore.d.ts +2 -2
- package/dist/components/explore.js +876 -510
- package/dist/components/explore.js.map +1 -1
- package/dist/components/explore.mjs +877 -511
- package/dist/components/explore.mjs.map +1 -1
- package/dist/{explore-POqE7J8r.d.mts → explore-BEgq1_0O.d.mts} +65 -3
- package/dist/{explore-D6kon7uz.d.ts → explore-CHiP9u-4.d.ts} +65 -3
- package/dist/{explore-types-BB8HNFzX.d.mts → explore-types-_9UJu6EA.d.mts} +1 -1
- package/dist/{explore-types-BB8HNFzX.d.ts → explore-types-_9UJu6EA.d.ts} +1 -1
- package/dist/hooks/index.d.mts +2 -2
- package/dist/hooks/index.d.ts +2 -2
- package/dist/hooks/index.js +15 -9
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +15 -9
- package/dist/hooks/index.mjs.map +1 -1
- package/dist/index.d.mts +177 -6
- package/dist/index.d.ts +177 -6
- package/dist/index.js +1236 -152
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1236 -155
- package/dist/index.mjs.map +1 -1
- package/dist/{use-progressive-reveal-Kr6DwGXG.d.mts → use-progressive-reveal-BFPWbEXy.d.mts} +25 -2
- package/dist/{use-progressive-reveal-BVJn9NIr.d.ts → use-progressive-reveal-C0hkdu_i.d.ts} +25 -2
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { createContext, useMemo, useContext,
|
|
2
|
+
import { createContext, forwardRef, useState, useEffect, useMemo, useContext, useCallback, useLayoutEffect, useRef, useId, version, Children, isValidElement, cloneElement } 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,
|
|
4
|
+
import { Instagram, Youtube, Facebook, Github, Linkedin, Twitter, Sparkles, Mail, Phone, MapPin, Clock, Send, CheckCircle, Upload, Globe, ChevronDown, Search, Rocket, ArrowRight, Download, ImageIcon, ChevronRight, Maximize2, Check, ArrowLeft, RotateCcw, Link2, History, Trash2, Paperclip, X, Mic, Square, ArrowUp, Minimize2, Info, ExternalLink, ChevronLeft, BookOpenText, Layers, TriangleAlert, FileText, Film, Play, Copy, ThumbsUp, ThumbsDown, Minimize, Maximize, VideoOff, Volume2 } 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';
|
|
@@ -6444,10 +6444,26 @@ var RTL_LOCALES = /* @__PURE__ */ new Set(["ar"]);
|
|
|
6444
6444
|
function isRtlLocale(locale) {
|
|
6445
6445
|
return RTL_LOCALES.has(locale);
|
|
6446
6446
|
}
|
|
6447
|
+
var PORTFOLIO_PROMPT = {
|
|
6448
|
+
en: "Which of your products fits a problem like mine?",
|
|
6449
|
+
zh: "\u54EA\u4E2A\u4EA7\u54C1\u9002\u5408\u6211\u8FD9\u6837\u7684\u95EE\u9898\uFF1F",
|
|
6450
|
+
hi: "\u092E\u0947\u0930\u0940 \u091C\u0948\u0938\u0940 \u0938\u092E\u0938\u094D\u092F\u093E \u0915\u0947 \u0932\u093F\u090F \u0915\u094C\u0928 \u0938\u093E \u0909\u0924\u094D\u092A\u093E\u0926 \u0938\u0939\u0940 \u0939\u0948?",
|
|
6451
|
+
es: "\xBFQu\xE9 producto encaja con un problema como el m\xEDo?",
|
|
6452
|
+
ar: "\u0623\u064A \u0645\u0646\u062A\u062C \u064A\u0646\u0627\u0633\u0628 \u0645\u0634\u0643\u0644\u0629 \u0645\u062B\u0644 \u0645\u0634\u0643\u0644\u062A\u064A\u061F",
|
|
6453
|
+
ta: "\u0B8E\u0BA9\u0BCD \u0BAA\u0BBF\u0BB0\u0B9A\u0BCD\u0B9A\u0BBF\u0BA9\u0BC8\u0B95\u0BCD\u0B95\u0BC1 \u0B8E\u0BA8\u0BCD\u0BA4\u0BA4\u0BCD \u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1 \u0BAA\u0BCA\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4\u0BC1\u0BAE\u0BCD?"
|
|
6454
|
+
};
|
|
6455
|
+
var PORTFOLIO_PROMPTS = new Set(
|
|
6456
|
+
Object.values(PORTFOLIO_PROMPT)
|
|
6457
|
+
);
|
|
6458
|
+
function isPortfolioPrompt(prompt) {
|
|
6459
|
+
return PORTFOLIO_PROMPTS.has(prompt);
|
|
6460
|
+
}
|
|
6447
6461
|
var EN = {
|
|
6448
6462
|
badge: "AI answers, grounded in our documentation",
|
|
6449
6463
|
welcomeTitle: "What problem are you trying to solve?",
|
|
6450
6464
|
welcomeBody: "Describe the problem, in your own words. You can also ask about a specific product or compare a few. Every answer comes straight from our documentation.",
|
|
6465
|
+
welcomeBodyProduct: "Describe the problem in your own words, or ask what {product} does. Every answer comes straight from our documentation.",
|
|
6466
|
+
welcomeBodyScoped: "Describe the problem in your own words. Every answer comes straight from our documentation.",
|
|
6451
6467
|
tryAsking: "Try asking",
|
|
6452
6468
|
focusProduct: "Focus on a product",
|
|
6453
6469
|
allProducts: "All products",
|
|
@@ -6457,6 +6473,7 @@ var EN = {
|
|
|
6457
6473
|
nextYouCouldAsk: "Next you could ask",
|
|
6458
6474
|
placeholder: "Describe the problem\u2026",
|
|
6459
6475
|
placeholderProduct: "Describe a problem, or ask about {product}\u2026",
|
|
6476
|
+
placeholderScoped: "Ask about {product}\u2026",
|
|
6460
6477
|
send: "Send",
|
|
6461
6478
|
stop: "Stop",
|
|
6462
6479
|
newChat: "New chat",
|
|
@@ -6478,6 +6495,7 @@ var EN = {
|
|
|
6478
6495
|
attachmentTooMany: "Only {{max}} files can be attached, so {{name}} was skipped.",
|
|
6479
6496
|
noAnswer: "I couldn't find this in our documentation, so the answer below is not grounded in a source. Try rephrasing, or",
|
|
6480
6497
|
answerDidNotArrive: "That answer didn't come through. Try asking again.",
|
|
6498
|
+
toolBudgetScoped: "That question covers more than I can look through in one go. Try asking about one part of it.",
|
|
6481
6499
|
askHuman: "ask a human",
|
|
6482
6500
|
// An offer, not a demand: this row sits under every answer on 38 marketing sites, so the
|
|
6483
6501
|
// wording has to be shruggable. "Was this helpful?" invites; "Please rate this answer"
|
|
@@ -6531,6 +6549,15 @@ var EN = {
|
|
|
6531
6549
|
closeVideo: "Close video",
|
|
6532
6550
|
enterFullScreen: "Full screen",
|
|
6533
6551
|
exitFullScreen: "Exit full screen",
|
|
6552
|
+
panelTitle: "AI assistant",
|
|
6553
|
+
panelTitleProduct: "{product} assistant",
|
|
6554
|
+
panelViews: "Assistant views",
|
|
6555
|
+
tabChat: "Chat",
|
|
6556
|
+
tabAvatar: "Avatar",
|
|
6557
|
+
closePanel: "Close",
|
|
6558
|
+
liveAvatar: "Live avatar",
|
|
6559
|
+
avatarComingSoon: "Live avatar coming soon",
|
|
6560
|
+
continueInChat: "Continue in Chat",
|
|
6534
6561
|
videoUnavailable: "This video can't be played right now.",
|
|
6535
6562
|
groundedIn: "What this answer is based on",
|
|
6536
6563
|
sourceCountOne: "1 source",
|
|
@@ -6543,6 +6570,7 @@ var EN = {
|
|
|
6543
6570
|
seoTitle: "Describe a problem, get an answer",
|
|
6544
6571
|
seoDescription: "Describe the problem in your own words and get an answer drawn from our product documentation, with links to the exact pages it came from.",
|
|
6545
6572
|
seoDescriptionProduct: "Describe the problem 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.",
|
|
6573
|
+
seoDescriptionScoped: "Answers about {product}, drawn from {product}'s documentation, with links to the exact pages they came from.",
|
|
6546
6574
|
capabilities: [
|
|
6547
6575
|
"Grounded in our own docs",
|
|
6548
6576
|
"Compare across the ecosystem",
|
|
@@ -6552,13 +6580,15 @@ var EN = {
|
|
|
6552
6580
|
"Every course we run lives in a different spreadsheet.",
|
|
6553
6581
|
"We only hear a machine is down after the line has stopped.",
|
|
6554
6582
|
"Members quietly stop showing up and we never know why.",
|
|
6555
|
-
|
|
6583
|
+
PORTFOLIO_PROMPT.en
|
|
6556
6584
|
]
|
|
6557
6585
|
};
|
|
6558
6586
|
var ZH = {
|
|
6559
6587
|
badge: "\u57FA\u4E8E\u6211\u4EEC\u6587\u6863\u7684 AI \u56DE\u7B54",
|
|
6560
6588
|
welcomeTitle: "\u4F60\u60F3\u89E3\u51B3\u4EC0\u4E48\u95EE\u9898\uFF1F",
|
|
6561
6589
|
welcomeBody: "\u7528\u4F60\u81EA\u5DF1\u7684\u8BDD\u63CF\u8FF0\u95EE\u9898\u3002\u4F60\u4E5F\u53EF\u4EE5\u8BE2\u95EE\u67D0\u4E00\u6B3E\u4EA7\u54C1\uFF0C\u6216\u6BD4\u8F83\u51E0\u6B3E\u4EA7\u54C1\u3002\u6240\u6709\u56DE\u7B54\u90FD\u76F4\u63A5\u6765\u81EA\u6211\u4EEC\u7684\u6587\u6863\u3002",
|
|
6590
|
+
welcomeBodyProduct: "\u7528\u4F60\u81EA\u5DF1\u7684\u8BDD\u63CF\u8FF0\u95EE\u9898\uFF0C\u6216\u8005\u95EE\u95EE {product} \u662F\u505A\u4EC0\u4E48\u7684\u3002\u6240\u6709\u56DE\u7B54\u90FD\u76F4\u63A5\u6765\u81EA\u6211\u4EEC\u7684\u6587\u6863\u3002",
|
|
6591
|
+
welcomeBodyScoped: "\u7528\u4F60\u81EA\u5DF1\u7684\u8BDD\u63CF\u8FF0\u95EE\u9898\u3002\u6240\u6709\u56DE\u7B54\u90FD\u76F4\u63A5\u6765\u81EA\u6211\u4EEC\u7684\u6587\u6863\u3002",
|
|
6562
6592
|
tryAsking: "\u8BD5\u7740\u95EE",
|
|
6563
6593
|
focusProduct: "\u805A\u7126\u67D0\u4E2A\u4EA7\u54C1",
|
|
6564
6594
|
allProducts: "\u5168\u90E8\u4EA7\u54C1",
|
|
@@ -6568,6 +6598,7 @@ var ZH = {
|
|
|
6568
6598
|
nextYouCouldAsk: "\u4F60\u8FD8\u53EF\u4EE5\u95EE",
|
|
6569
6599
|
placeholder: "\u63CF\u8FF0\u4F60\u7684\u95EE\u9898\u2026",
|
|
6570
6600
|
placeholderProduct: "\u63CF\u8FF0\u95EE\u9898\uFF0C\u6216\u8BE2\u95EE {product}\u2026",
|
|
6601
|
+
placeholderScoped: "\u5C31 {product} \u63D0\u95EE\u2026",
|
|
6571
6602
|
send: "\u53D1\u9001",
|
|
6572
6603
|
stop: "\u505C\u6B62",
|
|
6573
6604
|
newChat: "\u65B0\u5BF9\u8BDD",
|
|
@@ -6589,6 +6620,7 @@ var ZH = {
|
|
|
6589
6620
|
attachmentTooMany: "\u6700\u591A\u53EA\u80FD\u6DFB\u52A0 {{max}} \u4E2A\u6587\u4EF6\uFF0C\u5DF2\u8DF3\u8FC7 {{name}}\u3002",
|
|
6590
6621
|
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",
|
|
6591
6622
|
answerDidNotArrive: "\u8FD9\u6761\u56DE\u7B54\u6CA1\u6709\u8FD4\u56DE\u3002\u8BF7\u518D\u95EE\u4E00\u6B21\u3002",
|
|
6623
|
+
toolBudgetScoped: "\u8FD9\u4E2A\u95EE\u9898\u6D89\u53CA\u7684\u5185\u5BB9\u592A\u591A\uFF0C\u6211\u6CA1\u6CD5\u4E00\u6B21\u67E5\u5B8C\u3002\u8BD5\u7740\u53EA\u95EE\u5176\u4E2D\u7684\u4E00\u90E8\u5206\u3002",
|
|
6592
6624
|
askHuman: "\u8054\u7CFB\u6211\u4EEC",
|
|
6593
6625
|
feedbackPrompt: "\u8FD9\u4E2A\u56DE\u7B54\u6709\u5E2E\u52A9\u5417\uFF1F",
|
|
6594
6626
|
feedbackHelpful: "\u6709\u5E2E\u52A9",
|
|
@@ -6639,6 +6671,15 @@ var ZH = {
|
|
|
6639
6671
|
closeVideo: "\u5173\u95ED\u89C6\u9891",
|
|
6640
6672
|
enterFullScreen: "\u5168\u5C4F",
|
|
6641
6673
|
exitFullScreen: "\u9000\u51FA\u5168\u5C4F",
|
|
6674
|
+
panelTitle: "AI \u52A9\u624B",
|
|
6675
|
+
panelTitleProduct: "{product} \u52A9\u624B",
|
|
6676
|
+
panelViews: "\u52A9\u624B\u89C6\u56FE",
|
|
6677
|
+
tabChat: "\u804A\u5929",
|
|
6678
|
+
tabAvatar: "\u865A\u62DF\u5F62\u8C61",
|
|
6679
|
+
closePanel: "\u5173\u95ED",
|
|
6680
|
+
liveAvatar: "\u5B9E\u65F6\u865A\u62DF\u5F62\u8C61",
|
|
6681
|
+
avatarComingSoon: "\u5B9E\u65F6\u865A\u62DF\u5F62\u8C61\u5373\u5C06\u63A8\u51FA",
|
|
6682
|
+
continueInChat: "\u5728\u804A\u5929\u4E2D\u7EE7\u7EED",
|
|
6642
6683
|
videoUnavailable: "\u6682\u65F6\u65E0\u6CD5\u64AD\u653E\u6B64\u89C6\u9891\u3002",
|
|
6643
6684
|
groundedIn: "\u8FD9\u4E2A\u56DE\u7B54\u7684\u4F9D\u636E",
|
|
6644
6685
|
sourceCountOne: "1 \u4E2A\u6765\u6E90",
|
|
@@ -6651,18 +6692,21 @@ var ZH = {
|
|
|
6651
6692
|
seoTitle: "\u63CF\u8FF0\u95EE\u9898\uFF0C\u83B7\u5F97\u7B54\u6848",
|
|
6652
6693
|
seoDescription: "\u7528\u4F60\u81EA\u5DF1\u7684\u8BDD\u63CF\u8FF0\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",
|
|
6653
6694
|
seoDescriptionProduct: "\u7528\u4F60\u81EA\u5DF1\u7684\u8BDD\u63CF\u8FF0\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",
|
|
6695
|
+
seoDescriptionScoped: "\u6709\u5173 {product} \u7684\u56DE\u7B54\uFF0C\u5747\u6765\u81EA {product} \u7684\u6587\u6863\uFF0C\u5E76\u9644\u4E0A\u7B54\u6848\u51FA\u5904\u7684\u9875\u9762\u94FE\u63A5\u3002",
|
|
6654
6696
|
capabilities: ["\u57FA\u4E8E\u6211\u4EEC\u81EA\u5DF1\u7684\u6587\u6863", "\u8DE8\u4EA7\u54C1\u5BF9\u6BD4", "\u76F4\u8FBE\u6B63\u786E\u7684\u9875\u9762"],
|
|
6655
6697
|
prompts: [
|
|
6656
6698
|
"\u6BCF\u95E8\u8BFE\u7A0B\u90FD\u8BB0\u5728\u4E0D\u540C\u7684\u8868\u683C\u91CC\u3002",
|
|
6657
6699
|
"\u673A\u5668\u505C\u4E86\uFF0C\u8981\u7B49\u6574\u6761\u7EBF\u505C\u4E0B\u6765\u624D\u77E5\u9053\u3002",
|
|
6658
6700
|
"\u4F1A\u5458\u6162\u6162\u5C31\u4E0D\u6765\u4E86\uFF0C\u6211\u4EEC\u4E5F\u4E0D\u77E5\u9053\u4E3A\u4EC0\u4E48\u3002",
|
|
6659
|
-
|
|
6701
|
+
PORTFOLIO_PROMPT.zh
|
|
6660
6702
|
]
|
|
6661
6703
|
};
|
|
6662
6704
|
var HI = {
|
|
6663
6705
|
badge: "\u0939\u092E\u093E\u0930\u0947 \u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C\u094B\u0902 \u092A\u0930 \u0906\u0927\u093E\u0930\u093F\u0924 AI \u0909\u0924\u094D\u0924\u0930",
|
|
6664
6706
|
welcomeTitle: "\u0906\u092A \u0915\u094C\u0928 \u0938\u0940 \u0938\u092E\u0938\u094D\u092F\u093E \u0939\u0932 \u0915\u0930\u0928\u093E \u091A\u093E\u0939\u0924\u0947 \u0939\u0948\u0902?",
|
|
6665
6707
|
welcomeBody: "\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\u0964 \u0906\u092A \u0915\u093F\u0938\u0940 \u090F\u0915 \u0909\u0924\u094D\u092A\u093E\u0926 \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u092D\u0940 \u092A\u0942\u091B \u0938\u0915\u0924\u0947 \u0939\u0948\u0902 \u092F\u093E \u0915\u0941\u091B \u0915\u0940 \u0924\u0941\u0932\u0928\u093E \u0915\u0930 \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964 \u0939\u0930 \u0909\u0924\u094D\u0924\u0930 \u0938\u0940\u0927\u0947 \u0939\u092E\u093E\u0930\u0947 \u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C \u0938\u0947 \u0906\u0924\u093E \u0939\u0948\u0964",
|
|
6708
|
+
welcomeBodyProduct: "\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, \u092F\u093E \u092A\u0942\u091B\u0947\u0902 \u0915\u093F {product} \u0915\u094D\u092F\u093E \u0915\u0930\u0924\u093E \u0939\u0948\u0964 \u0939\u0930 \u0909\u0924\u094D\u0924\u0930 \u0938\u0940\u0927\u0947 \u0939\u092E\u093E\u0930\u0947 \u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C \u0938\u0947 \u0906\u0924\u093E \u0939\u0948\u0964",
|
|
6709
|
+
welcomeBodyScoped: "\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\u0964 \u0939\u0930 \u0909\u0924\u094D\u0924\u0930 \u0938\u0940\u0927\u0947 \u0939\u092E\u093E\u0930\u0947 \u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C \u0938\u0947 \u0906\u0924\u093E \u0939\u0948\u0964",
|
|
6666
6710
|
tryAsking: "\u092F\u0939 \u092A\u0942\u091B\u0915\u0930 \u0926\u0947\u0916\u0947\u0902",
|
|
6667
6711
|
focusProduct: "\u0915\u093F\u0938\u0940 \u0909\u0924\u094D\u092A\u093E\u0926 \u092A\u0930 \u0927\u094D\u092F\u093E\u0928 \u0926\u0947\u0902",
|
|
6668
6712
|
allProducts: "\u0938\u092D\u0940 \u0909\u0924\u094D\u092A\u093E\u0926",
|
|
@@ -6672,6 +6716,7 @@ var HI = {
|
|
|
6672
6716
|
nextYouCouldAsk: "\u0906\u0917\u0947 \u0906\u092A \u092A\u0942\u091B \u0938\u0915\u0924\u0947 \u0939\u0948\u0902",
|
|
6673
6717
|
placeholder: "\u0905\u092A\u0928\u0940 \u0938\u092E\u0938\u094D\u092F\u093E \u092C\u0924\u093E\u090F\u0902\u2026",
|
|
6674
6718
|
placeholderProduct: "\u0938\u092E\u0938\u094D\u092F\u093E \u092C\u0924\u093E\u090F\u0902, \u092F\u093E {product} \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u092A\u0942\u091B\u0947\u0902\u2026",
|
|
6719
|
+
placeholderScoped: "{product} \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u092A\u0942\u091B\u0947\u0902\u2026",
|
|
6675
6720
|
send: "\u092D\u0947\u091C\u0947\u0902",
|
|
6676
6721
|
stop: "\u0930\u094B\u0915\u0947\u0902",
|
|
6677
6722
|
newChat: "\u0928\u0908 \u092C\u093E\u0924\u091A\u0940\u0924",
|
|
@@ -6693,6 +6738,7 @@ var HI = {
|
|
|
6693
6738
|
attachmentTooMany: "\u0915\u0947\u0935\u0932 {{max}} \u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u091C\u094B\u0921\u093C\u0940 \u091C\u093E \u0938\u0915\u0924\u0940 \u0939\u0948\u0902, \u0907\u0938\u0932\u093F\u090F {{name}} \u091B\u094B\u0921\u093C \u0926\u0940 \u0917\u0908\u0964",
|
|
6694
6739
|
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",
|
|
6695
6740
|
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",
|
|
6741
|
+
toolBudgetScoped: "\u0907\u0938 \u0938\u0935\u093E\u0932 \u092E\u0947\u0902 \u0907\u0924\u0928\u093E \u0915\u0941\u091B \u0939\u0948 \u0915\u093F \u090F\u0915 \u092C\u093E\u0930 \u092E\u0947\u0902 \u0938\u092C \u0928\u0939\u0940\u0902 \u0926\u0947\u0916\u093E \u091C\u093E \u0938\u0915\u0924\u093E\u0964 \u0907\u0938\u0915\u0947 \u0915\u093F\u0938\u0940 \u090F\u0915 \u0939\u093F\u0938\u094D\u0938\u0947 \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u092A\u0942\u091B\u0915\u0930 \u0926\u0947\u0916\u0947\u0902\u0964",
|
|
6696
6742
|
askHuman: "\u0939\u092E\u0938\u0947 \u0938\u0902\u092A\u0930\u094D\u0915 \u0915\u0930\u0947\u0902",
|
|
6697
6743
|
feedbackPrompt: "\u0915\u094D\u092F\u093E \u092F\u0939 \u0909\u0924\u094D\u0924\u0930 \u092E\u0926\u0926\u0917\u093E\u0930 \u0925\u093E?",
|
|
6698
6744
|
feedbackHelpful: "\u092E\u0926\u0926\u0917\u093E\u0930",
|
|
@@ -6743,6 +6789,15 @@ var HI = {
|
|
|
6743
6789
|
closeVideo: "\u0935\u0940\u0921\u093F\u092F\u094B \u092C\u0902\u0926 \u0915\u0930\u0947\u0902",
|
|
6744
6790
|
enterFullScreen: "\u092A\u0942\u0930\u094D\u0923 \u0938\u094D\u0915\u094D\u0930\u0940\u0928",
|
|
6745
6791
|
exitFullScreen: "\u092A\u0942\u0930\u094D\u0923 \u0938\u094D\u0915\u094D\u0930\u0940\u0928 \u0938\u0947 \u092C\u093E\u0939\u0930 \u0928\u093F\u0915\u0932\u0947\u0902",
|
|
6792
|
+
panelTitle: "AI \u0938\u0939\u093E\u092F\u0915",
|
|
6793
|
+
panelTitleProduct: "{product} \u0938\u0939\u093E\u092F\u0915",
|
|
6794
|
+
panelViews: "\u0938\u0939\u093E\u092F\u0915 \u0926\u0943\u0936\u094D\u092F",
|
|
6795
|
+
tabChat: "\u091A\u0948\u091F",
|
|
6796
|
+
tabAvatar: "\u0905\u0935\u0924\u093E\u0930",
|
|
6797
|
+
closePanel: "\u092C\u0902\u0926 \u0915\u0930\u0947\u0902",
|
|
6798
|
+
liveAvatar: "\u0932\u093E\u0907\u0935 \u0905\u0935\u0924\u093E\u0930",
|
|
6799
|
+
avatarComingSoon: "\u0932\u093E\u0907\u0935 \u0905\u0935\u0924\u093E\u0930 \u091C\u0932\u094D\u0926 \u0906 \u0930\u0939\u093E \u0939\u0948",
|
|
6800
|
+
continueInChat: "\u091A\u0948\u091F \u092E\u0947\u0902 \u091C\u093E\u0930\u0940 \u0930\u0916\u0947\u0902",
|
|
6746
6801
|
videoUnavailable: "\u092F\u0939 \u0935\u0940\u0921\u093F\u092F\u094B \u0905\u092D\u0940 \u0928\u0939\u0940\u0902 \u091A\u0932 \u0938\u0915\u0924\u093E\u0964",
|
|
6747
6802
|
groundedIn: "\u092F\u0939 \u0909\u0924\u094D\u0924\u0930 \u0915\u093F\u0938 \u092A\u0930 \u0906\u0927\u093E\u0930\u093F\u0924 \u0939\u0948",
|
|
6748
6803
|
sourceCountOne: "1 \u0938\u094D\u0930\u094B\u0924",
|
|
@@ -6755,6 +6810,7 @@ var HI = {
|
|
|
6755
6810
|
seoTitle: "\u0938\u092E\u0938\u094D\u092F\u093E \u092C\u0924\u093E\u090F\u0902, \u091C\u0935\u093E\u092C \u092A\u093E\u090F\u0902",
|
|
6756
6811
|
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",
|
|
6757
6812
|
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",
|
|
6813
|
+
seoDescriptionScoped: "{product} \u0915\u0947 \u092C\u093E\u0930\u0947 \u092E\u0947\u0902 \u091C\u0935\u093E\u092C \u092A\u093E\u090F\u0902, \u091C\u094B {product} \u0915\u0947 \u0926\u0938\u094D\u0924\u093E\u0935\u0947\u091C\u093C\u094B\u0902 \u0938\u0947 \u0932\u093F\u090F \u0917\u090F \u0939\u0948\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\u0947 \u0906\u090F \u0939\u0948\u0902\u0964",
|
|
6758
6814
|
capabilities: [
|
|
6759
6815
|
"\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",
|
|
6760
6816
|
"\u0938\u092D\u0940 \u0909\u0924\u094D\u092A\u093E\u0926\u094B\u0902 \u0915\u0940 \u0924\u0941\u0932\u0928\u093E \u0915\u0930\u0947\u0902",
|
|
@@ -6764,13 +6820,15 @@ var HI = {
|
|
|
6764
6820
|
"\u0939\u0930 \u0915\u094B\u0930\u094D\u0938 \u0915\u093E \u0939\u093F\u0938\u093E\u092C \u0905\u0932\u0917 \u0936\u0940\u091F \u092E\u0947\u0902 \u0930\u0916\u093E \u091C\u093E\u0924\u093E \u0939\u0948\u0964",
|
|
6765
6821
|
"\u092E\u0936\u0940\u0928 \u092C\u0902\u0926 \u0939\u094B\u0928\u0947 \u0915\u093E \u092A\u0924\u093E \u0924\u092D\u0940 \u091A\u0932\u0924\u093E \u0939\u0948 \u091C\u092C \u0932\u093E\u0907\u0928 \u0930\u0941\u0915 \u091C\u093E\u090F\u0964",
|
|
6766
6822
|
"\u0938\u0926\u0938\u094D\u092F \u0927\u0940\u0930\u0947-\u0927\u0940\u0930\u0947 \u0906\u0928\u093E \u092C\u0902\u0926 \u0915\u0930 \u0926\u0947\u0924\u0947 \u0939\u0948\u0902, \u0935\u091C\u0939 \u092A\u0924\u093E \u0928\u0939\u0940\u0902 \u091A\u0932\u0924\u0940\u0964",
|
|
6767
|
-
|
|
6823
|
+
PORTFOLIO_PROMPT.hi
|
|
6768
6824
|
]
|
|
6769
6825
|
};
|
|
6770
6826
|
var ES = {
|
|
6771
6827
|
badge: "Respuestas de IA basadas en nuestra documentaci\xF3n",
|
|
6772
6828
|
welcomeTitle: "\xBFQu\xE9 problema quieres resolver?",
|
|
6773
6829
|
welcomeBody: "Describe el problema con tus propias palabras. Tambi\xE9n puedes preguntar por un producto concreto o comparar varios. Cada respuesta procede directamente de nuestra documentaci\xF3n.",
|
|
6830
|
+
welcomeBodyProduct: "Describe el problema con tus propias palabras o pregunta qu\xE9 hace {product}. Cada respuesta procede directamente de nuestra documentaci\xF3n.",
|
|
6831
|
+
welcomeBodyScoped: "Describe el problema con tus propias palabras. Cada respuesta procede directamente de nuestra documentaci\xF3n.",
|
|
6774
6832
|
tryAsking: "Prueba a preguntar",
|
|
6775
6833
|
focusProduct: "Centrarse en un producto",
|
|
6776
6834
|
allProducts: "Todos los productos",
|
|
@@ -6780,6 +6838,7 @@ var ES = {
|
|
|
6780
6838
|
nextYouCouldAsk: "Tambi\xE9n puedes preguntar",
|
|
6781
6839
|
placeholder: "Describe el problema\u2026",
|
|
6782
6840
|
placeholderProduct: "Describe un problema o pregunta por {product}\u2026",
|
|
6841
|
+
placeholderScoped: "Pregunta sobre {product}\u2026",
|
|
6783
6842
|
send: "Enviar",
|
|
6784
6843
|
stop: "Detener",
|
|
6785
6844
|
newChat: "Nueva conversaci\xF3n",
|
|
@@ -6801,6 +6860,7 @@ var ES = {
|
|
|
6801
6860
|
attachmentTooMany: "Solo se pueden adjuntar {{max}} archivos, as\xED que se omiti\xF3 {{name}}.",
|
|
6802
6861
|
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",
|
|
6803
6862
|
answerDidNotArrive: "Esa respuesta no lleg\xF3. Int\xE9ntalo de nuevo.",
|
|
6863
|
+
toolBudgetScoped: "Esa pregunta abarca m\xE1s de lo que puedo revisar de una vez. Prueba a preguntar por una parte de ella.",
|
|
6804
6864
|
askHuman: "habla con una persona",
|
|
6805
6865
|
feedbackPrompt: "\xBFTe ha servido?",
|
|
6806
6866
|
feedbackHelpful: "Me sirve",
|
|
@@ -6851,6 +6911,15 @@ var ES = {
|
|
|
6851
6911
|
closeVideo: "Cerrar v\xEDdeo",
|
|
6852
6912
|
enterFullScreen: "Pantalla completa",
|
|
6853
6913
|
exitFullScreen: "Salir de pantalla completa",
|
|
6914
|
+
panelTitle: "Asistente de IA",
|
|
6915
|
+
panelTitleProduct: "Asistente de {product}",
|
|
6916
|
+
panelViews: "Vistas del asistente",
|
|
6917
|
+
tabChat: "Chat",
|
|
6918
|
+
tabAvatar: "Avatar",
|
|
6919
|
+
closePanel: "Cerrar",
|
|
6920
|
+
liveAvatar: "Avatar en vivo",
|
|
6921
|
+
avatarComingSoon: "Avatar en vivo: pr\xF3ximamente",
|
|
6922
|
+
continueInChat: "Continuar en el chat",
|
|
6854
6923
|
videoUnavailable: "Ahora mismo no se puede reproducir este v\xEDdeo.",
|
|
6855
6924
|
groundedIn: "En qu\xE9 se basa esta respuesta",
|
|
6856
6925
|
sourceCountOne: "1 fuente",
|
|
@@ -6863,6 +6932,7 @@ var ES = {
|
|
|
6863
6932
|
seoTitle: "Describe un problema y obt\xE9n una respuesta",
|
|
6864
6933
|
seoDescription: "Describe el problema con tus palabras y recibe una respuesta extra\xEDda de la documentaci\xF3n de nuestros productos, con enlaces a las p\xE1ginas exactas de las que procede.",
|
|
6865
6934
|
seoDescriptionProduct: "Describe el problema con tus palabras 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.",
|
|
6935
|
+
seoDescriptionScoped: "Respuestas sobre {product}, extra\xEDdas de la documentaci\xF3n de {product}, con enlaces a las p\xE1ginas exactas de las que proceden.",
|
|
6866
6936
|
capabilities: [
|
|
6867
6937
|
"Basado en nuestra documentaci\xF3n",
|
|
6868
6938
|
"Compara todo el ecosistema",
|
|
@@ -6872,13 +6942,15 @@ var ES = {
|
|
|
6872
6942
|
"Cada curso que damos est\xE1 en una hoja de c\xE1lculo distinta.",
|
|
6873
6943
|
"Nos enteramos de que una m\xE1quina falla cuando para la l\xEDnea.",
|
|
6874
6944
|
"Los socios dejan de venir poco a poco y nunca sabemos por qu\xE9.",
|
|
6875
|
-
|
|
6945
|
+
PORTFOLIO_PROMPT.es
|
|
6876
6946
|
]
|
|
6877
6947
|
};
|
|
6878
6948
|
var AR = {
|
|
6879
6949
|
badge: "\u0625\u062C\u0627\u0628\u0627\u062A \u0630\u0643\u0627\u0621 \u0627\u0635\u0637\u0646\u0627\u0639\u064A \u0645\u0628\u0646\u064A\u0629 \u0639\u0644\u0649 \u0648\u062B\u0627\u0626\u0642\u0646\u0627",
|
|
6880
6950
|
welcomeTitle: "\u0645\u0627 \u0627\u0644\u0645\u0634\u0643\u0644\u0629 \u0627\u0644\u062A\u064A \u062A\u062D\u0627\u0648\u0644 \u062D\u0644\u0647\u0627\u061F",
|
|
6881
6951
|
welcomeBody: "\u0635\u0641 \u0627\u0644\u0645\u0634\u0643\u0644\u0629 \u0628\u0643\u0644\u0645\u0627\u062A\u0643 \u0623\u0646\u062A. \u064A\u0645\u0643\u0646\u0643 \u0623\u064A\u0636\u064B\u0627 \u0627\u0644\u0633\u0624\u0627\u0644 \u0639\u0646 \u0645\u0646\u062A\u062C \u0628\u0639\u064A\u0646\u0647 \u0623\u0648 \u0627\u0644\u0645\u0642\u0627\u0631\u0646\u0629 \u0628\u064A\u0646 \u0639\u062F\u0629 \u0645\u0646\u062A\u062C\u0627\u062A. \u062A\u0623\u062A\u064A \u0643\u0644 \u0625\u062C\u0627\u0628\u0629 \u0645\u0628\u0627\u0634\u0631\u0629 \u0645\u0646 \u0648\u062B\u0627\u0626\u0642\u0646\u0627.",
|
|
6952
|
+
welcomeBodyProduct: "\u0635\u0641 \u0627\u0644\u0645\u0634\u0643\u0644\u0629 \u0628\u0643\u0644\u0645\u0627\u062A\u0643 \u0623\u0646\u062A\u060C \u0623\u0648 \u0627\u0633\u0623\u0644 \u0639\u0645\u0651\u0627 \u064A\u0641\u0639\u0644\u0647 {product}. \u062A\u0623\u062A\u064A \u0643\u0644 \u0625\u062C\u0627\u0628\u0629 \u0645\u0628\u0627\u0634\u0631\u0629 \u0645\u0646 \u0648\u062B\u0627\u0626\u0642\u0646\u0627.",
|
|
6953
|
+
welcomeBodyScoped: "\u0635\u0641 \u0627\u0644\u0645\u0634\u0643\u0644\u0629 \u0628\u0643\u0644\u0645\u0627\u062A\u0643 \u0623\u0646\u062A. \u062A\u0623\u062A\u064A \u0643\u0644 \u0625\u062C\u0627\u0628\u0629 \u0645\u0628\u0627\u0634\u0631\u0629 \u0645\u0646 \u0648\u062B\u0627\u0626\u0642\u0646\u0627.",
|
|
6882
6954
|
tryAsking: "\u062C\u0631\u0651\u0628 \u0623\u0646 \u062A\u0633\u0623\u0644",
|
|
6883
6955
|
focusProduct: "\u0627\u0644\u062A\u0631\u0643\u064A\u0632 \u0639\u0644\u0649 \u0645\u0646\u062A\u062C",
|
|
6884
6956
|
allProducts: "\u0643\u0644 \u0627\u0644\u0645\u0646\u062A\u062C\u0627\u062A",
|
|
@@ -6888,6 +6960,7 @@ var AR = {
|
|
|
6888
6960
|
nextYouCouldAsk: "\u064A\u0645\u0643\u0646\u0643 \u0623\u0646 \u062A\u0633\u0623\u0644 \u0628\u0639\u062F \u0630\u0644\u0643",
|
|
6889
6961
|
placeholder: "\u0635\u0641 \u0627\u0644\u0645\u0634\u0643\u0644\u0629\u2026",
|
|
6890
6962
|
placeholderProduct: "\u0635\u0641 \u0645\u0634\u0643\u0644\u062A\u0643 \u0623\u0648 \u0627\u0633\u0623\u0644 \u0639\u0646 {product}\u2026",
|
|
6963
|
+
placeholderScoped: "\u0627\u0633\u0623\u0644 \u0639\u0646 {product}\u2026",
|
|
6891
6964
|
send: "\u0625\u0631\u0633\u0627\u0644",
|
|
6892
6965
|
stop: "\u0625\u064A\u0642\u0627\u0641",
|
|
6893
6966
|
newChat: "\u0645\u062D\u0627\u062F\u062B\u0629 \u062C\u062F\u064A\u062F\u0629",
|
|
@@ -6909,6 +6982,7 @@ var AR = {
|
|
|
6909
6982
|
attachmentTooMany: "\u064A\u0645\u0643\u0646 \u0625\u0631\u0641\u0627\u0642 {{max}} \u0645\u0644\u0641\u0627\u062A \u0641\u0642\u0637\u060C \u0644\u0630\u0627 \u062A\u0645 \u062A\u062E\u0637\u064A {{name}}.",
|
|
6910
6983
|
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",
|
|
6911
6984
|
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.",
|
|
6985
|
+
toolBudgetScoped: "\u0647\u0630\u0627 \u0627\u0644\u0633\u0624\u0627\u0644 \u064A\u0634\u0645\u0644 \u0623\u0643\u062B\u0631 \u0645\u0645\u0627 \u0623\u0633\u062A\u0637\u064A\u0639 \u0627\u0644\u0628\u062D\u062B \u0641\u064A\u0647 \u062F\u0641\u0639\u0629 \u0648\u0627\u062D\u062F\u0629. \u062C\u0631\u0651\u0628 \u0623\u0646 \u062A\u0633\u0623\u0644 \u0639\u0646 \u062C\u0632\u0621 \u0648\u0627\u062D\u062F \u0645\u0646\u0647.",
|
|
6912
6986
|
askHuman: "\u062A\u062D\u062F\u0651\u062B \u0625\u0644\u0649 \u0634\u062E\u0635",
|
|
6913
6987
|
feedbackPrompt: "\u0647\u0644 \u0643\u0627\u0646\u062A \u0647\u0630\u0647 \u0627\u0644\u0625\u062C\u0627\u0628\u0629 \u0645\u0641\u064A\u062F\u0629\u061F",
|
|
6914
6988
|
feedbackHelpful: "\u0645\u0641\u064A\u062F\u0629",
|
|
@@ -6959,6 +7033,15 @@ var AR = {
|
|
|
6959
7033
|
closeVideo: "\u0625\u063A\u0644\u0627\u0642 \u0627\u0644\u0641\u064A\u062F\u064A\u0648",
|
|
6960
7034
|
enterFullScreen: "\u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629",
|
|
6961
7035
|
exitFullScreen: "\u0627\u0644\u062E\u0631\u0648\u062C \u0645\u0646 \u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629",
|
|
7036
|
+
panelTitle: "\u0645\u0633\u0627\u0639\u062F \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064A",
|
|
7037
|
+
panelTitleProduct: "\u0645\u0633\u0627\u0639\u062F {product}",
|
|
7038
|
+
panelViews: "\u0637\u0631\u0642 \u0639\u0631\u0636 \u0627\u0644\u0645\u0633\u0627\u0639\u062F",
|
|
7039
|
+
tabChat: "\u062F\u0631\u062F\u0634\u0629",
|
|
7040
|
+
tabAvatar: "\u0627\u0644\u0623\u0641\u0627\u062A\u0627\u0631",
|
|
7041
|
+
closePanel: "\u0625\u063A\u0644\u0627\u0642",
|
|
7042
|
+
liveAvatar: "\u0627\u0644\u0623\u0641\u0627\u062A\u0627\u0631 \u0627\u0644\u0645\u0628\u0627\u0634\u0631",
|
|
7043
|
+
avatarComingSoon: "\u0627\u0644\u0623\u0641\u0627\u062A\u0627\u0631 \u0627\u0644\u0645\u0628\u0627\u0634\u0631 \u0642\u0631\u064A\u0628\u064B\u0627",
|
|
7044
|
+
continueInChat: "\u0627\u0644\u0645\u062A\u0627\u0628\u0639\u0629 \u0641\u064A \u0627\u0644\u062F\u0631\u062F\u0634\u0629",
|
|
6962
7045
|
videoUnavailable: "\u062A\u0639\u0630\u0651\u0631 \u062A\u0634\u063A\u064A\u0644 \u0647\u0630\u0627 \u0627\u0644\u0641\u064A\u062F\u064A\u0648 \u0627\u0644\u0622\u0646.",
|
|
6963
7046
|
groundedIn: "\u0639\u0644\u0649 \u0645\u0627\u0630\u0627 \u062A\u0633\u062A\u0646\u062F \u0647\u0630\u0647 \u0627\u0644\u0625\u062C\u0627\u0628\u0629",
|
|
6964
7047
|
sourceCountOne: "\u0645\u0635\u062F\u0631 \u0648\u0627\u062D\u062F",
|
|
@@ -6971,6 +7054,7 @@ var AR = {
|
|
|
6971
7054
|
seoTitle: "\u0635\u0641 \u0645\u0634\u0643\u0644\u062A\u0643 \u0648\u0627\u062D\u0635\u0644 \u0639\u0644\u0649 \u0625\u062C\u0627\u0628\u0629",
|
|
6972
7055
|
seoDescription: "\u0635\u0641 \u0627\u0644\u0645\u0634\u0643\u0644\u0629 \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.",
|
|
6973
7056
|
seoDescriptionProduct: "\u0635\u0641 \u0627\u0644\u0645\u0634\u0643\u0644\u0629 \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.",
|
|
7057
|
+
seoDescriptionScoped: "\u0625\u062C\u0627\u0628\u0627\u062A \u0639\u0646 {product} \u0645\u0633\u062A\u0645\u062F\u0629 \u0645\u0646 \u0648\u062B\u0627\u0626\u0642 {product}\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.",
|
|
6974
7058
|
capabilities: [
|
|
6975
7059
|
"\u0645\u0628\u0646\u064A \u0639\u0644\u0649 \u0648\u062B\u0627\u0626\u0642\u0646\u0627",
|
|
6976
7060
|
"\u0642\u0627\u0631\u0646 \u0639\u0628\u0631 \u0627\u0644\u0645\u0646\u0638\u0648\u0645\u0629",
|
|
@@ -6980,13 +7064,15 @@ var AR = {
|
|
|
6980
7064
|
"\u0643\u0644 \u062F\u0648\u0631\u0629 \u062A\u062F\u0631\u064A\u0628\u064A\u0629 \u0644\u062F\u064A\u0646\u0627 \u0641\u064A \u062C\u062F\u0648\u0644 \u0628\u064A\u0627\u0646\u0627\u062A \u0645\u062E\u062A\u0644\u0641.",
|
|
6981
7065
|
"\u0644\u0627 \u0646\u0639\u0644\u0645 \u0628\u062A\u0639\u0637\u0644 \u0627\u0644\u0645\u0627\u0643\u064A\u0646\u0629 \u0625\u0644\u0627 \u0628\u0639\u062F \u062A\u0648\u0642\u0641 \u062E\u0637 \u0627\u0644\u0625\u0646\u062A\u0627\u062C.",
|
|
6982
7066
|
"\u0623\u0639\u0636\u0627\u0624\u0646\u0627 \u064A\u062A\u0648\u0642\u0641\u0648\u0646 \u0639\u0646 \u0627\u0644\u062D\u0636\u0648\u0631 \u062A\u062F\u0631\u064A\u062C\u064A\u064B\u0627 \u062F\u0648\u0646 \u0623\u0646 \u0646\u0639\u0631\u0641 \u0627\u0644\u0633\u0628\u0628.",
|
|
6983
|
-
|
|
7067
|
+
PORTFOLIO_PROMPT.ar
|
|
6984
7068
|
]
|
|
6985
7069
|
};
|
|
6986
7070
|
var TA = {
|
|
6987
7071
|
badge: "\u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B86\u0BB5\u0BA3\u0B99\u0BCD\u0B95\u0BB3\u0BC8 \u0B85\u0B9F\u0BBF\u0BAA\u0BCD\u0BAA\u0B9F\u0BC8\u0BAF\u0BBE\u0B95\u0B95\u0BCD \u0B95\u0BCA\u0BA3\u0BCD\u0B9F AI \u0BAA\u0BA4\u0BBF\u0BB2\u0BCD\u0B95\u0BB3\u0BCD",
|
|
6988
7072
|
welcomeTitle: "\u0BA8\u0BC0\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B8E\u0BA8\u0BCD\u0BA4\u0B9A\u0BCD \u0B9A\u0BBF\u0B95\u0BCD\u0B95\u0BB2\u0BC8\u0BA4\u0BCD \u0BA4\u0BC0\u0BB0\u0BCD\u0B95\u0BCD\u0B95 \u0BAE\u0BC1\u0BAF\u0BB2\u0BCD\u0B95\u0BBF\u0BB1\u0BC0\u0BB0\u0BCD\u0B95\u0BB3\u0BCD?",
|
|
6989
7073
|
welcomeBody: "\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. \u0B92\u0BB0\u0BC1 \u0B95\u0BC1\u0BB1\u0BBF\u0BAA\u0BCD\u0BAA\u0BBF\u0B9F\u0BCD\u0B9F \u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1 \u0BAA\u0BB1\u0BCD\u0BB1\u0BBF\u0BAF\u0BC1\u0BAE\u0BCD \u0B95\u0BC7\u0B9F\u0BCD\u0B95\u0BB2\u0BBE\u0BAE\u0BCD, \u0B9A\u0BBF\u0BB2\u0BB5\u0BB1\u0BCD\u0BB1\u0BC8 \u0B92\u0BAA\u0BCD\u0BAA\u0BBF\u0B9F\u0BB5\u0BC1\u0BAE\u0BCD \u0B9A\u0BC6\u0BAF\u0BCD\u0BAF\u0BB2\u0BBE\u0BAE\u0BCD. \u0B92\u0BB5\u0BCD\u0BB5\u0BCA\u0BB0\u0BC1 \u0BAA\u0BA4\u0BBF\u0BB2\u0BC1\u0BAE\u0BCD \u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B86\u0BB5\u0BA3\u0BAA\u0BCD\u0BAA\u0B9F\u0BC1\u0BA4\u0BCD\u0BA4\u0BB2\u0BBF\u0BB2\u0BBF\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4\u0BC1 \u0BA8\u0BC7\u0BB0\u0B9F\u0BBF\u0BAF\u0BBE\u0B95 \u0BB5\u0BB0\u0BC1\u0B95\u0BBF\u0BB1\u0BA4\u0BC1.",
|
|
7074
|
+
welcomeBodyProduct: "\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, \u0B85\u0BB2\u0BCD\u0BB2\u0BA4\u0BC1 {product} \u0B8E\u0BA9\u0BCD\u0BA9 \u0B9A\u0BC6\u0BAF\u0BCD\u0B95\u0BBF\u0BB1\u0BA4\u0BC1 \u0B8E\u0BA9\u0BCD\u0BB1\u0BC1 \u0B95\u0BC7\u0BB3\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD. \u0B92\u0BB5\u0BCD\u0BB5\u0BCA\u0BB0\u0BC1 \u0BAA\u0BA4\u0BBF\u0BB2\u0BC1\u0BAE\u0BCD \u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B86\u0BB5\u0BA3\u0BAA\u0BCD\u0BAA\u0B9F\u0BC1\u0BA4\u0BCD\u0BA4\u0BB2\u0BBF\u0BB2\u0BBF\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4\u0BC1 \u0BA8\u0BC7\u0BB0\u0B9F\u0BBF\u0BAF\u0BBE\u0B95 \u0BB5\u0BB0\u0BC1\u0B95\u0BBF\u0BB1\u0BA4\u0BC1.",
|
|
7075
|
+
welcomeBodyScoped: "\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. \u0B92\u0BB5\u0BCD\u0BB5\u0BCA\u0BB0\u0BC1 \u0BAA\u0BA4\u0BBF\u0BB2\u0BC1\u0BAE\u0BCD \u0B8E\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B86\u0BB5\u0BA3\u0BAA\u0BCD\u0BAA\u0B9F\u0BC1\u0BA4\u0BCD\u0BA4\u0BB2\u0BBF\u0BB2\u0BBF\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4\u0BC1 \u0BA8\u0BC7\u0BB0\u0B9F\u0BBF\u0BAF\u0BBE\u0B95 \u0BB5\u0BB0\u0BC1\u0B95\u0BBF\u0BB1\u0BA4\u0BC1.",
|
|
6990
7076
|
tryAsking: "\u0B87\u0BA4\u0BC8\u0B95\u0BCD \u0B95\u0BC7\u0B9F\u0BCD\u0B9F\u0BC1\u0BAA\u0BCD \u0BAA\u0BBE\u0BB0\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
|
|
6991
7077
|
focusProduct: "\u0B92\u0BB0\u0BC1 \u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BBF\u0BB2\u0BCD \u0B95\u0BB5\u0BA9\u0BAE\u0BCD",
|
|
6992
7078
|
allProducts: "\u0B85\u0BA9\u0BC8\u0BA4\u0BCD\u0BA4\u0BC1 \u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD",
|
|
@@ -6996,6 +7082,7 @@ var TA = {
|
|
|
6996
7082
|
nextYouCouldAsk: "\u0B85\u0B9F\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1 \u0BA8\u0BC0\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B95\u0BC7\u0B9F\u0BCD\u0B95\u0BB2\u0BBE\u0BAE\u0BCD",
|
|
6997
7083
|
placeholder: "\u0B9A\u0BBF\u0B95\u0BCD\u0B95\u0BB2\u0BC8 \u0BB5\u0BBF\u0BB5\u0BB0\u0BBF\u0BAF\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD\u2026",
|
|
6998
7084
|
placeholderProduct: "\u0B9A\u0BBF\u0B95\u0BCD\u0B95\u0BB2\u0BC8 \u0BB5\u0BBF\u0BB5\u0BB0\u0BBF\u0BAF\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD, \u0B85\u0BB2\u0BCD\u0BB2\u0BA4\u0BC1 {product} \u0BAA\u0BB1\u0BCD\u0BB1\u0BBF\u0B95\u0BCD \u0B95\u0BC7\u0BB3\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD\u2026",
|
|
7085
|
+
placeholderScoped: "{product} \u0BAA\u0BB1\u0BCD\u0BB1\u0BBF\u0B95\u0BCD \u0B95\u0BC7\u0BB3\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD\u2026",
|
|
6999
7086
|
send: "\u0B85\u0BA9\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1",
|
|
7000
7087
|
stop: "\u0BA8\u0BBF\u0BB1\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1",
|
|
7001
7088
|
newChat: "\u0BAA\u0BC1\u0BA4\u0BBF\u0BAF \u0B89\u0BB0\u0BC8\u0BAF\u0BBE\u0B9F\u0BB2\u0BCD",
|
|
@@ -7017,6 +7104,7 @@ var TA = {
|
|
|
7017
7104
|
attachmentTooMany: "{{max}} \u0B95\u0BCB\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD \u0BAE\u0B9F\u0BCD\u0B9F\u0BC1\u0BAE\u0BC7 \u0B87\u0BA3\u0BC8\u0B95\u0BCD\u0B95 \u0BAE\u0BC1\u0B9F\u0BBF\u0BAF\u0BC1\u0BAE\u0BCD, \u0B8E\u0BA9\u0BB5\u0BC7 {{name}} \u0BA4\u0BB5\u0BBF\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1.",
|
|
7018
7105
|
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",
|
|
7019
7106
|
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.",
|
|
7107
|
+
toolBudgetScoped: "\u0B87\u0BA8\u0BCD\u0BA4\u0B95\u0BCD \u0B95\u0BC7\u0BB3\u0BCD\u0BB5\u0BBF\u0BAF\u0BBF\u0BB2\u0BCD \u0B92\u0BB0\u0BC7 \u0BAE\u0BC1\u0BB1\u0BC8\u0BAF\u0BBF\u0BB2\u0BCD \u0B8E\u0BA9\u0BCD\u0BA9\u0BBE\u0BB2\u0BCD \u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BA4\u0BC8 \u0BB5\u0BBF\u0B9F \u0B85\u0BA4\u0BBF\u0B95\u0BAE\u0BCD \u0B89\u0BB3\u0BCD\u0BB3\u0BA4\u0BC1. \u0B85\u0BA4\u0BA9\u0BCD \u0B92\u0BB0\u0BC1 \u0BAA\u0B95\u0BC1\u0BA4\u0BBF\u0BAF\u0BC8\u0BAA\u0BCD \u0BAA\u0BB1\u0BCD\u0BB1\u0BBF\u0B95\u0BCD \u0B95\u0BC7\u0B9F\u0BCD\u0B9F\u0BC1\u0BAA\u0BCD \u0BAA\u0BBE\u0BB0\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD.",
|
|
7020
7108
|
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",
|
|
7021
7109
|
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?",
|
|
7022
7110
|
feedbackHelpful: "\u0BAA\u0BAF\u0BA9\u0BC1\u0BB3\u0BCD\u0BB3\u0BA4\u0BC1",
|
|
@@ -7067,6 +7155,15 @@ var TA = {
|
|
|
7067
7155
|
closeVideo: "\u0BB5\u0BC0\u0B9F\u0BBF\u0BAF\u0BCB\u0BB5\u0BC8 \u0BAE\u0BC2\u0B9F\u0BC1",
|
|
7068
7156
|
enterFullScreen: "\u0BAE\u0BC1\u0BB4\u0BC1\u0BA4\u0BCD \u0BA4\u0BBF\u0BB0\u0BC8",
|
|
7069
7157
|
exitFullScreen: "\u0BAE\u0BC1\u0BB4\u0BC1\u0BA4\u0BCD \u0BA4\u0BBF\u0BB0\u0BC8\u0BAF\u0BBF\u0BB2\u0BBF\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4\u0BC1 \u0BB5\u0BC6\u0BB3\u0BBF\u0BAF\u0BC7\u0BB1\u0BC1",
|
|
7158
|
+
panelTitle: "AI \u0B89\u0BA4\u0BB5\u0BBF\u0BAF\u0BBE\u0BB3\u0BB0\u0BCD",
|
|
7159
|
+
panelTitleProduct: "{product} \u0B89\u0BA4\u0BB5\u0BBF\u0BAF\u0BBE\u0BB3\u0BB0\u0BCD",
|
|
7160
|
+
panelViews: "\u0B89\u0BA4\u0BB5\u0BBF\u0BAF\u0BBE\u0BB3\u0BB0\u0BCD \u0B95\u0BBE\u0B9F\u0BCD\u0B9A\u0BBF\u0B95\u0BB3\u0BCD",
|
|
7161
|
+
tabChat: "\u0B85\u0BB0\u0B9F\u0BCD\u0B9F\u0BC8",
|
|
7162
|
+
tabAvatar: "\u0B85\u0BB5\u0BA4\u0BBE\u0BB0\u0BCD",
|
|
7163
|
+
closePanel: "\u0BAE\u0BC2\u0B9F\u0BC1",
|
|
7164
|
+
liveAvatar: "\u0BA8\u0BC7\u0BB0\u0BB2\u0BC8 \u0B85\u0BB5\u0BA4\u0BBE\u0BB0\u0BCD",
|
|
7165
|
+
avatarComingSoon: "\u0BA8\u0BC7\u0BB0\u0BB2\u0BC8 \u0B85\u0BB5\u0BA4\u0BBE\u0BB0\u0BCD \u0BB5\u0BBF\u0BB0\u0BC8\u0BB5\u0BBF\u0BB2\u0BCD",
|
|
7166
|
+
continueInChat: "\u0B85\u0BB0\u0B9F\u0BCD\u0B9F\u0BC8\u0BAF\u0BBF\u0BB2\u0BCD \u0BA4\u0BCA\u0B9F\u0BB0\u0BB5\u0BC1\u0BAE\u0BCD",
|
|
7070
7167
|
videoUnavailable: "\u0B87\u0BA8\u0BCD\u0BA4 \u0BB5\u0BC0\u0B9F\u0BBF\u0BAF\u0BCB\u0BB5\u0BC8 \u0B87\u0BAA\u0BCD\u0BAA\u0BCB\u0BA4\u0BC1 \u0B87\u0BAF\u0B95\u0BCD\u0B95 \u0BAE\u0BC1\u0B9F\u0BBF\u0BAF\u0BB5\u0BBF\u0BB2\u0BCD\u0BB2\u0BC8.",
|
|
7071
7168
|
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",
|
|
7072
7169
|
sourceCountOne: "1 \u0BAE\u0BC2\u0BB2\u0BAE\u0BCD",
|
|
@@ -7079,6 +7176,7 @@ var TA = {
|
|
|
7079
7176
|
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",
|
|
7080
7177
|
seoDescription: "\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.",
|
|
7081
7178
|
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, \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.",
|
|
7179
|
+
seoDescriptionScoped: "{product} \u0BAA\u0BB1\u0BCD\u0BB1\u0BBF\u0BAF \u0BAA\u0BA4\u0BBF\u0BB2\u0BCD\u0B95\u0BB3\u0BCD, {product} \u0B86\u0BB5\u0BA3\u0B99\u0BCD\u0B95\u0BB3\u0BBF\u0BB2\u0BBF\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4\u0BC1, \u0B85\u0BB5\u0BC8 \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.",
|
|
7082
7180
|
capabilities: [
|
|
7083
7181
|
"\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",
|
|
7084
7182
|
"\u0BA4\u0BAF\u0BBE\u0BB0\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BC8 \u0B92\u0BAA\u0BCD\u0BAA\u0BBF\u0B9F\u0BC1\u0B99\u0BCD\u0B95\u0BB3\u0BCD",
|
|
@@ -7088,7 +7186,7 @@ var TA = {
|
|
|
7088
7186
|
"\u0B92\u0BB5\u0BCD\u0BB5\u0BCA\u0BB0\u0BC1 \u0BAA\u0BAF\u0BBF\u0BB1\u0BCD\u0B9A\u0BBF \u0BB5\u0B95\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0BAE\u0BCD \u0BB5\u0BC6\u0BB5\u0BCD\u0BB5\u0BC7\u0BB1\u0BC1 \u0BB5\u0BBF\u0BB0\u0BBF\u0BA4\u0BBE\u0BB3\u0BBF\u0BB2\u0BCD \u0B89\u0BB3\u0BCD\u0BB3\u0BA4\u0BC1.",
|
|
7089
7187
|
"\u0B87\u0BAF\u0BA8\u0BCD\u0BA4\u0BBF\u0BB0\u0BAE\u0BCD \u0BA8\u0BBF\u0BA9\u0BCD\u0BB1\u0BA4\u0BC1 \u0BB2\u0BC8\u0BA9\u0BCD \u0BA8\u0BBF\u0BB1\u0BCD\u0B95\u0BC1\u0BAE\u0BCD\u0BAA\u0BCB\u0BA4\u0BC1\u0BA4\u0BBE\u0BA9\u0BCD \u0BA4\u0BC6\u0BB0\u0BBF\u0BAF \u0BB5\u0BB0\u0BC1\u0B95\u0BBF\u0BB1\u0BA4\u0BC1.",
|
|
7090
7188
|
"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BBF\u0BA9\u0BB0\u0BCD\u0B95\u0BB3\u0BCD \u0BAE\u0BC6\u0BB2\u0BCD\u0BB2 \u0BB5\u0BB0\u0BC1\u0BB5\u0BA4\u0BC8 \u0BA8\u0BBF\u0BB1\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BBF\u0BB1\u0BBE\u0BB0\u0BCD\u0B95\u0BB3\u0BCD, \u0B95\u0BBE\u0BB0\u0BA3\u0BAE\u0BCD \u0BA4\u0BC6\u0BB0\u0BBF\u0BAF\u0BBE\u0BA4\u0BC1.",
|
|
7091
|
-
|
|
7189
|
+
PORTFOLIO_PROMPT.ta
|
|
7092
7190
|
]
|
|
7093
7191
|
};
|
|
7094
7192
|
var STRINGS = {
|
|
@@ -10223,7 +10321,9 @@ function useExploreChat(options = {}) {
|
|
|
10223
10321
|
pollTimeoutMs = DEFAULT_POLL_TIMEOUT_MS,
|
|
10224
10322
|
storageKey = DEFAULT_STORAGE_KEY,
|
|
10225
10323
|
persist = true,
|
|
10226
|
-
onSend
|
|
10324
|
+
onSend,
|
|
10325
|
+
enabled = true,
|
|
10326
|
+
shareToken: shareTokenOption
|
|
10227
10327
|
} = options;
|
|
10228
10328
|
const client = useWebSDK();
|
|
10229
10329
|
const { productId } = useWebSDKConfig();
|
|
@@ -10261,7 +10361,7 @@ function useExploreChat(options = {}) {
|
|
|
10261
10361
|
const [hasConversation, setHasConversation] = useState(false);
|
|
10262
10362
|
const shareTokenRef = useRef(void 0);
|
|
10263
10363
|
if (shareTokenRef.current === void 0) {
|
|
10264
|
-
shareTokenRef.current = readShareToken();
|
|
10364
|
+
shareTokenRef.current = shareTokenOption === void 0 ? readShareToken() : shareTokenOption;
|
|
10265
10365
|
}
|
|
10266
10366
|
const isSharedView = shareTokenRef.current !== null;
|
|
10267
10367
|
const catalogRef = useRef(catalog);
|
|
@@ -10299,6 +10399,7 @@ function useExploreChat(options = {}) {
|
|
|
10299
10399
|
};
|
|
10300
10400
|
}, []);
|
|
10301
10401
|
useEffect(() => {
|
|
10402
|
+
if (!enabled) return;
|
|
10302
10403
|
const shareToken = shareTokenRef.current;
|
|
10303
10404
|
if (!shareToken) return;
|
|
10304
10405
|
let cancelled = false;
|
|
@@ -10333,8 +10434,9 @@ function useExploreChat(options = {}) {
|
|
|
10333
10434
|
return () => {
|
|
10334
10435
|
cancelled = true;
|
|
10335
10436
|
};
|
|
10336
|
-
}, [client]);
|
|
10437
|
+
}, [client, enabled]);
|
|
10337
10438
|
useEffect(() => {
|
|
10439
|
+
if (!enabled) return;
|
|
10338
10440
|
if (shareTokenRef.current !== null) return;
|
|
10339
10441
|
if (!persist) {
|
|
10340
10442
|
setHydrated(true);
|
|
@@ -10359,9 +10461,10 @@ function useExploreChat(options = {}) {
|
|
|
10359
10461
|
setTurnCount(turns);
|
|
10360
10462
|
}
|
|
10361
10463
|
setHydrated(true);
|
|
10362
|
-
}, [persist, rememberConversationToken, storageKey]);
|
|
10464
|
+
}, [persist, rememberConversationToken, storageKey, enabled]);
|
|
10363
10465
|
useEffect(() => {
|
|
10364
|
-
if (!persist || !hydrated || typeof window === "undefined")
|
|
10466
|
+
if (!persist || !hydrated || isSharedView || typeof window === "undefined")
|
|
10467
|
+
return;
|
|
10365
10468
|
try {
|
|
10366
10469
|
const payload = {
|
|
10367
10470
|
conversationToken: conversationTokenRef.current,
|
|
@@ -10375,10 +10478,10 @@ function useExploreChat(options = {}) {
|
|
|
10375
10478
|
window.localStorage.setItem(storageKey, JSON.stringify(payload));
|
|
10376
10479
|
} catch {
|
|
10377
10480
|
}
|
|
10378
|
-
}, [persist, hydrated, storageKey, messages, focusProduct]);
|
|
10481
|
+
}, [persist, hydrated, isSharedView, storageKey, messages, focusProduct]);
|
|
10379
10482
|
useEffect(() => {
|
|
10380
10483
|
messagesRef.current = messages;
|
|
10381
|
-
if (!persist || !hydrated) return;
|
|
10484
|
+
if (!persist || !hydrated || isSharedView) return;
|
|
10382
10485
|
const settled = messages.some(
|
|
10383
10486
|
(m) => m.role === "ASSISTANT" && (m.status === "COMPLETED" || m.status === "FAILED")
|
|
10384
10487
|
);
|
|
@@ -10390,8 +10493,9 @@ function useExploreChat(options = {}) {
|
|
|
10390
10493
|
focusProduct: focusProductRef.current
|
|
10391
10494
|
})
|
|
10392
10495
|
);
|
|
10393
|
-
}, [messages, persist, hydrated, storageKey]);
|
|
10496
|
+
}, [messages, persist, hydrated, isSharedView, storageKey]);
|
|
10394
10497
|
useEffect(() => {
|
|
10498
|
+
if (!enabled) return;
|
|
10395
10499
|
let cancelled = false;
|
|
10396
10500
|
const load = async () => {
|
|
10397
10501
|
const variables = { productSlug: productSlug ?? null };
|
|
@@ -10432,7 +10536,7 @@ function useExploreChat(options = {}) {
|
|
|
10432
10536
|
return () => {
|
|
10433
10537
|
cancelled = true;
|
|
10434
10538
|
};
|
|
10435
|
-
}, [client, productSlug, fallbackCatalog, bakedRaw]);
|
|
10539
|
+
}, [client, productSlug, fallbackCatalog, bakedRaw, enabled]);
|
|
10436
10540
|
const startPolling = useCallback(
|
|
10437
10541
|
(conversationToken, messageId) => {
|
|
10438
10542
|
pollGenerationRef.current += 1;
|
|
@@ -10929,6 +11033,166 @@ function makeOptimisticId() {
|
|
|
10929
11033
|
optimisticCounter += 1;
|
|
10930
11034
|
return `boff-explore-local-${Date.now()}-${optimisticCounter}`;
|
|
10931
11035
|
}
|
|
11036
|
+
var ExploreConversationContext = createContext(null);
|
|
11037
|
+
var ExploreCatalogProductsContext = createContext(null);
|
|
11038
|
+
function useExploreConversation(options = {}) {
|
|
11039
|
+
const {
|
|
11040
|
+
productSlug,
|
|
11041
|
+
locale,
|
|
11042
|
+
examplePrompts,
|
|
11043
|
+
onSend,
|
|
11044
|
+
pageUrl,
|
|
11045
|
+
enabled,
|
|
11046
|
+
shareToken
|
|
11047
|
+
} = options;
|
|
11048
|
+
const urlAtMount = useMemo(
|
|
11049
|
+
() => typeof window === "undefined" ? void 0 : window.location.href,
|
|
11050
|
+
[]
|
|
11051
|
+
);
|
|
11052
|
+
const T = useMemo(
|
|
11053
|
+
() => exploreStrings(resolveExploreLocale(locale)),
|
|
11054
|
+
[locale]
|
|
11055
|
+
);
|
|
11056
|
+
const chat = useExploreChat({
|
|
11057
|
+
productSlug,
|
|
11058
|
+
pageUrl: pageUrl ?? urlAtMount,
|
|
11059
|
+
onSend,
|
|
11060
|
+
// Locale-aware, so a catalog outage degrades to a translated welcome rather than an English one.
|
|
11061
|
+
examplePrompts: examplePrompts ?? T.prompts,
|
|
11062
|
+
fallbackWelcome: { title: T.welcomeTitle, body: T.welcomeBody },
|
|
11063
|
+
...enabled === void 0 ? {} : { enabled },
|
|
11064
|
+
...shareToken === void 0 ? {} : { shareToken }
|
|
11065
|
+
});
|
|
11066
|
+
const [draft, setDraft] = useState("");
|
|
11067
|
+
const [staged, setStaged] = useState([]);
|
|
11068
|
+
return useMemo(
|
|
11069
|
+
() => ({ ...chat, draft, setDraft, staged, setStaged }),
|
|
11070
|
+
[chat, draft, staged]
|
|
11071
|
+
);
|
|
11072
|
+
}
|
|
11073
|
+
function ExploreChatProvider({
|
|
11074
|
+
enabled,
|
|
11075
|
+
children,
|
|
11076
|
+
...options
|
|
11077
|
+
}) {
|
|
11078
|
+
const [started, setStarted] = useState(enabled);
|
|
11079
|
+
if (enabled && !started) setStarted(true);
|
|
11080
|
+
const conversation = useExploreConversation({
|
|
11081
|
+
...options,
|
|
11082
|
+
// `enabled` as well as `started`: on the render that first sees `enabled`, the latch above has only been queued.
|
|
11083
|
+
enabled: enabled || started
|
|
11084
|
+
});
|
|
11085
|
+
return /* @__PURE__ */ jsx(ExploreConversationContext.Provider, { value: conversation, children: /* @__PURE__ */ jsx(
|
|
11086
|
+
ExploreCatalogProductsContext.Provider,
|
|
11087
|
+
{
|
|
11088
|
+
value: conversation.catalog.products,
|
|
11089
|
+
children
|
|
11090
|
+
}
|
|
11091
|
+
) });
|
|
11092
|
+
}
|
|
11093
|
+
|
|
11094
|
+
// src/components/explore-scope.ts
|
|
11095
|
+
function pinnedProductSlug(scope, productSlug) {
|
|
11096
|
+
if (scope !== "product" || productSlug === void 0) return null;
|
|
11097
|
+
return productSlug.trim() === "" ? null : productSlug;
|
|
11098
|
+
}
|
|
11099
|
+
function productNameFor(products, slug, given) {
|
|
11100
|
+
const own = given?.trim();
|
|
11101
|
+
if (own) return own;
|
|
11102
|
+
return products.find((product) => isSameProductSlug(product.slug, slug))?.name ?? null;
|
|
11103
|
+
}
|
|
11104
|
+
var NAME_CHARACTER = /[a-z0-9]/;
|
|
11105
|
+
var MIN_SPELLING_LENGTH = 3;
|
|
11106
|
+
function siteNameOf(website) {
|
|
11107
|
+
if (!website) return "";
|
|
11108
|
+
try {
|
|
11109
|
+
const labels = new URL(website).hostname.split(".");
|
|
11110
|
+
return labels.length >= 2 ? labels[labels.length - 2] ?? "" : "";
|
|
11111
|
+
} catch {
|
|
11112
|
+
return "";
|
|
11113
|
+
}
|
|
11114
|
+
}
|
|
11115
|
+
function spellingsOf(product) {
|
|
11116
|
+
const spellings = [
|
|
11117
|
+
product.name,
|
|
11118
|
+
product.name.replace(/\s+/g, ""),
|
|
11119
|
+
...productSlugVariants(product.slug),
|
|
11120
|
+
siteNameOf(product.website)
|
|
11121
|
+
].map((spelling) => spelling.trim().toLowerCase()).filter((spelling) => spelling.length >= MIN_SPELLING_LENGTH);
|
|
11122
|
+
return [...new Set(spellings)];
|
|
11123
|
+
}
|
|
11124
|
+
function wordAt(text, spelling, from = 0) {
|
|
11125
|
+
for (let at = text.indexOf(spelling, from); at !== -1; at = text.indexOf(spelling, at + 1)) {
|
|
11126
|
+
const before = text[at - 1];
|
|
11127
|
+
const after = text[at + spelling.length];
|
|
11128
|
+
const bounded = (before === void 0 || !NAME_CHARACTER.test(before)) && (after === void 0 || !NAME_CHARACTER.test(after));
|
|
11129
|
+
if (bounded) return at;
|
|
11130
|
+
}
|
|
11131
|
+
return -1;
|
|
11132
|
+
}
|
|
11133
|
+
function withoutWord(text, spelling) {
|
|
11134
|
+
let result = text;
|
|
11135
|
+
for (let at = wordAt(result, spelling); at !== -1; at = wordAt(result, spelling, at + spelling.length)) {
|
|
11136
|
+
result = `${result.slice(0, at)}${" ".repeat(spelling.length)}${result.slice(at + spelling.length)}`;
|
|
11137
|
+
}
|
|
11138
|
+
return result;
|
|
11139
|
+
}
|
|
11140
|
+
function anotherProductMatcher(products, pinnedSlug) {
|
|
11141
|
+
const own = productSlugVariants(pinnedSlug).map((slug) => slug.toLowerCase());
|
|
11142
|
+
const others = [];
|
|
11143
|
+
for (const product of products) {
|
|
11144
|
+
if (isSameProductSlug(product.slug, pinnedSlug)) {
|
|
11145
|
+
own.push(...spellingsOf(product));
|
|
11146
|
+
} else {
|
|
11147
|
+
others.push(...spellingsOf(product));
|
|
11148
|
+
}
|
|
11149
|
+
}
|
|
11150
|
+
const ownSpellings = [...new Set(own)].sort((a, b) => b.length - a.length);
|
|
11151
|
+
const otherSpellings = [...new Set(others)].filter(
|
|
11152
|
+
(spelling) => !ownSpellings.includes(spelling)
|
|
11153
|
+
);
|
|
11154
|
+
return (text) => {
|
|
11155
|
+
let rest = text.toLowerCase();
|
|
11156
|
+
for (const spelling of ownSpellings) rest = withoutWord(rest, spelling);
|
|
11157
|
+
return otherSpellings.some((spelling) => wordAt(rest, spelling) !== -1);
|
|
11158
|
+
};
|
|
11159
|
+
}
|
|
11160
|
+
function distinctPrompts(prompts) {
|
|
11161
|
+
return [...new Set(prompts.filter((prompt) => prompt.trim() !== ""))];
|
|
11162
|
+
}
|
|
11163
|
+
function productScopedPrompts(hostPrompts, catalogPrompts, namesAnotherProduct) {
|
|
11164
|
+
const own = distinctPrompts(hostPrompts ?? []);
|
|
11165
|
+
if (own.length > 0) return own;
|
|
11166
|
+
return distinctPrompts(
|
|
11167
|
+
catalogPrompts.filter(
|
|
11168
|
+
(prompt) => !isPortfolioPrompt(prompt) && !namesAnotherProduct(prompt)
|
|
11169
|
+
)
|
|
11170
|
+
);
|
|
11171
|
+
}
|
|
11172
|
+
function productScopedHighlights(highlights, pinnedSlug, namesAnotherProduct) {
|
|
11173
|
+
return highlights.filter(
|
|
11174
|
+
(highlight) => isSameProductSlug(highlight.product, pinnedSlug) && !namesAnotherProduct(`${highlight.title}
|
|
11175
|
+
${highlight.alt}`)
|
|
11176
|
+
);
|
|
11177
|
+
}
|
|
11178
|
+
function productScopedError(error, toolBudgetMessage) {
|
|
11179
|
+
return error.code === "TOOL_BUDGET" ? { ...error, message: toolBudgetMessage } : error;
|
|
11180
|
+
}
|
|
11181
|
+
function isDevelopmentBuild() {
|
|
11182
|
+
try {
|
|
11183
|
+
return process.env.NODE_ENV !== "production";
|
|
11184
|
+
} catch {
|
|
11185
|
+
return false;
|
|
11186
|
+
}
|
|
11187
|
+
}
|
|
11188
|
+
var warnedWithoutSlug = false;
|
|
11189
|
+
function warnProductScopeWithoutSlug() {
|
|
11190
|
+
if (warnedWithoutSlug || !isDevelopmentBuild()) return;
|
|
11191
|
+
warnedWithoutSlug = true;
|
|
11192
|
+
console.warn(
|
|
11193
|
+
`[WebSDK] Explore scope="product" needs a productSlug. Without one the assistant stays the portfolio's: every product, and a product picker.`
|
|
11194
|
+
);
|
|
11195
|
+
}
|
|
10932
11196
|
var DRAIN_TARGET_MS = 1200;
|
|
10933
11197
|
var MIN_CHARS_PER_SECOND = 90;
|
|
10934
11198
|
var MAX_CHARS_PER_SECOND = 2200;
|
|
@@ -12010,21 +12274,25 @@ var CAPABILITIES = [
|
|
|
12010
12274
|
{
|
|
12011
12275
|
icon: BookOpenText,
|
|
12012
12276
|
title: "Grounded in our own docs",
|
|
12013
|
-
body: "Every answer comes from published product pages and documentation \u2014 never invented."
|
|
12277
|
+
body: "Every answer comes from published product pages and documentation \u2014 never invented.",
|
|
12278
|
+
invitesOtherProducts: false
|
|
12014
12279
|
},
|
|
12015
12280
|
{
|
|
12016
12281
|
icon: Layers,
|
|
12017
12282
|
title: "Compare across the ecosystem",
|
|
12018
|
-
body: "Ask which product fits your team, or how two of them work together."
|
|
12283
|
+
body: "Ask which product fits your team, or how two of them work together.",
|
|
12284
|
+
invitesOtherProducts: true
|
|
12019
12285
|
},
|
|
12020
12286
|
{
|
|
12021
12287
|
icon: Link2,
|
|
12022
12288
|
title: "Straight to the right page",
|
|
12023
|
-
body: "Get the sources and next steps \u2014 pricing, docs, a demo \u2014 without hunting."
|
|
12289
|
+
body: "Get the sources and next steps \u2014 pricing, docs, a demo \u2014 without hunting.",
|
|
12290
|
+
invitesOtherProducts: false
|
|
12024
12291
|
}
|
|
12025
12292
|
];
|
|
12026
12293
|
var MIN_VISIBLE_FRACTION = 0.25;
|
|
12027
12294
|
var SDK_OVERLAY_SELECTOR = "[data-boff-explore]";
|
|
12295
|
+
var NO_PRODUCTS = [];
|
|
12028
12296
|
var CTA_VARIANTS = {
|
|
12029
12297
|
CONTACT: "default",
|
|
12030
12298
|
WAITLIST: "default",
|
|
@@ -13573,29 +13841,40 @@ function WelcomeState({
|
|
|
13573
13841
|
focusProduct,
|
|
13574
13842
|
onPrompt,
|
|
13575
13843
|
onFocus,
|
|
13576
|
-
disabled
|
|
13844
|
+
disabled,
|
|
13845
|
+
heading = "h1",
|
|
13846
|
+
productScoped = false
|
|
13577
13847
|
}) {
|
|
13848
|
+
const Heading = heading;
|
|
13578
13849
|
return /* @__PURE__ */ jsxs("div", { className: "boff-explore-aura mx-auto my-auto w-full max-w-3xl px-4 py-4 sm:py-5", children: [
|
|
13579
13850
|
/* @__PURE__ */ jsxs("div", { className: "boff-explore-rise text-center", children: [
|
|
13580
13851
|
/* @__PURE__ */ jsxs("span", { className: "boff-explore-hero-badge inline-flex items-center gap-1.5 rounded-full border border-border bg-muted px-3 py-1 text-xs font-medium text-muted-foreground", children: [
|
|
13581
13852
|
/* @__PURE__ */ jsx(Sparkles, { className: "h-3.5 w-3.5" }),
|
|
13582
13853
|
T.badge
|
|
13583
13854
|
] }),
|
|
13584
|
-
/* @__PURE__ */ jsx(
|
|
13855
|
+
/* @__PURE__ */ jsx(Heading, { className: "mt-2 text-balance break-words text-2xl font-bold tracking-tight sm:text-3xl", children: title }),
|
|
13585
13856
|
/* @__PURE__ */ jsx("p", { className: "mx-auto mt-2 max-w-2xl text-pretty text-sm leading-relaxed text-muted-foreground", children: body })
|
|
13586
13857
|
] }),
|
|
13587
|
-
/* @__PURE__ */ jsx(
|
|
13588
|
-
"
|
|
13858
|
+
/* @__PURE__ */ jsx(
|
|
13859
|
+
"ul",
|
|
13589
13860
|
{
|
|
13590
|
-
className:
|
|
13591
|
-
children:
|
|
13592
|
-
|
|
13593
|
-
|
|
13594
|
-
|
|
13595
|
-
|
|
13596
|
-
|
|
13597
|
-
|
|
13598
|
-
|
|
13861
|
+
className: `boff-explore-capabilities boff-explore-rise boff-explore-rise-1 mt-4 grid ${productScoped ? "grid-cols-2" : "grid-cols-3"} gap-2 sm:gap-2.5`,
|
|
13862
|
+
children: CAPABILITIES.map(
|
|
13863
|
+
({ icon: Icon, body: capBody, invitesOtherProducts }, i) => productScoped && invitesOtherProducts ? null : /* @__PURE__ */ jsxs(
|
|
13864
|
+
"li",
|
|
13865
|
+
{
|
|
13866
|
+
className: "rounded-xl border border-border/70 bg-card/60 p-2.5 text-center transition-colors hover:border-border sm:p-2.5 sm:text-left",
|
|
13867
|
+
children: [
|
|
13868
|
+
/* @__PURE__ */ jsx("span", { className: "mx-auto mb-1.5 flex h-7 w-7 items-center justify-center rounded-lg bg-primary/10 text-primary sm:mx-0 sm:mb-2 sm:h-8 sm:w-8", children: /* @__PURE__ */ jsx(Icon, { className: "h-3.5 w-3.5 sm:h-4 sm:w-4" }) }),
|
|
13869
|
+
/* @__PURE__ */ jsx("p", { className: "text-[11px] font-semibold leading-tight text-card-foreground sm:text-sm sm:leading-snug", children: T.capabilities[i] ?? "" }),
|
|
13870
|
+
/* @__PURE__ */ jsx("p", { className: "mt-1 hidden text-xs leading-snug text-muted-foreground lg:block", children: capBody })
|
|
13871
|
+
]
|
|
13872
|
+
},
|
|
13873
|
+
i
|
|
13874
|
+
)
|
|
13875
|
+
)
|
|
13876
|
+
}
|
|
13877
|
+
),
|
|
13599
13878
|
prompts.length > 0 ? /* @__PURE__ */ jsx("div", { className: "boff-explore-rise boff-explore-rise-2 mt-4", children: /* @__PURE__ */ jsx(
|
|
13600
13879
|
PromptCarousel,
|
|
13601
13880
|
{
|
|
@@ -13636,19 +13915,39 @@ function exploreQuestionHref(question, base = "/explore") {
|
|
|
13636
13915
|
const joiner = base.includes("?") ? "&" : "?";
|
|
13637
13916
|
return `${base}${joiner}q=${encodeURIComponent(trimmed)}`;
|
|
13638
13917
|
}
|
|
13639
|
-
function ExplorePage({
|
|
13918
|
+
function ExplorePage(props) {
|
|
13919
|
+
const shared = useContext(ExploreConversationContext);
|
|
13920
|
+
return shared ? /* @__PURE__ */ jsx(ExploreView, { ...props, conversation: shared }) : /* @__PURE__ */ jsx(StandaloneExplorePage, { ...props });
|
|
13921
|
+
}
|
|
13922
|
+
function StandaloneExplorePage(props) {
|
|
13923
|
+
const conversation = useExploreConversation({
|
|
13924
|
+
productSlug: props.productSlug,
|
|
13925
|
+
locale: props.locale,
|
|
13926
|
+
examplePrompts: props.examplePrompts,
|
|
13927
|
+
onSend: props.onSend
|
|
13928
|
+
});
|
|
13929
|
+
return /* @__PURE__ */ jsx(ExploreView, { ...props, conversation });
|
|
13930
|
+
}
|
|
13931
|
+
function ExploreView({
|
|
13640
13932
|
seo,
|
|
13641
13933
|
productSlug,
|
|
13642
|
-
examplePrompts,
|
|
13643
13934
|
className,
|
|
13644
13935
|
heightMode = "viewport",
|
|
13645
13936
|
viewportOffset,
|
|
13646
13937
|
onNavigate,
|
|
13647
|
-
onSend,
|
|
13648
13938
|
welcomeTitle,
|
|
13649
13939
|
welcomeBody,
|
|
13650
|
-
locale
|
|
13940
|
+
locale,
|
|
13941
|
+
presentation = "page",
|
|
13942
|
+
active = true,
|
|
13943
|
+
explorePath = "/explore",
|
|
13944
|
+
examplePrompts,
|
|
13945
|
+
scope,
|
|
13946
|
+
productName,
|
|
13947
|
+
conversation
|
|
13651
13948
|
}) {
|
|
13949
|
+
const panel = presentation === "panel";
|
|
13950
|
+
const viewportPage = !panel && heightMode === "viewport";
|
|
13652
13951
|
const pageUrl = useMemo(
|
|
13653
13952
|
() => typeof window === "undefined" ? void 0 : window.location.href,
|
|
13654
13953
|
[]
|
|
@@ -13684,26 +13983,21 @@ function ExplorePage({
|
|
|
13684
13983
|
escalate,
|
|
13685
13984
|
canEscalate,
|
|
13686
13985
|
createShareLink,
|
|
13687
|
-
isSharedView
|
|
13688
|
-
|
|
13689
|
-
|
|
13690
|
-
|
|
13691
|
-
|
|
13692
|
-
|
|
13693
|
-
// English one. `T.prompts` seeds the chips the same way.
|
|
13694
|
-
examplePrompts: examplePrompts ?? T.prompts,
|
|
13695
|
-
fallbackWelcome: { title: T.welcomeTitle, body: T.welcomeBody }
|
|
13696
|
-
});
|
|
13697
|
-
const [draft, setDraft] = useState("");
|
|
13986
|
+
isSharedView,
|
|
13987
|
+
draft,
|
|
13988
|
+
setDraft,
|
|
13989
|
+
staged,
|
|
13990
|
+
setStaged
|
|
13991
|
+
} = conversation;
|
|
13698
13992
|
const textareaRef = useRef(null);
|
|
13699
13993
|
useEffect(() => {
|
|
13700
|
-
if (typeof window === "undefined") return;
|
|
13994
|
+
if (typeof window === "undefined" || panel) return;
|
|
13701
13995
|
const params = new URLSearchParams(window.location.search);
|
|
13702
13996
|
if (params.has("c")) return;
|
|
13703
13997
|
const question = params.get("q")?.trim();
|
|
13704
13998
|
if (!question) return;
|
|
13705
13999
|
setDraft(question.slice(0, EXPLORE_PREFILL_MAX_LENGTH));
|
|
13706
|
-
}, []);
|
|
14000
|
+
}, [panel, setDraft]);
|
|
13707
14001
|
const [historyOpen, setHistoryOpen] = useState(false);
|
|
13708
14002
|
const speechStopRef = useRef(() => void 0);
|
|
13709
14003
|
const stopDictation = useCallback(() => {
|
|
@@ -13719,8 +14013,12 @@ function ExplorePage({
|
|
|
13719
14013
|
}
|
|
13720
14014
|
});
|
|
13721
14015
|
speechStopRef.current = speech.stop;
|
|
14016
|
+
useEffect(() => {
|
|
14017
|
+
if (active) return;
|
|
14018
|
+
stopDictation();
|
|
14019
|
+
stopSpeaking();
|
|
14020
|
+
}, [active, stopDictation]);
|
|
13722
14021
|
const [disclaimerOpen, setDisclaimerOpen] = useState(false);
|
|
13723
|
-
const [staged, setStaged] = useState([]);
|
|
13724
14022
|
const [attachmentNotice, setAttachmentNotice] = useState(null);
|
|
13725
14023
|
const fileInputRef = useRef(null);
|
|
13726
14024
|
const stagedRef = useRef([]);
|
|
@@ -13740,16 +14038,47 @@ function ExplorePage({
|
|
|
13740
14038
|
const maxLength = catalog.limits.maxMessageLength;
|
|
13741
14039
|
const overLimit = draft.length > maxLength;
|
|
13742
14040
|
const canSubmit = canSend && draft.trim().length > 0 && !overLimit && !busy;
|
|
13743
|
-
const
|
|
13744
|
-
|
|
13745
|
-
|
|
14041
|
+
const pinnedSlug = pinnedProductSlug(scope, productSlug);
|
|
14042
|
+
useEffect(() => {
|
|
14043
|
+
if (scope === "product" && pinnedSlug === null) {
|
|
14044
|
+
warnProductScopeWithoutSlug();
|
|
14045
|
+
}
|
|
14046
|
+
}, [pinnedSlug, scope]);
|
|
14047
|
+
const pinnedName = useMemo(
|
|
14048
|
+
() => pinnedSlug === null ? null : productNameFor(catalog.products, pinnedSlug, productName),
|
|
14049
|
+
[catalog.products, pinnedSlug, productName]
|
|
14050
|
+
);
|
|
14051
|
+
const namesAnotherProduct = useMemo(
|
|
14052
|
+
() => pinnedSlug === null ? null : anotherProductMatcher(catalog.products, pinnedSlug),
|
|
14053
|
+
[catalog.products, pinnedSlug]
|
|
14054
|
+
);
|
|
14055
|
+
const resolvedTitle = welcomeTitle ?? (namesAnotherProduct?.(catalog.welcomeTitle) ? T.welcomeTitle : catalog.welcomeTitle);
|
|
14056
|
+
const resolvedBody = welcomeBody ?? (pinnedSlug === null ? catalog.welcomeBody : pinnedName === null ? T.welcomeBodyScoped : fill(T.welcomeBodyProduct, { product: pinnedName }));
|
|
14057
|
+
const prompts = useMemo(
|
|
14058
|
+
() => namesAnotherProduct === null ? catalog.examplePrompts : productScopedPrompts(
|
|
14059
|
+
examplePrompts,
|
|
14060
|
+
catalog.examplePrompts,
|
|
14061
|
+
namesAnotherProduct
|
|
14062
|
+
),
|
|
14063
|
+
[catalog.examplePrompts, examplePrompts, namesAnotherProduct]
|
|
14064
|
+
);
|
|
14065
|
+
const conceptHighlights = useMemo(
|
|
14066
|
+
() => pinnedSlug === null || namesAnotherProduct === null ? catalog.conceptHighlights : productScopedHighlights(
|
|
14067
|
+
catalog.conceptHighlights,
|
|
14068
|
+
pinnedSlug,
|
|
14069
|
+
namesAnotherProduct
|
|
14070
|
+
),
|
|
14071
|
+
[catalog.conceptHighlights, namesAnotherProduct, pinnedSlug]
|
|
14072
|
+
);
|
|
13746
14073
|
const focusedProductName = useMemo(
|
|
13747
|
-
() => catalog.products.find((p) => isSameProductSlug(p.slug, focusProduct))?.name ?? null,
|
|
13748
|
-
[catalog.products, focusProduct]
|
|
14074
|
+
() => pinnedSlug !== null ? pinnedName : catalog.products.find((p) => isSameProductSlug(p.slug, focusProduct))?.name ?? null,
|
|
14075
|
+
[catalog.products, focusProduct, pinnedName, pinnedSlug]
|
|
13749
14076
|
);
|
|
13750
14077
|
const headProductName = useMemo(
|
|
13751
|
-
() => productSlug ? catalog.products.find(
|
|
13752
|
-
|
|
14078
|
+
() => pinnedSlug !== null ? pinnedName : productSlug ? catalog.products.find(
|
|
14079
|
+
(p) => isSameProductSlug(p.slug, productSlug)
|
|
14080
|
+
)?.name ?? null : null,
|
|
14081
|
+
[catalog.products, pinnedName, pinnedSlug, productSlug]
|
|
13753
14082
|
);
|
|
13754
14083
|
const imageOrigins = useMemo(
|
|
13755
14084
|
() => inlineImageOrigins(catalog.products),
|
|
@@ -13773,7 +14102,7 @@ function ExplorePage({
|
|
|
13773
14102
|
const [bottomInset, setBottomInset] = useState(0);
|
|
13774
14103
|
const paneOffsetRef = useRef(0);
|
|
13775
14104
|
const measurePane = useCallback(() => {
|
|
13776
|
-
if (
|
|
14105
|
+
if (!viewportPage) return;
|
|
13777
14106
|
const el = rootRef.current;
|
|
13778
14107
|
if (!el) return;
|
|
13779
14108
|
const layoutHeight = window.innerHeight;
|
|
@@ -13792,7 +14121,7 @@ function ExplorePage({
|
|
|
13792
14121
|
paneOffsetRef.current = top;
|
|
13793
14122
|
setPaneOffset((current) => current === top ? current : top);
|
|
13794
14123
|
setBottomInset((current) => current === inset ? current : inset);
|
|
13795
|
-
}, [
|
|
14124
|
+
}, [viewportPage]);
|
|
13796
14125
|
const [chromeOverlap, setChromeOverlap] = useState(0);
|
|
13797
14126
|
const measureChrome = useCallback(() => {
|
|
13798
14127
|
const root = rootRef.current;
|
|
@@ -13817,7 +14146,7 @@ function ExplorePage({
|
|
|
13817
14146
|
measureChrome();
|
|
13818
14147
|
}, [measurePane, measureChrome]);
|
|
13819
14148
|
useEffect(() => {
|
|
13820
|
-
if (typeof window === "undefined") return;
|
|
14149
|
+
if (typeof window === "undefined" || panel) return;
|
|
13821
14150
|
let frame = 0;
|
|
13822
14151
|
const run = () => {
|
|
13823
14152
|
frame = 0;
|
|
@@ -13855,12 +14184,12 @@ function ExplorePage({
|
|
|
13855
14184
|
setBottomInset(0);
|
|
13856
14185
|
setChromeOverlap(0);
|
|
13857
14186
|
};
|
|
13858
|
-
}, [remeasure]);
|
|
14187
|
+
}, [remeasure, panel]);
|
|
13859
14188
|
useEffect(() => {
|
|
13860
14189
|
measureChrome();
|
|
13861
14190
|
}, [measureChrome, paneOffset, bottomInset]);
|
|
13862
14191
|
useEffect(() => {
|
|
13863
|
-
if (
|
|
14192
|
+
if (!viewportPage || typeof window === "undefined") return;
|
|
13864
14193
|
const { history: browserHistory } = window;
|
|
13865
14194
|
const previousRestoration = "scrollRestoration" in browserHistory ? browserHistory.scrollRestoration : null;
|
|
13866
14195
|
if (previousRestoration !== null)
|
|
@@ -13928,14 +14257,14 @@ function ExplorePage({
|
|
|
13928
14257
|
if (previousRestoration !== null)
|
|
13929
14258
|
browserHistory.scrollRestoration = previousRestoration;
|
|
13930
14259
|
};
|
|
13931
|
-
}, [
|
|
14260
|
+
}, [viewportPage, remeasure]);
|
|
13932
14261
|
const handleScroll = useCallback(() => {
|
|
13933
14262
|
const el = scrollRef.current;
|
|
13934
14263
|
if (!el) return;
|
|
13935
14264
|
stickToBottomRef.current = el.scrollHeight - el.scrollTop - el.clientHeight < 80;
|
|
13936
14265
|
}, []);
|
|
13937
14266
|
useEffect(() => {
|
|
13938
|
-
if (typeof window === "undefined") return;
|
|
14267
|
+
if (typeof window === "undefined" || panel) return;
|
|
13939
14268
|
let frame = 0;
|
|
13940
14269
|
const run = () => {
|
|
13941
14270
|
frame = 0;
|
|
@@ -13958,7 +14287,7 @@ function ExplorePage({
|
|
|
13958
14287
|
if (frame) window.cancelAnimationFrame(frame);
|
|
13959
14288
|
window.removeEventListener("scroll", schedule);
|
|
13960
14289
|
};
|
|
13961
|
-
}, []);
|
|
14290
|
+
}, [panel]);
|
|
13962
14291
|
const latestAssistantId = useMemo(() => {
|
|
13963
14292
|
for (let i = messages.length - 1; i >= 0; i -= 1) {
|
|
13964
14293
|
const message = messages[i];
|
|
@@ -13974,7 +14303,7 @@ function ExplorePage({
|
|
|
13974
14303
|
if (!stickToBottomRef.current) return;
|
|
13975
14304
|
if (anchor.offsetHeight === 0) return;
|
|
13976
14305
|
alignedForRef.current = latestAssistantId;
|
|
13977
|
-
if (!pageOwnsScrolling(el)) {
|
|
14306
|
+
if (panel || !pageOwnsScrolling(el)) {
|
|
13978
14307
|
const delta2 = anchor.getBoundingClientRect().top - el.getBoundingClientRect().top;
|
|
13979
14308
|
el.scrollTop = Math.max(0, el.scrollTop + delta2 - 12);
|
|
13980
14309
|
return;
|
|
@@ -13983,7 +14312,7 @@ function ExplorePage({
|
|
|
13983
14312
|
anchor.getBoundingClientRect().top - paneOffsetRef.current - 12
|
|
13984
14313
|
);
|
|
13985
14314
|
if (delta !== 0) window.scrollBy({ top: delta, left: 0, behavior: "auto" });
|
|
13986
|
-
}, [latestAssistantId, messages]);
|
|
14315
|
+
}, [latestAssistantId, messages, panel]);
|
|
13987
14316
|
useEffect(() => {
|
|
13988
14317
|
if (messages.length === 0) return;
|
|
13989
14318
|
if (!stickToBottomRef.current) return;
|
|
@@ -13991,7 +14320,7 @@ function ExplorePage({
|
|
|
13991
14320
|
return;
|
|
13992
14321
|
const el = scrollRef.current;
|
|
13993
14322
|
if (!el) return;
|
|
13994
|
-
if (!pageOwnsScrolling(el)) {
|
|
14323
|
+
if (panel || !pageOwnsScrolling(el)) {
|
|
13995
14324
|
el.scrollTop = el.scrollHeight;
|
|
13996
14325
|
return;
|
|
13997
14326
|
}
|
|
@@ -14000,7 +14329,7 @@ function ExplorePage({
|
|
|
14000
14329
|
dock.getBoundingClientRect().bottom - visualViewportHeight()
|
|
14001
14330
|
);
|
|
14002
14331
|
if (delta > 0) window.scrollBy({ top: delta, left: 0, behavior: "auto" });
|
|
14003
|
-
}, [activity, latestAssistantId, messages]);
|
|
14332
|
+
}, [activity, latestAssistantId, messages, panel]);
|
|
14004
14333
|
const handleShare = useCallback(async () => {
|
|
14005
14334
|
setShareLabel(T.copying);
|
|
14006
14335
|
setShareUrl(null);
|
|
@@ -14010,7 +14339,7 @@ function ExplorePage({
|
|
|
14010
14339
|
setTimeout(() => setShareLabel(T.share), 2500);
|
|
14011
14340
|
return;
|
|
14012
14341
|
}
|
|
14013
|
-
const url = new URL(pageUrl ?? window.location.href);
|
|
14342
|
+
const url = panel ? new URL(explorePath, window.location.href) : new URL(pageUrl ?? window.location.href);
|
|
14014
14343
|
url.search = "";
|
|
14015
14344
|
url.hash = "";
|
|
14016
14345
|
url.searchParams.set("c", token);
|
|
@@ -14026,6 +14355,8 @@ function ExplorePage({
|
|
|
14026
14355
|
}, [
|
|
14027
14356
|
createShareLink,
|
|
14028
14357
|
pageUrl,
|
|
14358
|
+
panel,
|
|
14359
|
+
explorePath,
|
|
14029
14360
|
T.copied,
|
|
14030
14361
|
T.copying,
|
|
14031
14362
|
T.share,
|
|
@@ -14054,12 +14385,26 @@ function ExplorePage({
|
|
|
14054
14385
|
});
|
|
14055
14386
|
return pickQueueRef.current;
|
|
14056
14387
|
},
|
|
14057
|
-
[T]
|
|
14388
|
+
[T, setStaged]
|
|
14389
|
+
);
|
|
14390
|
+
const removeAttachment = useCallback(
|
|
14391
|
+
(id) => {
|
|
14392
|
+
setStaged((prev) => prev.filter((entry) => entry.id !== id));
|
|
14393
|
+
setAttachmentNotice(null);
|
|
14394
|
+
},
|
|
14395
|
+
[setStaged]
|
|
14396
|
+
);
|
|
14397
|
+
const pinFocus = useCallback(() => {
|
|
14398
|
+
if (pinnedSlug !== null) setFocusProduct(pinnedSlug);
|
|
14399
|
+
}, [pinnedSlug, setFocusProduct]);
|
|
14400
|
+
const retryTurn = useCallback(() => {
|
|
14401
|
+
pinFocus();
|
|
14402
|
+
retry();
|
|
14403
|
+
}, [pinFocus, retry]);
|
|
14404
|
+
const shownError = useMemo(
|
|
14405
|
+
() => error !== null && pinnedSlug !== null ? productScopedError(error, T.toolBudgetScoped) : error,
|
|
14406
|
+
[T, error, pinnedSlug]
|
|
14058
14407
|
);
|
|
14059
|
-
const removeAttachment = useCallback((id) => {
|
|
14060
|
-
setStaged((prev) => prev.filter((entry) => entry.id !== id));
|
|
14061
|
-
setAttachmentNotice(null);
|
|
14062
|
-
}, []);
|
|
14063
14408
|
const submitDraft = useCallback(() => {
|
|
14064
14409
|
const text = draft.trim();
|
|
14065
14410
|
if (!text || overLimit || busy || !canSend) return;
|
|
@@ -14067,22 +14412,34 @@ function ExplorePage({
|
|
|
14067
14412
|
stopSpeaking();
|
|
14068
14413
|
setDraft("");
|
|
14069
14414
|
stickToBottomRef.current = true;
|
|
14415
|
+
pinFocus();
|
|
14070
14416
|
void send(text, toPayload(stagedRef.current));
|
|
14071
14417
|
setStaged([]);
|
|
14072
14418
|
setAttachmentNotice(null);
|
|
14073
14419
|
textareaRef.current?.focus();
|
|
14074
|
-
}, [
|
|
14420
|
+
}, [
|
|
14421
|
+
busy,
|
|
14422
|
+
canSend,
|
|
14423
|
+
draft,
|
|
14424
|
+
overLimit,
|
|
14425
|
+
pinFocus,
|
|
14426
|
+
send,
|
|
14427
|
+
setDraft,
|
|
14428
|
+
setStaged,
|
|
14429
|
+
stopDictation
|
|
14430
|
+
]);
|
|
14075
14431
|
const sendPrompt = useCallback(
|
|
14076
14432
|
(prompt) => {
|
|
14077
14433
|
if (!canSend || busy) return;
|
|
14078
14434
|
stopSpeaking();
|
|
14079
14435
|
setDraft("");
|
|
14080
14436
|
stickToBottomRef.current = true;
|
|
14437
|
+
pinFocus();
|
|
14081
14438
|
void send(prompt, toPayload(stagedRef.current));
|
|
14082
14439
|
setStaged([]);
|
|
14083
14440
|
setAttachmentNotice(null);
|
|
14084
14441
|
},
|
|
14085
|
-
[busy, canSend, send]
|
|
14442
|
+
[busy, canSend, pinFocus, send, setDraft, setStaged]
|
|
14086
14443
|
);
|
|
14087
14444
|
const handleKeyDown = useCallback(
|
|
14088
14445
|
(event) => {
|
|
@@ -14104,7 +14461,7 @@ function ExplorePage({
|
|
|
14104
14461
|
[serverCatalogRaw]
|
|
14105
14462
|
);
|
|
14106
14463
|
const rootStyle = {};
|
|
14107
|
-
if (
|
|
14464
|
+
if (viewportPage) {
|
|
14108
14465
|
rootStyle["--boff-explore-offset"] = paneOffset === null ? normalizeOffset(viewportOffset) : `${paneOffset}px`;
|
|
14109
14466
|
if (bottomInset > 0) {
|
|
14110
14467
|
rootStyle["--boff-explore-inset"] = `${bottomInset}px`;
|
|
@@ -14117,23 +14474,29 @@ function ExplorePage({
|
|
|
14117
14474
|
"div",
|
|
14118
14475
|
{
|
|
14119
14476
|
ref: rootRef,
|
|
14120
|
-
"data-boff-explore": "page",
|
|
14477
|
+
"data-boff-explore": panel ? "panel" : "page",
|
|
14121
14478
|
"data-phase": phase,
|
|
14122
14479
|
"data-locale": activeLocale,
|
|
14123
14480
|
dir: rtl ? "rtl" : void 0,
|
|
14124
14481
|
className: cn(
|
|
14125
|
-
"flex w-full min-w-0 flex-col overflow-x-hidden bg-background text-foreground",
|
|
14126
|
-
|
|
14127
|
-
heightMode === "auto" && "min-h-[70vh]",
|
|
14482
|
+
panel ? "boff-explore-panel flex h-full min-h-0 w-full min-w-0 flex-col overflow-hidden bg-background text-foreground" : "flex w-full min-w-0 flex-col overflow-x-hidden bg-background text-foreground",
|
|
14483
|
+
viewportPage && "boff-explore-viewport",
|
|
14484
|
+
!panel && heightMode === "auto" && "min-h-[70vh]",
|
|
14128
14485
|
className
|
|
14129
14486
|
),
|
|
14130
|
-
style: rootStyle,
|
|
14487
|
+
style: panel ? void 0 : rootStyle,
|
|
14131
14488
|
children: [
|
|
14132
|
-
/* @__PURE__ */ jsx(
|
|
14489
|
+
panel ? null : /* @__PURE__ */ jsx(
|
|
14133
14490
|
PageHead,
|
|
14134
14491
|
{
|
|
14135
14492
|
title: seo?.title ?? T.seoTitle,
|
|
14136
|
-
description: seo?.description ?? (headProductName ? fill(
|
|
14493
|
+
description: seo?.description ?? (headProductName ? fill(
|
|
14494
|
+
// BOFF-9796: one product's own page promises that product's answers alone, never "and every
|
|
14495
|
+
// other product we build". The title ("Describe a problem, get an answer | {product}") and the
|
|
14496
|
+
// site name already name this product only, and the og:/twitter: tags repeat these two.
|
|
14497
|
+
pinnedSlug === null ? T.seoDescriptionProduct : T.seoDescriptionScoped,
|
|
14498
|
+
{ product: headProductName }
|
|
14499
|
+
) : T.seoDescription),
|
|
14137
14500
|
productName: seo?.title ? void 0 : headProductName ?? void 0,
|
|
14138
14501
|
keywords: seo?.keywords,
|
|
14139
14502
|
image: seo?.image,
|
|
@@ -14142,7 +14505,11 @@ function ExplorePage({
|
|
|
14142
14505
|
),
|
|
14143
14506
|
/* @__PURE__ */ jsx(ProseStyles, {}),
|
|
14144
14507
|
/* @__PURE__ */ jsx(ExploreStyles, {}),
|
|
14145
|
-
|
|
14508
|
+
panel ? /* @__PURE__ */ jsx("style", { children: `.boff-explore-panel .boff-explore-scroll { container: boff-explore-pane / size; }
|
|
14509
|
+
@container boff-explore-pane (width < ${toRem(WELCOME_FIT_MIN_WIDTH_PX)}) {
|
|
14510
|
+
.boff-explore-panel .boff-explore-scroll .boff-explore-capabilities { display: none; }
|
|
14511
|
+
}` }) : null,
|
|
14512
|
+
!panel && bakedCatalogJson ? /* @__PURE__ */ jsx(
|
|
14146
14513
|
"script",
|
|
14147
14514
|
{
|
|
14148
14515
|
id: BAKED_CATALOG_ELEMENT_ID,
|
|
@@ -14162,7 +14529,7 @@ function ExplorePage({
|
|
|
14162
14529
|
children: /* @__PURE__ */ jsx(Sparkles, { className: "h-4 w-4" })
|
|
14163
14530
|
}
|
|
14164
14531
|
),
|
|
14165
|
-
/* @__PURE__ */ jsx("h1", { className: "truncate text-sm font-semibold", children: resolvedTitle }),
|
|
14532
|
+
panel ? /* @__PURE__ */ jsx("h2", { className: "truncate text-sm font-semibold", children: resolvedTitle }) : /* @__PURE__ */ jsx("h1", { className: "truncate text-sm font-semibold", children: resolvedTitle }),
|
|
14166
14533
|
focusedProductName ? /* @__PURE__ */ jsx("span", { className: "hidden shrink-0 rounded-full bg-secondary px-2 py-0.5 text-xs font-medium text-secondary-foreground sm:inline", children: focusedProductName }) : null,
|
|
14167
14534
|
/* @__PURE__ */ jsxs(
|
|
14168
14535
|
Button,
|
|
@@ -14306,16 +14673,18 @@ function ExplorePage({
|
|
|
14306
14673
|
children: showWelcome ? /* @__PURE__ */ jsx(
|
|
14307
14674
|
WelcomeState,
|
|
14308
14675
|
{
|
|
14676
|
+
heading: panel ? "h2" : "h1",
|
|
14309
14677
|
strings: T,
|
|
14310
14678
|
title: resolvedTitle,
|
|
14311
14679
|
body: resolvedBody,
|
|
14312
14680
|
prompts,
|
|
14313
|
-
products: catalog.products,
|
|
14314
|
-
conceptHighlights
|
|
14681
|
+
products: pinnedSlug === null ? catalog.products : NO_PRODUCTS,
|
|
14682
|
+
conceptHighlights,
|
|
14315
14683
|
focusProduct,
|
|
14316
14684
|
onPrompt: sendPrompt,
|
|
14317
14685
|
onFocus: setFocusProduct,
|
|
14318
|
-
disabled: !canSend || busy
|
|
14686
|
+
disabled: !canSend || busy,
|
|
14687
|
+
productScoped: pinnedSlug !== null
|
|
14319
14688
|
}
|
|
14320
14689
|
) : /* @__PURE__ */ jsx("div", { className: "mx-auto w-full min-w-0 max-w-3xl space-y-6 px-4 py-6", children: messages.map(
|
|
14321
14690
|
(message) => message.role === "USER" ? /* @__PURE__ */ jsx(UserBubble, { strings: T, message }, message.id) : /* @__PURE__ */ jsx(
|
|
@@ -14392,7 +14761,14 @@ function ExplorePage({
|
|
|
14392
14761
|
submitDraft();
|
|
14393
14762
|
},
|
|
14394
14763
|
children: [
|
|
14395
|
-
|
|
14764
|
+
shownError ? /* @__PURE__ */ jsx(
|
|
14765
|
+
ErrorBanner,
|
|
14766
|
+
{
|
|
14767
|
+
error: shownError,
|
|
14768
|
+
onRetry: retryTurn,
|
|
14769
|
+
onReset: reset
|
|
14770
|
+
}
|
|
14771
|
+
) : null,
|
|
14396
14772
|
staged.length > 0 ? /* @__PURE__ */ jsx(
|
|
14397
14773
|
"ul",
|
|
14398
14774
|
{
|
|
@@ -14478,9 +14854,14 @@ function ExplorePage({
|
|
|
14478
14854
|
composingRef.current = false;
|
|
14479
14855
|
},
|
|
14480
14856
|
"aria-label": "Ask a question",
|
|
14481
|
-
placeholder: composerDisabled ? phase === "limited" ? "Message limit reached \u2014 please try again later" : "Explore is unavailable right now" : focusedProductName ? fill(
|
|
14482
|
-
|
|
14483
|
-
|
|
14857
|
+
placeholder: composerDisabled ? phase === "limited" ? "Message limit reached \u2014 please try again later" : "Explore is unavailable right now" : focusedProductName ? fill(
|
|
14858
|
+
// BOFF-9796: one product's own assistant keeps this field exactly as every site has it, its
|
|
14859
|
+
// classes and its fit to the draft alone; only its placeholder says less. On a phone the
|
|
14860
|
+
// field is one line tall and cuts off a placeholder that wraps: in English, "Ask about
|
|
14861
|
+
// {product}…" fits that line at 320px and wider.
|
|
14862
|
+
pinnedSlug === null ? T.placeholderProduct : T.placeholderScoped,
|
|
14863
|
+
{ product: focusedProductName }
|
|
14864
|
+
) : T.placeholder,
|
|
14484
14865
|
className: "max-h-[200px] min-h-[44px] w-full min-w-0 flex-1 resize-none border-0 bg-transparent px-2 py-2.5 text-base shadow-none focus-visible:ring-0 sm:text-sm"
|
|
14485
14866
|
}
|
|
14486
14867
|
),
|
|
@@ -14668,77 +15049,777 @@ function samePath(a, b) {
|
|
|
14668
15049
|
const norm = (v) => v.length > 1 ? v.replace(/\/+$/, "") : v;
|
|
14669
15050
|
return norm(a) === norm(b);
|
|
14670
15051
|
}
|
|
14671
|
-
|
|
14672
|
-
|
|
14673
|
-
|
|
14674
|
-
|
|
14675
|
-
|
|
15052
|
+
var ExploreCta = forwardRef(
|
|
15053
|
+
function ExploreCta2({
|
|
15054
|
+
variant,
|
|
15055
|
+
href = "/explore",
|
|
15056
|
+
label = "Ask AI",
|
|
15057
|
+
className,
|
|
15058
|
+
onNavigate,
|
|
15059
|
+
onClick,
|
|
15060
|
+
currentPath,
|
|
15061
|
+
expanded,
|
|
15062
|
+
controls
|
|
15063
|
+
}, ref) {
|
|
15064
|
+
const path = useCurrentPath(currentPath);
|
|
15065
|
+
const isActive = samePath(path, href);
|
|
15066
|
+
if (variant === "floating" && isActive) return null;
|
|
15067
|
+
const handleClick = (event) => {
|
|
15068
|
+
onClick?.();
|
|
15069
|
+
if (!onNavigate) return;
|
|
15070
|
+
if (event.defaultPrevented || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || event.button !== 0) {
|
|
15071
|
+
return;
|
|
15072
|
+
}
|
|
15073
|
+
event.preventDefault();
|
|
15074
|
+
onNavigate(href);
|
|
15075
|
+
};
|
|
15076
|
+
const classes = {
|
|
15077
|
+
// A quiet icon control, deliberately NOT a second gradient pill: a header should carry one
|
|
15078
|
+
// primary CTA ("Get started"), and a competing coloured button next to it reads as clutter.
|
|
15079
|
+
// This matches the theme toggle's visual weight, so the row scans as [utilities] [CTA].
|
|
15080
|
+
// The prominent, labelled entry point to /explore is the floating bubble, which is visible
|
|
15081
|
+
// on every page without scrolling. `shrink-0` keeps it from squeezing the nav.
|
|
15082
|
+
header: "inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground",
|
|
15083
|
+
mobile: "inline-flex w-full items-center gap-2 rounded-lg border border-border bg-card px-3 py-2 text-sm font-medium text-card-foreground transition-colors hover:bg-accent hover:text-accent-foreground",
|
|
15084
|
+
floating: "fixed bottom-5 right-5 z-40 inline-flex items-center gap-2 rounded-full bg-gradient-to-r from-primary to-primary/70 px-4 py-3 text-sm font-medium text-primary-foreground shadow-lg transition-opacity hover:opacity-90"
|
|
15085
|
+
};
|
|
15086
|
+
const hooks = {
|
|
15087
|
+
header: "cta-header",
|
|
15088
|
+
mobile: "cta-mobile",
|
|
15089
|
+
floating: "cta-floating"
|
|
15090
|
+
};
|
|
15091
|
+
return /* @__PURE__ */ jsxs(
|
|
15092
|
+
"a",
|
|
15093
|
+
{
|
|
15094
|
+
ref,
|
|
15095
|
+
"data-boff-explore": hooks[variant],
|
|
15096
|
+
href,
|
|
15097
|
+
onClick: handleClick,
|
|
15098
|
+
"aria-label": label,
|
|
15099
|
+
"aria-current": isActive ? "page" : void 0,
|
|
15100
|
+
"aria-expanded": expanded,
|
|
15101
|
+
"aria-haspopup": expanded === void 0 ? void 0 : "dialog",
|
|
15102
|
+
"aria-controls": expanded === void 0 ? void 0 : controls,
|
|
15103
|
+
className: cn(
|
|
15104
|
+
classes[variant],
|
|
15105
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
15106
|
+
className
|
|
15107
|
+
),
|
|
15108
|
+
children: [
|
|
15109
|
+
/* @__PURE__ */ jsx(
|
|
15110
|
+
Sparkles,
|
|
15111
|
+
{
|
|
15112
|
+
className: cn(
|
|
15113
|
+
"shrink-0",
|
|
15114
|
+
variant === "floating" ? "h-4 w-4" : variant === "header" ? "h-5 w-5" : "h-3.5 w-3.5"
|
|
15115
|
+
),
|
|
15116
|
+
"aria-hidden": "true"
|
|
15117
|
+
}
|
|
15118
|
+
),
|
|
15119
|
+
/* @__PURE__ */ jsx(
|
|
15120
|
+
"span",
|
|
15121
|
+
{
|
|
15122
|
+
className: cn(
|
|
15123
|
+
variant === "floating" && "hidden sm:inline",
|
|
15124
|
+
// Never labelled in the header — see the class comment above.
|
|
15125
|
+
variant === "header" && "hidden"
|
|
15126
|
+
),
|
|
15127
|
+
children: label
|
|
15128
|
+
}
|
|
15129
|
+
)
|
|
15130
|
+
]
|
|
15131
|
+
}
|
|
15132
|
+
);
|
|
15133
|
+
}
|
|
15134
|
+
);
|
|
15135
|
+
var MARK_KEY = "boffExplorePanel";
|
|
15136
|
+
var POS_KEY = "boffExplorePanelPos";
|
|
15137
|
+
var DOC_KEY = "boffExplorePanelDoc";
|
|
15138
|
+
var DOC_ID = `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
|
|
15139
|
+
var lastPos = 0;
|
|
15140
|
+
var hostMode = null;
|
|
15141
|
+
var NARROW_QUERY = "(max-width: 639px)";
|
|
15142
|
+
var TOUCH_FIRST_QUERY = "(hover: none) and (pointer: coarse)";
|
|
15143
|
+
var COMPOSER_FOCUS_TRIES = 15;
|
|
15144
|
+
var PANEL_CSS = `
|
|
15145
|
+
.boff-explore-shell {
|
|
15146
|
+
--boff-explore-shell-lift-at: max(var(--boff-explore-shell-lift, 0px), var(--boff-explore-shell-bottom, 0px));
|
|
15147
|
+
--boff-explore-shell-room-at: var(--boff-explore-shell-room, calc(100vh - var(--boff-explore-shell-bottom, 0px)));
|
|
15148
|
+
position: fixed;
|
|
15149
|
+
z-index: var(--boff-explore-shell-z, 50);
|
|
15150
|
+
display: flex;
|
|
15151
|
+
flex-direction: column;
|
|
15152
|
+
overflow: hidden;
|
|
15153
|
+
overscroll-behavior: contain;
|
|
15154
|
+
inset-inline-end: 1rem;
|
|
15155
|
+
bottom: calc(1rem + var(--boff-explore-shell-lift-at));
|
|
15156
|
+
width: min(26rem, calc(100vw - 2rem));
|
|
15157
|
+
height: min(40rem, calc(var(--boff-explore-shell-room-at) - 6rem));
|
|
15158
|
+
border-width: 1px;
|
|
15159
|
+
border-style: solid;
|
|
15160
|
+
border-radius: 1rem;
|
|
15161
|
+
}
|
|
15162
|
+
@supports (height: 100dvh) {
|
|
15163
|
+
.boff-explore-shell {
|
|
15164
|
+
--boff-explore-shell-room-at: var(--boff-explore-shell-room, calc(100dvh - var(--boff-explore-shell-bottom, 0px)));
|
|
15165
|
+
}
|
|
15166
|
+
}
|
|
15167
|
+
@media (max-width: 639px) {
|
|
15168
|
+
.boff-explore-shell[data-size="compact"] {
|
|
15169
|
+
inset-inline: 0;
|
|
15170
|
+
bottom: var(--boff-explore-shell-lift-at);
|
|
15171
|
+
width: auto;
|
|
15172
|
+
height: min(75vh, calc(var(--boff-explore-shell-room-at) - 4rem));
|
|
15173
|
+
border-width: 1px 0 0;
|
|
15174
|
+
border-radius: 1rem 1rem 0 0;
|
|
15175
|
+
}
|
|
15176
|
+
@supports (height: 100dvh) {
|
|
15177
|
+
.boff-explore-shell[data-size="compact"] {
|
|
15178
|
+
height: min(75dvh, calc(var(--boff-explore-shell-room-at) - 4rem));
|
|
15179
|
+
}
|
|
15180
|
+
}
|
|
15181
|
+
}
|
|
15182
|
+
.boff-explore-shell[data-size="expanded"] {
|
|
15183
|
+
inset: var(--boff-explore-shell-top, 0px) 0 var(--boff-explore-shell-lift-at) 0;
|
|
15184
|
+
width: auto;
|
|
15185
|
+
height: auto;
|
|
15186
|
+
border-width: 0;
|
|
15187
|
+
border-radius: 0;
|
|
15188
|
+
box-shadow: none;
|
|
15189
|
+
}
|
|
15190
|
+
.boff-explore-shell[data-open="false"] {
|
|
15191
|
+
visibility: hidden;
|
|
15192
|
+
content-visibility: hidden;
|
|
15193
|
+
}
|
|
15194
|
+
.boff-explore-shell:focus { outline: none; }
|
|
15195
|
+
`;
|
|
15196
|
+
var PRODUCT_TITLE_CSS = `
|
|
15197
|
+
.boff-explore-shell .boff-explore-shell-title { container-type: inline-size; }
|
|
15198
|
+
.boff-explore-shell .boff-explore-shell-title-text {
|
|
15199
|
+
display: -webkit-box;
|
|
15200
|
+
-webkit-box-orient: vertical;
|
|
15201
|
+
-webkit-line-clamp: 2;
|
|
15202
|
+
overflow: hidden;
|
|
15203
|
+
overflow-wrap: break-word;
|
|
15204
|
+
line-height: 1.125rem;
|
|
15205
|
+
}
|
|
15206
|
+
@container (max-width: 6rem) {
|
|
15207
|
+
.boff-explore-shell .boff-explore-shell-title-text { font-size: 0.75rem; line-height: 1rem; }
|
|
15208
|
+
}
|
|
15209
|
+
`;
|
|
15210
|
+
function stateRecord() {
|
|
15211
|
+
const state = window.history.state;
|
|
15212
|
+
return state !== null && typeof state === "object" ? state : {};
|
|
15213
|
+
}
|
|
15214
|
+
function stampedHere() {
|
|
15215
|
+
return stateRecord()[DOC_KEY] === DOC_ID;
|
|
15216
|
+
}
|
|
15217
|
+
function readMark() {
|
|
15218
|
+
if (typeof window === "undefined" || !stampedHere()) return null;
|
|
15219
|
+
const mark = stateRecord()[MARK_KEY];
|
|
15220
|
+
return mark === "open" || mark === "expanded" ? mark : null;
|
|
15221
|
+
}
|
|
15222
|
+
function readPos() {
|
|
15223
|
+
if (typeof window === "undefined" || !stampedHere()) return null;
|
|
15224
|
+
const pos = stateRecord()[POS_KEY];
|
|
15225
|
+
return typeof pos === "number" ? pos : null;
|
|
15226
|
+
}
|
|
15227
|
+
function stamp() {
|
|
15228
|
+
if (typeof window === "undefined" || readPos() !== null) return;
|
|
15229
|
+
const rest = { ...stateRecord() };
|
|
15230
|
+
delete rest[MARK_KEY];
|
|
15231
|
+
delete rest[POS_KEY];
|
|
15232
|
+
delete rest[DOC_KEY];
|
|
15233
|
+
lastPos += 1;
|
|
15234
|
+
try {
|
|
15235
|
+
window.history.replaceState(
|
|
15236
|
+
{ ...rest, [POS_KEY]: lastPos, [DOC_KEY]: DOC_ID },
|
|
15237
|
+
""
|
|
15238
|
+
);
|
|
15239
|
+
} catch {
|
|
15240
|
+
}
|
|
15241
|
+
}
|
|
15242
|
+
function pushMark(mark) {
|
|
15243
|
+
const { history } = window;
|
|
15244
|
+
const mode = "scrollRestoration" in history ? history.scrollRestoration : null;
|
|
15245
|
+
try {
|
|
15246
|
+
if (mode !== null) history.scrollRestoration = "manual";
|
|
15247
|
+
lastPos += 1;
|
|
15248
|
+
history.pushState(
|
|
15249
|
+
{
|
|
15250
|
+
...stateRecord(),
|
|
15251
|
+
[MARK_KEY]: mark,
|
|
15252
|
+
[POS_KEY]: lastPos,
|
|
15253
|
+
[DOC_KEY]: DOC_ID
|
|
15254
|
+
},
|
|
15255
|
+
""
|
|
15256
|
+
);
|
|
15257
|
+
return true;
|
|
15258
|
+
} catch {
|
|
15259
|
+
return false;
|
|
15260
|
+
} finally {
|
|
15261
|
+
if (mode !== null) history.scrollRestoration = mode;
|
|
15262
|
+
}
|
|
15263
|
+
}
|
|
15264
|
+
function restoreScrollMode(mode, then) {
|
|
15265
|
+
const { history } = window;
|
|
15266
|
+
const put = () => {
|
|
15267
|
+
if (history.scrollRestoration === "manual")
|
|
15268
|
+
history.scrollRestoration = mode;
|
|
15269
|
+
then?.();
|
|
15270
|
+
};
|
|
15271
|
+
if (typeof window.requestAnimationFrame !== "function") {
|
|
15272
|
+
window.setTimeout(put, 50);
|
|
15273
|
+
return;
|
|
15274
|
+
}
|
|
15275
|
+
window.requestAnimationFrame(() => window.requestAnimationFrame(put));
|
|
15276
|
+
}
|
|
15277
|
+
function closeInnerDialogs(shell) {
|
|
15278
|
+
let closed = false;
|
|
15279
|
+
document.querySelectorAll(
|
|
15280
|
+
'dialog[data-boff-explore="video-dialog"]'
|
|
15281
|
+
).forEach((dialog) => {
|
|
15282
|
+
if (!dialog.open) return;
|
|
15283
|
+
dialog.close();
|
|
15284
|
+
closed = true;
|
|
15285
|
+
});
|
|
15286
|
+
const disclaimer = shell?.querySelector(
|
|
15287
|
+
'[data-boff-explore="disclaimer-dialog"]'
|
|
15288
|
+
);
|
|
15289
|
+
if (disclaimer) {
|
|
15290
|
+
disclaimer.click();
|
|
15291
|
+
closed = true;
|
|
15292
|
+
}
|
|
15293
|
+
return closed;
|
|
15294
|
+
}
|
|
15295
|
+
function marksOnTop(mark) {
|
|
15296
|
+
if (mark === "expanded") return 2;
|
|
15297
|
+
return mark === "open" ? 1 : 0;
|
|
15298
|
+
}
|
|
15299
|
+
function matches(query) {
|
|
15300
|
+
return typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia(query).matches;
|
|
15301
|
+
}
|
|
15302
|
+
function ExplorePanel({
|
|
15303
|
+
open,
|
|
15304
|
+
onOpenChange,
|
|
15305
|
+
id = "boff-explore-panel",
|
|
15306
|
+
productSlug,
|
|
15307
|
+
locale,
|
|
15308
|
+
scope,
|
|
15309
|
+
productName,
|
|
15310
|
+
examplePrompts,
|
|
14676
15311
|
onNavigate,
|
|
14677
|
-
|
|
14678
|
-
|
|
15312
|
+
welcomeTitle,
|
|
15313
|
+
welcomeBody,
|
|
15314
|
+
explorePath,
|
|
15315
|
+
avatar,
|
|
15316
|
+
bottomOffset,
|
|
15317
|
+
zIndex,
|
|
15318
|
+
returnFocusRef,
|
|
15319
|
+
className
|
|
14679
15320
|
}) {
|
|
14680
|
-
const
|
|
14681
|
-
const
|
|
14682
|
-
|
|
14683
|
-
const
|
|
14684
|
-
|
|
14685
|
-
|
|
14686
|
-
if (
|
|
15321
|
+
const resolvedLocale = resolveExploreLocale(locale);
|
|
15322
|
+
const T = useMemo(() => exploreStrings(resolvedLocale), [resolvedLocale]);
|
|
15323
|
+
const rtl = isRtlLocale(resolvedLocale);
|
|
15324
|
+
const catalogProducts = useContext(ExploreCatalogProductsContext);
|
|
15325
|
+
const pinnedSlug = pinnedProductSlug(scope, productSlug);
|
|
15326
|
+
const title = useMemo(() => {
|
|
15327
|
+
if (pinnedSlug === null) return T.panelTitle;
|
|
15328
|
+
const name = productNameFor(
|
|
15329
|
+
catalogProducts ?? ECOSYSTEM_PRODUCTS,
|
|
15330
|
+
pinnedSlug,
|
|
15331
|
+
productName
|
|
15332
|
+
);
|
|
15333
|
+
return name === null ? T.panelTitle : fill(T.panelTitleProduct, { product: name });
|
|
15334
|
+
}, [T, catalogProducts, pinnedSlug, productName]);
|
|
15335
|
+
const uid = useId();
|
|
15336
|
+
const titleId = `${uid}-title`;
|
|
15337
|
+
const chatTabId = `${uid}-chat-tab`;
|
|
15338
|
+
const avatarTabId = `${uid}-avatar-tab`;
|
|
15339
|
+
const chatPaneId = `${uid}-chat`;
|
|
15340
|
+
const avatarPaneId = `${uid}-avatar`;
|
|
15341
|
+
const [mounted, setMounted] = useState(open);
|
|
15342
|
+
const [size, setSize] = useState("compact");
|
|
15343
|
+
const [view, setView] = useState("chat");
|
|
15344
|
+
const [focusRequest, setFocusRequest] = useState(
|
|
15345
|
+
open ? "in" : null
|
|
15346
|
+
);
|
|
15347
|
+
const [wasOpen, setWasOpen] = useState(open);
|
|
15348
|
+
if (open !== wasOpen) {
|
|
15349
|
+
setWasOpen(open);
|
|
15350
|
+
if (open) {
|
|
15351
|
+
setMounted(true);
|
|
15352
|
+
setFocusRequest("in");
|
|
15353
|
+
} else {
|
|
15354
|
+
setSize("compact");
|
|
15355
|
+
setFocusRequest("back");
|
|
15356
|
+
}
|
|
15357
|
+
}
|
|
15358
|
+
const shellRef = useRef(null);
|
|
15359
|
+
const chatPaneRef = useRef(null);
|
|
15360
|
+
const chatTabRef = useRef(null);
|
|
15361
|
+
const avatarTabRef = useRef(null);
|
|
15362
|
+
const ownPopsRef = useRef(0);
|
|
15363
|
+
const settlingRef = useRef(false);
|
|
15364
|
+
const afterPopRef = useRef([]);
|
|
15365
|
+
const markRef = useRef(null);
|
|
15366
|
+
const posRef = useRef(null);
|
|
15367
|
+
const hrefRef = useRef(null);
|
|
15368
|
+
const openRef = useRef(open);
|
|
15369
|
+
const onOpenChangeRef = useRef(onOpenChange);
|
|
15370
|
+
const lookedRef = useRef(false);
|
|
15371
|
+
const traverse = useCallback((delta) => {
|
|
15372
|
+
ownPopsRef.current += 1;
|
|
15373
|
+
window.history.go(delta);
|
|
15374
|
+
}, []);
|
|
15375
|
+
const push = useCallback((mark) => {
|
|
15376
|
+
const { history } = window;
|
|
15377
|
+
if ("scrollRestoration" in history && history.scrollRestoration !== "manual") {
|
|
15378
|
+
hostMode = history.scrollRestoration;
|
|
15379
|
+
}
|
|
15380
|
+
stamp();
|
|
15381
|
+
if (!pushMark(mark)) return false;
|
|
15382
|
+
markRef.current = mark;
|
|
15383
|
+
posRef.current = readPos();
|
|
15384
|
+
hrefRef.current = window.location.href;
|
|
15385
|
+
return true;
|
|
15386
|
+
}, []);
|
|
15387
|
+
const whenSettled = useCallback((work) => {
|
|
15388
|
+
if (ownPopsRef.current > 0 || settlingRef.current) {
|
|
15389
|
+
afterPopRef.current.push(work);
|
|
15390
|
+
} else {
|
|
15391
|
+
work();
|
|
15392
|
+
}
|
|
15393
|
+
}, []);
|
|
15394
|
+
const flush = useCallback(() => {
|
|
15395
|
+
settlingRef.current = false;
|
|
15396
|
+
while (afterPopRef.current.length > 0 && ownPopsRef.current === 0 && !settlingRef.current) {
|
|
15397
|
+
afterPopRef.current.shift()?.();
|
|
15398
|
+
}
|
|
15399
|
+
}, []);
|
|
15400
|
+
useEffect(() => {
|
|
15401
|
+
openRef.current = open;
|
|
15402
|
+
onOpenChangeRef.current = onOpenChange;
|
|
15403
|
+
});
|
|
15404
|
+
useEffect(() => {
|
|
15405
|
+
if (typeof window === "undefined") return;
|
|
15406
|
+
if (ownPopsRef.current > 0 || settlingRef.current) return;
|
|
15407
|
+
const pos = readPos();
|
|
15408
|
+
if (lookedRef.current && pos !== null && pos !== posRef.current) return;
|
|
15409
|
+
lookedRef.current = true;
|
|
15410
|
+
stamp();
|
|
15411
|
+
markRef.current = readMark();
|
|
15412
|
+
posRef.current = readPos();
|
|
15413
|
+
hrefRef.current = window.location.href;
|
|
15414
|
+
});
|
|
15415
|
+
useEffect(() => {
|
|
15416
|
+
if (typeof window === "undefined") return;
|
|
15417
|
+
whenSettled(() => {
|
|
15418
|
+
if (openRef.current) {
|
|
15419
|
+
if (readMark() === null) push("open");
|
|
15420
|
+
return;
|
|
15421
|
+
}
|
|
15422
|
+
closeInnerDialogs(shellRef.current);
|
|
15423
|
+
const count = marksOnTop(readMark());
|
|
15424
|
+
if (count > 0) traverse(-count);
|
|
15425
|
+
});
|
|
15426
|
+
}, [open, push, traverse, whenSettled]);
|
|
15427
|
+
useEffect(() => {
|
|
15428
|
+
if (typeof window === "undefined") return;
|
|
15429
|
+
const onPopState = () => {
|
|
15430
|
+
const open2 = openRef.current;
|
|
15431
|
+
const onOpenChange2 = onOpenChangeRef.current;
|
|
15432
|
+
const leftMark = markRef.current;
|
|
15433
|
+
const leftPos = posRef.current;
|
|
15434
|
+
const leftHref = hrefRef.current;
|
|
15435
|
+
const mark = readMark();
|
|
15436
|
+
const pos = readPos();
|
|
15437
|
+
markRef.current = mark;
|
|
15438
|
+
posRef.current = pos;
|
|
15439
|
+
hrefRef.current = window.location.href;
|
|
15440
|
+
const forward = pos !== null && leftPos !== null && pos > leftPos;
|
|
15441
|
+
const mode = hostMode;
|
|
15442
|
+
const restoring = leftMark !== null && mode !== null;
|
|
15443
|
+
if (ownPopsRef.current > 0) {
|
|
15444
|
+
ownPopsRef.current -= 1;
|
|
15445
|
+
if (ownPopsRef.current > 0) return;
|
|
15446
|
+
if (restoring) {
|
|
15447
|
+
settlingRef.current = true;
|
|
15448
|
+
restoreScrollMode(mode, flush);
|
|
15449
|
+
} else {
|
|
15450
|
+
flush();
|
|
15451
|
+
}
|
|
15452
|
+
return;
|
|
15453
|
+
}
|
|
15454
|
+
if (restoring) restoreScrollMode(mode);
|
|
15455
|
+
if (leftMark !== null && !forward) {
|
|
15456
|
+
if (open2 && closeInnerDialogs(shellRef.current)) {
|
|
15457
|
+
if (readMark() === null) push("open");
|
|
15458
|
+
if (leftMark === "expanded" && readMark() === "open") {
|
|
15459
|
+
push("expanded");
|
|
15460
|
+
}
|
|
15461
|
+
return;
|
|
15462
|
+
}
|
|
15463
|
+
setSize("compact");
|
|
15464
|
+
if (mark === null && open2) onOpenChange2(false);
|
|
15465
|
+
return;
|
|
15466
|
+
}
|
|
15467
|
+
if (leftHref !== null && window.location.href !== leftHref) {
|
|
15468
|
+
closeInnerDialogs(shellRef.current);
|
|
15469
|
+
}
|
|
15470
|
+
if (mark === null) return;
|
|
15471
|
+
if (forward) {
|
|
15472
|
+
setSize(mark === "expanded" ? "expanded" : "compact");
|
|
15473
|
+
if (!open2) onOpenChange2(true);
|
|
15474
|
+
return;
|
|
15475
|
+
}
|
|
15476
|
+
if (!open2) {
|
|
15477
|
+
traverse(-marksOnTop(mark));
|
|
15478
|
+
return;
|
|
15479
|
+
}
|
|
15480
|
+
setSize(mark === "expanded" ? "expanded" : "compact");
|
|
15481
|
+
};
|
|
15482
|
+
window.addEventListener("popstate", onPopState);
|
|
15483
|
+
return () => window.removeEventListener("popstate", onPopState);
|
|
15484
|
+
}, [flush, push, traverse]);
|
|
15485
|
+
useEffect(() => {
|
|
15486
|
+
if (!open || typeof window === "undefined") return;
|
|
15487
|
+
const viewport = window.visualViewport;
|
|
15488
|
+
const shell = shellRef.current;
|
|
15489
|
+
if (!viewport || !shell) return;
|
|
15490
|
+
const clear = () => {
|
|
15491
|
+
shell.style.removeProperty("--boff-explore-shell-lift");
|
|
15492
|
+
shell.style.removeProperty("--boff-explore-shell-room");
|
|
15493
|
+
shell.style.removeProperty("--boff-explore-shell-top");
|
|
15494
|
+
};
|
|
15495
|
+
const apply = () => {
|
|
15496
|
+
const covered = Math.max(
|
|
15497
|
+
0,
|
|
15498
|
+
Math.round(window.innerHeight - viewport.height - viewport.offsetTop)
|
|
15499
|
+
);
|
|
15500
|
+
const panned = viewport.offsetTop > 1;
|
|
15501
|
+
if (covered <= 1 && !panned) {
|
|
15502
|
+
clear();
|
|
15503
|
+
return;
|
|
15504
|
+
}
|
|
15505
|
+
shell.style.setProperty("--boff-explore-shell-lift", `${covered}px`);
|
|
15506
|
+
shell.style.setProperty(
|
|
15507
|
+
"--boff-explore-shell-room",
|
|
15508
|
+
`calc(${Math.round(viewport.height)}px - max(0px, var(--boff-explore-shell-bottom, 0px) - ${covered}px))`
|
|
15509
|
+
);
|
|
15510
|
+
shell.style.setProperty(
|
|
15511
|
+
"--boff-explore-shell-top",
|
|
15512
|
+
`${Math.max(0, Math.round(viewport.offsetTop))}px`
|
|
15513
|
+
);
|
|
15514
|
+
};
|
|
15515
|
+
apply();
|
|
15516
|
+
viewport.addEventListener("resize", apply);
|
|
15517
|
+
viewport.addEventListener("scroll", apply);
|
|
15518
|
+
return () => {
|
|
15519
|
+
viewport.removeEventListener("resize", apply);
|
|
15520
|
+
viewport.removeEventListener("scroll", apply);
|
|
15521
|
+
clear();
|
|
15522
|
+
};
|
|
15523
|
+
}, [open]);
|
|
15524
|
+
const focusComposerSoon = useCallback((from) => {
|
|
15525
|
+
let tries = 0;
|
|
15526
|
+
const next = (attempt2) => {
|
|
15527
|
+
if (typeof window.requestAnimationFrame === "function") {
|
|
15528
|
+
window.requestAnimationFrame(attempt2);
|
|
15529
|
+
} else {
|
|
15530
|
+
window.setTimeout(attempt2, 16);
|
|
15531
|
+
}
|
|
15532
|
+
};
|
|
15533
|
+
const attempt = () => {
|
|
15534
|
+
if (document.activeElement !== from) return;
|
|
15535
|
+
const composer = chatPaneRef.current?.querySelector(
|
|
15536
|
+
"textarea:not(:disabled)"
|
|
15537
|
+
);
|
|
15538
|
+
if (!composer) return;
|
|
15539
|
+
composer.focus();
|
|
15540
|
+
tries += 1;
|
|
15541
|
+
if (document.activeElement !== composer && tries < COMPOSER_FOCUS_TRIES) {
|
|
15542
|
+
next(attempt);
|
|
15543
|
+
}
|
|
15544
|
+
};
|
|
15545
|
+
next(attempt);
|
|
15546
|
+
}, []);
|
|
15547
|
+
useEffect(() => {
|
|
15548
|
+
if (focusRequest === null) return;
|
|
15549
|
+
setFocusRequest(null);
|
|
15550
|
+
const shell = shellRef.current;
|
|
15551
|
+
if (focusRequest === "back") {
|
|
15552
|
+
const active = document.activeElement;
|
|
15553
|
+
if (active === null || active === document.body || shell?.contains(active)) {
|
|
15554
|
+
returnFocusRef?.current?.focus();
|
|
15555
|
+
}
|
|
14687
15556
|
return;
|
|
14688
15557
|
}
|
|
14689
|
-
|
|
14690
|
-
|
|
14691
|
-
|
|
14692
|
-
|
|
14693
|
-
|
|
14694
|
-
|
|
14695
|
-
|
|
14696
|
-
|
|
14697
|
-
|
|
14698
|
-
|
|
14699
|
-
|
|
14700
|
-
|
|
14701
|
-
|
|
14702
|
-
|
|
14703
|
-
|
|
14704
|
-
|
|
14705
|
-
|
|
15558
|
+
if (!shell) return;
|
|
15559
|
+
shell.focus();
|
|
15560
|
+
if (view === "chat" && !matches(TOUCH_FIRST_QUERY)) {
|
|
15561
|
+
focusComposerSoon(shell);
|
|
15562
|
+
}
|
|
15563
|
+
}, [focusComposerSoon, focusRequest, returnFocusRef, view]);
|
|
15564
|
+
const close = useCallback(() => onOpenChange(false), [onOpenChange]);
|
|
15565
|
+
const expand = useCallback(() => {
|
|
15566
|
+
setSize("expanded");
|
|
15567
|
+
whenSettled(() => {
|
|
15568
|
+
if (!openRef.current) return;
|
|
15569
|
+
if (readMark() === null) push("open");
|
|
15570
|
+
if (readMark() === "open") push("expanded");
|
|
15571
|
+
});
|
|
15572
|
+
}, [push, whenSettled]);
|
|
15573
|
+
const restore = useCallback(() => {
|
|
15574
|
+
setSize("compact");
|
|
15575
|
+
whenSettled(() => {
|
|
15576
|
+
if (readMark() === "expanded") traverse(-1);
|
|
15577
|
+
});
|
|
15578
|
+
}, [traverse, whenSettled]);
|
|
15579
|
+
const onKeyDown = useCallback(
|
|
15580
|
+
(event) => {
|
|
15581
|
+
if (event.key !== "Escape" || event.defaultPrevented) return;
|
|
15582
|
+
if (event.nativeEvent.isComposing || event.keyCode === 229) return;
|
|
15583
|
+
const shell = shellRef.current;
|
|
15584
|
+
if (!shell || !(event.target instanceof Node) || !shell.contains(event.target)) {
|
|
15585
|
+
return;
|
|
15586
|
+
}
|
|
15587
|
+
if (shell.querySelector('dialog[open], [role="dialog"][aria-modal="true"]')) {
|
|
15588
|
+
return;
|
|
15589
|
+
}
|
|
15590
|
+
event.preventDefault();
|
|
15591
|
+
if (size === "expanded") restore();
|
|
15592
|
+
else close();
|
|
15593
|
+
},
|
|
15594
|
+
[close, restore, size]
|
|
15595
|
+
);
|
|
15596
|
+
const navigate = useCallback(
|
|
15597
|
+
(path) => {
|
|
15598
|
+
if (!onNavigate) return;
|
|
15599
|
+
setSize("compact");
|
|
15600
|
+
const stayOpen = !matches(NARROW_QUERY);
|
|
15601
|
+
if (!stayOpen) onOpenChange(false);
|
|
15602
|
+
whenSettled(() => {
|
|
15603
|
+
const go = () => {
|
|
15604
|
+
onNavigate(path);
|
|
15605
|
+
if (stayOpen && openRef.current && readMark() === null) {
|
|
15606
|
+
push("open");
|
|
15607
|
+
}
|
|
15608
|
+
};
|
|
15609
|
+
const count = marksOnTop(readMark());
|
|
15610
|
+
if (count === 0) {
|
|
15611
|
+
go();
|
|
15612
|
+
return;
|
|
15613
|
+
}
|
|
15614
|
+
afterPopRef.current.push(go);
|
|
15615
|
+
traverse(-count);
|
|
15616
|
+
});
|
|
15617
|
+
},
|
|
15618
|
+
[onNavigate, onOpenChange, push, traverse, whenSettled]
|
|
15619
|
+
);
|
|
15620
|
+
const selectView = useCallback((next) => {
|
|
15621
|
+
setView(next);
|
|
15622
|
+
(next === "chat" ? chatTabRef : avatarTabRef).current?.focus();
|
|
15623
|
+
}, []);
|
|
15624
|
+
const continueInChat = useCallback(() => {
|
|
15625
|
+
setView("chat");
|
|
15626
|
+
const tab = chatTabRef.current;
|
|
15627
|
+
tab?.focus();
|
|
15628
|
+
focusComposerSoon(tab);
|
|
15629
|
+
}, [focusComposerSoon]);
|
|
15630
|
+
const onTabKeyDown = useCallback(
|
|
15631
|
+
(event) => {
|
|
15632
|
+
const other = view === "chat" ? "avatar" : "chat";
|
|
15633
|
+
const next = {
|
|
15634
|
+
ArrowLeft: other,
|
|
15635
|
+
ArrowRight: other,
|
|
15636
|
+
Home: "chat",
|
|
15637
|
+
End: "avatar"
|
|
15638
|
+
};
|
|
15639
|
+
const target = next[event.key];
|
|
15640
|
+
if (!target) return;
|
|
15641
|
+
event.preventDefault();
|
|
15642
|
+
selectView(target);
|
|
15643
|
+
},
|
|
15644
|
+
[selectView, view]
|
|
15645
|
+
);
|
|
15646
|
+
if (!mounted) return null;
|
|
15647
|
+
const style = {
|
|
15648
|
+
"--boff-explore-shell-bottom": bottomOffset ?? "0px",
|
|
15649
|
+
...zIndex === void 0 ? {} : { "--boff-explore-shell-z": String(zIndex) }
|
|
14706
15650
|
};
|
|
15651
|
+
const iconButton = "inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring";
|
|
15652
|
+
const tabButton = "rounded-md px-3 py-1.5 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring";
|
|
15653
|
+
const expanded = size === "expanded";
|
|
15654
|
+
const sizeLabel = expanded ? T.exitFullScreen : T.enterFullScreen;
|
|
15655
|
+
const tabs = [
|
|
15656
|
+
{ key: "chat", id: chatTabId, pane: chatPaneId, label: T.tabChat },
|
|
15657
|
+
{ key: "avatar", id: avatarTabId, pane: avatarPaneId, label: T.tabAvatar }
|
|
15658
|
+
];
|
|
14707
15659
|
return /* @__PURE__ */ jsxs(
|
|
14708
|
-
"
|
|
15660
|
+
"div",
|
|
14709
15661
|
{
|
|
14710
|
-
|
|
14711
|
-
|
|
14712
|
-
|
|
14713
|
-
"aria-
|
|
14714
|
-
"aria-
|
|
15662
|
+
ref: shellRef,
|
|
15663
|
+
id,
|
|
15664
|
+
role: "dialog",
|
|
15665
|
+
"aria-modal": "false",
|
|
15666
|
+
"aria-labelledby": titleId,
|
|
15667
|
+
tabIndex: -1,
|
|
15668
|
+
"data-boff-explore": "panel-shell",
|
|
15669
|
+
"data-open": open ? "true" : "false",
|
|
15670
|
+
"data-size": size,
|
|
15671
|
+
dir: rtl ? "rtl" : void 0,
|
|
14715
15672
|
className: cn(
|
|
14716
|
-
|
|
14717
|
-
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
15673
|
+
"boff-explore-shell border-border bg-background text-foreground shadow-2xl",
|
|
14718
15674
|
className
|
|
14719
15675
|
),
|
|
15676
|
+
style,
|
|
15677
|
+
onKeyDown,
|
|
14720
15678
|
children: [
|
|
14721
|
-
/* @__PURE__ */ jsx(
|
|
14722
|
-
|
|
14723
|
-
|
|
14724
|
-
|
|
14725
|
-
|
|
14726
|
-
|
|
14727
|
-
|
|
14728
|
-
|
|
14729
|
-
|
|
14730
|
-
|
|
14731
|
-
|
|
14732
|
-
|
|
14733
|
-
|
|
14734
|
-
|
|
14735
|
-
|
|
14736
|
-
|
|
14737
|
-
|
|
15679
|
+
/* @__PURE__ */ jsx("style", { children: PANEL_CSS }),
|
|
15680
|
+
pinnedSlug === null ? null : /* @__PURE__ */ jsx("style", { dangerouslySetInnerHTML: { __html: PRODUCT_TITLE_CSS } }),
|
|
15681
|
+
/* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b border-border px-3 py-2", children: [
|
|
15682
|
+
pinnedSlug === null ? /* @__PURE__ */ jsx(
|
|
15683
|
+
"span",
|
|
15684
|
+
{
|
|
15685
|
+
id: titleId,
|
|
15686
|
+
className: "min-w-0 flex-1 truncate text-sm font-semibold",
|
|
15687
|
+
children: title
|
|
15688
|
+
}
|
|
15689
|
+
) : /* @__PURE__ */ jsx(
|
|
15690
|
+
"span",
|
|
15691
|
+
{
|
|
15692
|
+
id: titleId,
|
|
15693
|
+
className: "boff-explore-shell-title min-w-0 flex-1",
|
|
15694
|
+
children: /* @__PURE__ */ jsx("span", { className: "boff-explore-shell-title-text text-sm font-semibold", children: title })
|
|
15695
|
+
}
|
|
15696
|
+
),
|
|
15697
|
+
avatar ? /* @__PURE__ */ jsx(
|
|
15698
|
+
"div",
|
|
15699
|
+
{
|
|
15700
|
+
role: "tablist",
|
|
15701
|
+
"aria-label": T.panelViews,
|
|
15702
|
+
className: "inline-flex shrink-0 rounded-lg bg-muted p-0.5",
|
|
15703
|
+
children: tabs.map((tab) => /* @__PURE__ */ jsx(
|
|
15704
|
+
"button",
|
|
15705
|
+
{
|
|
15706
|
+
ref: tab.key === "chat" ? chatTabRef : avatarTabRef,
|
|
15707
|
+
type: "button",
|
|
15708
|
+
role: "tab",
|
|
15709
|
+
id: tab.id,
|
|
15710
|
+
"aria-selected": view === tab.key,
|
|
15711
|
+
"aria-controls": tab.pane,
|
|
15712
|
+
tabIndex: view === tab.key ? 0 : -1,
|
|
15713
|
+
"data-boff-explore": `panel-tab-${tab.key}`,
|
|
15714
|
+
className: cn(
|
|
15715
|
+
tabButton,
|
|
15716
|
+
view === tab.key ? "bg-background text-foreground shadow-sm" : "text-muted-foreground hover:text-foreground"
|
|
15717
|
+
),
|
|
15718
|
+
onClick: () => selectView(tab.key),
|
|
15719
|
+
onKeyDown: onTabKeyDown,
|
|
15720
|
+
children: tab.label
|
|
15721
|
+
},
|
|
15722
|
+
tab.key
|
|
15723
|
+
))
|
|
15724
|
+
}
|
|
15725
|
+
) : null,
|
|
15726
|
+
/* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [
|
|
15727
|
+
/* @__PURE__ */ jsx(
|
|
15728
|
+
"button",
|
|
15729
|
+
{
|
|
15730
|
+
type: "button",
|
|
15731
|
+
"data-boff-explore": expanded ? "panel-restore" : "panel-expand",
|
|
15732
|
+
"aria-label": sizeLabel,
|
|
15733
|
+
title: sizeLabel,
|
|
15734
|
+
className: iconButton,
|
|
15735
|
+
onClick: expanded ? restore : expand,
|
|
15736
|
+
children: expanded ? /* @__PURE__ */ jsx(Minimize2, { className: "h-4 w-4", "aria-hidden": "true" }) : /* @__PURE__ */ jsx(Maximize2, { className: "h-4 w-4", "aria-hidden": "true" })
|
|
15737
|
+
}
|
|
14738
15738
|
),
|
|
14739
|
-
|
|
14740
|
-
|
|
14741
|
-
|
|
15739
|
+
/* @__PURE__ */ jsx(
|
|
15740
|
+
"button",
|
|
15741
|
+
{
|
|
15742
|
+
type: "button",
|
|
15743
|
+
"data-boff-explore": "panel-close",
|
|
15744
|
+
"aria-label": T.closePanel,
|
|
15745
|
+
title: T.closePanel,
|
|
15746
|
+
className: iconButton,
|
|
15747
|
+
onClick: close,
|
|
15748
|
+
children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4", "aria-hidden": "true" })
|
|
15749
|
+
}
|
|
15750
|
+
)
|
|
15751
|
+
] })
|
|
15752
|
+
] }),
|
|
15753
|
+
/* @__PURE__ */ jsxs("div", { className: "relative flex min-h-0 flex-1 flex-col", children: [
|
|
15754
|
+
/* @__PURE__ */ jsx(
|
|
15755
|
+
"div",
|
|
15756
|
+
{
|
|
15757
|
+
ref: chatPaneRef,
|
|
15758
|
+
id: chatPaneId,
|
|
15759
|
+
role: avatar ? "tabpanel" : void 0,
|
|
15760
|
+
"aria-labelledby": avatar ? chatTabId : void 0,
|
|
15761
|
+
"data-boff-explore": "panel-chat",
|
|
15762
|
+
className: cn(
|
|
15763
|
+
"flex min-h-0 flex-1 flex-col",
|
|
15764
|
+
view === "avatar" && "invisible"
|
|
15765
|
+
),
|
|
15766
|
+
children: /* @__PURE__ */ jsx(
|
|
15767
|
+
ExplorePage,
|
|
15768
|
+
{
|
|
15769
|
+
presentation: "panel",
|
|
15770
|
+
active: open && view === "chat",
|
|
15771
|
+
productSlug,
|
|
15772
|
+
locale,
|
|
15773
|
+
scope,
|
|
15774
|
+
productName,
|
|
15775
|
+
examplePrompts,
|
|
15776
|
+
onNavigate: onNavigate ? navigate : void 0,
|
|
15777
|
+
welcomeTitle,
|
|
15778
|
+
welcomeBody,
|
|
15779
|
+
explorePath
|
|
15780
|
+
}
|
|
15781
|
+
)
|
|
15782
|
+
}
|
|
15783
|
+
),
|
|
15784
|
+
avatar ? /* @__PURE__ */ jsxs(
|
|
15785
|
+
"div",
|
|
15786
|
+
{
|
|
15787
|
+
id: avatarPaneId,
|
|
15788
|
+
role: "tabpanel",
|
|
15789
|
+
"aria-labelledby": avatarTabId,
|
|
15790
|
+
"data-boff-explore": "panel-avatar",
|
|
15791
|
+
className: cn(
|
|
15792
|
+
"absolute inset-0 flex-col items-center justify-center gap-4 overflow-y-auto bg-background p-6 text-center",
|
|
15793
|
+
view === "avatar" ? "flex" : "hidden"
|
|
15794
|
+
),
|
|
15795
|
+
children: [
|
|
15796
|
+
/* @__PURE__ */ jsx(
|
|
15797
|
+
"img",
|
|
15798
|
+
{
|
|
15799
|
+
src: avatar.src,
|
|
15800
|
+
alt: avatar.name ? `${avatar.name}, ${T.liveAvatar}` : T.liveAvatar,
|
|
15801
|
+
loading: "lazy",
|
|
15802
|
+
decoding: "async",
|
|
15803
|
+
width: 128,
|
|
15804
|
+
height: 128,
|
|
15805
|
+
className: "h-32 w-32 rounded-full border border-border object-cover shadow-sm"
|
|
15806
|
+
}
|
|
15807
|
+
),
|
|
15808
|
+
/* @__PURE__ */ jsx("p", { className: "text-base font-semibold", children: T.avatarComingSoon }),
|
|
15809
|
+
/* @__PURE__ */ jsx(
|
|
15810
|
+
"button",
|
|
15811
|
+
{
|
|
15812
|
+
type: "button",
|
|
15813
|
+
"data-boff-explore": "panel-continue-chat",
|
|
15814
|
+
className: "inline-flex items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground transition-opacity hover:opacity-90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
15815
|
+
onClick: continueInChat,
|
|
15816
|
+
children: T.continueInChat
|
|
15817
|
+
}
|
|
15818
|
+
)
|
|
15819
|
+
]
|
|
15820
|
+
}
|
|
15821
|
+
) : null
|
|
15822
|
+
] })
|
|
14742
15823
|
]
|
|
14743
15824
|
}
|
|
14744
15825
|
);
|
|
@@ -19526,6 +20607,6 @@ function shouldRenderSiteFooter(pathname) {
|
|
|
19526
20607
|
return !isFooterlessPath(pathname);
|
|
19527
20608
|
}
|
|
19528
20609
|
|
|
19529
|
-
export { ANSWERS_PATH, ANSWER_HEADING_SHIFT, ANSWER_PATH_PREFIX, AnswerDetailPage, AnswersPage, BlogListPage, BlogPostPage, Button, CONCEPTS_PATH, CONCEPT_ILLUSTRATION_NOTICE, CONCEPT_PATH_PREFIX, CONCEPT_WORKFLOW_NOTICE, CareersApplyForm, CareersSubmissionForm, CaseStudiesListPage, CaseStudyPage, ChangelogPage, ConceptDetailPage, ConceptsPage, ContactPage, ContentRenderer, ContractsPage, DEFAULT_CONTACT_CATEGORIES, DEFAULT_EXPLORE_EXAMPLE_PROMPTS, DOMAINS_URL, ECOSYSTEM_PRODUCTS, ESCALATE_EXPLORE_CONVERSATION_MUTATION, EXPLORE_CATALOG_QUERY, EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS, EXPLORE_ESCALATION_NOTE_SOFT_MAX, EXPLORE_LOCALES, EXPLORE_MESSAGE_QUERY, EXPLORE_PREFILL_MAX_LENGTH, EXPLORE_RECAPTCHA_ACTION, ElectronDownloadLink, ExploreAnswerBody, ExploreAnswerStyles, ExploreCta, ExplorePage, FALLBACK_EXPLORE_LIMITS, FOOTERLESS_ROUTES, Input, LEGAL_DOCUMENTS, LEGAL_DOCUMENT_KEYS, Label, LaunchCountdown, LegalPage, Markdown, NewsletterForm, NewsletterPage, PRODUCT_SLUG_ALIASES, PRODUCT_SLUG_EMIT, PRODUCT_SLUG_RENAMES, PUBLISHED_ANSWER_FIELDS, PageHead, PartnersPage, PressKitPage, PricingPage, PricingProductKeyError, PricingSection, ProblemsSolvedSection, ProductCard, ProductProvider, ResourceLinks, RybbitAnalytics, SEND_EXPLORE_MESSAGE_MUTATION, Select, SocialLinks, StarRating, StoreBrowsePage, StoreHomePage, StoreProductDetailPage, Textarea, TypeBadge, UnsubscribePage, WaitlistForm, WaitlistPage, WebSDKClient, WebSDKProvider, WebsiteSwitcher, answerPath, answerPlainText, answerSourceHost, answerSpeechText, answerStrings, availablePlanCurrencies, buttonVariants, classifyExploreError, cleanPlanDisplayName, cn, conceptPath, detectElectronPlatform, emitProductSlug, exploreQuestionHref, fetchLegalContent, fetchLegalContentPage, fetchPublicJobPosting, fetchPublicJobPostings, fetchPublicJobPostingsForSubmission, fetchPublicProduct, findLegalDocument, formatAnswerDate, formatDownloads, formatLegalDate, formatPrice2 as formatPrice, getAnswerBySlug, getConceptBySlug, getRecaptchaV3Token, inlineImageOrigins, isFooterlessPath, isInlineImageAllowed, isInlineVideoAllowed, isPublishedSourceUrl, isSameProductSlug, isUuidLike, isValidUrl, legacyProductSlug, loadRecaptchaV3, looksLikeDeliverableEmail, normalizeProductSlug, normalizeRoutePath, planPriceIn, productSlugVariants, productSlugsByOrigin, resolvePricingProductKey, shouldRenderSiteFooter, speechLocaleOf, splitLeadingHeading, stopSpeaking, useContentPage, useContentPages, useExploreChat, useProduct, useProductConfig, useProgressiveReveal, usePublicJobPosting, usePublicJobPostings, usePublicJobPostingsForSubmission, useSpeechOutput, useWebSDK, useWebSDKConfig };
|
|
20610
|
+
export { ANSWERS_PATH, ANSWER_HEADING_SHIFT, ANSWER_PATH_PREFIX, AnswerDetailPage, AnswersPage, BlogListPage, BlogPostPage, Button, CONCEPTS_PATH, CONCEPT_ILLUSTRATION_NOTICE, CONCEPT_PATH_PREFIX, CONCEPT_WORKFLOW_NOTICE, CareersApplyForm, CareersSubmissionForm, CaseStudiesListPage, CaseStudyPage, ChangelogPage, ConceptDetailPage, ConceptsPage, ContactPage, ContentRenderer, ContractsPage, DEFAULT_CONTACT_CATEGORIES, DEFAULT_EXPLORE_EXAMPLE_PROMPTS, DOMAINS_URL, ECOSYSTEM_PRODUCTS, ESCALATE_EXPLORE_CONVERSATION_MUTATION, EXPLORE_CATALOG_QUERY, EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS, EXPLORE_ESCALATION_NOTE_SOFT_MAX, EXPLORE_LOCALES, EXPLORE_MESSAGE_QUERY, EXPLORE_PREFILL_MAX_LENGTH, EXPLORE_RECAPTCHA_ACTION, ElectronDownloadLink, ExploreAnswerBody, ExploreAnswerStyles, ExploreChatProvider, ExploreCta, ExplorePage, ExplorePanel, FALLBACK_EXPLORE_LIMITS, FOOTERLESS_ROUTES, Input, LEGAL_DOCUMENTS, LEGAL_DOCUMENT_KEYS, Label, LaunchCountdown, LegalPage, Markdown, NewsletterForm, NewsletterPage, PRODUCT_SLUG_ALIASES, PRODUCT_SLUG_EMIT, PRODUCT_SLUG_RENAMES, PUBLISHED_ANSWER_FIELDS, PageHead, PartnersPage, PressKitPage, PricingPage, PricingProductKeyError, PricingSection, ProblemsSolvedSection, ProductCard, ProductProvider, ResourceLinks, RybbitAnalytics, SEND_EXPLORE_MESSAGE_MUTATION, Select, SocialLinks, StarRating, StoreBrowsePage, StoreHomePage, StoreProductDetailPage, Textarea, TypeBadge, UnsubscribePage, WaitlistForm, WaitlistPage, WebSDKClient, WebSDKProvider, WebsiteSwitcher, answerPath, answerPlainText, answerSourceHost, answerSpeechText, answerStrings, availablePlanCurrencies, buttonVariants, classifyExploreError, cleanPlanDisplayName, cn, conceptPath, detectElectronPlatform, emitProductSlug, exploreQuestionHref, fetchLegalContent, fetchLegalContentPage, fetchPublicJobPosting, fetchPublicJobPostings, fetchPublicJobPostingsForSubmission, fetchPublicProduct, findLegalDocument, formatAnswerDate, formatDownloads, formatLegalDate, formatPrice2 as formatPrice, getAnswerBySlug, getConceptBySlug, getRecaptchaV3Token, inlineImageOrigins, isFooterlessPath, isInlineImageAllowed, isInlineVideoAllowed, isPublishedSourceUrl, isSameProductSlug, isUuidLike, isValidUrl, legacyProductSlug, loadRecaptchaV3, looksLikeDeliverableEmail, normalizeProductSlug, normalizeRoutePath, planPriceIn, productSlugVariants, productSlugsByOrigin, resolvePricingProductKey, shouldRenderSiteFooter, speechLocaleOf, splitLeadingHeading, stopSpeaking, useContentPage, useContentPages, useExploreChat, useExploreConversation, useProduct, useProductConfig, useProgressiveReveal, usePublicJobPosting, usePublicJobPostings, usePublicJobPostingsForSubmission, useSpeechOutput, useWebSDK, useWebSDKConfig };
|
|
19530
20611
|
//# sourceMappingURL=index.mjs.map
|
|
19531
20612
|
//# sourceMappingURL=index.mjs.map
|