import type { FlowContext, StepType } from "../types.js"; /** * Abstract strategy that defines the shape of a wizard flow. * * Subclasses declare which steps are needed, whether the action can be * finalized, and what the final button should say. They hold no React * state — the orchestrator hook wires domain hooks to the step configs * produced from these methods. */ export abstract class WizardFlow { abstract readonly type: "transaction" | "data"; /** Determine which step types this flow needs given the current context. */ abstract getStepTypes(context: FlowContext): StepType[]; /** Whether the action can be finalized (e.g. signed & broadcast). */ abstract canFinalize(context: FlowContext): boolean; /** Label for the primary action button on the final step. */ abstract getFinalActionLabel(context: FlowContext): string; }