import type { TemplateResult } from 'lit';
import type { SplitItem } from './SplitItem.js';
import type { ISplitLayout } from './SplitLayout.js';
export declare enum SplitDirection {
    horizontal = "horizontal",
    vertical = "vertical"
}
export declare enum SplitRegion {
    center = "center",
    east = "east",
    west = "west",
    north = "north",
    south = "south"
}
export declare enum PanelState {
    idle = "idle",
    busy = "busy"
}
export declare enum SplitCloseDirection {
    left = "left",
    right = "right",
    both = "both"
}
export declare enum SplitPanelTarget {
    /**
     * Items are added to the first panel
     */
    first = 0,
    /**
     * Items are added to the other, created panel
     */
    other = 1
}
/**
 * Note, options are stored by reference to you can change
 * configuration while the `SplitLayout` is running.
 */
export interface SplitLayoutInit {
    /**
     * The list of DataTransfer types to test against when handling drag and drop.
     * When set it checks whether all types are set on the dragged item.
     * If not set all items are allowed.
     */
    dragTypes?: string[];
    /**
     * When set it adds the `overflow` hidden on the container that holds the tab contents.
     */
    constrain?: boolean;
    /**
     * When defined this is called each time anything in the layout schema change.
     * The application can use this callback to store the state in its data store.
     *
     * When not provided, it is application's responsibility to serialize the state
     * and store the data before page unload.
     *
     * @param state The state object to stare by the application.
     * @returns The callback must return a promise.
     */
    stateCallback?: (state: ISplitLayout) => Promise<void>;
}
export declare enum LayoutType {
    panel = "panel",
    item = "item"
}
export interface IPanelObject {
    /**
     * The type of the object.
     */
    type: LayoutType;
    /**
     * The id of the object in the `definitions` map.
     */
    key: string;
}
export interface SplitLayoutAddOptions {
    /**
     * The region to add the item.
     * When other than `center` it splits the panel.
     */
    region?: SplitRegion;
    /**
     * The index at which to put the item.
     * By default it is added as a last item.
     */
    index?: number;
}
/**
 * Options given when splitting a SplitPanel into 2 panels.
 */
export interface SplitPanelSplitOptions {
    /**
     * The layout direction.
     */
    layout?: SplitDirection;
    /**
     * Directs where to put existing items.
     * It's either the first or the other panel.
     */
    itemsTarget?: SplitPanelTarget;
    /**
     * When set it won't notify the manager about the change.
     * It is useful when this is a part of a process.
     */
    noSideEffects?: boolean;
}
export interface SplitPanelAddOptions {
    /**
     * The layout of the panel.
     */
    layout?: SplitDirection;
    /**
     * the key of the parent layout.
     */
    parent?: string;
}
export type SplitItemRenderCallback = (item: SplitItem, visible: boolean) => TemplateResult;
export interface SplitPanelRemoveItemOptions {
    /**
     * When set it won't notify the manager about the change.
     * It is useful when this is a part of a process.
     */
    noSideEffects?: boolean;
}
//# sourceMappingURL=type.d.ts.map