Signal Lab
{{ trial_id }}
focused = false, 150)" @keydown.tab.prevent="accept()" @keydown.enter="labName && saveLabGraph(labName, mojoLabSerialize())" @keydown.escape.stop="labName = ''" placeholder="name or folder/name…" class="h-8 px-2 bg-slate-100 dark:bg-slate-900 border border-slate-300 dark:border-slate-700 rounded text-xs font-mono text-slate-700 dark:text-slate-300 placeholder-slate-400 dark:placeholder-slate-600 focus:outline-none focus:border-cyan-500 w-28 sm:w-44" />
Save
Tab
Load
Tab
r.json()).then(g=>{ labGraph=g; labName=lab.name; try{localStorage.setItem('mojo:lab:draft',JSON.stringify(g));localStorage.setItem('mojo:lab:name',lab.name);}catch{} mojoLabClearHistory(); mojoLabInit(document.getElementById('lab-canvas'), columns, g); mojoLabSetContext(columns, labSchemas, lab.name); open=false; labSearch=''; })" class="flex-1 text-left text-xs font-mono min-w-0">
Inputs
Outputs
Refresh
Fit
Arrange
Clear
Select Signal
No matching signals
Right-click → add node
Ctrl+Z undo · Ctrl+Y redo · Ctrl+S save · Del remove selected
Ctrl+Shift+A arrange · Ctrl+Shift+F fit view
Scroll to zoom · drag to pan