{"version":3,"file":"AiCodeExplainer-DGin5jQC.js","sources":["../../components/features/AiCodeExplainer.tsx"],"sourcesContent":["import React, { useState, useCallback, useEffect, useMemo, useRef } from 'react';\nimport mermaid from 'mermaid';\nimport { explainCodeStructured, generateMermaidJs } from '../../services/index.ts';\nimport type { StructuredExplanation } from '../../types.ts';\nimport { useTheme } from '../../hooks/useTheme.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' | 'flowchart';\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\nmermaid.initialize({ startOnLoad: false, securityLevel: 'loose' });\n\nexport const AiCodeExplainer: React.FC<{ initialCode?: string }> = ({ initialCode }) => {\n const [code, setCode] = useState(initialCode || exampleCode);\n const [explanation, setExplanation] = useState(null);\n const [mermaidCode, setMermaidCode] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState('');\n const [activeTab, setActiveTab] = useState('summary');\n const [themeState] = useTheme();\n const textareaRef = useRef(null);\n const preRef = useRef(null);\n const mermaidContainerRef = 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 setMermaidCode('');\n setActiveTab('summary');\n try {\n const [explanationResult, mermaidResult] = await Promise.all([\n explainCodeStructured(codeToExplain),\n generateMermaidJs(codeToExplain)\n ]);\n setExplanation(explanationResult);\n setMermaidCode(mermaidResult.replace(/```mermaid\\n|```/g, ''));\n\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 useEffect(() => {\n const renderMermaid = async () => {\n if (activeTab === 'flowchart' && mermaidCode && mermaidContainerRef.current) {\n try {\n mermaid.initialize({ startOnLoad: false, theme: themeState.mode === 'dark' ? 'dark' : 'neutral', securityLevel: 'loose' });\n mermaidContainerRef.current.innerHTML = ''; // Clear previous\n const { svg } = await mermaid.render(`mermaid-graph-${Date.now()}`, mermaidCode);\n mermaidContainerRef.current.innerHTML = svg;\n } catch (e) {\n console.error(\"Mermaid rendering error:\", e);\n mermaidContainerRef.current.innerHTML = `

Error rendering flowchart.

`;\n }\n }\n }\n renderMermaid();\n }, [activeTab, mermaidCode, themeState.mode]);\n\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 case 'flowchart':\n return (\n
\n \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', 'flowchart'] 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","mermaid","AiCodeExplainer","initialCode","setCode","useState","explanation","setExplanation","mermaidCode","setMermaidCode","isLoading","setIsLoading","error","setError","activeTab","setActiveTab","themeState","useTheme","textareaRef","useRef","preRef","mermaidContainerRef","handleExplain","useCallback","codeToExplain","explanationResult","mermaidResult","explainCodeStructured","generateMermaidJs","err","errorMessage","useEffect","svg","e","handleScroll","highlightedCode","useMemo","renderTabContent","jsx","MarkdownRenderer","item","index","jsxs","LoadingSpinner","CpuChipIcon","tab"],"mappings":"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"}