import React from "react"; import { StyledProps } from "../_type"; declare type BasicType = string | boolean | number | (string | boolean | number)[]; declare type ExtractBasic = Extract; interface Message { type: string; payload?: any; } declare type PickBasic = { [key in keyof T]: T[key] extends { [key: string]: any; } ? PickBasic : ExtractBasic; }; declare type IEditorOptions = any; declare type IStandaloneEditorConstructionOptions = any; /** * `options` 详见: [IStandaloneEditorConstructionOptions](https://microsoft.github.io/monaco-editor/api/interfaces/monaco.editor.ieditorconstructionoptions.html) */ export interface CodeEditorOptions extends PickBasic { } export interface CodeEditorProps extends StyledProps { /** * 编辑器配置,会合并下面的默认值: ```js { "language": "javascript" } ``` * 该配置只有在初始渲染时传入有效,后续传入不再生效。 * 支持的配置请参考: [IStandaloneEditorConstructionOptions](https://microsoft.github.io/monaco-editor/api/interfaces/monaco.editor.ieditorconstructionoptions.html) * * > 注意:由于 `options` 经过 JSON 序列化给到 iframe,所以配置中传入函数的方式都会无效 */ options?: CodeEditorOptions; /** * 是否自动获得焦点 * @default false */ autoFocus?: boolean; /** * 加载时显示的文本 * @default */ loadingPlaceholder?: React.ReactNode; /** * 出现错误或超时显示的文本 * @docType React.ReactNode | ((retry: () => void) => React.ReactNode) * @default retry => */ errorPlaceholder?: React.ReactNode | ((retry: () => void) => React.ReactNode); /** * 发生编辑时回调 */ onEdit?: (editor: CodeEditorInstance) => void; /** * 发生保存(Ctrl + S)时回调 */ onSave?: (editor: CodeEditorInstance) => void; /** * 编辑器可用时回调 */ onReady?: (editor: CodeEditorInstance) => void; /** * 加载编辑器发生错误时回调 */ onError?: (error: Error) => void; /** * 接收到 iframe 消息时回调,若用户调用了 event.preventDefault, 则不执行内部的默认行为 */ onMessage?: (message: Message, event: MessageEvent) => void; /** * 加载编辑器超时时间(ms) * @default 10000 */ timeout?: number; /** * 加载编辑器超时时回调 */ onTimeout?: () => void; src?: string; } export interface CodeEditorInstance { /** * 异步获取编辑器当前文本 */ getValue(options?: { preserveBOM: boolean; lineEnding: "\n" | "\r\n"; }): Promise; /** * 设置编辑器当前文本 * @param value */ setValue(value: string): void; /** * 聚焦编辑器 */ focus(): void; /** * 更新配置 */ updateOptions(newOptions: IEditorOptions): void; /** * 向编辑器内部传递消息 */ sendMessage(type: string, payload?: any): void; } export declare function CodeEditor(props: CodeEditorProps): JSX.Element; export {};