@aigentyc/chat-sdk 0.3.1 → 0.5.0

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 (97) hide show
  1. package/AGENTS.md +24 -1
  2. package/claude-skill/aigentyc-chat-sdk/SKILL.md +1 -1
  3. package/context7.json +1 -1
  4. package/dist/{ChatInterface-f8ftS56n.d.ts → ChatInterface-2MN5cpYB.d.ts} +1 -1
  5. package/dist/{ChatInterface-B0zbA3Lm.d.cts → ChatInterface-BnVyOUG5.d.cts} +1 -1
  6. package/dist/{SlotsContext-BjiX1mRx.d.ts → SlotsContext-BZBi51ZT.d.ts} +89 -4
  7. package/dist/{SlotsContext-CEOBjzfh.d.cts → SlotsContext-D_C7zlUA.d.cts} +89 -4
  8. package/dist/ai-elements.cjs +163 -566
  9. package/dist/ai-elements.cjs.map +1 -1
  10. package/dist/ai-elements.d.cts +10 -2
  11. package/dist/ai-elements.d.ts +10 -2
  12. package/dist/ai-elements.js +16 -461
  13. package/dist/ai-elements.js.map +1 -1
  14. package/dist/{chunk-M4YRNNGB.js → chunk-3H4CX3MS.js} +29 -6
  15. package/dist/chunk-3H4CX3MS.js.map +1 -0
  16. package/dist/{chunk-BPV66QNM.cjs → chunk-52ZHMTAA.cjs} +30 -8
  17. package/dist/chunk-52ZHMTAA.cjs.map +1 -0
  18. package/dist/{chunk-B27JIQ4Z.js → chunk-5XF3NEFB.js} +576 -6
  19. package/dist/chunk-5XF3NEFB.js.map +1 -0
  20. package/dist/{chunk-5XF7KH6B.cjs → chunk-7ESWDFF5.cjs} +94 -60
  21. package/dist/chunk-7ESWDFF5.cjs.map +1 -0
  22. package/dist/{chunk-YG2COKFR.js → chunk-BWWN5LSE.js} +65 -31
  23. package/dist/chunk-BWWN5LSE.js.map +1 -0
  24. package/dist/chunk-BYTPAQ7F.js +70 -0
  25. package/dist/chunk-BYTPAQ7F.js.map +1 -0
  26. package/dist/{chunk-FPQ3UCCJ.js → chunk-D75TDRBH.js} +30 -8
  27. package/dist/chunk-D75TDRBH.js.map +1 -0
  28. package/dist/chunk-DDATCJ3O.cjs +75 -0
  29. package/dist/chunk-DDATCJ3O.cjs.map +1 -0
  30. package/dist/{chunk-NYQSM3EB.cjs → chunk-DVWX2UGY.cjs} +16 -2
  31. package/dist/chunk-DVWX2UGY.cjs.map +1 -0
  32. package/dist/{chunk-TZ7EM3EG.cjs → chunk-EMVZ7HWM.cjs} +44 -2
  33. package/dist/chunk-EMVZ7HWM.cjs.map +1 -0
  34. package/dist/{chunk-AD6XWKWB.js → chunk-FJZL33KP.js} +3 -3
  35. package/dist/{chunk-AD6XWKWB.js.map → chunk-FJZL33KP.js.map} +1 -1
  36. package/dist/{chunk-JHWSG5IB.js → chunk-JAOD6CNW.js} +38 -3
  37. package/dist/chunk-JAOD6CNW.js.map +1 -0
  38. package/dist/{chunk-4WOBNRRB.cjs → chunk-KTYYLZN7.cjs} +592 -8
  39. package/dist/chunk-KTYYLZN7.cjs.map +1 -0
  40. package/dist/{chunk-3HGOLNGG.cjs → chunk-NBZDBH4M.cjs} +29 -6
  41. package/dist/chunk-NBZDBH4M.cjs.map +1 -0
  42. package/dist/{chunk-5F3O3ZJH.js → chunk-P7UR37HP.js} +17 -4
  43. package/dist/chunk-P7UR37HP.js.map +1 -0
  44. package/dist/{chunk-7IFBPXT3.cjs → chunk-Q3UJEIBN.cjs} +6 -6
  45. package/dist/{chunk-7IFBPXT3.cjs.map → chunk-Q3UJEIBN.cjs.map} +1 -1
  46. package/dist/{chunk-3KSMOHNY.js → chunk-R3TYC66R.js} +46 -81
  47. package/dist/chunk-R3TYC66R.js.map +1 -0
  48. package/dist/{chunk-OU5OZKYH.cjs → chunk-Y4B45DW4.cjs} +48 -90
  49. package/dist/chunk-Y4B45DW4.cjs.map +1 -0
  50. package/dist/components.cjs +18 -18
  51. package/dist/components.d.cts +3 -3
  52. package/dist/components.d.ts +3 -3
  53. package/dist/components.js +7 -7
  54. package/dist/core.d.cts +2 -2
  55. package/dist/core.d.ts +2 -2
  56. package/dist/hooks.cjs +31 -10
  57. package/dist/hooks.cjs.map +1 -1
  58. package/dist/hooks.d.cts +2 -2
  59. package/dist/hooks.d.ts +2 -2
  60. package/dist/hooks.js +4 -3
  61. package/dist/hooks.js.map +1 -1
  62. package/dist/i18n.d.cts +1 -1
  63. package/dist/i18n.d.ts +1 -1
  64. package/dist/index.cjs +64 -32
  65. package/dist/index.cjs.map +1 -1
  66. package/dist/index.d.cts +4 -4
  67. package/dist/index.d.ts +4 -4
  68. package/dist/index.js +23 -11
  69. package/dist/index.js.map +1 -1
  70. package/dist/llms-full.txt +34 -11
  71. package/dist/styles.css +1 -1
  72. package/dist/theme.d.cts +1 -1
  73. package/dist/theme.d.ts +1 -1
  74. package/dist/tools.cjs +5 -5
  75. package/dist/tools.d.cts +2 -2
  76. package/dist/tools.d.ts +2 -2
  77. package/dist/tools.js +2 -2
  78. package/dist/{types-DlNwk-bG.d.ts → types-bsR_-fq8.d.cts} +43 -2
  79. package/dist/{types-DlNwk-bG.d.cts → types-bsR_-fq8.d.ts} +43 -2
  80. package/dist/ui.cjs +52 -52
  81. package/dist/ui.js +2 -2
  82. package/llms.txt +1 -1
  83. package/package.json +1 -1
  84. package/dist/chunk-3HGOLNGG.cjs.map +0 -1
  85. package/dist/chunk-3KSMOHNY.js.map +0 -1
  86. package/dist/chunk-4WOBNRRB.cjs.map +0 -1
  87. package/dist/chunk-5F3O3ZJH.js.map +0 -1
  88. package/dist/chunk-5XF7KH6B.cjs.map +0 -1
  89. package/dist/chunk-B27JIQ4Z.js.map +0 -1
  90. package/dist/chunk-BPV66QNM.cjs.map +0 -1
  91. package/dist/chunk-FPQ3UCCJ.js.map +0 -1
  92. package/dist/chunk-JHWSG5IB.js.map +0 -1
  93. package/dist/chunk-M4YRNNGB.js.map +0 -1
  94. package/dist/chunk-NYQSM3EB.cjs.map +0 -1
  95. package/dist/chunk-OU5OZKYH.cjs.map +0 -1
  96. package/dist/chunk-TZ7EM3EG.cjs.map +0 -1
  97. package/dist/chunk-YG2COKFR.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/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","ConversationContent","ConversationEmptyState","MessageAttachments","MessageAttachment","ToolRenderer","Sources","SourcesTrigger","SourcesContent","Source","MessageFeedback","Loader","Headset","Send","ThumbsUp","ThumbsDown","usePreviewEmbed","ExternalLink"],"mappings":"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","file":"chunk-7ESWDFF5.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 * 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 { Conversation, ConversationContent, ConversationEmptyState } from \"../ai-elements/conversation\";\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}\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, sendMessage, sessionId, config, 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\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 className=\"flex-1\">\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>\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\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"]}
@@ -1,10 +1,10 @@
1
1
  "use client";
2
- import { useIsMobile, useLiveChat, usePreviewEmbed } from './chunk-5F3O3ZJH.js';
2
+ import { useAutoResize, useIsMobile, useLiveChat, usePreviewEmbed } from './chunk-P7UR37HP.js';
3
3
  import { useTheme } from './chunk-IU7Q7O5G.js';
4
- import { Conversation, ConversationContent, ConversationEmptyState, Sources, SourcesTrigger, SourcesContent, Source, MessageFeedback, Loader } from './chunk-B27JIQ4Z.js';
4
+ import { Conversation, ConversationContent, ConversationEmptyState, MessageAttachments, MessageAttachment, Sources, SourcesTrigger, SourcesContent, Source, MessageFeedback, Loader } from './chunk-5XF3NEFB.js';
5
5
  import { useI18n } from './chunk-QYCEHFAB.js';
6
- import { ToolRenderer } from './chunk-AD6XWKWB.js';
7
- import { useChatContext, useSlots, renderSlot } from './chunk-FPQ3UCCJ.js';
6
+ import { ToolRenderer } from './chunk-FJZL33KP.js';
7
+ import { useChatContext, useSlots, renderSlot } from './chunk-D75TDRBH.js';
8
8
  import { cn } from './chunk-3RW7O444.js';
9
9
  import { memo, useState, useRef, useEffect, useCallback, Component, useMemo } from 'react';
10
10
  import { X, ArrowLeft, ShoppingCart, Plus, Ticket, FerrisWheel, Flag, Building, Heart, Star, Calendar, MapPin, Hotel, Coffee, Utensils, Settings, Users, FileText, HelpCircle, Search, Zap, MessageSquare, Shield, Minus, Trash2, Headset, Send, ThumbsUp, ThumbsDown, ExternalLink, SparklesIcon } from 'lucide-react';
@@ -161,23 +161,30 @@ var ChatInput = memo(function ChatInput2({
161
161
  placeholder
162
162
  }) {
163
163
  const [isFocused, setIsFocused] = useState(false);
164
+ const [isComposing, setIsComposing] = useState(false);
164
165
  const { t, direction } = useI18n();
166
+ const { ref: textareaRef } = useAutoResize(value, {
167
+ minHeight: 24,
168
+ maxHeight: 160
169
+ });
165
170
  const handleKeyDown = (e) => {
166
- if (e.key === "Enter" && value.trim() && !isProcessing) {
167
- e.preventDefault();
168
- onSubmit(value);
169
- }
171
+ if (e.key !== "Enter") return;
172
+ if (isComposing || e.nativeEvent.isComposing) return;
173
+ if (e.shiftKey) return;
174
+ e.preventDefault();
175
+ if (!value.trim() || isProcessing) return;
176
+ onSubmit(value);
170
177
  };
171
178
  const hasValue = value.trim().length > 0;
172
179
  return /* @__PURE__ */ jsxs(
173
180
  "div",
174
181
  {
175
182
  className: `
176
- relative flex items-center gap-3
183
+ relative flex items-end gap-3
177
184
  rounded-2xl
178
185
  border-2 transition-all duration-300
179
186
  ${isFocused ? "shadow-lg" : "shadow-md hover:shadow-lg"}
180
- ps-4 md:ps-5 pe-1.5 md:pe-2
187
+ ps-4 md:ps-5 pe-1.5 md:pe-2 py-1.5 md:py-2
181
188
  `,
182
189
  style: {
183
190
  backgroundColor: "var(--ac-background)",
@@ -187,7 +194,7 @@ var ChatInput = memo(function ChatInput2({
187
194
  /* @__PURE__ */ jsx(
188
195
  "div",
189
196
  {
190
- className: "shrink-0 transition-colors duration-300",
197
+ className: "shrink-0 transition-colors duration-300 self-center",
191
198
  style: { color: isFocused ? "var(--ac-primary)" : "#a0a0a0" },
192
199
  children: /* @__PURE__ */ jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
193
200
  /* @__PURE__ */ jsx("circle", { cx: "11", cy: "11", r: "8" }),
@@ -196,18 +203,21 @@ var ChatInput = memo(function ChatInput2({
196
203
  }
197
204
  ),
198
205
  /* @__PURE__ */ jsx(
199
- "input",
206
+ "textarea",
200
207
  {
208
+ ref: textareaRef,
201
209
  dir: direction,
202
- type: "text",
210
+ rows: 1,
203
211
  value,
204
212
  onChange: (e) => onChange(e.target.value),
205
213
  onKeyDown: handleKeyDown,
214
+ onCompositionStart: () => setIsComposing(true),
215
+ onCompositionEnd: () => setIsComposing(false),
206
216
  onFocus: () => setIsFocused(true),
207
217
  onBlur: () => setIsFocused(false),
208
218
  disabled: isProcessing,
209
219
  placeholder: placeholder || t("typeMessage"),
210
- className: "\n flex-1 bg-transparent text-start\n outline-none text-base\n min-h-[52px] md:min-h-[60px]\n disabled:opacity-50\n ",
220
+ className: "\n flex-1 bg-transparent text-start\n outline-none text-base resize-none\n py-[14px] md:py-[17px]\n disabled:opacity-50\n ",
211
221
  style: { color: "var(--ac-text)" }
212
222
  }
213
223
  ),
@@ -220,7 +230,7 @@ var ChatInput = memo(function ChatInput2({
220
230
  className: `
221
231
  group relative flex items-center justify-center
222
232
  w-10 h-10 md:w-12 md:h-12
223
- rounded-xl shrink-0
233
+ rounded-xl shrink-0 self-end mb-1
224
234
  transition-all duration-300 overflow-hidden
225
235
  ${hasValue && !isProcessing ? "shadow-md hover:shadow-lg hover:scale-105" : "cursor-not-allowed"}
226
236
  disabled:hover:scale-100
@@ -882,7 +892,7 @@ function DefaultUserMessage({ text }) {
882
892
  return /* @__PURE__ */ jsx(
883
893
  "div",
884
894
  {
885
- className: "inline-block rounded-2xl px-3 py-2 max-w-[85%]",
895
+ className: "inline-block rounded-2xl px-3 py-2 max-w-[85%] whitespace-pre-wrap break-words",
886
896
  style: {
887
897
  backgroundColor: "var(--ac-user-bubble-bg, var(--ac-primary))",
888
898
  color: "var(--ac-primary-foreground, #fff)"
@@ -893,7 +903,7 @@ function DefaultUserMessage({ text }) {
893
903
  }
894
904
  function ChatInterface(props) {
895
905
  const { showSources = false } = props;
896
- const { messages, status, sendMessage, sessionId, config, clearMessages } = useChatContext();
906
+ const { messages, status, sendMessage, sessionId, config, newConversation: ctxNewConversation } = useChatContext();
897
907
  const { t, direction } = useI18n();
898
908
  useTheme();
899
909
  const slots = useSlots();
@@ -915,12 +925,12 @@ function ChatInterface(props) {
915
925
  if (messages.length === 0 && !showWelcome) setShowWelcome(true);
916
926
  }, [messages.length, showWelcome]);
917
927
  const handleSubmit = useCallback(
918
- (text) => {
919
- if (!text.trim() || isProcessing) return;
928
+ (text, files) => {
929
+ if (!text.trim() && !files?.length || isProcessing) return;
920
930
  if (liveChat?.state === "live") return;
921
931
  setShowWelcome(false);
922
932
  setInput("");
923
- sendMessage(text);
933
+ sendMessage(text, files);
924
934
  },
925
935
  [isProcessing, sendMessage, liveChat]
926
936
  );
@@ -932,12 +942,12 @@ function ChatInterface(props) {
932
942
  [handleSubmit, props.showFirstMessage]
933
943
  );
934
944
  const handleNewConversation = useCallback(() => {
935
- clearMessages();
945
+ ctxNewConversation();
936
946
  setShowWelcome(true);
937
947
  setInput("");
938
948
  setHideFirstUserMessage(false);
939
949
  props.onNewConversation?.();
940
- }, [clearMessages, props]);
950
+ }, [ctxNewConversation, props]);
941
951
  useEffect(() => {
942
952
  if (props.pendingMessage && props.isOpen) {
943
953
  const timer = setTimeout(() => {
@@ -1023,12 +1033,36 @@ function ChatInterface(props) {
1023
1033
  {
1024
1034
  className: `group ${message.role === "assistant" ? "is-assistant" : "is-user"}`,
1025
1035
  children: [
1026
- (props.messagePartOrder === "stream-order" ? message.parts || [] : [...message.parts || []].sort((a, b) => {
1027
- const textFirst = props.messagePartOrder !== "tools-first";
1028
- if (a.type === "text" && b.type !== "text") return textFirst ? -1 : 1;
1029
- if (a.type !== "text" && b.type === "text") return textFirst ? 1 : -1;
1030
- return 0;
1031
- })).map((part, i) => {
1036
+ /* @__PURE__ */ jsx(
1037
+ MessageAttachments,
1038
+ {
1039
+ className: message.role === "user" ? "mb-2" : "mr-auto ml-0 mb-2",
1040
+ children: (message.parts || []).filter((p) => p.type === "file" && p.url).map((p, i) => /* @__PURE__ */ jsx(
1041
+ MessageAttachment,
1042
+ {
1043
+ className: "size-32",
1044
+ data: {
1045
+ type: "file",
1046
+ url: p.url,
1047
+ mediaType: p.mediaType ?? "",
1048
+ filename: p.filename
1049
+ }
1050
+ },
1051
+ `${message.id}-file-${i}`
1052
+ ))
1053
+ }
1054
+ ),
1055
+ (() => {
1056
+ const parts = (message.parts || []).filter(
1057
+ (p) => p.type !== "file" && !(p.type === "text" && !(p.text || "").trim())
1058
+ );
1059
+ return props.messagePartOrder === "stream-order" ? parts : [...parts].sort((a, b) => {
1060
+ const textFirst = props.messagePartOrder !== "tools-first";
1061
+ if (a.type === "text" && b.type !== "text") return textFirst ? -1 : 1;
1062
+ if (a.type !== "text" && b.type === "text") return textFirst ? 1 : -1;
1063
+ return 0;
1064
+ });
1065
+ })().map((part, i) => {
1032
1066
  if (part.type === "text") {
1033
1067
  if (message.role === "assistant") {
1034
1068
  return /* @__PURE__ */ jsx("div", { children: renderSlot("assistantMessage", { message, partIndex: i, text: part.text || "" }, DefaultAssistantMessage, slots) }, `${message.id}-${i}`);
@@ -1118,7 +1152,7 @@ function ChatInterface(props) {
1118
1152
  /* @__PURE__ */ jsxs("div", { className: "mx-auto z-40 w-full flex items-end gap-2", children: [
1119
1153
  /* @__PURE__ */ jsx("div", { className: "flex-1", children: renderSlot(
1120
1154
  "input",
1121
- { value: input, onChange: setInput, onSubmit: () => handleSubmit(input), isProcessing },
1155
+ { value: input, onChange: setInput, onSubmit: handleSubmit, isProcessing },
1122
1156
  ChatInput,
1123
1157
  slots
1124
1158
  ) }),
@@ -1772,5 +1806,5 @@ function PreviewEmbedPanel({ isOpen, isRightSide, zIndex }) {
1772
1806
  }
1773
1807
 
1774
1808
  export { CartDrawer, ChatErrorBoundary, ChatFooter, ChatHeader, ChatInput, ChatInterface, FloatingButton, LiveChatPanel, MobileLiveChatDrawer, PreviewEmbedPanel, QuickQuestions, SystemMessage, WelcomePage };
1775
- //# sourceMappingURL=chunk-YG2COKFR.js.map
1776
- //# sourceMappingURL=chunk-YG2COKFR.js.map
1809
+ //# sourceMappingURL=chunk-BWWN5LSE.js.map
1810
+ //# sourceMappingURL=chunk-BWWN5LSE.js.map