import { AuthParams, FetchState, ID, ResolvedBatchFile } from '@zeniai/client-epic-state';
import { ManualSearchTransactionResult } from './ManualSearchInput';
interface UnmatchedTabProps {
    authParams: AuthParams;
    pendingMatchAttachmentId: ID | null;
    pendingMatchTransactionId: ID | null;
    unmatchedFiles: ResolvedBatchFile[];
    /**
     * Drives exit animation after a successful confirm-match. Defaults to `Not-Started` when omitted (e.g. Storybook).
     */
    confirmMatchFetchState?: FetchState;
    hasMoreBatchDetails?: boolean;
    /** True while confirm-match API is in flight — lock selection and search. */
    isConfirmMatchInProgress?: boolean;
    isLoading?: boolean;
    isLoadingMore?: boolean;
    isLoadingMoreManualSearch?: boolean;
    isSearching?: boolean;
    /**
     * When set (e.g. from app selector), search UI is limited to this attachment.
     * If omitted, the tab tracks the last receipt that fired a search (query length ≥ 2)
     * so global `searchResults` are not shown on every card at once.
     */
    manualSearchNextPageToken?: string | null;
    manualSearchResultsAttachmentId?: ID | null;
    manualSearchTotalCount?: number;
    /** Bumps when manual search state is cleared — remount per-receipt search UI. */
    manualSearchUiResetKey?: number;
    pastUnmatchedFiles?: ResolvedBatchFile[];
    /**
     * Scroll container for infinite load (IntersectionObserver root).
     * - Omitted: use viewport (e.g. Storybook).
     * - `null`: parent ref not attached yet — wait before observing (avoids viewport + root double-fetch).
     * - `HTMLElement`: use as `root`.
     */
    scrollRoot?: HTMLElement | null;
    searchResults?: ManualSearchTransactionResult[];
    onPendingMatchChange: (info: {
        attachmentId: ID;
        batchId: ID;
        fileName: string;
        transactionId: ID;
        transactionType: string;
    } | null) => void;
    onDelete?: (attachmentId: ID) => void;
    onLoadMoreBatchDetails?: () => void;
    onLoadMoreManualSearch?: () => void;
    /** Empty `query`: clear manual search; trimmed length ≥ 2: run search. */
    onSearchTransactions?: (query: string, pageToken?: string | null) => void;
}
export declare const UnmatchedTab: ({ authParams, unmatchedFiles, pastUnmatchedFiles, hasMoreBatchDetails, isLoading, isLoadingMore, isLoadingMoreManualSearch, isSearching, manualSearchNextPageToken, manualSearchTotalCount, manualSearchUiResetKey, confirmMatchFetchState, isConfirmMatchInProgress, pendingMatchAttachmentId, pendingMatchTransactionId, onDelete, onLoadMoreBatchDetails, onLoadMoreManualSearch, onPendingMatchChange, onSearchTransactions, manualSearchResultsAttachmentId, scrollRoot, searchResults, }: UnmatchedTabProps) => import("react/jsx-runtime").JSX.Element;
export {};
