export interface CreateElementRequestOptions {
    domNode: HTMLElement;
    callback?: () => void;
    frameId: string;
    [k: string]: any;
}
export interface CreateWorkspaceTabRequestOptions extends CreateElementRequestOptions {
    workspaceId: string;
    title: string;
    isSelected: boolean;
    isPinned: boolean;
    icon: string;
    showSaveButton: boolean;
    showCloseButton: boolean;
    layoutName: string;
}
export interface CreateAddWorkspaceOptions extends CreateElementRequestOptions {
    isAddWorkspacePopupActive: boolean;
}
export interface CreateWorkspaceContentsRequestOptions extends CreateElementRequestOptions {
    workspaceId: string;
}
export interface CreateGroupRequestOptions extends CreateElementRequestOptions {
    groupId: string;
    workspaceId: string;
}
export type CreateBeforeGroupTabsRequestOptions = CreateGroupRequestOptions;
export interface CreateWorkspaceWindowTabRequestOptions extends CreateGroupRequestOptions {
    isSelected: boolean;
    windowId: string;
    placementId: string;
    title: string;
    showDelayedIndicator: boolean;
    channels: {
        color: string;
        visible: boolean;
        title: string;
    };
    close: {
        visible: boolean;
        title: string;
    };
}
export interface CreateAfterGroupTabsRequestOptions extends CreateGroupRequestOptions {
    isAddWindowPopupActive: boolean;
    addWindow: {
        visible: boolean;
        title: string;
    };
}
export interface CreateGroupHeaderButtonsRequestOptions extends CreateGroupRequestOptions {
    isAddWindowPopupActive: boolean;
    addWindow: {
        visible: boolean;
        title: string;
    };
    maximize: {
        visible: boolean;
        title: string;
    };
    restore: {
        visible: boolean;
        title: string;
    };
    eject: {
        visible: boolean;
        title: string;
    };
}
export interface CreatePopupRequestOptions extends CreateElementRequestOptions {
    resizePopup: (s?: Size) => void;
    hidePopup: () => void;
    io?: any;
}
export interface CreateSaveWorkspacePopupRequestOptions extends CreatePopupRequestOptions {
    workspaceId: string;
}
export interface CreateAddApplicationPopupRequestOptions extends CreatePopupRequestOptions {
    workspaceId: string;
    boxId: string;
}
export interface CreateAddWorkspacePopupRequestOptions extends CreatePopupRequestOptions {
    frameId: string;
}
export interface CreateChannelsSelectorRequestOptions extends CreatePopupRequestOptions {
    workspaceId: string;
    windowId: string;
}
export interface CreateWorkspaceLoadingAnimationRequestOptions extends CreateElementRequestOptions {
    workspaceId: string;
}
export interface RemoveWorkspaceContentsRequestOptions {
    workspaceId: string;
}
export interface RemoveRequestOptions {
    elementId: string;
}
export interface ElementCreationWrapperState {
    logo?: CreateElementRequestOptions;
    workspaceTabs: {
        [elementId: string]: CreateWorkspaceTabRequestOptions;
    };
    addWorkspace?: CreateElementRequestOptions;
    systemButtons?: CreateElementRequestOptions;
    workspaceContents: CreateWorkspaceContentsRequestOptions[];
    beforeGroupTabsZones: {
        [elementId: string]: CreateGroupRequestOptions;
    };
    workspaceWindowTabsZones: {
        [elementId: string]: CreateWorkspaceWindowTabRequestOptions;
    };
    afterGroupTabsZones: {
        [elementId: string]: CreateAfterGroupTabsRequestOptions;
    };
    groupHeaderButtonsZones: {
        [elementId: string]: CreateGroupHeaderButtonsRequestOptions;
    };
    saveWorkspacePopup?: CreateSaveWorkspacePopupRequestOptions;
    addApplicationPopup?: CreateAddApplicationPopupRequestOptions;
    addWorkspacePopup?: CreateAddWorkspacePopupRequestOptions;
    channelsSelector?: CreateChannelsSelectorRequestOptions;
    workspaceLoadingAnimations: {
        [workspaceId: string]: CreateWorkspaceLoadingAnimationRequestOptions;
    };
}
export interface WorkspacesManager {
    getFrameId(): string;
    init(componentFactory: any): void;
    notifyMoveAreaChanged(): void;
    notifyWorkspacePopupChanged(element: HTMLElement): string;
    getComponentBounds(): Bounds;
    registerPopup(element: HTMLElement): string;
    removePopup(element: HTMLElement): void;
    removePopupById(elementId: string): void;
    subscribeForWindowFocused(cb: () => any): () => void;
    unmount(): void;
    requestFocus(): void;
    showSaveWorkspacePopup(workspaceId: string, bounds: Bounds): void;
    closeWorkspace(workspaceId: string): void;
    closeWindow(id: string): Promise<void>;
    maximizeGroup(id: string): Promise<void>;
    restoreGroup(id: string): Promise<void>;
    ejectActiveWindow(groupId: string): Promise<void>;
    showChannelsSelector(placementId: string, bounds: Bounds): Promise<void>;
    showAddApplicationPopup(workspaceId: string, groupId: string, bounds: Bounds): Promise<void>;
}
export interface Bounds {
    top: number;
    left: number;
    width: number;
    height: number;
}
export interface Size {
    width?: number;
    height?: number;
}
export interface WorkspacesLogoElement extends HTMLElement {
    frameId?: string;
}
export interface WorkspaceTabElement extends HTMLElement {
    workspaceId?: string;
    frameId?: string;
    isSelected?: boolean;
    isPinned?: boolean;
    icon?: string;
    showSaveButton?: boolean;
    showCloseButton?: boolean;
    layoutName?: string;
}
export interface AddWorkspaceElement extends HTMLElement {
    isAddWorkspacePopupActive?: boolean;
    title: string;
    frameId?: string;
}
export interface SystemButtonsElement extends HTMLElement {
    frameId?: string;
}
export interface AddWorkspacePopupElement extends HTMLElement {
    frameId?: string;
    resizePopup?: (s?: Size) => void;
    hidePopup?: () => void;
    io?: any;
}
export interface AddApplicationPopupElement extends HTMLElement {
    frameId?: string;
    workspaceId?: string;
    boxId?: string;
    resizePopup?: (s: Size) => void;
    hidePopup?: () => void;
    io?: any;
}
export interface ChannelGroupHeaderButtonElement {
    visible?: boolean;
    color?: string;
}
export interface CloseWorkspaceWindowTabButtonElement {
    visible?: boolean;
}
export interface BeforeGroupTabsElement extends HTMLElement {
    groupId?: string;
    workspaceId?: string;
    frameId?: string;
}
export interface WorkspaceWindowTabElement extends HTMLElement {
    showDelayedIndicator: boolean;
    isSelected?: boolean;
    elementId?: string;
    windowId?: string;
    title: string;
    channels?: ChannelGroupHeaderButtonElement;
    close?: CloseWorkspaceWindowTabButtonElement;
    groupId?: string;
    workspaceId?: string;
}
export interface AfterGroupTabsElement extends HTMLElement {
    groupId?: string;
    workspaceId?: string;
    frameId?: string;
    isAddWindowPopupActive?: boolean;
    addWindow?: AddWindowGroupHeaderButtonElement;
}
export interface AddWindowGroupHeaderButtonElement {
    visible?: boolean;
}
export interface MaximizeGroupHeaderButtonElement {
    visible?: boolean;
}
export interface RestoreGroupHeaderButtonElement {
    visible?: boolean;
}
export interface EjectGroupHeaderButtonElement {
    visible?: boolean;
}
export interface GroupHeaderButtonsElement extends HTMLElement {
    groupId?: string;
    workspaceId?: string;
    frameId?: string;
    isAddWindowPopupActive?: boolean;
    addWindow?: AddWindowGroupHeaderButtonElement;
    maximize?: MaximizeGroupHeaderButtonElement;
    restore?: RestoreGroupHeaderButtonElement;
    eject?: EjectGroupHeaderButtonElement;
}
export interface WorkspacesElementState {
    logo?: WorkspacesLogoElement;
    workspaceTabs: {
        [elementId: string]: WorkspaceTabElement;
    };
    addWorkspace?: AddWorkspaceElement;
    systemButtons?: SystemButtonsElement;
    beforeGroupTabsZones: {
        [elementId: string]: BeforeGroupTabsElement;
    };
    workspaceWindowTabsZones: {
        [elementId: string]: WorkspaceWindowTabElement;
    };
    afterGroupTabsZones: {
        [elementId: string]: AfterGroupTabsElement;
    };
    groupHeaderButtonsZones: {
        [elementId: string]: GroupHeaderButtonsElement;
    };
    addApplicationPopup?: AddApplicationPopupElement;
    addWorkspacePopup?: AddWorkspacePopupElement;
}
export interface WorkspaceLockConfig {
    allowSplitters?: boolean;
    allowSystemHibernation?: boolean;
    allowDrop?: boolean;
    allowDropLeft?: boolean;
    allowDropTop?: boolean;
    allowDropRight?: boolean;
    allowDropBottom?: boolean;
    allowExtract?: boolean;
    showCloseButton?: boolean;
    showSaveButton?: boolean;
    allowWorkspaceTabExtract?: boolean;
    allowWorkspaceTabReorder?: boolean;
    showWindowCloseButtons?: boolean;
    allowWindowReorder?: boolean;
    showEjectButtons?: boolean;
    showAddWindowButtons?: boolean;
}
export interface Workspace {
    id: string;
    setTitle: (title: string) => Promise<void>;
    lock: (config: WorkspaceLockConfig | ((config: WorkspaceLockConfig) => WorkspaceLockConfig)) => Promise<void>;
    close: () => Promise<void>;
    onLockConfigurationChanged: (cb: (config: WorkspaceLockConfig) => void) => Promise<() => void>;
    layoutName: string;
    allowSplitters: boolean;
    allowSystemHibernation: boolean;
    allowDrop: boolean;
    allowDropLeft: boolean;
    allowDropTop: boolean;
    allowDropRight: boolean;
    allowDropBottom: boolean;
    allowExtract: boolean;
    showCloseButton: boolean;
    showSaveButton: boolean;
    allowWorkspaceTabExtract: boolean;
    allowWorkspaceTabReorder: boolean;
    showWindowCloseButtons: boolean;
    allowWindowReorder: boolean;
    showEjectButtons: boolean;
    showAddWindowButtons: boolean;
}
export interface ShowFramePopupOptions {
    targetBounds: Bounds;
    size: Size;
    targetLocation: PopupTargetLocation;
    windowId: string;
}
export interface Frame {
    id: string;
    workspaces: () => Promise<Workspace[]>;
    showPopup: (options: ShowFramePopupOptions) => Promise<void>;
}
export interface IOConnectAPI {
    windows: {
        createPopup: (options: {
            width: number;
            height: number;
            transparent?: boolean;
        }) => Promise<ExternalWindowPopup>;
    };
    workspaces: {
        getWorkspaceById(workspaceId: string): Promise<Workspace>;
        layouts: {
            save: (options: {
                workspaceId: string;
                name: string;
                saveContext: boolean;
            }) => Promise<void>;
        };
        getAllFrames(): Promise<Frame[]>;
    };
}
export type PopupTargetLocation = "top" | "bottom" | "left" | "right" | "none";
export interface ExternalWindowPopup {
    browserWindow?: Window;
    ioConnectWindow?: any;
}
export interface ResizeToFitOptions {
    element: HTMLElement;
    resizeCallback: (size: {
        width?: number;
        height?: number;
    }) => void;
    defaultSize: {
        width?: number;
        height?: number;
    };
    intervalMs?: number;
    requiredStableCount?: number;
}
//# sourceMappingURL=internal.d.ts.map