{"ast":null,"code":"var _jsxFileName = \"/Users/chrishaack/UC_Trains_Voice/react-demo/src/Canvas/StairVol.tsx\",\n  _s = $RefreshSig$();\nimport React, { useEffect, useState } from 'react';\nimport { map, drawBackground } from '../function/canvasDefault';\nimport { Col, Row, Slider } from 'antd';\n// types\nimport { useCanvasHooks } from '../hooks/useCanvasHooks'; // variables and functions\nimport { useTemString } from '../hooks/useTemString';\nimport useCanvasMouseText from '../hooksUseEffect/useCanvasMouseText';\nimport useCanvasRetry from '../hooksUseEffect/useCanvasRetry';\nimport useCanvasUpdatePitch from '../hooksUseEffect/useCanvasUpdatePitch';\nimport useCanvasAdjustHeight from '../hooksUseEffect/useCanvasAdjustHeight';\nimport useCanvasInitializeGetPitch from '../hooksUseEffect/useCanvasInitializeGetPitch';\nimport useCanvasChangeHzAndNotes from '../hooksUseEffect/useCanvasChangeHzAndNotes';\nimport useCanvasRedrawBackground from '../hooksUseEffect/useCanvasRedrawBackground';\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst Stair = ({\n  volume,\n  historyMode,\n  LAMP_COLORS,\n  setMaxLyricCount,\n  initialRange,\n  divisor,\n  txtShow,\n  isRetry,\n  setPlayingPause,\n  playLyricCount,\n  config,\n  COLORS,\n  size,\n  isPlaying,\n  showNotesPar,\n  setShowNotesPar\n}) => {\n  _s();\n  var _notesLabel$map, _freqLabel$map, _freqLabel$map2;\n  const {\n    pitch,\n    setPitch,\n    mouseHeight,\n    realVoiceColor,\n    targetVoiceColor,\n    closeVoiceColor,\n    ballYCurr,\n    canvasRef,\n    rectWidth,\n    CanvasLength,\n    canvasHeight,\n    setCanvasHeight,\n    showNotes,\n    setShowNotes,\n    offset,\n    currentX,\n    setCurrentX,\n    initialcurrentX,\n    notesLabel,\n    setNotesLabel,\n    freqLabel,\n    setFreqLabel,\n    updateBallY,\n    updateCanvasHeight,\n    handleMouseMove\n  } = useCanvasHooks(size, divisor, COLORS, initialRange);\n  const {\n    syllablesString\n  } = useTemString();\n  const [inputValue, setInputValue] = useState([110, 200]);\n  const desiredLength = Math.floor(size[1] / divisor);\n\n  // Initialization curve\n  const initialColorChangesFull = new Array(CanvasLength).fill(false);\n  const initialBallHistoryFull = new Array(CanvasLength).fill(NaN);\n  const [colorChangesFull, setColorChangesFull] = useState(initialColorChangesFull);\n  const [ballHistoryFull, setBallHistoryFull] = useState(initialBallHistoryFull);\n  const [ballSizeHistoryFull, setBallSizeHistoryFull] = useState(initialBallHistoryFull);\n  const resetStatesFull = () => {\n    setColorChangesFull([...initialColorChangesFull]);\n    setBallHistoryFull([...initialBallHistoryFull]);\n    setCurrentX(initialcurrentX);\n    setBallSizeHistoryFull([...initialBallHistoryFull]);\n  };\n  const initialPitchArrayCus = new Array(desiredLength).fill(NaN);\n  const [pitchArrayCus, setPitchArrayCus] = useState(initialPitchArrayCus);\n  const [shouldDisabled, setShouldDisabled] = useState(false);\n\n  // +++++++++++++++++++++++++++++++++++++++++++++++++\n  // Setting the stair curve \n  const onChange = newValue => {\n    setInputValue(newValue);\n    // setA(a+1);\n  };\n\n  const updatePitchArrayCus = () => {\n    const partLength = Math.floor(CanvasLength / 5);\n    const lastPartStart = partLength * 4;\n    const midValue = (inputValue[0] + inputValue[1]) / 2;\n    const updatedArray = new Array(CanvasLength).fill(inputValue[0], 0, partLength).fill(midValue, partLength, 2 * partLength).fill(inputValue[1], 2 * partLength, 3 * partLength).fill(midValue, 3 * partLength, 4 * partLength).fill(inputValue[0], lastPartStart, CanvasLength);\n    setPitchArrayCus(updatedArray);\n  };\n  useEffect(() => {\n    updatePitchArrayCus();\n  }, [inputValue]);\n\n  // +++++++++++++++++++++++++++++++++++++++++++++++++\n  // Hooks useEffect parts \\\\ \n\n  // initialize get pitch function + pause + draw background\n  useCanvasInitializeGetPitch(config, setPitch, updateCanvasHeight, setPlayingPause, canvasRef, initialRange, showNotes);\n\n  // set canvas size for different resolutions\n  useCanvasAdjustHeight(canvasRef, setCanvasHeight);\n\n  // store current pitch\n  useCanvasUpdatePitch(isPlaying, pitch, updateBallY);\n\n  // update mouse text\n  useCanvasMouseText(canvasRef, mouseHeight, initialRange);\n\n  // change Notes and hz display\n  useCanvasChangeHzAndNotes(setShowNotes, showNotes, showNotesPar, canvasRef, initialRange, setNotesLabel, setFreqLabel, canvasHeight);\n\n  // retry\n  useCanvasRetry(isRetry, divisor, setPlayingPause, resetStatesFull);\n\n  // redraw background when hz or notes changed\n  useCanvasRedrawBackground(canvasRef, showNotesPar, initialRange);\n\n  // +++++++++++++++++++++++++++++++++++++++++++++++++\n  // Unique useEffect parts \\\\\n\n  // initialize max lyric and stair array\n  useEffect(() => {\n    setMaxLyricCount(5);\n    updatePitchArrayCus();\n  }, []);\n\n  // draw two curves\n  useEffect(() => {\n    const canvas = canvasRef.current;\n    if (canvas) {\n      const ctx = canvas.getContext('2d');\n      if (ctx) {\n        const textX = canvas.width - 100;\n        const textY = 20;\n        ctx.clearRect(0, 0, textX - 5, canvas.height);\n        ctx.clearRect(0, textY + 5, canvas.width, canvas.height - (textY + 5));\n        drawBackground(canvasRef, initialRange[1], initialRange[0], showNotesPar);\n\n        // stair \n        for (let i = 0 + offset; i < pitchArrayCus.length; i++) {\n          const mappedJsonValue = map(pitchArrayCus[i], initialRange[0], initialRange[1], size[0], 0);\n          // Set fill color based on condition\n          if (colorChangesFull[i]) {\n            ctx.fillStyle = closeVoiceColor;\n          } else {\n            ctx.fillStyle = targetVoiceColor;\n          }\n          // Draw a rectangle\n          ctx.fillRect(i, mappedJsonValue, rectWidth, rectWidth);\n        }\n        let temTxtShow = false;\n        if (txtShow === \"false\") {\n          temTxtShow = false;\n        } else {\n          temTxtShow = true;\n        }\n        if (temTxtShow) {\n          const fraction = size[1] / 5;\n          const heights = [inputValue[0], (inputValue[0] + inputValue[1]) / 2, inputValue[1], (inputValue[0] + inputValue[1]) / 2, inputValue[0]];\n          ctx.fillStyle = \"black\";\n          ctx.font = \"16px Arial\";\n          for (let j = 0; j <= 4; j++) {\n            let xPosition = fraction * (j + 1) - fraction / 2;\n            let yPosition = map(heights[j] + 5, initialRange[0], initialRange[1], size[0], 0);\n            ctx.fillText(syllablesString[playLyricCount][j], xPosition, yPosition);\n          }\n        }\n\n        // Draw the ball's historical positions\n        // for (var i = 0; i < ballHistoryFull.length; i++) {\n        //   // for (var i = currentX; i > 0; i--) {\n        //   const mappedValue = map(ballHistoryFull[i], initialRange[0], initialRange[1], size[0], -1);\n\n        //   ctx.beginPath();\n        //   ctx.arc(i, mappedValue, 5, 0, 2 * Math.PI);\n        //   ctx.fillStyle = realVoiceColor;\n        //   ctx.fill();\n        //   ctx.closePath();\n        // }\n        for (var i = 0; i < ballHistoryFull.length; i++) {\n          ctx.beginPath();\n          const mappedValue = map(ballHistoryFull[i], initialRange[0], initialRange[1], size[0], -1);\n          let ballSize;\n          if (historyMode === 'Size' || historyMode === 'Mixed') {\n            if (ballSizeHistoryFull[i] < -80) {\n              ballSize = 3;\n            } else if (ballSizeHistoryFull[i] > -50) {\n              ballSize = 7;\n            } else {\n              ballSize = 5;\n            }\n          } else {\n            ballSize = 5;\n          }\n          let ballColor;\n          if (historyMode === 'Color' || historyMode === 'Mixed') {\n            if (ballSizeHistoryFull[i] < -80) {\n              ballColor = LAMP_COLORS[0];\n            } else if (ballSizeHistoryFull[i] > -50) {\n              ballColor = LAMP_COLORS[2];\n            } else {\n              ballColor = LAMP_COLORS[1];\n            }\n          } else {\n            ballColor = realVoiceColor;\n          }\n          ctx.arc(i, mappedValue, ballSize, 0, 2 * Math.PI);\n          ctx.fillStyle = ballColor;\n          ctx.fill();\n          ctx.closePath();\n        }\n\n        // Plot current value\n        ctx.beginPath();\n        ctx.arc(currentX * divisor, ballYCurr, 10, 0, 2 * Math.PI);\n        ctx.fillStyle = \"black\";\n        ctx.fill();\n        ctx.closePath();\n      }\n    }\n  }, [COLORS, txtShow, pitchArrayCus, initialRange, ballHistoryFull, playLyricCount, showNotesPar]);\n\n  // next button\n  useEffect(() => {\n    setPlayingPause();\n    resetStatesFull();\n  }, [playLyricCount]);\n\n  // Update ball history\n  const updateBallHistoryFull = (pitch, volumeValue) => {\n    let tempHistoryFull = [...ballHistoryFull];\n    let ctxdiv = currentX * divisor;\n    let ballYtem = map(pitch, initialRange[0], initialRange[1], size[0], -1);\n    let tempSizeHistoryFull = [...ballSizeHistoryFull];\n    if (currentX < desiredLength - 1) {\n      setShouldDisabled(false);\n      tempHistoryFull[ctxdiv] = pitch;\n      tempSizeHistoryFull[ctxdiv] = volumeValue;\n      setColorChangesFull(currentColors => {\n        const newColors = [...currentColors];\n        const mappedJsonValue = map(pitchArrayCus[ctxdiv], initialRange[0], initialRange[1], size[0], 0);\n        const difference = Math.abs(mappedJsonValue - ballYtem);\n        if (difference <= 50 && !isNaN(difference)) {\n          for (let j = ctxdiv - divisor; j <= ctxdiv + divisor && j < CanvasLength; j++) {\n            newColors[j] = true;\n          }\n        }\n        return newColors;\n      });\n    } else {\n      setShouldDisabled(true);\n      if (!shouldDisabled) {\n        setPlayingPause();\n      }\n    }\n    setCurrentX(currentX + 1);\n    setBallHistoryFull(tempHistoryFull);\n    setBallSizeHistoryFull(tempSizeHistoryFull);\n  };\n  useEffect(() => {\n    // Only update ballHistory at currentX position\n    if (isPlaying) {\n      if (pitch !== null) {\n        updateBallHistoryFull(pitch, volume);\n        // updateBallSizeHistoryFull(volume);\n      } else {\n        updateBallHistoryFull(0, 0);\n        // updateBallSizeHistoryFull(0);\n      }\n    }\n  }, [pitch, isPlaying]);\n\n  // restart\n  useEffect(() => {\n    if (shouldDisabled && isPlaying) {\n      resetStatesFull();\n      setShouldDisabled(false);\n    }\n  }, [isPlaying]);\n\n  // color\n  //   const updateBallSizeHistoryFull = (volumeVal: number) => {\n  //     let tempHistoryFull = [...ballSizeHistoryFull];\n  //     tempHistoryFull.splice(0, divisor);\n  //     for (let i = 0; i < divisor - 1; i++) {\n  //         tempHistoryFull.push(NaN);\n  //     }\n  //     tempHistoryFull.push(volumeVal);\n  //     setBallSizeHistoryFull(tempHistoryFull);\n  // };\n\n  return /*#__PURE__*/_jsxDEV(Row, {\n    style: {\n      maxHeight: \"27vw\",\n      marginBottom: \"5vw\",\n      maxWidth: \"100vw\"\n    },\n    children: [/*#__PURE__*/_jsxDEV(Col, {\n      span: 1\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 345,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(Col, {\n      span: 22,\n      children: [/*#__PURE__*/_jsxDEV(\"div\", {\n        className: \"yAxisArea\",\n        style: {\n          height: canvasHeight\n        },\n        children: /*#__PURE__*/_jsxDEV(Row, {\n          style: {\n            height: canvasHeight\n          },\n          children: [/*#__PURE__*/_jsxDEV(Col, {\n            span: 8,\n            children: showNotesPar ? /*#__PURE__*/_jsxDEV(\"div\", {\n              style: {\n                height: canvasHeight\n              },\n              className: \"yAxisLabel\",\n              children: \"Pitch (Notes)\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 353,\n              columnNumber: 19\n            }, this) : /*#__PURE__*/_jsxDEV(\"div\", {\n              style: {\n                height: canvasHeight\n              },\n              className: \"yAxisLabel\",\n              children: \"Pitch (Hz)\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 354,\n              columnNumber: 19\n            }, this)\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 351,\n            columnNumber: 13\n          }, this), /*#__PURE__*/_jsxDEV(Col, {\n            span: 8,\n            children: /*#__PURE__*/_jsxDEV(\"div\", {\n              className: \"yAxisNumbers\",\n              style: {\n                height: canvasHeight * 1.039\n              },\n              children: showNotesPar ? (_notesLabel$map = notesLabel === null || notesLabel === void 0 ? void 0 : notesLabel.map((note, index) => /*#__PURE__*/_jsxDEV(\"div\", {\n                children: note\n              }, index, false, {\n                fileName: _jsxFileName,\n                lineNumber: 359,\n                columnNumber: 54\n              }, this))) !== null && _notesLabel$map !== void 0 ? _notesLabel$map : [] : (_freqLabel$map = freqLabel === null || freqLabel === void 0 ? void 0 : freqLabel.map((freq, index) => /*#__PURE__*/_jsxDEV(\"div\", {\n                children: freq\n              }, index, false, {\n                fileName: _jsxFileName,\n                lineNumber: 360,\n                columnNumber: 53\n              }, this))) !== null && _freqLabel$map !== void 0 ? _freqLabel$map : []\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 357,\n              columnNumber: 15\n            }, this)\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 356,\n            columnNumber: 13\n          }, this), /*#__PURE__*/_jsxDEV(Col, {\n            span: 8,\n            children: /*#__PURE__*/_jsxDEV(\"div\", {\n              className: \"yAxisLines\",\n              style: {\n                height: canvasHeight\n              },\n              children: (_freqLabel$map2 = freqLabel === null || freqLabel === void 0 ? void 0 : freqLabel.map((_, index) => /*#__PURE__*/_jsxDEV(\"div\", {}, void 0, false, {\n                fileName: _jsxFileName,\n                lineNumber: 366,\n                columnNumber: 19\n              }, this))) !== null && _freqLabel$map2 !== void 0 ? _freqLabel$map2 : []\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 364,\n              columnNumber: 15\n            }, this)\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 363,\n            columnNumber: 13\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 350,\n          columnNumber: 11\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 349,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n        style: {\n          height: canvasHeight\n        },\n        children: [/*#__PURE__*/_jsxDEV(\"canvas\", {\n          ref: canvasRef,\n          onMouseMove: handleMouseMove,\n          id: \"pitchCanvas\",\n          width: size[1],\n          height: size[0],\n          style: {\n            border: '1px solid #000'\n          }\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 374,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n          className: \"XAxisNum\",\n          style: {\n            top: canvasHeight,\n            width: canvasHeight * 3.486\n          },\n          children: [...Array(11)].map((_, index) => /*#__PURE__*/_jsxDEV(\"div\", {\n            style: {\n              position: 'relative'\n            },\n            children: [/*#__PURE__*/_jsxDEV(\"div\", {\n              className: \"timeMarkerLine\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 392,\n              columnNumber: 17\n            }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n              className: \"timeMarkerNum\",\n              children: (15 / (divisor / 4) * (index / 10)).toFixed(1)\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 393,\n              columnNumber: 17\n            }, this)]\n          }, index, true, {\n            fileName: _jsxFileName,\n            lineNumber: 391,\n            columnNumber: 15\n          }, this))\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 382,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n          style: {\n            top: canvasHeight * 1.12,\n            width: canvasHeight * 3.486\n          },\n          className: \"XAxis\",\n          children: /*#__PURE__*/_jsxDEV(\"div\", {\n            children: \"Time (Seconds)\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 406,\n            columnNumber: 13\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 399,\n          columnNumber: 11\n        }, this)]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 373,\n        columnNumber: 9\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 347,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(Col, {\n      span: 1,\n      children: /*#__PURE__*/_jsxDEV(\"div\", {\n        children: /*#__PURE__*/_jsxDEV(Slider, {\n          vertical: true,\n          range: true,\n          min: initialRange[0],\n          max: initialRange[1],\n          style: {\n            marginTop: 0,\n            height: canvasHeight\n          },\n          onChange: onChange,\n          defaultValue: inputValue\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 414,\n          columnNumber: 11\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 413,\n        columnNumber: 9\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 412,\n      columnNumber: 7\n    }, this)]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 344,\n    columnNumber: 5\n  }, this);\n};\n_s(Stair, \"MB/bVkyAnWcSp11EUbnDm8+MeJI=\", false, function () {\n  return [useCanvasHooks, useTemString, useCanvasInitializeGetPitch, useCanvasAdjustHeight, useCanvasUpdatePitch, useCanvasMouseText, useCanvasChangeHzAndNotes, useCanvasRetry, useCanvasRedrawBackground];\n});\n_c = Stair;\nexport default Stair;\nvar _c;\n$RefreshReg$(_c, \"Stair\");","map":{"version":3,"names":["React","useEffect","useState","map","drawBackground","Col","Row","Slider","useCanvasHooks","useTemString","useCanvasMouseText","useCanvasRetry","useCanvasUpdatePitch","useCanvasAdjustHeight","useCanvasInitializeGetPitch","useCanvasChangeHzAndNotes","useCanvasRedrawBackground","jsxDEV","_jsxDEV","Stair","volume","historyMode","LAMP_COLORS","setMaxLyricCount","initialRange","divisor","txtShow","isRetry","setPlayingPause","playLyricCount","config","COLORS","size","isPlaying","showNotesPar","setShowNotesPar","_s","_notesLabel$map","_freqLabel$map","_freqLabel$map2","pitch","setPitch","mouseHeight","realVoiceColor","targetVoiceColor","closeVoiceColor","ballYCurr","canvasRef","rectWidth","CanvasLength","canvasHeight","setCanvasHeight","showNotes","setShowNotes","offset","currentX","setCurrentX","initialcurrentX","notesLabel","setNotesLabel","freqLabel","setFreqLabel","updateBallY","updateCanvasHeight","handleMouseMove","syllablesString","inputValue","setInputValue","desiredLength","Math","floor","initialColorChangesFull","Array","fill","initialBallHistoryFull","NaN","colorChangesFull","setColorChangesFull","ballHistoryFull","setBallHistoryFull","ballSizeHistoryFull","setBallSizeHistoryFull","resetStatesFull","initialPitchArrayCus","pitchArrayCus","setPitchArrayCus","shouldDisabled","setShouldDisabled","onChange","newValue","updatePitchArrayCus","partLength","lastPartStart","midValue","updatedArray","canvas","current","ctx","getContext","textX","width","textY","clearRect","height","i","length","mappedJsonValue","fillStyle","fillRect","temTxtShow","fraction","heights","font","j","xPosition","yPosition","fillText","beginPath","mappedValue","ballSize","ballColor","arc","PI","closePath","updateBallHistoryFull","volumeValue","tempHistoryFull","ctxdiv","ballYtem","tempSizeHistoryFull","currentColors","newColors","difference","abs","isNaN","style","maxHeight","marginBottom","maxWidth","children","span","fileName","_jsxFileName","lineNumber","columnNumber","className","note","index","freq","_","ref","onMouseMove","id","border","top","position","toFixed","vertical","range","min","max","marginTop","defaultValue","_c","$RefreshReg$"],"sources":["/Users/chrishaack/UC_Trains_Voice/react-demo/src/Canvas/StairVol.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { map, drawBackground } from '../function/canvasDefault';\nimport { Col, Row, Slider } from 'antd';\n\nimport { CONFIG, COLORS } from '../types/configTypes'; // types\nimport { useCanvasHooks } from '../hooks/useCanvasHooks'; // variables and functions\nimport { useTemString } from '../hooks/useTemString';\n\nimport useCanvasMouseText from '../hooksUseEffect/useCanvasMouseText';\nimport useCanvasRetry from '../hooksUseEffect/useCanvasRetry';\nimport useCanvasUpdatePitch from '../hooksUseEffect/useCanvasUpdatePitch';\nimport useCanvasAdjustHeight from '../hooksUseEffect/useCanvasAdjustHeight';\nimport useCanvasInitializeGetPitch from '../hooksUseEffect/useCanvasInitializeGetPitch';\nimport useCanvasChangeHzAndNotes from '../hooksUseEffect/useCanvasChangeHzAndNotes';\nimport useCanvasRedrawBackground from '../hooksUseEffect/useCanvasRedrawBackground';\n\ninterface StairProps {\n  size: number[];\n  config: CONFIG;\n  COLORS: COLORS;\n  isPlaying: boolean;\n  showNotesPar: boolean;\n  playLyricCount: number;\n  isRetry: boolean;\n  setPlayingPause: () => void;\n  txtShow: string;\n  divisor: number;\n  initialRange: number[];\n  setMaxLyricCount: (num: number) => void;\n  setShowNotesPar: (boo: boolean) => void;\n\n  volume: number;\n  historyMode: string;\n  LAMP_COLORS: string[];\n}\n\nconst Stair: React.FC<StairProps> = ({\n  volume,historyMode,LAMP_COLORS,\n  setMaxLyricCount,\n  initialRange,\n  divisor,\n  txtShow,\n  isRetry,\n  setPlayingPause,\n  playLyricCount,\n  config,\n  COLORS,\n  size,\n  isPlaying,\n  showNotesPar,\n  setShowNotesPar,\n\n}) => {\n  const {\n    pitch,\n    setPitch,\n    mouseHeight,\n    realVoiceColor,\n    targetVoiceColor,\n    closeVoiceColor,\n    ballYCurr,\n    canvasRef,\n    rectWidth,\n    CanvasLength,\n    canvasHeight,\n    setCanvasHeight,\n    showNotes,\n    setShowNotes,\n    offset,\n    currentX,\n    setCurrentX,\n    initialcurrentX,\n    notesLabel,\n    setNotesLabel,\n    freqLabel,\n    setFreqLabel,\n\n    updateBallY,\n    updateCanvasHeight,\n    handleMouseMove,\n  } = useCanvasHooks(size, divisor, COLORS, initialRange);\n\n  const {\n    syllablesString,\n  } = useTemString();\n\n\n\n  const [inputValue, setInputValue] = useState<number[]>([110, 200]);\n  const desiredLength = Math.floor(size[1] / divisor);\n\n  // Initialization curve\n  const initialColorChangesFull = new Array(CanvasLength).fill(false);\n  const initialBallHistoryFull = new Array(CanvasLength).fill(NaN);\n  const [colorChangesFull, setColorChangesFull] = useState<boolean[]>(initialColorChangesFull);\n  const [ballHistoryFull, setBallHistoryFull] = useState<number[]>(initialBallHistoryFull);\n  const [ballSizeHistoryFull, setBallSizeHistoryFull] = useState<number[]>(initialBallHistoryFull);\n  const resetStatesFull = () => {\n    setColorChangesFull([...initialColorChangesFull]);\n    setBallHistoryFull([...initialBallHistoryFull]);\n    setCurrentX(initialcurrentX);\n    setBallSizeHistoryFull([...initialBallHistoryFull]);\n  };\n  const initialPitchArrayCus = new Array(desiredLength).fill(NaN);\n  const [pitchArrayCus, setPitchArrayCus] = useState<number[]>(initialPitchArrayCus);\n  const [shouldDisabled, setShouldDisabled] = useState<boolean>(false);\n\n  \n  // +++++++++++++++++++++++++++++++++++++++++++++++++\n  // Setting the stair curve \n  const onChange = (newValue: number[]) => {\n    setInputValue(newValue);\n    // setA(a+1);\n  };\n  const updatePitchArrayCus = () => {\n    const partLength = Math.floor(CanvasLength / 5);\n    const lastPartStart = partLength * 4;\n    const midValue = (inputValue[0] + inputValue[1]) / 2;\n\n    const updatedArray = new Array(CanvasLength)\n      .fill(inputValue[0], 0, partLength)\n      .fill(midValue, partLength, 2 * partLength)\n      .fill(inputValue[1], 2 * partLength, 3 * partLength)\n      .fill(midValue, 3 * partLength, 4 * partLength)\n      .fill(inputValue[0], lastPartStart, CanvasLength);\n\n    setPitchArrayCus(updatedArray);\n  }\n  useEffect(() => {\n    updatePitchArrayCus();\n  }, [inputValue]);\n\n\n  // +++++++++++++++++++++++++++++++++++++++++++++++++\n  // Hooks useEffect parts \\\\ \n\n  // initialize get pitch function + pause + draw background\n  useCanvasInitializeGetPitch(config, setPitch, updateCanvasHeight, setPlayingPause, canvasRef, initialRange, showNotes);\n\n  // set canvas size for different resolutions\n  useCanvasAdjustHeight(canvasRef, setCanvasHeight);\n\n  // store current pitch\n  useCanvasUpdatePitch(isPlaying, pitch, updateBallY);\n\n  // update mouse text\n  useCanvasMouseText(canvasRef, mouseHeight, initialRange);\n\n  // change Notes and hz display\n  useCanvasChangeHzAndNotes(setShowNotes, showNotes, showNotesPar, canvasRef, initialRange, setNotesLabel, setFreqLabel, canvasHeight);\n\n  // retry\n  useCanvasRetry(isRetry, divisor, setPlayingPause, resetStatesFull);\n\n  // redraw background when hz or notes changed\n  useCanvasRedrawBackground(canvasRef, showNotesPar, initialRange);\n\n\n  // +++++++++++++++++++++++++++++++++++++++++++++++++\n  // Unique useEffect parts \\\\\n\n  // initialize max lyric and stair array\n  useEffect(() => {\n    setMaxLyricCount(5);\n    updatePitchArrayCus();\n  }, []);\n\n  // draw two curves\n  useEffect(() => {\n    const canvas = canvasRef.current;\n    if (canvas) {\n      const ctx = canvas.getContext('2d');\n      if (ctx) {\n        const textX = canvas.width - 100;\n        const textY = 20;\n        ctx.clearRect(0, 0, textX - 5, canvas.height);\n        ctx.clearRect(0, textY + 5, canvas.width, canvas.height - (textY + 5));\n\n        drawBackground(canvasRef, initialRange[1], initialRange[0], showNotesPar);\n\n        // stair \n        for (let i = 0 + offset; i < pitchArrayCus.length; i++) {\n          const mappedJsonValue = map(pitchArrayCus[i], initialRange[0], initialRange[1], size[0], 0);\n          // Set fill color based on condition\n          if (colorChangesFull[i]) {\n            ctx.fillStyle = closeVoiceColor;\n          } else {\n            ctx.fillStyle = targetVoiceColor;\n          }\n          // Draw a rectangle\n          ctx.fillRect(i, mappedJsonValue, rectWidth, rectWidth);\n        }\n\n        let temTxtShow = false;\n        if (txtShow === \"false\") {\n          temTxtShow = false;\n        } else {\n          temTxtShow = true;\n        }\n\n        if (temTxtShow) {\n          const fraction = size[1] / 5;\n          const heights = [inputValue[0], (inputValue[0] + inputValue[1]) / 2, inputValue[1], (inputValue[0] + inputValue[1]) / 2, inputValue[0]];\n          ctx.fillStyle = \"black\";\n          ctx.font = \"16px Arial\";\n          for (let j = 0; j <= 4; j++) {\n            let xPosition = fraction * (j + 1) - (fraction / 2);\n            let yPosition = map(heights[j] + 5, initialRange[0], initialRange[1], size[0], 0);\n            ctx.fillText(syllablesString[playLyricCount][j], xPosition, yPosition);\n          }\n        }\n\n        // Draw the ball's historical positions\n        // for (var i = 0; i < ballHistoryFull.length; i++) {\n        //   // for (var i = currentX; i > 0; i--) {\n        //   const mappedValue = map(ballHistoryFull[i], initialRange[0], initialRange[1], size[0], -1);\n\n        //   ctx.beginPath();\n        //   ctx.arc(i, mappedValue, 5, 0, 2 * Math.PI);\n        //   ctx.fillStyle = realVoiceColor;\n        //   ctx.fill();\n        //   ctx.closePath();\n        // }\n        for (var i = 0; i < ballHistoryFull.length; i++) {\n          ctx.beginPath();\n          const mappedValue = map(ballHistoryFull[i], initialRange[0], initialRange[1], size[0], -1);\n\n          let ballSize;\n          if (historyMode === 'Size' || historyMode === 'Mixed') {\n              if (ballSizeHistoryFull[i] < -80) {\n                  ballSize = 3;\n              } else if (ballSizeHistoryFull[i] > -50) {\n                  ballSize = 7;\n              } else {\n                  ballSize = 5;\n              }\n          } else {\n              ballSize = 5;\n          }\n\n          let ballColor;\n          if (historyMode === 'Color' || historyMode === 'Mixed') {\n              if (ballSizeHistoryFull[i] < -80) {\n                  ballColor = LAMP_COLORS[0];\n              } else if (ballSizeHistoryFull[i] > -50) {\n                  ballColor = LAMP_COLORS[2];\n              } else {\n                  ballColor = LAMP_COLORS[1];\n              }\n          } else {\n              ballColor = realVoiceColor;\n          }\n\n          ctx.arc(i, mappedValue, ballSize, 0, 2 * Math.PI);\n          ctx.fillStyle = ballColor;\n          ctx.fill();\n          ctx.closePath();\n      }\n\n        // Plot current value\n        ctx.beginPath();\n        ctx.arc(currentX * divisor, ballYCurr, 10, 0, 2 * Math.PI);\n        ctx.fillStyle = \"black\";\n        ctx.fill();\n        ctx.closePath();\n\n      }\n    }\n  }, [COLORS, txtShow, pitchArrayCus, initialRange, ballHistoryFull, playLyricCount, showNotesPar]);\n\n  // next button\n  useEffect(() => {\n    setPlayingPause();\n    resetStatesFull();\n  }, [playLyricCount])\n\n  // Update ball history\n  const updateBallHistoryFull = (pitch: number,volumeValue:number) => {\n    let tempHistoryFull = [...ballHistoryFull];\n    let ctxdiv = currentX * divisor;\n    let ballYtem = map(pitch, initialRange[0], initialRange[1], size[0], -1)\n    let tempSizeHistoryFull = [...ballSizeHistoryFull];\n\n    if (currentX < desiredLength - 1) {\n      setShouldDisabled(false);\n      tempHistoryFull[ctxdiv] = pitch;\n      tempSizeHistoryFull[ctxdiv] = volumeValue;\n      setColorChangesFull(currentColors => {\n        const newColors = [...currentColors];\n        const mappedJsonValue = map(pitchArrayCus[ctxdiv], initialRange[0], initialRange[1], size[0], 0);\n        const difference = Math.abs(mappedJsonValue - ballYtem);\n        if (difference <= 50 && !isNaN(difference)) {\n          for (let j = ctxdiv - divisor; j <= ctxdiv + divisor && j < CanvasLength; j++) {\n            newColors[j] = true;\n          }\n        }\n        return newColors;\n      });\n\n    } else {\n      setShouldDisabled(true);\n      if (!shouldDisabled) {\n        setPlayingPause();\n      }\n    }\n    setCurrentX(currentX + 1);\n    setBallHistoryFull(tempHistoryFull);\n    setBallSizeHistoryFull(tempSizeHistoryFull);\n  };\n  useEffect(() => {\n    // Only update ballHistory at currentX position\n    if (isPlaying) {\n      if (pitch !== null) {\n        updateBallHistoryFull(pitch,volume);\n        // updateBallSizeHistoryFull(volume);\n      } else {\n        updateBallHistoryFull(0,0);\n        // updateBallSizeHistoryFull(0);\n      }\n    }\n  }, [pitch, isPlaying]);\n\n  // restart\n  useEffect(() => {\n    if (shouldDisabled && isPlaying) {\n      resetStatesFull();\n      setShouldDisabled(false);\n    }\n  }, [isPlaying]);\n\n  // color\n//   const updateBallSizeHistoryFull = (volumeVal: number) => {\n//     let tempHistoryFull = [...ballSizeHistoryFull];\n//     tempHistoryFull.splice(0, divisor);\n//     for (let i = 0; i < divisor - 1; i++) {\n//         tempHistoryFull.push(NaN);\n//     }\n//     tempHistoryFull.push(volumeVal);\n//     setBallSizeHistoryFull(tempHistoryFull);\n// };\n\n\n  return (\n    <Row style={{ maxHeight: \"27vw\", marginBottom: \"5vw\", maxWidth: \"100vw\" }}>\n      <Col span={1}>\n      </Col>\n      <Col span={22}>\n\n        <div className=\"yAxisArea\" style={{ height: canvasHeight }}>\n          <Row style={{ height: canvasHeight }}>\n            <Col span={8}>\n              {showNotesPar\n                ? <div style={{ height: canvasHeight }} className=\"yAxisLabel\">Pitch (Notes)</div>\n                : <div style={{ height: canvasHeight }} className=\"yAxisLabel\">Pitch (Hz)</div>}\n            </Col>\n            <Col span={8}>\n              <div className=\"yAxisNumbers\" style={{ height: canvasHeight * 1.039 }}>\n                {showNotesPar\n                  ? notesLabel?.map((note, index) => <div key={index}>{note}</div>) ?? []\n                  : freqLabel?.map((freq, index) => <div key={index}>{freq}</div>) ?? []}\n              </div>\n            </Col>\n            <Col span={8}>\n              <div className=\"yAxisLines\" style={{ height: canvasHeight }}>\n                {freqLabel?.map((_, index) => (\n                  <div></div>\n                )) ?? []}\n              </div>\n            </Col>\n          </Row>\n        </div>\n\n        <div style={{ height: canvasHeight }}>\n          <canvas\n            ref={canvasRef}\n            onMouseMove={handleMouseMove}\n            id=\"pitchCanvas\"\n            width={size[1]}\n            height={size[0]}\n            style={{ border: '1px solid #000' }}\n          ></canvas>\n          <div\n            className='XAxisNum'\n            style={{\n              top: canvasHeight,\n              width: canvasHeight * 3.486,\n\n            }}\n          >\n            {[...Array(11)].map((_, index) => (\n              <div key={index} style={{ position: 'relative' }}>\n                <div className=\"timeMarkerLine\" />\n                <span className='timeMarkerNum'>\n                  {((15 / (divisor / 4)) * (index / 10)).toFixed(1)}\n                </span>\n              </div>\n            ))}\n          </div>\n          <div\n            style={{\n              top: canvasHeight * (1.12),\n              width: canvasHeight * 3.486,\n            }}\n            className='XAxis'\n          >\n            <div>Time (Seconds)</div>\n\n          </div>\n\n        </div>\n      </Col>\n      <Col span={1}>\n        <div>\n          <Slider\n            vertical\n            range\n            min={initialRange[0]}\n            max={initialRange[1]}\n            style={{ marginTop: 0, height: canvasHeight }}\n            onChange={onChange}\n            defaultValue={inputValue} />\n        </div>\n      </Col>\n    </Row>\n  );\n}\n\nexport default Stair;"],"mappings":"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"},"metadata":{},"sourceType":"module","externalDependencies":[]}