/**
* Vue 2 어댑터 (2.6 / 2.7). `v-model` 을 그대로 지원한다.
*
* Vue 2 컴포넌트는 순수 옵션 객체이므로 이 모듈은 `vue` 를 import 하지
* **않는다**. 따라서 Vue 3 를 devDependency 로 가진 이 저장소에서도 Vue 2 용
* 산출물을 정확히 만들 수 있고, 소비자 쪽 Vue 2 버전과의 이중 인스턴스 문제도
* 생기지 않는다.
*
* Vue 2 관례에 따라 `v-model` 은 `value` prop + `input` 이벤트를 쓴다.
*
* @example
* import { AerizEditor } from '@aeriz/wysiwyg/vue2';
* import '@aeriz/wysiwyg/style.css';
*
* export default {
* components: { AerizEditor },
* data: () => ({ html: '
안녕하세요
' }),
* template: '',
* };
*/
import type { AerizEditor as AerizEditorCore, AerizViewer as AerizViewerCore, BlockSnapshot, ToolbarConfig } from '@aeriz/wysiwyg';
import type { AerizEditorController, AerizEditorProps, AerizViewerController, AerizViewerProps } from './shared.js';
type Theme = 'light' | 'dark';
type Locale = 'en' | 'ko' | 'ja' | 'zh';
type HtmlStyles = 'inline' | 'class';
type UploadFn = (file: File) => Promise;
/**
* Vue 2 런타임이 컴포넌트 메서드에 주입하는 `this` 의 최소 형태.
*
* `vue` 패키지를 참조하지 않기 위해 필요한 멤버만 구조적으로 선언한다.
* Vue 2 인스턴스는 이 멤버들을 모두 갖고 있으므로 호환된다.
*/
interface Vue2Host {
$el: HTMLElement;
$props: P;
$emit(event: string, ...args: unknown[]): void;
$watch(getter: () => unknown, cb: () => void, options?: {
deep?: boolean;
immediate?: boolean;
}): () => void;
}
/** Vue 2 의 `createElement` (render 함수 인자 `h`) 최소 형태. */
type CreateElement = (tag: string) => unknown;
interface EditorProps {
value?: string;
initialHTML?: string;
placeholder?: string;
toolbar?: ToolbarConfig | false;
theme?: Theme;
locale?: Locale;
htmlStyles?: HtmlStyles;
onImageUpload?: UploadFn;
imageUploadUrl?: string;
onFileUpload?: UploadFn;
fileUploadUrl?: string;
}
interface EditorHost extends Vue2Host {
aerizController: AerizEditorController | null;
aerizProps(): AerizEditorProps;
}
interface ViewerProps {
blocks?: BlockSnapshot[];
html?: string;
theme?: Theme;
htmlStyles?: HtmlStyles;
}
interface ViewerHost extends Vue2Host {
aerizController: AerizViewerController | null;
aerizProps(): AerizViewerProps;
}
export declare const AerizEditor: {
name: string;
props: {
/** `v-model` 바인딩 값 (HTML). */
value: {
type: StringConstructor;
default: undefined;
};
initialHTML: {
type: StringConstructor;
default: undefined;
};
placeholder: {
type: StringConstructor;
default: undefined;
};
toolbar: {
type: (ObjectConstructor | BooleanConstructor)[];
default: undefined;
};
theme: {
type: StringConstructor;
default: undefined;
};
locale: {
type: StringConstructor;
default: undefined;
};
/** `getHTML()` · `onChange` 출력 전략. 기본 `'inline'`. */
htmlStyles: {
type: StringConstructor;
default: undefined;
};
onImageUpload: {
type: FunctionConstructor;
default: undefined;
};
imageUploadUrl: {
type: StringConstructor;
default: undefined;
};
onFileUpload: {
type: FunctionConstructor;
default: undefined;
};
fileUploadUrl: {
type: StringConstructor;
default: undefined;
};
};
data(): {
aerizController: AerizEditorController | null;
};
methods: {
aerizProps(this: EditorHost): AerizEditorProps;
/** 코어 인스턴스. `this.$refs.editor.getEditor()` 로 접근한다. */
getEditor(this: EditorHost): AerizEditorCore | null;
getHTML(this: EditorHost): string;
setHTML(this: EditorHost, html: string): void;
focus(this: EditorHost): void;
};
mounted(this: EditorHost): void;
beforeDestroy(this: EditorHost): void;
render(this: EditorHost, h: CreateElement): unknown;
};
export declare const AerizViewer: {
name: string;
props: {
blocks: {
type: ArrayConstructor;
default: undefined;
};
html: {
type: StringConstructor;
default: undefined;
};
theme: {
type: StringConstructor;
default: undefined;
};
/** `getHTML()` 출력 전략. 기본 `'inline'`. */
htmlStyles: {
type: StringConstructor;
default: undefined;
};
};
data(): {
aerizController: AerizViewerController | null;
};
methods: {
aerizProps(this: ViewerHost): AerizViewerProps;
getViewer(this: ViewerHost): AerizViewerCore | null;
};
mounted(this: ViewerHost): void;
beforeDestroy(this: ViewerHost): void;
render(this: ViewerHost, h: CreateElement): unknown;
};
/** `Vue.use(AerizWysiwygPlugin)` 로 두 컴포넌트를 전역 등록한다. */
export declare const AerizWysiwygPlugin: {
install(Vue: {
component(name: string, def: unknown): unknown;
}): void;
};
export type { AerizEditorProps, AerizViewerProps } from './shared.js';
//# sourceMappingURL=vue2.d.ts.map