@aigentyc/chat-sdk 0.5.0 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ChatInterface-2MN5cpYB.d.ts → ChatInterface-CRmM_RG_.d.ts} +9 -1
- package/dist/{ChatInterface-BnVyOUG5.d.cts → ChatInterface-DKF3BY42.d.cts} +9 -1
- package/dist/{SlotsContext-BZBi51ZT.d.ts → SlotsContext-B_087V7B.d.ts} +11 -2
- package/dist/{SlotsContext-D_C7zlUA.d.cts → SlotsContext-DAQiASVu.d.cts} +11 -2
- package/dist/ai-elements.cjs +39 -27
- package/dist/ai-elements.d.cts +63 -1
- package/dist/ai-elements.d.ts +63 -1
- package/dist/ai-elements.js +2 -2
- package/dist/{chunk-3MP2EGEJ.cjs → chunk-72QJ2ORD.cjs} +4 -2
- package/dist/chunk-72QJ2ORD.cjs.map +1 -0
- package/dist/{chunk-KTYYLZN7.cjs → chunk-B277MAUK.cjs} +76 -4
- package/dist/chunk-B277MAUK.cjs.map +1 -0
- package/dist/{chunk-P3RPAI4F.cjs → chunk-BYX6IOGX.cjs} +4 -4
- package/dist/{chunk-P3RPAI4F.cjs.map → chunk-BYX6IOGX.cjs.map} +1 -1
- package/dist/chunk-CNPYBLLT.js +81 -0
- package/dist/chunk-CNPYBLLT.js.map +1 -0
- package/dist/{chunk-FJZL33KP.js → chunk-CW6LCVNC.js} +3 -3
- package/dist/{chunk-FJZL33KP.js.map → chunk-CW6LCVNC.js.map} +1 -1
- package/dist/{chunk-D75TDRBH.js → chunk-JAEXKKSE.js} +41 -35
- package/dist/chunk-JAEXKKSE.js.map +1 -0
- package/dist/{chunk-Q3UJEIBN.cjs → chunk-JEK2V5I3.cjs} +6 -6
- package/dist/{chunk-Q3UJEIBN.cjs.map → chunk-JEK2V5I3.cjs.map} +1 -1
- package/dist/{chunk-7ESWDFF5.cjs → chunk-KHQYSEYN.cjs} +244 -146
- package/dist/chunk-KHQYSEYN.cjs.map +1 -0
- package/dist/{chunk-QYCEHFAB.js → chunk-LDQVDUUJ.js} +4 -2
- package/dist/chunk-LDQVDUUJ.js.map +1 -0
- package/dist/{chunk-5XF3NEFB.js → chunk-O5TPHZRP.js} +74 -5
- package/dist/chunk-O5TPHZRP.js.map +1 -0
- package/dist/{chunk-BWWN5LSE.js → chunk-PNUHUUA3.js} +221 -124
- package/dist/chunk-PNUHUUA3.js.map +1 -0
- package/dist/{chunk-52ZHMTAA.cjs → chunk-UXVOUC2A.cjs} +41 -35
- package/dist/chunk-UXVOUC2A.cjs.map +1 -0
- package/dist/{chunk-IU7Q7O5G.js → chunk-VQPOUMBC.js} +3 -3
- package/dist/{chunk-IU7Q7O5G.js.map → chunk-VQPOUMBC.js.map} +1 -1
- package/dist/chunk-VYBHYFG3.cjs +87 -0
- package/dist/chunk-VYBHYFG3.cjs.map +1 -0
- package/dist/components.cjs +20 -19
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.cts +2 -2
- package/dist/components.d.ts +2 -2
- package/dist/components.js +8 -7
- package/dist/components.js.map +1 -1
- package/dist/core.cjs +21 -82
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +2 -2
- package/dist/core.d.ts +2 -2
- package/dist/core.js +2 -78
- package/dist/core.js.map +1 -1
- package/dist/hooks.cjs +9 -8
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.cts +2 -2
- package/dist/hooks.d.ts +2 -2
- package/dist/hooks.js +4 -3
- package/dist/hooks.js.map +1 -1
- package/dist/i18n.cjs +5 -5
- package/dist/i18n.d.cts +2 -2
- package/dist/i18n.d.ts +2 -2
- package/dist/i18n.js +1 -1
- package/dist/index.cjs +35 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +28 -6
- package/dist/index.d.ts +28 -6
- package/dist/index.js +18 -13
- package/dist/index.js.map +1 -1
- package/dist/llms-full.txt +10 -10
- package/dist/styles.css +1 -1
- package/dist/theme.cjs +4 -4
- package/dist/theme.d.cts +1 -1
- package/dist/theme.d.ts +1 -1
- package/dist/theme.js +2 -2
- package/dist/tools.cjs +6 -5
- package/dist/tools.d.cts +2 -2
- package/dist/tools.d.ts +2 -2
- package/dist/tools.js +3 -2
- package/dist/{types-bsR_-fq8.d.cts → types-DRa1zFlN.d.cts} +10 -1
- package/dist/{types-bsR_-fq8.d.ts → types-DRa1zFlN.d.ts} +10 -1
- package/package.json +2 -2
- package/dist/chunk-3MP2EGEJ.cjs.map +0 -1
- package/dist/chunk-52ZHMTAA.cjs.map +0 -1
- package/dist/chunk-5XF3NEFB.js.map +0 -1
- package/dist/chunk-7ESWDFF5.cjs.map +0 -1
- package/dist/chunk-BWWN5LSE.js.map +0 -1
- package/dist/chunk-D75TDRBH.js.map +0 -1
- package/dist/chunk-KTYYLZN7.cjs.map +0 -1
- package/dist/chunk-QYCEHFAB.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ai-elements/conversation.tsx","../src/core/api/kb-client.ts","../src/ai-elements/message-feedback.tsx","../src/ui/button-group.tsx","../src/ai-elements/message.tsx","../src/ai-elements/loader.tsx","../src/ai-elements/sources.tsx"],"names":["jsx","StickToBottom","cn","jsxs","Fragment","useStickToBottomContext","useCallback","Button","ArrowDownIcon","useI18n","useState","Check","Copy","X","Textarea","cva","Slot","TooltipProvider","Tooltip","TooltipTrigger","TooltipContent","createContext","useContext","useEffect","ChevronLeftIcon","ChevronRightIcon","memo","Streamdown","useRef","XIcon","createPortal","PaperclipIcon","Collapsible","CollapsibleTrigger","ChevronDownIcon","CollapsibleContent","BookIcon"],"mappings":"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","file":"chunk-KTYYLZN7.cjs","sourcesContent":["\"use client\";\n\nimport { Button } from \"../ui/button\";\nimport { cn } from \"../core/utils\";\nimport { ArrowDownIcon } from \"lucide-react\";\nimport type { ComponentProps } from \"react\";\nimport { useCallback } from \"react\";\nimport { StickToBottom, useStickToBottomContext } from \"use-stick-to-bottom\";\n\nexport type ConversationProps = ComponentProps<typeof StickToBottom>;\n\nexport const Conversation = ({ className, ...props }: ConversationProps) => (\n <StickToBottom\n className={cn(\"relative flex-1 overflow-y-hidden\", className)}\n initial=\"smooth\"\n resize=\"smooth\"\n role=\"log\"\n {...props}\n />\n);\n\nexport type ConversationContentProps = ComponentProps<\n typeof StickToBottom.Content\n>;\n\nexport const ConversationContent = ({\n className,\n ...props\n}: ConversationContentProps) => (\n <StickToBottom.Content\n className={cn(\"flex flex-col gap-8\", className)}\n {...props}\n />\n);\n\nexport type ConversationEmptyStateProps = ComponentProps<\"div\"> & {\n title?: string;\n description?: string;\n icon?: React.ReactNode;\n};\n\nexport const ConversationEmptyState = ({\n className,\n title = \"No messages yet\",\n description = \"Start a conversation to see messages here\",\n icon,\n children,\n ...props\n}: ConversationEmptyStateProps) => (\n <div\n className={cn(\n \"flex size-full flex-col items-center justify-center gap-3 p-8 text-center\",\n className\n )}\n {...props}\n >\n {children ?? (\n <>\n {icon && <div className=\"text-muted-foreground\">{icon}</div>}\n <div className=\"space-y-1\">\n <h3 className=\"font-medium text-sm\">{title}</h3>\n {description && (\n <p className=\"text-muted-foreground text-sm\">{description}</p>\n )}\n </div>\n </>\n )}\n </div>\n);\n\nexport type ConversationScrollButtonProps = ComponentProps<typeof Button>;\n\nexport const ConversationScrollButton = ({\n className,\n ...props\n}: ConversationScrollButtonProps) => {\n const { isAtBottom, scrollToBottom } = useStickToBottomContext();\n\n const handleScrollToBottom = useCallback(() => {\n scrollToBottom();\n }, [scrollToBottom]);\n\n return (\n !isAtBottom && (\n <Button\n className={cn(\n \"absolute bottom-4 left-[50%] translate-x-[-50%] rounded-full\",\n className\n )}\n onClick={handleScrollToBottom}\n size=\"icon\"\n type=\"button\"\n variant=\"outline\"\n {...props}\n >\n <ArrowDownIcon className=\"size-4\" />\n </Button>\n )\n );\n};\n","\"use client\";\n\n/**\n * Knowledge Base API Client\n * Communicates with central system's KB endpoints.\n */\n\nexport interface KBSearchOptions {\n\ttopK?: number;\n\tthreshold?: number;\n\tsectorId?: string;\n}\n\nexport interface KBSearchResult {\n\tid: number;\n\tcontent: string;\n\tdocumentName: string | null;\n\tsourceUrl: string | null;\n\tsimilarity: number;\n\tpageTitle?: string;\n\tsectionType?: string;\n}\n\nexport interface KBSearchResponse {\n\tsuccess: boolean;\n\tresults: KBSearchResult[];\n\tmetadata: {\n\t\tquery: string;\n\t\ttotalResults: number;\n\t\tgeneratedQueries?: string[];\n\t};\n}\n\nfunction getDefaultEndpoint(): string {\n\ttry {\n\t\t// Vite/ESM environments\n\t\tconst env = (import.meta as unknown as { env?: Record<string, string> }).env;\n\t\tif (env?.VITE_API_ENDPOINT) return env.VITE_API_ENDPOINT;\n\t} catch {\n\t\t// Ignore — not a Vite/ESM env.\n\t}\n\treturn \"http://localhost:3000\";\n}\n\n/**\n * Search the knowledge base via central API.\n */\nexport async function searchKnowledgeBase(\n\tprojectId: string,\n\tquery: string,\n\toptions?: KBSearchOptions,\n\tapiEndpoint?: string,\n): Promise<KBSearchResponse> {\n\tconst endpoint = apiEndpoint || getDefaultEndpoint();\n\n\tconst response = await fetch(`${endpoint}/api/kb/search`, {\n\t\tmethod: \"POST\",\n\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\tcredentials: \"include\",\n\t\tbody: JSON.stringify({\n\t\t\tprojectId,\n\t\t\tquery,\n\t\t\ttopK: options?.topK || 5,\n\t\t\tthreshold: options?.threshold || 0.3,\n\t\t\tsectorId: options?.sectorId,\n\t\t}),\n\t});\n\n\tif (!response.ok) {\n\t\tconst error = await response\n\t\t\t.json()\n\t\t\t.catch(() => ({ error: response.statusText }));\n\t\tthrow new Error(\n\t\t\t`KB search failed: ${error.error || response.statusText}`,\n\t\t);\n\t}\n\n\treturn await response.json();\n}\n\nexport interface CustomTool {\n\tid: string;\n\tname: string;\n\tdisplayName: string;\n\tdescription: string;\n\tinputSchema: unknown;\n\ttoolType: string;\n\tisActive: boolean;\n}\n\n/**\n * Get the list of available custom tools.\n */\nexport async function getCustomTools(\n\tprojectId: string,\n\tapiEndpoint?: string,\n): Promise<CustomTool[]> {\n\tconst endpoint = apiEndpoint || getDefaultEndpoint();\n\n\tconst response = await fetch(\n\t\t`${endpoint}/api/kb/tools?projectId=${projectId}`,\n\t\t{ method: \"GET\", credentials: \"include\" },\n\t);\n\n\tif (!response.ok) {\n\t\tthrow new Error(`Failed to get tools: ${response.statusText}`);\n\t}\n\n\tconst data = await response.json();\n\treturn data.tools || [];\n}\n\n/**\n * Execute a custom tool.\n */\nexport async function executeCustomTool(\n\tprojectId: string,\n\ttoolName: string,\n\tinput: unknown,\n\tapiEndpoint?: string,\n): Promise<unknown> {\n\tconst endpoint = apiEndpoint || getDefaultEndpoint();\n\n\tconst response = await fetch(`${endpoint}/api/kb/tools`, {\n\t\tmethod: \"POST\",\n\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\tcredentials: \"include\",\n\t\tbody: JSON.stringify({ projectId, toolName, input }),\n\t});\n\n\tif (!response.ok) {\n\t\tthrow new Error(`Tool execution failed: ${response.statusText}`);\n\t}\n\n\tconst data = await response.json();\n\treturn data.result;\n}\n\n/**\n * Feedback request payload.\n */\nexport interface FeedbackRequest {\n\tprojectId: string;\n\tsessionId?: string;\n\tmessageId?: string;\n\tisPositive: boolean;\n\tissueType?:\n\t\t| \"wrong_answer\"\n\t\t| \"partial_answer\"\n\t\t| \"hallucination\"\n\t\t| \"inappropriate_tone\";\n\tfeedbackText?: string;\n}\n\n/**\n * Submit feedback for a chat response.\n */\nexport async function submitFeedback(\n\trequest: FeedbackRequest,\n\tapiKey?: string,\n\tapiEndpoint?: string,\n): Promise<{ success: boolean; error?: string }> {\n\tconst endpoint = apiEndpoint || getDefaultEndpoint();\n\n\tconst headers: Record<string, string> = {\n\t\t\"Content-Type\": \"application/json\",\n\t};\n\tif (apiKey) {\n\t\theaders[\"Authorization\"] = `Bearer ${apiKey}`;\n\t}\n\n\ttry {\n\t\tconst response = await fetch(`${endpoint}/api/kb/feedback`, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders,\n\t\t\tcredentials: \"include\",\n\t\t\tbody: JSON.stringify(request),\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tconst error = await response\n\t\t\t\t.json()\n\t\t\t\t.catch(() => ({ error: response.statusText }));\n\t\t\treturn { success: false, error: error.error || response.statusText };\n\t\t}\n\n\t\treturn { success: true };\n\t} catch (error) {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: error instanceof Error ? error.message : \"Unknown error\",\n\t\t};\n\t}\n}\n","\"use client\";\n\nimport { useState, type ReactNode } from \"react\";\nimport { Check, Copy, X } from \"lucide-react\";\nimport { Textarea } from \"../ui/textarea\";\nimport { submitFeedback, type FeedbackRequest } from \"../core/api/kb-client\";\nimport type { TrackInteractionParams } from \"../core/analytics/interaction-tracker\";\nimport { useI18n } from \"../hooks/use-i18n\";\nimport { cn } from \"../core/utils\";\n\n// Custom icons\nconst ThumbsUpIcon = ({ className }: { className?: string }) => (\n\t<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n\t\t<path\n\t\t\td=\"M7 11V19C7 19.2652 6.89464 19.5196 6.70711 19.7071C6.51957 19.8946 6.26522 20 6 20H4C3.73478 20 3.48043 19.8946 3.29289 19.7071C3.10536 19.5196 3 19.2652 3 19V12C3 11.7348 3.10536 11.4804 3.29289 11.2929C3.48043 11.1054 3.73478 11 4 11H7ZM7 11C8.06087 11 9.07828 10.5786 9.82843 9.82843C10.5786 9.07828 11 8.06087 11 7V6C11 5.46957 11.2107 4.96086 11.5858 4.58579C11.9609 4.21071 12.4696 4 13 4C13.5304 4 14.0391 4.21071 14.4142 4.58579C14.7893 4.96086 15 5.46957 15 6V11H18C18.5304 11 19.0391 11.2107 19.4142 11.5858C19.7893 11.9609 20 12.4696 20 13L19 18C18.8562 18.6135 18.5834 19.1402 18.2227 19.501C17.8619 19.8617 17.4328 20.0368 17 20H10C9.20435 20 8.44129 19.6839 7.87868 19.1213C7.31607 18.5587 7 17.7956 7 17\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth=\"1.5\"\n\t\t\tstrokeLinecap=\"round\"\n\t\t\tstrokeLinejoin=\"round\"\n\t\t/>\n\t</svg>\n);\n\nconst ThumbsDownIcon = ({ className }: { className?: string }) => (\n\t<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className}>\n\t\t<path\n\t\t\td=\"M7 13V4.99999C7 4.73478 6.89464 4.48042 6.70711 4.29289C6.51957 4.10535 6.26522 3.99999 6 3.99999H4C3.73478 3.99999 3.48043 4.10535 3.29289 4.29289C3.10536 4.48042 3 4.73478 3 4.99999V12C3 12.2652 3.10536 12.5196 3.29289 12.7071C3.48043 12.8946 3.73478 13 4 13H7ZM7 13C8.06087 13 9.07828 13.4214 9.82843 14.1716C10.5786 14.9217 11 15.9391 11 17V18C11 18.5304 11.2107 19.0391 11.5858 19.4142C11.9609 19.7893 12.4696 20 13 20C13.5304 20 14.0391 19.7893 14.4142 19.4142C14.7893 19.0391 15 18.5304 15 18V13H18C18.5304 13 19.0391 12.7893 19.4142 12.4142C19.7893 12.0391 20 11.5304 20 11L19 5.99999C18.8562 5.38652 18.5834 4.85975 18.2227 4.49903C17.8619 4.13831 17.4328 3.96317 17 3.99999H10C9.20435 3.99999 8.44129 4.31606 7.87868 4.87867C7.31607 5.44128 7 6.20434 7 6.99999\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth=\"1.5\"\n\t\t\tstrokeLinecap=\"round\"\n\t\t\tstrokeLinejoin=\"round\"\n\t\t/>\n\t</svg>\n);\n\nconst REVIEW_TYPES = [\n\t{ value: \"wrong_answer\", labelKey: \"wrongAnswer\" as const },\n\t{ value: \"partial_answer\", labelKey: \"partialAnswer\" as const },\n\t{ value: \"hallucination\", labelKey: \"hallucination\" as const },\n\t{ value: \"inappropriate_tone\", labelKey: \"inappropriateTone\" as const },\n] as const;\n\ntype ReviewType = (typeof REVIEW_TYPES)[number][\"value\"];\n\nexport interface FeedbackData {\n\tisPositive: boolean;\n\treviewType?: ReviewType;\n\treviewText?: string;\n}\n\n/**\n * Render-prop state passed to `renderActions`, letting consumers build\n * a fully custom action row while keeping all behaviour (submit, copy,\n * analytics) intact.\n */\nexport interface MessageFeedbackActionsState {\n\t/** Current feedback selection (if any) */\n\tfeedback: \"positive\" | \"negative\" | null;\n\t/** True while a feedback submit is in-flight */\n\tisSubmitting: boolean;\n\t/** True briefly after the copy button is used */\n\tcopied: boolean;\n\t/** Submit positive feedback and fire analytics */\n\tonPositive: () => void;\n\t/** Submit negative feedback — opens the review form */\n\tonNegative: () => void;\n\t/** Copy the assistant's text content to clipboard */\n\tonCopy: () => void;\n}\n\ninterface MessageFeedbackProps {\n\tmessageId: string;\n\tprojectId: string;\n\tsessionId?: string;\n\tapiKey?: string;\n\tapiEndpoint?: string;\n\ttextContent: string;\n\ttrackInteraction?: (params: TrackInteractionParams) => void;\n\t/** Optional className merged onto the root wrapper. */\n\tclassName?: string;\n\t/**\n\t * When true, strip the default Tailwind bubble styling and only render\n\t * the semantic structure. Ideal if you want to style from scratch with\n\t * your own design system.\n\t */\n\tunstyled?: boolean;\n\t/**\n\t * Per-element className overrides. Merged with defaults via `cn()` so\n\t * Tailwind utilities can override (e.g. `bg-red-500`).\n\t */\n\tclassNames?: {\n\t\troot?: string;\n\t\tactions?: string;\n\t\tthumbsUp?: string;\n\t\tthumbsDown?: string;\n\t\tcopy?: string;\n\t\treviewForm?: string;\n\t};\n\t/**\n\t * Full override of the action button row. Receives the submit handlers\n\t * + current state. Return any ReactNode. The built-in review form still\n\t * appears below when the user clicks thumbs-down (unless you handle\n\t * `onNegative` yourself and never trigger it).\n\t *\n\t * @example\n\t * ```tsx\n\t * renderActions={({ onPositive, onNegative, onCopy }) => (\n\t * <div className=\"my-custom-row\">\n\t * <MyButton onClick={onPositive}>👍</MyButton>\n\t * <MyButton onClick={onNegative}>👎</MyButton>\n\t * <MyButton onClick={onCopy}>Copy</MyButton>\n\t * </div>\n\t * )}\n\t * ```\n\t */\n\trenderActions?: (state: MessageFeedbackActionsState) => ReactNode;\n}\n\nexport function MessageFeedback({\n\tmessageId,\n\tprojectId,\n\tsessionId,\n\tapiKey,\n\tapiEndpoint,\n\ttextContent,\n\ttrackInteraction,\n\tclassName,\n\tunstyled = false,\n\tclassNames,\n\trenderActions,\n}: MessageFeedbackProps) {\n\tconst { t } = useI18n();\n\tconst [feedback, setFeedback] = useState<\"positive\" | \"negative\" | null>(null);\n\tconst [showReviewForm, setShowReviewForm] = useState(false);\n\tconst [reviewType, setReviewType] = useState<ReviewType | null>(null);\n\tconst [reviewText, setReviewText] = useState(\"\");\n\tconst [isSubmitting, setIsSubmitting] = useState(false);\n\tconst [copied, setCopied] = useState(false);\n\n\tconst submitFeedbackToApi = async (feedbackData: FeedbackData) => {\n\t\tif (!projectId || !messageId || isSubmitting) return;\n\n\t\tsetIsSubmitting(true);\n\t\ttry {\n\t\t\tconst request: FeedbackRequest = {\n\t\t\t\tprojectId,\n\t\t\t\tsessionId,\n\t\t\t\tmessageId,\n\t\t\t\tisPositive: feedbackData.isPositive,\n\t\t\t\tissueType: feedbackData.reviewType as any,\n\t\t\t\tfeedbackText: feedbackData.reviewText,\n\t\t\t};\n\t\t\tconst result = await submitFeedback(request, apiKey, apiEndpoint);\n\t\t\tif (!result.success) {\n\t\t\t\tconsole.error(\"Failed to submit feedback:\", result.error);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Failed to submit feedback:\", error);\n\t\t} finally {\n\t\t\tsetIsSubmitting(false);\n\t\t}\n\t};\n\n\tconst handlePositiveFeedback = () => {\n\t\tif (isSubmitting) return;\n\t\tsetFeedback(\"positive\");\n\t\tsetShowReviewForm(false);\n\t\tsubmitFeedbackToApi({ isPositive: true });\n\n\t\ttrackInteraction?.({\n\t\t\ttype: \"feedback\",\n\t\t\ttarget: \"thumbs_up\",\n\t\t\tlabel: \"Positive feedback\",\n\t\t\tmessageId,\n\t\t\tmetadata: { isPositive: true },\n\t\t});\n\t};\n\n\tconst handleNegativeFeedback = () => {\n\t\tif (isSubmitting) return;\n\t\tsetFeedback(\"negative\");\n\t\tsetShowReviewForm(true);\n\t};\n\n\tconst handleSubmitReview = () => {\n\t\tif (isSubmitting) return;\n\t\tconst feedbackData: FeedbackData = {\n\t\t\tisPositive: false,\n\t\t\treviewType: reviewType ?? undefined,\n\t\t\treviewText: reviewText || undefined,\n\t\t};\n\t\tsetShowReviewForm(false);\n\t\tsubmitFeedbackToApi(feedbackData);\n\n\t\ttrackInteraction?.({\n\t\t\ttype: \"feedback\",\n\t\t\ttarget: \"thumbs_down\",\n\t\t\tlabel: \"Negative feedback\",\n\t\t\tmessageId,\n\t\t\tmetadata: { isPositive: false, reviewType, reviewText },\n\t\t});\n\t};\n\n\tconst handleCancelReview = () => {\n\t\tsetFeedback(null);\n\t\tsetShowReviewForm(false);\n\t\tsetReviewType(null);\n\t\tsetReviewText(\"\");\n\t};\n\n\tconst handleCopy = async () => {\n\t\tif (typeof window === \"undefined\" || !navigator?.clipboard?.writeText) return;\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(textContent);\n\t\t\tsetCopied(true);\n\t\t\tsetTimeout(() => setCopied(false), 2000);\n\n\t\t\ttrackInteraction?.({\n\t\t\t\ttype: \"copy\",\n\t\t\t\ttarget: \"message\",\n\t\t\t\tlabel: \"Copy response\",\n\t\t\t\tmessageId,\n\t\t\t\tmetadata: { contentLength: textContent.length },\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Failed to copy:\", error);\n\t\t}\n\t};\n\n\tconst actionsState: MessageFeedbackActionsState = {\n\t\tfeedback,\n\t\tisSubmitting,\n\t\tcopied,\n\t\tonPositive: handlePositiveFeedback,\n\t\tonNegative: handleNegativeFeedback,\n\t\tonCopy: handleCopy,\n\t};\n\n\treturn (\n\t\t<div className={cn(unstyled ? \"\" : \"mt-4\", classNames?.root, className)}>\n\t\t\t{/* Action buttons row */}\n\t\t\t{renderActions ? (\n\t\t\t\trenderActions(actionsState)\n\t\t\t) : (\n\t\t\t\t<div className={cn(\"flex items-center gap-2\", classNames?.actions)}>\n\t\t\t\t\t{/* Thumbs Up */}\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={handlePositiveFeedback}\n\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\tunstyled\n\t\t\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t\t\t: cn(\n\t\t\t\t\t\t\t\t\t\t\"group w-8 h-8 rounded-full flex items-center justify-center transition-all duration-300\",\n\t\t\t\t\t\t\t\t\t\tfeedback === \"positive\"\n\t\t\t\t\t\t\t\t\t\t\t? \"bg-primary/10 text-primary\"\n\t\t\t\t\t\t\t\t\t\t\t: \"bg-secondary text-muted-foreground hover:bg-primary/10 hover:text-primary\",\n\t\t\t\t\t\t\t\t\t\tisSubmitting && \"opacity-50 cursor-not-allowed\",\n\t\t\t\t\t\t\t\t ),\n\t\t\t\t\t\t\tclassNames?.thumbsUp,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\ttitle={t(\"helpful\")}\n\t\t\t\t\t\taria-label={t(\"helpful\")}\n\t\t\t\t\t\taria-pressed={feedback === \"positive\"}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ThumbsUpIcon />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t{/* Thumbs Down */}\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={handleNegativeFeedback}\n\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\tunstyled\n\t\t\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t\t\t: cn(\n\t\t\t\t\t\t\t\t\t\t\"group w-8 h-8 rounded-full flex items-center justify-center transition-all duration-300\",\n\t\t\t\t\t\t\t\t\t\tfeedback === \"negative\"\n\t\t\t\t\t\t\t\t\t\t\t? \"bg-red-100 text-red-500\"\n\t\t\t\t\t\t\t\t\t\t\t: \"bg-secondary text-muted-foreground hover:bg-red-50 hover:text-red-500\",\n\t\t\t\t\t\t\t\t\t\tisSubmitting && \"opacity-50 cursor-not-allowed\",\n\t\t\t\t\t\t\t\t ),\n\t\t\t\t\t\t\tclassNames?.thumbsDown,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\ttitle={t(\"notHelpful\")}\n\t\t\t\t\t\taria-label={t(\"notHelpful\")}\n\t\t\t\t\t\taria-pressed={feedback === \"negative\"}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ThumbsDownIcon />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t{/* Copy Button */}\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={handleCopy}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\tunstyled\n\t\t\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t\t\t: \"group w-8 h-8 rounded-full bg-secondary flex items-center justify-center text-muted-foreground hover:bg-primary/10 hover:text-primary transition-all duration-300\",\n\t\t\t\t\t\t\tclassNames?.copy,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\ttitle={t(\"copyResponse\")}\n\t\t\t\t\t\taria-label={t(\"copyResponse\")}\n\t\t\t\t\t>\n\t\t\t\t\t\t{copied ? (\n\t\t\t\t\t\t\t<Check className=\"w-4 h-4 text-green-600\" />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Copy className=\"w-4 h-4\" />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Review Form */}\n\t\t\t{showReviewForm && (\n\t\t\t\t<div className=\"mt-4 bg-gradient-to-br from-accent to-secondary rounded-2xl border border-border overflow-hidden animate-in slide-in-from-top-2 duration-300\">\n\t\t\t\t\t<div className=\"px-5 py-4 border-b border-border flex items-center justify-between\">\n\t\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t<span className=\"w-8 h-8 rounded-xl bg-card border border-border flex items-center justify-center\">\n\t\t\t\t\t\t\t\t<ThumbsDownIcon className=\"text-red-500\" />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span className=\"font-medium text-sm\">{t(\"whatWentWrong\")}</span>\n\t\t\t\t\t\t</div>\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={handleCancelReview}\n\t\t\t\t\t\t\tclassName=\"w-8 h-8 rounded-full bg-card border border-border flex items-center justify-center hover:border-primary transition-colors\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<X className=\"w-4 h-4\" />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"p-5 space-y-4\">\n\t\t\t\t\t\t<div className=\"flex flex-wrap gap-2\">\n\t\t\t\t\t\t\t{REVIEW_TYPES.map((type) => (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tkey={type.value}\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={() => setReviewType(type.value as ReviewType)}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"px-4 py-2 rounded-full text-xs font-medium transition-all duration-300\",\n\t\t\t\t\t\t\t\t\t\treviewType === type.value\n\t\t\t\t\t\t\t\t\t\t\t? \"bg-primary text-primary-foreground shadow-md shadow-primary/20\"\n\t\t\t\t\t\t\t\t\t\t\t: \"bg-card border border-border text-foreground hover:border-primary hover:text-primary\"\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{t(type.labelKey)}\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</div>\n\n\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\tplaceholder={t(\"addDetails\")}\n\t\t\t\t\t\t\tvalue={reviewText}\n\t\t\t\t\t\t\tonChange={(e) => setReviewText(e.target.value)}\n\t\t\t\t\t\t\trows={2}\n\t\t\t\t\t\t\tclassName=\"text-sm resize-none rounded-xl border-border focus:border-primary focus:ring-primary/20\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<div className=\"flex justify-end\">\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={handleSubmitReview}\n\t\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\t\tclassName=\"group relative px-5 py-2.5 bg-primary text-primary-foreground rounded-full text-sm font-medium overflow-hidden transition-all duration-300 hover:shadow-lg hover:shadow-primary/25 disabled:opacity-50 disabled:cursor-not-allowed\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span className=\"relative z-10\">\n\t\t\t\t\t\t\t\t\t{isSubmitting ? t(\"submitting\") : t(\"submitFeedback\")}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName=\"absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity bg-primary/90\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</button>\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)}\n\n\t\t\t<style>{`\n\t\t\t\t.animate-in {\n\t\t\t\t\tanimation: animateIn 0.3s ease-out;\n\t\t\t\t}\n\t\t\t\t.slide-in-from-top-2 {\n\t\t\t\t\t--tw-enter-translate-y: -0.5rem;\n\t\t\t\t}\n\t\t\t\t@keyframes animateIn {\n\t\t\t\t\tfrom {\n\t\t\t\t\t\topacity: 0;\n\t\t\t\t\t\ttransform: translateY(var(--tw-enter-translate-y, 0));\n\t\t\t\t\t}\n\t\t\t\t\tto {\n\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\ttransform: translateY(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t`}</style>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../core/utils\"\nimport { Separator } from \"./separator\"\n\nconst buttonGroupVariants = cva(\n \"flex w-fit items-stretch has-[>[data-slot=button-group]]:gap-2 [&>*]:focus-visible:relative [&>*]:focus-visible:z-10 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1\",\n {\n variants: {\n orientation: {\n horizontal:\n \"[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none\",\n vertical:\n \"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n },\n }\n)\n\nfunction ButtonGroup({\n className,\n orientation,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof buttonGroupVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"button-group\"\n data-orientation={orientation}\n className={cn(buttonGroupVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction ButtonGroupText({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot : \"div\"\n\n return (\n <Comp\n className={cn(\n \"bg-muted shadow-xs flex items-center gap-2 rounded-md border px-4 text-sm font-medium [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ButtonGroupSeparator({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"button-group-separator\"\n orientation={orientation}\n className={cn(\n \"bg-input relative !m-0 self-stretch data-[orientation=vertical]:h-auto\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n ButtonGroup,\n ButtonGroupSeparator,\n ButtonGroupText,\n buttonGroupVariants,\n}\n","\"use client\";\n\nimport { Button } from \"../ui/button\";\nimport {\n ButtonGroup,\n ButtonGroupText,\n} from \"../ui/button-group\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../ui/tooltip\";\nimport { cn } from \"../core/utils\";\nimport type { FileUIPart, UIMessage } from \"ai\";\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n PaperclipIcon,\n XIcon,\n} from \"lucide-react\";\nimport type { ComponentProps, HTMLAttributes, ReactElement } from \"react\";\nimport { createContext, memo, useContext, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Streamdown } from \"streamdown\";\n\nexport type MessageProps = HTMLAttributes<HTMLDivElement> & {\n from: UIMessage[\"role\"];\n fullWidth?: boolean;\n};\n\nexport const Message = ({ className, from, fullWidth, ...props }: MessageProps) => (\n <div\n className={cn(\n \"group flex w-full flex-col gap-2\",\n fullWidth ? \"\" : from === \"assistant\" ? \"max-w-[var(--ac-assistant-max-width,95%)]\" : \"max-w-[95%]\",\n from === \"user\" ? \"is-user justify-end\" : \"is-assistant\",\n className\n )}\n {...props}\n />\n);\n\nexport type MessageContentProps = HTMLAttributes<HTMLDivElement> & {\n fullWidth?: boolean;\n};\n\nexport const MessageContent = ({\n children,\n className,\n fullWidth,\n ...props\n}: MessageContentProps) => (\n <div\n className={cn(\n \"flex min-w-0 flex-col gap-2 overflow-hidden\",\n fullWidth\n ? \"w-full\"\n : \"w-fit max-w-full\",\n \"group-[.is-user]:ml-auto group-[.is-user]:px-6 group-[.is-user]:py-4 group-[.is-user]:text-foreground group-[.is-user]:rounded-bl-[24px] group-[.is-user]:rounded-br-[24px] group-[.is-user]:rounded-tl-[4px] group-[.is-user]:rounded-tr-[24px] group-[.is-user]:bg-[var(--ac-user-bubble-bg,#f0f4f8)]\",\n \"group-[.is-assistant]:text-foreground group-[.is-assistant]:w-full\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n);\n\nexport type MessageActionsProps = ComponentProps<\"div\">;\n\nexport const MessageActions = ({\n className,\n children,\n ...props\n}: MessageActionsProps) => (\n <div className={cn(\"flex items-center gap-1\", className)} {...props}>\n {children}\n </div>\n);\n\nexport type MessageActionProps = ComponentProps<typeof Button> & {\n tooltip?: string;\n label?: string;\n};\n\nexport const MessageAction = ({\n tooltip,\n children,\n label,\n variant = \"ghost\",\n size = \"icon-sm\",\n ...props\n}: MessageActionProps) => {\n const button = (\n <Button size={size} type=\"button\" variant={variant} {...props}>\n {children}\n <span className=\"sr-only\">{label || tooltip}</span>\n </Button>\n );\n\n if (tooltip) {\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent>\n <p>{tooltip}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return button;\n};\n\ntype MessageBranchContextType = {\n currentBranch: number;\n totalBranches: number;\n goToPrevious: () => void;\n goToNext: () => void;\n branches: ReactElement[];\n setBranches: (branches: ReactElement[]) => void;\n};\n\nconst MessageBranchContext = createContext<MessageBranchContextType | null>(\n null\n);\n\nconst useMessageBranch = () => {\n const context = useContext(MessageBranchContext);\n\n if (!context) {\n throw new Error(\n \"MessageBranch components must be used within MessageBranch\"\n );\n }\n\n return context;\n};\n\nexport type MessageBranchProps = HTMLAttributes<HTMLDivElement> & {\n defaultBranch?: number;\n onBranchChange?: (branchIndex: number) => void;\n};\n\nexport const MessageBranch = ({\n defaultBranch = 0,\n onBranchChange,\n className,\n ...props\n}: MessageBranchProps) => {\n const [currentBranch, setCurrentBranch] = useState(defaultBranch);\n const [branches, setBranches] = useState<ReactElement[]>([]);\n\n const handleBranchChange = (newBranch: number) => {\n setCurrentBranch(newBranch);\n onBranchChange?.(newBranch);\n };\n\n const goToPrevious = () => {\n const newBranch =\n currentBranch > 0 ? currentBranch - 1 : branches.length - 1;\n handleBranchChange(newBranch);\n };\n\n const goToNext = () => {\n const newBranch =\n currentBranch < branches.length - 1 ? currentBranch + 1 : 0;\n handleBranchChange(newBranch);\n };\n\n const contextValue: MessageBranchContextType = {\n currentBranch,\n totalBranches: branches.length,\n goToPrevious,\n goToNext,\n branches,\n setBranches,\n };\n\n return (\n <MessageBranchContext.Provider value={contextValue}>\n <div\n className={cn(\"grid w-full gap-2 [&>div]:pb-0\", className)}\n {...props}\n />\n </MessageBranchContext.Provider>\n );\n};\n\nexport type MessageBranchContentProps = HTMLAttributes<HTMLDivElement>;\n\nexport const MessageBranchContent = ({\n children,\n ...props\n}: MessageBranchContentProps) => {\n const { currentBranch, setBranches, branches } = useMessageBranch();\n const childrenArray = Array.isArray(children) ? children : [children];\n\n useEffect(() => {\n if (branches.length !== childrenArray.length) {\n setBranches(childrenArray);\n }\n }, [childrenArray, branches, setBranches]);\n\n return childrenArray.map((branch, index) => (\n <div\n className={cn(\n \"grid gap-2 overflow-hidden [&>div]:pb-0\",\n index === currentBranch ? \"block\" : \"hidden\"\n )}\n key={branch.key}\n {...props}\n >\n {branch}\n </div>\n ));\n};\n\nexport type MessageBranchSelectorProps = HTMLAttributes<HTMLDivElement> & {\n from: UIMessage[\"role\"];\n};\n\nexport const MessageBranchSelector = ({\n className,\n from,\n ...props\n}: MessageBranchSelectorProps) => {\n const { totalBranches } = useMessageBranch();\n\n if (totalBranches <= 1) {\n return null;\n }\n\n return (\n <ButtonGroup\n className=\"[&>*:not(:first-child)]:rounded-l-md [&>*:not(:last-child)]:rounded-r-md\"\n orientation=\"horizontal\"\n {...props}\n />\n );\n};\n\nexport type MessageBranchPreviousProps = ComponentProps<typeof Button>;\n\nexport const MessageBranchPrevious = ({\n children,\n ...props\n}: MessageBranchPreviousProps) => {\n const { goToPrevious, totalBranches } = useMessageBranch();\n\n return (\n <Button\n aria-label=\"Previous branch\"\n disabled={totalBranches <= 1}\n onClick={goToPrevious}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n {...props}\n >\n {children ?? <ChevronLeftIcon size={14} />}\n </Button>\n );\n};\n\nexport type MessageBranchNextProps = ComponentProps<typeof Button>;\n\nexport const MessageBranchNext = ({\n children,\n className,\n ...props\n}: MessageBranchNextProps) => {\n const { goToNext, totalBranches } = useMessageBranch();\n\n return (\n <Button\n aria-label=\"Next branch\"\n disabled={totalBranches <= 1}\n onClick={goToNext}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n {...props}\n >\n {children ?? <ChevronRightIcon size={14} />}\n </Button>\n );\n};\n\nexport type MessageBranchPageProps = HTMLAttributes<HTMLSpanElement>;\n\nexport const MessageBranchPage = ({\n className,\n ...props\n}: MessageBranchPageProps) => {\n const { currentBranch, totalBranches } = useMessageBranch();\n\n return (\n <ButtonGroupText\n className={cn(\n \"border-none bg-transparent text-muted-foreground shadow-none\",\n className\n )}\n {...props}\n >\n {currentBranch + 1} of {totalBranches}\n </ButtonGroupText>\n );\n};\n\nexport type MessageResponseProps = ComponentProps<typeof Streamdown>;\n\n/**\n * Add UTM parameters to a URL\n */\nfunction addUtmParams(url: string): string {\n try {\n const urlObj = new URL(url);\n urlObj.searchParams.set(\"utm_source\", \"chat\");\n urlObj.searchParams.set(\"utm_medium\", \"referral\");\n return urlObj.toString();\n } catch {\n return url;\n }\n}\n\nconst CustomLink = ({ href, children, ...props }: React.AnchorHTMLAttributes<HTMLAnchorElement>) => (\n <a\n href={href ? addUtmParams(href) : href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"hover:underline hover:opacity-80 transition-opacity font-medium\"\n {...props}\n >\n {children}\n </a>\n);\n\nconst CustomImage = ({ src, alt, ...props }: React.ImgHTMLAttributes<HTMLImageElement>) => (\n <img\n src={src}\n alt={alt || \"\"}\n loading=\"lazy\"\n className=\"rounded-xl max-w-full h-auto my-4\"\n {...props}\n />\n);\n\nconst CustomTable = ({ children, ...props }: React.TableHTMLAttributes<HTMLTableElement>) => (\n <div className=\"my-4 overflow-x-auto\">\n <table\n className=\"w-full text-sm rounded-xl border border-black/[0.08] overflow-hidden\"\n {...props}\n >\n {children}\n </table>\n </div>\n);\n\nconst CustomThead = ({ children, ...props }: React.HTMLAttributes<HTMLTableSectionElement>) => (\n <thead className=\"bg-black/[0.04]\" {...props}>\n {children}\n </thead>\n);\n\nconst CustomTh = ({ children, ...props }: React.ThHTMLAttributes<HTMLTableCellElement>) => (\n <th\n className=\"px-4 py-3 text-start text-xs font-medium uppercase tracking-wider opacity-60 border-b border-black/[0.08]\"\n {...props}\n >\n {children}\n </th>\n);\n\nconst CustomTd = ({ children, ...props }: React.TdHTMLAttributes<HTMLTableCellElement>) => (\n <td\n className=\"px-4 py-3 border-b border-black/[0.08]\"\n {...props}\n >\n {children}\n </td>\n);\n\nconst CustomTr = ({ children, ...props }: React.HTMLAttributes<HTMLTableRowElement>) => (\n <tr\n className=\"hover:bg-black/[0.02] transition-colors\"\n {...props}\n >\n {children}\n </tr>\n);\n\nexport const MessageResponse = memo(\n ({ className, ...props }: MessageResponseProps) => (\n <Streamdown\n className={cn(\n \"message-response size-full [&>*:first-child]:mt-0 [&>*:last-child]:mb-0\",\n className\n )}\n components={{\n a: CustomLink,\n img: CustomImage,\n table: CustomTable,\n thead: CustomThead,\n th: CustomTh,\n td: CustomTd,\n tr: CustomTr,\n } as never}\n linkSafety={{ enabled: false }}\n {...props}\n />\n ),\n (prevProps, nextProps) => prevProps.children === nextProps.children\n);\n\nMessageResponse.displayName = \"MessageResponse\";\n\nexport type MessageAttachmentProps = HTMLAttributes<HTMLDivElement> & {\n data: FileUIPart;\n className?: string;\n onRemove?: () => void;\n};\n\n/**\n * A full-size view of one attachment, laid over the chat.\n *\n * Portalled into the component's own root — `getRootNode()` returns the shadow\n * root when the chat is mounted in one — so the overlay is not clipped by the\n * message's `overflow-hidden` tile and is not stranded outside the tree that\n * carries the widget's styles. Positioning and colour are inline rather than\n * utility classes for the same reason: an embedded widget's host page has no\n * obligation to have loaded anything.\n */\nfunction MessageAttachmentLightbox({\n url,\n alt,\n onClose,\n}: {\n url: string;\n alt: string;\n onClose: () => void;\n}) {\n const [container, setContainer] = useState<Element | DocumentFragment | null>(\n null\n );\n const anchorRef = useRef<HTMLSpanElement>(null);\n\n useEffect(() => {\n const root = anchorRef.current?.getRootNode();\n if (!root) return;\n const host =\n root instanceof ShadowRoot ? root : (root as Document).body ?? null;\n if (!host) return;\n const node = document.createElement(\"div\");\n // Marked so the widget's own theme variables resolve inside the overlay.\n node.setAttribute(\"data-aigentyc-chat\", \"\");\n host.appendChild(node);\n setContainer(node);\n return () => {\n node.remove();\n };\n }, []);\n\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", onKey);\n return () => document.removeEventListener(\"keydown\", onKey);\n }, [onClose]);\n\n const overlay = (\n <div\n aria-label={alt}\n aria-modal=\"true\"\n className=\"ac-lightbox\"\n onClick={onClose}\n role=\"dialog\"\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 2147483001,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 24,\n background: \"rgba(8, 12, 16, 0.82)\",\n pointerEvents: \"auto\",\n cursor: \"zoom-out\",\n }}\n >\n <img\n alt={alt}\n // Stops a click on the picture itself from closing what it opened.\n onClick={(e) => e.stopPropagation()}\n src={url}\n style={{\n maxWidth: \"100%\",\n maxHeight: \"100%\",\n objectFit: \"contain\",\n borderRadius: 12,\n boxShadow: \"0 24px 64px rgba(0, 0, 0, 0.45)\",\n cursor: \"default\",\n }}\n />\n <button\n aria-label=\"Close\"\n onClick={onClose}\n style={{\n position: \"absolute\",\n top: 16,\n insetInlineEnd: 16,\n width: 36,\n height: 36,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n border: \"none\",\n borderRadius: \"50%\",\n background: \"rgba(255, 255, 255, 0.14)\",\n color: \"#fff\",\n cursor: \"pointer\",\n }}\n type=\"button\"\n >\n <XIcon size={18} />\n </button>\n </div>\n );\n\n return (\n <>\n {/* Zero-size anchor: the portal needs a node already in the tree to ask\n which root it belongs to. */}\n <span ref={anchorRef} style={{ display: \"none\" }} />\n {container ? createPortal(overlay, container) : null}\n </>\n );\n}\n\nexport function MessageAttachment({\n data,\n className,\n onRemove,\n ...props\n}: MessageAttachmentProps) {\n const [zoomed, setZoomed] = useState(false);\n const filename = data.filename || \"\";\n const mediaType =\n data.mediaType?.startsWith(\"image/\") && data.url ? \"image\" : \"file\";\n const isImage = mediaType === \"image\";\n const attachmentLabel = filename || (isImage ? \"Image\" : \"Attachment\");\n\n return (\n <div\n className={cn(\n \"group relative size-24 overflow-hidden rounded-lg\",\n className\n )}\n {...props}\n >\n {isImage ? (\n <>\n {/* The thumbnail is a crop, so it has to lead somewhere: a picture of a\n cable's printed marking is unreadable at 96px, and the transcript is\n exactly where someone goes back to read it. It opens in place rather\n than in a tab — leaving the panel to look at an image you just sent\n into it is a strange thing to be asked to do. */}\n <button\n aria-label={`View ${attachmentLabel} full size`}\n className=\"block size-full cursor-zoom-in\"\n onClick={() => setZoomed(true)}\n title=\"View full size\"\n type=\"button\"\n >\n <img\n alt={filename || \"attachment\"}\n className=\"size-full object-cover transition-transform duration-200 group-hover:scale-105\"\n height={100}\n src={data.url}\n width={100}\n />\n </button>\n {zoomed && (\n <MessageAttachmentLightbox\n alt={attachmentLabel}\n onClose={() => setZoomed(false)}\n url={data.url}\n />\n )}\n {onRemove && (\n <Button\n aria-label=\"Remove attachment\"\n className=\"absolute top-2 right-2 size-6 rounded-full bg-background/80 p-0 opacity-0 backdrop-blur-sm transition-opacity hover:bg-background group-hover:opacity-100 [&>svg]:size-3\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n type=\"button\"\n variant=\"ghost\"\n >\n <XIcon />\n <span className=\"sr-only\">Remove</span>\n </Button>\n )}\n </>\n ) : (\n <>\n {/* Wrapped in its own provider: `Tooltip` here is Radix's bare Root,\n and the surrounding transcript is not inside one. */}\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"flex size-full shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground\">\n <PaperclipIcon className=\"size-4\" />\n </div>\n </TooltipTrigger>\n <TooltipContent>\n <p>{attachmentLabel}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n {onRemove && (\n <Button\n aria-label=\"Remove attachment\"\n className=\"size-6 shrink-0 rounded-full p-0 opacity-0 transition-opacity hover:bg-accent group-hover:opacity-100 [&>svg]:size-3\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n type=\"button\"\n variant=\"ghost\"\n >\n <XIcon />\n <span className=\"sr-only\">Remove</span>\n </Button>\n )}\n </>\n )}\n </div>\n );\n}\n\nexport type MessageAttachmentsProps = ComponentProps<\"div\">;\n\nexport function MessageAttachments({\n children,\n className,\n ...props\n}: MessageAttachmentsProps) {\n // An empty array is truthy, so a message with no files would otherwise render\n // an empty flex row that still takes up the container's gap.\n const isEmpty =\n !children || (Array.isArray(children) && children.flat().filter(Boolean).length === 0);\n if (isEmpty) {\n return null;\n }\n\n return (\n <div\n className={cn(\n \"ml-auto flex w-fit flex-wrap items-start gap-2\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport type MessageToolbarProps = ComponentProps<\"div\">;\n\nexport const MessageToolbar = ({\n className,\n children,\n ...props\n}: MessageToolbarProps) => (\n <div\n className={cn(\n \"mt-4 flex w-full items-center justify-between gap-4\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n);\n","\"use client\";\n\nimport { cn } from \"../core/utils\";\nimport type { HTMLAttributes } from \"react\";\n\nexport type LoaderProps = HTMLAttributes<HTMLDivElement> & {\n text?: string;\n};\n\nexport const Loader = ({ className, text = \"Thinking...\", ...props }: LoaderProps) => (\n <div\n className={cn(\n \"flex items-center gap-2 w-full py-3\",\n className\n )}\n style={{ color: \"var(--ac-loader-color, var(--ac-primary, #2f80ed))\" }}\n {...props}\n >\n {/* Circular spinner */}\n <svg\n className=\"animate-spin\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"10\"\n cy=\"10\"\n r=\"8\"\n stroke=\"#E5E5E5\"\n strokeWidth=\"2\"\n fill=\"none\"\n />\n <path\n d=\"M10 2C14.4183 2 18 5.58172 18 10\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </svg>\n <span className=\"text-sm text-foreground\">{text}</span>\n </div>\n);\n\n// Spinner loader for other use cases\nexport type SpinnerLoaderProps = HTMLAttributes<HTMLDivElement> & {\n size?: number;\n};\n\nexport const SpinnerLoader = ({ className, size = 16, ...props }: SpinnerLoaderProps) => (\n <div\n className={cn(\n \"inline-flex animate-spin items-center justify-center\",\n className\n )}\n {...props}\n >\n <svg\n height={size}\n strokeLinejoin=\"round\"\n style={{ color: \"currentcolor\" }}\n viewBox=\"0 0 16 16\"\n width={size}\n >\n <title>Loader</title>\n <g clipPath=\"url(#clip0_2393_1490)\">\n <path d=\"M8 0V4\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M8 16V12\" opacity=\"0.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M3.29773 1.52783L5.64887 4.7639\" opacity=\"0.9\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M12.7023 1.52783L10.3511 4.7639\" opacity=\"0.1\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M12.7023 14.472L10.3511 11.236\" opacity=\"0.4\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M3.29773 14.472L5.64887 11.236\" opacity=\"0.6\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M15.6085 5.52783L11.8043 6.7639\" opacity=\"0.2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M0.391602 10.472L4.19583 9.23598\" opacity=\"0.7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M15.6085 10.4722L11.8043 9.2361\" opacity=\"0.3\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M0.391602 5.52783L4.19583 6.7639\" opacity=\"0.8\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2393_1490\">\n <rect fill=\"white\" height=\"16\" width=\"16\" />\n </clipPath>\n </defs>\n </svg>\n </div>\n);\n","\"use client\";\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"../ui/collapsible\";\nimport { cn } from \"../core/utils\";\nimport { BookIcon, ChevronDownIcon } from \"lucide-react\";\nimport type { ComponentProps } from \"react\";\n\nexport type SourcesProps = ComponentProps<\"div\">;\n\nexport const Sources = ({ className, ...props }: SourcesProps) => (\n <Collapsible\n className={cn(\"not-prose mb-4 text-primary text-xs\", className)}\n {...props}\n />\n);\n\nexport type SourcesTriggerProps = ComponentProps<typeof CollapsibleTrigger> & {\n count: number;\n};\n\nexport const SourcesTrigger = ({\n className,\n count,\n children,\n ...props\n}: SourcesTriggerProps) => (\n <CollapsibleTrigger\n className={cn(\"flex items-center gap-2\", className)}\n {...props}\n >\n {children ?? (\n <>\n <p className=\"font-medium\">Used {count} sources</p>\n <ChevronDownIcon className=\"h-4 w-4\" />\n </>\n )}\n </CollapsibleTrigger>\n);\n\nexport type SourcesContentProps = ComponentProps<typeof CollapsibleContent>;\n\nexport const SourcesContent = ({\n className,\n ...props\n}: SourcesContentProps) => (\n <CollapsibleContent\n className={cn(\n \"mt-3 flex w-fit flex-col gap-2\",\n \"data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-top-2 data-[state=open]:slide-in-from-top-2 outline-none data-[state=closed]:animate-out data-[state=open]:animate-in\",\n className\n )}\n {...props}\n />\n);\n\nexport type SourceProps = ComponentProps<\"a\">;\n\nexport const Source = ({ href, title, children, ...props }: SourceProps) => (\n <a\n className=\"flex items-center gap-2\"\n href={href}\n rel=\"noreferrer\"\n target=\"_blank\"\n {...props}\n >\n {children ?? (\n <>\n <BookIcon className=\"h-4 w-4\" />\n <span className=\"block font-medium\">{title}</span>\n </>\n )}\n </a>\n);\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/providers/I18nProvider.tsx"],"names":[],"mappings":"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","file":"chunk-QYCEHFAB.js","sourcesContent":["\"use client\";\n\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n useMemo,\n type ReactNode,\n} from \"react\";\n\n/**\n * All supported translation keys.\n */\nexport type TranslationKeys =\n | \"welcomeTitle\"\n | \"welcomeSubtitle\"\n | \"searchKnowledgeBase\"\n | \"searchingFor\"\n | \"processing\"\n | \"thinking\"\n | \"newConversation\"\n | \"backToStart\"\n | \"closeChat\"\n | \"alwaysVerify\"\n | \"poweredBy\"\n | \"startNewConversation\"\n | \"somethingWentWrong\"\n | \"conversationTooLong\"\n | \"conversationTooLongDesc\"\n | \"somethingWentWrongDesc\"\n | \"typeMessage\"\n | \"send\"\n | \"aboutUs\"\n | \"aboutUsDesc\"\n | \"support\"\n | \"supportDesc\"\n | \"features\"\n | \"featuresDesc\"\n | \"search\"\n | \"searchDesc\"\n | \"greeting\"\n | \"guest\"\n | \"guestDesc\"\n | \"customer\"\n | \"customerDesc\"\n | \"partner\"\n | \"partnerDesc\"\n | \"aboutUsQuery\"\n | \"supportQuery\"\n | \"featuresQuery\"\n | \"searchQuery\"\n | \"whatWentWrong\"\n | \"wrongAnswer\"\n | \"partialAnswer\"\n | \"hallucination\"\n | \"inappropriateTone\"\n | \"addDetails\"\n | \"submitting\"\n | \"submitFeedback\"\n | \"helpful\"\n | \"notHelpful\"\n | \"copyResponse\"\n | \"searchingProducts\"\n | \"searchingProductsFor\"\n | \"sendingVerification\"\n | \"verifyingOrders\"\n | \"generatingLogin\"\n | \"noProductsFound\"\n | \"noOrdersFound\"\n | \"inStock\"\n | \"outOfStock\"\n | \"backorder\"\n | \"sale\"\n | \"addToCart\"\n | \"addedToCart\"\n | \"addToCartError\"\n | \"loginToStore\"\n | \"enterEmail\"\n | \"sendCode\"\n | \"otpSentTo\"\n | \"verifyCode\"\n | \"verifiedSuccess\"\n | \"resendCode\"\n | \"invalidCode\"\n | \"selectVariation\"\n | \"orderStatus_completed\"\n | \"orderStatus_processing\"\n | \"orderStatus_on-hold\"\n | \"orderStatus_pending\"\n | \"orderStatus_cancelled\"\n | \"orderStatus_failed\"\n | \"orderStatus_refunded\"\n | \"cart\"\n | \"yourCart\"\n | \"cartItems\"\n | \"cartEmpty\"\n | \"checkout\"\n | \"cartTotal\"\n | \"removeItem\"\n | \"liveChatConnecting\"\n | \"liveChatPosition\"\n | \"liveChatCancel\"\n | \"liveChatChattingWith\"\n | \"liveChatEndChat\"\n | \"liveChatRateTitle\"\n | \"liveChatRateThank\"\n | \"liveChatBackToAI\"\n | \"liveChatSubmit\"\n | \"liveChatSkip\"\n | \"liveChatFeedbackPlaceholder\"\n | \"liveChatTalkToHuman\"\n | \"liveChatIdentityTitle\"\n | \"liveChatIdentityName\"\n | \"liveChatIdentityEmail\"\n | \"liveChatIdentityConnect\"\n | \"liveChatIdentityContinue\"\n | \"liveChatRateExperience\"\n | \"liveChatEnded\";\n\n/** A complete set of translations for a language. */\nexport type TranslationMap = Record<TranslationKeys, string>;\n\n/** Built-in English translations. */\nconst en: TranslationMap = {\n welcomeTitle: \"Welcome to {clientName}\",\n welcomeSubtitle: \"How can I assist you today? Select a topic or type your message below.\",\n searchKnowledgeBase: \"Searching knowledge base...\",\n searchingFor: 'Searching for \"{query}\"...',\n processing: \"Processing...\",\n thinking: \"Thinking...\",\n newConversation: \"New conversation\",\n backToStart: \"Back to start\",\n closeChat: \"Close chat\",\n alwaysVerify: \"Always verify AI responses\",\n poweredBy: \"powered by\",\n startNewConversation: \"Start New Conversation\",\n somethingWentWrong: \"Something Went Wrong\",\n conversationTooLong: \"Conversation Too Long\",\n conversationTooLongDesc: \"The conversation has become too long to continue.\",\n somethingWentWrongDesc: \"We encountered an issue. Please try again or start fresh.\",\n typeMessage: \"Type a message...\",\n send: \"Send\",\n aboutUs: \"About Us\",\n aboutUsDesc: \"Learn more about our services\",\n support: \"Support\",\n supportDesc: \"Get help with your questions\",\n features: \"Features\",\n featuresDesc: \"Discover what we can do\",\n search: \"Search\",\n searchDesc: \"Find specific information\",\n greeting: \"Hi there 👋 How can I help you today?\",\n guest: \"Guest\",\n guestDesc: \"Just browsing\",\n customer: \"Customer\",\n customerDesc: \"Existing customer with questions\",\n partner: \"Partner\",\n partnerDesc: \"Business partner or professional\",\n aboutUsQuery: \"Tell me about About Us\",\n supportQuery: \"Tell me about Support\",\n featuresQuery: \"Tell me about Features\",\n searchQuery: \"Tell me about Search\",\n whatWentWrong: \"What went wrong?\",\n wrongAnswer: \"Wrong answer\",\n partialAnswer: \"Partial answer\",\n hallucination: \"Hallucination\",\n inappropriateTone: \"Inappropriate tone\",\n addDetails: \"Add details (optional)...\",\n submitting: \"Submitting...\",\n submitFeedback: \"Submit Feedback\",\n helpful: \"Helpful\",\n notHelpful: \"Not helpful\",\n copyResponse: \"Copy response\",\n searchingProducts: \"Searching products...\",\n searchingProductsFor: 'Searching products: \"{query}\"...',\n sendingVerification: \"Sending verification code...\",\n verifyingOrders: \"Verifying and fetching orders...\",\n generatingLogin: \"Generating login link...\",\n noProductsFound: \"No products found\",\n noOrdersFound: \"No orders found\",\n inStock: \"In stock\",\n outOfStock: \"Out of stock\",\n backorder: \"Backorder\",\n sale: \"Sale\",\n addToCart: \"Add to Cart\",\n addedToCart: \"Added to cart!\",\n addToCartError: \"Failed to add to cart\",\n loginToStore: \"Login to Store\",\n enterEmail: \"Enter your email to verify\",\n sendCode: \"Send verification code\",\n otpSentTo: \"Verification code sent to {email}\",\n verifyCode: \"Verify\",\n verifiedSuccess: \"Verified successfully!\",\n resendCode: \"Resend code\",\n invalidCode: \"Invalid code, please try again\",\n selectVariation: \"Select\",\n orderStatus_completed: \"Completed\",\n orderStatus_processing: \"Processing\",\n \"orderStatus_on-hold\": \"On Hold\",\n orderStatus_pending: \"Pending\",\n orderStatus_cancelled: \"Cancelled\",\n orderStatus_failed: \"Failed\",\n orderStatus_refunded: \"Refunded\",\n cart: \"Cart\",\n yourCart: \"Your Cart\",\n cartItems: \"{count} items\",\n cartEmpty: \"Your cart is empty\",\n checkout: \"Checkout\",\n cartTotal: \"Total\",\n removeItem: \"Remove\",\n liveChatConnecting: \"Connecting you with an operator...\",\n liveChatPosition: \"Position #{position}\",\n liveChatCancel: \"Cancel\",\n liveChatChattingWith: \"Chatting with {name}\",\n liveChatEndChat: \"End Chat\",\n liveChatRateTitle: \"How was your experience?\",\n liveChatRateThank: \"Thank you for your feedback!\",\n liveChatBackToAI: \"Back to AI Assistant\",\n liveChatSubmit: \"Submit\",\n liveChatSkip: \"Skip\",\n liveChatFeedbackPlaceholder: \"Any additional feedback? (optional)\",\n liveChatTalkToHuman: \"Talk to an operator\",\n liveChatIdentityTitle: \"Please provide your details to connect with an operator\",\n liveChatIdentityName: \"Your name\",\n liveChatIdentityEmail: \"Your email\",\n liveChatIdentityConnect: \"Connect\",\n liveChatIdentityContinue: \"Continue\",\n liveChatRateExperience: \"Rate your experience\",\n liveChatEnded: \"Chat ended\",\n};\n\n/** Built-in Hebrew translations. */\nconst he: TranslationMap = {\n welcomeTitle: \"ברוכים הבאים ל-{clientName}\",\n welcomeSubtitle: \"איך אוכל לעזור היום? בחרו נושא או הקלידו הודעה למטה.\",\n searchKnowledgeBase: \"מחפש במאגר הידע...\",\n searchingFor: 'מחפש את \"{query}\"...',\n processing: \"מעבד...\",\n thinking: \"חושב...\",\n newConversation: \"שיחה חדשה\",\n backToStart: \"חזרה להתחלה\",\n closeChat: \"סגור צ'אט\",\n alwaysVerify: \"תמיד כדאי לוודא את תשובות ה-AI\",\n poweredBy: \"מופעל על ידי\",\n startNewConversation: \"התחל שיחה חדשה\",\n somethingWentWrong: \"משהו השתבש\",\n conversationTooLong: \"השיחה ארוכה מדי\",\n conversationTooLongDesc: \"השיחה הפכה לארוכה מדי בשביל להמשיך.\",\n somethingWentWrongDesc: \"נתקלנו בבעיה. אנא נסו שוב או התחילו מחדש.\",\n typeMessage: \"הקלד הודעה...\",\n send: \"שלח\",\n aboutUs: \"אודותינו\",\n aboutUsDesc: \"למדו עוד על השירותים שלנו\",\n support: \"תמיכה\",\n supportDesc: \"קבלו עזרה עם השאלות שלכם\",\n features: \"פיצ'רים\",\n featuresDesc: \"גלו מה אנחנו יכולים לעשות\",\n search: \"חיפוש\",\n searchDesc: \"מצאו מידע ספציפי\",\n greeting: \"שלום 👋 איך אוכל לעזור לכם היום?\",\n guest: \"אורח\",\n guestDesc: \"רק גולש\",\n customer: \"לקוח\",\n customerDesc: \"לקוח קיים עם שאלות\",\n partner: \"שותף\",\n partnerDesc: \"שותף עסקי או איש מקצוע\",\n aboutUsQuery: \"ספר לי על אודותינו\",\n supportQuery: \"ספר לי על תמיכה\",\n featuresQuery: \"ספר לי על פיצ'רים\",\n searchQuery: \"ספר לי על חיפוש\",\n whatWentWrong: \"מה השתבש?\",\n wrongAnswer: \"תשובה לא נכונה\",\n partialAnswer: \"תשובה חלקית\",\n hallucination: \"הזיה (מידע מומצא)\",\n inappropriateTone: \"טון לא הולם\",\n addDetails: \"הוסיפו פרטים (אופציונלי)...\",\n submitting: \"שולח...\",\n submitFeedback: \"שלח משוב\",\n helpful: \"עוזר\",\n notHelpful: \"לא עוזר\",\n copyResponse: \"העתק תשובה\",\n searchingProducts: \"מחפש מוצרים...\",\n searchingProductsFor: 'מחפש מוצרים: \"{query}\"...',\n sendingVerification: \"שולח קוד אימות...\",\n verifyingOrders: \"מאמת ומביא הזמנות...\",\n generatingLogin: \"מייצר קישור התחברות...\",\n noProductsFound: \"לא נמצאו מוצרים\",\n noOrdersFound: \"לא נמצאו הזמנות\",\n inStock: \"במלאי\",\n outOfStock: \"אזל מהמלאי\",\n backorder: \"בהזמנה מראש\",\n sale: \"מבצע\",\n addToCart: \"הוסף לסל\",\n addedToCart: \"נוסף לסל!\",\n addToCartError: \"שגיאה בהוספה לסל\",\n loginToStore: \"התחבר לחנות\",\n enterEmail: \"הזינו אימייל לאימות\",\n sendCode: \"שלח קוד אימות\",\n otpSentTo: \"קוד אימות נשלח ל-{email}\",\n verifyCode: \"אמת\",\n verifiedSuccess: \"אומת בהצלחה!\",\n resendCode: \"שלח שוב\",\n invalidCode: \"קוד שגוי, נסו שוב\",\n selectVariation: \"בחר\",\n orderStatus_completed: \"הושלמה\",\n orderStatus_processing: \"בטיפול\",\n \"orderStatus_on-hold\": \"בהמתנה\",\n orderStatus_pending: \"ממתינה\",\n orderStatus_cancelled: \"בוטלה\",\n orderStatus_failed: \"נכשלה\",\n orderStatus_refunded: \"הוחזרה\",\n cart: \"סל\",\n yourCart: \"הסל שלך\",\n cartItems: \"{count} פריטים\",\n cartEmpty: \"הסל ריק\",\n checkout: \"לתשלום\",\n cartTotal: \"סה״כ\",\n removeItem: \"הסר\",\n liveChatConnecting: \"מחבר אותך לנציג...\",\n liveChatPosition: \"מיקום #{position}\",\n liveChatCancel: \"ביטול\",\n liveChatChattingWith: \"משוחח עם {name}\",\n liveChatEndChat: \"סיום שיחה\",\n liveChatRateTitle: \"איך היה השירות?\",\n liveChatRateThank: \"תודה על המשוב!\",\n liveChatBackToAI: \"חזרה לעוזר AI\",\n liveChatSubmit: \"שלח\",\n liveChatSkip: \"דלג\",\n liveChatFeedbackPlaceholder: \"משוב נוסף (אופציונלי)...\",\n liveChatTalkToHuman: \"דבר עם נציג\",\n liveChatIdentityTitle: \"אנא מלא/י את הפרטים כדי להתחבר לנציג\",\n liveChatIdentityName: \"שם\",\n liveChatIdentityEmail: \"אימייל\",\n liveChatIdentityConnect: \"התחבר\",\n liveChatIdentityContinue: \"המשך\",\n liveChatRateExperience: \"דרגו את החוויה שלכם\",\n liveChatEnded: \"השיחה הסתיימה\",\n};\n\n/** Built-in translation registry. */\nconst builtInTranslations: Record<string, TranslationMap> = { en, he };\n\n/** Registry for dynamically added languages. */\nconst customTranslations: Record<string, TranslationMap> = {};\n\n/**\n * Register a new language at runtime. Merges with any existing translations.\n *\n * @param code - Language code (e.g. \"fr\", \"es\")\n * @param translations - Full or partial translation map\n */\nexport function addLanguage(\n code: string,\n translations: Partial<TranslationMap>\n): void {\n const base = customTranslations[code] || builtInTranslations[code] || en;\n customTranslations[code] = { ...base, ...translations };\n}\n\n/** Resolve a translation string for the given language and key. */\nfunction resolve(\n language: string,\n key: TranslationKeys,\n overrides?: Partial<TranslationMap>,\n params?: Record<string, string>\n): string {\n // Priority: overrides > custom > built-in > fallback to English\n let text =\n overrides?.[key] ||\n customTranslations[language]?.[key] ||\n builtInTranslations[language]?.[key] ||\n builtInTranslations[\"en\"][key] ||\n key;\n\n if (params) {\n Object.entries(params).forEach(([k, v]) => {\n text = text.replace(`{${k}}`, v);\n });\n }\n return text;\n}\n\n/** RTL language codes. */\nconst RTL_LANGUAGES = new Set([\"he\", \"ar\", \"fa\", \"ur\"]);\n\n/** Returns true if the given language code is RTL. */\nexport function isRTL(language: string): boolean {\n return RTL_LANGUAGES.has(language);\n}\n\ninterface I18nContextValue {\n /** Translate a key, with optional interpolation params. */\n t: (key: TranslationKeys, params?: Record<string, string>) => string;\n /** Current language code. */\n language: string;\n /** Change the active language at runtime. */\n setLanguage: (lang: string) => void;\n /** Current text direction. */\n direction: \"ltr\" | \"rtl\";\n}\n\nconst I18nContext = createContext<I18nContextValue | null>(null);\n\n/** Props for the I18nProvider component. */\nexport interface I18nProviderProps {\n /** Active language code. Defaults to \"en\". */\n language?: string;\n /** Per-key translation overrides applied on top of built-in strings. */\n translations?: Partial<TranslationMap>;\n children: ReactNode;\n}\n\n/**\n * Provides i18n context to descendant components.\n * Supports built-in \"en\" and \"he\", dynamic languages via `addLanguage()`,\n * and per-instance overrides via the `translations` prop.\n */\nexport function I18nProvider({\n language: initialLanguage = \"en\",\n translations: overrides,\n children,\n}: I18nProviderProps) {\n const [language, setLanguage] = useState(initialLanguage);\n\n const t = useCallback(\n (key: TranslationKeys, params?: Record<string, string>) =>\n resolve(language, key, overrides, params),\n [language, overrides]\n );\n\n const direction = isRTL(language) ? \"rtl\" : \"ltr\";\n\n const value = useMemo<I18nContextValue>(\n () => ({ t, language, setLanguage, direction }),\n [t, language, direction]\n );\n\n return <I18nContext.Provider value={value}>{children}</I18nContext.Provider>;\n}\n\n/**\n * Returns the i18n context: `t()` translation function, current language, and `setLanguage`.\n * Must be used within an `I18nProvider`.\n */\nexport function useI18n(): I18nContextValue {\n const ctx = useContext(I18nContext);\n if (!ctx) {\n throw new Error(\"useI18n must be used within an I18nProvider\");\n }\n return ctx;\n}\n"]}
|