@aigentyc/chat-sdk 0.5.2 → 0.5.3

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.
@@ -1269,6 +1269,35 @@ function ChatInterface(props) {
1269
1269
  /* @__PURE__ */ jsx("span", { "data-session-id": sessionId, className: "hidden" })
1270
1270
  ] });
1271
1271
  }
1272
+
1273
+ // src/core/panel-width.ts
1274
+ var DEFAULT_PANEL_WIDTH = 780;
1275
+ var MIN_PANEL_WIDTH = 320;
1276
+ var SIDE_PANEL_GAP_PX = 10;
1277
+ function panelMaxWidth(width) {
1278
+ if (typeof width === "number") {
1279
+ if (!Number.isFinite(width) || width <= 0) return `${DEFAULT_PANEL_WIDTH}px`;
1280
+ return `${Math.max(MIN_PANEL_WIDTH, Math.round(width))}px`;
1281
+ }
1282
+ if (typeof width === "string") {
1283
+ const value = width.trim();
1284
+ if (value && isValidLength(value)) return value;
1285
+ }
1286
+ return `${DEFAULT_PANEL_WIDTH}px`;
1287
+ }
1288
+ function panelRenderedWidth(width) {
1289
+ return `min(100vw, ${panelMaxWidth(width)})`;
1290
+ }
1291
+ function sidePanelOffset(width) {
1292
+ return `calc(${panelRenderedWidth(width)} + ${SIDE_PANEL_GAP_PX}px)`;
1293
+ }
1294
+ function sidePanelWidth(preferredPx, width) {
1295
+ return `min(${preferredPx}px, calc(100vw - ${panelRenderedWidth(width)} - ${SIDE_PANEL_GAP_PX * 2}px))`;
1296
+ }
1297
+ function isValidLength(value) {
1298
+ if (typeof CSS === "undefined" || typeof CSS.supports !== "function") return true;
1299
+ return CSS.supports("max-width", value);
1300
+ }
1272
1301
  function FloatingButton({
1273
1302
  onClick,
1274
1303
  position,
@@ -1432,7 +1461,7 @@ function useLiveChatOrThrow() {
1432
1461
  if (!ctx) throw new Error("LiveChat sub-view rendered outside LiveChatProvider \u2014 this should never happen");
1433
1462
  return ctx;
1434
1463
  }
1435
- function LiveChatPanel({ isWidgetOpen, isRightSide, zIndex }) {
1464
+ function LiveChatPanel({ isWidgetOpen, isRightSide, zIndex, panelWidth }) {
1436
1465
  const lc = useLiveChat();
1437
1466
  if (!lc) return null;
1438
1467
  const isActive = lc.state !== "ai" || lc.showIdentityForm;
@@ -1456,9 +1485,9 @@ function LiveChatPanel({ isWidgetOpen, isRightSide, zIndex }) {
1456
1485
  backgroundColor: "var(--ac-background)",
1457
1486
  borderColor: "var(--ac-border)",
1458
1487
  zIndex,
1459
- width: "min(420px, calc(100vw - 800px))",
1488
+ width: sidePanelWidth(420, panelWidth),
1460
1489
  height: "75vh",
1461
- ...isRightSide ? { right: "790px" } : { left: "790px" },
1490
+ ...isRightSide ? { right: sidePanelOffset(panelWidth) } : { left: sidePanelOffset(panelWidth) },
1462
1491
  transform: showPanel ? "translateY(-50%) translateX(0)" : `translateY(-50%) ${isRightSide ? "translateX(20px)" : "translateX(-20px)"}`,
1463
1492
  opacity: showPanel ? 1 : 0,
1464
1493
  pointerEvents: showPanel ? "auto" : "none",
@@ -1846,7 +1875,7 @@ function EndedView() {
1846
1875
  )
1847
1876
  ] });
1848
1877
  }
1849
- function PreviewEmbedPanel({ isOpen, isRightSide, zIndex }) {
1878
+ function PreviewEmbedPanel({ isOpen, isRightSide, zIndex, panelWidth }) {
1850
1879
  const previewEmbed = usePreviewEmbed();
1851
1880
  if (!previewEmbed) return null;
1852
1881
  const { preview, closePreview } = previewEmbed;
@@ -1859,9 +1888,9 @@ function PreviewEmbedPanel({ isOpen, isRightSide, zIndex }) {
1859
1888
  backgroundColor: "var(--ac-background)",
1860
1889
  borderColor: "var(--ac-border)",
1861
1890
  zIndex,
1862
- width: "min(560px, calc(100vw - 800px))",
1891
+ width: sidePanelWidth(560, panelWidth),
1863
1892
  height: "70vh",
1864
- ...isRightSide ? { right: "790px" } : { left: "790px" },
1893
+ ...isRightSide ? { right: sidePanelOffset(panelWidth) } : { left: sidePanelOffset(panelWidth) },
1865
1894
  transform: showPanel ? "translateY(-50%) translateX(0)" : `translateY(-50%) ${isRightSide ? "translateX(20px)" : "translateX(-20px)"}`,
1866
1895
  opacity: showPanel ? 1 : 0,
1867
1896
  pointerEvents: showPanel ? "auto" : "none",
@@ -1902,6 +1931,6 @@ function PreviewEmbedPanel({ isOpen, isRightSide, zIndex }) {
1902
1931
  );
1903
1932
  }
1904
1933
 
1905
- export { CartDrawer, ChatError, ChatErrorBoundary, ChatFooter, ChatHeader, ChatInput, ChatInterface, FloatingButton, LiveChatPanel, MobileLiveChatDrawer, PreviewEmbedPanel, QuickQuestions, SystemMessage, WelcomePage };
1906
- //# sourceMappingURL=chunk-PNUHUUA3.js.map
1907
- //# sourceMappingURL=chunk-PNUHUUA3.js.map
1934
+ export { CartDrawer, ChatError, ChatErrorBoundary, ChatFooter, ChatHeader, ChatInput, ChatInterface, DEFAULT_PANEL_WIDTH, FloatingButton, LiveChatPanel, MobileLiveChatDrawer, PreviewEmbedPanel, QuickQuestions, SystemMessage, WelcomePage, panelMaxWidth };
1935
+ //# sourceMappingURL=chunk-MQJ6MGTC.js.map
1936
+ //# sourceMappingURL=chunk-MQJ6MGTC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ChatHeader.tsx","../src/components/ChatInput.tsx","../src/components/ChatFooter.tsx","../src/components/WelcomePage.tsx","../src/components/QuickQuestions.tsx","../src/components/CartDrawer.tsx","../src/components/SystemMessage.tsx","../src/ai-elements/chat-error.tsx","../src/ai-elements/error-boundary.tsx","../src/components/ChatInterface.tsx","../src/core/panel-width.ts","../src/components/FloatingButton.tsx","../src/components/LiveChatPanel.tsx","../src/components/PreviewEmbedPanel.tsx"],"names":["ChatHeader","memo","ChatInput","jsxs","jsx","useState","Fragment","useRef","useEffect","X","ShoppingCart","Plus","useCallback","MessageSquare","Headset"],"mappings":"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","file":"chunk-MQJ6MGTC.js","sourcesContent":["\"use client\";\n\nimport { memo } from \"react\";\nimport { ArrowLeft, Plus, ShoppingCart, X } from \"lucide-react\";\n// TODO: BotIcon — we use a small inline fallback instead of a shared icon export.\nimport { cn } from \"../core/utils\";\nimport { useI18n } from \"../hooks/use-i18n\";\nimport { useChatContext } from \"../hooks/use-chat-context\";\n\ninterface ChatHeaderProps {\n\tisWelcome?: boolean;\n\tonNewConversation?: () => void;\n\tonClose?: () => void;\n\tclientName?: string;\n\tlogoUrl?: string;\n\tcartCount?: number;\n\tonCartClick?: () => void;\n}\n\nfunction BotIcon({ className }: { className?: string }) {\n\treturn (\n\t\t<svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n\t\t\t<rect x=\"3\" y=\"8\" width=\"18\" height=\"12\" rx=\"2\" />\n\t\t\t<circle cx=\"8.5\" cy=\"14\" r=\"1\" />\n\t\t\t<circle cx=\"15.5\" cy=\"14\" r=\"1\" />\n\t\t\t<path d=\"M12 4v4\" />\n\t\t\t<path d=\"M8 2h8\" />\n\t\t</svg>\n\t);\n}\n\nexport const ChatHeader = memo(function ChatHeader({\n\tisWelcome = false,\n\tonNewConversation,\n\tonClose,\n\tclientName,\n\tlogoUrl,\n\tcartCount,\n\tonCartClick,\n}: ChatHeaderProps) {\n\tconst { t, direction } = useI18n();\n\t// Fall back to context clientName if not overridden by props\n\tconst ctx = useChatContext();\n\tconst displayName = clientName || ctx.config.clientName || \"AI Assistant\";\n\n\tconst LogoOrIcon = () => {\n\t\tif (logoUrl) {\n\t\t\treturn (\n\t\t\t\t<img\n\t\t\t\t\tsrc={logoUrl}\n\t\t\t\t\talt={displayName}\n\t\t\t\t\tclassName=\"max-h-[40px] w-auto max-w-[120px] object-contain\"\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\treturn <BotIcon className=\"w-6 h-6\" />;\n\t};\n\n\tconst SmallLogoOrIcon = () => {\n\t\tif (logoUrl) {\n\t\t\treturn (\n\t\t\t\t<img\n\t\t\t\t\tsrc={logoUrl}\n\t\t\t\t\talt={displayName}\n\t\t\t\t\tclassName=\"h-5 w-auto max-w-[100px] object-contain\"\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\treturn <BotIcon className=\"w-5 h-5\" />;\n\t};\n\n\tconst handleCloseAction = () => {\n\t\tonClose?.();\n\t\tif (typeof document !== \"undefined\") {\n\t\t\tconst event = new CustomEvent(\"aigentyc:close-chat\", {\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t});\n\t\t\tdocument.dispatchEvent(event);\n\t\t}\n\t};\n\n\tif (isWelcome) {\n\t\treturn (\n\t\t\t<header\n\t\t\t\tclassName=\"flex items-center justify-between px-6 py-4 border-b\"\n\t\t\t\tstyle={{ background: \"var(--ac-background)\", borderColor: \"var(--ac-border)\" }}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={handleCloseAction}\n\t\t\t\t\tclassName=\"p-1 hover:bg-secondary rounded transition-colors\"\n\t\t\t\t>\n\t\t\t\t\t<X className=\"w-6 h-6\" />\n\t\t\t\t</button>\n\t\t\t\t{logoUrl ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<span className=\"text-lg font-medium\">{displayName}</span>\n\t\t\t\t\t\t<LogoOrIcon />\n\t\t\t\t\t</>\n\t\t\t\t) : (\n\t\t\t\t\t<span className=\"text-lg font-medium\">{displayName}</span>\n\t\t\t\t)}\n\t\t\t\t{!logoUrl && <BotIcon className=\"w-6 h-6\" />}\n\t\t\t</header>\n\t\t);\n\t}\n\n\treturn (\n\t\t<header\n\t\t\tclassName=\"flex items-center justify-between px-6 py-4 border-b\"\n\t\t\tstyle={{ background: \"var(--ac-background)\", borderColor: \"var(--ac-border)\" }}\n\t\t>\n\t\t\t<div className=\"flex items-center gap-4\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={onNewConversation}\n\t\t\t\t\tclassName=\"p-2 hover:bg-secondary rounded-lg transition-colors\"\n\t\t\t\t\ttitle={t(\"backToStart\")}\n\t\t\t\t>\n\t\t\t\t\t<ArrowLeft className={cn(\"w-5 h-5\", direction === \"rtl\" && \"rotate-180\")} />\n\t\t\t\t</button>\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<SmallLogoOrIcon />\n\t\t\t\t\t{!logoUrl && <span className=\"font-medium text-sm\">{displayName}</span>}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t{cartCount !== undefined && cartCount >= 0 && onCartClick && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={onCartClick}\n\t\t\t\t\t\tclassName=\"relative p-2 hover:bg-secondary rounded-lg transition-colors\"\n\t\t\t\t\t\ttitle={t(\"cart\" as never)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ShoppingCart className=\"w-5 h-5\" />\n\t\t\t\t\t\t{cartCount > 0 && (\n\t\t\t\t\t\t\t<span className=\"absolute -top-0.5 -end-0.5 min-w-[18px] h-[18px] flex items-center justify-center bg-red-500 text-white text-[10px] font-bold rounded-full px-1\">\n\t\t\t\t\t\t\t\t{cartCount}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={onNewConversation}\n\t\t\t\t\tclassName=\"p-2 hover:bg-secondary rounded-lg transition-colors\"\n\t\t\t\t\ttitle={t(\"newConversation\")}\n\t\t\t\t>\n\t\t\t\t\t<Plus className=\"w-5 h-5\" />\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={handleCloseAction}\n\t\t\t\t\tclassName=\"p-2 hover:bg-secondary rounded-lg transition-colors\"\n\t\t\t\t\ttitle={t(\"closeChat\")}\n\t\t\t\t>\n\t\t\t\t\t<X className=\"w-5 h-5\" />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</header>\n\t);\n});\n","\"use client\";\n\nimport { useState, memo } from \"react\";\nimport { useI18n } from \"../hooks/use-i18n\";\nimport { useAutoResize } from \"../hooks/use-auto-resize\";\nimport type { ChatAttachmentInput } from \"../core/types\";\n\ninterface ChatInputProps {\n\tvalue: string;\n\tonChange: (value: string) => void;\n\tonSubmit: (value: string, files?: ChatAttachmentInput[]) => void;\n\tisProcessing?: boolean;\n\tplaceholder?: string;\n}\n\nexport const ChatInput = memo(function ChatInput({\n\tvalue,\n\tonChange,\n\tonSubmit,\n\tisProcessing = false,\n\tplaceholder,\n}: ChatInputProps) {\n\tconst [isFocused, setIsFocused] = useState(false);\n\t// True while an IME is mid-composition. Enter commits the candidate then, and\n\t// must not also send the message — the CJK equivalent of sending half a word.\n\tconst [isComposing, setIsComposing] = useState(false);\n\tconst { t, direction } = useI18n();\n\tconst { ref: textareaRef } = useAutoResize<HTMLTextAreaElement>(value, {\n\t\tminHeight: 24,\n\t\tmaxHeight: 160,\n\t});\n\n\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n\t\tif (e.key !== \"Enter\") return;\n\t\tif (isComposing || e.nativeEvent.isComposing) return;\n\t\t// Shift+Enter is the newline, matching every chat client the visitor\n\t\t// already uses.\n\t\tif (e.shiftKey) return;\n\t\te.preventDefault();\n\t\tif (!value.trim() || isProcessing) return;\n\t\tonSubmit(value);\n\t};\n\n\tconst hasValue = value.trim().length > 0;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`\n\t\t\t\trelative flex items-end gap-3\n\t\t\t\trounded-2xl\n\t\t\t\tborder-2 transition-all duration-300\n\t\t\t\t${isFocused\n\t\t\t\t\t? \"shadow-lg\"\n\t\t\t\t\t: \"shadow-md hover:shadow-lg\"\n\t\t\t\t}\n\t\t\t\tps-4 md:ps-5 pe-1.5 md:pe-2 py-1.5 md:py-2\n\t\t\t`}\n\t\t\tstyle={{\n\t\t\t\tbackgroundColor: \"var(--ac-background)\",\n\t\t\t\tborderColor: isFocused ? \"var(--ac-primary)\" : \"var(--ac-border, #e8e8e8)\",\n\t\t\t}}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName=\"shrink-0 transition-colors duration-300 self-center\"\n\t\t\t\tstyle={{ color: isFocused ? \"var(--ac-primary)\" : \"#a0a0a0\" }}\n\t\t\t>\n\t\t\t\t<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n\t\t\t\t\t<circle cx=\"11\" cy=\"11\" r=\"8\" />\n\t\t\t\t\t<path d=\"m21 21-4.3-4.3\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\n\t\t\t<textarea\n\t\t\t\tref={textareaRef}\n\t\t\t\tdir={direction}\n\t\t\t\trows={1}\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\tonCompositionStart={() => setIsComposing(true)}\n\t\t\t\tonCompositionEnd={() => setIsComposing(false)}\n\t\t\t\tonFocus={() => setIsFocused(true)}\n\t\t\t\tonBlur={() => setIsFocused(false)}\n\t\t\t\tdisabled={isProcessing}\n\t\t\t\tplaceholder={placeholder || t(\"typeMessage\")}\n\t\t\t\tclassName=\"\n\t\t\t\t\tflex-1 bg-transparent text-start\n\t\t\t\t\toutline-none text-base resize-none\n\t\t\t\t\tpy-[14px] md:py-[17px]\n\t\t\t\t\tdisabled:opacity-50\n\t\t\t\t\"\n\t\t\t\tstyle={{ color: \"var(--ac-text)\" }}\n\t\t\t/>\n\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => onSubmit(value)}\n\t\t\t\tdisabled={!hasValue || isProcessing}\n\t\t\t\tclassName={`\n\t\t\t\t\tgroup relative flex items-center justify-center\n\t\t\t\t\tw-10 h-10 md:w-12 md:h-12\n\t\t\t\t\trounded-xl shrink-0 self-end mb-1\n\t\t\t\t\ttransition-all duration-300 overflow-hidden\n\t\t\t\t\t${hasValue && !isProcessing ? \"shadow-md hover:shadow-lg hover:scale-105\" : \"cursor-not-allowed\"}\n\t\t\t\t\tdisabled:hover:scale-100\n\t\t\t\t`}\n\t\t\t\tstyle={{\n\t\t\t\t\tbackgroundColor: hasValue && !isProcessing ? \"var(--ac-primary)\" : \"#f0f0f0\",\n\t\t\t\t\tcolor: hasValue && !isProcessing ? \"var(--ac-primary-foreground, #fff)\" : \"#a0a0a0\",\n\t\t\t\t}}\n\t\t\t\ttitle={t(\"send\")}\n\t\t\t>\n\t\t\t\t{isProcessing ? (\n\t\t\t\t\t<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n\t\t\t\t\t\t<rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" />\n\t\t\t\t\t</svg>\n\t\t\t\t) : (\n\t\t\t\t\t<svg\n\t\t\t\t\t\tclassName={`w-5 h-5 md:w-6 md:h-6 relative z-10 transition-transform duration-300 group-hover:translate-x-0.5 ${direction === \"rtl\" ? \"rotate-180\" : \"\"}`}\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth=\"2.5\"\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<path d=\"M5 12h14\" />\n\t\t\t\t\t\t<path d=\"m12 5 7 7-7 7\" />\n\t\t\t\t\t</svg>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t</div>\n\t);\n});\n","\"use client\";\n\nimport { useI18n } from \"../hooks/use-i18n\";\n\ninterface ChatFooterProps {\n\tfooterText?: string;\n}\n\nexport function ChatFooter({ footerText }: ChatFooterProps) {\n\tconst { t } = useI18n();\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"flex flex-wrap items-center justify-center gap-1.5 sm:gap-2 py-2 sm:py-3 text-xs sm:text-sm px-4\"\n\t\t\tstyle={{ color: \"var(--ac-chat-footer-text, #c4c4c4)\" }}\n\t\t>\n\t\t\t<span className=\"text-center\">{footerText || t(\"alwaysVerify\")}</span>\n\t\t\t<span className=\"hidden sm:inline\">|</span>\n\t\t\t<span className=\"hidden sm:inline\">{t(\"poweredBy\")}</span>\n\t\t\t<a\n\t\t\t\thref=\"https://aigentyc.ai/\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\tclassName=\"font-semibold tracking-tight hover:underline\"\n\t\t\t\tstyle={{ color: \"var(--ac-text, inherit)\" }}\n\t\t\t>\n\t\t\t\taiGentyc\n\t\t\t</a>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { useState, useEffect, useRef } from \"react\";\nimport {\n\tMessageSquare,\n\tZap,\n\tShield,\n\tSearch,\n\tHelpCircle,\n\tFileText,\n\tUsers,\n\tSettings,\n\tUtensils,\n\tCoffee,\n\tHotel,\n\tMapPin,\n\tCalendar,\n\tStar,\n\tHeart,\n\tBuilding,\n\tFlag,\n\tFerrisWheel,\n\tTicket,\n\ttype LucideIcon,\n} from \"lucide-react\";\nimport { cn } from \"../core/utils\";\nimport { useIsMobile } from \"../hooks/use-mobile\";\nimport { useI18n } from \"../hooks/use-i18n\";\nimport type { QuestionConfig } from \"../core/types\";\n\nconst ICON_MAP: Record<string, LucideIcon> = {\n\tShield, MessageSquare, Zap, Search, HelpCircle, FileText, Users, Settings,\n\tUtensils, Coffee, Hotel, MapPin, Calendar, Star, Heart, Building, Flag, FerrisWheel, Ticket,\n};\n\ninterface WelcomePageProps {\n\tonSelectCategory: (category: string, hideMessage?: boolean) => void;\n\tisProcessing?: boolean;\n\tclientName?: string;\n\tisOpen?: boolean;\n\tquestions?: QuestionConfig[];\n\twelcomeTitle?: string;\n\twelcomeSubtitle?: string;\n\thideWelcomeHeader?: boolean;\n\tloading?: boolean;\n\tquestionsLayout?: \"vertical\" | \"horizontal\";\n\tquestionsLayoutMobile?: \"vertical\" | \"horizontal\";\n}\n\ntype DefaultActionKey =\n\t| \"aboutUs\" | \"aboutUsDesc\" | \"aboutUsQuery\"\n\t| \"support\" | \"supportDesc\" | \"supportQuery\"\n\t| \"features\" | \"featuresDesc\" | \"featuresQuery\"\n\t| \"search\" | \"searchDesc\" | \"searchQuery\";\n\nconst DEFAULT_ACTIONS: { id: string; label: DefaultActionKey; description: DefaultActionKey; icon: LucideIcon; query: DefaultActionKey }[] = [\n\t{ id: \"about\", label: \"aboutUs\", description: \"aboutUsDesc\", icon: Shield, query: \"aboutUsQuery\" },\n\t{ id: \"support\", label: \"support\", description: \"supportDesc\", icon: MessageSquare, query: \"supportQuery\" },\n\t{ id: \"features\", label: \"features\", description: \"featuresDesc\", icon: Zap, query: \"featuresQuery\" },\n\t{ id: \"search\", label: \"search\", description: \"searchDesc\", icon: Search, query: \"searchQuery\" },\n];\n\nexport function WelcomePage({\n\tonSelectCategory,\n\tisProcessing = false,\n\tisOpen = true,\n\tclientName,\n\tquestions,\n\twelcomeTitle,\n\twelcomeSubtitle,\n\thideWelcomeHeader = false,\n\tloading = false,\n\tquestionsLayout = \"vertical\",\n\tquestionsLayoutMobile,\n}: WelcomePageProps) {\n\tconst isMobile = useIsMobile();\n\tconst { t } = useI18n();\n\tconst layout = isMobile && questionsLayoutMobile ? questionsLayoutMobile : questionsLayout;\n\tconst isHorizontal = layout === \"horizontal\";\n\tconst [shouldAnimate, setShouldAnimate] = useState(false);\n\tconst wasOpenRef = useRef(false);\n\n\tconst hasCustomQuestions = questions && questions.length > 0;\n\n\tuseEffect(() => {\n\t\tif (isMobile && isOpen && !wasOpenRef.current) {\n\t\t\tconst timer = setTimeout(() => setShouldAnimate(true), 350);\n\t\t\twasOpenRef.current = true;\n\t\t\treturn () => clearTimeout(timer);\n\t\t}\n\t\tif (!isOpen) {\n\t\t\tsetShouldAnimate(false);\n\t\t\twasOpenRef.current = false;\n\t\t}\n\t}, [isMobile, isOpen]);\n\n\tconst handleActionClick = (action: typeof DEFAULT_ACTIONS[0]) => {\n\t\tif (isProcessing) return;\n\t\tonSelectCategory(t(action.query as never, { clientName } as never) as string, true);\n\t};\n\n\tconst handleCustomQuestionClick = (question: QuestionConfig) => {\n\t\tif (isProcessing) return;\n\t\tonSelectCategory(question.query, true);\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"flex flex-col items-center flex-1 min-h-0 overflow-y-auto px-5 sm:px-[40px] py-6 sm:py-12\"\n\t\t\tstyle={{ backgroundColor: \"var(--ac-background)\" }}\n\t\t>\n\t\t\t<div className=\"flex flex-col items-center gap-4 sm:gap-8 w-full my-auto\">\n\t\t\t\t{!hideWelcomeHeader && (\n\t\t\t\t\t<div className=\"text-center max-w-md\">\n\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<div className=\"h-8 sm:h-9 bg-muted rounded-lg w-3/4 mx-auto mb-3 animate-pulse\" />\n\t\t\t\t\t\t\t\t<div className=\"h-5 bg-muted rounded w-full mx-auto animate-pulse\" />\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<h1 className=\"text-[26px] sm:text-[32px] font-semibold mb-2 sm:mb-3\" style={{ color: \"var(--ac-text)\" }}>\n\t\t\t\t\t\t\t\t\t{welcomeTitle || t(\"welcomeTitle\", { clientName } as never)}\n\t\t\t\t\t\t\t\t</h1>\n\t\t\t\t\t\t\t\t<p className=\"text-[15px] sm:text-lg text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t{welcomeSubtitle || t(\"welcomeSubtitle\", { clientName } as never)}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<div className=\"grid grid-cols-2 gap-3 w-full max-w-2xl\">\n\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{[1, 2, 3, 4].map((i) => (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"flex gap-3 p-4 border rounded-2xl animate-pulse\",\n\t\t\t\t\t\t\t\t\t\tisHorizontal ? \"flex-row items-center\" : \"flex-col items-center\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{ backgroundColor: \"var(--ac-background)\", borderColor: \"var(--ac-border)\" }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div className=\"w-10 h-10 rounded-lg bg-muted shrink-0\" />\n\t\t\t\t\t\t\t\t\t<div className={cn(\"flex flex-col gap-1.5 w-full\", !isHorizontal && \"items-center\")}>\n\t\t\t\t\t\t\t\t\t\t<div className=\"h-4 bg-muted rounded w-3/4\" />\n\t\t\t\t\t\t\t\t\t\t<div className=\"h-3 bg-muted rounded w-1/2\" />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : hasCustomQuestions ? (\n\t\t\t\t\t\tquestions.map((question, index) => {\n\t\t\t\t\t\t\tconst Icon = question.icon ? ICON_MAP[question.icon] || HelpCircle : null;\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tkey={question.id}\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={() => handleCustomQuestionClick(question)}\n\t\t\t\t\t\t\t\t\tdisabled={isProcessing}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"group relative w-full active:scale-[0.98] disabled:opacity-50 disabled:cursor-not-allowed transition-all duration-200\",\n\t\t\t\t\t\t\t\t\t\t\"flex gap-3 p-4\",\n\t\t\t\t\t\t\t\t\t\t\"border rounded-2xl shadow-sm hover:bg-accent\",\n\t\t\t\t\t\t\t\t\t\tisHorizontal ? \"flex-row items-center text-start\" : \"flex-col items-center text-center\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: question.bgColor || \"var(--ac-background)\",\n\t\t\t\t\t\t\t\t\t\tborderColor: \"var(--ac-border)\",\n\t\t\t\t\t\t\t\t\t\t...(isMobile\n\t\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t\topacity: shouldAnimate ? 1 : 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttransform: shouldAnimate ? \"translateY(0)\" : \"translateY(8px)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\ttransition: \"opacity 300ms ease-out, transform 300ms ease-out, background-color 150ms\",\n\t\t\t\t\t\t\t\t\t\t\t\t\ttransitionDelay: shouldAnimate ? `${index * 60}ms` : \"0ms\",\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{Icon && (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 w-10 h-10 rounded-lg transition-all duration-200\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: question.iconBgColor || \"color-mix(in srgb, var(--ac-primary) 10%, transparent)\",\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-5 h-5\"\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: question.iconColor || \"var(--ac-primary)\" }}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t<div className={cn(\"flex flex-col gap-0.5 min-w-0 w-full\", !isHorizontal && \"items-center\")}>\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"font-semibold text-[13px] sm:text-[14px] leading-snug\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: question.textColor || \"var(--ac-text)\" }}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{question.label}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t{question.description && (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-[11px] sm:text-[12px] leading-snug text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t{question.description}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})\n\t\t\t\t\t) : (\n\t\t\t\t\t\tDEFAULT_ACTIONS.map((action, index) => {\n\t\t\t\t\t\t\tconst Icon = action.icon;\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tkey={action.id}\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={() => handleActionClick(action)}\n\t\t\t\t\t\t\t\t\tdisabled={isProcessing}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"group relative w-full active:scale-[0.98] disabled:opacity-50 disabled:cursor-not-allowed transition-all duration-200\",\n\t\t\t\t\t\t\t\t\t\t\"flex gap-3 p-4\",\n\t\t\t\t\t\t\t\t\t\t\"border rounded-2xl shadow-sm hover:bg-accent hover:shadow-md\",\n\t\t\t\t\t\t\t\t\t\tisHorizontal ? \"flex-row items-center text-start\" : \"flex-col items-center text-center\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"var(--ac-background)\",\n\t\t\t\t\t\t\t\t\t\tborderColor: \"var(--ac-border)\",\n\t\t\t\t\t\t\t\t\t\t...(isMobile\n\t\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t\topacity: shouldAnimate ? 1 : 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttransform: shouldAnimate ? \"translateY(0)\" : \"translateY(8px)\",\n\t\t\t\t\t\t\t\t\t\t\t\t\ttransition: \"opacity 300ms ease-out, transform 300ms ease-out, background-color 150ms\",\n\t\t\t\t\t\t\t\t\t\t\t\t\ttransitionDelay: shouldAnimate ? `${index * 60}ms` : \"0ms\",\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 w-10 h-10 rounded-lg transition-all duration-200\"\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"color-mix(in srgb, var(--ac-primary) 10%, transparent)\",\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Icon className=\"w-5 h-5\" style={{ color: \"var(--ac-primary)\" }} strokeWidth={2} />\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t<div className={cn(\"flex flex-col gap-0.5 min-w-0 w-full\", !isHorizontal && \"items-center\")}>\n\t\t\t\t\t\t\t\t\t\t<span className=\"font-semibold text-[13px] sm:text-[14px] leading-snug\" style={{ color: \"var(--ac-text)\" }}>\n\t\t\t\t\t\t\t\t\t\t\t{t(action.label as never, { clientName } as never)}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-[11px] sm:text-[12px] text-muted-foreground leading-snug\">\n\t\t\t\t\t\t\t\t\t\t\t{t(action.description as never, { clientName } as never)}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { useState, useEffect, useRef } from \"react\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../core/utils\";\nimport { useI18n } from \"../hooks/use-i18n\";\nimport type { QuestionConfig } from \"../core/types\";\n\ninterface QuickQuestionsProps {\n\tquestions: QuestionConfig[];\n\tonSelect: (query: string) => void;\n\tisProcessing?: boolean;\n\t/** A key that changes when the page changes, so we can re-show dismissed questions */\n\tpageKey?: string;\n}\n\nexport function QuickQuestions({ questions, onSelect, isProcessing = false, pageKey }: QuickQuestionsProps) {\n\tconst [dismissed, setDismissed] = useState(false);\n\tconst prevPageKeyRef = useRef(pageKey);\n\tconst scrollRef = useRef<HTMLDivElement>(null);\n\tconst { direction } = useI18n();\n\n\tuseEffect(() => {\n\t\tif (prevPageKeyRef.current !== pageKey) {\n\t\t\tsetDismissed(false);\n\t\t\tprevPageKeyRef.current = pageKey;\n\t\t}\n\t}, [pageKey]);\n\n\tif (dismissed || questions.length === 0) return null;\n\n\tconst isRtl = direction === \"rtl\";\n\n\treturn (\n\t\t<div className=\"pb-2.5 pt-1\">\n\t\t\t<div className=\"relative\">\n\t\t\t\t<div\n\t\t\t\t\tref={scrollRef}\n\t\t\t\t\tclassName={cn(\"flex gap-2 overflow-x-auto pb-1 scrollbar-none\", isRtl && \"flex-row-reverse\")}\n\t\t\t\t\tstyle={{ scrollbarWidth: \"none\", msOverflowStyle: \"none\" }}\n\t\t\t\t>\n\t\t\t\t\t{questions.map((q, index) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={q.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => onSelect(q.query)}\n\t\t\t\t\t\t\tdisabled={isProcessing}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"group relative shrink-0\",\n\t\t\t\t\t\t\t\t\"flex items-center gap-2 px-4 py-2.5\",\n\t\t\t\t\t\t\t\t\"text-[13px] leading-tight\",\n\t\t\t\t\t\t\t\t\"border rounded-2xl\",\n\t\t\t\t\t\t\t\t\"hover:shadow-sm\",\n\t\t\t\t\t\t\t\t\"active:scale-[0.98] transition-all duration-150\",\n\t\t\t\t\t\t\t\t\"disabled:opacity-50 disabled:cursor-not-allowed\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tbackgroundColor: \"var(--ac-background)\",\n\t\t\t\t\t\t\t\tborderColor: \"var(--ac-border)\",\n\t\t\t\t\t\t\t\tcolor: \"var(--ac-text)\",\n\t\t\t\t\t\t\t\tanimationDelay: `${index * 40}ms`,\n\t\t\t\t\t\t\t\tanimation: \"quickq-in 0.25s ease-out both\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"whitespace-nowrap\">{q.label}</span>\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"w-3.5 h-3.5 shrink-0 opacity-50 group-hover:opacity-100 transition-all duration-150\",\n\t\t\t\t\t\t\t\t\t\"group-hover:translate-x-0.5\",\n\t\t\t\t\t\t\t\t\tisRtl && \"rotate-180 group-hover:-translate-x-0.5\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstyle={{ color: \"var(--ac-primary)\" }}\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tstrokeWidth=\"2.5\"\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path d=\"M5 12h14\" />\n\t\t\t\t\t\t\t\t<path d=\"m12 5 7 7-7 7\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() => setDismissed(true)}\n\t\t\t\t\t\tclassName=\"shrink-0 flex items-center justify-center w-8 h-8 my-auto rounded-full hover:bg-accent transition-colors duration-150\"\n\t\t\t\t\t\ttitle={isRtl ? \"סגור\" : \"Dismiss\"}\n\t\t\t\t\t>\n\t\t\t\t\t\t<X className=\"w-3.5 h-3.5\" />\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<style>{`\n\t\t\t\t@keyframes quickq-in {\n\t\t\t\t\tfrom { opacity: 0; transform: translateY(6px); }\n\t\t\t\t\tto { opacity: 1; transform: translateY(0); }\n\t\t\t\t}\n\t\t\t\t.scrollbar-none::-webkit-scrollbar { display: none; }\n\t\t\t`}</style>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { X, Minus, Plus, Trash2, ShoppingCart } from \"lucide-react\";\nimport { useI18n } from \"../hooks/use-i18n\";\n\ninterface CartItem {\n\tkey: string;\n\tid: number;\n\tname: string;\n\tquantity: number;\n\tprices: {\n\t\tprice: string;\n\t\tregular_price: string;\n\t\tsale_price: string;\n\t\tcurrency_minor_unit: number;\n\t\tcurrency_symbol: string;\n\t\tcurrency_code: string;\n\t};\n\ttotals: {\n\t\tline_total: string;\n\t\tcurrency_minor_unit: number;\n\t};\n\timages: Array<{ src: string; thumbnail: string; alt: string }>;\n}\n\ninterface CartData {\n\titems: CartItem[];\n\titems_count: number;\n\ttotals: {\n\t\ttotal_price: string;\n\t\tcurrency_minor_unit: number;\n\t\tcurrency_symbol: string;\n\t\tcurrency_code: string;\n\t};\n}\n\ninterface CartDrawerProps {\n\tstoreOrigin: string;\n\tisOpen: boolean;\n\tonClose: () => void;\n\tonCartUpdate?: (count: number) => void;\n}\n\nfunction formatPrice(minorUnits: string, currencyMinorUnit: number, currencySymbol: string): string {\n\tconst value = parseInt(minorUnits, 10) / Math.pow(10, currencyMinorUnit);\n\tconst formatted = value % 1 === 0 ? value.toFixed(0) : value.toFixed(2);\n\treturn `${currencySymbol}${formatted}`;\n}\n\nfunction decodeHtmlEntities(text: string): string {\n\treturn text\n\t\t.replace(/&#(\\d+);/g, (_, code) => String.fromCharCode(Number(code)))\n\t\t.replace(/&amp;/g, \"&\")\n\t\t.replace(/&lt;/g, \"<\")\n\t\t.replace(/&gt;/g, \">\")\n\t\t.replace(/&quot;/g, '\"')\n\t\t.replace(/&ndash;/g, \"–\")\n\t\t.replace(/&mdash;/g, \"—\")\n\t\t.replace(/&laquo;/g, \"«\")\n\t\t.replace(/&raquo;/g, \"»\");\n}\n\nexport function CartDrawer({ storeOrigin, isOpen, onClose, onCartUpdate }: CartDrawerProps) {\n\tconst { t } = useI18n();\n\tconst [cart, setCart] = useState<CartData | null>(null);\n\tconst [loading, setLoading] = useState(false);\n\tconst [updatingKeys, setUpdatingKeys] = useState<Set<string>>(new Set());\n\tconst nonceRef = useRef<string>(\"\");\n\n\tconst fetchCart = useCallback(async () => {\n\t\tsetLoading(true);\n\t\ttry {\n\t\t\tconst res = await fetch(`${storeOrigin}/wp-json/wc/store/v1/cart`, { credentials: \"include\" });\n\t\t\tconst nonce = res.headers.get(\"Nonce\") || res.headers.get(\"X-WC-Store-API-Nonce\") || \"\";\n\t\t\tif (nonce) nonceRef.current = nonce;\n\t\t\tif (res.ok) {\n\t\t\t\tconst data: CartData = await res.json();\n\t\t\t\tsetCart(data);\n\t\t\t\tonCartUpdate?.(data.items_count);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error(\"[CartDrawer] Failed to fetch cart:\", err);\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t}, [storeOrigin, onCartUpdate]);\n\n\tuseEffect(() => {\n\t\tif (isOpen) fetchCart();\n\t}, [isOpen, fetchCart]);\n\n\tconst updateItem = useCallback(\n\t\tasync (key: string, quantity: number) => {\n\t\t\tsetUpdatingKeys((prev) => new Set(prev).add(key));\n\t\t\ttry {\n\t\t\t\tconst res = await fetch(`${storeOrigin}/wp-json/wc/store/v1/cart/update-item`, {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t\tNonce: nonceRef.current,\n\t\t\t\t\t\t\"X-WC-Store-API-Nonce\": nonceRef.current,\n\t\t\t\t\t},\n\t\t\t\t\tcredentials: \"include\",\n\t\t\t\t\tbody: JSON.stringify({ key, quantity }),\n\t\t\t\t});\n\t\t\t\tconst nonce = res.headers.get(\"Nonce\") || res.headers.get(\"X-WC-Store-API-Nonce\") || \"\";\n\t\t\t\tif (nonce) nonceRef.current = nonce;\n\t\t\t\tif (res.ok) {\n\t\t\t\t\tconst data: CartData = await res.json();\n\t\t\t\t\tsetCart(data);\n\t\t\t\t\tonCartUpdate?.(data.items_count);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(\"[CartDrawer] Failed to update item:\", err);\n\t\t\t} finally {\n\t\t\t\tsetUpdatingKeys((prev) => {\n\t\t\t\t\tconst next = new Set(prev);\n\t\t\t\t\tnext.delete(key);\n\t\t\t\t\treturn next;\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t[storeOrigin, onCartUpdate],\n\t);\n\n\tconst removeItem = useCallback(\n\t\tasync (key: string) => {\n\t\t\tsetUpdatingKeys((prev) => new Set(prev).add(key));\n\t\t\ttry {\n\t\t\t\tconst res = await fetch(`${storeOrigin}/wp-json/wc/store/v1/cart/remove-item`, {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t\tNonce: nonceRef.current,\n\t\t\t\t\t\t\"X-WC-Store-API-Nonce\": nonceRef.current,\n\t\t\t\t\t},\n\t\t\t\t\tcredentials: \"include\",\n\t\t\t\t\tbody: JSON.stringify({ key }),\n\t\t\t\t});\n\t\t\t\tconst nonce = res.headers.get(\"Nonce\") || res.headers.get(\"X-WC-Store-API-Nonce\") || \"\";\n\t\t\t\tif (nonce) nonceRef.current = nonce;\n\t\t\t\tif (res.ok) {\n\t\t\t\t\tconst data: CartData = await res.json();\n\t\t\t\t\tsetCart(data);\n\t\t\t\t\tonCartUpdate?.(data.items_count);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(\"[CartDrawer] Failed to remove item:\", err);\n\t\t\t} finally {\n\t\t\t\tsetUpdatingKeys((prev) => {\n\t\t\t\t\tconst next = new Set(prev);\n\t\t\t\t\tnext.delete(key);\n\t\t\t\t\treturn next;\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t[storeOrigin, onCartUpdate],\n\t);\n\n\tif (!isOpen) return null;\n\n\tconst items = cart?.items ?? [];\n\tconst totalPrice = cart\n\t\t? formatPrice(cart.totals.total_price, cart.totals.currency_minor_unit, cart.totals.currency_symbol)\n\t\t: \"\";\n\n\treturn (\n\t\t<div className=\"absolute inset-x-0 top-[57px] z-50 px-3 pt-1\" dir=\"rtl\">\n\t\t\t<div className=\"rounded-xl border shadow-lg overflow-hidden\" style={{ backgroundColor: \"var(--ac-background)\", borderColor: \"var(--ac-border)\" }}>\n\t\t\t\t<div className=\"flex items-center justify-between px-4 py-3 border-b bg-muted/30\" style={{ borderColor: \"var(--ac-border)\" }}>\n\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t<ShoppingCart className=\"w-4 h-4\" style={{ color: \"var(--ac-primary)\" }} />\n\t\t\t\t\t\t<h3 className=\"text-sm font-semibold\" style={{ color: \"var(--ac-text)\" }}>\n\t\t\t\t\t\t\t{t(\"yourCart\" as never)}\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t<span className=\"text-xs text-muted-foreground\">\n\t\t\t\t\t\t\t({t(\"cartItems\" as never, { count: String(cart?.items_count ?? 0) } as never)})\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<button type=\"button\" onClick={onClose} className=\"p-1 hover:bg-secondary rounded transition-colors\">\n\t\t\t\t\t\t<X className=\"w-4 h-4 text-muted-foreground\" />\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"max-h-[60vh] overflow-y-auto\">\n\t\t\t\t\t{loading && !cart ? (\n\t\t\t\t\t\t<div className=\"flex items-center justify-center py-8\">\n\t\t\t\t\t\t\t<div className=\"w-5 h-5 border-2 border-t-transparent rounded-full animate-spin\" style={{ borderColor: \"var(--ac-primary)\", borderTopColor: \"transparent\" }} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : items.length === 0 ? (\n\t\t\t\t\t\t<div className=\"flex flex-col items-center gap-2 py-8 text-muted-foreground\">\n\t\t\t\t\t\t\t<ShoppingCart className=\"w-8 h-8 opacity-40\" />\n\t\t\t\t\t\t\t<p className=\"text-sm\">{t(\"cartEmpty\" as never)}</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"divide-y\" style={{ borderColor: \"var(--ac-border)\" }}>\n\t\t\t\t\t\t\t{items.map((item) => {\n\t\t\t\t\t\t\t\tconst isUpdating = updatingKeys.has(item.key);\n\t\t\t\t\t\t\t\tconst imgSrc = item.images?.[0]?.thumbnail || item.images?.[0]?.src || \"\";\n\t\t\t\t\t\t\t\tconst lineTotal = formatPrice(\n\t\t\t\t\t\t\t\t\titem.totals.line_total,\n\t\t\t\t\t\t\t\t\titem.totals.currency_minor_unit,\n\t\t\t\t\t\t\t\t\tcart!.totals.currency_symbol,\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<div key={item.key} className={`flex items-center gap-3 px-4 py-3 ${isUpdating ? \"opacity-50\" : \"\"}`}>\n\t\t\t\t\t\t\t\t\t\t{imgSrc ? (\n\t\t\t\t\t\t\t\t\t\t\t<img src={imgSrc} alt={item.name} className=\"w-10 h-10 rounded-lg object-cover shrink-0\" loading=\"lazy\" />\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"w-10 h-10 rounded-lg bg-muted flex items-center justify-center shrink-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t<ShoppingCart className=\"w-4 h-4 text-muted-foreground/40\" />\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex-1 min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t<p className=\"text-[13px] font-medium line-clamp-1\" style={{ color: \"var(--ac-text)\" }}>\n\t\t\t\t\t\t\t\t\t\t\t\t{decodeHtmlEntities(item.name)}\n\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t\t<p className=\"text-xs font-semibold mt-0.5\" style={{ color: \"var(--ac-primary)\" }}>\n\t\t\t\t\t\t\t\t\t\t\t\t{lineTotal}\n\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => updateItem(item.key, item.quantity - 1)}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isUpdating || item.quantity <= 1}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-6 h-6 flex items-center justify-center rounded bg-secondary hover:bg-secondary/80 disabled:opacity-40 transition-colors\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Minus className=\"w-3 h-3\" />\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-xs font-medium w-5 text-center\">{item.quantity}</span>\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => updateItem(item.key, item.quantity + 1)}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isUpdating}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-6 h-6 flex items-center justify-center rounded bg-secondary hover:bg-secondary/80 disabled:opacity-40 transition-colors\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Plus className=\"w-3 h-3\" />\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => removeItem(item.key)}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={isUpdating}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"p-1 hover:bg-red-50 rounded transition-colors text-muted-foreground hover:text-red-500\"\n\t\t\t\t\t\t\t\t\t\t\ttitle={t(\"removeItem\" as never)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Trash2 className=\"w-3.5 h-3.5\" />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t{items.length > 0 && (\n\t\t\t\t\t<div className=\"border-t px-4 py-3 space-y-2.5 bg-muted/20\" style={{ borderColor: \"var(--ac-border)\" }}>\n\t\t\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t\t\t<span className=\"text-[13px] font-medium text-muted-foreground\">{t(\"cartTotal\" as never)}</span>\n\t\t\t\t\t\t\t<span className=\"text-base font-bold\" style={{ color: \"var(--ac-text)\" }}>\n\t\t\t\t\t\t\t\t{totalPrice}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref={`${storeOrigin}/checkout`}\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\tclassName=\"flex items-center justify-center gap-2 w-full py-2.5 rounded-lg text-sm font-semibold hover:opacity-90 transition-opacity no-underline\"\n\t\t\t\t\t\t\tstyle={{ backgroundColor: \"var(--ac-primary)\", color: \"var(--ac-primary-foreground, #fff)\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{t(\"checkout\" as never)}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\ninterface SystemMessageProps {\n\tmessage: string;\n\ttype?: string;\n}\n\nconst TRANSLATIONS: Record<string, string> = {\n\toperator_joined: \"הנציג הצטרף לשיחה\",\n\tchat_ended: \"השיחה הסתיימה\",\n\thanded_to_ai: \"השיחה הועברה חזרה לעוזר AI\",\n\toperator_disconnected: \"הנציג התנתק. ממתין לחיבור מחדש...\",\n\toperator_offline: \"הנציג לא זמין כרגע\",\n\toperator_online: \"הנציג חזר לשיחה\",\n\treassigned: \"השיחה הועברה לנציג אחר\",\n\tidle_warning: \"הנציג לא פעיל כרגע\",\n};\n\nfunction translateMessage(message: string, type?: string): string {\n\tif (type && TRANSLATIONS[type]) {\n\t\tconst nameMatch = message.match(/^([A-Za-z\\u0590-\\u05FF\\s]+?) (joined|left|ended|disconnected)/);\n\t\tif (nameMatch && type === \"operator_joined\") {\n\t\t\treturn `${nameMatch[1]} הצטרף/ה לשיחה`;\n\t\t}\n\t\treturn TRANSLATIONS[type];\n\t}\n\treturn message;\n}\n\nexport function SystemMessage({ message, type }: SystemMessageProps) {\n\tconst displayMessage = translateMessage(message, type);\n\n\treturn (\n\t\t<div className=\"flex justify-center my-3\">\n\t\t\t<span className=\"text-[11px] text-muted-foreground bg-muted px-4 py-1.5 rounded-full border border-border/50\">\n\t\t\t\t{displayMessage}\n\t\t\t</span>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\n/**\n * What the visitor sees when a turn fails.\n *\n * ## Why this exists\n *\n * `useChat` surfaces a failed request as `error`, and `ChatContext` maps it to\n * `status: \"error\"` — but until this component nothing rendered either one. A\n * rejected turn therefore looked identical to a turn that was never sent: the\n * visitor typed, the spinner stopped, and nothing came back.\n *\n * That is not only bad for the visitor. It is the reason a bug like \"the chat\n * stops answering after two messages\" arrives as a mystery instead of as a\n * status code: the one machine that knew what went wrong said nothing about it.\n *\n * {@link ChatErrorBoundary} is a different job — it catches a slot or tool\n * renderer that *throws while rendering*. This one reports a turn the server\n * refused.\n *\n * ## The two ways out\n *\n * Retrying is right for a transient failure (a 429, a dropped stream, a 503).\n * It is useless for a conversation the server will keep refusing — an\n * over-length history is re-sent verbatim on every attempt, so \"try again\"\n * fails forever. That case needs a fresh conversation, so the card offers it\n * whenever it recognises the shape, and offers both otherwise.\n */\n\nimport { useI18n } from \"../providers/I18nProvider\";\n\nexport interface ChatErrorProps {\n /** The failed turn, as `useChat` reported it. */\n error?: Error;\n /** Re-send the last turn. Omitted when there is nothing to retry. */\n onRetry?: () => void;\n /** Clear the history and start over. */\n onNewConversation: () => void;\n}\n\n/**\n * Pull the human-readable reason out of a transport error.\n *\n * `DefaultChatTransport` puts the response body in `error.message`, and every\n * refusal from `/api/kb/chat` is `{\"error\": \"<something a visitor can read>\"}`\n * — those messages are written for the visitor (\"Too many requests. Please wait\n * a moment and try again.\"), so showing the server's own words beats any\n * generic string we could substitute.\n *\n * Anything else — a network failure, an HTML error page from a proxy — returns\n * null, and the caller falls back to translated copy. A raw stack trace or a\n * chunk of someone's error page is not something to put in front of a visitor.\n */\nfunction serverMessage(error?: Error): string | null {\n const raw = error?.message?.trim();\n if (!raw || !raw.startsWith(\"{\")) return null;\n try {\n const parsed = JSON.parse(raw) as { error?: unknown };\n const message = typeof parsed.error === \"string\" ? parsed.error.trim() : \"\";\n return message || null;\n } catch {\n return null;\n }\n}\n\n/**\n * Is this a failure that retrying cannot clear?\n *\n * Matched on the server's `code` when it sends one, and on the wording\n * otherwise, so an older deployment still gets the right button.\n */\nfunction isTerminal(error?: Error): boolean {\n const raw = error?.message ?? \"\";\n if (/too_many_messages|message_too_long|request_too_large/.test(raw)) {\n return true;\n }\n return /conversation too long|request too large|message too long/i.test(raw);\n}\n\nexport function ChatError({ error, onRetry, onNewConversation }: ChatErrorProps) {\n const { t, direction } = useI18n();\n const terminal = isTerminal(error);\n const detail = serverMessage(error);\n\n return (\n <div\n role=\"alert\"\n dir={direction}\n className=\"mx-auto w-full max-w-[520px] rounded-xl border px-4 py-3 text-sm\"\n style={{\n borderColor: \"var(--ac-error-border, rgba(220, 38, 38, 0.25))\",\n backgroundColor: \"var(--ac-error-background, rgba(220, 38, 38, 0.06))\",\n color: \"var(--ac-foreground, inherit)\",\n }}\n >\n <p className=\"font-medium\">\n {terminal ? t(\"conversationTooLong\") : t(\"somethingWentWrong\")}\n </p>\n <p className=\"mt-1 opacity-80\">\n {detail ??\n (terminal ? t(\"conversationTooLongDesc\") : t(\"somethingWentWrongDesc\"))}\n </p>\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {/* Retrying an over-length history just fails again, so it is not offered. */}\n {onRetry && !terminal && (\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"rounded-lg px-3 py-1.5 text-sm font-medium\"\n style={{\n backgroundColor: \"var(--ac-primary, #111827)\",\n color: \"var(--ac-primary-foreground, #ffffff)\",\n }}\n >\n {t(\"tryAgain\")}\n </button>\n )}\n <button\n type=\"button\"\n onClick={onNewConversation}\n className=\"rounded-lg border px-3 py-1.5 text-sm font-medium\"\n style={{ borderColor: \"var(--ac-border, rgba(0, 0, 0, 0.15))\" }}\n >\n {t(\"startNewConversation\")}\n </button>\n </div>\n </div>\n );\n}\n","\"use client\";\n\n/**\n * Error boundary for isolating tool-renderer and slot failures.\n *\n * If a custom tool renderer, visualization, or slot component throws, the\n * error is caught here — the rest of the chat stays alive and the user\n * sees a small fallback. Without this, one broken tool crashes the whole\n * conversation view.\n */\n\nimport { Component, type ErrorInfo, type ReactNode } from \"react\";\n\ninterface ErrorBoundaryProps {\n children: ReactNode;\n /**\n * Optional custom fallback. Receives the caught error + a retry fn. If\n * omitted, a minimal neutral fallback is shown.\n */\n fallback?: (error: Error, reset: () => void) => ReactNode;\n /** Called when an error is caught — use for logging/Sentry. */\n onError?: (error: Error, info: ErrorInfo) => void;\n /** Label used in the default fallback text (e.g. \"tool renderer\"). */\n label?: string;\n}\n\ninterface ErrorBoundaryState {\n error: Error | null;\n}\n\nexport class ChatErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n state: ErrorBoundaryState = { error: null };\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { error };\n }\n\n componentDidCatch(error: Error, info: ErrorInfo): void {\n this.props.onError?.(error, info);\n // Dev-only noisy log so failures don't slip by silently.\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\n `[aigentyc-chat-sdk] ${this.props.label || \"component\"} threw:`,\n error,\n info,\n );\n }\n }\n\n reset = () => {\n this.setState({ error: null });\n };\n\n render(): ReactNode {\n if (this.state.error) {\n if (this.props.fallback) {\n return this.props.fallback(this.state.error, this.reset);\n }\n return (\n <div\n role=\"alert\"\n className=\"my-2 rounded-md border border-destructive/30 bg-destructive/10 p-3 text-xs\"\n style={{ color: \"var(--ac-destructive, #dc2626)\" }}\n >\n <div className=\"font-medium\">\n {this.props.label\n ? `Failed to render ${this.props.label}`\n : \"Something went wrong\"}\n </div>\n {process.env.NODE_ENV !== \"production\" && (\n <div className=\"mt-1 opacity-80 font-mono truncate\">{this.state.error.message}</div>\n )}\n <button\n type=\"button\"\n onClick={this.reset}\n className=\"mt-1 underline text-xs opacity-80 hover:opacity-100\"\n >\n Retry\n </button>\n </div>\n );\n }\n return this.props.children;\n }\n}\n","\"use client\";\n\n/**\n * Main chat interface — reads state from ChatContext, I18n, Theme, Slots.\n *\n * Compared to the starter: instead of owning `useChat`, messages are read\n * from `useChatContext()`. Slot-override points:\n * - header, input, welcomePage, loader, assistantMessage, userMessage, tools\n */\n\nimport { useEffect, useMemo, useRef, useState, useCallback, type ReactNode } from \"react\";\nimport { SparklesIcon, Headset } from \"lucide-react\";\n\nimport { useChatContext } from \"../hooks/use-chat-context\";\nimport { useI18n } from \"../hooks/use-i18n\";\nimport { useTheme } from \"../hooks/use-theme\";\nimport { useSlots, renderSlot } from \"../providers/SlotsContext\";\nimport { useLiveChat } from \"../providers/LiveChatProvider\";\n// TODO: `useInteractionTracker` not yet exported from SDK analytics. Stub below.\n\nimport { ChatHeader } from \"./ChatHeader\";\nimport { ChatInput } from \"./ChatInput\";\nimport { ChatFooter } from \"./ChatFooter\";\nimport { WelcomePage } from \"./WelcomePage\";\nimport { QuickQuestions } from \"./QuickQuestions\";\nimport { CartDrawer } from \"./CartDrawer\";\nimport { SystemMessage } from \"./SystemMessage\";\nimport { ToolRenderer } from \"../tools/ToolRenderer\";\nimport {\n\tanchorToLatestTurn,\n\tConversation,\n\tFollowLatestTurn,\n\tConversationContent,\n\tConversationEmptyState,\n\tLATEST_TURN_ATTR,\n} from \"../ai-elements/conversation\";\nimport { ChatError } from \"../ai-elements/chat-error\";\nimport { MessageFeedback } from \"../ai-elements/message-feedback\";\nimport { MessageAttachment, MessageAttachments } from \"../ai-elements/message\";\nimport { ChatErrorBoundary } from \"../ai-elements/error-boundary\";\nimport { Loader } from \"../ai-elements/loader\";\nimport {\n Sources,\n SourcesTrigger,\n SourcesContent,\n Source,\n} from \"../ai-elements/sources\";\n\nimport type { ChatAttachmentInput, QuestionConfig, ToolResult } from \"../core/types\";\n\nexport interface ChatInterfaceProps {\n\t/** Allow per-instance overrides of any context value */\n\tisOpen?: boolean;\n\tonClose?: () => void;\n\tonNewConversation?: () => void;\n\tlogoUrl?: string;\n\tquestions?: QuestionConfig[];\n\tpageQuestions?: QuestionConfig[];\n\tfooterText?: string;\n\twelcomeTitle?: string;\n\twelcomeSubtitle?: string;\n\thideWelcomeHeader?: boolean;\n\tshowFirstMessage?: boolean;\n\thideHeader?: boolean;\n\tpendingMessage?: string | null;\n\tonPendingMessageConsumed?: () => void;\n\tpageUrl?: string;\n\tpageTitle?: string;\n\tpageContextLoading?: boolean;\n\tpageWelcomeTitle?: string;\n\tpageWelcomeSubtitle?: string;\n\tquestionsLayout?: \"vertical\" | \"horizontal\";\n\tquestionsLayoutMobile?: \"vertical\" | \"horizontal\";\n\t/**\n\t * Show citation sources under each assistant message that used the\n\t * `searchKnowledgeBase` tool. Off by default.\n\t */\n\tshowSources?: boolean;\n\t/**\n\t * Controls the rendering order of message parts (text vs tool results).\n\t * - `\"text-first\"` (default) — text parts render before tool cards\n\t * - `\"tools-first\"` — tool cards render before text\n\t * - `\"stream-order\"` — parts render in the order received from the API\n\t */\n\tmessagePartOrder?: \"text-first\" | \"tools-first\" | \"stream-order\";\n\t/**\n\t * Where the view settles while an answer streams in.\n\t * - `\"latest-turn\"` (default) — follows the answer down only until the\n\t * visitor's question reaches the top, then holds there, so a long reply is\n\t * read from its first line\n\t * - `\"bottom\"` — always follows the end of the content\n\t */\n\tscrollAnchor?: \"latest-turn\" | \"bottom\";\n}\n\ninterface KbSourceLite {\n\tid?: number | string;\n\tdocumentName?: string;\n\tpageTitle?: string | null;\n\tsourceUrl?: string | null;\n\tsimilarity?: number;\n}\n\nfunction extractKbSources(parts: unknown): KbSourceLite[] {\n\tif (!Array.isArray(parts)) return [];\n\tconst out: KbSourceLite[] = [];\n\tfor (const part of parts) {\n\t\tconst p = part as { type?: string; toolName?: string; output?: unknown };\n\t\tif (typeof p?.type !== \"string\" || !p.type.startsWith(\"tool-\")) continue;\n\t\tconst name = p.toolName ?? p.type.replace(/^tool-/, \"\");\n\t\tif (name !== \"searchKnowledgeBase\") continue;\n\t\tlet output: unknown = p.output;\n\t\tif (typeof output === \"string\") {\n\t\t\ttry { output = JSON.parse(output); } catch { /* leave */ }\n\t\t}\n\t\tconst sources = (output as { sources?: KbSourceLite[] })?.sources;\n\t\tif (Array.isArray(sources)) for (const s of sources) if (s) out.push(s);\n\t}\n\tconst seen = new Set<string>();\n\tconst deduped: KbSourceLite[] = [];\n\tfor (const s of out) {\n\t\tconst key = s.sourceUrl || `${s.documentName ?? \"\"}::${s.id ?? \"\"}`;\n\t\tif (seen.has(key)) continue;\n\t\tseen.add(key);\n\t\tdeduped.push(s);\n\t}\n\treturn deduped;\n}\n\n// ---------------------------------------------------------------------------\n// Default slot components for message rendering\n// ---------------------------------------------------------------------------\n\nexport interface AssistantMessageSlotProps {\n\tmessage: { id: string; parts?: Array<{ type: string; text?: string }> };\n\tpartIndex: number;\n\ttext: string;\n}\n\nfunction DefaultAssistantMessage({ text }: AssistantMessageSlotProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName=\"flex gap-[10px] items-start rounded-2xl\"\n\t\t\tstyle={{\n\t\t\t\tbackgroundColor: \"var(--ac-assistant-bubble-bg, transparent)\",\n\t\t\t\tpadding: \"var(--ac-assistant-bubble-padding, 0)\",\n\t\t\t\tcolor: \"var(--ac-assistant-bubble-text, var(--ac-text))\",\n\t\t\t}}\n\t\t>\n\t\t\t<SparklesIcon className=\"mt-[2px] w-4 h-4 shrink-0\" style={{ color: \"var(--ac-primary)\" }} />\n\t\t\t<div className=\"flex-1 min-w-0 whitespace-pre-wrap\">{text}</div>\n\t\t</div>\n\t);\n}\n\nexport interface UserMessageSlotProps {\n\tmessage: { id: string; parts?: Array<{ type: string; text?: string }> };\n\tpartIndex: number;\n\ttext: string;\n}\n\nfunction DefaultUserMessage({ text }: UserMessageSlotProps) {\n\treturn (\n\t\t<div\n\t\t\t// `whitespace-pre-wrap` so a message typed across several lines reads back\n\t\t\t// the way it was written; `break-words` so an unbroken part number or URL\n\t\t\t// cannot push the bubble past its container.\n\t\t\tclassName=\"inline-block rounded-2xl px-3 py-2 max-w-[85%] whitespace-pre-wrap break-words\"\n\t\t\tstyle={{\n\t\t\t\tbackgroundColor: \"var(--ac-user-bubble-bg, var(--ac-primary))\",\n\t\t\t\tcolor: \"var(--ac-primary-foreground, #fff)\",\n\t\t\t}}\n\t\t>\n\t\t\t{text}\n\t\t</div>\n\t);\n}\n\nexport function ChatInterface(props: ChatInterfaceProps) {\n\tconst { showSources = false } = props;\n\tconst { messages, status, error, sendMessage, sessionId, config, retryLastTurn, newConversation: ctxNewConversation } = useChatContext();\n\tconst { t, direction } = useI18n();\n\tconst _theme = useTheme();\n\tconst slots = useSlots();\n\n\t// Live chat (optional — provider may not be present)\n\tlet liveChat: ReturnType<typeof useLiveChat> | null = null;\n\ttry {\n\t\tliveChat = useLiveChat();\n\t} catch {\n\t\tliveChat = null;\n\t}\n\n\tconst [showWelcome, setShowWelcome] = useState(true);\n\tconst [input, setInput] = useState(\"\");\n\tconst [hideFirstUserMessage, setHideFirstUserMessage] = useState(false);\n\tconst [cartCount, setCartCount] = useState<number | undefined>(undefined);\n\tconst [cartOpen, setCartOpen] = useState(false);\n\tconst [storeOrigin, _setStoreOrigin] = useState<string | null>(null);\n\n\tconst isProcessing = status === \"streaming\";\n\tconst anchorLatestTurn = props.scrollAnchor !== \"bottom\";\n\t// The anchor has to be a turn that is actually on screen: a hidden opening\n\t// prompt would pin the view to nothing.\n\tconst latestUserId = useMemo(() => {\n\t\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\t\tconst m = messages[i];\n\t\t\tif (m.role !== \"user\") continue;\n\t\t\tif (hideFirstUserMessage && i === 0) continue;\n\t\t\treturn m.id;\n\t\t}\n\t\treturn undefined;\n\t}, [messages, hideFirstUserMessage]);\n\n\t// Sync welcome visibility with message count (bidirectional)\n\tuseEffect(() => {\n\t\tif (messages.length > 0 && showWelcome) setShowWelcome(false);\n\t\tif (messages.length === 0 && !showWelcome) setShowWelcome(true);\n\t}, [messages.length, showWelcome]);\n\n\tconst handleSubmit = useCallback(\n\t\t(text: string, files?: ChatAttachmentInput[]) => {\n\t\t\t// An attached image is a message on its own — \"what is this?\" is often\n\t\t\t// the picture with nothing typed — so empty text alone is not a reason\n\t\t\t// to drop the turn.\n\t\t\tif ((!text.trim() && !files?.length) || isProcessing) return;\n\t\t\tif (liveChat?.state === \"live\") return;\n\t\t\tsetShowWelcome(false);\n\t\t\tsetInput(\"\");\n\t\t\tsendMessage(text, files);\n\t\t},\n\t\t[isProcessing, sendMessage, liveChat],\n\t);\n\n\tconst handleSelectCategory = useCallback(\n\t\t(category: string, hideMessage = false) => {\n\t\t\tif (hideMessage && !props.showFirstMessage) setHideFirstUserMessage(true);\n\t\t\thandleSubmit(category);\n\t\t},\n\t\t[handleSubmit, props.showFirstMessage],\n\t);\n\n\tconst handleNewConversation = useCallback(() => {\n\t\t// Full reset: clears messages AND mints a new sessionId. Previously this\n\t\t// called clearMessages(), which kept the same sessionId — so the server\n\t\t// (analytics, session-scoped state) saw a continuation, not a new chat.\n\t\tctxNewConversation();\n\t\tsetShowWelcome(true);\n\t\tsetInput(\"\");\n\t\tsetHideFirstUserMessage(false);\n\t\tprops.onNewConversation?.();\n\t}, [ctxNewConversation, props]);\n\n\t// Auto-submit pending message\n\tuseEffect(() => {\n\t\tif (props.pendingMessage && props.isOpen) {\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\thandleSubmit(props.pendingMessage!);\n\t\t\t\tprops.onPendingMessageConsumed?.();\n\t\t\t}, 300);\n\t\t\treturn () => clearTimeout(timer);\n\t\t}\n\t}, [props.pendingMessage, props.isOpen, handleSubmit, props]);\n\n\t// Live chat: register AI history\n\tuseEffect(() => {\n\t\tif (!liveChat) return;\n\t\tliveChat.registerAiHistoryGetter(() =>\n\t\t\tmessages.map((m) => ({\n\t\t\t\trole: m.role,\n\t\t\t\tcontent:\n\t\t\t\t\ttypeof m.content === \"string\"\n\t\t\t\t\t\t? m.content\n\t\t\t\t\t\t: (m.parts || [])\n\t\t\t\t\t\t\t\t.filter((p) => p.type === \"text\")\n\t\t\t\t\t\t\t\t.map((p) => p.text || \"\")\n\t\t\t\t\t\t\t\t.join(\"\") || \"\",\n\t\t\t})),\n\t\t);\n\t}, [messages, liveChat]);\n\n\t// Header slot\n\tconst headerProps = useMemo(\n\t\t() => ({\n\t\t\tisWelcome: showWelcome && messages.length === 0,\n\t\t\tonNewConversation: handleNewConversation,\n\t\t\tonClose: props.onClose,\n\t\t\tclientName: config.clientName,\n\t\t\tlogoUrl: props.logoUrl,\n\t\t\tcartCount,\n\t\t\tonCartClick: () => setCartOpen(!cartOpen),\n\t\t}),\n\t\t[showWelcome, messages.length, handleNewConversation, props.onClose, props.logoUrl, config.clientName, cartCount, cartOpen],\n\t);\n\n\t// Welcome page view\n\tif (showWelcome && messages.length === 0) {\n\t\treturn (\n\t\t\t<div className=\"flex h-full flex-col\" dir={direction} style={{ backgroundColor: \"var(--ac-background)\" }}>\n\t\t\t\t{!props.hideHeader && renderSlot(\"header\", headerProps, ChatHeader, slots)}\n\t\t\t\t{renderSlot(\n\t\t\t\t\t\"welcomePage\",\n\t\t\t\t\t{\n\t\t\t\t\t\tonSelectCategory: handleSelectCategory,\n\t\t\t\t\t\tisProcessing,\n\t\t\t\t\t\tclientName: config.clientName,\n\t\t\t\t\t\tisOpen: props.isOpen,\n\t\t\t\t\t\tquestions: props.questions,\n\t\t\t\t\t\twelcomeTitle: props.pageWelcomeTitle || props.welcomeTitle,\n\t\t\t\t\t\twelcomeSubtitle: props.pageWelcomeSubtitle || props.welcomeSubtitle,\n\t\t\t\t\t\thideWelcomeHeader: props.hideWelcomeHeader,\n\t\t\t\t\t\tloading: props.pageContextLoading,\n\t\t\t\t\t\tquestionsLayout: props.questionsLayout,\n\t\t\t\t\t\tquestionsLayoutMobile: props.questionsLayoutMobile,\n\t\t\t\t\t},\n\t\t\t\t\tWelcomePage,\n\t\t\t\t\tslots,\n\t\t\t\t)}\n\t\t\t\t<div className=\"shrink-0 px-[15px] md:px-[40px]\" style={{ backgroundColor: \"var(--ac-background)\" }}>\n\t\t\t\t\t<div className=\"mx-auto z-40 w-full\">\n\t\t\t\t\t\t{renderSlot(\n\t\t\t\t\t\t\t\"input\",\n\t\t\t\t\t\t\t{ value: input, onChange: setInput, onSubmit: handleSubmit, isProcessing },\n\t\t\t\t\t\t\tChatInput,\n\t\t\t\t\t\t\tslots,\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t\t{renderSlot(\"footer\", { footerText: props.footerText }, ChatFooter, slots)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// Conversation view\n\treturn (\n\t\t<div className=\"flex h-full flex-col\" dir={direction} style={{ backgroundColor: \"var(--ac-background)\" }}>\n\t\t\t{!props.hideHeader && renderSlot(\"header\", headerProps, ChatHeader, slots)}\n\n\t\t\t{storeOrigin && (\n\t\t\t\t<CartDrawer\n\t\t\t\t\tstoreOrigin={storeOrigin}\n\t\t\t\t\tisOpen={cartOpen}\n\t\t\t\t\tonClose={() => setCartOpen(false)}\n\t\t\t\t\tonCartUpdate={(count) => setCartCount(count)}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<Conversation\n\t\t\t\tclassName=\"flex-1\"\n\t\t\t\ttargetScrollTop={anchorLatestTurn ? anchorToLatestTurn : undefined}\n\t\t\t\t// The library's smooth scroll is a spring, and a spring overshoots.\n\t\t\t\t// Against the true bottom that is invisible — the browser will not\n\t\t\t\t// scroll past the end — but against a target in the middle of the\n\t\t\t\t// content it carries the view past the question, and the library\n\t\t\t\t// never scrolls back up. Measured: ~180px past, the answer's first\n\t\t\t\t// line hidden again. Instant moves land exactly on the target.\n\t\t\t\t{...(anchorLatestTurn ? { initial: \"instant\" as const, resize: \"instant\" as const } : {})}\n\t\t\t>\n\t\t\t\t{anchorLatestTurn && <FollowLatestTurn turnKey={latestUserId} />}\n\t\t\t\t<ConversationContent className=\"px-[15px] md:px-[40px] py-6 sm:py-8 w-full space-y-6\">\n\t\t\t\t\t{messages.length === 0 && renderSlot(\"emptyState\", {}, ConversationEmptyState, slots)}\n\t\t\t\t\t{messages.map((message, messageIndex) => {\n\t\t\t\t\t\tif (hideFirstUserMessage && messageIndex === 0 && message.role === \"user\") return null;\n\n\t\t\t\t\t\tif (message.role === \"system\") {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div key={message.id}>\n\t\t\t\t\t\t\t\t\t{renderSlot(\"systemMessage\", { message: message.content }, SystemMessage, slots)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={message.id}\n\t\t\t\t\t\t\t\tclassName={`group ${message.role === \"assistant\" ? \"is-assistant\" : \"is-user\"}`}\n\t\t\t\t\t\t\t\t{...(message.id === latestUserId ? { [LATEST_TURN_ATTR]: \"\" } : {})}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* Attachments lead the turn rather than being interleaved with\n\t\t\t\t\t\t\t\t the text parts: a picture is context for the whole message, and\n\t\t\t\t\t\t\t\t the sort that orders text against tool cards has nothing\n\t\t\t\t\t\t\t\t meaningful to say about where it belongs. */}\n\t\t\t\t\t\t\t\t<MessageAttachments\n\t\t\t\t\t\t\t\t\tclassName={message.role === \"user\" ? \"mb-2\" : \"mr-auto ml-0 mb-2\"}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{(message.parts || [])\n\t\t\t\t\t\t\t\t\t\t.filter((p) => p.type === \"file\" && p.url)\n\t\t\t\t\t\t\t\t\t\t.map((p, i) => (\n\t\t\t\t\t\t\t\t\t\t\t<MessageAttachment\n\t\t\t\t\t\t\t\t\t\t\t\tkey={`${message.id}-file-${i}`}\n\t\t\t\t\t\t\t\t\t\t\t\t// Larger than the composer's chips: in the transcript\n\t\t\t\t\t\t\t\t\t\t\t\t// this is the picture itself, not a pending upload.\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"size-32\"\n\t\t\t\t\t\t\t\t\t\t\t\tdata={{\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"file\",\n\t\t\t\t\t\t\t\t\t\t\t\t\turl: p.url as string,\n\t\t\t\t\t\t\t\t\t\t\t\t\tmediaType: p.mediaType ?? \"\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tfilename: p.filename,\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</MessageAttachments>\n\t\t\t\t\t\t\t\t{(() => {\n\t\t\t\t\t\t\t\t\t// Files are rendered above; an empty text part is what a\n\t\t\t\t\t\t\t\t\t// files-only turn carries, and rendering it would leave an\n\t\t\t\t\t\t\t\t\t// empty bubble hanging under the picture.\n\t\t\t\t\t\t\t\t\tconst parts = (message.parts || []).filter(\n\t\t\t\t\t\t\t\t\t\t(p) => p.type !== \"file\" && !(p.type === \"text\" && !(p.text || \"\").trim()),\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\treturn props.messagePartOrder === \"stream-order\"\n\t\t\t\t\t\t\t\t\t\t? parts\n\t\t\t\t\t\t\t\t\t\t: [...parts].sort((a, b) => {\n\t\t\t\t\t\t\t\t\t\t\tconst textFirst = props.messagePartOrder !== \"tools-first\";\n\t\t\t\t\t\t\t\t\t\t\tif (a.type === \"text\" && b.type !== \"text\") return textFirst ? -1 : 1;\n\t\t\t\t\t\t\t\t\t\t\tif (a.type !== \"text\" && b.type === \"text\") return textFirst ? 1 : -1;\n\t\t\t\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t})().map((part, i) => {\n\t\t\t\t\t\t\t\t\t\tif (part.type === \"text\") {\n\t\t\t\t\t\t\t\t\t\t\tif (message.role === \"assistant\") {\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div key={`${message.id}-${i}`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{renderSlot(\"assistantMessage\", { message, partIndex: i, text: part.text || \"\" }, DefaultAssistantMessage, slots)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<div key={`${message.id}-${i}`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{renderSlot(\"userMessage\", { message, partIndex: i, text: part.text || \"\" }, DefaultUserMessage, slots)}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (part.type.startsWith(\"tool-\")) {\n\t\t\t\t\t\t\t\t\t\t\tconst toolName = part.type.replace(\"tool-\", \"\");\n\t\t\t\t\t\t\t\t\t\t\tif (toolName === \"requestHumanChat\") return null;\n\t\t\t\t\t\t\t\t\t\t\t// AI SDK streams `output` as a JSON string — parse + coerce into ToolResult shape\n\t\t\t\t\t\t\t\t\t\t\tlet output: unknown = part.output;\n\t\t\t\t\t\t\t\t\t\t\tif (typeof output === \"string\") {\n\t\t\t\t\t\t\t\t\t\t\t\ttry { output = JSON.parse(output); } catch { /* leave as string */ }\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tconst result =\n\t\t\t\t\t\t\t\t\t\t\t\toutput && typeof output === \"object\" && !Array.isArray(output) &&\n\t\t\t\t\t\t\t\t\t\t\t\t(\"data\" in (output as object) || \"uiRenderMode\" in (output as object))\n\t\t\t\t\t\t\t\t\t\t\t\t\t? output\n\t\t\t\t\t\t\t\t\t\t\t\t\t: { data: output };\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<ChatErrorBoundary\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={`${message.id}-tool-${i}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={`tool \"${toolName}\"`}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ToolRenderer\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoolName={toolName}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstate={part.state ?? \"output-available\"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs={(part.input ?? {}) as Record<string, unknown>}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tresult={result as ToolResult}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonSendMessage={handleSubmit}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisProcessing={isProcessing}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</ChatErrorBoundary>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t{showSources && message.role === \"assistant\" && (() => {\n\t\t\t\t\t\t\t\t\tconst kbSources = extractKbSources(message.parts);\n\t\t\t\t\t\t\t\t\tif (kbSources.length === 0) return null;\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<Sources>\n\t\t\t\t\t\t\t\t\t\t\t<SourcesTrigger count={kbSources.length} />\n\t\t\t\t\t\t\t\t\t\t\t<SourcesContent>\n\t\t\t\t\t\t\t\t\t\t\t\t{kbSources.map((s, idx) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Source\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={`${message.id}-src-${idx}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thref={s.sourceUrl ?? \"#\"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={s.documentName || s.pageTitle || `Source ${idx + 1}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t</SourcesContent>\n\t\t\t\t\t\t\t\t\t\t</Sources>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})()}\n\t\t\t\t\t\t\t\t{message.role === \"assistant\" && renderSlot(\"feedback\", {\n\t\t\t\t\t\t\t\t\tmessageId: message.id,\n\t\t\t\t\t\t\t\t\tprojectId: config.projectId,\n\t\t\t\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\t\t\t\tapiKey: config.apiKey,\n\t\t\t\t\t\t\t\t\tapiEndpoint: config.apiEndpoint,\n\t\t\t\t\t\t\t\t\ttextContent: (message.parts || []).filter((p) => p.type === \"text\").map((p) => p.text || \"\").join(\"\\n\") || (typeof message.content === \"string\" ? message.content : \"\"),\n\t\t\t\t\t\t\t\t}, MessageFeedback, slots)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\n\t\t\t\t\t{status === \"streaming\" && (() => {\n\t\t\t\t\t\tconst lastMessage = messages[messages.length - 1];\n\t\t\t\t\t\tif (!lastMessage || lastMessage.role !== \"assistant\") return true;\n\t\t\t\t\t\tconst hasText = (lastMessage.parts || []).some(\n\t\t\t\t\t\t\t(p) => p.type === \"text\" && (p.text || \"\").trim(),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst allToolsComplete = (lastMessage.parts || [])\n\t\t\t\t\t\t\t.filter((p) => p.type.startsWith(\"tool-\"))\n\t\t\t\t\t\t\t.every((p) => p.state === \"output-available\");\n\t\t\t\t\t\treturn allToolsComplete && !hasText;\n\t\t\t\t\t})() && <Loader text={t(\"thinking\")} />}\n\n\t\t\t\t\t{/* Where the answer would have been. Before this, a refused turn\n\t\t\t\t\t rendered nothing at all and read as an unresponsive chat. */}\n\t\t\t\t\t{status === \"error\" &&\n\t\t\t\t\t\trenderSlot(\n\t\t\t\t\t\t\t\"error\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tonRetry: retryLastTurn,\n\t\t\t\t\t\t\t\tonNewConversation: handleNewConversation,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tChatError,\n\t\t\t\t\t\t\tslots,\n\t\t\t\t\t\t)}\n\t\t\t\t</ConversationContent>\n\t\t\t</Conversation>\n\n\t\t\t<div className=\"shrink-0 px-[15px] md:px-[40px] pb-2\" style={{ backgroundColor: \"var(--ac-background)\" }}>\n\t\t\t\t{props.pageQuestions && props.pageQuestions.length > 0 && (\n\t\t\t\t\t<QuickQuestions\n\t\t\t\t\t\tquestions={props.pageQuestions}\n\t\t\t\t\t\tonSelect={(query) => handleSelectCategory(query, true)}\n\t\t\t\t\t\tisProcessing={isProcessing}\n\t\t\t\t\t\tpageKey={props.pageUrl}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<div className=\"mx-auto z-40 w-full flex items-end gap-2\">\n\t\t\t\t\t<div className=\"flex-1\">\n\t\t\t\t\t\t{renderSlot(\n\t\t\t\t\t\t\t\"input\",\n\t\t\t\t\t\t\t{ value: input, onChange: setInput, onSubmit: handleSubmit, isProcessing },\n\t\t\t\t\t\t\tChatInput,\n\t\t\t\t\t\t\tslots,\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t\t{liveChat && liveChat.state === \"ai\" && !showWelcome && (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => liveChat!.requestManualHandoff()}\n\t\t\t\t\t\t\ttitle={t(\"liveChatTalkToHuman\")}\n\t\t\t\t\t\t\tclassName=\"shrink-0 mb-[7px] h-[36px] w-[36px] rounded-lg hover:bg-muted flex items-center justify-center transition-colors opacity-50 hover:opacity-100\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Headset className=\"h-4 w-4 text-muted-foreground\" />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t{renderSlot(\"footer\", { footerText: props.footerText }, ChatFooter, slots)}\n\t\t\t</div>\n\n\t\t\t{/* Reference unused state to silence linter; sessionId kept for future analytics wiring */}\n\t\t\t<span data-session-id={sessionId} className=\"hidden\" />\n\t\t</div>\n\t);\n}\n","/**\n * How wide the desktop chat panel is, and where the panels beside it go.\n *\n * The panel used to be a fixed `max-w-[780px]`, and the preview and live-chat\n * panels that open next to it hardcoded the same number as `790px` / `800px`.\n * A host that needed a wider or narrower chat had no way to ask for one, and\n * changing the first number alone would have left the other two overlapping it\n * or floating off in space. Everything that depends on the width now reads it\n * from here.\n */\n\n/** Maximum width of the desktop chat panel when the host does not choose one. */\nexport const DEFAULT_PANEL_WIDTH = 780;\n\n/**\n * Narrowest width a numeric `panelWidth` is allowed to produce. The header,\n * input and product cards stop fitting below this; a number smaller than it is\n * almost certainly a mistake rather than a design.\n */\nexport const MIN_PANEL_WIDTH = 320;\n\n/** Space between the chat panel and a panel docked beside it. */\nconst SIDE_PANEL_GAP_PX = 10;\n\n/**\n * Maximum width of the desktop chat panel.\n *\n * - a number is pixels (`960`)\n * - a string is any CSS length (`\"960px\"`, `\"60vw\"`, `\"min(960px, 60vw)\"`)\n *\n * The panel is still never wider than the viewport.\n */\nexport type PanelWidth = number | string;\n\n/**\n * The `max-width` value for the chat panel.\n *\n * Anything unusable falls back to the default rather than through to the\n * browser: an invalid `max-width` is silently dropped, and this panel is\n * `width: 100%` — so a typo would not be ignored, it would turn the chat into a\n * full-screen sheet.\n */\nexport function panelMaxWidth(width?: PanelWidth): string {\n if (typeof width === \"number\") {\n if (!Number.isFinite(width) || width <= 0) return `${DEFAULT_PANEL_WIDTH}px`;\n return `${Math.max(MIN_PANEL_WIDTH, Math.round(width))}px`;\n }\n if (typeof width === \"string\") {\n const value = width.trim();\n if (value && isValidLength(value)) return value;\n }\n return `${DEFAULT_PANEL_WIDTH}px`;\n}\n\n/** The width the panel actually renders at: its maximum, capped by the viewport. */\nexport function panelRenderedWidth(width?: PanelWidth): string {\n return `min(100vw, ${panelMaxWidth(width)})`;\n}\n\n/** Where a panel docked beside the chat starts, measured from the chat's edge. */\nexport function sidePanelOffset(width?: PanelWidth): string {\n return `calc(${panelRenderedWidth(width)} + ${SIDE_PANEL_GAP_PX}px)`;\n}\n\n/**\n * The widest a docked side panel may be: its own preferred width, or whatever\n * the viewport leaves beside the chat (one gap on each side of it).\n */\nexport function sidePanelWidth(preferredPx: number, width?: PanelWidth): string {\n return `min(${preferredPx}px, calc(100vw - ${panelRenderedWidth(width)} - ${SIDE_PANEL_GAP_PX * 2}px))`;\n}\n\nfunction isValidLength(value: string): boolean {\n // `CSS.supports` is the browser's own parser, so `min()`, `clamp()`, `vw` and\n // anything newer are accepted exactly when the browser would accept them.\n // Without it (server rendering, old test environments) the value is trusted:\n // it is only ever written through a style object, never into a stylesheet.\n if (typeof CSS === \"undefined\" || typeof CSS.supports !== \"function\") return true;\n return CSS.supports(\"max-width\", value);\n}\n","\"use client\";\n\nimport { useState, useEffect } from \"react\";\nimport { useIsMobile } from \"../hooks/use-mobile\";\nimport { MessageSquare, X } from \"lucide-react\";\nimport { cn } from \"../core/utils\";\nimport { useI18n } from \"../hooks/use-i18n\";\n\ninterface FloatingButtonProps {\n\tonClick: () => void;\n\tposition: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n\tpositionMobile?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n\tgreeting?: string;\n\tisOpen?: boolean;\n\tgreetingOffsetX?: string;\n\tgreetingOffsetY?: string;\n\tbuttonOffsetXMobile?: string;\n\tbuttonOffsetYMobile?: string;\n\tbuttonOffsetXDesktop?: string;\n\tbuttonOffsetYDesktop?: string;\n\tbuttonIconUrl?: string;\n\tbuttonImageUrl?: string;\n\tbuttonImageUrlMobile?: string;\n\tbuttonWidth?: string;\n\tbuttonHeight?: string;\n\tbuttonIconSize?: string;\n\tbuttonWidthMobile?: string;\n\tbuttonHeightMobile?: string;\n\tbuttonIconSizeMobile?: string;\n\tbuttonBgColor?: string;\n\tbuttonBorderRadius?: string;\n\tgreetingMaxWidth?: string;\n\tzIndex?: number;\n\thideGreeting?: boolean;\n}\n\nexport function FloatingButton({\n\tonClick,\n\tposition,\n\tpositionMobile,\n\tgreeting,\n\tisOpen = false,\n\tgreetingOffsetX = \"-20px\",\n\tgreetingOffsetY = \"-20px\",\n\tbuttonOffsetXMobile = \"16px\",\n\tbuttonOffsetYMobile = \"16px\",\n\tbuttonOffsetXDesktop = \"24px\",\n\tbuttonOffsetYDesktop = \"24px\",\n\tbuttonIconUrl,\n\tbuttonImageUrl,\n\tbuttonImageUrlMobile,\n\tbuttonWidth,\n\tbuttonHeight,\n\tbuttonIconSize,\n\tbuttonWidthMobile,\n\tbuttonHeightMobile,\n\tbuttonIconSizeMobile,\n\tbuttonBgColor,\n\tbuttonBorderRadius,\n\tgreetingMaxWidth,\n\tzIndex = 999999,\n\thideGreeting = false,\n}: FloatingButtonProps) {\n\tconst [showGreeting, setShowGreeting] = useState(false);\n\tconst { t, direction } = useI18n();\n\n\tconst isRtl = direction === \"rtl\";\n\tconst effectiveGreeting = greeting || t(\"greeting\");\n\tconst [greetingDismissed, setGreetingDismissed] = useState(false);\n\tconst isMobile = useIsMobile();\n\n\tconst effectivePosition = isMobile && positionMobile ? positionMobile : position;\n\tconst isRightSide = effectivePosition === \"bottom-right\" || effectivePosition === \"top-right\";\n\tconst isBottom = effectivePosition === \"bottom-right\" || effectivePosition === \"bottom-left\";\n\n\tconst buttonOffsetX = isMobile ? buttonOffsetXMobile : buttonOffsetXDesktop;\n\tconst buttonOffsetY = isMobile ? buttonOffsetYMobile : buttonOffsetYDesktop;\n\n\tuseEffect(() => {\n\t\tif (greetingDismissed || isOpen) return;\n\t\tconst timer = setTimeout(() => setShowGreeting(true), 2000);\n\t\treturn () => clearTimeout(timer);\n\t}, [greetingDismissed, isOpen]);\n\n\tconst getPositionStyles = (): React.CSSProperties => {\n\t\tconst styles: React.CSSProperties = {};\n\t\tif (isBottom) styles.bottom = buttonOffsetY;\n\t\telse styles.top = buttonOffsetY;\n\t\tif (isRightSide) styles.right = buttonOffsetX;\n\t\telse styles.left = buttonOffsetX;\n\t\treturn styles;\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`fixed flex items-end gap-3 ${isRightSide ? \"flex-row\" : \"flex-row-reverse\"}`}\n\t\t\tdir=\"ltr\"\n\t\t\tstyle={{ ...getPositionStyles(), zIndex }}\n\t\t>\n\t\t\t{showGreeting && !isOpen && !hideGreeting && (\n\t\t\t\t<div\n\t\t\t\t\tdir={isRtl ? \"rtl\" : \"ltr\"}\n\t\t\t\t\tclassName={`relative bg-card rounded-sm animate-fadeIn ${isBottom ? \"mb-1\" : \"mt-1\"}`}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tanimation: \"fadeIn 0.3s ease-out\",\n\t\t\t\t\t\tboxShadow: \"0 4px 16px rgba(0, 0, 0, 0.12)\",\n\t\t\t\t\t\tpadding: \"12px\",\n\t\t\t\t\t\tmaxWidth: greetingMaxWidth || \"240px\",\n\t\t\t\t\t\tcolor: \"#000\",\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tfontWeight: 400,\n\t\t\t\t\t\tlineHeight: \"16px\",\n\t\t\t\t\t\tright: greetingOffsetX,\n\t\t\t\t\t\ttop: greetingOffsetY,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{effectiveGreeting}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute top-1/2 -translate-y-1/2\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: \"14px\",\n\t\t\t\t\t\t\theight: \"14px\",\n\t\t\t\t\t\t\tbackground: \"var(--ac-card)\",\n\t\t\t\t\t\t\ttransform: \"translateY(-50%) rotate(45deg)\",\n\t\t\t\t\t\t\tboxShadow: \"2px -2px 4px rgba(0, 0, 0, 0.06)\",\n\t\t\t\t\t\t\t...(isRightSide ? { right: \"-7px\" } : { left: \"-7px\" }),\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{(buttonImageUrl || buttonImageUrlMobile) && !isOpen ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={onClick}\n\t\t\t\t\tclassName=\"bg-transparent border-none p-0 cursor-pointer hover:scale-105 transition-all duration-200 flex-shrink-0 z-[2]\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...((buttonWidth || buttonWidthMobile) && { width: isMobile ? buttonWidthMobile || buttonWidth : buttonWidth }),\n\t\t\t\t\t\t...((buttonHeight || buttonHeightMobile) && { height: isMobile ? buttonHeightMobile || buttonHeight : buttonHeight }),\n\t\t\t\t\t}}\n\t\t\t\t\taria-label=\"Open chat\"\n\t\t\t\t>\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={(isMobile && buttonImageUrlMobile) ? buttonImageUrlMobile : buttonImageUrl || buttonImageUrlMobile!}\n\t\t\t\t\t\talt=\"Chat\"\n\t\t\t\t\t\tclassName=\"w-full h-full object-contain\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t...(!buttonWidth && !buttonWidthMobile && { width: isMobile ? \"48px\" : \"56px\" }),\n\t\t\t\t\t\t\t...(!buttonHeight && !buttonHeightMobile && { height: isMobile ? \"48px\" : \"56px\" }),\n\t\t\t\t\t\t\t...(buttonBorderRadius != null && { borderRadius: buttonBorderRadius }),\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={onClick}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"shadow-lg hover:shadow-xl hover:scale-105 transition-all duration-200 flex items-center justify-center flex-shrink-0 z-[2]\",\n\t\t\t\t\t\t!buttonBorderRadius && \"rounded-full\",\n\t\t\t\t\t\t!buttonWidth && !buttonWidthMobile && !buttonHeight && !buttonHeightMobile && \"w-12 h-12 md:w-14 md:h-14\",\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackgroundColor: buttonBgColor || \"var(--ac-primary)\",\n\t\t\t\t\t\tcolor: \"var(--ac-primary-foreground, #fff)\",\n\t\t\t\t\t\t...((buttonWidth || buttonWidthMobile) && { width: isMobile ? buttonWidthMobile || buttonWidth : buttonWidth }),\n\t\t\t\t\t\t...((buttonHeight || buttonHeightMobile) && { height: isMobile ? buttonHeightMobile || buttonHeight : buttonHeight }),\n\t\t\t\t\t\t...(buttonBorderRadius != null && { borderRadius: buttonBorderRadius }),\n\t\t\t\t\t}}\n\t\t\t\t\taria-label={isOpen ? \"Close chat\" : \"Open chat\"}\n\t\t\t\t>\n\t\t\t\t\t{(() => {\n\t\t\t\t\t\tconst effectiveIconSize = isMobile ? buttonIconSizeMobile || buttonIconSize : buttonIconSize;\n\t\t\t\t\t\tconst iconStyle = effectiveIconSize ? { width: effectiveIconSize, height: effectiveIconSize } : undefined;\n\t\t\t\t\t\tconst iconClass = !effectiveIconSize ? \"w-6 h-6 md:w-7 md:h-7\" : undefined;\n\t\t\t\t\t\tif (isOpen) return <X className={iconClass} style={iconStyle} strokeWidth={2.5} />;\n\t\t\t\t\t\tif (buttonIconUrl) return <img src={buttonIconUrl} alt=\"Chat\" className={cn(\"object-contain\", iconClass)} style={iconStyle} />;\n\t\t\t\t\t\treturn <MessageSquare className={iconClass} style={iconStyle} strokeWidth={2.5} />;\n\t\t\t\t\t})()}\n\t\t\t\t</button>\n\t\t\t)}\n\n\t\t\t<style>{`\n\t\t\t\t@keyframes fadeIn {\n\t\t\t\t\tfrom { opacity: 0; transform: scale(0.95); }\n\t\t\t\t\tto { opacity: 1; transform: scale(1); }\n\t\t\t\t}\n\t\t\t`}</style>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\n/* eslint-disable react-hooks/exhaustive-deps */\nimport { useState, useRef, useEffect } from \"react\";\nimport { useLiveChat } from \"../providers/LiveChatProvider\";\n/**\n * Sub-views are only rendered from the parent panel/drawer, which already\n * bails out when no LiveChatProvider is present. So sub-views can safely\n * assert the context exists.\n */\nfunction useLiveChatOrThrow() {\n\tconst ctx = useLiveChat();\n\tif (!ctx) throw new Error(\"LiveChat sub-view rendered outside LiveChatProvider — this should never happen\");\n\treturn ctx;\n}\nimport { useI18n } from \"../hooks/use-i18n\";\nimport { Send, Headset, ThumbsUp, ThumbsDown } from \"lucide-react\";\nimport { sidePanelOffset, sidePanelWidth, type PanelWidth } from \"../core/panel-width\";\n\ninterface LiveChatPanelProps {\n\tisWidgetOpen: boolean;\n\tisRightSide: boolean;\n\tzIndex: number;\n\t/** The chat panel's configured width, so this panel docks beside it. */\n\tpanelWidth?: PanelWidth;\n}\n\n/** Desktop side panel — only renders when viewport is wide enough (>1200px) */\nexport function LiveChatPanel({ isWidgetOpen, isRightSide, zIndex, panelWidth }: LiveChatPanelProps) {\n\tconst lc = useLiveChat();\n\tif (!lc) return null;\n\tconst isActive = lc.state !== \"ai\" || lc.showIdentityForm;\n\tconst showPanel = isWidgetOpen && isActive;\n\n\tconst [isWide, setIsWide] = useState(() =>\n\t\ttypeof window !== \"undefined\" ? window.innerWidth >= 1200 : true,\n\t);\n\n\tuseEffect(() => {\n\t\tif (typeof window === \"undefined\") return;\n\t\tconst mq = window.matchMedia(\"(min-width: 1200px)\");\n\t\tconst handler = (e: MediaQueryListEvent) => setIsWide(e.matches);\n\t\tmq.addEventListener(\"change\", handler);\n\t\treturn () => mq.removeEventListener(\"change\", handler);\n\t}, []);\n\n\tif (!isWide) return null;\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"fixed top-1/2 flex flex-col rounded-2xl border shadow-lg overflow-hidden\"\n\t\t\tstyle={{\n\t\t\t\tbackgroundColor: \"var(--ac-background)\",\n\t\t\t\tborderColor: \"var(--ac-border)\",\n\t\t\t\tzIndex,\n\t\t\t\twidth: sidePanelWidth(420, panelWidth),\n\t\t\t\theight: \"75vh\",\n\t\t\t\t...(isRightSide ? { right: sidePanelOffset(panelWidth) } : { left: sidePanelOffset(panelWidth) }),\n\t\t\t\ttransform: showPanel\n\t\t\t\t\t? \"translateY(-50%) translateX(0)\"\n\t\t\t\t\t: `translateY(-50%) ${isRightSide ? \"translateX(20px)\" : \"translateX(-20px)\"}`,\n\t\t\t\topacity: showPanel ? 1 : 0,\n\t\t\t\tpointerEvents: showPanel ? \"auto\" : \"none\",\n\t\t\t\ttransition: \"transform 300ms ease-in-out, opacity 300ms ease-in-out\",\n\t\t\t}}\n\t\t>\n\t\t\t{lc.showIdentityForm ? (\n\t\t\t\t<IdentityView />\n\t\t\t) : lc.state === \"requesting\" || lc.state === \"queued\" ? (\n\t\t\t\t<QueueView />\n\t\t\t) : lc.state === \"live\" ? (\n\t\t\t\t<ChatView />\n\t\t\t) : lc.state === \"ended\" ? (\n\t\t\t\t<EndedView />\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n\n/** Mobile / narrow viewport: drawer that slides up from bottom */\nexport function MobileLiveChatDrawer() {\n\tconst lc = useLiveChat();\n\tconst { t } = useI18n();\n\tif (!lc) return null;\n\tconst isActive = lc.state !== \"ai\" || lc.showIdentityForm;\n\tconst [minimized, setMinimized] = useState(false);\n\n\tconst [isNarrow, setIsNarrow] = useState(() =>\n\t\ttypeof window !== \"undefined\" ? window.innerWidth < 1200 : false,\n\t);\n\n\tuseEffect(() => {\n\t\tif (typeof window === \"undefined\") return;\n\t\tconst mq = window.matchMedia(\"(max-width: 1199px)\");\n\t\tconst handler = (e: MediaQueryListEvent) => setIsNarrow(e.matches);\n\t\tmq.addEventListener(\"change\", handler);\n\t\treturn () => mq.removeEventListener(\"change\", handler);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!isActive) setMinimized(false);\n\t}, [isActive]);\n\n\tif (!isNarrow) return null;\n\n\tif (isActive && minimized) {\n\t\treturn (\n\t\t\t<div className=\"absolute bottom-[100px] inset-x-0 z-50 flex justify-center px-4\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => setMinimized(false)}\n\t\t\t\t\tclassName=\"flex items-center gap-2 px-4 py-2 rounded-full border shadow-md bg-green-50 hover:bg-green-100 transition-colors\"\n\t\t\t\t>\n\t\t\t\t\t<div className=\"h-2 w-2 rounded-full bg-green-500 animate-pulse\" />\n\t\t\t\t\t<span className=\"text-xs font-medium text-green-800\">\n\t\t\t\t\t\t{t(\"liveChatChattingWith\" as never, { name: lc.operatorName || \"...\" } as never)}\n\t\t\t\t\t</span>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\tclassName=\"absolute inset-0 z-40 bg-black/50\"\n\t\t\t\tstyle={{\n\t\t\t\t\topacity: isActive ? 1 : 0,\n\t\t\t\t\tpointerEvents: isActive ? \"auto\" : \"none\",\n\t\t\t\t\ttransition: \"opacity 200ms ease-out\",\n\t\t\t\t}}\n\t\t\t\tonClick={() => (lc.state === \"live\" ? setMinimized(true) : undefined)}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tclassName=\"absolute inset-x-0 bottom-0 z-50 rounded-t-2xl border-t shadow-2xl flex flex-col\"\n\t\t\t\tstyle={{\n\t\t\t\t\tbackgroundColor: \"var(--ac-background)\",\n\t\t\t\t\tborderColor: \"var(--ac-border)\",\n\t\t\t\t\theight: \"calc(100dvh - 150px)\",\n\t\t\t\t\ttransform: isActive ? \"translateY(0)\" : \"translateY(100%)\",\n\t\t\t\t\ttransition: \"transform 300ms cubic-bezier(0.32, 0.72, 0, 1)\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div className=\"flex items-center justify-between px-4 pt-2 pb-1 shrink-0\">\n\t\t\t\t\t<div className=\"flex-1\" />\n\t\t\t\t\t<div className=\"w-[80px] h-1.5 rounded-full bg-muted\" />\n\t\t\t\t\t<div className=\"flex-1 flex justify-end\">\n\t\t\t\t\t\t{lc.state === \"live\" && (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => setMinimized(true)}\n\t\t\t\t\t\t\t\tclassName=\"text-[11px] text-muted-foreground hover:text-foreground px-2 py-1 rounded-lg hover:bg-muted transition-colors whitespace-nowrap\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{t(\"liveChatBackToAI\" as never)}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{lc.showIdentityForm ? (\n\t\t\t\t\t<IdentityView />\n\t\t\t\t) : lc.state === \"requesting\" || lc.state === \"queued\" ? (\n\t\t\t\t\t<QueueView />\n\t\t\t\t) : lc.state === \"live\" ? (\n\t\t\t\t\t<ChatView />\n\t\t\t\t) : lc.state === \"ended\" ? (\n\t\t\t\t\t<EndedView />\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\n// ─── Sub-views ──────────────────────────────────────────────────────\n\nfunction isValidEmail(email: string): boolean {\n\treturn /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email);\n}\n\nfunction IdentityView() {\n\tconst lc = useLiveChatOrThrow();\n\tconst { t, direction } = useI18n();\n\t// TODO: wpUserInfo — not exposed by SDK LiveChatProvider. Using generic userInfo.\n\tconst userInfo = (lc as unknown as { userInfo?: { name?: string; email?: string } | null }).userInfo;\n\tconst [name, setName] = useState(userInfo?.name || \"\");\n\tconst [email, setEmail] = useState(userInfo?.email || \"\");\n\tconst [emailError, setEmailError] = useState(false);\n\tconst isRTL = direction === \"rtl\";\n\n\tuseEffect(() => {\n\t\tif (userInfo?.name && userInfo?.email && isValidEmail(userInfo.email)) {\n\t\t\tlc.setShowIdentityForm(false);\n\t\t\tlc.initiate(userInfo.name, userInfo.email);\n\t\t}\n\t}, []);\n\n\tconst handleConnect = () => {\n\t\tif (!isValidEmail(email)) {\n\t\t\tsetEmailError(true);\n\t\t\treturn;\n\t\t}\n\t\tlc.setShowIdentityForm(false);\n\t\tlc.initiate(name, email);\n\t};\n\n\treturn (\n\t\t<div className=\"flex-1 flex flex-col items-center justify-center p-8\" dir={isRTL ? \"rtl\" : \"ltr\"}>\n\t\t\t<div className=\"h-14 w-14 rounded-2xl bg-blue-50 flex items-center justify-center mb-5\">\n\t\t\t\t<Headset className=\"h-7 w-7 text-blue-500\" />\n\t\t\t</div>\n\t\t\t<p className=\"text-sm font-medium mb-5\" style={{ color: \"var(--ac-text)\" }}>\n\t\t\t\t{t(\"liveChatIdentityTitle\" as never)}\n\t\t\t</p>\n\t\t\t<div className=\"w-full max-w-xs space-y-3\">\n\t\t\t\t<input\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tvalue={name}\n\t\t\t\t\tonChange={(e) => setName(e.target.value)}\n\t\t\t\t\tplaceholder={t(\"liveChatIdentityName\" as never)}\n\t\t\t\t\tclassName=\"w-full text-sm p-3 border rounded-xl bg-background focus:outline-none focus:ring-2\"\n\t\t\t\t\tautoFocus\n\t\t\t\t/>\n\t\t\t\t<div>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"email\"\n\t\t\t\t\t\tvalue={email}\n\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\tsetEmail(e.target.value);\n\t\t\t\t\t\t\tsetEmailError(false);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tplaceholder={t(\"liveChatIdentityEmail\" as never)}\n\t\t\t\t\t\tclassName={`w-full text-sm p-3 border rounded-xl bg-background focus:outline-none focus:ring-2 ${\n\t\t\t\t\t\t\temailError ? \"border-red-400 focus:ring-red-300\" : \"\"\n\t\t\t\t\t\t}`}\n\t\t\t\t\t/>\n\t\t\t\t\t{emailError && (\n\t\t\t\t\t\t<p className=\"text-xs text-red-500 mt-1 px-1\">\n\t\t\t\t\t\t\t{isRTL ? \"כתובת אימייל לא תקינה\" : \"Invalid email address\"}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"flex gap-2 justify-end pt-1\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() => lc.setShowIdentityForm(false)}\n\t\t\t\t\t\tclassName=\"text-sm text-muted-foreground hover:text-foreground px-4 py-2 rounded-xl\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{t(\"liveChatCancel\" as never)}\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={handleConnect}\n\t\t\t\t\t\tdisabled={!name.trim() || !email.trim()}\n\t\t\t\t\t\tclassName=\"text-sm text-white px-5 py-2.5 rounded-xl disabled:opacity-40 transition-opacity\"\n\t\t\t\t\t\tstyle={{ backgroundColor: \"var(--ac-primary, #2f80ed)\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{t(\"liveChatIdentityConnect\" as never)}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction QueueView() {\n\tconst lc = useLiveChatOrThrow();\n\tconst { t, direction } = useI18n();\n\n\treturn (\n\t\t<div className=\"flex-1 flex flex-col items-center justify-center p-8 text-center\" dir={direction}>\n\t\t\t<div className=\"h-16 w-16 rounded-2xl bg-blue-50 flex items-center justify-center mb-4\">\n\t\t\t\t<Headset className=\"h-8 w-8 text-blue-500\" />\n\t\t\t</div>\n\t\t\t<div className=\"h-2 w-2 rounded-full bg-blue-500 animate-pulse mb-4\" />\n\t\t\t<p className=\"text-sm font-medium mb-1\" style={{ color: \"var(--ac-text)\" }}>\n\t\t\t\t{t(\"liveChatConnecting\" as never)}\n\t\t\t</p>\n\t\t\t{lc.queuePosition > 0 && (\n\t\t\t\t<p className=\"text-xs text-muted-foreground mb-4\">\n\t\t\t\t\t{t(\"liveChatPosition\" as never, { position: String(lc.queuePosition) } as never)}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={lc.cancel}\n\t\t\t\tclassName=\"text-xs text-muted-foreground hover:text-foreground underline mt-2\"\n\t\t\t>\n\t\t\t\t{t(\"liveChatCancel\" as never)}\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n\nfunction ChatView() {\n\tconst lc = useLiveChatOrThrow();\n\tconst { t, language, direction } = useI18n();\n\tconst [input, setInput] = useState(\"\");\n\tconst messagesEndRef = useRef<HTMLDivElement>(null);\n\tconst isRTL = direction === \"rtl\";\n\n\tuseEffect(() => {\n\t\tmessagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\n\t}, [lc.messages]);\n\n\tconst handleSend = () => {\n\t\tif (!input.trim()) return;\n\t\tlc.send(input.trim());\n\t\tsetInput(\"\");\n\t};\n\n\treturn (\n\t\t<div className=\"flex-1 flex flex-col min-h-0\" dir={isRTL ? \"rtl\" : \"ltr\"}>\n\t\t\t<div className=\"shrink-0 bg-green-50 border-b border-green-200 px-4 py-3 flex items-center justify-between\">\n\t\t\t\t<div className=\"flex items-center gap-2.5\">\n\t\t\t\t\t<div className=\"h-8 w-8 rounded-full bg-green-500 flex items-center justify-center\">\n\t\t\t\t\t\t<span className=\"text-xs text-white font-bold\">\n\t\t\t\t\t\t\t{lc.operatorName.charAt(0).toUpperCase() || \"O\"}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p className=\"text-sm font-medium text-green-900\">\n\t\t\t\t\t\t\t{t(\"liveChatChattingWith\" as never, { name: lc.operatorName } as never)}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<div className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t<div className=\"h-1.5 w-1.5 rounded-full bg-green-500\" />\n\t\t\t\t\t\t\t<span className=\"text-[10px] text-green-600\">Online</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={lc.end}\n\t\t\t\t\tclassName=\"text-xs text-red-600 hover:text-red-800 bg-red-50 hover:bg-red-100 px-3 py-1.5 rounded-lg transition-colors\"\n\t\t\t\t>\n\t\t\t\t\t{t(\"liveChatEndChat\" as never)}\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t<div className=\"flex-1 overflow-y-auto px-4 py-3 space-y-1\">\n\t\t\t\t{lc.messages.map((msg, idx) => {\n\t\t\t\t\tif (msg.senderType === \"system\") {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div key={msg.id} className=\"flex justify-center my-3\">\n\t\t\t\t\t\t\t\t<span className=\"text-[11px] text-muted-foreground bg-muted/70 px-3 py-1 rounded-full\">\n\t\t\t\t\t\t\t\t\t{msg.content}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst isOperator = msg.senderType === \"operator\";\n\t\t\t\t\tconst prevMsg = idx > 0 ? lc.messages[idx - 1] : null;\n\t\t\t\t\tconst isFirstInGroup = !prevMsg || prevMsg.senderType !== msg.senderType || (prevMsg.senderType as string) === \"system\";\n\t\t\t\t\tconst locale = language === \"he\" ? \"he-IL\" : \"en-US\";\n\t\t\t\t\tconst timeStr = new Date(msg.timestamp).toLocaleTimeString(locale, {\n\t\t\t\t\t\thour: \"2-digit\",\n\t\t\t\t\t\tminute: \"2-digit\",\n\t\t\t\t\t\thour12: false,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={msg.id}\n\t\t\t\t\t\t\tclassName={`flex items-end gap-2 ${isOperator ? \"justify-start\" : \"flex-row-reverse\"} ${isFirstInGroup ? \"mt-3\" : \"mt-0.5\"}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"w-7 shrink-0\">\n\t\t\t\t\t\t\t\t{isOperator && isFirstInGroup && (\n\t\t\t\t\t\t\t\t\t<div className=\"h-7 w-7 rounded-full bg-green-500 flex items-center justify-center\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-[11px] text-white font-bold\">\n\t\t\t\t\t\t\t\t\t\t\t{lc.operatorName.charAt(0).toUpperCase() || \"O\"}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"max-w-[75%]\">\n\t\t\t\t\t\t\t\t{isOperator && isFirstInGroup && (\n\t\t\t\t\t\t\t\t\t<p className=\"text-[11px] text-muted-foreground mb-0.5 font-medium\">{lc.operatorName}</p>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={`rounded-2xl px-3.5 py-2.5 text-[14px] leading-relaxed ${\n\t\t\t\t\t\t\t\t\t\tisOperator\n\t\t\t\t\t\t\t\t\t\t\t? \"bg-card border border-border text-foreground rounded-bl-md\"\n\t\t\t\t\t\t\t\t\t\t\t: \"text-white rounded-br-md\"\n\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\tstyle={!isOperator ? { backgroundColor: \"var(--ac-primary, #2f80ed)\" } : undefined}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{msg.content}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<p className={`text-[10px] text-muted-foreground mt-0.5 px-1 ${isOperator ? \"\" : \"text-end\"}`}>{timeStr}</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t\t<div ref={messagesEndRef} />\n\t\t\t</div>\n\n\t\t\t<div className=\"shrink-0 border-t bg-background p-3\">\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tvalue={input}\n\t\t\t\t\t\tonChange={(e) => setInput(e.target.value)}\n\t\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\t\tif (e.key === \"Enter\" && !e.shiftKey) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\thandleSend();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tplaceholder={t(\"typeMessage\")}\n\t\t\t\t\t\tclassName=\"flex-1 text-sm px-3.5 py-2.5 border rounded-xl bg-background focus:outline-none focus:ring-2\"\n\t\t\t\t\t\tautoFocus\n\t\t\t\t\t/>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={handleSend}\n\t\t\t\t\t\tdisabled={!input.trim()}\n\t\t\t\t\t\tclassName=\"shrink-0 h-10 w-10 rounded-xl flex items-center justify-center text-white disabled:opacity-40 transition-opacity\"\n\t\t\t\t\t\tstyle={{ backgroundColor: \"var(--ac-primary, #2f80ed)\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Send className=\"h-4 w-4\" />\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction EndedView() {\n\tconst lc = useLiveChatOrThrow();\n\tconst { t, direction } = useI18n();\n\tconst [selected, setSelected] = useState<\"positive\" | \"negative\" | null>(null);\n\tconst [comment, setComment] = useState(\"\");\n\tconst [submitted, setSubmitted] = useState(false);\n\tconst isRTL = direction === \"rtl\";\n\n\tif (submitted) {\n\t\treturn (\n\t\t\t<div className=\"flex-1 flex flex-col items-center justify-center p-8 text-center\" dir={isRTL ? \"rtl\" : \"ltr\"}>\n\t\t\t\t<div className=\"h-14 w-14 rounded-2xl bg-green-50 flex items-center justify-center mb-4\">\n\t\t\t\t\t<ThumbsUp className=\"h-7 w-7 text-green-500\" />\n\t\t\t\t</div>\n\t\t\t\t<p className=\"text-sm font-medium mb-1\" style={{ color: \"var(--ac-text)\" }}>\n\t\t\t\t\t{t(\"liveChatRateThank\" as never)}\n\t\t\t\t</p>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={lc.returnToAI}\n\t\t\t\t\tclassName=\"text-sm font-medium mt-4 px-5 py-2 rounded-xl transition-colors\"\n\t\t\t\t\tstyle={{ backgroundColor: \"var(--ac-primary, #2f80ed)\", color: \"white\" }}\n\t\t\t\t>\n\t\t\t\t\t{t(\"liveChatBackToAI\" as never)}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex-1 flex flex-col items-center justify-center p-8\" dir={isRTL ? \"rtl\" : \"ltr\"}>\n\t\t\t<div className=\"h-14 w-14 rounded-2xl bg-muted/50 flex items-center justify-center mb-4\">\n\t\t\t\t<Headset className=\"h-7 w-7 text-muted-foreground/50\" />\n\t\t\t</div>\n\t\t\t<p className=\"text-sm font-medium mb-1\" style={{ color: \"var(--ac-text)\" }}>\n\t\t\t\t{t(\"liveChatEnded\" as never)}\n\t\t\t</p>\n\t\t\t<p className=\"text-sm text-muted-foreground mb-5\">{t(\"liveChatRateTitle\" as never)}</p>\n\n\t\t\t<div className=\"flex gap-4 mb-4\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => setSelected(\"positive\")}\n\t\t\t\t\tclassName={`p-3 rounded-full transition-colors ${\n\t\t\t\t\t\tselected === \"positive\" ? \"bg-green-100 text-green-600\" : \"hover:bg-muted text-muted-foreground\"\n\t\t\t\t\t}`}\n\t\t\t\t>\n\t\t\t\t\t<ThumbsUp className=\"h-6 w-6\" />\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => setSelected(\"negative\")}\n\t\t\t\t\tclassName={`p-3 rounded-full transition-colors ${\n\t\t\t\t\t\tselected === \"negative\" ? \"bg-red-100 text-red-600\" : \"hover:bg-muted text-muted-foreground\"\n\t\t\t\t\t}`}\n\t\t\t\t>\n\t\t\t\t\t<ThumbsDown className=\"h-6 w-6\" />\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t{selected && (\n\t\t\t\t<div className=\"w-full max-w-xs space-y-3\">\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tvalue={comment}\n\t\t\t\t\t\tonChange={(e) => setComment(e.target.value)}\n\t\t\t\t\t\tplaceholder={t(\"liveChatFeedbackPlaceholder\" as never)}\n\t\t\t\t\t\tclassName=\"w-full text-sm p-3 border rounded-xl resize-none h-20 focus:outline-none focus:ring-2\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"flex justify-center gap-2\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tlc.submitRating(selected, comment || undefined);\n\t\t\t\t\t\t\t\tsetSubmitted(true);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName=\"text-sm text-white px-4 py-2 rounded-xl\"\n\t\t\t\t\t\t\tstyle={{ backgroundColor: \"var(--ac-primary, #2f80ed)\" }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{t(\"liveChatSubmit\" as never)}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={lc.returnToAI}\n\t\t\t\t\t\t\tclassName=\"text-sm text-muted-foreground hover:text-foreground px-4 py-2\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{t(\"liveChatSkip\" as never)}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{!selected && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={lc.returnToAI}\n\t\t\t\t\tclassName=\"text-xs text-muted-foreground hover:text-foreground underline mt-2\"\n\t\t\t\t>\n\t\t\t\t\t{t(\"liveChatSkip\" as never)}\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { usePreviewEmbed } from \"../providers/PreviewEmbedProvider\";\nimport { X, ExternalLink } from \"lucide-react\";\nimport { sidePanelOffset, sidePanelWidth, type PanelWidth } from \"../core/panel-width\";\n\ninterface PreviewEmbedPanelProps {\n\tisOpen: boolean;\n\tisRightSide: boolean;\n\tzIndex: number;\n\t/** The chat panel's configured width, so this panel docks beside it. */\n\tpanelWidth?: PanelWidth;\n}\n\nexport function PreviewEmbedPanel({ isOpen, isRightSide, zIndex, panelWidth }: PreviewEmbedPanelProps) {\n\tconst previewEmbed = usePreviewEmbed();\n\tif (!previewEmbed) return null;\n\n\tconst { preview, closePreview } = previewEmbed;\n\tconst showPanel = isOpen && !!preview;\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"fixed top-1/2 flex flex-col rounded-2xl border shadow-sm overflow-hidden\"\n\t\t\tstyle={{\n\t\t\t\tbackgroundColor: \"var(--ac-background)\",\n\t\t\t\tborderColor: \"var(--ac-border)\",\n\t\t\t\tzIndex,\n\t\t\t\twidth: sidePanelWidth(560, panelWidth),\n\t\t\t\theight: \"70vh\",\n\t\t\t\t...(isRightSide ? { right: sidePanelOffset(panelWidth) } : { left: sidePanelOffset(panelWidth) }),\n\t\t\t\ttransform: showPanel\n\t\t\t\t\t? \"translateY(-50%) translateX(0)\"\n\t\t\t\t\t: `translateY(-50%) ${isRightSide ? \"translateX(20px)\" : \"translateX(-20px)\"}`,\n\t\t\t\topacity: showPanel ? 1 : 0,\n\t\t\t\tpointerEvents: showPanel ? \"auto\" : \"none\",\n\t\t\t\ttransition: \"transform 300ms ease-in-out, opacity 300ms ease-in-out\",\n\t\t\t}}\n\t\t>\n\t\t\t<div className=\"bg-muted/30 px-5 py-4 border-b flex items-center justify-between shrink-0\" style={{ borderColor: \"var(--ac-border)\" }}>\n\t\t\t\t<div className=\"flex items-center gap-3 min-w-0\">\n\t\t\t\t\t<span className=\"shrink-0 w-10 h-10 rounded-xl bg-muted flex items-center justify-center\">\n\t\t\t\t\t\t<ExternalLink className=\"w-5 h-5 text-muted-foreground\" />\n\t\t\t\t\t</span>\n\t\t\t\t\t<div className=\"min-w-0\">\n\t\t\t\t\t\t<h3 className=\"font-medium text-sm truncate\" style={{ color: \"var(--ac-text)\" }}>\n\t\t\t\t\t\t\t{preview?.title || \"Preview\"}\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t{preview?.description && (\n\t\t\t\t\t\t\t<p className=\"text-xs text-muted-foreground mt-0.5 truncate\">{preview.description}</p>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={closePreview}\n\t\t\t\t\tclassName=\"shrink-0 w-8 h-8 rounded-full border flex items-center justify-center hover:bg-muted transition-colors ml-3\"\n\t\t\t\t\tstyle={{ backgroundColor: \"var(--ac-background)\", borderColor: \"var(--ac-border)\" }}\n\t\t\t\t>\n\t\t\t\t\t<X className=\"w-4 h-4\" />\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t<div className=\"flex-1 min-h-0\">\n\t\t\t\t{preview && (\n\t\t\t\t\t<iframe\n\t\t\t\t\t\tkey={preview.url}\n\t\t\t\t\t\tsrc={preview.url}\n\t\t\t\t\t\tclassName=\"w-full h-full border-none\"\n\t\t\t\t\t\tsandbox=\"allow-scripts allow-same-origin allow-forms allow-popups allow-presentation\"\n\t\t\t\t\t\ttitle={preview.title || \"Preview\"}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkKHQYSEYN_cjs = require('./chunk-KHQYSEYN.cjs');
4
+ var chunkLVH5ZIYA_cjs = require('./chunk-LVH5ZIYA.cjs');
5
5
  require('./chunk-DVWX2UGY.cjs');
6
6
  require('./chunk-BYX6IOGX.cjs');
7
7
  require('./chunk-B277MAUK.cjs');
@@ -287,7 +287,7 @@ function ChatDrawer({
287
287
  className: "w-full sm:w-[450px] sm:max-w-[450px] p-0 flex flex-col [&>button]:hidden",
288
288
  children: [
289
289
  /* @__PURE__ */ jsxRuntime.jsx(VisuallyHidden__namespace.Root, { children: /* @__PURE__ */ jsxRuntime.jsx(SheetTitle, { children: "Chat Assistant" }) }),
290
- /* @__PURE__ */ jsxRuntime.jsx(chunkKHQYSEYN_cjs.ChatInterface, {})
290
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLVH5ZIYA_cjs.ChatInterface, {})
291
291
  ]
292
292
  }
293
293
  )
@@ -479,47 +479,47 @@ function SatisfactionRating({ onSubmit, onSkip }) {
479
479
 
480
480
  Object.defineProperty(exports, "CartDrawer", {
481
481
  enumerable: true,
482
- get: function () { return chunkKHQYSEYN_cjs.CartDrawer; }
482
+ get: function () { return chunkLVH5ZIYA_cjs.CartDrawer; }
483
483
  });
484
484
  Object.defineProperty(exports, "ChatFooter", {
485
485
  enumerable: true,
486
- get: function () { return chunkKHQYSEYN_cjs.ChatFooter; }
486
+ get: function () { return chunkLVH5ZIYA_cjs.ChatFooter; }
487
487
  });
488
488
  Object.defineProperty(exports, "ChatHeader", {
489
489
  enumerable: true,
490
- get: function () { return chunkKHQYSEYN_cjs.ChatHeader; }
490
+ get: function () { return chunkLVH5ZIYA_cjs.ChatHeader; }
491
491
  });
492
492
  Object.defineProperty(exports, "ChatInput", {
493
493
  enumerable: true,
494
- get: function () { return chunkKHQYSEYN_cjs.ChatInput; }
494
+ get: function () { return chunkLVH5ZIYA_cjs.ChatInput; }
495
495
  });
496
496
  Object.defineProperty(exports, "ChatInterface", {
497
497
  enumerable: true,
498
- get: function () { return chunkKHQYSEYN_cjs.ChatInterface; }
498
+ get: function () { return chunkLVH5ZIYA_cjs.ChatInterface; }
499
499
  });
500
500
  Object.defineProperty(exports, "FloatingButton", {
501
501
  enumerable: true,
502
- get: function () { return chunkKHQYSEYN_cjs.FloatingButton; }
502
+ get: function () { return chunkLVH5ZIYA_cjs.FloatingButton; }
503
503
  });
504
504
  Object.defineProperty(exports, "LiveChatPanel", {
505
505
  enumerable: true,
506
- get: function () { return chunkKHQYSEYN_cjs.LiveChatPanel; }
506
+ get: function () { return chunkLVH5ZIYA_cjs.LiveChatPanel; }
507
507
  });
508
508
  Object.defineProperty(exports, "PreviewEmbedPanel", {
509
509
  enumerable: true,
510
- get: function () { return chunkKHQYSEYN_cjs.PreviewEmbedPanel; }
510
+ get: function () { return chunkLVH5ZIYA_cjs.PreviewEmbedPanel; }
511
511
  });
512
512
  Object.defineProperty(exports, "QuickQuestions", {
513
513
  enumerable: true,
514
- get: function () { return chunkKHQYSEYN_cjs.QuickQuestions; }
514
+ get: function () { return chunkLVH5ZIYA_cjs.QuickQuestions; }
515
515
  });
516
516
  Object.defineProperty(exports, "SystemMessage", {
517
517
  enumerable: true,
518
- get: function () { return chunkKHQYSEYN_cjs.SystemMessage; }
518
+ get: function () { return chunkLVH5ZIYA_cjs.SystemMessage; }
519
519
  });
520
520
  Object.defineProperty(exports, "WelcomePage", {
521
521
  enumerable: true,
522
- get: function () { return chunkKHQYSEYN_cjs.WelcomePage; }
522
+ get: function () { return chunkLVH5ZIYA_cjs.WelcomePage; }
523
523
  });
524
524
  exports.ChatDrawer = ChatDrawer;
525
525
  exports.ChatInputWithAttachments = ChatInputWithAttachments;