import { location } from '@synnaxlabs/x';
import { DragEvent, ReactElement, RefObject } from 'react';
import { Flex } from '../flex';
import { Node } from './types';
import { Portal } from '../portal';
import { Tabs } from '../tabs';
/** Props for the {@link Mosaic} component */
export interface MosaicProps extends Pick<Tabs.TabsProps, "onSelect" | "contextMenu" | "emptyContent" | "onRename" | "onClose" | "addTooltip">, Omit<Flex.BoxProps, "contextMenu" | "onSelect" | "children" | "onResize" | "onDrop"> {
    root: Node;
    onDrop: (key: number, droppedTabKey: string, loc: location.Location, index?: number) => void;
    onResize: (key: number, size: number) => void;
    onCreate?: (key: number, loc: location.Location, tabKeys?: string[]) => void;
    onReorder?: (key: number, droppedTabKey: string, targetTabKey: string, location: location.X) => void;
    onFileDrop?: (key: number, loc: location.Location, event: DragEvent) => void;
    children: Tabs.RenderProp;
    activeTab?: string;
}
/***
 * 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 conjunction 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<({ root, onDrop, onResize, onCreate, onFileDrop, children, activeTab, emptyContent, onSelect, onClose, onRename, onReorder, contextMenu, addTooltip, className, ...rest }: 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";
export interface UsePortalProps extends Pick<MosaicProps, "root" | "onSelect" | "children"> {
}
export type UsePortalReturn = [RefObject<Map<string, Portal.Node>>, ReactElement[]];
export declare const usePortal: ({ root, onSelect, children, }: UsePortalProps) => UsePortalReturn;
//# sourceMappingURL=Mosaic.d.ts.map