diff --git a/packages/codemirror/codemirror.mjs b/packages/codemirror/codemirror.mjs
index a466e621..e29ae6d1 100644
--- a/packages/codemirror/codemirror.mjs
+++ b/packages/codemirror/codemirror.mjs
@@ -103,7 +103,7 @@ const flashField = StateField.define({
try {
for (let e of tr.effects) {
if (e.is(setFlash)) {
- if (e.value) {
+ if (e.value && tr.newDoc.length > 0) {
const mark = Decoration.mark({ attributes: { style: `background-color: #FFCA2880` } });
flash = Decoration.set([mark.range(0, tr.newDoc.length)]);
} else {
diff --git a/packages/react/src/components/CodeMirror6.jsx b/packages/react/src/components/CodeMirror6.jsx
index 36c7601b..fe538019 100644
--- a/packages/react/src/components/CodeMirror6.jsx
+++ b/packages/react/src/components/CodeMirror6.jsx
@@ -20,7 +20,7 @@ const flashField = StateField.define({
try {
for (let e of tr.effects) {
if (e.is(setFlash)) {
- if (e.value) {
+ if (e.value && tr.newDoc?.length?.length > 0) {
const mark = Decoration.mark({ attributes: { style: `background-color: #FFCA2880` } });
flash = Decoration.set([mark.range(0, tr.newDoc.length)]);
} else {
@@ -152,6 +152,8 @@ export default function CodeMirror({
return _extensions;
}, [keybindings, isAutoCompletionEnabled, isLineWrappingEnabled]);
+ const basicSetup = useMemo(() => ({ lineNumbers: isLineNumbersDisplayed }), [isLineNumbersDisplayed]);
+
return (
<_CodeMirror
@@ -161,7 +163,7 @@ export default function CodeMirror({
onCreateEditor={handleOnCreateEditor}
onUpdate={handleOnUpdate}
extensions={extensions}
- basicSetup={{ lineNumbers: isLineNumbersDisplayed }}
+ basicSetup={basicSetup}
/>
);
diff --git a/website/src/repl/Repl.jsx b/website/src/repl/Repl.jsx
index 0659473b..02e14ca3 100644
--- a/website/src/repl/Repl.jsx
+++ b/website/src/repl/Repl.jsx
@@ -9,7 +9,7 @@ import { CodeMirror, cx, flash, useHighlighting, useStrudel, useKeydown } from '
import { getAudioContext, initAudioOnFirstClick, resetLoadedSounds, webaudioOutput } from '@strudel.cycles/webaudio';
import { createClient } from '@supabase/supabase-js';
import { nanoid } from 'nanoid';
-import React, { createContext, useCallback, useEffect, useState } from 'react';
+import React, { createContext, useCallback, useEffect, useState, useMemo } from 'react';
import './Repl.css';
import { Footer } from './Footer';
import { Header } from './Header';
@@ -264,6 +264,11 @@ export function Repl({ embedded = false }) {
handleShuffle,
handleShare,
};
+ const currentTheme = useMemo(() => themes[theme] || themes.strudelTheme, [theme]);
+ const handleViewChanged = useCallback((v) => {
+ setView(v);
+ }, []);
+
return (
// bg-gradient-to-t from-blue-900 to-slate-900
// bg-gradient-to-t from-green-900 to-slate-900
@@ -278,7 +283,7 @@ export function Repl({ embedded = false }) {
{
- setView(v);
- // window.editorView = v;
- }}
+ onViewChanged={handleViewChanged}
onSelectionChange={handleSelectionChange}
/>