{"version":3,"file":"AiCodeExplainer-6kcSUCD1.js","sources":["../../components/features/AiCodeExplainer.tsx"],"sourcesContent":["import React, { useState, useCallback, useEffect, useMemo, useRef } from 'react';\nimport { explainCodeStructured } from '../../services/index.ts';\nimport type { StructuredExplanation } from '../../types.ts';\nimport { CpuChipIcon } from '../icons.tsx';\nimport { MarkdownRenderer, LoadingSpinner } from '../shared/index.tsx';\n\nconst exampleCode = `const bubbleSort = (arr) => {\n for (let i = 0; i < arr.length; i++) {\n for (let j = 0; j < arr.length - i - 1; j++) {\n if (arr[j] > arr[j + 1]) {\n [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];\n }\n }\n }\n return arr;\n};`;\n\ntype ExplanationTab = 'summary' | 'lineByLine' | 'complexity' | 'suggestions';\n\nconst simpleSyntaxHighlight = (code: string) => {\n const escapedCode = code\n .replace(/&/g, '&')\n .replace(//g, '>');\n\n return escapedCode\n .replace(/\\b(const|let|var|function|return|if|for|=>|import|from|export|default)\\b/g, '$1')\n .replace(/(\\`|'|\")(.*?)(\\`|'|\")/g, '$1$2$3')\n .replace(/(\\/\\/.*)/g, '$1')\n .replace(/(\\{|\\}|\\(|\\)|\\[|\\])/g, '$1');\n};\n\nexport const AiCodeExplainer: React.FC<{ initialCode?: string }> = ({ initialCode }) => {\n const [code, setCode] = useState(initialCode || exampleCode);\n const [explanation, setExplanation] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState('');\n const [activeTab, setActiveTab] = useState('summary');\n const textareaRef = useRef(null);\n const preRef = useRef(null);\n\n const handleExplain = useCallback(async (codeToExplain: string) => {\n if (!codeToExplain.trim()) {\n setError('Please enter some code to explain.');\n return;\n }\n setIsLoading(true);\n setError('');\n setExplanation(null);\n setActiveTab('summary');\n try {\n const result = await explainCodeStructured(codeToExplain);\n setExplanation(result);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'An unknown error occurred.';\n setError(`Failed to get explanation: ${errorMessage}`);\n } finally {\n setIsLoading(false);\n }\n }, []);\n \n useEffect(() => {\n if (initialCode) {\n setCode(initialCode);\n handleExplain(initialCode);\n }\n }, [initialCode, handleExplain]);\n\n const handleScroll = () => {\n if (preRef.current && textareaRef.current) {\n preRef.current.scrollTop = textareaRef.current.scrollTop;\n preRef.current.scrollLeft = textareaRef.current.scrollLeft;\n }\n };\n\n const highlightedCode = useMemo(() => simpleSyntaxHighlight(code), [code]);\n\n const renderTabContent = () => {\n if (!explanation) return null;\n switch(activeTab) {\n case 'summary':\n return ;\n case 'lineByLine':\n return (\n
\n {explanation.lineByLine.map((item, index) => (\n
\n

Lines: {item.lines}

\n

{item.explanation}

\n
\n ))}\n
\n );\n case 'complexity':\n return (\n
\n

Time Complexity: {explanation.complexity.time}

\n

Space Complexity: {explanation.complexity.space}

\n
\n );\n case 'suggestions':\n return (\n
    \n {explanation.suggestions.map((item, index) =>
  • {item}
  • )}\n
\n );\n }\n }\n\n return (\n
\n
\n

\n \n AI Code Explainer\n

\n

Get a detailed, structured analysis of any code snippet.

\n
\n
\n \n {/* Left Column: Code Input */}\n
\n \n
\n setCode(e.target.value)}\n onScroll={handleScroll}\n placeholder=\"Paste your code here...\"\n spellCheck=\"false\"\n className=\"absolute inset-0 w-full h-full p-4 bg-transparent resize-none font-mono text-sm text-transparent caret-primary outline-none z-10\"\n />\n
\n                    
\n
\n handleExplain(code)}\n disabled={isLoading}\n className=\"btn-primary w-full flex items-center justify-center px-6 py-3\"\n >\n {isLoading ? : 'Analyze Code'}\n \n
\n
\n\n {/* Right Column: AI Analysis */}\n
\n \n
\n
\n {(['summary', 'lineByLine', 'complexity', 'suggestions'] as ExplanationTab[]).map(tab => (\n \n ))}\n
\n
\n {isLoading &&
}\n {error &&

{error}

}\n {explanation && !isLoading && renderTabContent()}\n {!isLoading && !explanation && !error &&
The analysis will appear here.
}\n
\n
\n
\n
\n
\n );\n};"],"names":["exampleCode","simpleSyntaxHighlight","code","AiCodeExplainer","initialCode","setCode","useState","explanation","setExplanation","isLoading","setIsLoading","error","setError","activeTab","setActiveTab","textareaRef","useRef","preRef","handleExplain","useCallback","codeToExplain","result","explainCodeStructured","err","errorMessage","useEffect","handleScroll","highlightedCode","useMemo","renderTabContent","jsx","MarkdownRenderer","item","index","jsxs","CpuChipIcon","e","LoadingSpinner","tab"],"mappings":"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"}