diff --git a/packages/core/util.mjs b/packages/core/util.mjs
index 2b43cf0b..37fe6b6c 100644
--- a/packages/core/util.mjs
+++ b/packages/core/util.mjs
@@ -67,13 +67,14 @@ export const getFreq = (noteOrMidi) => {
return midiToFreq(noteToMidi(noteOrMidi));
};
+const pcs = ['C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B'];
/**
* @deprecated does not appear to be referenced or invoked anywhere in the codebase
* @noAutocomplete
*/
export const midi2note = (n) => {
const oct = Math.floor(n / 12) - 1;
- const pc = ['C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B'][n % 12];
+ const pc = pcs[n % 12];
return pc + oct;
};
diff --git a/packages/react/src/components/MiniRepl.jsx b/packages/react/src/components/MiniRepl.jsx
index 9c30dc29..8ff738e6 100644
--- a/packages/react/src/components/MiniRepl.jsx
+++ b/packages/react/src/components/MiniRepl.jsx
@@ -18,18 +18,21 @@ export function MiniRepl({
tune,
hideOutsideView = false,
enableKeyboard,
+ onTrigger,
drawTime,
punchcard,
+ onPaint,
canvasHeight = 200,
fontSize = 18,
hideHeader = false,
theme,
+ keybindings,
}) {
drawTime = drawTime || (punchcard ? [0, 4] : undefined);
const evalOnMount = !!drawTime;
const drawContext = useCallback(
- !!drawTime ? (canvasId) => document.querySelector('#' + canvasId)?.getContext('2d') : null,
- [drawTime],
+ punchcard ? (canvasId) => document.querySelector('#' + canvasId)?.getContext('2d') : null,
+ [punchcard],
);
const {
code,
@@ -51,7 +54,15 @@ export function MiniRepl({
defaultOutput: webaudioOutput,
editPattern: (pat, id) => {
//pat = pat.withContext((ctx) => ({ ...ctx, id }));
- return punchcard ? pat.punchcard() : pat;
+ if (onTrigger) {
+ pat = pat.onTrigger(onTrigger, false);
+ }
+ if (onPaint) {
+ pat = pat.onPaint(onPaint);
+ } else if (punchcard) {
+ pat = pat.punchcard();
+ }
+ return pat;
},
getTime,
evalOnMount,
@@ -87,7 +98,7 @@ export function MiniRepl({
e.preventDefault();
flash(view);
await activateCode();
- } else if (e.key === '.') {
+ } else if (e.key === '.' || e.code === 'Period') {
stop();
e.preventDefault();
}
@@ -140,11 +151,18 @@ export function MiniRepl({
)}
{show && (
-
+
)}
{error &&
{error.message}
}
- {drawTime && (
+ {punchcard && (