import type { TeamChannel, TeamConversation } from '../team-app-contract.js'; import { type TeamDirectoryPreferences } from './team-directory-preferences.js'; type Snapshot = { items: TeamConversation[]; hasMore: boolean; loading: boolean; hasLoaded: boolean; error?: string; }; export declare const subscribeTeamDirectory: (listener: () => void) => (() => void); export declare const readTeamDirectory: (key: string) => Snapshot; export declare const refreshTeamDirectory: (key: string, more?: boolean, readStateOnly?: boolean) => Promise; export declare function discardTeamDirectory(key: string, conversation: TeamConversation): void; /** One account-scoped presentation source. Neither Chat storage nor readiness depends on it. */ export declare function startTeamDirectory(key: string): () => void; export interface TeamConversationGroup { key: string; channel: TeamChannel; conversations: TeamConversation[]; latest: TeamConversation; unread: number; attentionUnread: number; unreadExact: boolean; } export declare function groupTeamConversations(conversations: readonly TeamConversation[], complete?: boolean): TeamConversationGroup[]; type TeamDirectoryRow = { kind: 'team'; conversation: TeamConversation; activeAtMillis: number; pinned: boolean; } | { kind: 'team-folder'; group: TeamConversationGroup; activeAtMillis: number; pinned: boolean; }; /** Internal visitors share one team entry; external-facing conversations retain their direct entry. */ export declare function mergeTeamDirectoryRows(ordinary: readonly T[], teams: TeamConversation[], complete?: boolean, preferences?: TeamDirectoryPreferences): (T | TeamDirectoryRow)[]; export {}; //# sourceMappingURL=team-conversation-directory.d.ts.map