///
import type { CSSProperties, Ref } from 'vue';
import type { File, ReplStore } from '../../core';
import type { PlaygroundProps } from '../playground.type';
export type { editor as MonacoEditor } from 'monaco-editor';
export declare type Monaco = typeof monaco;
export declare type CreateEditorOptions = monaco.editor.IStandaloneEditorConstructionOptions;
export declare type IStandaloneCodeEditor = monaco.editor.IStandaloneCodeEditor;
export declare type MaybePromise = T | Promise;
export declare type PromiseFnReturnType Promise, R = ReturnType> = R extends Promise ? U : never;
export declare type Tsconfig = Parameters[0];
export declare type LayoutDirection = 'EditorBottomPreviewTop' | 'EditorTopPreviewBottom' | 'EditorRightPreviewLeft' | 'EditorLeftPreviewRight';
export interface TsLib {
content: string;
filePath?: string;
}
export interface PlaygroundPkgCdn {
'@vue/runtime-dom'?: (version: string, ending: string) => string;
'@vue/compiler-sfc'?: (version: string, ending: string) => string;
'es-module-shims'?: (version: string, ending: string) => string;
}
export declare type PlaygroundOptions = Partial;
export interface PlaygroundLifeCycle {
beforeLoadMonaco?: () => MaybePromise;
afterLoadMonaco?: (monaco: Monaco) => MaybePromise;
loadTsconfig?: (monaco: Monaco, defaultTsconfig: Tsconfig) => MaybePromise;
loadTsLibs?: (monaco: Monaco, defaultTsLibs: TsLib[]) => MaybePromise;
afterSetLanguage?: (monaco: Monaco) => MaybePromise;
loadWorkers?: (monaco: Monaco, self: Window) => MaybePromise;
beforeCreateEditor?: (monaco: Monaco) => MaybePromise;
loadEditorOption?: (monaco: Monaco, defaultOptions: CreateEditorOptions) => MaybePromise;
afterCreateEditor?: (monaco: Monaco, editor: IStandaloneCodeEditor) => MaybePromise;
onCodeChange?: (event: {
activeFile: File;
newCode: string;
}) => MaybePromise;
beforeDestroyEditor?: (monaco: Monaco, editor: IStandaloneCodeEditor) => MaybePromise;
afterDestroyEditor?: (monaco: Monaco) => MaybePromise;
onDarkModeChange?: (darkMode: boolean) => MaybePromise;
}
export interface EditorExpose {
getEditor: () => IStandaloneCodeEditor;
disposeEditor: Ref<() => void>;
loading: Ref;
}
export interface PreviewExpose {
containerRef: Ref;
sandboxIframe: HTMLIFrameElement | undefined;
loading: Ref;
}
export interface PlaygroundExpose {
store: ReplStore;
preview: Ref;
editor: Ref;
isDark: Ref;
toggleDark: (preIsDark?: boolean | undefined) => void;
}
export interface PlaygroundTheme extends CSSProperties {
'--editor-theme-name'?: string;
'--theme-color'?: string;
'--border-color'?: string;
'--bg-color'?: string;
'--toolbar-title-color'?: string;
'--toolbar-bg-color'?: string;
'--toolbar-text-color'?: string;
'--toolbar-icon-bg-color'?: string;
'--toolbar-icon-color'?: string;
'--toolbar-icon-active-color'?: string;
'--preview-bg-color'?: string;
'--preview-text-color'?: string;
'--file-manager-bg-color'?: string;
'--file-manager-text-color'?: string;
'--file-manager-active-bg-color'?: string;
'--file-manager-active-text-color'?: string;
'--file-manager-right-float-bg'?: string;
'--message-warn-text-color'?: string;
'--message-warn-bg-color'?: string;
'--message-warn-border-color'?: string;
'--message-error-text-color'?: string;
'--message-error-bg-color'?: string;
'--message-error-border-color'?: string;
'--message-dismiss-text-color'?: string;
'--message-dismiss-bg-color'?: string;
}
export interface PlaygroundThemes {
light?: PlaygroundTheme;
dark?: PlaygroundTheme;
}