import { Case } from "@effect-ts/core/Case";
import type { Chunk } from "@effect-ts/core/Collections/Immutable/Chunk";
import type { NonEmptyArray } from "@effect-ts/core/Collections/Immutable/NonEmptyArray";
import * as T from "@effect-ts/core/Effect";
import type { Has } from "@effect-ts/core/Has";
import type { Option } from "@effect-ts/core/Option";
import type { FigFont } from "../FigFont/index.js";
import * as FigletClient from "../FigletClient/index.js";
import type { FigletException } from "../FigletException/index.js";
import type { Figure } from "../Figure/index.js";
import type { InternalFont } from "../Internal/index.js";
import type { HorizontalLayout } from "../RenderOptions/HorizontalLayout/index.js";
import { RenderOptions } from "../RenderOptions/index.js";
import type { Justification } from "../RenderOptions/Justification/index.js";
import type { PrintDirection } from "../RenderOptions/PrintDirection/index.js";
import type { BuilderAction } from "./BuilderAction/index.js";
/**
 * Represents a collection of rendering options.
 *
 * This builder works by recording what settings a user wants to use instead of
 * applying the setting immediately when calling a method. This allows for a
 * fail-safe behaviour when, for instance, a user wants to load a file but the
 * file is missing. Instead of receiving an exception when calling
 * `OptionsBuilder.withFont`, the builder will simply record the desire of to
 * load a file. The actual loading, and failure, will happen and be handled when
 * calling `OptionsBuilder.compile()`.
 */
export declare class OptionsBuilder {
    /**
     * The list of actions that will be executed to obtain the final
     * configuration.
     */
    readonly actions: Chunk<BuilderAction>;
    constructor(
    /**
     * The list of actions that will be executed to obtain the final
     * configuration.
     */
    actions?: Chunk<BuilderAction>);
}
export declare class BuildData extends Case<{
    readonly font: Option<FigFont>;
    readonly horizontalLayout: HorizontalLayout;
    readonly justification: Justification;
    readonly maxWidth: Option<number>;
    readonly printDirection: PrintDirection;
    readonly text: string;
}> {
}
/**
 * Creates a new `OptionsBuilder` with default settings.
 */
export declare function builder(): OptionsBuilder;
/**
 * Creates a new `OptionsBuilder` with default settings and using an initial
 * action.
 */
export declare function withInitialAction(initialAction: BuilderAction): OptionsBuilder;
/**
 * Create a new instance of `BuildData` using the provided parameters.
 */
export declare function buildData(params?: Partial<{
    font: Option<FigFont>;
    horizontalLayout: HorizontalLayout;
    justification: Justification;
    maxWidth: Option<number>;
    printDirection: PrintDirection;
    text: string;
}>): BuildData;
/**
 * Set the text to render.
 */
export declare function text_(self: OptionsBuilder, text: string): OptionsBuilder;
/**
 * Set the text to render.
 *
 * @ets_data_first text_
 */
export declare function text(text: string): (self: OptionsBuilder) => OptionsBuilder;
/**
 * Use the default `FigFont` to render the text.
 */
export declare function withDefaultFont(self: OptionsBuilder): OptionsBuilder;
/**
 * Use one of the internal fonts to render the text.
 *
 * The loading of the font is performed when the `RenderOptions` is built.
 */
export declare function withInternalFont_(self: OptionsBuilder, font: InternalFont): OptionsBuilder;
/**
 * Use one of the internal fonts to render the text.
 *
 * The loading of the font is performed when the `RenderOptions` is built.
 *
 * @ets_data_first withInternalFont_
 */
export declare function withInternalFont(font: InternalFont): (self: OptionsBuilder) => OptionsBuilder;
/**
 * Use a font loaded from a Figlet file to render the text.
 *
 * The loading of the font is performed when the `RenderOptions` is built.
 */
export declare function withFont_(self: OptionsBuilder, fontPath: string): OptionsBuilder;
/**
 * Use a font loaded from a Figlet file to render the text.
 *
 * The loading of the font is performed when the `RenderOptions` is built.
 *
 * @ets_data_first withFont_
 */
export declare function withFont(fontPath: string): (self: OptionsBuilder) => OptionsBuilder;
/**
 * Use a font that has already been loaded to render the text.
 */
export declare function withFigFont_(self: OptionsBuilder, font: FigFont): OptionsBuilder;
/**
 * Use a font that has already been loaded to render the text.
 *
 * @ets_data_first withFigFont_
 */
export declare function withFigFont(font: FigFont): (self: OptionsBuilder) => OptionsBuilder;
/**
 * Use the default horizontal layout to render the text.
 */
export declare function withDefaultHorizontalLayout(self: OptionsBuilder): OptionsBuilder;
/**
 * Use the specified `HorizontalLayout` to render the text.
 */
export declare function withHorizontalLayout_(self: OptionsBuilder, layout: HorizontalLayout): OptionsBuilder;
/**
 * Use the specified `HorizontalLayout` to render the text.
 *
 * @ets_data_first withHorizontalLayout_
 */
export declare function withHorizontalLayout(layout: HorizontalLayout): (self: OptionsBuilder) => OptionsBuilder;
/**
 * Use the default maximum width to render the text.
 */
export declare function withDefaultMaxWidth(self: OptionsBuilder): OptionsBuilder;
/**
 * Use the specified maximum width to render the text.
 */
export declare function withMaxWidth_(self: OptionsBuilder, maxWidth: number): OptionsBuilder;
/**
 * Use the specified maximum width to render the text.
 *
 * @ets_data_first withMaxWidth_
 */
export declare function withMaxWidth(maxWidth: number): (self: OptionsBuilder) => OptionsBuilder;
/**
 * Use the default print direction to render the text.
 *
 * **NOTE**: This feature is not yet implemented and will have no effect.
 */
export declare function withDefaultPrintDirection(self: OptionsBuilder): OptionsBuilder;
/**
 * Use the specified print direction to render the text.
 *
 * **NOTE**: This feature is not yet implemented and will have no effect.
 */
export declare function withPrintDirection_(self: OptionsBuilder, direction: PrintDirection): OptionsBuilder;
/**
 * Use the specified print direction to render the text.
 *
 * **NOTE**: This feature is not yet implemented and will have no effect.
 *
 * @ets_data_first withPrintDirection_
 */
export declare function withPrintDirection(direction: PrintDirection): (self: OptionsBuilder) => OptionsBuilder;
/**
 * Use the default justification to render the text.
 *
 * **NOTE**: This feature is not yet implemented and will have no effect.
 */
export declare function withDefaultJustification(self: OptionsBuilder): OptionsBuilder;
/**
 * Use the specified justification to render the text.
 *
 * **NOTE**: This feature is not yet implemented and will have no effect.
 */
export declare function withJustification_(self: OptionsBuilder, justification: Justification): OptionsBuilder;
/**
 * Use the specified justification to render the text.
 *
 * **NOTE**: This feature is not yet implemented and will have no effect.
 *
 * @ets_data_first withJustification_
 */
export declare function withJustification(justification: Justification): (self: OptionsBuilder) => OptionsBuilder;
export declare function toBuildData(self: OptionsBuilder): T.Effect<Has<FigletClient.FigletClient>, NonEmptyArray<FigletException>, BuildData>;
export declare function toRenderOptions(self: OptionsBuilder): T.Effect<Has<FigletClient.FigletClient>, NonEmptyArray<FigletException>, RenderOptions>;
export declare function renderToFigure(self: OptionsBuilder): T.Effect<Has<FigletClient.FigletClient>, NonEmptyArray<FigletException>, Figure>;
export declare function renderToString(self: OptionsBuilder): T.Effect<Has<FigletClient.FigletClient>, NonEmptyArray<FigletException>, string>;
//# sourceMappingURL=index.d.ts.map