/**
 * Text On Path
 * Utilities for placing and rendering text along SVG paths
 */
export interface TextOnPathOptions {
    /** The text content */
    text: string;
    /** SVG path data (d attribute) */
    pathData: string;
    /** Font family */
    fontFamily?: string;
    /** Font size in pixels */
    fontSize?: number;
    /** Font weight */
    fontWeight?: number | 'normal' | 'bold' | 'lighter' | 'bolder';
    /** Font style */
    fontStyle?: 'normal' | 'italic' | 'oblique';
    /** Text fill color */
    fill?: string;
    /** Text stroke color */
    stroke?: string;
    /** Text stroke width */
    strokeWidth?: number;
    /** Starting offset along path (0-1 or pixels) */
    startOffset?: number | string;
    /** Text anchor */
    textAnchor?: 'start' | 'middle' | 'end';
    /** Dominant baseline */
    dominantBaseline?: 'auto' | 'middle' | 'hanging' | 'central' | 'alphabetic';
    /** Letter spacing */
    letterSpacing?: number;
    /** Side of path for text */
    side?: 'left' | 'right';
    /** Text direction */
    direction?: 'ltr' | 'rtl';
    /** Spacing method */
    method?: 'align' | 'stretch';
    /** Spacing behavior */
    spacing?: 'auto' | 'exact';
    /** Unique ID for the path (auto-generated if not provided) */
    pathId?: string;
}
export interface TextOnPathResult {
    /** Complete SVG markup */
    svg: string;
    /** Just the defs section (for embedding) */
    defs: string;
    /** Just the text element (for embedding) */
    textElement: string;
    /** Path length in pixels */
    pathLength: number;
    /** Text width in pixels (approximate) */
    textWidth: number;
    /** Whether text fits on path */
    textFits: boolean;
}
export interface PathPoint {
    x: number;
    y: number;
    angle: number;
    t: number;
}
export interface TextOnPathAnimation {
    /** Animation duration in ms */
    duration?: number;
    /** Animation easing */
    easing?: 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out';
    /** Animation direction */
    direction?: 'normal' | 'reverse' | 'alternate' | 'alternate-reverse';
    /** Repeat count (Infinity for infinite) */
    repeatCount?: number | 'indefinite';
    /** Start offset range [from, to] */
    offsetRange?: [number | string, number | string];
}
/**
 * Parse SVG path data into segments
 */
export declare function parsePathData(d: string): PathSegment[];
interface PathSegment {
    type: 'M' | 'L' | 'C' | 'Q' | 'A' | 'Z';
    x: number;
    y: number;
    x0?: number;
    y0?: number;
    x1?: number;
    y1?: number;
    x2?: number;
    y2?: number;
    rx?: number;
    ry?: number;
    xAxisRotation?: number;
    largeArcFlag?: number;
    sweepFlag?: number;
}
/**
 * Calculate total path length
 */
export declare function calculatePathLength(pathData: string): number;
/**
 * Sample points along a path
 */
export declare function samplePath(pathData: string, numSamples: number): PathPoint[];
/**
 * Generate SVG text on path
 */
export declare function generateTextOnPath(options: TextOnPathOptions): TextOnPathResult;
/**
 * Generate animated text on path
 */
export declare function generateAnimatedTextOnPath(options: TextOnPathOptions, animation: TextOnPathAnimation): string;
export declare const PATH_PRESETS: {
    /** Straight horizontal line */
    horizontal: (width: number) => string;
    /** Arc (semicircle) */
    arc: (width: number, height: number) => string;
    /** Full wave */
    wave: (width: number, amplitude: number, frequency?: number) => string;
    /** Circle */
    circle: (cx: number, cy: number, r: number) => string;
    /** Ellipse */
    ellipse: (cx: number, cy: number, rx: number, ry: number) => string;
    /** Spiral */
    spiral: (cx: number, cy: number, startR: number, endR: number, turns?: number) => string;
    /** Heart shape */
    heart: (cx: number, cy: number, size: number) => string;
    /** Star shape (for text around star points) */
    star: (cx: number, cy: number, outerR: number, innerR: number, points?: number) => string;
};
export interface UseTextOnPathState {
    text: string;
    pathData: string;
    options: Partial<TextOnPathOptions>;
}
export interface UseTextOnPathReturn {
    state: UseTextOnPathState;
    result: TextOnPathResult | null;
    setText: (text: string) => void;
    setPath: (pathData: string) => void;
    setOptions: (options: Partial<TextOnPathOptions>) => void;
    usePresetPath: (preset: keyof typeof PATH_PRESETS, ...args: number[]) => void;
    getSvg: () => string;
    getAnimatedSvg: (animation: TextOnPathAnimation) => string;
}
export declare function useTextOnPath(initialText?: string, initialPath?: string): UseTextOnPathReturn;
export default useTextOnPath;
