import { TemplateResult } from 'lit';
import { IconType } from '../../md/icons/Icons.js';
import { SplitLayout } from './SplitLayout.js';
import { SplitPanel } from './SplitPanel.js';
export type ItemRenderCallback = (item: SplitItem, visible: boolean) => TemplateResult;
export interface ISplitItem {
    /**
     * The kind of opened item. This is to be used by the application
     * to recognize a kind of item to render. It is transparent to the layout system.
     */
    kind: string;
    /**
     * The key of the opened item. This is to be used by the application to identify
     * the rendered item. It is also used by the manager to identify the item.
     * It has to be unique key across the layout.
     *
     * Note, multiple panels can render the same item, however, they all share
     * the same item's state.
     */
    key: string;
    /**
     * Optional parent information that helps locating this object.
     * This is the item's parent, not related to a layout.
     */
    parent?: string;
    /**
     * The label to render in the layout tab.
     */
    label: string;
    /**
     * Whether the tab is pinned (cannot be closed or moved).
     */
    pinned?: boolean;
    /**
     * The tab index.
     */
    index?: number;
    /**
     * The icon defined in the internal library to render with the tab.
     */
    icon?: IconType;
    /**
     * A tab that is always present in the layout. The user can't close this tab.
     */
    persistent?: boolean;
    /**
     * A property to be used by the screen to indicate the property is being loaded
     * (from a data store, file, etc).
     */
    loading?: boolean;
    /**
     * Indicates the item has been changed and is out of sync with the data store.
     */
    isDirty?: boolean;
    /**
     * The layout value. Can be used to pass the object to render to the layout's render function.
     * This must be a serializable object as it will be passed to the `storeCallback`.
     *
     * This also can be used to temporary store unsaved changes to the object and sync the changes
     * on save action.
     */
    value?: unknown;
}
export declare class SplitItem implements ISplitItem {
    manager: SplitLayout;
    kind: string;
    key: string;
    parent?: string;
    label: string;
    pinned?: boolean;
    index: number;
    icon?: IconType;
    persistent?: boolean;
    loading?: boolean;
    isDirty?: boolean;
    value?: unknown;
    /**
     * @param manager A reference to the manager.
     * @param id The id of the item in the layout system. This value is never serialized.
     * @param schema A schema to restore the state of the panel.
     */
    constructor(manager: SplitLayout, schema: ISplitItem);
    new(schema: ISplitItem): void;
    toJSON(): ISplitItem;
    /**
     * @returns The parent of the item. Returns undefined when the item was removed from layout.
     */
    getParents(): SplitPanel[];
    /**
     * Updates the label and triggers side effects like layout and view update.
     *
     * @param value The new value of the label. Empty values are ignored.
     * @param trigger Whether to trigger side effects (requesting a view update and notifying change)
     */
    setLabel(value: string, trigger?: boolean): void;
    updateView(): void;
    notifyChange(): void;
}
//# sourceMappingURL=SplitItem.d.ts.map