import { Case } from "@effect-ts/core/Case";
import type { Chunk } from "@effect-ts/core/Collections/Immutable/Chunk";
import type { RenderOptions } from "../../RenderOptions/index.js";
import type { MergeAction } from "../MergeAction/index.js";
export declare type MergeStrategy = (state: MergeState) => (char0: string, char1: string) => MergeAction<string>;
export declare class MergeState extends Case<{
    readonly overlap: number;
    readonly currentCharWidth: number;
    readonly lastCharWidth: number;
}> {
}
/**
 * Represents the status of the merge loop.
 */
export declare class MergeLoopState extends Case<{
    readonly a: Columns;
    readonly b: Columns;
    readonly overlap: number;
    readonly partialResult: Columns;
    readonly appendLoopState: AppendLoopState;
}> {
}
/**
 * Represents the status of the append loop.
 */
export declare class AppendLoopState extends Case<{
    readonly lastCharWidth: number;
}> {
}
/**
 * Shortcut type for a set of columns.
 */
export declare type Columns = Chunk<string>;
/**
 * Represents the three sections of a set of columns.
 */
export declare class Sections extends Case<{
    readonly left: Columns;
    readonly overlap: Columns;
    readonly right: Columns;
}> {
}
export declare function sections(left: Columns, overlap: Columns, right: Columns): Sections;
export declare function appendLoopState(lastCharWidth?: number): AppendLoopState;
export declare function mergeLoopState(params: Partial<{
    readonly a: Columns;
    readonly b: Columns;
    readonly overlap: number;
    readonly partialResult: Columns;
    readonly appendLoopState: AppendLoopState;
}>): MergeLoopState;
/**
 * Creates a merge strategy to perform horizontal merging, based on the given
 * `RenderOptions`.
 *
 * @param options The `RenderOptions` used to build the `MergeStrategy`.
 * @return A `MergeStrategy` function that performs horizontal merging.
 */
export declare function mergeStrategy(options: RenderOptions): MergeStrategy;
export declare function appendLoop(options: RenderOptions, figures: Chunk<Columns>, partial: Chunk<Columns>, state: AppendLoopState): Chunk<Columns>;
//# sourceMappingURL=index.d.ts.map