@aigentyc/chat-sdk 0.5.0 → 0.5.2

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.
Files changed (85) hide show
  1. package/dist/{ChatInterface-2MN5cpYB.d.ts → ChatInterface-CRmM_RG_.d.ts} +9 -1
  2. package/dist/{ChatInterface-BnVyOUG5.d.cts → ChatInterface-DKF3BY42.d.cts} +9 -1
  3. package/dist/{SlotsContext-BZBi51ZT.d.ts → SlotsContext-B_087V7B.d.ts} +11 -2
  4. package/dist/{SlotsContext-D_C7zlUA.d.cts → SlotsContext-DAQiASVu.d.cts} +11 -2
  5. package/dist/ai-elements.cjs +39 -27
  6. package/dist/ai-elements.d.cts +63 -1
  7. package/dist/ai-elements.d.ts +63 -1
  8. package/dist/ai-elements.js +2 -2
  9. package/dist/{chunk-3MP2EGEJ.cjs → chunk-72QJ2ORD.cjs} +4 -2
  10. package/dist/chunk-72QJ2ORD.cjs.map +1 -0
  11. package/dist/{chunk-KTYYLZN7.cjs → chunk-B277MAUK.cjs} +76 -4
  12. package/dist/chunk-B277MAUK.cjs.map +1 -0
  13. package/dist/{chunk-P3RPAI4F.cjs → chunk-BYX6IOGX.cjs} +4 -4
  14. package/dist/{chunk-P3RPAI4F.cjs.map → chunk-BYX6IOGX.cjs.map} +1 -1
  15. package/dist/chunk-CNPYBLLT.js +81 -0
  16. package/dist/chunk-CNPYBLLT.js.map +1 -0
  17. package/dist/{chunk-FJZL33KP.js → chunk-CW6LCVNC.js} +3 -3
  18. package/dist/{chunk-FJZL33KP.js.map → chunk-CW6LCVNC.js.map} +1 -1
  19. package/dist/{chunk-D75TDRBH.js → chunk-JAEXKKSE.js} +41 -35
  20. package/dist/chunk-JAEXKKSE.js.map +1 -0
  21. package/dist/{chunk-Q3UJEIBN.cjs → chunk-JEK2V5I3.cjs} +6 -6
  22. package/dist/{chunk-Q3UJEIBN.cjs.map → chunk-JEK2V5I3.cjs.map} +1 -1
  23. package/dist/{chunk-7ESWDFF5.cjs → chunk-KHQYSEYN.cjs} +244 -146
  24. package/dist/chunk-KHQYSEYN.cjs.map +1 -0
  25. package/dist/{chunk-QYCEHFAB.js → chunk-LDQVDUUJ.js} +4 -2
  26. package/dist/chunk-LDQVDUUJ.js.map +1 -0
  27. package/dist/{chunk-5XF3NEFB.js → chunk-O5TPHZRP.js} +74 -5
  28. package/dist/chunk-O5TPHZRP.js.map +1 -0
  29. package/dist/{chunk-BWWN5LSE.js → chunk-PNUHUUA3.js} +221 -124
  30. package/dist/chunk-PNUHUUA3.js.map +1 -0
  31. package/dist/{chunk-52ZHMTAA.cjs → chunk-UXVOUC2A.cjs} +41 -35
  32. package/dist/chunk-UXVOUC2A.cjs.map +1 -0
  33. package/dist/{chunk-IU7Q7O5G.js → chunk-VQPOUMBC.js} +3 -3
  34. package/dist/{chunk-IU7Q7O5G.js.map → chunk-VQPOUMBC.js.map} +1 -1
  35. package/dist/chunk-VYBHYFG3.cjs +87 -0
  36. package/dist/chunk-VYBHYFG3.cjs.map +1 -0
  37. package/dist/components.cjs +20 -19
  38. package/dist/components.cjs.map +1 -1
  39. package/dist/components.d.cts +2 -2
  40. package/dist/components.d.ts +2 -2
  41. package/dist/components.js +8 -7
  42. package/dist/components.js.map +1 -1
  43. package/dist/core.cjs +21 -82
  44. package/dist/core.cjs.map +1 -1
  45. package/dist/core.d.cts +2 -2
  46. package/dist/core.d.ts +2 -2
  47. package/dist/core.js +2 -78
  48. package/dist/core.js.map +1 -1
  49. package/dist/hooks.cjs +9 -8
  50. package/dist/hooks.cjs.map +1 -1
  51. package/dist/hooks.d.cts +2 -2
  52. package/dist/hooks.d.ts +2 -2
  53. package/dist/hooks.js +4 -3
  54. package/dist/hooks.js.map +1 -1
  55. package/dist/i18n.cjs +5 -5
  56. package/dist/i18n.d.cts +2 -2
  57. package/dist/i18n.d.ts +2 -2
  58. package/dist/i18n.js +1 -1
  59. package/dist/index.cjs +35 -26
  60. package/dist/index.cjs.map +1 -1
  61. package/dist/index.d.cts +28 -6
  62. package/dist/index.d.ts +28 -6
  63. package/dist/index.js +18 -13
  64. package/dist/index.js.map +1 -1
  65. package/dist/llms-full.txt +10 -10
  66. package/dist/styles.css +1 -1
  67. package/dist/theme.cjs +4 -4
  68. package/dist/theme.d.cts +1 -1
  69. package/dist/theme.d.ts +1 -1
  70. package/dist/theme.js +2 -2
  71. package/dist/tools.cjs +6 -5
  72. package/dist/tools.d.cts +2 -2
  73. package/dist/tools.d.ts +2 -2
  74. package/dist/tools.js +3 -2
  75. package/dist/{types-bsR_-fq8.d.cts → types-DRa1zFlN.d.cts} +10 -1
  76. package/dist/{types-bsR_-fq8.d.ts → types-DRa1zFlN.d.ts} +10 -1
  77. package/package.json +2 -2
  78. package/dist/chunk-3MP2EGEJ.cjs.map +0 -1
  79. package/dist/chunk-52ZHMTAA.cjs.map +0 -1
  80. package/dist/chunk-5XF3NEFB.js.map +0 -1
  81. package/dist/chunk-7ESWDFF5.cjs.map +0 -1
  82. package/dist/chunk-BWWN5LSE.js.map +0 -1
  83. package/dist/chunk-D75TDRBH.js.map +0 -1
  84. package/dist/chunk-KTYYLZN7.cjs.map +0 -1
  85. package/dist/chunk-QYCEHFAB.js.map +0 -1
@@ -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/components/FloatingButton.tsx","../src/components/LiveChatPanel.tsx","../src/components/PreviewEmbedPanel.tsx"],"names":["jsxs","jsx","memo","ChatHeader","useI18n","useChatContext","X","Fragment","ArrowLeft","cn","ShoppingCart","Plus","ChatInput","useState","useAutoResize","Shield","MessageSquare","Zap","Search","HelpCircle","FileText","Users","Settings","Utensils","Coffee","Hotel","MapPin","Calendar","Star","Heart","Building","Flag","FerrisWheel","Ticket","useIsMobile","useRef","useEffect","useCallback","Minus","Trash2","Component","SparklesIcon","useTheme","useSlots","useLiveChat","useMemo","renderSlot","Conversation","anchorToLatestTurn","FollowLatestTurn","ConversationContent","ConversationEmptyState","LATEST_TURN_ATTR","MessageAttachments","MessageAttachment","ToolRenderer","Sources","SourcesTrigger","SourcesContent","Source","MessageFeedback","Loader","Headset","Send","ThumbsUp","ThumbsDown","usePreviewEmbed","ExternalLink"],"mappings":"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","file":"chunk-KHQYSEYN.cjs","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","\"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\";\n\ninterface LiveChatPanelProps {\n\tisWidgetOpen: boolean;\n\tisRightSide: boolean;\n\tzIndex: number;\n}\n\n/** Desktop side panel — only renders when viewport is wide enough (>1200px) */\nexport function LiveChatPanel({ isWidgetOpen, isRightSide, zIndex }: 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: \"min(420px, calc(100vw - 800px))\",\n\t\t\t\theight: \"75vh\",\n\t\t\t\t...(isRightSide ? { right: \"790px\" } : { left: \"790px\" }),\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\";\n\ninterface PreviewEmbedPanelProps {\n\tisOpen: boolean;\n\tisRightSide: boolean;\n\tzIndex: number;\n}\n\nexport function PreviewEmbedPanel({ isOpen, isRightSide, zIndex }: 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: \"min(560px, calc(100vw - 800px))\",\n\t\t\t\theight: \"70vh\",\n\t\t\t\t...(isRightSide ? { right: \"790px\" } : { left: \"790px\" }),\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"]}
@@ -20,6 +20,7 @@ var en = {
20
20
  conversationTooLong: "Conversation Too Long",
21
21
  conversationTooLongDesc: "The conversation has become too long to continue.",
22
22
  somethingWentWrongDesc: "We encountered an issue. Please try again or start fresh.",
23
+ tryAgain: "Try Again",
23
24
  typeMessage: "Type a message...",
24
25
  send: "Send",
25
26
  aboutUs: "About Us",
@@ -126,6 +127,7 @@ var he = {
126
127
  conversationTooLong: "\u05D4\u05E9\u05D9\u05D7\u05D4 \u05D0\u05E8\u05D5\u05DB\u05D4 \u05DE\u05D3\u05D9",
127
128
  conversationTooLongDesc: "\u05D4\u05E9\u05D9\u05D7\u05D4 \u05D4\u05E4\u05DB\u05D4 \u05DC\u05D0\u05E8\u05D5\u05DB\u05D4 \u05DE\u05D3\u05D9 \u05D1\u05E9\u05D1\u05D9\u05DC \u05DC\u05D4\u05DE\u05E9\u05D9\u05DA.",
128
129
  somethingWentWrongDesc: "\u05E0\u05EA\u05E7\u05DC\u05E0\u05D5 \u05D1\u05D1\u05E2\u05D9\u05D4. \u05D0\u05E0\u05D0 \u05E0\u05E1\u05D5 \u05E9\u05D5\u05D1 \u05D0\u05D5 \u05D4\u05EA\u05D7\u05D9\u05DC\u05D5 \u05DE\u05D7\u05D3\u05E9.",
130
+ tryAgain: "\u05DC\u05E0\u05E1\u05D5\u05EA \u05E9\u05D5\u05D1",
129
131
  typeMessage: "\u05D4\u05E7\u05DC\u05D3 \u05D4\u05D5\u05D3\u05E2\u05D4...",
130
132
  send: "\u05E9\u05DC\u05D7",
131
133
  aboutUs: "\u05D0\u05D5\u05D3\u05D5\u05EA\u05D9\u05E0\u05D5",
@@ -261,5 +263,5 @@ function useI18n() {
261
263
  }
262
264
 
263
265
  export { I18nProvider, addLanguage, isRTL, useI18n };
264
- //# sourceMappingURL=chunk-QYCEHFAB.js.map
265
- //# sourceMappingURL=chunk-QYCEHFAB.js.map
266
+ //# sourceMappingURL=chunk-LDQVDUUJ.js.map
267
+ //# sourceMappingURL=chunk-LDQVDUUJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/providers/I18nProvider.tsx"],"names":[],"mappings":"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","file":"chunk-LDQVDUUJ.js","sourcesContent":["\"use client\";\n\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n useMemo,\n type ReactNode,\n} from \"react\";\n\n/**\n * All supported translation keys.\n */\nexport type TranslationKeys =\n | \"welcomeTitle\"\n | \"welcomeSubtitle\"\n | \"searchKnowledgeBase\"\n | \"searchingFor\"\n | \"processing\"\n | \"thinking\"\n | \"newConversation\"\n | \"backToStart\"\n | \"closeChat\"\n | \"alwaysVerify\"\n | \"poweredBy\"\n | \"startNewConversation\"\n | \"somethingWentWrong\"\n | \"conversationTooLong\"\n | \"conversationTooLongDesc\"\n | \"somethingWentWrongDesc\"\n | \"tryAgain\"\n | \"typeMessage\"\n | \"send\"\n | \"aboutUs\"\n | \"aboutUsDesc\"\n | \"support\"\n | \"supportDesc\"\n | \"features\"\n | \"featuresDesc\"\n | \"search\"\n | \"searchDesc\"\n | \"greeting\"\n | \"guest\"\n | \"guestDesc\"\n | \"customer\"\n | \"customerDesc\"\n | \"partner\"\n | \"partnerDesc\"\n | \"aboutUsQuery\"\n | \"supportQuery\"\n | \"featuresQuery\"\n | \"searchQuery\"\n | \"whatWentWrong\"\n | \"wrongAnswer\"\n | \"partialAnswer\"\n | \"hallucination\"\n | \"inappropriateTone\"\n | \"addDetails\"\n | \"submitting\"\n | \"submitFeedback\"\n | \"helpful\"\n | \"notHelpful\"\n | \"copyResponse\"\n | \"searchingProducts\"\n | \"searchingProductsFor\"\n | \"sendingVerification\"\n | \"verifyingOrders\"\n | \"generatingLogin\"\n | \"noProductsFound\"\n | \"noOrdersFound\"\n | \"inStock\"\n | \"outOfStock\"\n | \"backorder\"\n | \"sale\"\n | \"addToCart\"\n | \"addedToCart\"\n | \"addToCartError\"\n | \"loginToStore\"\n | \"enterEmail\"\n | \"sendCode\"\n | \"otpSentTo\"\n | \"verifyCode\"\n | \"verifiedSuccess\"\n | \"resendCode\"\n | \"invalidCode\"\n | \"selectVariation\"\n | \"orderStatus_completed\"\n | \"orderStatus_processing\"\n | \"orderStatus_on-hold\"\n | \"orderStatus_pending\"\n | \"orderStatus_cancelled\"\n | \"orderStatus_failed\"\n | \"orderStatus_refunded\"\n | \"cart\"\n | \"yourCart\"\n | \"cartItems\"\n | \"cartEmpty\"\n | \"checkout\"\n | \"cartTotal\"\n | \"removeItem\"\n | \"liveChatConnecting\"\n | \"liveChatPosition\"\n | \"liveChatCancel\"\n | \"liveChatChattingWith\"\n | \"liveChatEndChat\"\n | \"liveChatRateTitle\"\n | \"liveChatRateThank\"\n | \"liveChatBackToAI\"\n | \"liveChatSubmit\"\n | \"liveChatSkip\"\n | \"liveChatFeedbackPlaceholder\"\n | \"liveChatTalkToHuman\"\n | \"liveChatIdentityTitle\"\n | \"liveChatIdentityName\"\n | \"liveChatIdentityEmail\"\n | \"liveChatIdentityConnect\"\n | \"liveChatIdentityContinue\"\n | \"liveChatRateExperience\"\n | \"liveChatEnded\";\n\n/** A complete set of translations for a language. */\nexport type TranslationMap = Record<TranslationKeys, string>;\n\n/** Built-in English translations. */\nconst en: TranslationMap = {\n welcomeTitle: \"Welcome to {clientName}\",\n welcomeSubtitle: \"How can I assist you today? Select a topic or type your message below.\",\n searchKnowledgeBase: \"Searching knowledge base...\",\n searchingFor: 'Searching for \"{query}\"...',\n processing: \"Processing...\",\n thinking: \"Thinking...\",\n newConversation: \"New conversation\",\n backToStart: \"Back to start\",\n closeChat: \"Close chat\",\n alwaysVerify: \"Always verify AI responses\",\n poweredBy: \"powered by\",\n startNewConversation: \"Start New Conversation\",\n somethingWentWrong: \"Something Went Wrong\",\n conversationTooLong: \"Conversation Too Long\",\n conversationTooLongDesc: \"The conversation has become too long to continue.\",\n somethingWentWrongDesc: \"We encountered an issue. Please try again or start fresh.\",\n tryAgain: \"Try Again\",\n typeMessage: \"Type a message...\",\n send: \"Send\",\n aboutUs: \"About Us\",\n aboutUsDesc: \"Learn more about our services\",\n support: \"Support\",\n supportDesc: \"Get help with your questions\",\n features: \"Features\",\n featuresDesc: \"Discover what we can do\",\n search: \"Search\",\n searchDesc: \"Find specific information\",\n greeting: \"Hi there 👋 How can I help you today?\",\n guest: \"Guest\",\n guestDesc: \"Just browsing\",\n customer: \"Customer\",\n customerDesc: \"Existing customer with questions\",\n partner: \"Partner\",\n partnerDesc: \"Business partner or professional\",\n aboutUsQuery: \"Tell me about About Us\",\n supportQuery: \"Tell me about Support\",\n featuresQuery: \"Tell me about Features\",\n searchQuery: \"Tell me about Search\",\n whatWentWrong: \"What went wrong?\",\n wrongAnswer: \"Wrong answer\",\n partialAnswer: \"Partial answer\",\n hallucination: \"Hallucination\",\n inappropriateTone: \"Inappropriate tone\",\n addDetails: \"Add details (optional)...\",\n submitting: \"Submitting...\",\n submitFeedback: \"Submit Feedback\",\n helpful: \"Helpful\",\n notHelpful: \"Not helpful\",\n copyResponse: \"Copy response\",\n searchingProducts: \"Searching products...\",\n searchingProductsFor: 'Searching products: \"{query}\"...',\n sendingVerification: \"Sending verification code...\",\n verifyingOrders: \"Verifying and fetching orders...\",\n generatingLogin: \"Generating login link...\",\n noProductsFound: \"No products found\",\n noOrdersFound: \"No orders found\",\n inStock: \"In stock\",\n outOfStock: \"Out of stock\",\n backorder: \"Backorder\",\n sale: \"Sale\",\n addToCart: \"Add to Cart\",\n addedToCart: \"Added to cart!\",\n addToCartError: \"Failed to add to cart\",\n loginToStore: \"Login to Store\",\n enterEmail: \"Enter your email to verify\",\n sendCode: \"Send verification code\",\n otpSentTo: \"Verification code sent to {email}\",\n verifyCode: \"Verify\",\n verifiedSuccess: \"Verified successfully!\",\n resendCode: \"Resend code\",\n invalidCode: \"Invalid code, please try again\",\n selectVariation: \"Select\",\n orderStatus_completed: \"Completed\",\n orderStatus_processing: \"Processing\",\n \"orderStatus_on-hold\": \"On Hold\",\n orderStatus_pending: \"Pending\",\n orderStatus_cancelled: \"Cancelled\",\n orderStatus_failed: \"Failed\",\n orderStatus_refunded: \"Refunded\",\n cart: \"Cart\",\n yourCart: \"Your Cart\",\n cartItems: \"{count} items\",\n cartEmpty: \"Your cart is empty\",\n checkout: \"Checkout\",\n cartTotal: \"Total\",\n removeItem: \"Remove\",\n liveChatConnecting: \"Connecting you with an operator...\",\n liveChatPosition: \"Position #{position}\",\n liveChatCancel: \"Cancel\",\n liveChatChattingWith: \"Chatting with {name}\",\n liveChatEndChat: \"End Chat\",\n liveChatRateTitle: \"How was your experience?\",\n liveChatRateThank: \"Thank you for your feedback!\",\n liveChatBackToAI: \"Back to AI Assistant\",\n liveChatSubmit: \"Submit\",\n liveChatSkip: \"Skip\",\n liveChatFeedbackPlaceholder: \"Any additional feedback? (optional)\",\n liveChatTalkToHuman: \"Talk to an operator\",\n liveChatIdentityTitle: \"Please provide your details to connect with an operator\",\n liveChatIdentityName: \"Your name\",\n liveChatIdentityEmail: \"Your email\",\n liveChatIdentityConnect: \"Connect\",\n liveChatIdentityContinue: \"Continue\",\n liveChatRateExperience: \"Rate your experience\",\n liveChatEnded: \"Chat ended\",\n};\n\n/** Built-in Hebrew translations. */\nconst he: TranslationMap = {\n welcomeTitle: \"ברוכים הבאים ל-{clientName}\",\n welcomeSubtitle: \"איך אוכל לעזור היום? בחרו נושא או הקלידו הודעה למטה.\",\n searchKnowledgeBase: \"מחפש במאגר הידע...\",\n searchingFor: 'מחפש את \"{query}\"...',\n processing: \"מעבד...\",\n thinking: \"חושב...\",\n newConversation: \"שיחה חדשה\",\n backToStart: \"חזרה להתחלה\",\n closeChat: \"סגור צ'אט\",\n alwaysVerify: \"תמיד כדאי לוודא את תשובות ה-AI\",\n poweredBy: \"מופעל על ידי\",\n startNewConversation: \"התחל שיחה חדשה\",\n somethingWentWrong: \"משהו השתבש\",\n conversationTooLong: \"השיחה ארוכה מדי\",\n conversationTooLongDesc: \"השיחה הפכה לארוכה מדי בשביל להמשיך.\",\n somethingWentWrongDesc: \"נתקלנו בבעיה. אנא נסו שוב או התחילו מחדש.\",\n tryAgain: \"לנסות שוב\",\n typeMessage: \"הקלד הודעה...\",\n send: \"שלח\",\n aboutUs: \"אודותינו\",\n aboutUsDesc: \"למדו עוד על השירותים שלנו\",\n support: \"תמיכה\",\n supportDesc: \"קבלו עזרה עם השאלות שלכם\",\n features: \"פיצ'רים\",\n featuresDesc: \"גלו מה אנחנו יכולים לעשות\",\n search: \"חיפוש\",\n searchDesc: \"מצאו מידע ספציפי\",\n greeting: \"שלום 👋 איך אוכל לעזור לכם היום?\",\n guest: \"אורח\",\n guestDesc: \"רק גולש\",\n customer: \"לקוח\",\n customerDesc: \"לקוח קיים עם שאלות\",\n partner: \"שותף\",\n partnerDesc: \"שותף עסקי או איש מקצוע\",\n aboutUsQuery: \"ספר לי על אודותינו\",\n supportQuery: \"ספר לי על תמיכה\",\n featuresQuery: \"ספר לי על פיצ'רים\",\n searchQuery: \"ספר לי על חיפוש\",\n whatWentWrong: \"מה השתבש?\",\n wrongAnswer: \"תשובה לא נכונה\",\n partialAnswer: \"תשובה חלקית\",\n hallucination: \"הזיה (מידע מומצא)\",\n inappropriateTone: \"טון לא הולם\",\n addDetails: \"הוסיפו פרטים (אופציונלי)...\",\n submitting: \"שולח...\",\n submitFeedback: \"שלח משוב\",\n helpful: \"עוזר\",\n notHelpful: \"לא עוזר\",\n copyResponse: \"העתק תשובה\",\n searchingProducts: \"מחפש מוצרים...\",\n searchingProductsFor: 'מחפש מוצרים: \"{query}\"...',\n sendingVerification: \"שולח קוד אימות...\",\n verifyingOrders: \"מאמת ומביא הזמנות...\",\n generatingLogin: \"מייצר קישור התחברות...\",\n noProductsFound: \"לא נמצאו מוצרים\",\n noOrdersFound: \"לא נמצאו הזמנות\",\n inStock: \"במלאי\",\n outOfStock: \"אזל מהמלאי\",\n backorder: \"בהזמנה מראש\",\n sale: \"מבצע\",\n addToCart: \"הוסף לסל\",\n addedToCart: \"נוסף לסל!\",\n addToCartError: \"שגיאה בהוספה לסל\",\n loginToStore: \"התחבר לחנות\",\n enterEmail: \"הזינו אימייל לאימות\",\n sendCode: \"שלח קוד אימות\",\n otpSentTo: \"קוד אימות נשלח ל-{email}\",\n verifyCode: \"אמת\",\n verifiedSuccess: \"אומת בהצלחה!\",\n resendCode: \"שלח שוב\",\n invalidCode: \"קוד שגוי, נסו שוב\",\n selectVariation: \"בחר\",\n orderStatus_completed: \"הושלמה\",\n orderStatus_processing: \"בטיפול\",\n \"orderStatus_on-hold\": \"בהמתנה\",\n orderStatus_pending: \"ממתינה\",\n orderStatus_cancelled: \"בוטלה\",\n orderStatus_failed: \"נכשלה\",\n orderStatus_refunded: \"הוחזרה\",\n cart: \"סל\",\n yourCart: \"הסל שלך\",\n cartItems: \"{count} פריטים\",\n cartEmpty: \"הסל ריק\",\n checkout: \"לתשלום\",\n cartTotal: \"סה״כ\",\n removeItem: \"הסר\",\n liveChatConnecting: \"מחבר אותך לנציג...\",\n liveChatPosition: \"מיקום #{position}\",\n liveChatCancel: \"ביטול\",\n liveChatChattingWith: \"משוחח עם {name}\",\n liveChatEndChat: \"סיום שיחה\",\n liveChatRateTitle: \"איך היה השירות?\",\n liveChatRateThank: \"תודה על המשוב!\",\n liveChatBackToAI: \"חזרה לעוזר AI\",\n liveChatSubmit: \"שלח\",\n liveChatSkip: \"דלג\",\n liveChatFeedbackPlaceholder: \"משוב נוסף (אופציונלי)...\",\n liveChatTalkToHuman: \"דבר עם נציג\",\n liveChatIdentityTitle: \"אנא מלא/י את הפרטים כדי להתחבר לנציג\",\n liveChatIdentityName: \"שם\",\n liveChatIdentityEmail: \"אימייל\",\n liveChatIdentityConnect: \"התחבר\",\n liveChatIdentityContinue: \"המשך\",\n liveChatRateExperience: \"דרגו את החוויה שלכם\",\n liveChatEnded: \"השיחה הסתיימה\",\n};\n\n/** Built-in translation registry. */\nconst builtInTranslations: Record<string, TranslationMap> = { en, he };\n\n/** Registry for dynamically added languages. */\nconst customTranslations: Record<string, TranslationMap> = {};\n\n/**\n * Register a new language at runtime. Merges with any existing translations.\n *\n * @param code - Language code (e.g. \"fr\", \"es\")\n * @param translations - Full or partial translation map\n */\nexport function addLanguage(\n code: string,\n translations: Partial<TranslationMap>\n): void {\n const base = customTranslations[code] || builtInTranslations[code] || en;\n customTranslations[code] = { ...base, ...translations };\n}\n\n/** Resolve a translation string for the given language and key. */\nfunction resolve(\n language: string,\n key: TranslationKeys,\n overrides?: Partial<TranslationMap>,\n params?: Record<string, string>\n): string {\n // Priority: overrides > custom > built-in > fallback to English\n let text =\n overrides?.[key] ||\n customTranslations[language]?.[key] ||\n builtInTranslations[language]?.[key] ||\n builtInTranslations[\"en\"][key] ||\n key;\n\n if (params) {\n Object.entries(params).forEach(([k, v]) => {\n text = text.replace(`{${k}}`, v);\n });\n }\n return text;\n}\n\n/** RTL language codes. */\nconst RTL_LANGUAGES = new Set([\"he\", \"ar\", \"fa\", \"ur\"]);\n\n/** Returns true if the given language code is RTL. */\nexport function isRTL(language: string): boolean {\n return RTL_LANGUAGES.has(language);\n}\n\ninterface I18nContextValue {\n /** Translate a key, with optional interpolation params. */\n t: (key: TranslationKeys, params?: Record<string, string>) => string;\n /** Current language code. */\n language: string;\n /** Change the active language at runtime. */\n setLanguage: (lang: string) => void;\n /** Current text direction. */\n direction: \"ltr\" | \"rtl\";\n}\n\nconst I18nContext = createContext<I18nContextValue | null>(null);\n\n/** Props for the I18nProvider component. */\nexport interface I18nProviderProps {\n /** Active language code. Defaults to \"en\". */\n language?: string;\n /** Per-key translation overrides applied on top of built-in strings. */\n translations?: Partial<TranslationMap>;\n children: ReactNode;\n}\n\n/**\n * Provides i18n context to descendant components.\n * Supports built-in \"en\" and \"he\", dynamic languages via `addLanguage()`,\n * and per-instance overrides via the `translations` prop.\n */\nexport function I18nProvider({\n language: initialLanguage = \"en\",\n translations: overrides,\n children,\n}: I18nProviderProps) {\n const [language, setLanguage] = useState(initialLanguage);\n\n const t = useCallback(\n (key: TranslationKeys, params?: Record<string, string>) =>\n resolve(language, key, overrides, params),\n [language, overrides]\n );\n\n const direction = isRTL(language) ? \"rtl\" : \"ltr\";\n\n const value = useMemo<I18nContextValue>(\n () => ({ t, language, setLanguage, direction }),\n [t, language, direction]\n );\n\n return <I18nContext.Provider value={value}>{children}</I18nContext.Provider>;\n}\n\n/**\n * Returns the i18n context: `t()` translation function, current language, and `setLanguage`.\n * Must be used within an `I18nProvider`.\n */\nexport function useI18n(): I18nContextValue {\n const ctx = useContext(I18nContext);\n if (!ctx) {\n throw new Error(\"useI18n must be used within an I18nProvider\");\n }\n return ctx;\n}\n"]}