/** Screen rectangles shared by reference-tag drawing and interaction. */ export interface TagRect { x: number; y: number; w: number; h: number; } export interface ReferenceTag extends TagRect { index: number; lineId?: string; key: string; kind: "name" | "value" | "custom"; /** Original projected price Y; displacement never changes the price. */ lineY: number; } export interface StackedReferenceTag extends ReferenceTag { offsetY: number; } export interface ReferenceTagStack { offsets: number[]; valueOffsets: number[]; tags: StackedReferenceTag[]; } export declare const EMPTY_TAG_STACK: ReferenceTagStack; export declare function overlapsX(a: TagRect, b: TagRect): boolean; /** * Pack only horizontally intersecting columns. Opposite edges stay independent. * A fixed value-badge obstacle divides a column into above/below slots; choose * the feasible split with the smallest total squared displacement. If there is * physically insufficient height, retain every tag in bounds with best-effort * spacing rather than hiding levels or moving their prices. */ export declare function stackReferenceTags(input: ReferenceTag[], top: number, bottom: number, radius?: number, obstacle?: TagRect | null): ReferenceTagStack; /** Exact rectangles beat inflated targets when adjacent tags have a small gap. */ export declare function stackedTagAt(tags: StackedReferenceTag[], x: number, y: number): StackedReferenceTag | null; //# sourceMappingURL=referenceTagStack.d.ts.map