import { RandomSymbolProvider } from './RandomSymbolProvider.js'; /** Context passed through the middleware pipeline. */ export interface FrameContext { /** Reel column index. */ readonly reelIndex: number; /** Total visible rows. */ readonly visibleRows: number; /** Buffer symbols above visible area. */ readonly bufferAbove: number; /** Buffer symbols below visible area. */ readonly bufferBelow: number; /** The symbol array being built (buffer + visible + buffer). Mutable by middleware. */ symbols: string[]; /** Target symbols from setResult() (visible rows only), if available. */ readonly targetSymbols?: string[]; /** 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, visibleRows: number, bufferAbove: number, bufferBelow: number, targetSymbols?: string[], isSpinning?: boolean): string[]; /** Build frames for all reels. */ buildAll(reelCount: number, visibleRows: number, bufferAbove: number, bufferBelow: number, targetSymbols?: string[][], isSpinning?: boolean): string[][]; get randomProvider(): RandomSymbolProvider; get middleware(): ReadonlyArray; } //# sourceMappingURL=FrameBuilder.d.ts.map