Better architectural distinction between live coding mode and composition mode
This commit is contained in:
@ -28,7 +28,6 @@
|
||||
onChange?: (value: string) => void;
|
||||
onExecute?: (code: string, source: 'selection' | 'block' | 'document') => void;
|
||||
editorSettings: EditorSettingsStore;
|
||||
mode?: 'composition' | 'livecoding';
|
||||
}
|
||||
|
||||
let {
|
||||
@ -36,8 +35,7 @@
|
||||
language = 'javascript',
|
||||
onChange,
|
||||
onExecute,
|
||||
editorSettings,
|
||||
mode = 'composition'
|
||||
editorSettings
|
||||
}: Props = $props();
|
||||
|
||||
let editorContainer: HTMLDivElement;
|
||||
@ -56,25 +54,23 @@
|
||||
function handleExecute() {
|
||||
if (!editorView) return;
|
||||
|
||||
if (mode === 'composition') {
|
||||
// Composition mode: always evaluate entire document
|
||||
const doc = getDocument(editorView.state);
|
||||
flash(editorView, doc.from, doc.to);
|
||||
onExecute?.(doc.text, 'document');
|
||||
} else {
|
||||
// Live coding mode: evaluate selection or block
|
||||
const selection = getSelection(editorView.state);
|
||||
if (selection.text) {
|
||||
flash(editorView, selection.from, selection.to);
|
||||
onExecute?.(selection.text, 'selection');
|
||||
} else {
|
||||
const block = getBlock(editorView.state);
|
||||
if (block.text) {
|
||||
flash(editorView, block.from, block.to);
|
||||
onExecute?.(block.text, 'block');
|
||||
}
|
||||
}
|
||||
const selection = getSelection(editorView.state);
|
||||
if (selection.text) {
|
||||
flash(editorView, selection.from, selection.to);
|
||||
onExecute?.(selection.text, 'selection');
|
||||
return;
|
||||
}
|
||||
|
||||
const block = getBlock(editorView.state);
|
||||
if (block.text) {
|
||||
flash(editorView, block.from, block.to);
|
||||
onExecute?.(block.text, 'block');
|
||||
return;
|
||||
}
|
||||
|
||||
const doc = getDocument(editorView.state);
|
||||
flash(editorView, doc.from, doc.to);
|
||||
onExecute?.(doc.text, 'document');
|
||||
}
|
||||
|
||||
const evaluateKeymap = keymap.of([
|
||||
|
||||
Reference in New Issue
Block a user