import { COABalance, ID, ReportID, User, UserPayload } from '@zeniai/client-epic-state';
import { ReportTreeNode } from '../../reportTree/reportTreeTypes';
import { CompanyNameWithId, LiveBlocksCompany, LiveBlocksUser, ThreadMetadata } from './CollaborationTypes';
export declare const getLiveBlocksUsersByUserIds: (users: User[], userId: ID[]) => LiveBlocksUser[];
export declare const getCompanyByCompanyIds: (companies: CompanyNameWithId[], roomIds: ID[]) => LiveBlocksCompany[];
export declare const getCompanyIdFromRoomId: (roomId: ID) => ID | undefined;
export declare const getUsersByUserIdsUserPayload: (users: UserPayload[], userId: ID[]) => LiveBlocksUser[];
export declare const mapUsersPayloadToUsers: (usersPayloadList: UserPayload[], userIds: ID[]) => User[];
export declare const toLiveBlocksUsers: (users: UserPayload[]) => LiveBlocksUser[];
export declare const getUsersByUserIdsFromLiveBlockUsers: (users: LiveBlocksUser[], userIds: ID[]) => LiveBlocksUser[];
export declare const filterAndReturnUserIds: (users: LiveBlocksUser[], text: string) => ID[];
/**
 * Derives a stable column key from a COABalance for per-cell comment targeting.
 *
 * Regular period columns use startDate_endDate (API-stable, locale-independent).
 * Calculated columns (YTD, Change %, etc.) use the balance type enum string.
 * Returns undefined for null balances so callers can skip commenting on empty cells.
 */
export declare const toColumnKey: (balance: COABalance | null) => string | undefined;
/**
 * Builds a per-cell entityId by combining a row-level stable ID with a column key.
 * Returns undefined if either part is missing (commenting should be disabled for that cell).
 */
export declare const toCellEntityId: (rowStableId: string | undefined, balance: COABalance | null) => string | undefined;
export interface ReportThreadTarget {
    accountId: string;
    cellEntityId: string;
    columnKey: string;
    reportId: ReportID;
}
/**
 * Parses thread metadata into structured navigation coordinates for report cells.
 *
 * entityType format: `{tab}.details.{reportId}` (e.g. `standard_report.details.profit_and_loss`)
 * entityId  format: `{accountId}:{columnKey}`   (e.g. `12345:2024-01-01_2024-01-31`)
 */
export declare const parseReportThreadTarget: (metadata: ThreadMetadata | undefined) => ReportThreadTarget | null;
export interface TreeNodeLookupResult {
    ancestorIds: string[];
    targetNodeId: string;
}
/**
 * Walks a report tree and returns the chain of ancestor node IDs leading
 * to the node whose `reportElementData.element.data` has a matching `accountId`,
 * plus the target node's own ID (needed for react-vtree scrollToItem).
 * Returns null when the account is not found anywhere in the tree.
 */
export declare const findAncestorNodeIds: (rootNodes: ReportTreeNode[], targetAccountId: string) => TreeNodeLookupResult | null;
