diff --git a/repl/src/App.jsx b/repl/src/App.jsx index 24a9443f..e62d8c1b 100644 --- a/repl/src/App.jsx +++ b/repl/src/App.jsx @@ -140,6 +140,13 @@ function App() { footerContent.current.scrollTop = footerContent.current?.scrollHeight; } }, [log, activeFooter]); + useLayoutEffect(() => { + if (activeFooter === 'console') { + footerContent.current.scrollTop = footerContent.current?.scrollHeight; + } else { + footerContent.current.scrollTop = 0; + } + }, [activeFooter]); const { code, setCode, scheduler, evaluate, activateCode, error, isDirty, activeCode, pattern, started, stop } = useStrudel({ @@ -147,13 +154,16 @@ function App() { defaultOutput: webaudioOutput, getTime, autolink: true, + onEvalError: () => { + setActiveFooter('console'); + }, }); // init code useEffect(() => { initCode().then((decoded) => { logger( - `🌀 Welcome to Strudel! ${ + `Welcome to Strudel! ${ decoded ? `I have loaded the code from the URL.` : `A random code snippet named "${name}" has been loaded!` } Press play or hit ctrl+enter to run it!`, 'highlight', @@ -232,6 +242,7 @@ function App() { // copy shareUrl to clipboard navigator.clipboard.writeText(shareUrl); const message = `Link copied to clipboard: ${shareUrl}`; + alert(message); // alert(message); logger(message, 'highlight'); } else { @@ -247,7 +258,7 @@ function App() { started && logger('[edit] code changed. hit ctrl+enter to update'); }; - const FooterTab = ({ children, name }) => ( + const FooterTab = ({ children, name, label }) => ( <>