{"ast":null,"code":"var _jsxFileName = \"D:\\\\Project\\\\UC_Trains_Voice\\\\react-demo\\\\src\\\\gavt\\\\GavtCali.tsx\",\n  _s = $RefreshSig$();\nimport React, { useState } from 'react';\nimport { Divider, Steps, Breadcrumb, Button, message } from 'antd';\nimport { AudioOutlined } from '@ant-design/icons';\nimport { Link } from 'react-router-dom';\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst stepsTitles = ['Instruction', 'Before You Start', 'Record Your Voice', 'Complete'];\nconst stepsDescriptions = [`This module will record your production of different vowel sounds so we can provide resonance targets customized to your voice...`, `To measure your resonance for a vowel, we want you to sustain JUST the vowel sound for about two seconds...`, 'Follow the steps to record your voice.', 'Review and complete the calibration.'];\nconst recordingSteps = [{\n  title: '“ee” like in “seed”',\n  description: 'Click “start” and pronounce the vowel for 2 seconds, then click “stop”.'\n}, {\n  title: '“ih” like in “hid”',\n  description: 'Click “start” and pronounce the vowel for 2 seconds, then click “stop”.'\n}, {\n  title: '“eh” like in “head”',\n  description: 'Click “start” and pronounce the vowel for 2 seconds, then click “stop”.'\n}];\nconst GavtCali = () => {\n  _s();\n  const [currentStep, setCurrentStep] = useState(0);\n  const [currentRecordingStep, setCurrentRecordingStep] = useState(0);\n  const [recordings, setRecordings] = useState({});\n  const [isRecording, setIsRecording] = useState(false);\n  const handleRecordAudio = action => {\n    setIsRecording(action === 'start');\n    message.info(action === 'start' ? 'Recording started!' : 'Recording stopped!');\n    if (action === 'stop') {\n      const audioUrl = 'path_to_generated_audio'; // Placeholder\n      setRecordings({\n        ...recordings,\n        [recordingSteps[currentRecordingStep].title]: audioUrl\n      });\n    }\n  };\n  const handlePlayback = audioUrl => {\n    let audio = new Audio(audioUrl);\n    audio.play();\n  };\n  const renderRecordingButton = () => /*#__PURE__*/_jsxDEV(Button, {\n    icon: /*#__PURE__*/_jsxDEV(AudioOutlined, {}, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 51,\n      columnNumber: 13\n    }, this),\n    onClick: () => handleRecordAudio(isRecording ? 'stop' : 'start'),\n    type: isRecording ? \"default\" : \"primary\",\n    children: isRecording ? 'Stop Recording' : 'Start Recording'\n  }, void 0, false, {\n    fileName: _jsxFileName,\n    lineNumber: 50,\n    columnNumber: 5\n  }, this);\n  const renderStepContent = step => {\n    switch (step) {\n      case 2:\n        return /*#__PURE__*/_jsxDEV(\"div\", {\n          children: [/*#__PURE__*/_jsxDEV(\"p\", {\n            children: recordingSteps[currentRecordingStep].description\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 64,\n            columnNumber: 13\n          }, this), renderRecordingButton(), /*#__PURE__*/_jsxDEV(Steps, {\n            progressDot: true,\n            current: currentRecordingStep,\n            direction: \"vertical\",\n            items: recordingSteps.map(rs => ({\n              title: rs.title,\n              description: rs.description\n            }))\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 66,\n            columnNumber: 13\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 63,\n          columnNumber: 11\n        }, this);\n      default:\n        return /*#__PURE__*/_jsxDEV(\"p\", {\n          children: stepsDescriptions[step]\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 70,\n          columnNumber: 16\n        }, this);\n    }\n  };\n  return /*#__PURE__*/_jsxDEV(\"div\", {\n    style: {\n      display: 'flex',\n      flexDirection: 'column',\n      alignItems: 'center',\n      marginTop: '20px',\n      width: '80%'\n    },\n    children: [/*#__PURE__*/_jsxDEV(Breadcrumb, {\n      style: {\n        marginBottom: '20px',\n        alignSelf: 'start'\n      },\n      children: [/*#__PURE__*/_jsxDEV(Breadcrumb.Item, {\n        children: /*#__PURE__*/_jsxDEV(Link, {\n          to: \"/gavt\",\n          children: \"Gavt Home\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 77,\n          columnNumber: 26\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 77,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(Breadcrumb.Item, {\n        children: \"Calibration\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 78,\n        columnNumber: 9\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 76,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(Steps, {\n      progressDot: true,\n      current: currentStep,\n      items: stepsTitles.map(title => ({\n        title\n      }))\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 80,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(Divider, {}, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 81,\n      columnNumber: 7\n    }, this), renderStepContent(currentStep), /*#__PURE__*/_jsxDEV(\"div\", {\n      style: {\n        marginTop: '20px'\n      },\n      children: [/*#__PURE__*/_jsxDEV(Button, {\n        disabled: currentStep === 0,\n        onClick: () => setCurrentStep(currentStep - 1),\n        children: \"Previous\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 84,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(Button, {\n        type: \"primary\",\n        onClick: () => setCurrentStep(currentStep + 1),\n        disabled: currentStep === stepsTitles.length - 1,\n        children: currentStep === stepsTitles.length - 1 ? 'Finish' : 'Next'\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 85,\n        columnNumber: 9\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 83,\n      columnNumber: 7\n    }, this)]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 75,\n    columnNumber: 5\n  }, this);\n};\n_s(GavtCali, \"ndPzSeuUO+y39xV9rojVl/rpHIs=\");\n_c = GavtCali;\nexport default GavtCali;\nvar _c;\n$RefreshReg$(_c, \"GavtCali\");","map":{"version":3,"names":["React","useState","Divider","Steps","Breadcrumb","Button","message","AudioOutlined","Link","jsxDEV","_jsxDEV","stepsTitles","stepsDescriptions","recordingSteps","title","description","GavtCali","_s","currentStep","setCurrentStep","currentRecordingStep","setCurrentRecordingStep","recordings","setRecordings","isRecording","setIsRecording","handleRecordAudio","action","info","audioUrl","handlePlayback","audio","Audio","play","renderRecordingButton","icon","fileName","_jsxFileName","lineNumber","columnNumber","onClick","type","children","renderStepContent","step","progressDot","current","direction","items","map","rs","style","display","flexDirection","alignItems","marginTop","width","marginBottom","alignSelf","Item","to","disabled","length","_c","$RefreshReg$"],"sources":["D:/Project/UC_Trains_Voice/react-demo/src/gavt/GavtCali.tsx"],"sourcesContent":["import React, { useState } from 'react';\r\nimport { Divider, Steps, Breadcrumb, Button, message, Card } from 'antd';\r\nimport { AudioOutlined, RedoOutlined, CheckOutlined } from '@ant-design/icons';\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst stepsTitles = [\r\n  'Instruction',\r\n  'Before You Start',\r\n  'Record Your Voice',\r\n  'Complete'\r\n];\r\n\r\nconst stepsDescriptions = [\r\n    `This module will record your production of different vowel sounds so we can provide resonance targets customized to your voice...`,\r\n    `To measure your resonance for a vowel, we want you to sustain JUST the vowel sound for about two seconds...`,\r\n    'Follow the steps to record your voice.',\r\n    'Review and complete the calibration.'\r\n];\r\n\r\nconst recordingSteps = [\r\n    { title: '“ee” like in “seed”', description: 'Click “start” and pronounce the vowel for 2 seconds, then click “stop”.' },\r\n    { title: '“ih” like in “hid”', description: 'Click “start” and pronounce the vowel for 2 seconds, then click “stop”.' },\r\n    { title: '“eh” like in “head”', description: 'Click “start” and pronounce the vowel for 2 seconds, then click “stop”.' }\r\n];\r\n\r\nconst GavtCali: React.FC = () => {\r\n  const [currentStep, setCurrentStep] = useState(0);\r\n  const [currentRecordingStep, setCurrentRecordingStep] = useState(0);\r\n  const [recordings, setRecordings] = useState<{[key: string]: string}>({});\r\n  const [isRecording, setIsRecording] = useState(false);\r\n\r\n  const handleRecordAudio = (action: 'start' | 'stop') => {\r\n    setIsRecording(action === 'start');\r\n    message.info(action === 'start' ? 'Recording started!' : 'Recording stopped!');\r\n    if (action === 'stop') {\r\n      const audioUrl = 'path_to_generated_audio'; // Placeholder\r\n      setRecordings({\r\n        ...recordings,\r\n        [recordingSteps[currentRecordingStep].title]: audioUrl\r\n      });\r\n    }\r\n  };\r\n\r\n  const handlePlayback = (audioUrl: string) => {\r\n    let audio = new Audio(audioUrl);\r\n    audio.play();\r\n  };\r\n\r\n  const renderRecordingButton = () => (\r\n    <Button\r\n      icon={<AudioOutlined />}\r\n      onClick={() => handleRecordAudio(isRecording ? 'stop' : 'start')}\r\n      type={isRecording ? \"default\" : \"primary\"}\r\n    >\r\n      {isRecording ? 'Stop Recording' : 'Start Recording'}\r\n    </Button>\r\n  );\r\n\r\n  const renderStepContent = (step: number) => {\r\n    switch(step) {\r\n      case 2:\r\n        return (\r\n          <div>\r\n            <p>{recordingSteps[currentRecordingStep].description}</p>\r\n            {renderRecordingButton()}\r\n            <Steps progressDot current={currentRecordingStep} direction=\"vertical\" items={recordingSteps.map((rs) => ({ title: rs.title, description: rs.description }))} />\r\n          </div>\r\n        );\r\n      default:\r\n        return <p>{stepsDescriptions[step]}</p>;\r\n    }\r\n  };\r\n\r\n  return (\r\n    <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', marginTop: '20px', width: '80%' }}>\r\n      <Breadcrumb style={{ marginBottom: '20px', alignSelf: 'start' }}>\r\n        <Breadcrumb.Item><Link to=\"/gavt\">Gavt Home</Link></Breadcrumb.Item>\r\n        <Breadcrumb.Item>Calibration</Breadcrumb.Item>\r\n      </Breadcrumb>\r\n      <Steps progressDot current={currentStep} items={stepsTitles.map(title => ({ title }))} />\r\n      <Divider />\r\n      {renderStepContent(currentStep)}\r\n      <div style={{ marginTop: '20px' }}>\r\n        <Button disabled={currentStep === 0} onClick={() => setCurrentStep(currentStep - 1)}>Previous</Button>\r\n        <Button type=\"primary\" onClick={() => setCurrentStep(currentStep + 1)} disabled={currentStep === stepsTitles.length - 1}>\r\n          {currentStep === stepsTitles.length - 1 ? 'Finish' : 'Next'}\r\n        </Button>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nexport default GavtCali;\r\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}