import type { Monaco, OnMount } from "@monaco-editor/react";
import type { editor } from "monaco-editor";
import { type ComponentPropsWithoutRef, type ReactNode } from "react";
export type MonacoLanguage = "sql" | "json" | "javascript" | "typescript" | "tsx" | "yaml" | "xml" | "html" | "css" | "scss" | "markdown" | "python" | "go" | "rust" | "java" | "csharp" | "shell" | "plaintext";
export interface MonacoMarker {
    /** 1-based line number. */
    line: number;
    /** 1-based column. */
    column?: number;
    /** 1-based end line. Defaults to `line`. */
    endLine?: number;
    /** 1-based end column. */
    endColumn?: number;
    severity?: "error" | "warning" | "info" | "hint";
    message: string;
    /** Optional source label, e.g. "json-schema". */
    source?: string;
}
/** Imperative handle returned via `ref` — gives consumers programmatic
 *  access to the underlying Monaco editor without exposing the lazy-loaded
 *  module type to their build graph. */
export interface MonacoEditorHandle {
    /** Move keyboard focus to the editor surface. */
    focus(): void;
    /** Access the raw Monaco standalone editor (null until mounted). */
    getEditor(): editor.IStandaloneCodeEditor | null;
    /** Access the Monaco namespace (null until mounted). */
    getMonaco(): Monaco | null;
    /** Current model value, or "" if not mounted. */
    getValue(): string;
    /** Replace the editor's value (preserves undo history when used via the
     *  model's `setValue`). */
    setValue(value: string): void;
    /** Trigger the built-in `editor.action.formatDocument` action. */
    format(): void;
}
type DivPropsBase = Omit<ComponentPropsWithoutRef<"div">, "onChange" | "onCopy" | "children">;
export interface MonacoEditorProps extends DivPropsBase {
    value: string;
    onChange?: (value: string) => void;
    language?: MonacoLanguage;
    /** Read-only mode. */
    readOnly?: boolean;
    /** Editor height — number (px) or any CSS length. Default 320. */
    height?: number | string;
    /** Min height when auto-sizing is disabled. */
    minHeight?: number;
    /** Custom toolbar slot above the editor. */
    toolbar?: ReactNode;
    /** Status pill on the right side of the toolbar. */
    status?: ReactNode;
    /** Hide the toolbar entirely. */
    hideToolbar?: boolean;
    /** Hide the footer (cursor pos + shortcut hints). */
    hideFooter?: boolean;
    /** Show built-in Copy button. */
    showCopy?: boolean;
    /** Show built-in Format button. Uses Monaco's `editor.action.formatDocument`. */
    showFormat?: boolean;
    /** Show built-in word-wrap toggle. */
    showWordWrapToggle?: boolean;
    /** Show built-in minimap toggle. */
    showMinimapToggle?: boolean;
    /** Initial word wrap. Default false. */
    wordWrap?: boolean;
    /** Initial minimap state. Default false (off — Linear-tight). */
    minimap?: boolean;
    /** Show line numbers. Default true. */
    showLineNumbers?: boolean;
    /** Diagnostic markers (errors, warnings, info, hints). */
    markers?: MonacoMarker[];
    /** Pass-through Monaco editor options. Merged after the defaults. */
    options?: editor.IStandaloneEditorConstructionOptions;
    /** Called once Monaco has mounted with the editor + monaco namespace. */
    onMount?: OnMount;
    /** Called after the built-in Copy button writes to the clipboard. */
    onCopy?: (value: string) => void;
    /** How long the Copy button shows the "copied" state. Default 1200ms. */
    copySuccessTimeoutMs?: number;
    ariaLabel?: string;
    /** Theme override. Defaults to "octaviaflow-light". */
    theme?: string;
}
export declare const MonacoEditor: import("react").ForwardRefExoticComponent<MonacoEditorProps & import("react").RefAttributes<MonacoEditorHandle>>;
export {};
//# sourceMappingURL=MonacoEditor.d.ts.map