{"ast":null,"code":"var _jsxFileName = \"D:\\\\Project\\\\UC_Trains_Voice\\\\react-demo\\\\src\\\\Route\\\\Assessment.tsx\",\n  _s = $RefreshSig$();\nimport React, { useState, useEffect } from 'react';\nimport { getPitch } from '../function/getPitch';\nimport useAudioRecorder from '../function/AudioRecorder';\nimport { useNavigate } from 'react-router-dom';\nimport { Button, Statistic } from 'antd';\nimport { Slider } from 'antd';\nimport { Typography, Col, Row } from 'antd';\nimport '../CSS/Timer.css'; // Import CSS for styling\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst {\n  Paragraph\n} = Typography;\nconst fontAlign = \"center\";\nconst fontSizePara = 17;\nconst Assessment = () => {\n  _s();\n  var _ref, _ref2;\n  const [page, setPage] = useState('intro');\n  const [showRecording, setShowRecording] = useState(false);\n  const [isRecording, setIsRecording] = useState(false); // State to track recording status\n  const [isStopped, setIsStopped] = useState(true); // State to track if the recording has stopped\n  const [seconds, setSeconds] = useState(3);\n  const [pitch, setPitch] = useState(null);\n  const [ePitch, setEPitch] = useState(null);\n  const [eMeanPitch, setEMeanPitch] = useState(null);\n  const [rainbowPitch, setRainbowPitch] = useState(null);\n  const [rainbowMeanPitch, setRainbowMeanPitch] = useState(null);\n  const {\n    startRecording,\n    stopRecording,\n    recordedAudioURL\n  } = useAudioRecorder();\n  const [displayTimer, setDisplayTimer] = useState(false);\n  const [recordingIndicator, setRecordingIndicator] = useState(false);\n  const marks = {\n    0: 'No Effort',\n    100: 'A Lot of Effort'\n  };\n  useEffect(() => {\n    // Start the timer interval\n    const interval = setInterval(() => {\n      if (isRecording && !isStopped) {\n        setSeconds(prevSeconds => prevSeconds + 1);\n        getPitch(config, handlePitchDetected);\n      } else {\n        setPitch(null); // Reset the pitch value when not recording\n        setSeconds(prevSeconds => prevSeconds - 1);\n      }\n    }, 1000);\n    if (page === 'recording1' && pitch !== null) {\n      console.log('eeee: ', pitch);\n      setEPitch(prevEPitch => prevEPitch ? [...prevEPitch, pitch] : [pitch]);\n    } else if (page === 'recording2' && pitch !== null) {\n      console.log('rainbow: ', pitch);\n      setRainbowPitch(prevRainbowPitch => prevRainbowPitch ? [...prevRainbowPitch, pitch] : [pitch]);\n    }\n    // Clear the interval and set recording status when timer hits 0\n    if (seconds === 0) {\n      setIsRecording(true);\n      setRecordingIndicator(true);\n      startRecording();\n    }\n    if (isStopped || page === 'recording1' && seconds === 5) {\n      stopRecording();\n      setRecordingIndicator(false);\n      setPitch(null);\n      clearInterval(interval);\n      console.log('Pitch Values: ', ePitch);\n      if (ePitch !== null) {\n        setEMeanPitch(ePitch.reduce((a, b) => a + b, 0) / ePitch.length);\n      }\n      console.log('Rainbow Pitch Values: ', rainbowPitch);\n      if (rainbowPitch !== null) {\n        setRainbowMeanPitch(rainbowPitch.reduce((a, b) => a + b, 0) / rainbowPitch.length);\n      }\n    }\n    // Cleanup function to clear the interval when the component unmounts\n    return () => clearInterval(interval);\n  }, [seconds, isRecording, isStopped]); // useEffect will re-run whenever 'seconds', 'isStopped' or 'isRecording' changes\n\n  const handlePitchDetected = detectedPitch => {\n    setPitch(detectedPitch);\n  };\n  const handlePageChange = newPage => {\n    setSeconds(3); // Reset the timer to 5 seconds\n    setIsRecording(false); // Reset the recording status\n    setPitch(null);\n    setIsStopped(true); // Reset the stopped status\n    setDisplayTimer(false); // Hide the timer once page changes\n    if (newPage === 'recording1' || newPage === 'recording2') {\n      setShowRecording(true);\n    } else {\n      setShowRecording(false);\n    }\n    setPage(newPage);\n  };\n  const startTimer = () => {\n    setSeconds(3); // Reset the timer to 5 seconds\n    setIsRecording(false); // Reset the recording status\n    setPitch(null);\n    setIsStopped(false); // Reset the stopped status\n    setDisplayTimer(true); // Display the timer once start button is pressed\n  };\n  const redoTimer = () => {\n    setIsRecording(false);\n    startTimer();\n    setIsStopped(true);\n    if (page === 'recording1') {\n      setEPitch(null);\n    } else if (page === 'recording2') {\n      setRainbowPitch(null);\n    }\n  };\n  const handleReplay = () => {\n    if (recordedAudioURL) {\n      const audioElement = new Audio(recordedAudioURL);\n      audioElement.play();\n    } else {\n      console.error('No audio to replay');\n    }\n  };\n  const stopTimer = () => {\n    setIsStopped(true); // Set the stopped status to true\n    setPitch(null);\n  };\n  const config = {\n    SRATE: 48000,\n    fxmin: 50,\n    fxlow: 50 + 50,\n    fxhigh: 600 - 200,\n    fxmax: 600\n  };\n  const navigate = useNavigate();\n  const goToSample = () => {};\n  // Calculate minutes and seconds from total seconds\n  const minutes = Math.floor(seconds / 60);\n  const remainingSeconds = seconds % 60;\n\n  // Format minutes and seconds with leading zeros\n  const formattedMinutes = String(minutes).padStart(2, '0');\n  const formattedSeconds = String(remainingSeconds).padStart(2, '0');\n  return /*#__PURE__*/_jsxDEV(\"div\", {\n    children: [page === 'intro' && /*#__PURE__*/_jsxDEV(\"div\", {\n      style: {\n        width: \"100%\",\n        textAlign: \"center\"\n      },\n      children: /*#__PURE__*/_jsxDEV(Typography, {\n        children: [/*#__PURE__*/_jsxDEV(Typography.Title, {\n          level: 2,\n          children: \"Welcome to the Assessment Module\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 167,\n          columnNumber: 13\n        }, this), /*#__PURE__*/_jsxDEV(Paragraph, {\n          children: \"This module will analyze your voice and give you some basic information about it. Press Start to begin.\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 168,\n          columnNumber: 13\n        }, this), /*#__PURE__*/_jsxDEV(Button, {\n          onClick: () => handlePageChange('recording1'),\n          children: \"Start\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 171,\n          columnNumber: 13\n        }, this)]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 166,\n        columnNumber: 11\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 165,\n      columnNumber: 9\n    }, this), showRecording && /*#__PURE__*/_jsxDEV(\"div\", {\n      style: {\n        width: \"100%\",\n        textAlign: \"center\"\n      },\n      children: /*#__PURE__*/_jsxDEV(Typography, {\n        children: [/*#__PURE__*/_jsxDEV(Typography.Title, {\n          level: 2,\n          children: \"Recording Section\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 179,\n          columnNumber: 13\n        }, this), page === 'recording1' && /*#__PURE__*/_jsxDEV(\"div\", {\n          style: {\n            width: \"100%\",\n            textAlign: \"center\"\n          },\n          children: [/*#__PURE__*/_jsxDEV(Paragraph, {\n            style: {\n              textAlign: fontAlign,\n              fontSize: fontSizePara\n            },\n            children: \"Hold an ee sound for five seconds. Press Record to begin recording.\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 182,\n            columnNumber: 17\n          }, this), !isRecording ? /*#__PURE__*/_jsxDEV(\"div\", {\n            children: [/*#__PURE__*/_jsxDEV(Button, {\n              onClick: startTimer,\n              children: \"Record\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 187,\n              columnNumber: 21\n            }, this), /*#__PURE__*/_jsxDEV(Button, {\n              onClick: () => handlePageChange('recording2'),\n              children: \"Skip\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 189,\n              columnNumber: 21\n            }, this)]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 186,\n            columnNumber: 19\n          }, this) : /*#__PURE__*/_jsxDEV(\"div\", {\n            children: [/*#__PURE__*/_jsxDEV(Button, {\n              onClick: stopTimer,\n              children: \"Stop\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 193,\n              columnNumber: 21\n            }, this), /*#__PURE__*/_jsxDEV(Button, {\n              onClick: handleReplay,\n              children: \"Replay\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 194,\n              columnNumber: 21\n            }, this), /*#__PURE__*/_jsxDEV(Button, {\n              onClick: () => handlePageChange('recording2'),\n              children: \"Continue\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 195,\n              columnNumber: 21\n            }, this), /*#__PURE__*/_jsxDEV(Button, {\n              onClick: redoTimer,\n              children: \"Redo\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 196,\n              columnNumber: 21\n            }, this)]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 192,\n            columnNumber: 19\n          }, this), displayTimer && /*#__PURE__*/_jsxDEV(\"div\", {\n            className: `timer-container ${isRecording ? 'recording' : ''}`,\n            children: [!isRecording && /*#__PURE__*/_jsxDEV(\"div\", {\n              className: \"timer\",\n              children: [\"Starting in... \", formattedMinutes, \":\", formattedSeconds]\n            }, void 0, true, {\n              fileName: _jsxFileName,\n              lineNumber: 202,\n              columnNumber: 38\n            }, this), isRecording && recordingIndicator && /*#__PURE__*/_jsxDEV(\"div\", {\n              className: \"timer\",\n              children: [\"Recording... \", formattedMinutes, \":\", formattedSeconds]\n            }, void 0, true, {\n              fileName: _jsxFileName,\n              lineNumber: 203,\n              columnNumber: 59\n            }, this), isRecording && !recordingIndicator && /*#__PURE__*/_jsxDEV(\"div\", {\n              className: \"timer\",\n              children: [\"Done... \", formattedMinutes, \":\", formattedSeconds]\n            }, void 0, true, {\n              fileName: _jsxFileName,\n              lineNumber: 204,\n              columnNumber: 60\n            }, this)]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 201,\n            columnNumber: 19\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 181,\n          columnNumber: 15\n        }, this), page === 'recording2' && /*#__PURE__*/_jsxDEV(\"div\", {\n          style: {\n            width: \"100%\",\n            textAlign: \"center\"\n          },\n          children: [/*#__PURE__*/_jsxDEV(Paragraph, {\n            style: {\n              textAlign: fontAlign,\n              fontSize: fontSizePara\n            },\n            children: [\"Read the following text out loud. Press Record to begin recording, and press Stop when you are finished. \", /*#__PURE__*/_jsxDEV(\"br\", {}, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 214,\n              columnNumber: 124\n            }, this), \"| \", '\\t', /*#__PURE__*/_jsxDEV(\"i\", {\n              children: \"\\\"The rainbow is a division of white light into many beautiful colors. These take the shape of a long round arch, with its path high above, and its two ends apparently beyond the horizon\\\"\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 215,\n              columnNumber: 27\n            }, this)]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 213,\n            columnNumber: 17\n          }, this), !isRecording ? /*#__PURE__*/_jsxDEV(\"div\", {\n            children: /*#__PURE__*/_jsxDEV(Button, {\n              onClick: startTimer,\n              children: \"Record\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 219,\n              columnNumber: 21\n            }, this)\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 218,\n            columnNumber: 19\n          }, this) : /*#__PURE__*/_jsxDEV(\"div\", {\n            children: [/*#__PURE__*/_jsxDEV(Button, {\n              onClick: stopTimer,\n              children: \"Stop\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 224,\n              columnNumber: 21\n            }, this), /*#__PURE__*/_jsxDEV(Button, {\n              onClick: handleReplay,\n              children: \"Replay\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 225,\n              columnNumber: 21\n            }, this), /*#__PURE__*/_jsxDEV(Button, {\n              onClick: () => handlePageChange('survey'),\n              children: \"Continue\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 226,\n              columnNumber: 21\n            }, this), /*#__PURE__*/_jsxDEV(Button, {\n              onClick: redoTimer,\n              children: \"Redo\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 227,\n              columnNumber: 21\n            }, this)]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 223,\n            columnNumber: 19\n          }, this), displayTimer && /*#__PURE__*/_jsxDEV(\"div\", {\n            className: `timer-container ${isRecording ? 'recording' : ''}`,\n            children: [!isRecording && /*#__PURE__*/_jsxDEV(\"div\", {\n              className: \"timer\",\n              children: [\"Starting in... \", formattedMinutes, \":\", formattedSeconds]\n            }, void 0, true, {\n              fileName: _jsxFileName,\n              lineNumber: 233,\n              columnNumber: 38\n            }, this), isRecording && recordingIndicator && /*#__PURE__*/_jsxDEV(\"div\", {\n              className: \"timer\",\n              children: [\"Recording... \", formattedMinutes, \":\", formattedSeconds]\n            }, void 0, true, {\n              fileName: _jsxFileName,\n              lineNumber: 234,\n              columnNumber: 59\n            }, this), isRecording && !recordingIndicator && /*#__PURE__*/_jsxDEV(\"div\", {\n              className: \"timer\",\n              children: [\"Done... \", formattedMinutes, \":\", formattedSeconds]\n            }, void 0, true, {\n              fileName: _jsxFileName,\n              lineNumber: 235,\n              columnNumber: 60\n            }, this)]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 232,\n            columnNumber: 19\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 212,\n          columnNumber: 15\n        }, this)]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 178,\n        columnNumber: 11\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 177,\n      columnNumber: 9\n    }, this), page === 'survey' && /*#__PURE__*/_jsxDEV(\"div\", {\n      style: {\n        width: \"100%\",\n        textAlign: \"center\"\n      },\n      children: /*#__PURE__*/_jsxDEV(Typography, {\n        children: [/*#__PURE__*/_jsxDEV(Typography.Title, {\n          level: 2,\n          children: \"Survey Section\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 246,\n          columnNumber: 13\n        }, this), /*#__PURE__*/_jsxDEV(Paragraph, {\n          style: {\n            textAlign: fontAlign,\n            fontSize: fontSizePara\n          },\n          children: \"Rate the physical vocal effort needed to create your target voice:\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 247,\n          columnNumber: 13\n        }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n          style: {\n            width: '75%',\n            margin: '0 auto'\n          },\n          children: /*#__PURE__*/_jsxDEV(Slider, {\n            marks: marks,\n            defaultValue: 0 // Set default value (0 for \"Very Easy\")\n            ,\n            tooltip: {\n              formatter: null\n            }\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 251,\n            columnNumber: 15\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 250,\n          columnNumber: 13\n        }, this), /*#__PURE__*/_jsxDEV(\"br\", {}, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 257,\n          columnNumber: 13\n        }, this), /*#__PURE__*/_jsxDEV(\"br\", {}, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 258,\n          columnNumber: 13\n        }, this), /*#__PURE__*/_jsxDEV(Paragraph, {\n          style: {\n            textAlign: fontAlign,\n            fontSize: fontSizePara\n          },\n          children: \"Rate the cognitive vocal effort needed to create your target voice:\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 259,\n          columnNumber: 13\n        }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n          style: {\n            width: '75%',\n            margin: '0 auto'\n          },\n          children: [/*#__PURE__*/_jsxDEV(Slider, {\n            marks: marks,\n            defaultValue: 0 // Set default value (0 for \"Very Easy\")\n            ,\n            tooltip: {\n              formatter: null\n            }\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 263,\n            columnNumber: 15\n          }, this), /*#__PURE__*/_jsxDEV(\"br\", {}, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 268,\n            columnNumber: 15\n          }, this), /*#__PURE__*/_jsxDEV(\"br\", {}, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 269,\n            columnNumber: 15\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 262,\n          columnNumber: 13\n        }, this), /*#__PURE__*/_jsxDEV(Button, {\n          onClick: () => handlePageChange('results'),\n          children: \"Finish Assesment\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 271,\n          columnNumber: 13\n        }, this)]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 245,\n        columnNumber: 11\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 244,\n      columnNumber: 9\n    }, this), page === 'results' && /*#__PURE__*/_jsxDEV(\"div\", {\n      style: {\n        width: \"100%\",\n        textAlign: \"center\"\n      },\n      children: /*#__PURE__*/_jsxDEV(Typography, {\n        children: [/*#__PURE__*/_jsxDEV(Typography.Title, {\n          level: 2,\n          children: \"Results Section\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 278,\n          columnNumber: 13\n        }, this), /*#__PURE__*/_jsxDEV(Row, {\n          gutter: 16,\n          children: [/*#__PURE__*/_jsxDEV(Col, {\n            span: 12,\n            children: /*#__PURE__*/_jsxDEV(Statistic, {\n              title: \"Mean Pitch eee\",\n              value: (_ref = (eMeanPitch === null || eMeanPitch === void 0 ? void 0 : eMeanPitch.toFixed(1)) + ' Hz') !== null && _ref !== void 0 ? _ref : undefined\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 281,\n              columnNumber: 17\n            }, this)\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 280,\n            columnNumber: 15\n          }, this), /*#__PURE__*/_jsxDEV(Col, {\n            span: 12,\n            children: /*#__PURE__*/_jsxDEV(Statistic, {\n              title: \"Mean Pitch Rainbow Passage\",\n              value: (_ref2 = (rainbowMeanPitch === null || rainbowMeanPitch === void 0 ? void 0 : rainbowMeanPitch.toFixed(1)) + ' Hz') !== null && _ref2 !== void 0 ? _ref2 : undefined\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 284,\n              columnNumber: 17\n            }, this)\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 283,\n            columnNumber: 15\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 279,\n          columnNumber: 13\n        }, this)]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 277,\n        columnNumber: 11\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 276,\n      columnNumber: 9\n    }, this)]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 163,\n    columnNumber: 5\n  }, this);\n};\n_s(Assessment, \"FAo6lzl5nVfKTk8u0SSqK4hp0xI=\", false, function () {\n  return [useAudioRecorder, useNavigate];\n});\n_c = Assessment;\nexport default Assessment;\nvar _c;\n$RefreshReg$(_c, \"Assessment\");","map":{"version":3,"names":["React","useState","useEffect","getPitch","useAudioRecorder","useNavigate","Button","Statistic","Slider","Typography","Col","Row","jsxDEV","_jsxDEV","Paragraph","fontAlign","fontSizePara","Assessment","_s","_ref","_ref2","page","setPage","showRecording","setShowRecording","isRecording","setIsRecording","isStopped","setIsStopped","seconds","setSeconds","pitch","setPitch","ePitch","setEPitch","eMeanPitch","setEMeanPitch","rainbowPitch","setRainbowPitch","rainbowMeanPitch","setRainbowMeanPitch","startRecording","stopRecording","recordedAudioURL","displayTimer","setDisplayTimer","recordingIndicator","setRecordingIndicator","marks","interval","setInterval","prevSeconds","config","handlePitchDetected","console","log","prevEPitch","prevRainbowPitch","clearInterval","reduce","a","b","length","detectedPitch","handlePageChange","newPage","startTimer","redoTimer","handleReplay","audioElement","Audio","play","error","stopTimer","SRATE","fxmin","fxlow","fxhigh","fxmax","navigate","goToSample","minutes","Math","floor","remainingSeconds","formattedMinutes","String","padStart","formattedSeconds","children","style","width","textAlign","Title","level","fileName","_jsxFileName","lineNumber","columnNumber","onClick","fontSize","className","margin","defaultValue","tooltip","formatter","gutter","span","title","value","toFixed","undefined","_c","$RefreshReg$"],"sources":["D:/Project/UC_Trains_Voice/react-demo/src/Route/Assessment.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\r\nimport { getPitch, IPitchDetectionConfig } from '../function/getPitch';\r\nimport useAudioRecorder from '../function/AudioRecorder';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { Button, Statistic } from 'antd';\r\nimport { Slider } from 'antd';\r\nimport { Typography, Col, Row} from 'antd';\r\nimport '../CSS/Timer.css'; // Import CSS for styling\r\nimport { UploadOutlined } from '@ant-design/icons';\r\n\r\n\r\n\r\ninterface AssessmentProps {\r\n}\r\n\r\nconst { Paragraph } = Typography;\r\nconst fontAlign = \"center\";\r\nconst fontSizePara = 17;\r\n\r\n\r\nconst Assessment: React.FC<AssessmentProps> = () => {\r\n  const [page, setPage] = useState<'intro' |'recording1' | 'recording2' | 'survey' | 'results'>('intro');\r\n  const [showRecording, setShowRecording] = useState(false);\r\n  const [isRecording, setIsRecording] = useState(false); // State to track recording status\r\n  const [isStopped, setIsStopped] = useState(true); // State to track if the recording has stopped\r\n  const [seconds, setSeconds] = useState<number>(3);\r\n  const [pitch, setPitch] = useState<number | null>(null);\r\n  const [ePitch, setEPitch] = useState<number[] | null>(null);\r\n  const [eMeanPitch, setEMeanPitch] = useState<number | null>(null);\r\n  const [rainbowPitch, setRainbowPitch] = useState<number[] | null>(null);\r\n  const [rainbowMeanPitch, setRainbowMeanPitch] = useState<number | null>(null);\r\n  const {startRecording, stopRecording, recordedAudioURL } = useAudioRecorder();\r\n  const [displayTimer, setDisplayTimer] = useState(false);\r\n  const [recordingIndicator, setRecordingIndicator ] = useState(false);\r\n\r\n \r\n  const marks = {\r\n    0: 'No Effort',\r\n    100: 'A Lot of Effort',\r\n  };\r\n\r\n  \r\n  useEffect(() => {\r\n    // Start the timer interval\r\n    const interval = setInterval(() => {\r\n      if (isRecording && !isStopped) {\r\n        setSeconds(prevSeconds => prevSeconds + 1);\r\n        getPitch(config, handlePitchDetected);\r\n      } else {\r\n        setPitch(null); // Reset the pitch value when not recording\r\n        setSeconds(prevSeconds => prevSeconds - 1);\r\n      }\r\n    }, 1000);\r\n    \r\n\r\n\r\n    if (page === 'recording1' && pitch !== null) {\r\n      console.log('eeee: ',pitch);\r\n      setEPitch(prevEPitch => (prevEPitch ? [...prevEPitch, pitch] : [pitch]));\r\n    }\r\n    else if (page === 'recording2' && pitch !== null) {\r\n      console.log('rainbow: ',pitch);\r\n      setRainbowPitch(prevRainbowPitch => (prevRainbowPitch ? [...prevRainbowPitch, pitch] : [pitch]));\r\n    }\r\n    // Clear the interval and set recording status when timer hits 0\r\n    if (seconds === 0) {\r\n      setIsRecording(true);\r\n      setRecordingIndicator(true);\r\n      startRecording();\r\n    }\r\n    if (isStopped || (page === 'recording1' && seconds === 5)) {\r\n      stopRecording();\r\n      setRecordingIndicator(false);\r\n      setPitch(null);\r\n      clearInterval(interval);\r\n      console.log('Pitch Values: ', ePitch);\r\n      if (ePitch !== null){\r\n        setEMeanPitch(ePitch.reduce((a, b) => a + b, 0) / ePitch.length);\r\n      }\r\n      console.log('Rainbow Pitch Values: ', rainbowPitch);\r\n      if (rainbowPitch !== null){\r\n        setRainbowMeanPitch(rainbowPitch.reduce((a, b) => a + b, 0) / rainbowPitch.length);\r\n      }\r\n    }\r\n    // Cleanup function to clear the interval when the component unmounts\r\n    return () => clearInterval(interval);\r\n  }, [seconds, isRecording, isStopped]); // useEffect will re-run whenever 'seconds', 'isStopped' or 'isRecording' changes\r\n\r\n  const handlePitchDetected = (detectedPitch: number | null) => {\r\n    setPitch(detectedPitch);\r\n  };\r\n\r\n  const handlePageChange = (newPage: 'intro' |'recording1' | 'recording2' | 'survey' | 'results') => {\r\n    setSeconds(3); // Reset the timer to 5 seconds\r\n    setIsRecording(false); // Reset the recording status\r\n    setPitch(null); \r\n    setIsStopped(true); // Reset the stopped status\r\n    setDisplayTimer(false); // Hide the timer once page changes\r\n    if (newPage === 'recording1' || newPage === 'recording2') {\r\n      setShowRecording(true);\r\n    }\r\n    else{\r\n      setShowRecording(false);\r\n    }\r\n    setPage(newPage);\r\n  };\r\n  \r\n  const startTimer = () => {\r\n    setSeconds(3); // Reset the timer to 5 seconds\r\n    setIsRecording(false); // Reset the recording status\r\n    setPitch(null); \r\n    setIsStopped(false); // Reset the stopped status\r\n    setDisplayTimer(true); // Display the timer once start button is pressed\r\n  };\r\n\r\n  const redoTimer = () => {\r\n    setIsRecording(false);\r\n    startTimer();\r\n    setIsStopped(true);\r\n    if (page === 'recording1'){\r\n      setEPitch(null);\r\n    }\r\n    else if (page === 'recording2'){\r\n      setRainbowPitch(null);\r\n    }\r\n  }\r\n\r\n  const handleReplay = () => {\r\n    if (recordedAudioURL) {\r\n      const audioElement = new Audio(recordedAudioURL);\r\n      audioElement.play();\r\n    }\r\n    else {\r\n      console.error('No audio to replay');\r\n    }\r\n  };\r\n\r\n  const stopTimer = () => {\r\n    setIsStopped(true); // Set the stopped status to true\r\n    setPitch(null); \r\n  }\r\n\r\n  const config: IPitchDetectionConfig = {\r\n    SRATE: 48000,\r\n    fxmin: 50,\r\n    fxlow: 50 + 50,\r\n    fxhigh: 600 - 200, \r\n    fxmax: 600\r\n  };\r\n\r\n  const navigate = useNavigate();\r\n  const goToSample = () => {\r\n    \r\n  };\r\n  // Calculate minutes and seconds from total seconds\r\n  const minutes = Math.floor(seconds / 60);\r\n  const remainingSeconds = seconds % 60;\r\n\r\n  // Format minutes and seconds with leading zeros\r\n  const formattedMinutes = String(minutes).padStart(2, '0');\r\n  const formattedSeconds = String(remainingSeconds).padStart(2, '0');\r\n  return (\r\n    <div>\r\n      {page === 'intro' && (\r\n        <div style={{ width: \"100%\", textAlign: \"center\" }}>\r\n          <Typography>\r\n            <Typography.Title level={2} >Welcome to the Assessment Module</Typography.Title>\r\n            <Paragraph>\r\n              This module will analyze your voice and give you some basic information about it. Press Start to begin.\r\n            </Paragraph>\r\n            <Button onClick={() => handlePageChange('recording1')}>Start</Button>\r\n          </Typography>\r\n        </div>\r\n      )}\r\n\r\n      {showRecording && (\r\n        <div style={{ width: \"100%\", textAlign: \"center\" }}>\r\n          <Typography>\r\n            <Typography.Title level={2} >Recording Section</Typography.Title>\r\n            {page === 'recording1' && (\r\n              <div style={{ width: \"100%\", textAlign: \"center\" }}>\r\n                <Paragraph style={{ textAlign: fontAlign, fontSize: fontSizePara }}>\r\n                  Hold an ee sound for five seconds. Press Record to begin recording.\r\n                </Paragraph>\r\n                {!isRecording ? (\r\n                  <div>\r\n                    <Button onClick={startTimer}>Record</Button>\r\n                    {/* <Button icon={<UploadOutlined />}>Upload Wav </Button> */}\r\n                    <Button onClick={() => handlePageChange('recording2')}>Skip</Button>\r\n                  </div>\r\n                ) : (\r\n                  <div>\r\n                    <Button onClick={stopTimer}>Stop</Button>\r\n                    <Button onClick={handleReplay}>Replay</Button>\r\n                    <Button onClick={() => handlePageChange('recording2')}>Continue</Button>\r\n                    <Button onClick={redoTimer}>Redo</Button>\r\n                  </div>\r\n                )}\r\n                \r\n                {displayTimer && (\r\n                  <div className={`timer-container ${isRecording ? 'recording' : ''}`}>\r\n                    {!isRecording && <div className=\"timer\">Starting in... {formattedMinutes}:{formattedSeconds}</div>}\r\n                    {isRecording && recordingIndicator && <div className=\"timer\">Recording... {formattedMinutes}:{formattedSeconds}</div>}\r\n                    {isRecording && !recordingIndicator && <div className=\"timer\">Done... {formattedMinutes}:{formattedSeconds}</div>}\r\n                  </div>\r\n                )}\r\n                \r\n              </div>\r\n            )}\r\n\r\n            {page === 'recording2' && (\r\n              <div style={{ width: \"100%\", textAlign: \"center\" }}>\r\n                <Paragraph style={{ textAlign: fontAlign, fontSize: fontSizePara }}>\r\n                  Read the following text out loud. Press Record to begin recording, and press Stop when you are finished. <br />\r\n                  | {'\\t'}<i>\"The rainbow is a division of white light into many beautiful colors. These take the shape of a long round arch, with its path high above, and its two ends apparently beyond the horizon\"</i>\r\n                </Paragraph>\r\n                {!isRecording ? (\r\n                  <div>\r\n                    <Button onClick={startTimer}>Record</Button>\r\n                    {/* <Button icon={<UploadOutlined />}>Upload Wav </Button> */}\r\n                  </div>\r\n                ) : (\r\n                  <div>\r\n                    <Button onClick={stopTimer}>Stop</Button>\r\n                    <Button onClick={handleReplay}>Replay</Button>\r\n                    <Button onClick={() => handlePageChange('survey')}>Continue</Button>\r\n                    <Button onClick={redoTimer}>Redo</Button>\r\n                  </div>\r\n                )}\r\n\r\n                  {displayTimer && (\r\n                  <div className={`timer-container ${isRecording ? 'recording' : ''}`}>\r\n                    {!isRecording && <div className=\"timer\">Starting in... {formattedMinutes}:{formattedSeconds}</div>}\r\n                    {isRecording && recordingIndicator && <div className=\"timer\">Recording... {formattedMinutes}:{formattedSeconds}</div>}\r\n                    {isRecording && !recordingIndicator && <div className=\"timer\">Done... {formattedMinutes}:{formattedSeconds}</div>}\r\n                  </div>\r\n                  )}\r\n              </div>\r\n            )}\r\n          </Typography>\r\n        </div>\r\n      )}\r\n      {page === 'survey' && (\r\n        <div style={{ width: \"100%\", textAlign: \"center\" }}>\r\n          <Typography>\r\n            <Typography.Title level={2} >Survey Section</Typography.Title>\r\n            <Paragraph style={{ textAlign: fontAlign, fontSize: fontSizePara }}>\r\n              Rate the physical vocal effort needed to create your target voice:\r\n            </Paragraph>\r\n            <div style={{ width: '75%', margin: '0 auto' }}>\r\n              <Slider\r\n                marks={marks}\r\n                defaultValue={0} // Set default value (0 for \"Very Easy\")\r\n                tooltip={{ formatter: null }}\r\n              />\r\n            </div>\r\n            <br />\r\n            <br />\r\n            <Paragraph style={{ textAlign: fontAlign, fontSize: fontSizePara }}>\r\n              Rate the cognitive vocal effort needed to create your target voice:\r\n            </Paragraph>\r\n            <div style={{ width: '75%', margin: '0 auto' }}>\r\n              <Slider\r\n                marks={marks}\r\n                defaultValue={0} // Set default value (0 for \"Very Easy\")\r\n                tooltip={{ formatter: null }}\r\n              />\r\n              <br />\r\n              <br />\r\n            </div>\r\n            <Button onClick={() => handlePageChange('results')}>Finish Assesment</Button>\r\n          </Typography>\r\n        </div>\r\n      )}\r\n      {page === 'results' && (\r\n        <div style={{ width: \"100%\", textAlign: \"center\" }}>\r\n          <Typography>\r\n            <Typography.Title level={2}>Results Section</Typography.Title>\r\n            <Row gutter={16}>\r\n              <Col span={12}>\r\n                <Statistic title=\"Mean Pitch eee\" value={eMeanPitch?.toFixed(1) + ' Hz' ?? undefined} />\r\n              </Col>\r\n              <Col span={12}>\r\n                <Statistic title=\"Mean Pitch Rainbow Passage\" value={rainbowMeanPitch?.toFixed(1) + ' Hz' ?? undefined} />\r\n              </Col>\r\n            </Row>\r\n          </Typography>\r\n\r\n        </div>\r\n      )}\r\n    </div>\r\n\r\n  );\r\n};\r\n\r\nexport default Assessment;"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,SAAS,QAAQ,OAAO;AAClD,SAASC,QAAQ,QAA+B,sBAAsB;AACtE,OAAOC,gBAAgB,MAAM,2BAA2B;AACxD,SAASC,WAAW,QAAQ,kBAAkB;AAC9C,SAASC,MAAM,EAAEC,SAAS,QAAQ,MAAM;AACxC,SAASC,MAAM,QAAQ,MAAM;AAC7B,SAASC,UAAU,EAAEC,GAAG,EAAEC,GAAG,QAAO,MAAM;AAC1C,OAAO,kBAAkB,CAAC,CAAC;AAAA,SAAAC,MAAA,IAAAC,OAAA;AAQ3B,MAAM;EAAEC;AAAU,CAAC,GAAGL,UAAU;AAChC,MAAMM,SAAS,GAAG,QAAQ;AAC1B,MAAMC,YAAY,GAAG,EAAE;AAGvB,MAAMC,UAAqC,GAAGA,CAAA,KAAM;EAAAC,EAAA;EAAA,IAAAC,IAAA,EAAAC,KAAA;EAClD,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC,GAAGrB,QAAQ,CAA8D,OAAO,CAAC;EACtG,MAAM,CAACsB,aAAa,EAAEC,gBAAgB,CAAC,GAAGvB,QAAQ,CAAC,KAAK,CAAC;EACzD,MAAM,CAACwB,WAAW,EAAEC,cAAc,CAAC,GAAGzB,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;EACvD,MAAM,CAAC0B,SAAS,EAAEC,YAAY,CAAC,GAAG3B,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;EAClD,MAAM,CAAC4B,OAAO,EAAEC,UAAU,CAAC,GAAG7B,QAAQ,CAAS,CAAC,CAAC;EACjD,MAAM,CAAC8B,KAAK,EAAEC,QAAQ,CAAC,GAAG/B,QAAQ,CAAgB,IAAI,CAAC;EACvD,MAAM,CAACgC,MAAM,EAAEC,SAAS,CAAC,GAAGjC,QAAQ,CAAkB,IAAI,CAAC;EAC3D,MAAM,CAACkC,UAAU,EAAEC,aAAa,CAAC,GAAGnC,QAAQ,CAAgB,IAAI,CAAC;EACjE,MAAM,CAACoC,YAAY,EAAEC,eAAe,CAAC,GAAGrC,QAAQ,CAAkB,IAAI,CAAC;EACvE,MAAM,CAACsC,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGvC,QAAQ,CAAgB,IAAI,CAAC;EAC7E,MAAM;IAACwC,cAAc;IAAEC,aAAa;IAAEC;EAAiB,CAAC,GAAGvC,gBAAgB,CAAC,CAAC;EAC7E,MAAM,CAACwC,YAAY,EAAEC,eAAe,CAAC,GAAG5C,QAAQ,CAAC,KAAK,CAAC;EACvD,MAAM,CAAC6C,kBAAkB,EAAEC,qBAAqB,CAAE,GAAG9C,QAAQ,CAAC,KAAK,CAAC;EAGpE,MAAM+C,KAAK,GAAG;IACZ,CAAC,EAAE,WAAW;IACd,GAAG,EAAE;EACP,CAAC;EAGD9C,SAAS,CAAC,MAAM;IACd;IACA,MAAM+C,QAAQ,GAAGC,WAAW,CAAC,MAAM;MACjC,IAAIzB,WAAW,IAAI,CAACE,SAAS,EAAE;QAC7BG,UAAU,CAACqB,WAAW,IAAIA,WAAW,GAAG,CAAC,CAAC;QAC1ChD,QAAQ,CAACiD,MAAM,EAAEC,mBAAmB,CAAC;MACvC,CAAC,MAAM;QACLrB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAChBF,UAAU,CAACqB,WAAW,IAAIA,WAAW,GAAG,CAAC,CAAC;MAC5C;IACF,CAAC,EAAE,IAAI,CAAC;IAIR,IAAI9B,IAAI,KAAK,YAAY,IAAIU,KAAK,KAAK,IAAI,EAAE;MAC3CuB,OAAO,CAACC,GAAG,CAAC,QAAQ,EAACxB,KAAK,CAAC;MAC3BG,SAAS,CAACsB,UAAU,IAAKA,UAAU,GAAG,CAAC,GAAGA,UAAU,EAAEzB,KAAK,CAAC,GAAG,CAACA,KAAK,CAAE,CAAC;IAC1E,CAAC,MACI,IAAIV,IAAI,KAAK,YAAY,IAAIU,KAAK,KAAK,IAAI,EAAE;MAChDuB,OAAO,CAACC,GAAG,CAAC,WAAW,EAACxB,KAAK,CAAC;MAC9BO,eAAe,CAACmB,gBAAgB,IAAKA,gBAAgB,GAAG,CAAC,GAAGA,gBAAgB,EAAE1B,KAAK,CAAC,GAAG,CAACA,KAAK,CAAE,CAAC;IAClG;IACA;IACA,IAAIF,OAAO,KAAK,CAAC,EAAE;MACjBH,cAAc,CAAC,IAAI,CAAC;MACpBqB,qBAAqB,CAAC,IAAI,CAAC;MAC3BN,cAAc,CAAC,CAAC;IAClB;IACA,IAAId,SAAS,IAAKN,IAAI,KAAK,YAAY,IAAIQ,OAAO,KAAK,CAAE,EAAE;MACzDa,aAAa,CAAC,CAAC;MACfK,qBAAqB,CAAC,KAAK,CAAC;MAC5Bf,QAAQ,CAAC,IAAI,CAAC;MACd0B,aAAa,CAACT,QAAQ,CAAC;MACvBK,OAAO,CAACC,GAAG,CAAC,gBAAgB,EAAEtB,MAAM,CAAC;MACrC,IAAIA,MAAM,KAAK,IAAI,EAAC;QAClBG,aAAa,CAACH,MAAM,CAAC0B,MAAM,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,EAAE,CAAC,CAAC,GAAG5B,MAAM,CAAC6B,MAAM,CAAC;MAClE;MACAR,OAAO,CAACC,GAAG,CAAC,wBAAwB,EAAElB,YAAY,CAAC;MACnD,IAAIA,YAAY,KAAK,IAAI,EAAC;QACxBG,mBAAmB,CAACH,YAAY,CAACsB,MAAM,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,EAAE,CAAC,CAAC,GAAGxB,YAAY,CAACyB,MAAM,CAAC;MACpF;IACF;IACA;IACA,OAAO,MAAMJ,aAAa,CAACT,QAAQ,CAAC;EACtC,CAAC,EAAE,CAACpB,OAAO,EAAEJ,WAAW,EAAEE,SAAS,CAAC,CAAC,CAAC,CAAC;;EAEvC,MAAM0B,mBAAmB,GAAIU,aAA4B,IAAK;IAC5D/B,QAAQ,CAAC+B,aAAa,CAAC;EACzB,CAAC;EAED,MAAMC,gBAAgB,GAAIC,OAAoE,IAAK;IACjGnC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACfJ,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACvBM,QAAQ,CAAC,IAAI,CAAC;IACdJ,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IACpBiB,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IACxB,IAAIoB,OAAO,KAAK,YAAY,IAAIA,OAAO,KAAK,YAAY,EAAE;MACxDzC,gBAAgB,CAAC,IAAI,CAAC;IACxB,CAAC,MACG;MACFA,gBAAgB,CAAC,KAAK,CAAC;IACzB;IACAF,OAAO,CAAC2C,OAAO,CAAC;EAClB,CAAC;EAED,MAAMC,UAAU,GAAGA,CAAA,KAAM;IACvBpC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACfJ,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACvBM,QAAQ,CAAC,IAAI,CAAC;IACdJ,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACrBiB,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;EACzB,CAAC;EAED,MAAMsB,SAAS,GAAGA,CAAA,KAAM;IACtBzC,cAAc,CAAC,KAAK,CAAC;IACrBwC,UAAU,CAAC,CAAC;IACZtC,YAAY,CAAC,IAAI,CAAC;IAClB,IAAIP,IAAI,KAAK,YAAY,EAAC;MACxBa,SAAS,CAAC,IAAI,CAAC;IACjB,CAAC,MACI,IAAIb,IAAI,KAAK,YAAY,EAAC;MAC7BiB,eAAe,CAAC,IAAI,CAAC;IACvB;EACF,CAAC;EAED,MAAM8B,YAAY,GAAGA,CAAA,KAAM;IACzB,IAAIzB,gBAAgB,EAAE;MACpB,MAAM0B,YAAY,GAAG,IAAIC,KAAK,CAAC3B,gBAAgB,CAAC;MAChD0B,YAAY,CAACE,IAAI,CAAC,CAAC;IACrB,CAAC,MACI;MACHjB,OAAO,CAACkB,KAAK,CAAC,oBAAoB,CAAC;IACrC;EACF,CAAC;EAED,MAAMC,SAAS,GAAGA,CAAA,KAAM;IACtB7C,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IACpBI,QAAQ,CAAC,IAAI,CAAC;EAChB,CAAC;EAED,MAAMoB,MAA6B,GAAG;IACpCsB,KAAK,EAAE,KAAK;IACZC,KAAK,EAAE,EAAE;IACTC,KAAK,EAAE,EAAE,GAAG,EAAE;IACdC,MAAM,EAAE,GAAG,GAAG,GAAG;IACjBC,KAAK,EAAE;EACT,CAAC;EAED,MAAMC,QAAQ,GAAG1E,WAAW,CAAC,CAAC;EAC9B,MAAM2E,UAAU,GAAGA,CAAA,KAAM,CAEzB,CAAC;EACD;EACA,MAAMC,OAAO,GAAGC,IAAI,CAACC,KAAK,CAACtD,OAAO,GAAG,EAAE,CAAC;EACxC,MAAMuD,gBAAgB,GAAGvD,OAAO,GAAG,EAAE;;EAErC;EACA,MAAMwD,gBAAgB,GAAGC,MAAM,CAACL,OAAO,CAAC,CAACM,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EACzD,MAAMC,gBAAgB,GAAGF,MAAM,CAACF,gBAAgB,CAAC,CAACG,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EAClE,oBACE1E,OAAA;IAAA4E,QAAA,GACGpE,IAAI,KAAK,OAAO,iBACfR,OAAA;MAAK6E,KAAK,EAAE;QAAEC,KAAK,EAAE,MAAM;QAAEC,SAAS,EAAE;MAAS,CAAE;MAAAH,QAAA,eACjD5E,OAAA,CAACJ,UAAU;QAAAgF,QAAA,gBACT5E,OAAA,CAACJ,UAAU,CAACoF,KAAK;UAACC,KAAK,EAAE,CAAE;UAAAL,QAAA,EAAE;QAAgC;UAAAM,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAkB,CAAC,eAChFrF,OAAA,CAACC,SAAS;UAAA2E,QAAA,EAAC;QAEX;UAAAM,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAW,CAAC,eACZrF,OAAA,CAACP,MAAM;UAAC6F,OAAO,EAAEA,CAAA,KAAMnC,gBAAgB,CAAC,YAAY,CAAE;UAAAyB,QAAA,EAAC;QAAK;UAAAM,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAQ,CAAC;MAAA;QAAAH,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAC3D;IAAC;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OACV,CACN,EAEA3E,aAAa,iBACZV,OAAA;MAAK6E,KAAK,EAAE;QAAEC,KAAK,EAAE,MAAM;QAAEC,SAAS,EAAE;MAAS,CAAE;MAAAH,QAAA,eACjD5E,OAAA,CAACJ,UAAU;QAAAgF,QAAA,gBACT5E,OAAA,CAACJ,UAAU,CAACoF,KAAK;UAACC,KAAK,EAAE,CAAE;UAAAL,QAAA,EAAE;QAAiB;UAAAM,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAkB,CAAC,EAChE7E,IAAI,KAAK,YAAY,iBACpBR,OAAA;UAAK6E,KAAK,EAAE;YAAEC,KAAK,EAAE,MAAM;YAAEC,SAAS,EAAE;UAAS,CAAE;UAAAH,QAAA,gBACjD5E,OAAA,CAACC,SAAS;YAAC4E,KAAK,EAAE;cAAEE,SAAS,EAAE7E,SAAS;cAAEqF,QAAQ,EAAEpF;YAAa,CAAE;YAAAyE,QAAA,EAAC;UAEpE;YAAAM,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAAW,CAAC,EACX,CAACzE,WAAW,gBACXZ,OAAA;YAAA4E,QAAA,gBACE5E,OAAA,CAACP,MAAM;cAAC6F,OAAO,EAAEjC,UAAW;cAAAuB,QAAA,EAAC;YAAM;cAAAM,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAQ,CAAC,eAE5CrF,OAAA,CAACP,MAAM;cAAC6F,OAAO,EAAEA,CAAA,KAAMnC,gBAAgB,CAAC,YAAY,CAAE;cAAAyB,QAAA,EAAC;YAAI;cAAAM,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAQ,CAAC;UAAA;YAAAH,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OACjE,CAAC,gBAENrF,OAAA;YAAA4E,QAAA,gBACE5E,OAAA,CAACP,MAAM;cAAC6F,OAAO,EAAE1B,SAAU;cAAAgB,QAAA,EAAC;YAAI;cAAAM,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAQ,CAAC,eACzCrF,OAAA,CAACP,MAAM;cAAC6F,OAAO,EAAE/B,YAAa;cAAAqB,QAAA,EAAC;YAAM;cAAAM,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAQ,CAAC,eAC9CrF,OAAA,CAACP,MAAM;cAAC6F,OAAO,EAAEA,CAAA,KAAMnC,gBAAgB,CAAC,YAAY,CAAE;cAAAyB,QAAA,EAAC;YAAQ;cAAAM,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAQ,CAAC,eACxErF,OAAA,CAACP,MAAM;cAAC6F,OAAO,EAAEhC,SAAU;cAAAsB,QAAA,EAAC;YAAI;cAAAM,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAQ,CAAC;UAAA;YAAAH,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OACtC,CACN,EAEAtD,YAAY,iBACX/B,OAAA;YAAKwF,SAAS,EAAG,mBAAkB5E,WAAW,GAAG,WAAW,GAAG,EAAG,EAAE;YAAAgE,QAAA,GACjE,CAAChE,WAAW,iBAAIZ,OAAA;cAAKwF,SAAS,EAAC,OAAO;cAAAZ,QAAA,GAAC,iBAAe,EAACJ,gBAAgB,EAAC,GAAC,EAACG,gBAAgB;YAAA;cAAAO,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAM,CAAC,EACjGzE,WAAW,IAAIqB,kBAAkB,iBAAIjC,OAAA;cAAKwF,SAAS,EAAC,OAAO;cAAAZ,QAAA,GAAC,eAAa,EAACJ,gBAAgB,EAAC,GAAC,EAACG,gBAAgB;YAAA;cAAAO,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAM,CAAC,EACpHzE,WAAW,IAAI,CAACqB,kBAAkB,iBAAIjC,OAAA;cAAKwF,SAAS,EAAC,OAAO;cAAAZ,QAAA,GAAC,UAAQ,EAACJ,gBAAgB,EAAC,GAAC,EAACG,gBAAgB;YAAA;cAAAO,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAM,CAAC;UAAA;YAAAH,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAC9G,CACN;QAAA;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAEE,CACN,EAEA7E,IAAI,KAAK,YAAY,iBACpBR,OAAA;UAAK6E,KAAK,EAAE;YAAEC,KAAK,EAAE,MAAM;YAAEC,SAAS,EAAE;UAAS,CAAE;UAAAH,QAAA,gBACjD5E,OAAA,CAACC,SAAS;YAAC4E,KAAK,EAAE;cAAEE,SAAS,EAAE7E,SAAS;cAAEqF,QAAQ,EAAEpF;YAAa,CAAE;YAAAyE,QAAA,GAAC,2GACuC,eAAA5E,OAAA;cAAAkF,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAK,CAAC,MAC7G,EAAC,IAAI,eAACrF,OAAA;cAAA4E,QAAA,EAAG;YAA0L;cAAAM,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAG,CAAC;UAAA;YAAAH,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAChM,CAAC,EACX,CAACzE,WAAW,gBACXZ,OAAA;YAAA4E,QAAA,eACE5E,OAAA,CAACP,MAAM;cAAC6F,OAAO,EAAEjC,UAAW;cAAAuB,QAAA,EAAC;YAAM;cAAAM,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAQ;UAAC;YAAAH,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAEzC,CAAC,gBAENrF,OAAA;YAAA4E,QAAA,gBACE5E,OAAA,CAACP,MAAM;cAAC6F,OAAO,EAAE1B,SAAU;cAAAgB,QAAA,EAAC;YAAI;cAAAM,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAQ,CAAC,eACzCrF,OAAA,CAACP,MAAM;cAAC6F,OAAO,EAAE/B,YAAa;cAAAqB,QAAA,EAAC;YAAM;cAAAM,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAQ,CAAC,eAC9CrF,OAAA,CAACP,MAAM;cAAC6F,OAAO,EAAEA,CAAA,KAAMnC,gBAAgB,CAAC,QAAQ,CAAE;cAAAyB,QAAA,EAAC;YAAQ;cAAAM,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAQ,CAAC,eACpErF,OAAA,CAACP,MAAM;cAAC6F,OAAO,EAAEhC,SAAU;cAAAsB,QAAA,EAAC;YAAI;cAAAM,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAQ,CAAC;UAAA;YAAAH,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OACtC,CACN,EAEEtD,YAAY,iBACb/B,OAAA;YAAKwF,SAAS,EAAG,mBAAkB5E,WAAW,GAAG,WAAW,GAAG,EAAG,EAAE;YAAAgE,QAAA,GACjE,CAAChE,WAAW,iBAAIZ,OAAA;cAAKwF,SAAS,EAAC,OAAO;cAAAZ,QAAA,GAAC,iBAAe,EAACJ,gBAAgB,EAAC,GAAC,EAACG,gBAAgB;YAAA;cAAAO,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAM,CAAC,EACjGzE,WAAW,IAAIqB,kBAAkB,iBAAIjC,OAAA;cAAKwF,SAAS,EAAC,OAAO;cAAAZ,QAAA,GAAC,eAAa,EAACJ,gBAAgB,EAAC,GAAC,EAACG,gBAAgB;YAAA;cAAAO,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAM,CAAC,EACpHzE,WAAW,IAAI,CAACqB,kBAAkB,iBAAIjC,OAAA;cAAKwF,SAAS,EAAC,OAAO;cAAAZ,QAAA,GAAC,UAAQ,EAACJ,gBAAgB,EAAC,GAAC,EAACG,gBAAgB;YAAA;cAAAO,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAM,CAAC;UAAA;YAAAH,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAC9G,CACJ;QAAA;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OACA,CACN;MAAA;QAAAH,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OACS;IAAC;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OACV,CACN,EACA7E,IAAI,KAAK,QAAQ,iBAChBR,OAAA;MAAK6E,KAAK,EAAE;QAAEC,KAAK,EAAE,MAAM;QAAEC,SAAS,EAAE;MAAS,CAAE;MAAAH,QAAA,eACjD5E,OAAA,CAACJ,UAAU;QAAAgF,QAAA,gBACT5E,OAAA,CAACJ,UAAU,CAACoF,KAAK;UAACC,KAAK,EAAE,CAAE;UAAAL,QAAA,EAAE;QAAc;UAAAM,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAkB,CAAC,eAC9DrF,OAAA,CAACC,SAAS;UAAC4E,KAAK,EAAE;YAAEE,SAAS,EAAE7E,SAAS;YAAEqF,QAAQ,EAAEpF;UAAa,CAAE;UAAAyE,QAAA,EAAC;QAEpE;UAAAM,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAW,CAAC,eACZrF,OAAA;UAAK6E,KAAK,EAAE;YAAEC,KAAK,EAAE,KAAK;YAAEW,MAAM,EAAE;UAAS,CAAE;UAAAb,QAAA,eAC7C5E,OAAA,CAACL,MAAM;YACLwC,KAAK,EAAEA,KAAM;YACbuD,YAAY,EAAE,CAAE,CAAC;YAAA;YACjBC,OAAO,EAAE;cAAEC,SAAS,EAAE;YAAK;UAAE;YAAAV,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAC9B;QAAC;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OACC,CAAC,eACNrF,OAAA;UAAAkF,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAK,CAAC,eACNrF,OAAA;UAAAkF,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAK,CAAC,eACNrF,OAAA,CAACC,SAAS;UAAC4E,KAAK,EAAE;YAAEE,SAAS,EAAE7E,SAAS;YAAEqF,QAAQ,EAAEpF;UAAa,CAAE;UAAAyE,QAAA,EAAC;QAEpE;UAAAM,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAW,CAAC,eACZrF,OAAA;UAAK6E,KAAK,EAAE;YAAEC,KAAK,EAAE,KAAK;YAAEW,MAAM,EAAE;UAAS,CAAE;UAAAb,QAAA,gBAC7C5E,OAAA,CAACL,MAAM;YACLwC,KAAK,EAAEA,KAAM;YACbuD,YAAY,EAAE,CAAE,CAAC;YAAA;YACjBC,OAAO,EAAE;cAAEC,SAAS,EAAE;YAAK;UAAE;YAAAV,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAC9B,CAAC,eACFrF,OAAA;YAAAkF,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAAK,CAAC,eACNrF,OAAA;YAAAkF,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAAK,CAAC;QAAA;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OACH,CAAC,eACNrF,OAAA,CAACP,MAAM;UAAC6F,OAAO,EAAEA,CAAA,KAAMnC,gBAAgB,CAAC,SAAS,CAAE;UAAAyB,QAAA,EAAC;QAAgB;UAAAM,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAQ,CAAC;MAAA;QAAAH,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OACnE;IAAC;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OACV,CACN,EACA7E,IAAI,KAAK,SAAS,iBACjBR,OAAA;MAAK6E,KAAK,EAAE;QAAEC,KAAK,EAAE,MAAM;QAAEC,SAAS,EAAE;MAAS,CAAE;MAAAH,QAAA,eACjD5E,OAAA,CAACJ,UAAU;QAAAgF,QAAA,gBACT5E,OAAA,CAACJ,UAAU,CAACoF,KAAK;UAACC,KAAK,EAAE,CAAE;UAAAL,QAAA,EAAC;QAAe;UAAAM,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAkB,CAAC,eAC9DrF,OAAA,CAACF,GAAG;UAAC+F,MAAM,EAAE,EAAG;UAAAjB,QAAA,gBACd5E,OAAA,CAACH,GAAG;YAACiG,IAAI,EAAE,EAAG;YAAAlB,QAAA,eACZ5E,OAAA,CAACN,SAAS;cAACqG,KAAK,EAAC,gBAAgB;cAACC,KAAK,GAAA1F,IAAA,GAAE,CAAAgB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAE2E,OAAO,CAAC,CAAC,CAAC,IAAG,KAAK,cAAA3F,IAAA,cAAAA,IAAA,GAAI4F;YAAU;cAAAhB,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAE;UAAC;YAAAH,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OACrF,CAAC,eACNrF,OAAA,CAACH,GAAG;YAACiG,IAAI,EAAE,EAAG;YAAAlB,QAAA,eACZ5E,OAAA,CAACN,SAAS;cAACqG,KAAK,EAAC,4BAA4B;cAACC,KAAK,GAAAzF,KAAA,GAAE,CAAAmB,gBAAgB,aAAhBA,gBAAgB,uBAAhBA,gBAAgB,CAAEuE,OAAO,CAAC,CAAC,CAAC,IAAG,KAAK,cAAA1F,KAAA,cAAAA,KAAA,GAAI2F;YAAU;cAAAhB,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAE;UAAC;YAAAH,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OACvG,CAAC;QAAA;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OACH,CAAC;MAAA;QAAAH,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OACI;IAAC;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OAEV,CACN;EAAA;IAAAH,QAAA,EAAAC,YAAA;IAAAC,UAAA;IAAAC,YAAA;EAAA,OACE,CAAC;AAGV,CAAC;AAAChF,EAAA,CAjRID,UAAqC;EAAA,QAWkBb,gBAAgB,EAuH1DC,WAAW;AAAA;AAAA2G,EAAA,GAlIxB/F,UAAqC;AAmR3C,eAAeA,UAAU;AAAC,IAAA+F,EAAA;AAAAC,YAAA,CAAAD,EAAA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}