/**
 * usePointerPressure — Hook for graphic tablet/stylus pressure sensitivity
 *
 * Provides pressure, tilt, and twist data from supported devices.
 * Falls back gracefully for mouse input.
 */
export interface PointerPressureState {
    /** Is a stylus/pen currently active? */
    isStylus: boolean;
    /** Pressure value from 0 to 1 (mouse always returns 0.5) */
    pressure: number;
    /** Tilt angle on X axis (-90 to 90 degrees) */
    tiltX: number;
    /** Tilt angle on Y axis (-90 to 90 degrees) */
    tiltY: number;
    /** Twist angle of the stylus (0 to 360 degrees) */
    twist: number;
    /** Tangential pressure (for airbrush styluses) */
    tangentialPressure: number;
    /** Width of contact point (for touch) */
    width: number;
    /** Height of contact point (for touch) */
    height: number;
    /** Current pointer type: 'mouse', 'pen', 'touch', 'eraser' */
    pointerType: 'mouse' | 'pen' | 'touch' | 'eraser';
    /** Current position */
    x: number;
    y: number;
    /** Is button pressed? */
    isPressed: boolean;
    /** Which buttons are pressed (bitmask) */
    buttons: number;
}
export interface UsePointerPressureOptions {
    /** Target element ref */
    elementRef: React.RefObject<HTMLElement>;
    /** Enable pressure simulation for mouse (default: true) */
    simulatePressure?: boolean;
    /** Pressure curve for simulation: linear, ease-in, ease-out */
    pressureCurve?: 'linear' | 'ease-in' | 'ease-out' | 'custom';
    /** Custom pressure curve function (input: speed 0-1, output: pressure 0-1) */
    customPressureCurve?: (speed: number) => number;
    /** Enable pressure smoothing (default: true) */
    smoothing?: boolean;
    /** Smoothing factor 0-1 (default: 0.3) */
    smoothingFactor?: number;
    /** Callbacks */
    onPressureChange?: (pressure: number) => void;
    onDown?: (state: PointerPressureState) => void;
    onMove?: (state: PointerPressureState) => void;
    onUp?: (state: PointerPressureState) => void;
}
export declare function usePointerPressure(options: UsePointerPressureOptions): PointerPressureState;
export interface BrushSizeOptions {
    minSize: number;
    maxSize: number;
    pressure: number;
    /** How much pressure affects size (0-1, default 1) */
    pressureSensitivity?: number;
    /** Pressure curve: 'linear' | 'squared' | 'sqrt' */
    curve?: 'linear' | 'squared' | 'sqrt';
}
/** Calculate brush size based on pressure */
export declare function calculateBrushSize(options: BrushSizeOptions): number;
/** Calculate brush opacity based on pressure */
export declare function calculateBrushOpacity(pressure: number, minOpacity?: number, maxOpacity?: number, sensitivity?: number): number;
/** Calculate brush rotation angle based on tilt */
export declare function calculateBrushAngle(tiltX: number, tiltY: number): number;
/** Calculate brush squash based on tilt (for calligraphy) */
export declare function calculateBrushSquash(tiltX: number, tiltY: number): number;
export interface PressureIndicatorProps {
    pressure: number;
    isStylus: boolean;
    showValues?: boolean;
    tiltX?: number;
    tiltY?: number;
}
/** Visual indicator for current pressure */
export declare const PressureIndicator: ({ pressure, isStylus, showValues, tiltX, tiltY, }: PressureIndicatorProps) => import("react/jsx-runtime").JSX.Element;
export interface SmoothPoint {
    x: number;
    y: number;
    pressure: number;
}
/** Catmull-Rom spline smoothing for stroke points */
export declare function smoothStroke(points: SmoothPoint[], tension?: number, segments?: number): SmoothPoint[];
/** Moving average smoothing */
export declare function movingAverageSmooth(points: SmoothPoint[], windowSize?: number): SmoothPoint[];
