zoom = clampZoom(z)} onCursorMove={(pos) => cursorPos = pos} onBufferChange={(s) => bufferState = s} onBufferFull={handleBufferFull} /> zoom = clampZoom(zoom * 2)} onZoomOut={() => zoom = clampZoom(zoom / 2)} onResetZoom={() => zoom = clampZoom(1)} onGoto={(x, y) => canvasRenderer?.gotoPoint(x, y)} {cursorPos} {wsState} onHelp={() => helpOpen = true} /> mode = m} onSubmit={handleSubmit} onUndo={() => canvasRenderer?.undo()} onRedo={() => canvasRenderer?.redo()} onClear={() => canvasRenderer?.clearPending()} canUndo={bufferState.canUndo} canRedo={bufferState.canRedo} pixelCount={bufferState.pixelCount} {submitting} {cooldownMs} /> selectedColor = i} /> {#if !importerOpen} {/if} canvasRenderer?.getCommittedColor(x, y) ?? -1} setOverlay={(o) => canvasRenderer?.setOverlay(o)} onRequestPick={requestPick} onClose={() => importerOpen = false} /> {#if activePick}
Click on the canvas to pick a position — Esc to cancel.
{/if} {#if hintVisible && !activePick}
Pick a color, click the canvas to paint, then Submit to send. Wheel/QE to zoom, drag or WASD to pan, ? for help.
{/if} {#if toast}
{toast.text}
{/if} helpOpen = false} />