{"version":3,"file":"AudioToCode-CJm_3BF6.js","sources":["../../components/features/AudioToCode.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback } from 'react';\nimport { transcribeAudioToCode } from '../../services/geminiService.ts';\nimport { CpuChipIcon } from '../icons/FeatureIcons.tsx';\nimport { LoadingSpinner } from './shared/LoadingSpinner.tsx';\nimport { marked } from 'marked';\nimport { blobToBase64 } from '../../services/fileUtils.ts';\n\nexport const AudioToCode: React.FC = () => {\n const [isRecording, setIsRecording] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [code, setCode] = useState('');\n const [error, setError] = useState('');\n const mediaRecorderRef = useRef(null);\n const audioChunksRef = useRef([]);\n\n const handleStartRecording = async () => {\n setError('');\n setCode('');\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n mediaRecorderRef.current = new MediaRecorder(stream);\n mediaRecorderRef.current.ondataavailable = event => {\n audioChunksRef.current.push(event.data);\n };\n mediaRecorderRef.current.onstop = handleTranscribe;\n mediaRecorderRef.current.start();\n setIsRecording(true);\n } catch (err) {\n setError('Microphone access was denied. Please enable it in your browser settings.');\n }\n };\n\n const handleStopRecording = () => {\n mediaRecorderRef.current?.stop();\n setIsRecording(false);\n setIsLoading(true);\n };\n\n const handleTranscribe = async () => {\n const audioBlob = new Blob(audioChunksRef.current, { type: 'audio/webm' });\n audioChunksRef.current = [];\n try {\n const base64Audio = await blobToBase64(audioBlob);\n const result = await transcribeAudioToCode(base64Audio, 'audio/webm');\n setCode(result);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'An unknown error occurred.';\n setError(`Failed to transcribe audio: ${errorMessage}`);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n
\n
\n

\n \n AI Audio-to-Code\n

\n

Speak your programming ideas and watch them turn into code.

\n
\n
\n
\n \n {isRecording ? 'Stop' : 'Record'}\n \n

\n {isRecording ? 'Recording in progress...' : 'Click to start recording'}\n

\n {error &&

{error}

}\n
\n
\n \n
\n {isLoading && (\n
\n )}\n {code && !isLoading && (\n \n )}\n {!isLoading && !code && !error && (\n
Code will appear here.
\n )}\n
\n
\n
\n
\n );\n};"],"names":["AudioToCode","isRecording","setIsRecording","useState","isLoading","setIsLoading","code","setCode","error","setError","mediaRecorderRef","useRef","audioChunksRef","handleStartRecording","stream","event","handleTranscribe","handleStopRecording","_a","audioBlob","base64Audio","blobToBase64","result","transcribeAudioToCode","err","errorMessage","jsxs","jsx","CpuChipIcon","LoadingSpinner","marked"],"mappings":"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"}