import { StylusState } from '../stylus';
import type { StrokeProtocol, StrokeDrawingContext, ResultOfStrokeProtocol, StrokeDrawingContextFromProtocol, ConfigOfStrokeProtocol } from '../stroke-protocol';
export interface SnakeConfig<TProxyTarget extends StrokeProtocol = any> {
    tailCount: number;
    weight: number;
    catchUp: boolean;
    targetConfig: ConfigOfStrokeProtocol<TProxyTarget>;
}
export declare const defaultSnakeConfig: Omit<SnakeConfig<any>, 'targetConfig'>;
export interface SnakeState<TProxyTarget extends StrokeProtocol = any> {
    targetDrawingContext: StrokeDrawingContextFromProtocol<TProxyTarget>;
    stylusStates: StylusState[];
    update(): void;
}
export declare type SnakeDrawingContext<TProxyTarget extends StrokeProtocol = any> = StrokeDrawingContext<SnakeConfig<TProxyTarget>, SnakeState<TProxyTarget>>;
export declare function getStroke<TProxyTarget extends StrokeProtocol>(target: TProxyTarget): StrokeProtocol<SnakeConfig<TProxyTarget>, SnakeState<TProxyTarget>, ResultOfStrokeProtocol<TProxyTarget>>;
