import { PopupButtonsProps } from "../buttons/PopupButtons";
import React from "react";
interface ThreadProps {
    onCollapseLevel: (id: string) => void;
    onUncollapseLevel: (id: string) => void;
    getCollapseReason: (id: string) => React.ReactNode;
    getStemOptions: (levelId: string | null) => PopupButtonsProps["options"];
}
interface CollapseGroupProps extends IndentProps {
    onLoadBefore?: (id: string) => void;
    onLoadAfter?: (id: string) => void;
    _endsLevel?: boolean;
}
interface ChildrenWithRenderProps {
    parentBoundary?: string;
    children?: JSX.Element | JSX.Element[] | ((refCallback: (element: HTMLElement | null) => void, id: string) => React.ReactNode);
}
/**
 * This is how the thread structure is supposed to look like:
 *
 * <Thread>
 *   <Post>
 *   <Thread.Indent>
 *     <Thread.Item><Post></Thread.Item>
 *     <Thread.Item><Post></Thread.Item>
 *     <Thread.Item><Post></Thread.Item>
 *     <Thread.Item>
 *        <Post>
 *        <Thread.Indent>
 *          <Thread.Item><Post></Thread.Item>
 *          <Thread.Item><Post></Thread.Item>
 *        </Thread.Indent>
 *      </Thread.Item>
 *   </Thread.Indent>
 * </Thread>
 *
 * IMPORTANT NOTE: Thread.Indent should always be a direct discendant of Thread.Item.
 * If a component is wrapped around levels of these tree, make sure that it wraps a
 * Thread.Item and not simply the indentation.
 */
declare const Thread: React.FC<ThreadProps & ChildrenWithRenderProps> & {
    Indent: typeof Indent;
    Item: typeof Item;
    CollapseGroup: typeof CollapseGroup;
};
export declare const CollapseGroup: React.FC<CollapseGroupProps>;
declare const Item: React.FC<ChildrenWithRenderProps>;
interface StemProps {
    levelId: string | null;
}
export declare const Stem: React.FC<StemProps>;
interface IndentProps {
    id: string | null;
    collapsed?: boolean;
    _childOfItem?: boolean;
}
export declare const Indent: React.FC<IndentProps>;
export default Thread;
