import { type ReactElement } from "react";
import { type location } from "@synnaxlabs/x";
import { type Node } from './types';
import { Tabs } from '../tabs';
/** Props for the {@link Mosaic} component */
export interface MosaicProps extends Omit<Tabs.TabsProps, "onDrop" | "tabs" | "onResize" | "onCreate"> {
    root: Node;
    onDrop: (key: number, tabKey: string, loc: location.Location) => void;
    onResize: (key: number, size: number) => void;
    onCreate?: (key: number, loc: location.Location, tabKeys?: string[]) => void;
}
/***
 * Mosaic renders a tree of tab panes, with the ability to drag and drop tabs to
 * different locations in the tree as well as resize the panes (think of your typical
 * code editor). This component should be used in conjuction with the Mosaic.use hook
 * to implement the mosaic logic and maintain the state.
 *
 * @param props - The props for the Mosaic component. All props not listed below are
 * passed to the Tabs component of each set of tabs in the mosaic.
 * @param props.root - The root of the mosaic tree. This prop is provided by the
 *  Mosaic.use hook.
 * @param props.onDrop - The callback executed when a tab is dropped in a new location.
 * This prop is provided by the Mosaic.use hook.
 * @param props.onResize - The callback executed when a pane is resized. This prop is
 *  provided by the Mosaic.use hook.
 */
export declare const Mosaic: import("react").MemoExoticComponent<(props: MosaicProps) => ReactElement | null>;
/**
 * This type should be used when the user wants to drop a tab in the mosaic.
 * Dropping an item with this signature will call the {@link Mosaic} onDrop handler.
 */
export declare const HAUL_DROP_TYPE = "pluto-mosaic-tab-drop";
/** This type should be used when the user wants to create a new tab in the mosaic.
Dropping an item with this signature will call the {@link Mosaic} onCreate handler. */
export declare const HAUL_CREATE_TYPE = "pluto-mosaic-tab-create";
