import { type ReactNode } from 'react'; import type { PropsRenderSlots } from '@deepseek-ai/dsh-client-ui-slots'; import type { ArkmeBotSummary, ArkmeOfficialAuthorProfile, ArkmeSourceDirectory, ArkmeSourceItem } from '../types.js'; import type { ArkmeDirectoryRowProps } from './slots-contract.js'; import { type ArkmeDshMessageSearchResult } from './ArkmeSearchSurface.js'; import { type ArkmeSourceSort } from './source-list.js'; import { type ArkmeSourceTreeRow } from './source-tree.js'; export interface ArkmeNavigationProps { active?: boolean; wide?: boolean; compactDirectory?: boolean; currentSessionId?: string | undefined; embeddedProductShell?: boolean; onClose?: () => void; onActivateSurface?: () => void; showHarnessEntry?: boolean; lockedDirectory?: boolean; sendToSelfSource?: ArkmeSourceItem; directoryLead?: ReactNode; onCreateTask?: () => void; searchDshMessages?: (query: string, signal: AbortSignal) => Promise; onOpenDshSession?: (sessionId: string) => void; renderSlot?: PropsRenderSlots<'arkme.directory.entry' | 'arkme.send-to-self.entry' | 'arkme.topic.actions'>['renderSlot']; } export declare const ARKME_TOPIC_HIERARCHY_MAX_LEVEL = 5; /** Bot conversations are independent of chat activity, so keep their list in creation order. */ export declare function sortArkmeBotsByCreatedAt(bots: readonly ArkmeBotSummary[]): ArkmeBotSummary[]; export declare function botActivityAtMillis(bot: ArkmeBotSummary): number; export declare function arkmeRootDirectoryLoadState({ authenticated, directory, baselineReady, isRefreshing, hasSources, error, }: { authenticated: boolean; directory: ArkmeSourceDirectory; baselineReady: boolean; isRefreshing: boolean; hasSources: boolean; error: string; }): 'idle' | 'loading' | 'updating' | 'error'; export declare function arkmeHomeTourDirectoryAttributes({ directory, accountKey, accountScopeMatches, authenticated, active, embeddedProductShell, baselineReady, }: { directory: ArkmeSourceDirectory; accountKey: string | undefined; accountScopeMatches: boolean; authenticated: boolean; active: boolean; embeddedProductShell: boolean; baselineReady: boolean; }): Record; /** Arkme-owned visual shell for every consumer contributed directory entry. */ export declare function ArkmeDirectoryRow({ avatar, title, preview, selected, disabled, ariaLabel, onClick, homeTourTarget, titleBadge, }: ArkmeDirectoryRowProps & { homeTourTarget?: 'official-author'; titleBadge?: ReactNode; }): import("react").JSX.Element; /** Stable renderer passed through the slot owner contract, including to dynamic extensions. */ export declare function renderArkmeDirectoryRow(props: ArkmeDirectoryRowProps): ReactNode; export declare function ArkmeRecordingsRow({ selected, onClick }: { selected: boolean; onClick(): void; }): import("react").JSX.Element; export declare function ArkmeCallsRow({ selected, onClick }: { selected: boolean; onClick(): void; }): import("react").JSX.Element; export declare function ArkmeCalendarRow({ selected, onClick }: { selected: boolean; onClick(): void; }): import("react").JSX.Element; export declare function ArkmeSearchRow({ selected, onClick }: { selected: boolean; onClick(): void; }): import("react").JSX.Element; export declare function ArkmeNotificationsRow({ selected, onClick }: { selected: boolean; onClick(): void; }): import("react").JSX.Element; export declare function ArkmeContactAddRow({ selected, onClick }: { selected: boolean; onClick(): void; }): import("react").JSX.Element; export declare function ArkmeArkoRow({ selected, displayName, latestPreview, latestAtMillis, onClick, onContextMenu, pinned, }: { pinned?: boolean; onContextMenu?: React.MouseEventHandler; selected: boolean; displayName?: string; latestPreview?: string; latestAtMillis?: number; onClick(): void; }): import("react").JSX.Element; export declare function DeepSeekHarnessRow({ selected, onClick, accountScope, hoverEnabled, onContextMenu, pinned }: { selected: boolean; onClick(): void; accountScope?: string | undefined; hoverEnabled?: boolean; pinned?: boolean; onContextMenu?: React.MouseEventHandler; }): import("react").JSX.Element; /** The Host owns the official author identity; this fallback only avoids a transient duplicate entry while it loads. */ export declare function arkmeOfficialAuthorSource(sources: readonly ArkmeSourceItem[], authorUserId: number | undefined): ArkmeSourceItem | undefined; export declare function ArkmeOfficialAuthorRow({ profile, busy, onClick, }: { profile?: ArkmeOfficialAuthorProfile; busy?: boolean; onClick(): void; }): import("react").JSX.Element; export declare function arkmeRootChatPreview(source: ArkmeSourceItem): string; export declare function arkmeRootChatPreviewParts(source: ArkmeSourceItem): { mentionPrefix: string; preview: string; }; export declare function arkmeRootChatUnreadPlacement(source: { kind?: ArkmeSourceItem['kind']; unreadCount?: number; badgeUnreadCount?: number; notificationAllowed?: boolean; isMuted?: boolean; }): 'avatar' | 'dot' | 'none'; export declare function ArkmeRootChatPreview({ source, disabled }: { source: ArkmeSourceItem; disabled?: boolean; }): import("react").JSX.Element; export interface ArkmeTopicTreeRowProps { row: ArkmeSourceTreeRow; selected: boolean; hovered: boolean; createdHighlightActive?: boolean; createdHighlightVisible?: boolean; rowRef?: (node: HTMLDivElement | null) => void; onHoverChange: (hovered: boolean) => void; onToggle: () => void; onSelect: () => void; onCreateChild: () => void; actions?: ReactNode; } export declare function ArkmeTopicTreeRow({ row, selected, hovered, createdHighlightActive, createdHighlightVisible, rowRef, onHoverChange, onToggle, onSelect, onCreateChild, actions, }: ArkmeTopicTreeRowProps): import("react").JSX.Element; export interface ArkmeTopicCardProps { actions?: ReactNode; source: ArkmeSourceItem; selected: boolean; hovered: boolean; createdHighlightActive?: boolean; createdHighlightVisible?: boolean; rowRef?: (node: HTMLDivElement | null) => void; onHoverChange: (hovered: boolean) => void; onSelect: () => void; } export declare function ArkmeTopicCard({ source, selected, hovered, createdHighlightActive, createdHighlightVisible, rowRef, onHoverChange, onSelect, actions, }: ArkmeTopicCardProps): import("react").JSX.Element; export declare function expandAncestorsForReveal(sources: readonly ArkmeSourceItem[], sourceRef: string, collapsedSourceRefs: ReadonlySet): Set; export declare function isTopicRowFullyVisible(rowRect: Pick, listRect: Pick): boolean; export declare function mergeCreatedTopicSource(sources: readonly ArkmeSourceItem[], createdSource: ArkmeSourceItem): ArkmeSourceItem[]; export declare function canCreateChildTopicAtParentLevel(parentLevel: number | undefined): boolean; export declare function expandTopicFromRowClick(row: ArkmeSourceTreeRow, collapsedSourceRefs: Set): Set; export declare function toggleTopicCollapsedState(sourceRef: string, collapsedSourceRefs: ReadonlySet): Set; export declare function ArkmeTopicCreateFooter({ onCreate }: { onCreate: () => void; }): import("react").JSX.Element; export declare function ArkmeSourceSortMenu({ value, onSelect, open, onClose, anchor, }: { value: ArkmeSourceSort; onSelect: (value: ArkmeSourceSort) => void; open?: boolean; onClose?: () => void; anchor?: ReactNode; }): import("react").JSX.Element; export declare function ArkmeSourceSortControl({ value, onChange, }: { value: ArkmeSourceSort; onChange: (value: ArkmeSourceSort) => void; }): import("react").JSX.Element; export declare function ArkmeNavigation({ active, wide, compactDirectory, currentSessionId, embeddedProductShell, onClose, onActivateSurface, showHarnessEntry, lockedDirectory, sendToSelfSource, directoryLead, onCreateTask, searchDshMessages, onOpenDshSession, renderSlot, }: ArkmeNavigationProps): import("react").JSX.Element; //# sourceMappingURL=ArkmeVirtualWorkspace.d.ts.map