{toolTitle(tool)}

{toolDescription(tool)}

{#if errorText} {/if} 0} {hasMask} bind:showMask bind:values {pipetteTargetId} {handleFile} onTextSubmit={handleTextSubmit} onSourceError={(e) => (errorText = errorMessage(e))} {reset} {toggleChain} {handlePipetteToggle} {handlePickColor} {showError} {errorMessage} {overlayImage} onOverlayFile={(f) => void handleOverlayFile(f)} onOverlayError={(e) => (errorText = errorMessage(e))} onOverlayClear={clearOverlay} />
{#each chain as step, index (step.id)} {#if step.toolId === ""}

{t("toolPage.stepHeading", { n: index + 2 })}

applyChainTool(index, id)} chainableOnly />
{:else if getTool(step.toolId)} {@const stepTool = getTool(step.toolId)!} {#if stageVariant === "inline"} {@const StepIcon = TOOL_ICONS[stepTool.id]} removeChainStep(index)} onError={showError} onAddStep={addChainStep} onRemoveChain={removeChain} > {#snippet header()} {#if StepIcon} {/if} {t("chain.stepLabel", { n: index + 2, title: toolTitle(stepTool), })} {/snippet} {:else} removeChainStep(index)} onError={showError} onAddStep={addChainStep} onRemoveChain={removeChain} /> {/if} {/if} {/each}