/**
 * @license
 * Copyright 2020 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */
import type { ConnectionState } from '../serialization/blocks.js';
import type { CssConfig as CategoryCssConfig } from '../toolbox/category.js';
import type { CssConfig as SeparatorCssConfig } from '../toolbox/separator.js';
/**
 * The information needed to create a block in the toolbox.
 * Note that disabled has a different type for backwards compatibility.
 */
export interface BlockInfo {
    kind: string;
    blockxml?: string | Node;
    type?: string;
    gap?: string | number;
    disabled?: string | boolean;
    disabledReasons?: string[];
    enabled?: boolean;
    id?: string;
    collapsed?: boolean;
    inline?: boolean;
    data?: string;
    extraState?: any;
    icons?: {
        [key: string]: any;
    };
    fields?: {
        [key: string]: any;
    };
    inputs?: {
        [key: string]: ConnectionState;
    };
    next?: ConnectionState;
}
/**
 * The information needed to create a separator in the toolbox.
 */
export interface SeparatorInfo {
    kind: string;
    id: string | undefined;
    gap: number | undefined;
    cssconfig: SeparatorCssConfig | undefined;
}
/**
 * The information needed to create a button in the toolbox.
 */
export interface ButtonInfo {
    kind: string;
    text: string;
    callbackkey: string;
}
/**
 * The information needed to create a label in the toolbox.
 */
export interface LabelInfo {
    kind: string;
    text: string;
    id: string | undefined;
}
/**
 * The information needed to create either a button or a label in the flyout.
 */
export type ButtonOrLabelInfo = ButtonInfo | LabelInfo;
/**
 * The information needed to create a category in the toolbox.
 */
export interface StaticCategoryInfo {
    kind: string;
    name: string;
    contents: ToolboxItemInfo[];
    id: string | undefined;
    categorystyle: string | undefined;
    colour: string | undefined;
    cssconfig: CategoryCssConfig | undefined;
    hidden: string | undefined;
    expanded?: string | boolean;
}
/**
 * The information needed to create a custom category.
 */
export interface DynamicCategoryInfo {
    kind: string;
    custom: string;
    id: string | undefined;
    categorystyle: string | undefined;
    colour: string | undefined;
    cssconfig: CategoryCssConfig | undefined;
    hidden: string | undefined;
    expanded?: string | boolean;
}
/**
 * The information needed to create either a dynamic or static category.
 */
export type CategoryInfo = StaticCategoryInfo | DynamicCategoryInfo;
/**
 * Any information that can be used to create an item in the toolbox.
 */
export type ToolboxItemInfo = FlyoutItemInfo | StaticCategoryInfo;
/**
 * All the different types that can be displayed in a flyout.
 */
export type FlyoutItemInfo = BlockInfo | SeparatorInfo | ButtonInfo | LabelInfo | DynamicCategoryInfo;
/**
 * The JSON definition of a toolbox.
 */
export interface ToolboxInfo {
    kind?: string;
    contents: ToolboxItemInfo[];
}
/**
 * An array holding flyout items.
 */
export type FlyoutItemInfoArray = FlyoutItemInfo[];
/**
 * All of the different types that can create a toolbox.
 */
export type ToolboxDefinition = Node | ToolboxInfo | string;
/**
 * All of the different types that can be used to show items in a flyout.
 */
export type FlyoutDefinition = FlyoutItemInfoArray | NodeList | ToolboxInfo | Node[];
/**
 * Position of the toolbox and/or flyout relative to the workspace.
 */
export declare enum Position {
    TOP = 0,
    BOTTOM = 1,
    LEFT = 2,
    RIGHT = 3
}
/**
 * Converts the toolbox definition into toolbox JSON.
 *
 * @param toolboxDef The definition of the toolbox in one of its many forms.
 * @returns Object holding information for creating a toolbox.
 * @internal
 */
export declare function convertToolboxDefToJson(toolboxDef: ToolboxDefinition | null): ToolboxInfo | null;
/**
 * Converts the flyout definition into a list of flyout items.
 *
 * @param flyoutDef The definition of the flyout in one of its many forms.
 * @returns A list of flyout items.
 * @internal
 */
export declare function convertFlyoutDefToJsonArray(flyoutDef: FlyoutDefinition | null): FlyoutItemInfoArray;
/**
 * Whether or not the toolbox definition has categories.
 *
 * @param toolboxJson Object holding information for creating a toolbox.
 * @returns True if the toolbox has categories.
 * @internal
 */
export declare function hasCategories(toolboxJson: ToolboxInfo | null): boolean;
/**
 * Private version of hasCategories for stubbing in tests.
 */
declare function hasCategoriesInternal(toolboxJson: ToolboxInfo | null): boolean;
/**
 * Whether or not the category is collapsible.
 *
 * @param categoryInfo Object holing information for creating a category.
 * @returns True if the category has subcategories.
 * @internal
 */
export declare function isCategoryCollapsible(categoryInfo: CategoryInfo): boolean;
/**
 * Parse the provided toolbox tree into a consistent DOM format.
 *
 * @param toolboxDef DOM tree of blocks, or text representation of same.
 * @returns DOM tree of blocks, or null.
 */
export declare function parseToolboxTree(toolboxDef: Element | null | string): Element | null;
export declare const TEST_ONLY: {
    hasCategoriesInternal: typeof hasCategoriesInternal;
};
export {};
//# sourceMappingURL=toolbox.d.ts.map