import { BaseView, WINDOW_EVENT_MAP, WINDOW_PARAMS } from "./BaseView";
import "../scss/TreeView.scss";
export interface TREEVIEW_EVENT_SELECT {
    item: TreeItem;
    user: boolean;
}
export interface TREEVIEW_EVENT_DROP {
    item: TreeItem;
    srcValue?: unknown;
    event: DragEvent;
}
export interface TREEVIEW_EVENT_DRAG_START {
    item: TreeItem;
    event: DragEvent;
}
export interface TREEVIEW_EVENT_OPEN {
    item: TreeItem;
    opened: boolean;
}
export interface TreeViewEventMap extends WINDOW_EVENT_MAP {
    itemOver: [{
        event: MouseEvent;
        item: TreeItem;
    }];
    itemOpen: [TREEVIEW_EVENT_OPEN];
    itemSelect: [TREEVIEW_EVENT_SELECT];
    itemDblClick: [TREEVIEW_EVENT_SELECT];
    itemDrop: [TREEVIEW_EVENT_DROP];
    itemDragStart: [TREEVIEW_EVENT_DRAG_START];
}
/**
 *
 *
 * @export
 * @class TreeItem
 */
export declare class TreeItem {
    private hNode;
    private childNode;
    private opened;
    private body;
    private value;
    private keys;
    /**
     *Creates an instance of TreeItem.
     * @param {string} [label]
     * @param {boolean} [opened]
     * @memberof TreeItem
     */
    constructor(label?: string, opened?: boolean);
    isOpened(): boolean;
    /**
     *アイテムのノードを返す
     *
     * @returns {HTMLElement}
     * @memberof TreeItem
     */
    getNode(): HTMLElement;
    /**
     *アイテムのラベル部分のノードを返す
     *
     * @returns {HTMLElement}
     * @memberof TreeItem
     */
    getBody(): HTMLElement;
    /**
     *アイテムに対してキーを関連付ける
     *
     * @param {string} name
     * @param {*} value
     * @memberof TreeItem
     */
    setKey(name: string, value: unknown): void;
    /**
     *アイテムのキーを取得する
     *
     * @param {string} name
     * @returns
     * @memberof TreeItem
     */
    getKey(name: string): unknown;
    /**
     *アイテムを追加する
     *
     * @param {*} [label] ラベル
     * @param {boolean} [opened] オープン状態
     * @returns {TreeItem} 追加したアイテム
     * @memberof TreeItem
     */
    addItem(label?: string | [string, unknown], opened?: boolean): TreeItem;
    /**
     *子アイテムを全てクリア
     *
     * @memberof TreeItem
     */
    clearItem(): void;
    /**
     *自分自身を親から切り離す
     *
     * @memberof TreeItem
     */
    removeItem(): void;
    moveItem(vector: number): boolean;
    /**
     *子アイテムの数を返す
     *
     * @returns {number}
     * @memberof TreeItem
     */
    getChildCount(): number;
    /**
     *アイテムに関連付ける値を設定
     *
     * @param {*} value
     * @memberof TreeItem
     */
    setItemValue(value: unknown): void;
    /**
     *アイテムに関連付けた値を取得
     *
     * @returns {*}
     * @memberof TreeItem
     */
    getItemValue(): unknown;
    /**
     *アイテムのラベルを設定
     *
     * @param {string} value
     * @memberof TreeItem
     */
    setItemText(value: string): void;
    /**
     *アイテムのラベルを取得
     *
     * @returns {string}
     * @memberof TreeItem
     */
    getItemText(): string;
    /**
     *子アイテムを取得
     *
     * @param {number} index
     * @returns {TreeItem}
     * @memberof TreeItem
     */
    getChildItem(index: number): TreeItem;
    /**
     *階層の深さを返す
     *
     * @returns
     * @memberof TreeItem
     */
    getTreeLevel(): number;
    /**
     *親アイテムを取得
     *
     * @returns {TreeItem}
     * @memberof TreeItem
     */
    getParentItem(): TreeItem | null;
    /**
     *自分を含めた階層から値を参照してアイテムを探す
     *
     * @param {*} value
     * @returns {TreeItem}
     * @memberof TreeItem
     */
    findItemFromValue(value: unknown): TreeItem | null;
    /**
     *ツリーを展開する
     *
     * @param {boolean} opened
     * @param {boolean} [anime]
     * @memberof TreeItem
     */
    openItem(opened: boolean, anime?: boolean): void;
    /**
     *アイテムを選択する
     *
     * @memberof TreeItem
     */
    selectItem(scroll?: boolean, user?: boolean): void;
    /**
     *所属先のTreeViewを返す
     *
     * @returns {TreeView}
     * @memberof TreeItem
     */
    getTreeView(): TreeView | null;
}
/**
 *TreeView用クラス
 *
 * @export
 * @class TreeView
 * @extends {BaseView}
 */
export declare class TreeView<T extends TreeViewEventMap = TreeViewEventMap> extends BaseView<T> {
    private mRootItem;
    private mSelectItem;
    /**
     *Creates an instance of TreeView.
     * @memberof TreeView
     */
    constructor(params?: WINDOW_PARAMS);
    /**
     * 設定されている相対を条件にアイテムを検索
     *
     * @param {*} value
     * @returns {TreeItem}
     * @memberof TreeView
     */
    findItemFromValue(value: unknown): TreeItem | null;
    /**
     *最上位のアイテムを返す
     *
     * @returns {TreeItem}
     * @memberof TreeView
     */
    getRootItem(): TreeItem;
    /**
     *最上位の子としてアイテムを追加する
     *
     * @param {*} [label]
     * @param {boolean} [opened]
     * @returns {TreeItem}
     * @memberof TreeView
     */
    addItem(label?: string | [string, unknown], opened?: boolean): TreeItem;
    /**
     *アイテムを全て削除する
     *
     * @memberof TreeView
     */
    clearItem(): void;
    /**
     *アイテムを選択する
     *子アイテムが使用するので基本的には直接呼び出さない
     * @param {TreeItem} item 選択するアイテム
     * @memberof TreeView
     */
    selectItem(item: TreeItem, scroll?: boolean, user?: boolean): void;
    /**
     * 設定されている値を条件にアイテムを選択
     *
     * @param {*} value
     * @memberof TreeView
     */
    selectItemFromValue(value: unknown, scroll?: boolean, user?: boolean): void;
    /**
     *選択されているアイテムを返す
     *
     * @returns 選択されているアイテム
     * @memberof TreeView
     */
    getSelectItem(): TreeItem | null;
    /**
     *選択されているアイテムの値を返す
     *
     * @returns
     * @memberof TreeView
     */
    getSelectItemValue(): unknown;
    getTreeStat(): {
        [key: string]: boolean;
    };
    setTreeStat(treeStat: {
        [key: string]: boolean;
    }): void;
}
