{"ast":null,"code":"var _jsxFileName = \"D:\\\\Project\\\\UC_Trains_Voice\\\\react-demo\\\\src\\\\gavt\\\\Wave\\\\Wave.jsx\",\n  _s = $RefreshSig$();\nimport { useState, useEffect } from \"react\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useFreq } from \"../FreqContext\";\nimport waveDrawLoop from './lib/waveDrawLoop.js';\nimport WaveCanvas from './WaveCanvas.jsx';\nimport RefTable from '../table/RefTable';\nimport CaliTable from '../table/CaliTable';\nimport './Wave.css';\nimport { Slider, Button, Col, Row, Flex, Dropdown, Space, Modal, Collapse, message } from \"antd\";\nimport { DownOutlined } from '@ant-design/icons';\nimport 'antd/dist/reset.css';\nimport { jsxDEV as _jsxDEV, Fragment as _Fragment } from \"react/jsx-dev-runtime\";\nconst items = [{\n  key: '0',\n  label: 'Baseline'\n}, {\n  key: '1',\n  label: 'Moderately Darker (Baseline * 0.92)'\n}, {\n  key: '2',\n  label: 'Slightly Darker (Baseline * 0.98)'\n}, {\n  key: '3',\n  label: 'Slightly Brighter (Baseline * 1.02)'\n}, {\n  key: '4',\n  label: 'Moderately Brighter (Baseline * 1.08)'\n}];\nconst Wave = ({\n  currentVowelIdx,\n  refFreqArray\n}) => {\n  _s();\n  var _refFreqArray$current, _refFreqArray$current2, _freqData$customFrequ, _freqData$caliBaselin;\n  const {\n    freqData,\n    updateFreqData\n  } = useFreq();\n  const navigate = useNavigate();\n  const currentVowel = (refFreqArray === null || refFreqArray === void 0 ? void 0 : (_refFreqArray$current = refFreqArray[currentVowelIdx]) === null || _refFreqArray$current === void 0 ? void 0 : _refFreqArray$current.vowel) || '';\n  const refFreq = (refFreqArray === null || refFreqArray === void 0 ? void 0 : (_refFreqArray$current2 = refFreqArray[currentVowelIdx]) === null || _refFreqArray$current2 === void 0 ? void 0 : _refFreqArray$current2.freq) || 0;\n  const defaultFreq = (freqData === null || freqData === void 0 ? void 0 : (_freqData$customFrequ = freqData.customFrequencies) === null || _freqData$customFrequ === void 0 ? void 0 : _freqData$customFrequ[currentVowel]) || (freqData === null || freqData === void 0 ? void 0 : (_freqData$caliBaselin = freqData.caliBaseline) === null || _freqData$caliBaselin === void 0 ? void 0 : _freqData$caliBaselin[currentVowel]) || refFreq || 1500;\n  const [waveIsPaused, setWaveIsPaused] = useState(false);\n  const [pos, setPos] = useState(defaultFreq);\n  const [messageApi, contextHolder] = message.useMessage();\n\n  // For Modals\n  const [refOpen, setRefOpen] = useState(false);\n  const [caliOpen, setCaliOpen] = useState(false);\n  useEffect(() => {\n    if (!refFreqArray || refFreqArray.length === 0 || currentVowelIdx >= refFreqArray.length) {\n      message.error('No vowel data provided. Please select vowels first. Redirecting to home page...');\n      setTimeout(() => {\n        navigate('/gavt');\n      }, 2000);\n    }\n  }, [refFreqArray, currentVowelIdx, navigate]);\n  const text = /*#__PURE__*/_jsxDEV(_Fragment, {\n    children: [\"We provide 3 types of values: Referenced, Calibrated, and Customized. You can jump to any of these target by clicking the buttons below. If the button is disabled, it means you haven't set the corresponding value yet. To set a customized target, you can drag the slider below the waveform to the desired position, and click the button \\\"Set Current Value as Customized Target\\\". To set a calibrated target, please start from the \", /*#__PURE__*/_jsxDEV(Link, {\n      to: \"/gavt/calibrate\",\n      children: \"calibration routine\"\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 67,\n      columnNumber: 63\n    }, this), \". Just record your voice and follow the instructions, then the calibrated values will be automatically calculated. You can also batch set calibrated and customized values manually \", /*#__PURE__*/_jsxDEV(\"a\", {\n      onClick: () => setCaliOpen(true),\n      children: \"here\"\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 68,\n      columnNumber: 78\n    }, this), \".\"]\n  }, void 0, true);\n  useEffect(() => {\n    if (defaultFreq) {\n      setPos(defaultFreq);\n      console.log(`Default Frequency is set to ${defaultFreq} Hz. currentVowel is ${currentVowel}.`);\n    }\n  }, [defaultFreq, currentVowel]);\n  useEffect(() => {\n    if (freqData.customFrequencies[currentVowel]) {\n      setPos(freqData.customFrequencies[currentVowel]);\n    }\n  }, [freqData.customFrequencies, currentVowel]);\n  const handlePauseWave = e => setWaveIsPaused(!waveIsPaused);\n  const handleJumpToRef = () => setPos(refFreq || 1500);\n  const handleJumpToCustom = () => {\n    setPos(freqData.customFrequencies[currentVowel]);\n  };\n  const handleSetCurrentAsCustom = () => {\n    const newCustomFrequencies = {\n      ...freqData.customFrequencies,\n      [currentVowel]: pos\n    };\n    updateFreqData('customFrequencies', newCustomFrequencies);\n    console.log(`Freq Data: ${freqData.customFrequencies[currentVowel]}`);\n    success(pos);\n  };\n  const handleOnChangeSlider = value => {\n    setPos(value);\n  };\n  const success = pos => {\n    messageApi.open({\n      type: 'success',\n      content: 'Successfully set the customized target frequency to ' + pos + ' Hz.'\n    });\n  };\n  const handleJumpToCalibratedTarget = e => {\n    const caliBaseline = freqData.caliBaseline[currentVowel];\n    if (caliBaseline !== undefined && caliBaseline !== '') {\n      switch (e.key) {\n        case '0':\n          setPos(caliBaseline);\n          break;\n        case '1':\n          setPos(Math.round(caliBaseline * 0.92));\n          break;\n        case '2':\n          setPos(Math.round(caliBaseline * 0.98));\n          break;\n        case '3':\n          setPos(Math.round(caliBaseline * 1.02));\n          break;\n        case '4':\n          setPos(Math.round(caliBaseline * 1.08));\n          break;\n        default:\n          setPos(Math.round(caliBaseline));\n      }\n    }\n    console.log('Current Vowel:', currentVowel);\n    console.log('Custom Frequencies:', freqData.customFrequencies);\n    console.log('Calibrated Baseline:', freqData.caliBaseline);\n  };\n  return /*#__PURE__*/_jsxDEV(_Fragment, {\n    children: [contextHolder, /*#__PURE__*/_jsxDEV(\"div\", {\n      style: {\n        width: '70%'\n      },\n      children: /*#__PURE__*/_jsxDEV(Collapse, {\n        items: [{\n          key: '1',\n          label: 'Instructions',\n          children: /*#__PURE__*/_jsxDEV(\"div\", {\n            children: text\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 144,\n            columnNumber: 74\n          }, this)\n        }]\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 143,\n        columnNumber: 17\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 142,\n      columnNumber: 13\n    }, this), /*#__PURE__*/_jsxDEV(Flex, {\n      gap: \"small\",\n      style: {\n        margin: '10px'\n      },\n      children: [/*#__PURE__*/_jsxDEV(Button, {\n        onClick: handleJumpToRef,\n        children: \"Jump to Referenced Value\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 149,\n        columnNumber: 17\n      }, this), /*#__PURE__*/_jsxDEV(Dropdown, {\n        menu: {\n          items,\n          onClick: handleJumpToCalibratedTarget\n        },\n        disabled: freqData.caliBaseline[currentVowel] === undefined || freqData.caliBaseline[currentVowel] === '',\n        children: /*#__PURE__*/_jsxDEV(Button, {\n          children: /*#__PURE__*/_jsxDEV(Space, {\n            children: [\"Jump to Calibrated Value\", /*#__PURE__*/_jsxDEV(DownOutlined, {}, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 165,\n              columnNumber: 29\n            }, this)]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 163,\n            columnNumber: 25\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 162,\n          columnNumber: 21\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 155,\n        columnNumber: 17\n      }, this), /*#__PURE__*/_jsxDEV(Button, {\n        onClick: handleJumpToCustom\n        // disabled={freqData.customFrequencies[currentVowel] === '' || freqData.customFrequencies[currentVowel] === undefined}\n        ,\n        children: \"Jump to Customized Value\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 171,\n        columnNumber: 17\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 148,\n      columnNumber: 13\n    }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n      className: \"wlMainParent\",\n      children: [/*#__PURE__*/_jsxDEV(Row, {\n        children: /*#__PURE__*/_jsxDEV(Col, {\n          span: 24,\n          children: [/*#__PURE__*/_jsxDEV(\"span\", {\n            className: \"label\",\n            children: [\"Frequency Value at Current Position: \", pos, \" Hz\"]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 181,\n            columnNumber: 25\n          }, this), /*#__PURE__*/_jsxDEV(Button, {\n            onClick: handleSetCurrentAsCustom,\n            style: {\n              marginLeft: '10px'\n            },\n            children: \"Set Curret Value as Customized Target\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 182,\n            columnNumber: 25\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 180,\n          columnNumber: 21\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 179,\n        columnNumber: 17\n      }, this), /*#__PURE__*/_jsxDEV(Row, {\n        children: /*#__PURE__*/_jsxDEV(Col, {\n          span: 24,\n          children: [/*#__PURE__*/_jsxDEV(\"span\", {\n            className: \"label\",\n            children: \"Waveform Play Control: \"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 192,\n            columnNumber: 25\n          }, this), /*#__PURE__*/_jsxDEV(Button, {\n            onClick: handlePauseWave,\n            style: {\n              marginTop: '10px',\n              marginLeft: '10px'\n            },\n            type: \"primary\",\n            children: waveIsPaused ? \"Play\" : \"Pause\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 193,\n            columnNumber: 25\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 191,\n          columnNumber: 21\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 190,\n        columnNumber: 17\n      }, this), /*#__PURE__*/_jsxDEV(Row, {\n        children: /*#__PURE__*/_jsxDEV(Col, {\n          span: 24,\n          children: /*#__PURE__*/_jsxDEV(\"div\", {\n            className: \"canvasandslider\",\n            children: [/*#__PURE__*/_jsxDEV(WaveCanvas, {\n              className: \"waveCanvas\",\n              draw: waveDrawLoop,\n              isPaused: waveIsPaused\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 205,\n              columnNumber: 29\n            }, this), /*#__PURE__*/_jsxDEV(Slider, {\n              className: \"custom-slider\",\n              min: 0,\n              max: 4096,\n              value: pos,\n              onChange: handleOnChangeSlider,\n              defaultValue: 1500,\n              style: {\n                margin: 0\n              },\n              tooltip: {\n                open: false\n              }\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 210,\n              columnNumber: 29\n            }, this)]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 204,\n            columnNumber: 25\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 203,\n          columnNumber: 21\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 202,\n        columnNumber: 17\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 178,\n      columnNumber: 13\n    }, this), /*#__PURE__*/_jsxDEV(Modal, {\n      title: \"Reference Frequency Values\",\n      centered: true,\n      open: refOpen,\n      onOk: () => setRefOpen(false),\n      onCancel: () => setRefOpen(false),\n      width: 1000,\n      footer: [/*#__PURE__*/_jsxDEV(Button, {\n        type: \"primary\",\n        onClick: () => setRefOpen(false),\n        children: \"OK\"\n      }, \"submit\", false, {\n        fileName: _jsxFileName,\n        lineNumber: 232,\n        columnNumber: 17\n      }, this)],\n      children: /*#__PURE__*/_jsxDEV(RefTable, {}, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 237,\n        columnNumber: 17\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 224,\n      columnNumber: 13\n    }, this), /*#__PURE__*/_jsxDEV(Modal, {\n      title: \"Calibrated Frequency Values\",\n      centered: true,\n      open: caliOpen,\n      onOk: () => setCaliOpen(false),\n      onCancel: () => setCaliOpen(false),\n      width: 1000,\n      footer: [/*#__PURE__*/_jsxDEV(Button, {\n        type: \"primary\",\n        onClick: () => setCaliOpen(false),\n        children: \"OK\"\n      }, \"submit\", false, {\n        fileName: _jsxFileName,\n        lineNumber: 247,\n        columnNumber: 17\n      }, this)],\n      children: /*#__PURE__*/_jsxDEV(CaliTable, {}, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 252,\n        columnNumber: 17\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 239,\n      columnNumber: 13\n    }, this)]\n  }, void 0, true);\n};\n_s(Wave, \"mzrjC5YSFOiWdE9qYINpseX+EFg=\", false, function () {\n  return [useFreq, useNavigate, message.useMessage];\n});\n_c = Wave;\nexport default Wave;\nvar _c;\n$RefreshReg$(_c, \"Wave\");","map":{"version":3,"names":["useState","useEffect","Link","useNavigate","useFreq","waveDrawLoop","WaveCanvas","RefTable","CaliTable","Slider","Button","Col","Row","Flex","Dropdown","Space","Modal","Collapse","message","DownOutlined","jsxDEV","_jsxDEV","Fragment","_Fragment","items","key","label","Wave","currentVowelIdx","refFreqArray","_s","_refFreqArray$current","_refFreqArray$current2","_freqData$customFrequ","_freqData$caliBaselin","freqData","updateFreqData","navigate","currentVowel","vowel","refFreq","freq","defaultFreq","customFrequencies","caliBaseline","waveIsPaused","setWaveIsPaused","pos","setPos","messageApi","contextHolder","useMessage","refOpen","setRefOpen","caliOpen","setCaliOpen","length","error","setTimeout","text","children","to","fileName","_jsxFileName","lineNumber","columnNumber","onClick","console","log","handlePauseWave","e","handleJumpToRef","handleJumpToCustom","handleSetCurrentAsCustom","newCustomFrequencies","success","handleOnChangeSlider","value","open","type","content","handleJumpToCalibratedTarget","undefined","Math","round","style","width","gap","margin","menu","disabled","className","span","marginLeft","marginTop","draw","isPaused","min","max","onChange","defaultValue","tooltip","title","centered","onOk","onCancel","footer","_c","$RefreshReg$"],"sources":["D:/Project/UC_Trains_Voice/react-demo/src/gavt/Wave/Wave.jsx"],"sourcesContent":["import { useState, useEffect } from \"react\";\r\nimport { Link, useNavigate } from \"react-router-dom\";\r\nimport { useFreq } from \"../FreqContext\";\r\n\r\nimport waveDrawLoop from './lib/waveDrawLoop.js';\r\nimport WaveCanvas from './WaveCanvas.jsx';\r\nimport RefTable from '../table/RefTable';\r\nimport CaliTable from '../table/CaliTable';\r\nimport './Wave.css';\r\n\r\nimport { Slider, Button, Col, Row, Flex, Dropdown, Space, Modal, Collapse, message } from \"antd\";\r\nimport { DownOutlined } from '@ant-design/icons';\r\nimport 'antd/dist/reset.css'; \r\n\r\nconst items = [\r\n    {\r\n        key: '0',\r\n        label: 'Baseline',\r\n    },\r\n    {\r\n      key: '1',\r\n      label: 'Moderately Darker (Baseline * 0.92)',\r\n    },\r\n    {\r\n      key: '2',\r\n      label: 'Slightly Darker (Baseline * 0.98)',\r\n    },\r\n    {\r\n      key: '3',\r\n      label: 'Slightly Brighter (Baseline * 1.02)',\r\n    },\r\n    {\r\n        key: '4',\r\n        label: 'Moderately Brighter (Baseline * 1.08)',\r\n      },\r\n];\r\n\r\nconst Wave = ({currentVowelIdx, refFreqArray}) => {\r\n    const { freqData, updateFreqData } = useFreq();\r\n    const navigate = useNavigate();\r\n    \r\n    const currentVowel = refFreqArray?.[currentVowelIdx]?.vowel || '';\r\n    const refFreq = refFreqArray?.[currentVowelIdx]?.freq || 0;\r\n    const defaultFreq = freqData?.customFrequencies?.[currentVowel] || freqData?.caliBaseline?.[currentVowel] || refFreq || 1500;\r\n\r\n    const [waveIsPaused, setWaveIsPaused] = useState(false);\r\n    const [pos, setPos] = useState( defaultFreq );\r\n    const [messageApi, contextHolder] = message.useMessage();\r\n\r\n    // For Modals\r\n    const [refOpen, setRefOpen] = useState(false);\r\n    const [caliOpen, setCaliOpen] = useState(false);\r\n\r\n    useEffect(() => {\r\n        if (!refFreqArray || refFreqArray.length === 0 || currentVowelIdx >= refFreqArray.length) {\r\n          message.error('No vowel data provided. Please select vowels first. Redirecting to home page...');\r\n          setTimeout(() => {\r\n            navigate('/gavt');\r\n          }, 2000);\r\n        }\r\n      }, [refFreqArray, currentVowelIdx, navigate]);\r\n\r\n    const text =\r\n        <>\r\n            We provide 3 types of values: Referenced, Calibrated, and Customized. You can jump to any of these target by clicking the buttons below. If the button is disabled,\r\n            it means you haven't set the corresponding value yet. To set a customized target, you can drag the slider below the waveform to the desired position, and click the button \"Set Current Value as Customized Target\".\r\n            To set a calibrated target, please start from the <Link to=\"/gavt/calibrate\">calibration routine</Link>. Just record your voice and follow the instructions, then the calibrated values will be automatically calculated.\r\n            You can also batch set calibrated and customized values manually <a onClick={()=>setCaliOpen(true)}>here</a>.\r\n        </>\r\n\r\n    useEffect(() => {\r\n        if (defaultFreq) {\r\n            setPos(defaultFreq);\r\n            console.log(`Default Frequency is set to ${defaultFreq} Hz. currentVowel is ${currentVowel}.`)\r\n        }\r\n    }, [defaultFreq, currentVowel]);\r\n\r\n    useEffect(() => {\r\n        if (freqData.customFrequencies[currentVowel]) {\r\n            setPos(freqData.customFrequencies[currentVowel]);\r\n        }\r\n    }, [freqData.customFrequencies, currentVowel]);\r\n\r\n    const handlePauseWave = (e) => setWaveIsPaused(!waveIsPaused)\r\n\r\n    const handleJumpToRef = () => setPos(refFreq || 1500);\r\n\r\n    const handleJumpToCustom = () => {\r\n        setPos(freqData.customFrequencies[currentVowel]);\r\n    };\r\n\r\n    const handleSetCurrentAsCustom = () => {\r\n        const newCustomFrequencies = { ...freqData.customFrequencies, [currentVowel]: pos };\r\n        updateFreqData('customFrequencies', newCustomFrequencies);\r\n        console.log(`Freq Data: ${freqData.customFrequencies[currentVowel]}`)\r\n        success(pos);\r\n      };\r\n    \r\n    const handleOnChangeSlider = (value) => {\r\n        setPos(value)\r\n    };\r\n\r\n    const success = (pos) => {\r\n        messageApi.open({\r\n          type: 'success',\r\n          content: 'Successfully set the customized target frequency to ' + pos + ' Hz.',\r\n        });\r\n    };\r\n\r\n    const handleJumpToCalibratedTarget = (e) => {\r\n        const caliBaseline = freqData.caliBaseline[currentVowel];\r\n        if (caliBaseline !== undefined && caliBaseline !== '') {\r\n            switch (e.key) {\r\n                case '0':\r\n                    setPos(caliBaseline);\r\n                    break;\r\n                case '1':\r\n                    setPos(Math.round(caliBaseline * 0.92));\r\n                    break;\r\n                case '2':\r\n                    setPos(Math.round(caliBaseline * 0.98));\r\n                    break;\r\n                case '3':\r\n                    setPos(Math.round(caliBaseline * 1.02));\r\n                    break;\r\n                case '4':\r\n                    setPos(Math.round(caliBaseline * 1.08));\r\n                    break;\r\n                default:\r\n                    setPos(Math.round(caliBaseline));\r\n            }\r\n        }\r\n        console.log('Current Vowel:', currentVowel);\r\n        console.log('Custom Frequencies:', freqData.customFrequencies);\r\n        console.log('Calibrated Baseline:', freqData.caliBaseline);\r\n\r\n    }\r\n\r\n    return (\r\n        <>\r\n            {contextHolder}\r\n            <div style={{ width: '70%' }}>\r\n                <Collapse\r\n                    items={[{ key: '1', label: 'Instructions', children: <div>{text}</div> }]}\r\n                />\r\n            </div>\r\n\r\n            <Flex gap=\"small\" style={{margin:'10px'}}>\r\n                <Button \r\n                    onClick={handleJumpToRef}\r\n                >\r\n                    Jump to Referenced Value\r\n                </Button>\r\n\r\n                <Dropdown\r\n                    menu={{\r\n                        items,\r\n                        onClick: handleJumpToCalibratedTarget\r\n                    }}\r\n                    disabled={freqData.caliBaseline[currentVowel] === undefined || freqData.caliBaseline[currentVowel] === ''}\r\n                >\r\n                    <Button>\r\n                        <Space>\r\n                            Jump to Calibrated Value\r\n                            <DownOutlined />\r\n                        </Space>\r\n                    </Button>\r\n                    \r\n                </Dropdown>\r\n\r\n                <Button \r\n                    onClick={handleJumpToCustom}\r\n                    // disabled={freqData.customFrequencies[currentVowel] === '' || freqData.customFrequencies[currentVowel] === undefined}\r\n                >\r\n                    Jump to Customized Value \r\n                </Button>\r\n            </Flex>\r\n            <div className=\"wlMainParent\">\r\n                <Row>\r\n                    <Col span={24}>\r\n                        <span className=\"label\">Frequency Value at Current Position: {pos} Hz</span>\r\n                        <Button \r\n                            onClick={ handleSetCurrentAsCustom }\r\n                            style = {{ marginLeft: '10px' }}\r\n                        >\r\n                            Set Curret Value as Customized Target\r\n                        </Button>\r\n                    </Col>\r\n                </Row>\r\n                <Row>\r\n                    <Col span={24}>\r\n                        <span className=\"label\">Waveform Play Control: </span>\r\n                        <Button\r\n                            onClick={ handlePauseWave }\r\n                            style={{ marginTop: '10px', marginLeft: '10px'}}\r\n                            type=\"primary\"\r\n                        >\r\n                            {(waveIsPaused) ? \"Play\" : \"Pause\"}\r\n                        </Button>\r\n                    </Col>\r\n                </Row>\r\n                <Row>\r\n                    <Col span={24}>\r\n                        <div className=\"canvasandslider\">\r\n                            <WaveCanvas\r\n                                className=\"waveCanvas\"\r\n                                draw={waveDrawLoop}\r\n                                isPaused={waveIsPaused}\r\n                            />\r\n                            <Slider\r\n                                className=\"custom-slider\"\r\n                                min={0}\r\n                                max={4096}\r\n                                value={pos}\r\n                                onChange={handleOnChangeSlider}\r\n                                defaultValue={1500}\r\n                                style={{ margin: 0}}\r\n                                tooltip={{open: false}}\r\n                            />\r\n                        </div>\r\n                    </Col>\r\n                </Row>\r\n            </div>\r\n            <Modal\r\n                title=\"Reference Frequency Values\"\r\n                centered\r\n                open={refOpen}\r\n                onOk={() => setRefOpen(false)}\r\n                onCancel={() => setRefOpen(false)}\r\n                width={1000}\r\n                footer={[\r\n                <Button key=\"submit\" type=\"primary\" onClick={() => setRefOpen(false)}>\r\n                    OK\r\n                </Button>\r\n                ]}\r\n            >\r\n                <RefTable />\r\n            </Modal>\r\n            <Modal\r\n                title=\"Calibrated Frequency Values\"\r\n                centered\r\n                open={caliOpen}\r\n                onOk={() => setCaliOpen(false)}\r\n                onCancel={() => setCaliOpen(false)}\r\n                width={1000}\r\n                footer={[\r\n                <Button key=\"submit\" type=\"primary\" onClick={() => setCaliOpen(false)}>\r\n                    OK\r\n                </Button>\r\n                ]}\r\n            >\r\n                <CaliTable />\r\n            </Modal>\r\n        </>\r\n    )\r\n}\r\n\r\nexport default Wave;"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}