import React$1, { RefObject, CSSProperties } from 'react';
import { PopupProps, PopupActions } from 'reactjs-popup/dist/types';

interface Bounds {
    top: number;
    left: number;
    width: number;
    height: number;
}
interface Size {
    width?: number;
    height?: number;
}

interface ButtonProps extends Omit<React.DetailedHTMLProps<React.HtmlHTMLAttributes<HTMLLIElement>, HTMLLIElement>, "title"> {
    title?: string;
    frameId?: string;
}
interface GroupHeaderButtonProps$1 extends ButtonProps {
    visible: boolean;
}
interface AddWorkspaceButtonProps extends ButtonProps {
    isAddWorkspacePopupActive?: boolean;
}
type CloseFrameButtonProps = ButtonProps;
type MinimizeFrameButtonProps = ButtonProps;
type MaximizeFrameButtonProps = ButtonProps;
interface RestoreGroupButtonProps extends GroupHeaderButtonProps$1 {
    restore: () => void;
}
interface MaximizeGroupButtonProps extends GroupHeaderButtonProps$1 {
    maximize: () => void;
}
interface EjectButtonProps extends GroupHeaderButtonProps$1 {
    eject: () => void;
}
interface AddWindowButtonProps extends GroupHeaderButtonProps$1 {
    showPopup: (bounds: Bounds) => void;
    isAddWindowPopupActive?: boolean;
}
interface GlueLogoProps extends React.DetailedHTMLProps<React.HtmlHTMLAttributes<HTMLSpanElement>, HTMLSpanElement> {
    frameId: string;
}
interface LogoProps extends React.DetailedHTMLProps<React.HtmlHTMLAttributes<HTMLSpanElement>, HTMLSpanElement> {
    frameId: string;
}
interface SaveWorkspacePopupProps extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> {
    workspaceId: string;
    io?: any;
    resizePopup: (s: Size) => void;
    hidePopup: () => void;
    buildMode?: boolean;
}
interface AddApplicationPopupProps extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> {
    workspaceId: string;
    io?: any;
    resizePopup: (s: Size) => void;
    hidePopup: () => void;
    boxId: string;
    frameId?: string;
    filterApps?: (app: any) => boolean;
}
interface AddWorkspacePopupProps extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> {
    frameId: string;
    io?: any;
    filterLayouts?: (layouts: any) => boolean;
    resizePopup: (s: Size) => void;
    hidePopup: () => void;
}
interface SaveButtonProps {
    showSavePopup: (bounds: Bounds) => void;
}
interface WorkspaceIconButtonProps {
    icon: string;
}
interface WorkspaceTabCloseButtonProps {
    close: () => void;
}
interface WorkspaceTitleProps {
    title: string;
}
interface GroupHeaderButtonsProps {
    workspaceId: string;
    groupId: string;
    isAddWindowPopupActive?: boolean;
    addWindow: AddWindowButtonProps;
    restore: RestoreGroupButtonProps;
    maximize: MaximizeGroupButtonProps;
    eject: EjectButtonProps;
}
type MoveAreaProps = React.DetailedHTMLProps<React.HtmlHTMLAttributes<HTMLDivElement>, HTMLDivElement>;
interface WorkspaceWindowTabProps {
    channels: {
        visible: boolean;
        color: string;
        showSelector: (bounds: Bounds) => void;
    };
    isSelected: boolean;
    elementId: string;
    windowId: string;
    groupId: string;
    workspaceId: string;
    title: string;
    close: {
        visible: boolean;
        title?: string;
        close: () => void;
    };
}
interface WorkspaceWindowTabTitleProps {
    title: string;
}
interface WorkspaceWindowTabCloseButtonProps {
    close: () => void;
    title?: string;
}
interface WorkspaceWindowChannelsLinkProps {
    color: string;
    showSelector: (bounds: Bounds) => void;
}

declare const AddWorkspaceButton: React$1.FC<AddWorkspaceButtonProps>;

declare const CloseFrameButton: React$1.FC<CloseFrameButtonProps>;

declare const GlueLogo: React$1.FC<GlueLogoProps>;

declare const MaximizeFrameButton: React$1.FC<MaximizeFrameButtonProps>;

declare const MinimizeFrameButton: React$1.FC<MinimizeFrameButtonProps>;

declare const _default$3: (props: AddApplicationPopupProps) => React$1.JSX.Element;

declare const _default$2: (props: AddWorkspacePopupProps) => React$1.JSX.Element;

declare const _default$1: (props: SaveWorkspacePopupProps) => React$1.JSX.Element;

interface WorkspaceLoadingAnimationProps {
    workspaceId: string;
}
interface WorkspaceContentsProps extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> {
    workspaceId: string;
    frameId?: string;
    containerElement?: HTMLElement;
}

declare const WorkspaceContents: React$1.FC<WorkspaceContentsProps>;

declare const MoveArea: React$1.FC<MoveAreaProps>;

declare function useWorkspacePopup(element: RefObject<HTMLElement>): (() => void)[];

declare function useWorkspaceWindowClicked(cb: () => void): () => void;

interface HeaderComponentProps {
    frameId: string;
    [k: string]: any;
}
interface WorkspaceTabComponentProps {
    workspaceId: string;
    isSelected: boolean;
    isPinned: boolean;
    title: string;
    icon: string;
    showSaveButton: boolean;
    showCloseButton: boolean;
    layoutName: string;
    onCloseClick: () => void;
    onSaveClick: (bounds: Bounds) => void;
    io?: any;
}
interface AddWorkspaceComponentProps extends HeaderComponentProps {
    isAddWorkspacePopupActive?: boolean;
}
interface GroupHeaderButtonProps {
    visible: boolean;
    title?: string;
}
interface ChannelsGroupHeaderButtonProps extends Omit<GroupHeaderButtonProps, "title"> {
    color: string;
    showSelector: (bounds: Bounds) => void;
}
interface CloseWorkspaceWindowTabButtonProps extends GroupHeaderButtonProps {
    close: () => void;
}
interface AddWindowGroupHeaderButtonProps extends GroupHeaderButtonProps {
    showPopup: (bounds: Bounds) => void;
}
interface MaximizeGroupHeaderButtonProps extends GroupHeaderButtonProps {
    maximize: () => void;
}
interface RestoreGroupHeaderButtonProps extends GroupHeaderButtonProps {
    restore: () => void;
}
interface EjectGroupHeaderButtonProps extends GroupHeaderButtonProps {
    eject: () => void;
}
interface GroupHeaderComponentProps {
    groupId: string;
    workspaceId: string;
}
interface WorkspaceWindowTabComponentProps extends GroupHeaderComponentProps {
    isSelected: boolean;
    elementId: string;
    windowId: string;
    title: string;
    channels: ChannelsGroupHeaderButtonProps;
    close: CloseWorkspaceWindowTabButtonProps;
}
interface AfterTabsComponentProps extends GroupHeaderComponentProps {
    isAddWindowPopupActive?: boolean;
}
interface GroupHeaderButtonsComponentProps extends GroupHeaderComponentProps {
    addWindow: AddWindowGroupHeaderButtonProps;
    maximize: MaximizeGroupHeaderButtonProps;
    restore: RestoreGroupHeaderButtonProps;
    eject: EjectGroupHeaderButtonProps;
}
interface AddWorkspacePopupComponentProps {
    frameId: string;
    resizePopup: (s: Size) => void;
    hidePopup: () => void;
    io?: any;
}
interface AddApplicationPopupComponentProps {
    workspaceId: string;
    boxId: string;
    resizePopup: (s: Size) => void;
    hidePopup: () => void;
    io?: any;
}
interface SaveWorkspacePopupComponentProps {
    workspaceId: string;
    resizePopup: (s: Size) => void;
    hidePopup: () => void;
    io?: any;
}
interface WorkspacePopupProps extends Omit<PopupProps, "ref"> {
    innerContentStyle?: CSSProperties;
    popupRef?: RefObject<PopupActions>;
}
interface showAddApplicationPopupOptions {
    workspaceId: string;
    groupId: string;
    bounds: Bounds;
}
interface WorkspacesProps extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> {
    components?: {
        header?: {
            LogoComponent?: React.ComponentType<HeaderComponentProps>;
            WorkspaceTabComponent?: React.ComponentType<WorkspaceTabComponentProps>;
            AddWorkspaceComponent?: React.ComponentType<AddWorkspaceComponentProps>;
            SystemButtonsComponent?: React.ComponentType<HeaderComponentProps>;
        };
        WorkspaceContents?: React.ComponentType<WorkspaceContentsProps>;
        groupHeader?: {
            BeforeTabsComponent?: React.ComponentType<GroupHeaderComponentProps>;
            WorkspaceWindowTabComponent?: React.ComponentType<WorkspaceWindowTabComponentProps>;
            AfterTabsComponent?: React.ComponentType<AfterTabsComponentProps>;
            ButtonsComponent?: React.ComponentType<GroupHeaderButtonsComponentProps>;
        };
        popups?: {
            SaveWorkspaceComponent?: React.ComponentType<SaveWorkspacePopupComponentProps> | string;
            AddApplicationComponent?: React.ComponentType<AddApplicationPopupComponentProps> | string;
            AddWorkspaceComponent?: React.ComponentType<AddWorkspacePopupComponentProps> | string;
        };
        loadingAnimation?: {
            Workspace?: React.ComponentType<WorkspaceLoadingAnimationProps>;
        };
    };
    io?: any;
}

declare const WorkspacePopup: React$1.FC<WorkspacePopupProps>;

declare const WorkspacesElementCreationWrapper: React$1.FC<WorkspacesProps>;

declare const WorkspaceTab: React$1.FC<WorkspaceTabComponentProps>;

declare const WorkspaceTitle: React$1.FC<WorkspaceTitleProps>;

declare const WorkspaceSaveButton: React$1.FC<SaveButtonProps>;

declare const WorkspaceIconButton: React$1.FC<WorkspaceIconButtonProps>;

declare const WorkspaceTabCloseButton: React$1.FC<WorkspaceTabCloseButtonProps>;

declare const WorkspaceLoadingAnimation: React$1.FC<WorkspaceLoadingAnimationProps>;

declare const _default: (props: WorkspaceTabComponentProps) => React$1.JSX.Element;

declare const WorkspaceWindowTabChannelsLink: React$1.FC<WorkspaceWindowChannelsLinkProps>;

declare const WorkspaceWindowTabTitle: React$1.FC<WorkspaceWindowTabTitleProps>;

declare const WorkspaceWindowTabCloseButton: React$1.FC<WorkspaceWindowTabCloseButtonProps>;

declare const WorkspaceWindowTab: React$1.FC<WorkspaceWindowTabProps>;

declare const AddWindowButton: React$1.FC<AddWindowButtonProps>;

declare const EjectButton: React$1.FC<EjectButtonProps>;

declare const MaximizeGroupButton: React$1.FC<MaximizeGroupButtonProps>;

declare const RestoreGroupButton: React$1.FC<RestoreGroupButtonProps>;

declare const GroupHeaderButtons: React$1.FC<GroupHeaderButtonsProps>;

declare const Logo: React$1.FC<LogoProps>;

/**
 * @deprecated Deprecated set the --webkit-app-region: drag css property instead. Available in io.CD 10.0 and above
 */
declare const notifyMoveAreaChanged: () => void;
declare const getComponentBounds: () => Bounds;
declare const getFrameId: () => string;
declare const requestFocus: () => void;
declare const showAddApplicationPopup: (options: showAddApplicationPopupOptions) => void;

export { _default$3 as AddApplicationPopup, type AddApplicationPopupComponentProps, type AddApplicationPopupProps, AddWindowButton, type AddWindowButtonProps, AddWorkspaceButton, type AddWorkspaceButtonProps, _default$2 as AddWorkspacePopup, type AddWorkspacePopupComponentProps, type AddWorkspacePopupProps, type Bounds, CloseFrameButton, EjectButton, type EjectButtonProps, GlueLogo, GroupHeaderButtons, type GroupHeaderButtonsProps, Logo, MaximizeFrameButton, type MaximizeFrameButtonProps, MaximizeGroupButton, type MaximizeGroupButtonProps, MinimizeFrameButton, type MinimizeFrameButtonProps, MoveArea, type MoveAreaProps, RestoreGroupButton, _default$1 as SaveWorkspacePopup, type SaveWorkspacePopupComponentProps, type SaveWorkspacePopupProps, WorkspaceContents, type WorkspaceContentsProps, WorkspaceIconButton, WorkspaceLoadingAnimation, type WorkspaceLoadingAnimationProps, WorkspacePopup, WorkspaceSaveButton, WorkspaceTab, WorkspaceTabCloseButton, type WorkspaceTabComponentProps, _default as WorkspaceTabV2, WorkspaceTitle, WorkspaceWindowTabChannelsLink as WorkspaceWindowChannelsLink, type WorkspaceWindowChannelsLinkProps, WorkspaceWindowTab, WorkspaceWindowTabCloseButton, type WorkspaceWindowTabCloseButtonProps, type WorkspaceWindowTabProps, WorkspaceWindowTabTitle, type WorkspaceWindowTabTitleProps, type WorkspacesProps, WorkspacesElementCreationWrapper as default, getComponentBounds, getFrameId, notifyMoveAreaChanged, requestFocus, showAddApplicationPopup, useWorkspacePopup, useWorkspaceWindowClicked };
