import type { SceneOverlay, SceneOverlayContext, Shape } from 'mudlet-map-renderer'; import type { MudletMap } from '../../mapIO'; import type { MapDiff } from './mapDiff'; export type DiffStatus = 'added' | 'deleted' | 'changed'; /** Stable keys shared between the sidebar entries and the pane highlights. */ export declare const roomKey: (status: DiffStatus, id: number) => string; export declare const labelKey: (status: DiffStatus, areaId: number, labelId: number) => string; /** A room/label to tint, in renderer world space (renderY = -rawY). */ export interface DiffHighlight { key: string; renderX: number; renderY: number; z: number; area: number; status: DiffStatus; /** Half-extents of the rect in world units (room half-size, or label w/2 & h/2). */ halfX: number; halfY: number; } /** * A {@link SceneOverlay} that tints changed rooms/labels for the currently * displayed area + z-level. Filtering by view keeps each pane in sync with its * `drawArea(area, z)` call. */ export declare class DiffHighlightOverlay implements SceneOverlay { private readonly highlights; private ctx?; private area; private z; private enabled; private hoverKey; constructor(highlights: DiffHighlight[]); attach(ctx: SceneOverlayContext): void; detach(): void; setView(area: number, z: number): void; setEnabled(enabled: boolean): void; setHoverKey(key: string | null): void; render(): Shape | Shape[] | void; } /** * Build the highlight list for one side of the diff. * * @param diff the computed diff (v1 = old / left, v2 = new / right) * @param map the map shown on this side (used to resolve coords of changed rooms/labels) * @param side 'old' shows deletions + changes, 'new' shows additions + changes * @param roomSize renderer room size (world units) */ export declare function collectHighlights(diff: MapDiff, map: MudletMap, side: 'old' | 'new', roomSize: number): DiffHighlight[];