boilerplate for tutorial + minirepl

This commit is contained in:
Felix Roos 2022-02-18 12:44:18 +01:00
parent bad6cf0ed7
commit aa850918ad
6 changed files with 6012 additions and 2 deletions

3
repl/.gitignore vendored
View File

@ -1,4 +1,5 @@
.snowpack
build
node_modules
.DS_Store
.DS_Store
.parcel-cache

5953
repl/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -6,7 +6,8 @@
"test": "web-test-runner \"src/**/*.test.tsx\"",
"format": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"",
"lint": "prettier --check \"src/**/*.{js,jsx,ts,tsx}\"",
"peggy": "peggy -o krill-parser.js --format es ./krill.pegjs"
"peggy": "peggy -o krill-parser.js --format es ./krill.pegjs",
"tutorial": "parcel src/tutorial/index.html"
},
"dependencies": {
"@tonaljs/tonal": "^4.6.5",
@ -26,6 +27,8 @@
"webmidi": "^2.5.2"
},
"devDependencies": {
"@mdx-js/react": "^1.6.22",
"@parcel/transformer-mdx": "^2.3.1",
"@snowpack/plugin-dotenv": "^2.1.0",
"@snowpack/plugin-postcss": "^1.4.3",
"@snowpack/plugin-react-refresh": "^2.5.0",
@ -41,6 +44,7 @@
"@web/test-runner": "^0.13.3",
"autoprefixer": "^10.4.2",
"chai": "^4.3.4",
"parcel": "^2.3.1",
"peggy": "^1.2.0",
"postcss": "^8.4.6",
"prettier": "^2.2.1",

View File

@ -0,0 +1,31 @@
import React, { useMemo } from 'react';
import * as Tone from 'tone';
import useRepl from '../useRepl';
function MiniRepl({ tune }) {
const defaultSynth = useMemo(() => {
return new Tone.PolySynth().chain(new Tone.Gain(0.5), Tone.Destination).set({
oscillator: { type: 'triangle' },
envelope: {
release: 0.01,
},
});
}, []);
const { code, setCode, setPattern, error, cycle, dirty, log, togglePlay } = useRepl({
tune,
defaultSynth,
});
return (
<>
<textarea value={code} onChange={(e) => setCode(e.target.value)} />
<button
className="flex-none w-full border border-gray-700 p-2 bg-slate-700 hover:bg-slate-500"
onClick={() => togglePlay()}
>
{cycle.started ? 'pause' : 'play'}
</button>
</>
);
}
export default MiniRepl;

View File

@ -0,0 +1,14 @@
<div id="root"></div>
<script type="module">
import React from 'react';
import ReactDOM from 'react-dom';
import * as React from 'react';
import Tutorial from './tutorial.mdx';
ReactDOM.render(
<React.StrictMode>
<Tutorial />
</React.StrictMode>,
document.getElementById('root')
);
</script>

View File

@ -0,0 +1,7 @@
import MiniRepl from './MiniRepl';
# Strudel Tutorial
hello!!!!
<MiniRepl tune="C3.m" />