import CodeView from "../../code-view/CodeView";
import EventSourcePoint from "../../utils/EventSourcePoint";
import TreeNode from "../../utils/TreeNode";
import CodeViewButton from "../CodeViewButton";
import CodeViewFolderItem from "./CodeViewFolderItem";
import FileFolderItem from "./FileFolderItem";
import FolderInfo from "./FolderInfo";
import ProjectCodeBoxFile from "./ProjectCodeBoxFile";
/** Represents folder in project code box panel. */
declare class Folder {
    /** Folder button element. */
    protected buttonElement: HTMLButtonElement;
    /** Folder button text element. */
    private buttonTextElement;
    /** Container for folder items. */
    private itemsContainer;
    /** Collapsible functionality. */
    private collapsible;
    /** Name of folder. */
    private name;
    /** Subfolders stored by name. */
    private subfolders;
    /** Code view items stored by name. */
    private codeViewItems;
    /** File items stored by name. */
    private fileItems;
    /** Indicates whether all parent folders are opened. This value is changed when updateTabNavigation method is called. */
    private lastAllParentOpened;
    /**
     * Creates new folder.
     * @param name Name of folder.
     * @param parentOpened Indicates whether all parent folders are opened.
     * @param openCloseAnimationSpeed Open/close animation speed in miliseconds.
     * @param openCloseAnimationEasingFunction CSS easing function for open/close animation.
     * @param svgSpritePath Path to SVG sprite for icons.
     * @param arrowIconName Name of arrow icon.
     * @param folderIconName Name of folder icon.
     * @param cssModifierClass CSS class to be added to folder button.
     * @param parentElement Element into which should be folder appended (null if it should not be appended).
     */
    constructor(name: string, allParentsOpened: boolean, openCloseAnimationSpeed: number, openCloseAnimationEasingFunction: string, svgSpritePath?: string | null, arrowIconName?: string | null, folderIconName?: string | null, cssModifierClass?: string | null, parentElement?: HTMLElement | null);
    /**
     * Appends folder to element.
     * @param container Element to append folder to.
     */
    appendTo(container: HTMLElement): void;
    /**
     * Detaches folder from its parent element.
     */
    detach(): void;
    /**
     * Returns name of folder.
     * @returns Name of folder.
     */
    getName(): string;
    /**
     * Sets name of folder.
     * @param name Name.
     */
    setName(name: string): void;
    /**
     * Opens folder.
     * @param animate Determines whether animation should be used.
     */
    open(animate?: boolean): void;
    /**
     * Closes folder.
     * @param animate Determines whether animation should be used.
     */
    close(animate?: boolean): void;
    /**
     * Checkes whether folder is opened.
     * @returns Indicates whether folder is opened.
     */
    isOpened(): boolean;
    /**
     * Updates tab navigation.
     * @param allParentOpened Indicates whether all parent folders are opened.
     */
    updateTabNavigation(allParentOpened: boolean): void;
    /**
     * Adds folder as subfolder.
     * @param name Name of folder.
     * @param folder Folder.
     */
    addFolder(name: string, folder: Folder): void;
    /**
     * Returns subfolder by name.
     * @param folderName Folder name.
     * @returns Subfolder or null if subfolder wasn't found.
     */
    getFolder(folderName: string): Folder | null;
    /**
     * Returns subfolders of folder.
     * @returns Subfolders.
     */
    getFolders(): Folder[];
    /**
     * Removes subfolder.
     * @param folderName Name of folder to be removed.
     * @returns Indicates whether subfolder was successfully found and removed.
     */
    removeFolder(folderName: string): boolean;
    /**
     * Renames subfolder.
     * @param folderName Name of folder to be renamed.
     * @param newFolderName New folder name.
     * @returns Indicates whether subfolder was successfully found and removed.
     */
    renameFolder(folderName: string, newFolderName: string): boolean;
    /**
     * Returns number of subfolders (direct subfolders).
     * @returns Number of subfolders.
     */
    getFoldersCount(): number;
    /**
     * Adds code view to folder.
     * @param name Name of code view.
     * @param codeView Code view.
     * @param showCodeViewEventSource Event source to be used to fire event when code view button is clicked.
     * @param svgSpritePath Path to SVG sprite with icons.
     * @param buttonIconName Icon name for code view button.
     * @returns Created code view item or null if code view could not be added to folder (when there is already code view with same name).
     */
    addCodeView(name: string, codeView: CodeView, showCodeViewEventSource: EventSourcePoint<CodeViewButton, CodeView>, svgSpritePath?: string | null, buttonIconName?: string | null): CodeViewFolderItem | null;
    /**
     * Returns code view item by name.
     * @param name Name of code view.
     * @returns Code view item or null if code view item wasn't found.
     */
    getCodeView(name: string): CodeViewFolderItem | null;
    /**
     * Returns code view items in folder.
     * @param traverseSubfolders Determines whether code view items in subfolders should also be included.
     * @returns Code view items.
     */
    getCodeViews(traverseSubfolders?: boolean): CodeViewFolderItem[];
    /**
     * Returns names of code view items in folder (not including code view items in subfolders).
     * @returns Code view names.
     */
    getCodeViewNames(): string[];
    /**
     * Removes code view item.
     * @param name Name of code view.
     * @returns Indicates whether code view item was successfully found and removed.
     */
    removeCodeView(name: string): boolean;
    /**
     * Returns number of code view items (code view items in subfolders are not included).
     * @returns Number of code view items.
     */
    getCodeViewsCount(): number;
    /**
     * Adds file to folder.
     * @param name Name of file.
     * @param codeBoxFile Code box file.
     * @param svgSpritePath Path to SVG sprite with icons.
     * @param buttonIconName Icon name for file button.
     * @param buttonDownloadIconName Download icon name for file button.
     * @returns Created file item or null if file could not be added to folder (when there is already file with the same name).
     */
    addFile(name: string, codeBoxFile: ProjectCodeBoxFile, svgSpritePath?: string | null, buttonIconName?: string | null, buttonDownloadIconName?: string | null): FileFolderItem | null;
    /**
     * Returns file item by name.
     * @param name Name of file.
     * @returns File item or null if file item wasn't found.
     */
    getFile(name: string): FileFolderItem | null;
    /**
     * Returns file items in folder.
     * @param traverseSubfolders Determines whether file items in subfolders should also be included.
     * @returns File items.
     */
    getFiles(traverseSubfolders?: boolean): FileFolderItem[];
    /**
     * Returns names of file items in folder (not including file items in subfolders).
     * @returns File names.
     */
    getFileNames(): string[];
    /**
     * Removes file item.
     * @param name Name of file.
     * @returns Indicates whether file item was successfully found and removed.
     */
    removeFile(name: string): boolean;
    /**
     * Returns number of file items (file items in subfolders are not included).
     * @returns Number of file items.
     */
    getFilesCount(): number;
    /**
     * Returns names of code view items in folder and subfolders. If code view item is located in subfolder, the final name can be for example "subfolder/filename.js" or "subfolder/anothersubfolder/filename.js".
     * @returns Code view names.
     */
    getCodeViewNamesInFolderAndSubfolders(): string[];
    /**
     * Returns names of file items in folder and subfolders. If file item is located in subfolder, the final name can be for example "subfolder/filename.png" or "subfolder/anothersubfolder/filename.png".
     * @returns File names.
     */
    getFileNamesInFolderAndSubfolders(): string[];
    /**
     * Returns folder structure of folder.
     * @returns Folder structure.
     */
    getFolderStructure(): TreeNode<FolderInfo>;
    /**
     * Called by collapsible when it is toggled.
     */
    private onCollapsibleToggled;
    /**
     * Sorts folder items alphabetically (first folders, then code view and file items).
     */
    private sortItems;
}
export default Folder;
