import { MutableRefObject } from 'react';
import { FloatingLayoutInvalidationFlag, FloatingCardLayoutInput } from './comment-floating-layout';
import { CommentFloatingCard } from './context/types';
import { FloatingCardRuntimeState } from './floating-comment-layout-utils';

interface SyncMountedFloatingCardIdsResult {
    didChange: boolean;
    previousMountedFloatingCardIds: Set<string>;
}
export interface UseFloatingCardStateResult {
    floatingCardStateRef: MutableRefObject<Map<string, FloatingCardRuntimeState>>;
    orderedFloatingCardIdsRef: MutableRefObject<string[]>;
    orderDirtyRef: MutableRefObject<boolean>;
    heightMeasurementQueueRef: MutableRefObject<Set<string>>;
    layoutBoundaryRef: MutableRefObject<{
        recomputeFromIndex: number;
    }>;
    mountedFloatingCardIdsRef: MutableRefObject<string[]>;
    mountedFloatingCardIds: string[];
    getFloatingCardRuntimeState: (floatingCardId: string) => FloatingCardRuntimeState;
    getOrderedFloatingCardIndex: (floatingCardId: string) => number | null;
    markRecomputeFromIndex: (recomputeFromIndex: number) => void;
    markFloatingCardInvalidated: (floatingCardId: string, flag: FloatingLayoutInvalidationFlag) => void;
    markFloatingCardOrderDirty: () => void;
    reconcileFloatingCardOrder: (nextFloatingCards: CommentFloatingCard[]) => {
        orderedFloatingCardIds: string[];
        firstChangedIndex: number | null;
    };
    pruneFloatingCardRuntimeState: (activeFloatingCardIds: Set<string>) => void;
    syncMountedFloatingCardIds: (nextMountedFloatingCardIds: string[]) => SyncMountedFloatingCardIdsResult;
    clearInvalidationFlagsThroughIndex: (stopIndex: number) => void;
    getFloatingCardLayoutInputs: () => FloatingCardLayoutInput[];
    resetFloatingCardState: () => void;
}
export declare const useFloatingCardState: () => UseFloatingCardStateResult;
export {};
