import { Vector2, Vector2Like, BoundingBox } from 'modern-path2d';
import { C as Character } from './modern-text.DzKfafj6.cjs';

/** 逐字沿形状排布所需的曲线最小接口（实现了这三个方法即可当作变形曲线） */
interface DeformationCurve {
    getPointAt: (u: number, output?: Vector2) => Vector2;
    getTangent: (t: number, output?: Vector2) => Vector2;
    getNormal: (t: number, output?: Vector2) => Vector2;
}
/** FFD 预设 `build` 的上下文 */
interface FfdContext {
    /** 强度 1（intensities[0]，已 /100） */
    a: number;
    /** 强度 2（intensities[1]，已 /100） */
    b: number;
    baseWidth: number;
    baseHeight: number;
    lineHeight: number;
    /** 沿当前书写方向调整控制点（内部处理横/竖轴向互换） */
    adjust: (point: Vector2Like, dx: number, dy: number) => void;
}
/** Bend 预设 `transform` 的上下文（引擎已算好弯曲几何） */
interface BendContext {
    /** 弯曲半径 */
    lineHeight: number;
    size: number;
    center: {
        x: number;
        y: number;
    };
    centerDist: {
        x: number;
        y: number;
    };
    /** 起始角 */
    centerDistAngle: number;
    width: number;
    height: number;
    isHorizontal: boolean;
}
/** 逐字预设（offset / curve）的上下文 */
interface VerbatimContext {
    /** 强度数组（已 /100） */
    intensities: number[];
    baseWidth: number;
    lineHeight: number;
    isHorizontal: boolean;
    boundingBox: BoundingBox;
}
/** 逐字 `perChar` 回调拿到的字符信息 */
interface DeformationCharInfo {
    paragraphIndex: number;
    fragmentIndex: number;
    characterIndex: number;
    character: Character;
}
interface PresetBase {
    /** 未显式提供 intensities 时使用的默认值 */
    defaultIntensities?: number[];
}
/** FFD（自由变形）预设：网格规格 + 预处理开关 + 控制点构造 */
interface FfdPreset extends PresetBase {
    engine: 'ffd';
    /** true=贝塞尔 FFD（需平滑），false=线性 FFD */
    bezier: boolean;
    hBlocks: number;
    vBlocks: number;
    /** 变形前先把字形直线拆段 */
    breakLine?: boolean;
    /** 变形前把直线转二次贝塞尔 */
    lineToQuad?: boolean;
    build: (points: Vector2[], ctx: FfdContext) => void;
}
/** Bend（整体弯曲）预设 */
interface BendPreset extends PresetBase {
    engine: 'bend';
    /** true=竖向弯曲，false=横向，'auto'/省略=跟随书写方向 */
    vertical?: boolean | 'auto';
    transform: (ctx: BendContext) => (point: Vector2Like) => readonly [number, number];
}
/** 逐字沿曲线排布预设 */
interface CurvePreset extends PresetBase {
    engine: 'curve';
    /** 字符是否沿切线旋转，默认 true */
    followTangent?: boolean;
    /** 是否沿法线方向按 centerDiviation 外扩（多边形需要） */
    expandAlongNormal?: boolean;
    makeCurve: (ctx: VerbatimContext) => DeformationCurve;
}
/** 逐字位移/旋转预设 */
interface OffsetPreset extends PresetBase {
    engine: 'offset';
    /** 逐控制点变换；arg 为 perChar 的返回值 */
    point: (point: Vector2Like, arg: any) => readonly [number, number];
    /** 逐字计算参数（透传给 point 的 arg） */
    perChar?: (ctx: VerbatimContext, info: DeformationCharInfo) => any;
}
type DeformationPreset = FfdPreset | BendPreset | CurvePreset | OffsetPreset;

export type { BendContext as B, CurvePreset as C, DeformationPreset as D, FfdContext as F, OffsetPreset as O, VerbatimContext as V, BendPreset as a, DeformationCharInfo as b, DeformationCurve as c, FfdPreset as d };
