import { Ref } from 'vue';
import { GuideLine } from '@sketch-ruler/core';
export interface SnapTarget {
    type: 'tick' | 'guide-line' | 'custom' | 'grid' | 'equidistant';
    position: number;
    priority: number;
}
export interface SnapResult {
    position: number;
    target: SnapTarget;
    original: number;
}
export interface SnapRule {
    id: string;
    priority: number;
    getTargets: (context: SnapContext) => SnapTarget[];
}
export interface SnapContext {
    direction: 'h' | 'v';
    position: number;
    scale: number;
    lines: GuideLine[];
    viewportSize: {
        width: number;
        height: number;
    };
}
export interface SnapOptions {
    threshold: Ref<number>;
    scale: Ref<number>;
    tickTargets?: Ref<number[]>;
    guideLineTargets?: Ref<number[]>;
    customTargets?: Ref<number[]>;
    strength?: Ref<number>;
    gridSize?: Ref<number>;
    enableEquidistant?: Ref<boolean>;
    customRules?: Ref<SnapRule[]>;
    lines?: Ref<GuideLine[]>;
    viewportSize?: Ref<{
        width: number;
        height: number;
    }>;
}
export declare function useRulerSnap(options: SnapOptions): {
    snap: (position: number, direction: "h" | "v") => SnapResult | null;
};
/** 向后兼容导出 */
export { useRulerSnap as useSnapDetection };
//# sourceMappingURL=useRulerSnap.d.ts.map