import { RandomSymbolProvider } from './RandomSymbolProvider.js'; import { ColumnTarget } from './ColumnTarget.js'; /** Context passed through the middleware pipeline. */ export interface FrameContext { /** Reel column index. */ readonly reelIndex: number; /** Total visible cells. */ readonly visibleCells: number; /** Buffer symbols above visible area. */ readonly bufferStart: number; /** Buffer symbols below visible area. */ readonly bufferEnd: number; /** The symbol array being built (buffer + visible + buffer). Mutable by middleware. */ symbols: string[]; /** * This reel's target column from `setResult()` / `initialFrame()`, if * available. Read it with `getTargetSlot(target, cell)` (cell `0` is the * first visible cell; negative cells are buffer-above). */ readonly target?: ColumnTarget; /** Whether the reel is currently spinning. */ readonly isSpinning: boolean; /** Arbitrary metadata middleware can use to communicate. */ metadata: Record; } /** Middleware that participates in frame building. */ export interface FrameMiddleware { readonly name: string; /** Lower priority runs first. */ readonly priority: number; process(context: FrameContext, next: () => void): void; } /** * Builds symbol frames using a middleware pipeline. * * Built-in middleware handles random fill and target placement. * Users can inject custom middleware for features like multiplier encoding * or triple-prevention. */ export declare class FrameBuilder { private _randomProvider; private _middlewares; private _sorted; constructor(_randomProvider: RandomSymbolProvider); /** Add a middleware to the pipeline. */ use(middleware: FrameMiddleware): this; /** Remove a middleware by name. */ remove(name: string): this; /** Build a frame for a single reel. */ build(reelIndex: number, visibleCells: number, bufferStart: number, bufferEnd: number, target?: ColumnTarget, isSpinning?: boolean): string[]; /** Build frames for all reels. */ buildAll(reelCount: number, visibleCells: number, bufferStart: number, bufferEnd: number, targets?: ColumnTarget[], isSpinning?: boolean): string[][]; get middleware(): ReadonlyArray; } //# sourceMappingURL=FrameBuilder.d.ts.map