@aeriz/wysiwyg 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +634 -96
- package/angular/README.md +112 -0
- package/angular/aeriz-editor.directive.ts +243 -0
- package/angular/aeriz-wysiwyg.module.ts +14 -0
- package/angular/index.ts +5 -0
- package/dist/adapters/jquery.cjs +1 -0
- package/dist/adapters/jquery.js +91 -0
- package/dist/adapters/react.cjs +1 -0
- package/dist/adapters/react.js +66 -0
- package/dist/adapters/shared.cjs +1 -0
- package/dist/adapters/shared.js +87 -0
- package/dist/adapters/svelte.cjs +1 -0
- package/dist/adapters/svelte.js +29 -0
- package/dist/adapters/vue.cjs +1 -0
- package/dist/adapters/vue.js +110 -0
- package/dist/adapters/vue2.cjs +1 -0
- package/dist/adapters/vue2.js +117 -0
- package/dist/adapters/wc.cjs +1 -0
- package/dist/adapters/wc.js +207 -0
- package/dist/aeriz-wysiwyg-adapter.js +169 -0
- package/dist/aeriz-wysiwyg-adapter.min.js +1 -0
- package/dist/aeriz-wysiwyg-jquery.js +275 -0
- package/dist/aeriz-wysiwyg-jquery.min.js +1 -0
- package/dist/aeriz-wysiwyg-wc.js +401 -0
- package/dist/aeriz-wysiwyg-wc.min.js +1 -0
- package/dist/aeriz-wysiwyg.cjs +8759 -0
- package/dist/aeriz-wysiwyg.css +587 -163
- package/dist/aeriz-wysiwyg.esm.js +4249 -1381
- package/dist/aeriz-wysiwyg.esm.min.js +4456 -1995
- package/dist/aeriz-wysiwyg.js +4249 -1381
- package/dist/aeriz-wysiwyg.min.cjs +56 -0
- package/dist/aeriz-wysiwyg.min.css +1 -1
- package/dist/aeriz-wysiwyg.min.js +54 -21
- package/dist/server.cjs +34 -0
- package/dist/server.js +798 -0
- package/dist-types/adapters/jquery.d.ts +34 -0
- package/dist-types/adapters/jquery.d.ts.map +1 -0
- package/dist-types/adapters/react.d.ts +28 -0
- package/dist-types/adapters/react.d.ts.map +1 -0
- package/dist-types/adapters/shared.d.ts +83 -0
- package/dist-types/adapters/shared.d.ts.map +1 -0
- package/dist-types/adapters/svelte.d.ts +38 -0
- package/dist-types/adapters/svelte.d.ts.map +1 -0
- package/dist-types/adapters/vue.d.ts +189 -0
- package/dist-types/adapters/vue.d.ts.map +1 -0
- package/dist-types/adapters/vue2.d.ts +175 -0
- package/dist-types/adapters/vue2.d.ts.map +1 -0
- package/dist-types/adapters/wc.d.ts +96 -0
- package/dist-types/adapters/wc.d.ts.map +1 -0
- package/dist-types/cjs/adapters/jquery.d.cts +34 -0
- package/dist-types/cjs/adapters/react.d.cts +28 -0
- package/dist-types/cjs/adapters/shared.d.cts +83 -0
- package/dist-types/cjs/adapters/svelte.d.cts +38 -0
- package/dist-types/cjs/adapters/vue.d.cts +189 -0
- package/dist-types/cjs/adapters/vue2.d.cts +175 -0
- package/dist-types/cjs/adapters/wc.d.cts +96 -0
- package/dist-types/cjs/core/AerizEditor.d.cts +530 -0
- package/dist-types/cjs/core/AerizViewer.d.cts +61 -0
- package/dist-types/cjs/core/block-meta.d.cts +98 -0
- package/dist-types/cjs/core/block-policy.d.cts +43 -0
- package/dist-types/cjs/core/blocks.d.cts +411 -0
- package/dist-types/cjs/core/fonts.d.cts +60 -0
- package/dist-types/cjs/core/highlight.d.cts +44 -0
- package/dist-types/cjs/core/history.d.cts +86 -0
- package/dist-types/cjs/core/html-mini.d.cts +65 -0
- package/dist-types/cjs/core/i18n.d.cts +221 -0
- package/dist-types/cjs/core/import-html.d.cts +40 -0
- package/dist-types/cjs/core/import-markdown.d.cts +33 -0
- package/dist-types/cjs/core/input-rules.d.cts +46 -0
- package/dist-types/cjs/core/markdown-export.d.cts +30 -0
- package/dist-types/cjs/core/plain-text.d.cts +17 -0
- package/dist-types/cjs/core/render-string.d.cts +68 -0
- package/dist-types/cjs/core/selection.d.cts +46 -0
- package/dist-types/cjs/core/snapshot.d.cts +51 -0
- package/dist-types/cjs/core/table-ops.d.cts +30 -0
- package/dist-types/cjs/index.d.cts +22 -0
- package/dist-types/cjs/server/index.d.cts +37 -0
- package/dist-types/cjs/types/index.d.cts +61 -0
- package/dist-types/cjs/ui/Toolbar.d.cts +21 -0
- package/dist-types/cjs/ui/dialogs.d.cts +74 -0
- package/dist-types/cjs/ui/icons.d.cts +2 -0
- package/dist-types/cjs/ui/popovers.d.cts +70 -0
- package/dist-types/core/AerizEditor.d.ts +210 -17
- package/dist-types/core/AerizEditor.d.ts.map +1 -1
- package/dist-types/core/AerizViewer.d.ts +16 -4
- package/dist-types/core/AerizViewer.d.ts.map +1 -1
- package/dist-types/core/block-meta.d.ts +98 -0
- package/dist-types/core/block-meta.d.ts.map +1 -0
- package/dist-types/core/block-policy.d.ts +43 -0
- package/dist-types/core/block-policy.d.ts.map +1 -0
- package/dist-types/core/blocks.d.ts +109 -11
- package/dist-types/core/blocks.d.ts.map +1 -1
- package/dist-types/core/fonts.d.ts +11 -0
- package/dist-types/core/fonts.d.ts.map +1 -1
- package/dist-types/core/history.d.ts +86 -0
- package/dist-types/core/history.d.ts.map +1 -0
- package/dist-types/core/html-mini.d.ts +65 -0
- package/dist-types/core/html-mini.d.ts.map +1 -0
- package/dist-types/core/i18n.d.ts +12 -0
- package/dist-types/core/i18n.d.ts.map +1 -1
- package/dist-types/core/import-html.d.ts +1 -0
- package/dist-types/core/import-html.d.ts.map +1 -1
- package/dist-types/core/import-markdown.d.ts +0 -4
- package/dist-types/core/import-markdown.d.ts.map +1 -1
- package/dist-types/core/input-rules.d.ts +46 -0
- package/dist-types/core/input-rules.d.ts.map +1 -0
- package/dist-types/core/markdown-export.d.ts +30 -0
- package/dist-types/core/markdown-export.d.ts.map +1 -0
- package/dist-types/core/plain-text.d.ts +17 -0
- package/dist-types/core/plain-text.d.ts.map +1 -0
- package/dist-types/core/render-string.d.ts +68 -0
- package/dist-types/core/render-string.d.ts.map +1 -0
- package/dist-types/core/selection.d.ts +46 -0
- package/dist-types/core/selection.d.ts.map +1 -0
- package/dist-types/core/snapshot.d.ts +51 -0
- package/dist-types/core/snapshot.d.ts.map +1 -0
- package/dist-types/core/table-ops.d.ts +30 -0
- package/dist-types/core/table-ops.d.ts.map +1 -0
- package/dist-types/index.d.ts +21 -10
- package/dist-types/index.d.ts.map +1 -1
- package/dist-types/server/index.d.ts +37 -0
- package/dist-types/server/index.d.ts.map +1 -0
- package/dist-types/types/index.d.ts +21 -0
- package/dist-types/types/index.d.ts.map +1 -1
- package/dist-types/ui/Toolbar.d.ts +1 -1
- package/dist-types/ui/Toolbar.d.ts.map +1 -1
- package/dist-types/ui/dialogs.d.ts.map +1 -1
- package/dist-types/ui/icons.d.ts.map +1 -1
- package/dist-types/ui/popovers.d.ts +1 -1
- package/dist-types/ui/popovers.d.ts.map +1 -1
- package/package.json +213 -58
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* jQuery 플러그인 어댑터.
|
|
3
|
+
*
|
|
4
|
+
* `jquery` 를 import 하지 않는다. 전역 `jQuery` 가 있으면 로드 시점에 자동
|
|
5
|
+
* 등록하고, 모듈 번들 환경에서는 `registerAerizJQuery($)` 로 명시 등록한다.
|
|
6
|
+
* 덕분에 jQuery 타입 패키지(`@types/jquery`) 없이도 타입이 성립한다.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
|
10
|
+
* <script src="/aeriz-wysiwyg.min.js"></script>
|
|
11
|
+
* <script src="/adapters/jquery.js"></script>
|
|
12
|
+
* <script>
|
|
13
|
+
* $('#editor').aerizEditor({ value: '<p>안녕하세요</p>',
|
|
14
|
+
* onChange: (html) => console.log(html) });
|
|
15
|
+
* const html = $('#editor').aerizEditor('getHTML');
|
|
16
|
+
* $('#editor').aerizEditor('destroy');
|
|
17
|
+
* </script>
|
|
18
|
+
*/
|
|
19
|
+
import type { AerizEditor, AerizViewer } from '@aeriz/wysiwyg';
|
|
20
|
+
import type { AerizEditorProps, AerizViewerProps } from './shared.js';
|
|
21
|
+
/** `$.fn` 을 가진 jQuery 정적 객체의 최소 형태. */
|
|
22
|
+
export interface JQueryLike {
|
|
23
|
+
fn: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
/** 문자열 명령 없이 호출했을 때 초기화에 쓰이는 옵션. */
|
|
26
|
+
export type AerizEditorPluginOptions = AerizEditorProps;
|
|
27
|
+
export type AerizViewerPluginOptions = AerizViewerProps;
|
|
28
|
+
/**
|
|
29
|
+
* `$.fn.aerizEditor` / `$.fn.aerizViewer` 를 등록한다.
|
|
30
|
+
* 이미 등록돼 있으면 아무것도 하지 않으므로 여러 번 불러도 안전하다.
|
|
31
|
+
*/
|
|
32
|
+
export declare function registerAerizJQuery($: JQueryLike): void;
|
|
33
|
+
export type { AerizEditor, AerizViewer, AerizEditorProps, AerizViewerProps };
|
|
34
|
+
//# sourceMappingURL=jquery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jquery.d.ts","sourceRoot":"","sources":["../../src/adapters/jquery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAEV,gBAAgB,EAEhB,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAUlB,uCAAuC;AACvC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7B;AAED,oCAAoC;AACpC,MAAM,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;AACxD,MAAM,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;AA+HxD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAMvD;AAQD,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { CSSProperties } from 'react';
|
|
2
|
+
import type { AerizEditor as AerizEditorCore, AerizViewer as AerizViewerCore } from '@aeriz/wysiwyg';
|
|
3
|
+
import type { AerizEditorProps, AerizViewerProps } from './shared.js';
|
|
4
|
+
/** 컨테이너 `<div>` 에 직접 전달되는 표현용 prop. */
|
|
5
|
+
interface HostProps {
|
|
6
|
+
className?: string;
|
|
7
|
+
style?: CSSProperties;
|
|
8
|
+
id?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface AerizEditorReactProps extends AerizEditorProps, HostProps {
|
|
11
|
+
}
|
|
12
|
+
export interface AerizViewerReactProps extends AerizViewerProps, HostProps {
|
|
13
|
+
}
|
|
14
|
+
/** `ref` 로 노출되는 명령형 핸들. */
|
|
15
|
+
export interface AerizEditorHandle {
|
|
16
|
+
/** 코어 인스턴스. `getHTML()` / `setBlockType()` 등 전체 API 접근용. */
|
|
17
|
+
readonly editor: AerizEditorCore | null;
|
|
18
|
+
getHTML(): string;
|
|
19
|
+
setHTML(html: string): void;
|
|
20
|
+
focus(): void;
|
|
21
|
+
}
|
|
22
|
+
export interface AerizViewerHandle {
|
|
23
|
+
readonly viewer: AerizViewerCore | null;
|
|
24
|
+
}
|
|
25
|
+
export declare const AerizEditor: import("react").ForwardRefExoticComponent<AerizEditorReactProps & import("react").RefAttributes<AerizEditorHandle>>;
|
|
26
|
+
export declare const AerizViewer: import("react").ForwardRefExoticComponent<AerizViewerReactProps & import("react").RefAttributes<AerizViewerHandle>>;
|
|
27
|
+
export type { AerizEditorProps, AerizViewerProps } from './shared.js';
|
|
28
|
+
//# sourceMappingURL=react.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/adapters/react.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,aAAa,EAAmC,MAAM,OAAO,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,IAAI,eAAe,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACrG,OAAO,KAAK,EAEV,gBAAgB,EAEhB,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAGlB,uCAAuC;AACvC,UAAU,SAAS;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB,EAAE,SAAS;CAAG;AAC7E,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB,EAAE,SAAS;CAAG;AAE7E,2BAA2B;AAC3B,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,OAAO,IAAI,MAAM,CAAC;IAClB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;CACzC;AA+FD,eAAO,MAAM,WAAW,qHAA8B,CAAC;AAGvD,eAAO,MAAM,WAAW,qHAA8B,CAAC;AAGvD,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 프레임워크 어댑터 공통 코어.
|
|
3
|
+
*
|
|
4
|
+
* React / Vue / Svelte / Angular / jQuery / Web Component 어댑터는 모두 이
|
|
5
|
+
* 모듈의 컨트롤러 위에 얇게 올라간다. 각 프레임워크가 다르게 처리해야 하는
|
|
6
|
+
* 것은 "언제 update() 를 부르고 언제 destroy() 를 부르는가" 뿐이고,
|
|
7
|
+
* 값 바인딩 · 캐럿 보존 · 재생성 판단 같은 실제 로직은 여기 한 곳에만 있다.
|
|
8
|
+
*
|
|
9
|
+
* 핵심 규칙 두 가지:
|
|
10
|
+
*
|
|
11
|
+
* 1. **캐럿 보존** — 외부에서 들어온 `value` 가 에디터의 현재 출력과 같으면
|
|
12
|
+
* `setHTML()` 을 부르지 않는다. 부르면 DOM 이 통째로 교체되어 캐럿이 문서
|
|
13
|
+
* 맨 앞으로 튀고, 한국어 조합 중 입력이 끊긴다.
|
|
14
|
+
* 2. **되울림 차단** — 프로그램적 `setHTML()` 이 만든 변경은 `onChange` 로
|
|
15
|
+
* 다시 내보내지 않는다. 부모의 상태 갱신이 다시 prop 으로 내려와 무한 왕복이
|
|
16
|
+
* 되는 경로를 원천 차단한다.
|
|
17
|
+
*/
|
|
18
|
+
import { AerizEditor, AerizViewer } from '@aeriz/wysiwyg';
|
|
19
|
+
import type { BlockSnapshot, EditorOptions, EditorState, ViewerOptions } from '@aeriz/wysiwyg';
|
|
20
|
+
/**
|
|
21
|
+
* 모든 어댑터가 공유하는 에디터 prop 집합.
|
|
22
|
+
*
|
|
23
|
+
* `EditorOptions` 에서 프레임워크가 스스로 관리하는 두 항목만 뺀 것이다.
|
|
24
|
+
* - `element` — 어댑터가 마운트 노드를 직접 만든다.
|
|
25
|
+
* - `onChange` — 컨트롤러가 감싼 뒤 최신 콜백으로 위임한다.
|
|
26
|
+
*/
|
|
27
|
+
export interface AerizEditorProps extends Omit<EditorOptions, 'element' | 'onChange'> {
|
|
28
|
+
/**
|
|
29
|
+
* 양방향 바인딩용 HTML. 지정하면 `initialHTML` 보다 우선한다.
|
|
30
|
+
* 값이 에디터의 현재 출력과 다를 때만 본문이 교체된다.
|
|
31
|
+
*/
|
|
32
|
+
value?: string;
|
|
33
|
+
/** 사용자 편집으로 본문이 바뀔 때 호출. 프로그램적 설정에서는 호출되지 않는다. */
|
|
34
|
+
onChange?: (html: string) => void;
|
|
35
|
+
/** 블록/선택 상태가 바뀔 때 호출. 커스텀 툴바를 만들 때 쓴다. */
|
|
36
|
+
onStateChange?: (state: EditorState) => void;
|
|
37
|
+
/** 인스턴스가 만들어진 직후 1회 호출. 명령형 API 접근 경로. */
|
|
38
|
+
onReady?: (editor: AerizEditor) => void;
|
|
39
|
+
/** 인스턴스가 파괴되기 직전 1회 호출. */
|
|
40
|
+
onDestroy?: (editor: AerizEditor) => void;
|
|
41
|
+
}
|
|
42
|
+
/** 뷰어 어댑터 공통 prop. */
|
|
43
|
+
export interface AerizViewerProps extends Omit<ViewerOptions, 'element'> {
|
|
44
|
+
/** 표시할 블록 상태. `html` 보다 우선한다. */
|
|
45
|
+
blocks?: BlockSnapshot[];
|
|
46
|
+
/** 블록 대신 HTML 문자열로 넣을 때 사용. 내부에서 블록으로 변환된다. */
|
|
47
|
+
html?: string;
|
|
48
|
+
onReady?: (viewer: AerizViewer) => void;
|
|
49
|
+
onDestroy?: (viewer: AerizViewer) => void;
|
|
50
|
+
}
|
|
51
|
+
export interface AerizEditorController {
|
|
52
|
+
/**
|
|
53
|
+
* 현재 에디터 인스턴스. 재생성(`toolbar`/`locale` 변경) 시 교체되므로
|
|
54
|
+
* 장기 보관하지 말고 매번 읽어야 한다.
|
|
55
|
+
*/
|
|
56
|
+
readonly editor: AerizEditor;
|
|
57
|
+
/** 새 prop 을 반영한다. 바뀐 항목만 최소 비용으로 적용된다. */
|
|
58
|
+
update(next: AerizEditorProps): void;
|
|
59
|
+
destroy(): void;
|
|
60
|
+
}
|
|
61
|
+
export interface AerizViewerController {
|
|
62
|
+
readonly viewer: AerizViewer;
|
|
63
|
+
update(next: AerizViewerProps): void;
|
|
64
|
+
destroy(): void;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* HTML 문자열을 `BlockSnapshot[]` 로 변환한다.
|
|
68
|
+
*
|
|
69
|
+
* `AerizViewer` 는 상태 모델만 받으므로, HTML 을 들고 있는 호출자를 위한
|
|
70
|
+
* 다리 역할을 한다. 에디터 본문과 같은 정규화 경로(`normalizeContent` →
|
|
71
|
+
* `listBlocks` → `serializeBlocks`) 를 타므로 결과 트리도 동일하다.
|
|
72
|
+
*/
|
|
73
|
+
export declare function htmlToBlocks(html: string): BlockSnapshot[];
|
|
74
|
+
/**
|
|
75
|
+
* 프레임워크 중립 에디터 컨트롤러를 만든다.
|
|
76
|
+
*
|
|
77
|
+
* `host` 안에 에디터를 마운트한다. `host` 의 기존 자식은
|
|
78
|
+
* `AerizEditor` 생성자가 비운다.
|
|
79
|
+
*/
|
|
80
|
+
export declare function createEditorController(host: HTMLElement, initialProps: AerizEditorProps): AerizEditorController;
|
|
81
|
+
/** 프레임워크 중립 뷰어 컨트롤러를 만든다. */
|
|
82
|
+
export declare function createViewerController(host: HTMLElement, initialProps: AerizViewerProps): AerizViewerController;
|
|
83
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/adapters/shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EACL,WAAW,EACX,WAAW,EAMZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,WAAW,EACX,aAAa,EACd,MAAM,gBAAgB,CAAC;AAExB;;;;;;GAMG;AACH,MAAM,WAAW,gBACf,SAAQ,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,UAAU,CAAC;IACnD;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,0CAA0C;IAC1C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC7C,0CAA0C;IAC1C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,2BAA2B;IAC3B,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CAC3C;AAED,sBAAsB;AACtB,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC;IACtE,iCAAiC;IACjC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,0CAA0C;IAC1C,MAAM,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,MAAM,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAS1D;AA4CD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,WAAW,EACjB,YAAY,EAAE,gBAAgB,GAC7B,qBAAqB,CA2HvB;AAgBD,6BAA6B;AAC7B,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,WAAW,EACjB,YAAY,EAAE,gBAAgB,GAC7B,qBAAqB,CAwCvB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Svelte 어댑터. Svelte 3 / 4 / 5 에서 동일하게 동작한다.
|
|
3
|
+
*
|
|
4
|
+
* `.svelte` 컴포넌트가 아니라 **액션**(`use:`) 으로 제공한다. 컴파일된 Svelte
|
|
5
|
+
* 컴포넌트는 메이저 버전 간 런타임 계약이 달라(특히 4 → 5) 배포본 하나로 세
|
|
6
|
+
* 버전을 만족시킬 수 없지만, 액션은 순수 함수 계약이라 전부 통과한다.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* <script>
|
|
10
|
+
* import { aerizEditor } from '@aeriz/wysiwyg/svelte';
|
|
11
|
+
* import '@aeriz/wysiwyg/style.css';
|
|
12
|
+
* let html = '<p>안녕하세요</p>';
|
|
13
|
+
* </script>
|
|
14
|
+
*
|
|
15
|
+
* <div use:aerizEditor={{ value: html, onChange: (v) => (html = v), theme: 'dark' }} />
|
|
16
|
+
*/
|
|
17
|
+
import type { AerizEditorProps, AerizViewerProps } from './shared.js';
|
|
18
|
+
/**
|
|
19
|
+
* Svelte 액션의 반환 계약. `svelte/action` 의 `ActionReturn` 과 구조적으로
|
|
20
|
+
* 같지만, `svelte` 를 import 하지 않기 위해 여기서 직접 선언한다.
|
|
21
|
+
*/
|
|
22
|
+
export interface AerizAction<P> {
|
|
23
|
+
update(next: P): void;
|
|
24
|
+
destroy(): void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 에디터를 노드에 마운트하는 액션.
|
|
28
|
+
*
|
|
29
|
+
* 파라미터가 바뀌면 Svelte 가 `update` 를 호출하고, 컨트롤러가 바뀐 항목만
|
|
30
|
+
* 반영한다. `value` 가 에디터 현재 출력과 같으면 본문을 건드리지 않으므로
|
|
31
|
+
* `onChange` 로 받은 값을 그대로 되돌려줘도 캐럿이 튀지 않는다.
|
|
32
|
+
*/
|
|
33
|
+
export declare function aerizEditor(node: HTMLElement, props?: AerizEditorProps): AerizAction<AerizEditorProps>;
|
|
34
|
+
/** 읽기 전용 뷰어를 노드에 마운트하는 액션. */
|
|
35
|
+
export declare function aerizViewer(node: HTMLElement, props?: AerizViewerProps): AerizAction<AerizViewerProps>;
|
|
36
|
+
export type { AerizEditorProps, AerizViewerProps } from './shared.js';
|
|
37
|
+
export { createEditorController, createViewerController } from './shared.js';
|
|
38
|
+
//# sourceMappingURL=svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svelte.d.ts","sourceRoot":"","sources":["../../src/adapters/svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGnE;;;GAGG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACtB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,WAAW,EACjB,KAAK,GAAE,gBAAqB,GAC3B,WAAW,CAAC,gBAAgB,CAAC,CAU/B;AAED,8BAA8B;AAC9B,wBAAgB,WAAW,CACzB,IAAI,EAAE,WAAW,EACjB,KAAK,GAAE,gBAAqB,GAC3B,WAAW,CAAC,gBAAgB,CAAC,CAU/B;AAED,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import type { PropType } from 'vue';
|
|
2
|
+
import type { AerizEditor as AerizEditorCore, AerizViewer as AerizViewerCore, BlockSnapshot, EditorState, ToolbarConfig } from '@aeriz/wysiwyg';
|
|
3
|
+
type Theme = 'light' | 'dark';
|
|
4
|
+
type Locale = 'en' | 'ko' | 'ja' | 'zh';
|
|
5
|
+
type HtmlStyles = 'inline' | 'class';
|
|
6
|
+
type UploadFn = (file: File) => Promise<string>;
|
|
7
|
+
export declare const AerizEditor: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
8
|
+
/** `v-model` 바인딩 값 (HTML). */
|
|
9
|
+
modelValue: {
|
|
10
|
+
type: StringConstructor;
|
|
11
|
+
default: undefined;
|
|
12
|
+
};
|
|
13
|
+
/** `v-model` 없이 초기값만 줄 때 사용. */
|
|
14
|
+
initialHTML: {
|
|
15
|
+
type: StringConstructor;
|
|
16
|
+
default: undefined;
|
|
17
|
+
};
|
|
18
|
+
placeholder: {
|
|
19
|
+
type: StringConstructor;
|
|
20
|
+
default: undefined;
|
|
21
|
+
};
|
|
22
|
+
/** `false` 면 툴바를 렌더하지 않는다. */
|
|
23
|
+
toolbar: {
|
|
24
|
+
type: PropType<ToolbarConfig | false>;
|
|
25
|
+
default: undefined;
|
|
26
|
+
};
|
|
27
|
+
theme: {
|
|
28
|
+
type: PropType<Theme>;
|
|
29
|
+
default: undefined;
|
|
30
|
+
};
|
|
31
|
+
locale: {
|
|
32
|
+
type: PropType<Locale>;
|
|
33
|
+
default: undefined;
|
|
34
|
+
};
|
|
35
|
+
/** `getHTML()` · `onChange` 출력 전략. 기본 `'inline'`. */
|
|
36
|
+
htmlStyles: {
|
|
37
|
+
type: PropType<HtmlStyles>;
|
|
38
|
+
default: undefined;
|
|
39
|
+
};
|
|
40
|
+
onImageUpload: {
|
|
41
|
+
type: PropType<UploadFn>;
|
|
42
|
+
default: undefined;
|
|
43
|
+
};
|
|
44
|
+
imageUploadUrl: {
|
|
45
|
+
type: StringConstructor;
|
|
46
|
+
default: undefined;
|
|
47
|
+
};
|
|
48
|
+
onFileUpload: {
|
|
49
|
+
type: PropType<UploadFn>;
|
|
50
|
+
default: undefined;
|
|
51
|
+
};
|
|
52
|
+
fileUploadUrl: {
|
|
53
|
+
type: StringConstructor;
|
|
54
|
+
default: undefined;
|
|
55
|
+
};
|
|
56
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
57
|
+
[key: string]: any;
|
|
58
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
59
|
+
'update:modelValue': (html: string) => boolean;
|
|
60
|
+
change: (html: string) => boolean;
|
|
61
|
+
'state-change': (_state: EditorState) => true;
|
|
62
|
+
ready: (_editor: AerizEditorCore) => true;
|
|
63
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
64
|
+
/** `v-model` 바인딩 값 (HTML). */
|
|
65
|
+
modelValue: {
|
|
66
|
+
type: StringConstructor;
|
|
67
|
+
default: undefined;
|
|
68
|
+
};
|
|
69
|
+
/** `v-model` 없이 초기값만 줄 때 사용. */
|
|
70
|
+
initialHTML: {
|
|
71
|
+
type: StringConstructor;
|
|
72
|
+
default: undefined;
|
|
73
|
+
};
|
|
74
|
+
placeholder: {
|
|
75
|
+
type: StringConstructor;
|
|
76
|
+
default: undefined;
|
|
77
|
+
};
|
|
78
|
+
/** `false` 면 툴바를 렌더하지 않는다. */
|
|
79
|
+
toolbar: {
|
|
80
|
+
type: PropType<ToolbarConfig | false>;
|
|
81
|
+
default: undefined;
|
|
82
|
+
};
|
|
83
|
+
theme: {
|
|
84
|
+
type: PropType<Theme>;
|
|
85
|
+
default: undefined;
|
|
86
|
+
};
|
|
87
|
+
locale: {
|
|
88
|
+
type: PropType<Locale>;
|
|
89
|
+
default: undefined;
|
|
90
|
+
};
|
|
91
|
+
/** `getHTML()` · `onChange` 출력 전략. 기본 `'inline'`. */
|
|
92
|
+
htmlStyles: {
|
|
93
|
+
type: PropType<HtmlStyles>;
|
|
94
|
+
default: undefined;
|
|
95
|
+
};
|
|
96
|
+
onImageUpload: {
|
|
97
|
+
type: PropType<UploadFn>;
|
|
98
|
+
default: undefined;
|
|
99
|
+
};
|
|
100
|
+
imageUploadUrl: {
|
|
101
|
+
type: StringConstructor;
|
|
102
|
+
default: undefined;
|
|
103
|
+
};
|
|
104
|
+
onFileUpload: {
|
|
105
|
+
type: PropType<UploadFn>;
|
|
106
|
+
default: undefined;
|
|
107
|
+
};
|
|
108
|
+
fileUploadUrl: {
|
|
109
|
+
type: StringConstructor;
|
|
110
|
+
default: undefined;
|
|
111
|
+
};
|
|
112
|
+
}>> & Readonly<{
|
|
113
|
+
onChange?: (html: string) => any;
|
|
114
|
+
"onUpdate:modelValue"?: (html: string) => any;
|
|
115
|
+
"onState-change"?: (_state: EditorState) => any;
|
|
116
|
+
onReady?: (_editor: AerizEditorCore) => any;
|
|
117
|
+
}>, {
|
|
118
|
+
toolbar: false | ToolbarConfig;
|
|
119
|
+
theme: Theme;
|
|
120
|
+
placeholder: string;
|
|
121
|
+
initialHTML: string;
|
|
122
|
+
locale: Locale;
|
|
123
|
+
htmlStyles: HtmlStyles;
|
|
124
|
+
onImageUpload: UploadFn;
|
|
125
|
+
imageUploadUrl: string;
|
|
126
|
+
onFileUpload: UploadFn;
|
|
127
|
+
fileUploadUrl: string;
|
|
128
|
+
modelValue: string;
|
|
129
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
130
|
+
export declare const AerizViewer: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
131
|
+
/** 표시할 블록 상태. `html` 보다 우선한다. */
|
|
132
|
+
blocks: {
|
|
133
|
+
type: PropType<BlockSnapshot[]>;
|
|
134
|
+
default: undefined;
|
|
135
|
+
};
|
|
136
|
+
/** 블록 대신 HTML 문자열을 넣을 때 사용. */
|
|
137
|
+
html: {
|
|
138
|
+
type: StringConstructor;
|
|
139
|
+
default: undefined;
|
|
140
|
+
};
|
|
141
|
+
theme: {
|
|
142
|
+
type: PropType<Theme>;
|
|
143
|
+
default: undefined;
|
|
144
|
+
};
|
|
145
|
+
/** `getHTML()` 출력 전략. 기본 `'inline'`. */
|
|
146
|
+
htmlStyles: {
|
|
147
|
+
type: PropType<HtmlStyles>;
|
|
148
|
+
default: undefined;
|
|
149
|
+
};
|
|
150
|
+
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
151
|
+
[key: string]: any;
|
|
152
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
153
|
+
ready: (_viewer: AerizViewerCore) => true;
|
|
154
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
155
|
+
/** 표시할 블록 상태. `html` 보다 우선한다. */
|
|
156
|
+
blocks: {
|
|
157
|
+
type: PropType<BlockSnapshot[]>;
|
|
158
|
+
default: undefined;
|
|
159
|
+
};
|
|
160
|
+
/** 블록 대신 HTML 문자열을 넣을 때 사용. */
|
|
161
|
+
html: {
|
|
162
|
+
type: StringConstructor;
|
|
163
|
+
default: undefined;
|
|
164
|
+
};
|
|
165
|
+
theme: {
|
|
166
|
+
type: PropType<Theme>;
|
|
167
|
+
default: undefined;
|
|
168
|
+
};
|
|
169
|
+
/** `getHTML()` 출력 전략. 기본 `'inline'`. */
|
|
170
|
+
htmlStyles: {
|
|
171
|
+
type: PropType<HtmlStyles>;
|
|
172
|
+
default: undefined;
|
|
173
|
+
};
|
|
174
|
+
}>> & Readonly<{
|
|
175
|
+
onReady?: (_viewer: AerizViewerCore) => any;
|
|
176
|
+
}>, {
|
|
177
|
+
html: string;
|
|
178
|
+
theme: Theme;
|
|
179
|
+
htmlStyles: HtmlStyles;
|
|
180
|
+
blocks: BlockSnapshot[];
|
|
181
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
182
|
+
/** `app.use(AerizWysiwygPlugin)` 로 두 컴포넌트를 전역 등록한다. */
|
|
183
|
+
export declare const AerizWysiwygPlugin: {
|
|
184
|
+
install(app: {
|
|
185
|
+
component(name: string, def: unknown): unknown;
|
|
186
|
+
}): void;
|
|
187
|
+
};
|
|
188
|
+
export type { AerizEditorProps, AerizViewerProps } from './shared.js';
|
|
189
|
+
//# sourceMappingURL=vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue.d.ts","sourceRoot":"","sources":["../../src/adapters/vue.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,EACV,WAAW,IAAI,eAAe,EAC9B,WAAW,IAAI,eAAe,EAC9B,aAAa,EACb,WAAW,EACX,aAAa,EACd,MAAM,gBAAgB,CAAC;AASxB,KAAK,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AAC9B,KAAK,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACxC,KAAK,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AACrC,KAAK,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEhD,eAAO,MAAM,WAAW;IAIpB,8BAA8B;;;;;IAE9B,gCAAgC;;;;;;;;;IAGhC,8BAA8B;;cAED,QAAQ,CAAC,aAAa,GAAG,KAAK,CAAC;;;;cAGnC,QAAQ,CAAC,KAAK,CAAC;;;;cACd,QAAQ,CAAC,MAAM,CAAC;;;IAC1C,qDAAqD;;cACvB,QAAQ,CAAC,UAAU,CAAC;;;;cACf,QAAQ,CAAC,QAAQ,CAAC;;;;;;;;cAEnB,QAAQ,CAAC,QAAQ,CAAC;;;;;;;;;;gCAKxB,MAAM;mBACnB,MAAM;6BACI,WAAW;qBACnB,eAAe;;IAxBhC,8BAA8B;;;;;IAE9B,gCAAgC;;;;;;;;;IAGhC,8BAA8B;;cAED,QAAQ,CAAC,aAAa,GAAG,KAAK,CAAC;;;;cAGnC,QAAQ,CAAC,KAAK,CAAC;;;;cACd,QAAQ,CAAC,MAAM,CAAC;;;IAC1C,qDAAqD;;cACvB,QAAQ,CAAC,UAAU,CAAC;;;;cACf,QAAQ,CAAC,QAAQ,CAAC;;;;;;;;cAEnB,QAAQ,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;4EAuEtD,CAAC;AAEH,eAAO,MAAM,WAAW;IAIpB,iCAAiC;;cAEhB,QAAQ,CAAC,aAAa,EAAE,CAAC;;;IAG1C,+BAA+B;;;;;;cAEN,QAAQ,CAAC,KAAK,CAAC;;;IACxC,wCAAwC;;cACV,QAAQ,CAAC,UAAU,CAAC;;;;;;qBAIjC,eAAe;;IAbhC,iCAAiC;;cAEhB,QAAQ,CAAC,aAAa,EAAE,CAAC;;;IAG1C,+BAA+B;;;;;;cAEN,QAAQ,CAAC,KAAK,CAAC;;;IACxC,wCAAwC;;cACV,QAAQ,CAAC,UAAU,CAAC;;;;;;;;;;4EA8CpD,CAAC;AAEH,uDAAuD;AACvD,eAAO,MAAM,kBAAkB;iBAChB;QAAE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI;CAIvE,CAAC;AAEF,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vue 2 어댑터 (2.6 / 2.7). `v-model` 을 그대로 지원한다.
|
|
3
|
+
*
|
|
4
|
+
* Vue 2 컴포넌트는 순수 옵션 객체이므로 이 모듈은 `vue` 를 import 하지
|
|
5
|
+
* **않는다**. 따라서 Vue 3 를 devDependency 로 가진 이 저장소에서도 Vue 2 용
|
|
6
|
+
* 산출물을 정확히 만들 수 있고, 소비자 쪽 Vue 2 버전과의 이중 인스턴스 문제도
|
|
7
|
+
* 생기지 않는다.
|
|
8
|
+
*
|
|
9
|
+
* Vue 2 관례에 따라 `v-model` 은 `value` prop + `input` 이벤트를 쓴다.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* import { AerizEditor } from '@aeriz/wysiwyg/vue2';
|
|
13
|
+
* import '@aeriz/wysiwyg/style.css';
|
|
14
|
+
*
|
|
15
|
+
* export default {
|
|
16
|
+
* components: { AerizEditor },
|
|
17
|
+
* data: () => ({ html: '<p>안녕하세요</p>' }),
|
|
18
|
+
* template: '<AerizEditor v-model="html" theme="dark" />',
|
|
19
|
+
* };
|
|
20
|
+
*/
|
|
21
|
+
import type { AerizEditor as AerizEditorCore, AerizViewer as AerizViewerCore, BlockSnapshot, ToolbarConfig } from '@aeriz/wysiwyg';
|
|
22
|
+
import type { AerizEditorController, AerizEditorProps, AerizViewerController, AerizViewerProps } from './shared.js';
|
|
23
|
+
type Theme = 'light' | 'dark';
|
|
24
|
+
type Locale = 'en' | 'ko' | 'ja' | 'zh';
|
|
25
|
+
type HtmlStyles = 'inline' | 'class';
|
|
26
|
+
type UploadFn = (file: File) => Promise<string>;
|
|
27
|
+
/**
|
|
28
|
+
* Vue 2 런타임이 컴포넌트 메서드에 주입하는 `this` 의 최소 형태.
|
|
29
|
+
*
|
|
30
|
+
* `vue` 패키지를 참조하지 않기 위해 필요한 멤버만 구조적으로 선언한다.
|
|
31
|
+
* Vue 2 인스턴스는 이 멤버들을 모두 갖고 있으므로 호환된다.
|
|
32
|
+
*/
|
|
33
|
+
interface Vue2Host<P> {
|
|
34
|
+
$el: HTMLElement;
|
|
35
|
+
$props: P;
|
|
36
|
+
$emit(event: string, ...args: unknown[]): void;
|
|
37
|
+
$watch(getter: () => unknown, cb: () => void, options?: {
|
|
38
|
+
deep?: boolean;
|
|
39
|
+
immediate?: boolean;
|
|
40
|
+
}): () => void;
|
|
41
|
+
}
|
|
42
|
+
/** Vue 2 의 `createElement` (render 함수 인자 `h`) 최소 형태. */
|
|
43
|
+
type CreateElement = (tag: string) => unknown;
|
|
44
|
+
interface EditorProps {
|
|
45
|
+
value?: string;
|
|
46
|
+
initialHTML?: string;
|
|
47
|
+
placeholder?: string;
|
|
48
|
+
toolbar?: ToolbarConfig | false;
|
|
49
|
+
theme?: Theme;
|
|
50
|
+
locale?: Locale;
|
|
51
|
+
htmlStyles?: HtmlStyles;
|
|
52
|
+
onImageUpload?: UploadFn;
|
|
53
|
+
imageUploadUrl?: string;
|
|
54
|
+
onFileUpload?: UploadFn;
|
|
55
|
+
fileUploadUrl?: string;
|
|
56
|
+
}
|
|
57
|
+
interface EditorHost extends Vue2Host<EditorProps> {
|
|
58
|
+
aerizController: AerizEditorController | null;
|
|
59
|
+
aerizProps(): AerizEditorProps;
|
|
60
|
+
}
|
|
61
|
+
interface ViewerProps {
|
|
62
|
+
blocks?: BlockSnapshot[];
|
|
63
|
+
html?: string;
|
|
64
|
+
theme?: Theme;
|
|
65
|
+
htmlStyles?: HtmlStyles;
|
|
66
|
+
}
|
|
67
|
+
interface ViewerHost extends Vue2Host<ViewerProps> {
|
|
68
|
+
aerizController: AerizViewerController | null;
|
|
69
|
+
aerizProps(): AerizViewerProps;
|
|
70
|
+
}
|
|
71
|
+
export declare const AerizEditor: {
|
|
72
|
+
name: string;
|
|
73
|
+
props: {
|
|
74
|
+
/** `v-model` 바인딩 값 (HTML). */
|
|
75
|
+
value: {
|
|
76
|
+
type: StringConstructor;
|
|
77
|
+
default: undefined;
|
|
78
|
+
};
|
|
79
|
+
initialHTML: {
|
|
80
|
+
type: StringConstructor;
|
|
81
|
+
default: undefined;
|
|
82
|
+
};
|
|
83
|
+
placeholder: {
|
|
84
|
+
type: StringConstructor;
|
|
85
|
+
default: undefined;
|
|
86
|
+
};
|
|
87
|
+
toolbar: {
|
|
88
|
+
type: (ObjectConstructor | BooleanConstructor)[];
|
|
89
|
+
default: undefined;
|
|
90
|
+
};
|
|
91
|
+
theme: {
|
|
92
|
+
type: StringConstructor;
|
|
93
|
+
default: undefined;
|
|
94
|
+
};
|
|
95
|
+
locale: {
|
|
96
|
+
type: StringConstructor;
|
|
97
|
+
default: undefined;
|
|
98
|
+
};
|
|
99
|
+
/** `getHTML()` · `onChange` 출력 전략. 기본 `'inline'`. */
|
|
100
|
+
htmlStyles: {
|
|
101
|
+
type: StringConstructor;
|
|
102
|
+
default: undefined;
|
|
103
|
+
};
|
|
104
|
+
onImageUpload: {
|
|
105
|
+
type: FunctionConstructor;
|
|
106
|
+
default: undefined;
|
|
107
|
+
};
|
|
108
|
+
imageUploadUrl: {
|
|
109
|
+
type: StringConstructor;
|
|
110
|
+
default: undefined;
|
|
111
|
+
};
|
|
112
|
+
onFileUpload: {
|
|
113
|
+
type: FunctionConstructor;
|
|
114
|
+
default: undefined;
|
|
115
|
+
};
|
|
116
|
+
fileUploadUrl: {
|
|
117
|
+
type: StringConstructor;
|
|
118
|
+
default: undefined;
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
data(): {
|
|
122
|
+
aerizController: AerizEditorController | null;
|
|
123
|
+
};
|
|
124
|
+
methods: {
|
|
125
|
+
aerizProps(this: EditorHost): AerizEditorProps;
|
|
126
|
+
/** 코어 인스턴스. `this.$refs.editor.getEditor()` 로 접근한다. */
|
|
127
|
+
getEditor(this: EditorHost): AerizEditorCore | null;
|
|
128
|
+
getHTML(this: EditorHost): string;
|
|
129
|
+
setHTML(this: EditorHost, html: string): void;
|
|
130
|
+
focus(this: EditorHost): void;
|
|
131
|
+
};
|
|
132
|
+
mounted(this: EditorHost): void;
|
|
133
|
+
beforeDestroy(this: EditorHost): void;
|
|
134
|
+
render(this: EditorHost, h: CreateElement): unknown;
|
|
135
|
+
};
|
|
136
|
+
export declare const AerizViewer: {
|
|
137
|
+
name: string;
|
|
138
|
+
props: {
|
|
139
|
+
blocks: {
|
|
140
|
+
type: ArrayConstructor;
|
|
141
|
+
default: undefined;
|
|
142
|
+
};
|
|
143
|
+
html: {
|
|
144
|
+
type: StringConstructor;
|
|
145
|
+
default: undefined;
|
|
146
|
+
};
|
|
147
|
+
theme: {
|
|
148
|
+
type: StringConstructor;
|
|
149
|
+
default: undefined;
|
|
150
|
+
};
|
|
151
|
+
/** `getHTML()` 출력 전략. 기본 `'inline'`. */
|
|
152
|
+
htmlStyles: {
|
|
153
|
+
type: StringConstructor;
|
|
154
|
+
default: undefined;
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
data(): {
|
|
158
|
+
aerizController: AerizViewerController | null;
|
|
159
|
+
};
|
|
160
|
+
methods: {
|
|
161
|
+
aerizProps(this: ViewerHost): AerizViewerProps;
|
|
162
|
+
getViewer(this: ViewerHost): AerizViewerCore | null;
|
|
163
|
+
};
|
|
164
|
+
mounted(this: ViewerHost): void;
|
|
165
|
+
beforeDestroy(this: ViewerHost): void;
|
|
166
|
+
render(this: ViewerHost, h: CreateElement): unknown;
|
|
167
|
+
};
|
|
168
|
+
/** `Vue.use(AerizWysiwygPlugin)` 로 두 컴포넌트를 전역 등록한다. */
|
|
169
|
+
export declare const AerizWysiwygPlugin: {
|
|
170
|
+
install(Vue: {
|
|
171
|
+
component(name: string, def: unknown): unknown;
|
|
172
|
+
}): void;
|
|
173
|
+
};
|
|
174
|
+
export type { AerizEditorProps, AerizViewerProps } from './shared.js';
|
|
175
|
+
//# sourceMappingURL=vue2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue2.d.ts","sourceRoot":"","sources":["../../src/adapters/vue2.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EACV,WAAW,IAAI,eAAe,EAC9B,WAAW,IAAI,eAAe,EAC9B,aAAa,EAEb,aAAa,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACV,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAGlB,KAAK,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AAC9B,KAAK,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACxC,KAAK,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AACrC,KAAK,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEhD;;;;;GAKG;AACH,UAAU,QAAQ,CAAC,CAAC;IAClB,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,CAAC,CAAC;IACV,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/C,MAAM,CACJ,MAAM,EAAE,MAAM,OAAO,EACrB,EAAE,EAAE,MAAM,IAAI,EACd,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAChD,MAAM,IAAI,CAAC;CACf;AAED,wDAAwD;AACxD,KAAK,aAAa,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;AAE9C,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,aAAa,GAAG,KAAK,CAAC;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,aAAa,CAAC,EAAE,QAAQ,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,UAAW,SAAQ,QAAQ,CAAC,WAAW,CAAC;IAChD,eAAe,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC9C,UAAU,IAAI,gBAAgB,CAAC;CAChC;AAED,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,UAAU,UAAW,SAAQ,QAAQ,CAAC,WAAW,CAAC;IAChD,eAAe,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC9C,UAAU,IAAI,gBAAgB,CAAC;CAChC;AAiBD,eAAO,MAAM,WAAW;;;QAIpB,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;QAO9B,qDAAqD;;;;;;;;;;;;;;;;;;;;;;YAQ/C;QAAE,eAAe,EAAE,qBAAqB,GAAG,IAAI,CAAA;KAAE;;yBAOtC,UAAU,GAAG,gBAAgB;QAwB9C,uDAAuD;wBACvC,UAAU,GAAG,eAAe,GAAG,IAAI;sBAIrC,UAAU,GAAG,MAAM;sBAInB,UAAU,QAAQ,MAAM,GAAG,IAAI;oBAIjC,UAAU,GAAG,IAAI;;kBAKjB,UAAU,GAAG,IAAI;wBAKX,UAAU,GAAG,IAAI;iBAKxB,UAAU,KAAK,aAAa,GAAG,OAAO;CAGpD,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;QAOpB,wCAAwC;;;;;;YAIlC;QAAE,eAAe,EAAE,qBAAqB,GAAG,IAAI,CAAA;KAAE;;yBAKtC,UAAU,GAAG,gBAAgB;wBAY9B,UAAU,GAAG,eAAe,GAAG,IAAI;;kBAKvC,UAAU,GAAG,IAAI;wBAKX,UAAU,GAAG,IAAI;iBAKxB,UAAU,KAAK,aAAa,GAAG,OAAO;CAGpD,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,kBAAkB;iBAChB;QAAE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI;CAIvE,CAAC;AAEF,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
|