import { HTMLProps, ReactNode } from 'react';
import { PopoverProps } from '@patternfly/react-core/dist/esm/components/Popover';
import { TooltipPosition } from '@patternfly/react-core/dist/esm/components/Tooltip';
import { EditorProps, Monaco } from '@monaco-editor/react';
import type { editor } from 'monaco-editor';
export type ChangeHandler = (value: string, event: editor.IModelContentChangedEvent) => void;
export type EditorDidMount = (editor: editor.IStandaloneCodeEditor, monaco: Monaco) => void;
export interface Shortcut {
    description: string;
    keys: string[];
}
export declare enum Language {
    abap = "abap",
    aes = "aes",
    apex = "apex",
    azcli = "azcli",
    bat = "bat",
    bicep = "bicep",
    c = "c",
    cameligo = "cameligo",
    clojure = "clojure",
    coffeescript = "coffeescript",
    cpp = "cpp",
    csharp = "csharp",
    csp = "csp",
    css = "css",
    dart = "dart",
    dockerfile = "dockerfile",
    ecl = "ecl",
    elixir = "elixir",
    fsharp = "fsharp",
    go = "go",
    graphql = "graphql",
    handlebars = "handlebars",
    hcl = "hcl",
    html = "html",
    ini = "ini",
    java = "java",
    javascript = "javascript",
    json = "json",
    julia = "julia",
    kotlin = "kotlin",
    less = "less",
    lexon = "lexon",
    liquid = "liquid",
    lua = "lua",
    m3 = "m3",
    markdown = "markdown",
    mips = "mips",
    msdax = "msdax",
    mysql = "mysql",
    'objective-c' = "objective-c",
    pascal = "pascal",
    pascaligo = "pascaligo",
    perl = "perl",
    pgsql = "pgsql",
    php = "php",
    plaintext = "plaintext",
    postiats = "postiats",
    powerquery = "powerquery",
    powershell = "powershell",
    pug = "pug",
    python = "python",
    r = "r",
    razor = "razor",
    redis = "redis",
    redshift = "redshift",
    restructuredtext = "restructuredtext",
    ruby = "ruby",
    rust = "rust",
    sb = "sb",
    scala = "scala",
    scheme = "scheme",
    scss = "scss",
    shell = "shell",
    sol = "sol",
    sql = "sql",
    st = "st",
    swift = "swift",
    systemverilog = "systemverilog",
    tcl = "tcl",
    twig = "twig",
    typescript = "typescript",
    vb = "vb",
    verilog = "verilog",
    xml = "xml",
    yaml = "yaml"
}
/** The main code editor component. */
export interface CodeEditorProps extends Omit<HTMLProps<HTMLDivElement>, 'onChange'> {
    /** Additional classes added to the code editor. */
    className?: string;
    /** Code displayed in code editor. */
    code?: string;
    /** Accessible label for the copy button. */
    copyButtonAriaLabel?: string;
    /** Text to display in the tooltip on the copy button after code is copied to clipboard. */
    copyButtonSuccessTooltipText?: string;
    /** Text to display in the tooltip on the copy button before code is copied. */
    copyButtonToolTipText?: string;
    /** A single node or array of nodes - ideally the code editor controls component - to display
     * above code editor.
     */
    customControls?: ReactNode | ReactNode[];
    /** Accessible label for the download button. */
    downloadButtonAriaLabel?: string;
    /** Text to display in the tooltip on the download button. */
    downloadButtonToolTipText?: string;
    /** Name of the file if user downloads code to local file. */
    downloadFileName?: string;
    /** Additional props to pass to the monaco editor. */
    editorProps?: EditorProps;
    /** Content to display in space of the code editor when there is no code to display. */
    emptyState?: ReactNode;
    /** Override default empty state body text. */
    emptyStateBody?: ReactNode;
    /** Override default empty state button text. */
    emptyStateButton?: ReactNode;
    /** Override default empty state link text. */
    emptyStateLink?: ReactNode;
    /** Override default empty state title text. */
    emptyStateTitle?: ReactNode;
    /** Editor header main content title. */
    headerMainContent?: string;
    /** Height of code editor. 'sizeToFit' will automatically change the height
     * to the height of the content.
     */
    height?: string | 'sizeToFit';
    /** Flag to add copy button to code editor actions. */
    isCopyEnabled?: boolean;
    /** Flag indicating the editor is styled using monaco's dark theme. */
    isDarkTheme?: boolean;
    /** Flag that enables component to consume the available height of its container. If `height` prop is set to 100%, this will also become enabled. */
    isFullHeight?: boolean;
    /** Flag indicating the editor has a plain header. */
    isHeaderPlain?: boolean;
    /** Flag to add download button to code editor actions. */
    isDownloadEnabled?: boolean;
    /** Flag to include a label indicating the currently configured editor language. */
    isLanguageLabelVisible?: boolean;
    /** Flag indicating the editor is displaying line numbers. */
    isLineNumbersVisible?: boolean;
    /** Flag to add the minimap to the code editor. */
    isMinimapVisible?: boolean;
    /** Flag indicating the editor is read only. */
    isReadOnly?: boolean;
    /** Flag to add upload button to code editor actions. Also makes the code editor accept a
     * file using drag and drop. */
    isUploadEnabled?: boolean;
    /** Language displayed in the editor. */
    language?: Language;
    /** The loading screen before the editor will be loaded. Defaults to 'loading...'. */
    loading?: ReactNode;
    /** Function which fires each time the content of the code editor is manually changed. Does
     * not fire when a file is uploaded.
     */
    onChange?: ChangeHandler;
    /** Function which fires each time the code changes in the code editor. */
    onCodeChange?: (value: string) => void;
    /** Function which fires when the code is downloaded. Defaults to a function that
     * downloads the current editor content. */
    onDownload?: (value: string, fileName: string) => void;
    /** Callback which fires after the code editor is mounted containing a reference to the
     * monaco editor and the monaco instance.
     */
    onEditorDidMount?: EditorDidMount;
    /** Refer to Monaco interface {monaco.editor.IStandaloneEditorConstructionOptions}. */
    options?: editor.IStandaloneEditorConstructionOptions;
    /** Refer to Monaco interface {monaco.editor.IEditorOverrideServices}. */
    overrideServices?: editor.IEditorOverrideServices;
    /** Text to show in the button to open the shortcut popover. */
    shortcutsPopoverButtonText?: string;
    /** Properties for the shortcut popover. */
    shortcutsPopoverProps?: PopoverProps;
    /** Flag to show the editor. */
    showEditor?: boolean;
    /** The delay before tooltip fades after code copied. */
    toolTipCopyExitDelay?: number;
    /** The entry and exit delay for all tooltips. */
    toolTipDelay?: number;
    /** The max width of the tooltips on all button. */
    toolTipMaxWidth?: string;
    /** The position of tooltips on all buttons. */
    toolTipPosition?: TooltipPosition | 'auto' | 'top' | 'bottom' | 'left' | 'right' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end' | 'left-start' | 'left-end' | 'right-start' | 'right-end';
    /** Accessible label for the upload button. */
    uploadButtonAriaLabel?: string;
    /** Text to display in the tooltip on the upload button. */
    uploadButtonToolTipText?: string;
    /** Width of code editor. Defaults to 100%. */
    width?: string;
}
export declare const CodeEditor: {
    ({ className, code, copyButtonAriaLabel, copyButtonSuccessTooltipText, copyButtonToolTipText, customControls, downloadButtonAriaLabel, downloadButtonToolTipText, downloadFileName, editorProps, emptyState, emptyStateBody, emptyStateButton, emptyStateLink, emptyStateTitle, headerMainContent, height, isCopyEnabled, isDarkTheme, isDownloadEnabled, isFullHeight, isHeaderPlain, isLanguageLabelVisible, isLineNumbersVisible, isMinimapVisible, isReadOnly, isUploadEnabled, language, loading, onChange, onCodeChange, onDownload, onEditorDidMount, options, overrideServices, shortcutsPopoverButtonText, shortcutsPopoverProps, showEditor, toolTipCopyExitDelay, toolTipDelay, toolTipMaxWidth, toolTipPosition, uploadButtonAriaLabel, uploadButtonToolTipText, width }: CodeEditorProps): import("react/jsx-runtime").JSX.Element;
    displayName: string;
};
//# sourceMappingURL=CodeEditor.d.ts.map