{#if readOnly} {$workflow.name} {:else if editingName} setName(e.currentTarget.value)} onkeydown={(e) => { if (e.key === "Enter") setName(e.currentTarget.value); if (e.key === "Escape") editingName = false; }} /> {:else} {/if} {subgraphCount} {subgraphCount === 1 ? "subgraph" : "subgraphs"} {#if saveIndicator} Saved {/if}
{#if auth.status !== "checking"} {#if auth.user}
{#if showUserMenu}
{authExplanation}
{#if auth.source !== "local"} {/if}
{/if}
{:else if auth.isHFSpace && auth.oauthAvailable} {:else}
e.preventDefault()}> auth.setPAT(e.currentTarget.value)} title="HuggingFace token for GPU access" /> {#if auth.status === "validating"} checking… {:else if auth.status === "invalid"} invalid {/if}
{/if} {/if} {#if !readOnly} {#if auth.writeAccessKnown} Write access {/if} {:else}
{#if showAccessInfo}
{readOnlyReason}
{/if}
{/if}
e.preventDefault()} ondrop={handleDrop} ondblclick={handleCanvasDoubleClick} onpointerdown={onCanvasPointerDown} onpointermove={onCanvasPointerMove} onpointerup={onCanvasPointerUp} onwheel={onWheel} >
{#each legacyView.edges as edge (edge.id)} {@const path = edgePath(edge)} {#if path} { if (e.shiftKey) selectedEdgeIds = toggle_set(selectedEdgeIds, edge.id); else if (!readOnly) removeEdge(edge.id); }} /> {/if} {/each} {#if dragMode?.kind === "connection"} {@const preview = connectionPreviewPath(dragMode)} {#if preview} {/if} {/if} {#each legacyView.nodes as n (n.id)}
startNodeDrag(e, n.id)} >
{/each} {#if dragMode?.kind === "marquee" && dragMode.moved} {@const mx = Math.min(dragMode.startCanvasX, dragMode.endCanvasX)} {@const my = Math.min(dragMode.startCanvasY, dragMode.endCanvasY)} {@const mw = Math.abs(dragMode.endCanvasX - dragMode.startCanvasX)} {@const mh = Math.abs(dragMode.endCanvasY - dragMode.startCanvasY)}
{/if}
{#if nodeCount === 0} {/if} {#if running}
{/if} {#if dropChoice}
e.stopPropagation()} onclick={(e) => e.stopPropagation()} > {#if dropChoice.modelOptions.length > 0} {#each dropChoice.modelOptions as opt} {/each} {/if} {#if dropChoice.componentOptions.length > 0} {#each dropChoice.componentOptions as opt} {/each} {/if}
{/if} {#if doubleClickMenu}
e.stopPropagation()} onclick={(e) => e.stopPropagation()} >
{#each MODALITIES.filter( (m) => ["image", "audio", "video", "text", "3d"].includes(m.key) ) as m} {/each}
{/if}
{#if !readOnly}
{/if}
{#if showShortcuts}
Keyboard shortcuts
Cmd+Enter Run workflow
Cmd+D Duplicate node
F Zoom to fit
Cmd+0 Reset zoom
Delete Remove selection
Cmd+A Select all
Escape Deselect
Scroll Pan
Cmd+Scroll Zoom
Drag canvas Marquee select
Shift+Drag Add to selection
Space+Drag Pan
Double-click Rename node
{/if} void runWorkflow()} onstop={stopWorkflow} /> {#if activePicker} {#key activePicker.modality.key} { activePicker = null; }} oncleared={() => { if (activePicker) activePicker = { ...activePicker, modality: ALL_MODALITY }; }} onerror={(msg) => showToast(msg, 5000, "error")} /> {/key} {/if}
{#if toasts.length > 0}
{#each toasts as t (t.id)}
{t.message} {#if t.action?.href} dismissToast(t.id)} > {t.action.label} {:else if t.action?.onClick} {/if}
{/each}
{/if} {#if clearConfirm}
(clearConfirm = false)}>
{/if} {#if showApiPanel} (showApiPanel = false)} /> {/if}