Signal Lab
{{ trial_id }}
{ const ok = await window.mojoConfirm({title:'Clear graph',message:'Remove all nodes and connections?',confirmLabel:'Clear',cancelLabel:'Cancel',variant:'warning'}); if(ok){ mojoLabClear(); window.mojoLabRebaseline?.(); } }"
@mojo:lab-activate-tab.document="$nextTick(() => {
const el = document.getElementById('lab-canvas');
const tab = labTabs.find(t => t.id === labActiveTabId);
mojoLabSetActiveHistoryTab(tab ? tab.id : labActiveTabId);
if (el) {
mojoLabInit(el, columns, labGraph, tab ? tab.viewport : null);
}
mojoLabSetContext(columns, labSchemas, labName);
})"
x-init="
const _labInitCanvas = () => $nextTick(() => {
const el = document.getElementById('lab-canvas');
const tab = labTabs.find(t => t.id === labActiveTabId);
mojoLabSetActiveHistoryTab(tab ? tab.id : labActiveTabId);
if (el) {
mojoLabInit(el, columns, labGraph, tab ? tab.viewport : null);
}
mojoLabSetContext(columns, labSchemas, labName);
});
$watch('labOpen', (open) => {
try { localStorage.setItem('mojo:lab:open', open ? '1' : '0'); } catch {}
if (!open) _saveTabs();
if (open) _labInitCanvas();
});
if (labOpen) _labInitCanvas();
$watch('labSchemas', (s) => { if (labOpen) mojoLabSetContext(columns, s, labName); });
$watch('labName', (n) => { if (labOpen) mojoLabSetContext(columns, labSchemas, n); });
">
Right-click → add node
Scroll to zoom · drag to pan
+
Z
Undo
+
⇧
Redo
+
S
Save
+
C
Clear
Del
Remove
+
⇧
+
A
Arrange
+
⇧
+
F
Fit