{"version":3,"sources":["SongInfo.js","App.js","reportWebVitals.js","index.js"],"names":["SongInfo","this","props","songInfo","result","stops","speed_changes","length","className","map","message","renderStops","bpm_list","suggestion","renderSpeedChanges","React","Component","SliderWithTooltip","Slider","createSliderWithTooltip","updateHash","param","value","hash","queryString","parse","window","location","stringify","chartOptions","scales","yAxes","scaleLabel","display","labelString","xAxes","App","readSpeed","localStorage","setItem","getItem","state","songList","selectedSong","preferredReadSpeed","chartData","labels","datasets","label","fill","showLine","lineTension","backgroundColor","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","pointBorderColor","pointBackgroundColor","pointBorderWidth","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderColor","pointHoverBorderWidth","pointRadius","pointHitRadius","data","steppedLine","song","fetchSuggestions","bind","onSliderChange","onSliderSelect","fetch","then","response","json","setState","encodeURIComponent","info","line_chart_data","stop","bpm","Array","number_of_measures","keys","href","min","max","defaultValue","step","onChange","onAfterChange","name","options","isLoading","alt","height","width","src","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.51e129c6.chunk.js","sourcesContent":["import React from 'react';\n\nexport default class SongInfo extends React.Component {\n renderStops() {\n return this.props.songInfo.result.stops ? (\n
\n Stops: {this.props.songInfo.result.stops}\n

\n
\n ) : null;\n }\n renderSpeedChanges() {\n return this.props.songInfo.result.speed_changes.length ? (\n
\n {\n this.props.songInfo.result.speed_changes.map(function(message) {\n return (\n
\n {message}\n
\n
\n );\n })\n }\n
\n ) : null;\n }\n render() {\n return this.props.songInfo ? (\n
\n {this.renderStops()}\n {\n this.props.songInfo.result.bpm_list.map(function(message) {\n return
\n {message}\n
\n
;\n })\n }\n

{this.props.songInfo.result.suggestion}

\n {this.renderSpeedChanges()}\n
\n ) : null;\n }\n}\n\n","import React, { Component } from 'react';\nimport {Line} from 'react-chartjs-2';\nimport Select from 'react-select';\nimport Slider from 'rc-slider';\nimport SongInfo from \"./SongInfo\";\nimport queryString from 'query-string';\nimport 'rc-slider/assets/index.css';\nimport './App.css';\n\nconst SliderWithTooltip = Slider.createSliderWithTooltip(Slider);\n\nconst updateHash = (param, value) => {\n var hash = queryString.parse(window.location.hash);\n hash[param] = value;\n window.location.hash = \"#\" + queryString.stringify(hash);\n}\n\nconst getSimfiles = () => {\n return fetch(`/api/v1/simfiles`)\n .then((response) => {\n return response.json();\n });\n}\n\nconst chartOptions = {\n scales: {\n yAxes: [{\n scaleLabel: {\n display: true,\n labelString: 'BPM'\n }\n }],\n xAxes: [{\n scaleLabel: {\n display: true,\n labelString: 'Measure'\n }\n }]\n } \n}\nclass App extends Component {\n constructor() {\n super();\n\n var hash = queryString.parse(window.location.hash);\n var readSpeed = hash.readSpeed;\n\n if (readSpeed) {\n // Override local storage if read speed is provided in the hash\n localStorage.setItem('preferredReadSpeed', readSpeed);\n } else {\n readSpeed = localStorage.getItem('preferredReadSpeed');\n }\n\n this.state = {\n songList: null,\n selectedSong: null,\n songInfo: null,\n preferredReadSpeed: readSpeed ? readSpeed : 573,\n chartData: {\n labels: [],\n datasets: [\n {\n label: 'Stops',\n fill: false,\n showLine: false,\n lineTension: 0.1,\n backgroundColor: 'rgba(202,58,221,0.4)',\n borderColor: 'rgba(180,47,196,1)',\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0.0,\n borderJoinStyle: 'miter',\n pointBorderColor: 'rgba(202,58,221,0.4)',\n pointBackgroundColor: 'rgba(202,58,221,0.4)',\n pointBorderWidth: 1,\n pointHoverRadius: 5,\n pointHoverBackgroundColor: 'rgba(202,58,221,1)',\n pointHoverBorderColor: 'rgba(202,58,221,1)',\n pointHoverBorderWidth: 2,\n pointRadius: 5,\n pointHitRadius: 10,\n data: []\n },\n {\n label: 'BPM',\n fill: false,\n steppedLine: true,\n lineTension: 0.1,\n backgroundColor: 'rgba(95,212,230,0.4)',\n borderColor: 'rgba(79,178,195,1)',\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0.0,\n borderJoinStyle: 'miter',\n pointBorderColor: 'rgba(95,212,230,0.4)',\n pointBackgroundColor: 'rgba(95,212,230,0.4)',\n pointBorderWidth: 1,\n pointHoverRadius: 5,\n pointHoverBackgroundColor: 'rgba(90,201,18,1)',\n pointHoverBorderColor: 'rgba(220,220,220,1)',\n pointHoverBorderWidth: 2,\n pointRadius: 1,\n pointHitRadius: 10,\n data: [],\n },\n ]\n },\n };\n\n if (hash.song) {\n this.fetchSuggestions({'label': hash.song});\n }\n\n this.fetchSuggestions = this.fetchSuggestions.bind(this);\n this.onSliderChange = this.onSliderChange.bind(this);\n this.onSliderSelect = this.onSliderSelect.bind(this);\n }\n\n componentDidMount() {\n getSimfiles().then(songList => {\n this.setState({ songList });\n });\n }\n\n onSliderChange(value) {\n this.setState({'preferredReadSpeed': value});\n localStorage.setItem('preferredReadSpeed', value);\n }\n\n onSliderSelect(value) {\n if (this.state.selectedSong) {\n this.fetchSuggestions(this.state.selectedSong);\n }\n }\n\n fetchSuggestions(song) {\n this.setState({'selectedSong': song});\n updateHash('song', song.label);\n updateHash('readSpeed', this.state.preferredReadSpeed);\n return fetch(`/api/v1/simfiles/` + encodeURIComponent(song.label) + `?style=Single&difficulty=Hard&preferred_rate=` + this.state.preferredReadSpeed + `&speed_change_threshold=4`)\n .then((response) => {\n return response.json();\n }).then(function(info) {\n this.setState({'songInfo': info});\n\n var chartData = this.state.chartData;\n chartData.datasets[0].data = info.result.line_chart_data.stop;\n chartData.datasets[1].data = info.result.line_chart_data.bpm;\n chartData.labels = [...Array(info.result.number_of_measures).keys()]\n this.setState({'chartData': chartData});\n }.bind(this));\n }\n\n render() {\n return (\n
\n
\n

true BPM

\n
\n
\n

\n figure out the actual BPM of a chart on DDR.\n

\n preferred read speed:\n \n
\n \n
\n \n \n
\n
\n \"github\"\n  \n \"twitter\"\n
\n
\n
\n );\n }\n}\n\nexport default App;\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}