@aeriz/wysiwyg 1.0.4 → 2.0.0
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/LICENSE +201 -201
- package/README.md +82 -573
- package/angular/README.md +10 -4
- package/angular/aeriz-editor.directive.ts +40 -18
- package/dist/adapters/jquery.cjs +1 -1
- package/dist/adapters/jquery.js +14 -14
- package/dist/adapters/shared.cjs +1 -1
- package/dist/adapters/shared.js +59 -56
- package/dist/adapters/vue.cjs +1 -1
- package/dist/adapters/vue.js +64 -56
- package/dist/adapters/vue2.cjs +1 -1
- package/dist/adapters/vue2.js +24 -17
- package/dist/adapters/wc.cjs +1 -1
- package/dist/adapters/wc.js +108 -72
- package/dist/aeriz-wysiwyg-adapter.js +24 -32
- package/dist/aeriz-wysiwyg-adapter.min.js +1 -1
- package/dist/aeriz-wysiwyg-highlight.js +964 -0
- package/dist/aeriz-wysiwyg-highlight.min.js +5 -0
- package/dist/aeriz-wysiwyg-jquery.js +25 -32
- package/dist/aeriz-wysiwyg-jquery.min.js +1 -1
- package/dist/aeriz-wysiwyg-wc.js +80 -43
- package/dist/aeriz-wysiwyg-wc.min.js +1 -1
- package/dist/aeriz-wysiwyg.cjs +3688 -1757
- package/dist/aeriz-wysiwyg.css +2104 -1904
- package/dist/aeriz-wysiwyg.esm.js +3688 -1757
- package/dist/aeriz-wysiwyg.esm.min.js +4904 -3538
- package/dist/aeriz-wysiwyg.js +3688 -1757
- package/dist/aeriz-wysiwyg.min.cjs +53 -40
- package/dist/aeriz-wysiwyg.min.css +1 -1
- package/dist/aeriz-wysiwyg.min.js +53 -40
- package/dist/highlight.cjs +5 -0
- package/dist/highlight.js +895 -0
- package/dist/server.cjs +24 -19
- package/dist/server.js +612 -251
- package/dist-types/adapters/shared.d.ts +0 -8
- package/dist-types/adapters/shared.d.ts.map +1 -1
- package/dist-types/adapters/vue.d.ts +62 -21
- package/dist-types/adapters/vue.d.ts.map +1 -1
- package/dist-types/adapters/vue2.d.ts +33 -14
- package/dist-types/adapters/vue2.d.ts.map +1 -1
- package/dist-types/adapters/wc.d.ts +15 -6
- package/dist-types/adapters/wc.d.ts.map +1 -1
- package/dist-types/cjs/adapters/shared.d.cts +0 -8
- package/dist-types/cjs/adapters/vue.d.cts +62 -21
- package/dist-types/cjs/adapters/vue2.d.cts +33 -14
- package/dist-types/cjs/adapters/wc.d.cts +15 -6
- package/dist-types/cjs/core/AerizEditor.d.cts +238 -48
- package/dist-types/cjs/core/AerizViewer.d.cts +7 -0
- package/dist-types/cjs/core/block-meta.d.cts +40 -0
- package/dist-types/cjs/core/block-tracker.d.cts +64 -0
- package/dist-types/cjs/core/blocks.d.cts +39 -4
- package/dist-types/cjs/core/fonts.d.cts +33 -46
- package/dist-types/cjs/core/highlight.d.cts +2 -0
- package/dist-types/cjs/core/history.d.cts +28 -10
- package/dist-types/cjs/core/html-to-blocks.d.cts +10 -0
- package/dist-types/cjs/core/i18n.d.cts +44 -0
- package/dist-types/cjs/core/import-html.d.cts +0 -13
- package/dist-types/cjs/core/insert-fragment.d.cts +21 -0
- package/dist-types/cjs/core/paste-clean.d.cts +36 -0
- package/dist-types/cjs/core/sanitize-dom.d.cts +21 -0
- package/dist-types/cjs/core/sanitize-html.d.cts +8 -0
- package/dist-types/cjs/core/sanitize-policy.d.cts +22 -0
- package/dist-types/cjs/core/selection.d.cts +5 -0
- package/dist-types/cjs/core/table-grid.d.cts +87 -0
- package/dist-types/cjs/core/table-ops.d.cts +2 -22
- package/dist-types/cjs/highlight/index.d.cts +5 -0
- package/dist-types/cjs/index.d.cts +19 -11
- package/dist-types/cjs/server/index.d.cts +4 -5
- package/dist-types/cjs/types/index.d.cts +63 -15
- package/dist-types/cjs/ui/Toolbar.d.cts +10 -0
- package/dist-types/cjs/ui/doc-tools.d.cts +58 -0
- package/dist-types/cjs/ui/popovers.d.cts +14 -25
- package/dist-types/core/AerizEditor.d.ts +238 -48
- package/dist-types/core/AerizEditor.d.ts.map +1 -1
- package/dist-types/core/AerizViewer.d.ts +7 -0
- package/dist-types/core/AerizViewer.d.ts.map +1 -1
- package/dist-types/core/block-meta.d.ts +40 -0
- package/dist-types/core/block-meta.d.ts.map +1 -1
- package/dist-types/core/block-policy.d.ts.map +1 -1
- package/dist-types/core/block-tracker.d.ts +64 -0
- package/dist-types/core/block-tracker.d.ts.map +1 -0
- package/dist-types/core/blocks.d.ts +39 -4
- package/dist-types/core/blocks.d.ts.map +1 -1
- package/dist-types/core/fonts.d.ts +33 -46
- package/dist-types/core/fonts.d.ts.map +1 -1
- package/dist-types/core/highlight.d.ts +2 -0
- package/dist-types/core/highlight.d.ts.map +1 -1
- package/dist-types/core/history.d.ts +28 -10
- package/dist-types/core/history.d.ts.map +1 -1
- package/dist-types/core/html-mini.d.ts.map +1 -1
- package/dist-types/core/html-to-blocks.d.ts +10 -0
- package/dist-types/core/html-to-blocks.d.ts.map +1 -0
- package/dist-types/core/i18n.d.ts +44 -0
- package/dist-types/core/i18n.d.ts.map +1 -1
- package/dist-types/core/import-html.d.ts +0 -13
- package/dist-types/core/import-html.d.ts.map +1 -1
- package/dist-types/core/import-markdown.d.ts.map +1 -1
- package/dist-types/core/insert-fragment.d.ts +21 -0
- package/dist-types/core/insert-fragment.d.ts.map +1 -0
- package/dist-types/core/markdown-export.d.ts.map +1 -1
- package/dist-types/core/paste-clean.d.ts +36 -0
- package/dist-types/core/paste-clean.d.ts.map +1 -0
- package/dist-types/core/render-string.d.ts.map +1 -1
- package/dist-types/core/sanitize-dom.d.ts +21 -0
- package/dist-types/core/sanitize-dom.d.ts.map +1 -0
- package/dist-types/core/sanitize-html.d.ts +8 -0
- package/dist-types/core/sanitize-html.d.ts.map +1 -0
- package/dist-types/core/sanitize-policy.d.ts +22 -0
- package/dist-types/core/sanitize-policy.d.ts.map +1 -0
- package/dist-types/core/selection.d.ts +5 -0
- package/dist-types/core/selection.d.ts.map +1 -1
- package/dist-types/core/snapshot.d.ts.map +1 -1
- package/dist-types/core/table-grid.d.ts +87 -0
- package/dist-types/core/table-grid.d.ts.map +1 -0
- package/dist-types/core/table-ops.d.ts +2 -22
- package/dist-types/core/table-ops.d.ts.map +1 -1
- package/dist-types/highlight/index.d.ts +5 -0
- package/dist-types/highlight/index.d.ts.map +1 -0
- package/dist-types/index.d.ts +19 -11
- package/dist-types/index.d.ts.map +1 -1
- package/dist-types/server/index.d.ts +4 -5
- package/dist-types/server/index.d.ts.map +1 -1
- package/dist-types/types/index.d.ts +63 -15
- package/dist-types/types/index.d.ts.map +1 -1
- package/dist-types/ui/Toolbar.d.ts +10 -0
- package/dist-types/ui/Toolbar.d.ts.map +1 -1
- package/dist-types/ui/doc-tools.d.ts +58 -0
- package/dist-types/ui/doc-tools.d.ts.map +1 -0
- package/dist-types/ui/icons.d.ts.map +1 -1
- package/dist-types/ui/popovers.d.ts +14 -25
- package/dist-types/ui/popovers.d.ts.map +1 -1
- package/package.json +70 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-tracker.d.ts","sourceRoot":"","sources":["../../src/core/block-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAwC/C,qBAAa,YAAY;IAYX,OAAO,CAAC,QAAQ,CAAC,IAAI;IAXjC,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,mBAA0B;IACxC,4BAA4B;IAC5B,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkC;IACtD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyD;IAC7E,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0C;IAC/D,qDAAqD;IACrD,OAAO,CAAC,QAAQ,CAAiB;gBAEJ,IAAI,EAAE,WAAW;IAE9C,wCAAwC;IACxC,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI;IAMjD,sDAAsD;IACtD,OAAO,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI;IAuBjD,0BAA0B;IAC1B,IAAI,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAM3B,kBAAkB;IAClB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,EAAE,WAAW,EAAE,GAAG,OAAO;IAqB7C,0CAA0C;IAC1C,QAAQ,IAAI,MAAM,EAAE;IAMpB,KAAK,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM;IAS1B,uDAAuD;IACvD,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,MAAM,GAAG,MAAM;IAQ1E,gCAAgC;IAChC,QAAQ,CAAC,EAAE,EAAE,WAAW,GAAG,cAAc;IASzC,iDAAiD;IACjD,KAAK,IAAI,IAAI;CAUd"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import type { CalloutVariant } from './block-meta.js';
|
|
2
|
+
export type BlockKind = 'paragraph' | 'heading' | 'bulletList' | 'orderedList' | 'taskList' | 'blockquote' | 'codeBlock' | 'toggle' | 'callout' | 'image' | 'table' | 'hr' | 'linkCard' | 'youtube' | 'file' | 'importedHtml' | 'unknown';
|
|
2
3
|
export type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
|
|
3
4
|
/** 단락 — 메타데이터 없음. */
|
|
4
5
|
export interface ParagraphAttrs {
|
|
@@ -27,6 +28,25 @@ export interface CodeBlockAttrs {
|
|
|
27
28
|
/** 'javascript' / 'python' 등의 언어 식별자. 없으면 plaintext. */
|
|
28
29
|
language?: string;
|
|
29
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* 토글(접기/펴기) 블록 — `<details>` / `<summary>`.
|
|
33
|
+
*
|
|
34
|
+
* 펼침 상태를 `open` 하나로만 들고 있다. 요약 줄과 본문은 다른 블록과 마찬가지로
|
|
35
|
+
* `snapshot.html` 안에 들어간다.
|
|
36
|
+
*/
|
|
37
|
+
export interface ToggleAttrs {
|
|
38
|
+
/** 펼쳐진 상태로 저장할지. 없으면 접힌 상태. */
|
|
39
|
+
open?: boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 콜아웃(강조 상자) 블록 — `<aside>`.
|
|
43
|
+
*
|
|
44
|
+
* 종류만 들고 있다. 내용은 다른 블록과 마찬가지로 `snapshot.html` 안이다.
|
|
45
|
+
*/
|
|
46
|
+
export interface CalloutAttrs {
|
|
47
|
+
/** 없으면 `'note'`. */
|
|
48
|
+
variant?: CalloutVariant;
|
|
49
|
+
}
|
|
30
50
|
/** 이미지 블록(<figure><img>). */
|
|
31
51
|
export interface ImageAttrs {
|
|
32
52
|
src?: string;
|
|
@@ -111,6 +131,8 @@ export interface BlockAttrsByKind {
|
|
|
111
131
|
taskList: TaskListAttrs;
|
|
112
132
|
blockquote: BlockquoteAttrs;
|
|
113
133
|
codeBlock: CodeBlockAttrs;
|
|
134
|
+
toggle: ToggleAttrs;
|
|
135
|
+
callout: CalloutAttrs;
|
|
114
136
|
image: ImageAttrs;
|
|
115
137
|
table: TableAttrs;
|
|
116
138
|
hr: HrAttrs;
|
|
@@ -126,7 +148,7 @@ export interface BlockAttrsByKind {
|
|
|
126
148
|
* 외부에서 직렬화된 BlockSnapshot 의 attrs 는 BlockAttrsByKind[kind] 로 더
|
|
127
149
|
* 구체적으로 타입이 잡힌다 — 아래 BlockSnapshot 의 discriminated union 참고.
|
|
128
150
|
*/
|
|
129
|
-
export interface BlockAttrs extends Partial<HeadingAttrs>, Partial<BulletListAttrs>, Partial<OrderedListAttrs>, Partial<CodeBlockAttrs>, Partial<ImageAttrs>, Partial<TableAttrs>, Partial<LinkCardAttrs>, Partial<YoutubeAttrs>, Partial<FileAttrs>, Partial<ImportedHtmlAttrs>, Partial<UnknownAttrs> {
|
|
151
|
+
export interface BlockAttrs extends Partial<HeadingAttrs>, Partial<BulletListAttrs>, Partial<OrderedListAttrs>, Partial<CodeBlockAttrs>, Partial<ToggleAttrs>, Partial<CalloutAttrs>, Partial<ImageAttrs>, Partial<TableAttrs>, Partial<LinkCardAttrs>, Partial<YoutubeAttrs>, Partial<FileAttrs>, Partial<ImportedHtmlAttrs>, Partial<UnknownAttrs> {
|
|
130
152
|
}
|
|
131
153
|
/**
|
|
132
154
|
* BlockType.matches() 의 반환 타입. 내부 사용은 느슨한 BlockAttrs 로 두고,
|
|
@@ -144,7 +166,7 @@ export interface Block {
|
|
|
144
166
|
element: HTMLElement;
|
|
145
167
|
}
|
|
146
168
|
/** 인라인 서식 마크 식별자. */
|
|
147
|
-
export type InlineMarkName = 'bold' | 'italic' | 'underline' | 'strike';
|
|
169
|
+
export type InlineMarkName = 'bold' | 'italic' | 'underline' | 'strike' | 'superscript' | 'subscript';
|
|
148
170
|
export declare const ALL_INLINE_MARKS: ReadonlyArray<InlineMarkName>;
|
|
149
171
|
/**
|
|
150
172
|
* 블록 정의. 같은 kind 의 BlockType 은 1개만 등록한다.
|
|
@@ -173,6 +195,10 @@ export interface BlockType {
|
|
|
173
195
|
/** "비어 있는" 상태인지. 백스페이스 / 포커스 / placeholder 처리에 사용. */
|
|
174
196
|
isEmpty(el: HTMLElement): boolean;
|
|
175
197
|
}
|
|
198
|
+
/** 콜아웃 element 에서 종류를 읽는다. 클래스가 없거나 모르면 `'note'`. */
|
|
199
|
+
export declare function readCalloutVariant(el: HTMLElement): CalloutVariant;
|
|
200
|
+
/** 콜아웃 element 의 종류 클래스를 갈아 끼운다. 다른 클래스는 건드리지 않는다. */
|
|
201
|
+
export declare function applyCalloutVariant(el: HTMLElement, variant: CalloutVariant): void;
|
|
176
202
|
/**
|
|
177
203
|
* 본문 직계 자식 element 를 분류할 때 시도되는 순서.
|
|
178
204
|
* 위에서부터 첫 번째로 매칭되는 BlockType 이 채택된다.
|
|
@@ -231,6 +257,15 @@ export interface NormalizeOptions {
|
|
|
231
257
|
* `false` 로 꺼서 없던 빈 단락이 결과에 끼어들지 않게 한다.
|
|
232
258
|
*/
|
|
233
259
|
writableTail?: boolean;
|
|
260
|
+
/**
|
|
261
|
+
* 이 블록들(본문 직계 자식) 안쪽만 정규화한다. 생략하면 본문 전체.
|
|
262
|
+
*
|
|
263
|
+
* 타이핑 한 번에 바뀌는 블록은 보통 하나다. 문서 전체를 매번 훑으면
|
|
264
|
+
* 190쪽 문서에서 키 하나에 수십 ms 가 든다 — 에디터는 MutationRecord 로
|
|
265
|
+
* 바뀐 블록만 골라 넘긴다. 본문 직계의 떠도는 텍스트 감싸기와 꼬리 단락
|
|
266
|
+
* 보장은 범위와 상관없이 언제나 한다.
|
|
267
|
+
*/
|
|
268
|
+
blocks?: Iterable<HTMLElement>;
|
|
234
269
|
}
|
|
235
270
|
export declare function normalizeContent(root: HTMLElement, options?: NormalizeOptions): void;
|
|
236
271
|
/**
|
|
@@ -385,7 +420,7 @@ export declare function applyBlockClassNames(root: HTMLElement): void;
|
|
|
385
420
|
*
|
|
386
421
|
* 이미 인라인 값이 있으면 그쪽을 우선한다 — 더 구체적인 지정이다.
|
|
387
422
|
*/
|
|
388
|
-
export declare function restoreAlignFromClasses(root: HTMLElement): void;
|
|
423
|
+
export declare function restoreAlignFromClasses(root: HTMLElement, scope?: readonly HTMLElement[] | null): void;
|
|
389
424
|
/**
|
|
390
425
|
* `getHTML()` 출력에서 편집 보조 element / 속성을 제거한다.
|
|
391
426
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/core/blocks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/core/blocks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,60 +1,47 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 글꼴
|
|
3
|
-
* 모두 SIL Open Font License 또는 자체 무제한 상용 라이선스.
|
|
2
|
+
* 글꼴 · 글자 크기 목록.
|
|
4
3
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* ## 기본 목록은 "이미 깔려 있는 글꼴" 이다
|
|
5
|
+
*
|
|
6
|
+
* 1.x 는 글꼴 드롭다운을 열 때 Google Fonts 와 jsDelivr 에서 웹폰트를 받았다.
|
|
7
|
+
* 그 때문에 (1) 망이 막힌 공공 · 금융 환경에서는 목록이 비고, (2) 열 때마다
|
|
8
|
+
* 외부로 요청이 나가 개인정보 · 보안 심사에서 걸리고, (3) 받은 글꼴로 쓴 문서가
|
|
9
|
+
* 다른 PC 에서는 다른 글꼴로 보였다.
|
|
10
|
+
*
|
|
11
|
+
* 2.0 의 기본값은 한국 문서에서 실제로 쓰는 시스템 글꼴(맑은 고딕 · 굴림 · 돋움 ·
|
|
12
|
+
* 바탕 · 궁서 …) 이고, 네트워크를 쓰지 않는다. 웹폰트가 필요하면 `fonts`
|
|
13
|
+
* 옵션에 `cssUrl` 과 함께 넘긴다 — 그 글꼴만, 드롭다운을 처음 열 때 받는다.
|
|
14
|
+
*
|
|
15
|
+
* 이 PC 에 없는 글꼴(맥의 굴림 등) 은 목록에서 뺀다. 골라도 적용되지 않는
|
|
16
|
+
* 항목은 없느니만 못하다.
|
|
9
17
|
*/
|
|
10
18
|
export interface FontFamily {
|
|
11
|
-
/**
|
|
12
|
-
id: string;
|
|
13
|
-
/** 드롭다운에 표시되는 한국어 라벨. */
|
|
19
|
+
/** 드롭다운에 보이는 이름. */
|
|
14
20
|
label: string;
|
|
15
|
-
/** CSS font-family
|
|
21
|
+
/** CSS font-family 값. 첫 글꼴이 "그 글꼴" 이고 나머지는 대체 글꼴이다. */
|
|
16
22
|
stack: string;
|
|
17
|
-
/**
|
|
18
|
-
googleFonts?: string;
|
|
19
|
-
/** 외부 CDN 의 전체 CSS URL (Google Fonts 가 아닌 글꼴용). */
|
|
23
|
+
/** 웹폰트 스타일시트 주소. 있으면 드롭다운을 처음 열 때 한 번 받는다. */
|
|
20
24
|
cssUrl?: string;
|
|
21
25
|
}
|
|
22
|
-
/** "
|
|
23
|
-
export declare const
|
|
24
|
-
export declare const
|
|
25
|
-
/** id → FontFamily lookup. */
|
|
26
|
-
export declare const FONT_FAMILY_BY_ID: Readonly<Record<string, FontFamily>>;
|
|
27
|
-
/**
|
|
28
|
-
* 글자 크기 프리셋 (px). 본문 기본은 16px.
|
|
29
|
-
* 12 ~ 48px 범위에서 자주 쓰이는 단계만 큐레이션.
|
|
30
|
-
*/
|
|
31
|
-
export declare const FONT_SIZES: ReadonlyArray<number>;
|
|
32
|
-
/**
|
|
33
|
-
* Computed CSS font-size 문자열(예: "16px", "1.125rem")을 px 정수로 변환.
|
|
34
|
-
* 매칭 실패 시 null. 활성 toolbar 크기 표시에 사용.
|
|
35
|
-
*/
|
|
36
|
-
export declare function pxFromCss(css: string | null | undefined): number | null;
|
|
26
|
+
/** 목록 맨 위 "기본 글꼴" — 서식을 지워 본문 글꼴로 돌아간다. stack 이 빈 문자열이다. */
|
|
27
|
+
export declare const DEFAULT_FONT: FontFamily;
|
|
28
|
+
export declare const DEFAULT_FONTS: ReadonlyArray<FontFamily>;
|
|
37
29
|
/**
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* `FONT_FAMILIES` 전체는 그대로 남겨 둔다 — 이미 그 글꼴로 저장된 본문의
|
|
41
|
-
* 라벨을 표시하려면(`findFontIdFromCss`) 실패한 항목도 알고 있어야 한다.
|
|
30
|
+
* 글자 크기(pt). 한글 · 워드와 같은 단위다 — 붙여넣은 문서의 10pt 가 목록의
|
|
31
|
+
* 10 과 그대로 맞는다. 에디터 본문 기본 크기 16px 는 12pt 다.
|
|
42
32
|
*/
|
|
43
|
-
export declare
|
|
44
|
-
/**
|
|
33
|
+
export declare const DEFAULT_FONT_SIZES: ReadonlyArray<number>;
|
|
34
|
+
/** CSS 글자 크기(computed 값은 px) → pt, 0.5 단위로 반올림. */
|
|
35
|
+
export declare function ptFromCss(css: string | null | undefined): number | null;
|
|
36
|
+
/** `fonts` 중 지금 쓸 수 있는 것. 드롭다운은 이 목록으로 그린다. */
|
|
37
|
+
export declare function availableFonts(fonts: ReadonlyArray<FontFamily>): FontFamily[];
|
|
38
|
+
/** 쓸 수 있는 목록이 바뀌면 호출된다. 반환값을 부르면 구독이 해제된다. */
|
|
45
39
|
export declare function subscribeFontAvailability(listener: () => void): () => void;
|
|
46
40
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* 실패는 조용히 넘어가지 않는다 — 받지 못한 글꼴은 목록에서 빠진다.
|
|
51
|
-
*/
|
|
52
|
-
export declare function ensureFontFamiliesLoaded(): void;
|
|
53
|
-
/**
|
|
54
|
-
* 임의의 CSS font-family 문자열에 대해 FONT_FAMILIES 중 가장 비슷한 항목을
|
|
55
|
-
* 찾아 id 를 반환. 매칭 실패 시 null. 활성 toolbar 표시에 사용.
|
|
56
|
-
*
|
|
57
|
-
* 비교는 stack 의 첫 family 토큰을 추출해 case-insensitive 비교.
|
|
41
|
+
* 드롭다운을 열 때 부른다. 웹폰트(`cssUrl`) 는 그때 한 번 받고, 시스템 글꼴은
|
|
42
|
+
* 이 PC 에 있는지 확인한다. 같은 글꼴은 두 번 확인하지 않는다.
|
|
58
43
|
*/
|
|
59
|
-
export declare function
|
|
44
|
+
export declare function prepareFonts(fonts: ReadonlyArray<FontFamily>): void;
|
|
45
|
+
/** CSS font-family 값이 목록의 어느 글꼴인지 (첫 글꼴 이름으로 비교). */
|
|
46
|
+
export declare function findFont(fonts: ReadonlyArray<FontFamily>, css: string | null | undefined): FontFamily | null;
|
|
60
47
|
//# sourceMappingURL=fonts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../src/core/fonts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../src/core/fonts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,4DAA4D;AAC5D,eAAO,MAAM,YAAY,EAAE,UAAqC,CAAC;AAEjE,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,UAAU,CAanD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,MAAM,CAEpD,CAAC;AAEF,mDAAmD;AACnD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAOvE;AAgBD,+CAA+C;AAC/C,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,UAAU,EAAE,CAE7E;AAED,8CAA8C;AAC9C,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAK1E;AAoCD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,IAAI,CAUnE;AA8BD,qDAAqD;AACrD,wBAAgB,QAAQ,CACtB,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,EAChC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC7B,UAAU,GAAG,IAAI,CASnB"}
|
|
@@ -40,5 +40,7 @@ export declare const LANGUAGES: ReadonlyArray<LanguageDef>;
|
|
|
40
40
|
* 코드 문자열을 언어 식별자에 따라 highlight HTML 로 변환.
|
|
41
41
|
* 알 수 없는 언어 또는 'plaintext' 면 escape 만 적용.
|
|
42
42
|
*/
|
|
43
|
+
/** 아무 것도 칠하지 않는 언어 식별자. */
|
|
44
|
+
export declare const PLAIN_TEXT_ID = "plaintext";
|
|
43
45
|
export declare function highlightCode(code: string, langId: string | undefined): string;
|
|
44
46
|
//# sourceMappingURL=highlight.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../src/core/highlight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/B,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa;IACb,YAAY,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,gDAAgD;IAChD,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,yCAAyC;IACzC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,+CAA+C;IAC/C,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACnC;AA0HD,eAAO,MAAM,SAAS,EAAE,aAAa,CAAC,WAAW,CA2EhD,CAAC;AAQF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../src/core/highlight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/B,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa;IACb,YAAY,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,gDAAgD;IAChD,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,yCAAyC;IACzC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,+CAA+C;IAC/C,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACnC;AA0HD,eAAO,MAAM,SAAS,EAAE,aAAa,CAAC,WAAW,CA2EhD,CAAC;AAQF;;;GAGG;AACH,2BAA2B;AAC3B,eAAO,MAAM,aAAa,cAAc,CAAC;AAEzC,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAS9E"}
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
*
|
|
12
12
|
* ## 무엇을 저장하는가
|
|
13
13
|
*
|
|
14
|
-
* 본문 HTML
|
|
14
|
+
* 본문 블록별 HTML 과 캐럿 위치를 한 항목으로 저장하는 스냅샷 방식이다.
|
|
15
15
|
* 조작 단위 이력(operation log) 이 메모리는 덜 쓰지만, 되돌리기가 **정확히**
|
|
16
16
|
* 원래 화면으로 돌아간다는 보장을 얻기가 훨씬 어렵다. 스냅샷은 그 보장이
|
|
17
17
|
* 공짜다 — 문자열을 도로 넣기만 하면 된다.
|
|
18
18
|
*
|
|
19
|
-
* 캐럿은
|
|
20
|
-
*
|
|
19
|
+
* 캐럿은 "몇 번째 블록의 몇 번째 글자" 로 저장한다. 블록을 갈아끼우면 노드
|
|
20
|
+
* 참조는 무효가 되지만 이 좌표는 그대로 살아남는다.
|
|
21
21
|
*
|
|
22
22
|
* ## 언제 한 항목으로 묶는가
|
|
23
23
|
*
|
|
@@ -26,15 +26,33 @@
|
|
|
26
26
|
* 유형 변경처럼 **구조가 바뀌는 조작**은 합치지 않는다 — 그건 사용자가 한
|
|
27
27
|
* 번에 하나씩 되돌리길 기대하는 단위다.
|
|
28
28
|
*/
|
|
29
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* 문서 안 캐럿 위치. 블록 순번 + 그 블록 안의 글자 오프셋.
|
|
31
|
+
*
|
|
32
|
+
* 문서 맨 앞부터의 글자 수로 적으면 기록할 때마다 문서 전체 텍스트를 읽어야
|
|
33
|
+
* 한다 (190쪽 문서에서 키 하나에 수 ms). 블록 단위로 적으면 그 블록만 읽는다.
|
|
34
|
+
*/
|
|
35
|
+
export interface DocSelection {
|
|
36
|
+
startBlock: number;
|
|
37
|
+
start: number;
|
|
38
|
+
endBlock: number;
|
|
39
|
+
end: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 이력 한 칸. 본문 직계 블록마다 HTML 문자열 하나.
|
|
43
|
+
*
|
|
44
|
+
* 블록 단위로 나눠 두는 이유 — 타이핑 한 번에 바뀌는 블록은 보통 하나라서,
|
|
45
|
+
* 나머지 블록의 문자열은 **이전 칸과 같은 문자열 객체를 그대로 공유한다.**
|
|
46
|
+
* 문서 전체를 한 문자열로 저장하면 190쪽 문서에서 이력 200칸이 수십 MB 가 된다.
|
|
47
|
+
*/
|
|
30
48
|
export interface HistoryEntry {
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
end: number;
|
|
36
|
-
} | null;
|
|
49
|
+
blocks: readonly string[];
|
|
50
|
+
/** 모든 블록 문자열 길이의 합. 대량 변경 판정에 쓴다. */
|
|
51
|
+
size: number;
|
|
52
|
+
selection: DocSelection | null;
|
|
37
53
|
}
|
|
54
|
+
/** 두 칸의 내용이 같은지. 공유된 문자열은 참조 비교로 바로 끝난다. */
|
|
55
|
+
export declare function sameContent(a: HistoryEntry, b: HistoryEntry): boolean;
|
|
38
56
|
/**
|
|
39
57
|
* 이 시간 안에 이어지는 타이핑은 한 항목으로 합친다.
|
|
40
58
|
* 사람이 문장 하나를 치는 동안의 간격보다 짧게, 생각하고 다시 치기 시작하는
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/core/history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/core/history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,YAAY,GAAG,IAAI,CAAC;CAChC;AAED,4CAA4C;AAC5C,wBAAgB,WAAW,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CAOrE;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B,6CAA6C;AAC7C,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,gDAAgD;AAChD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEjD,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,+CAA+C;IAC/C,OAAO,CAAC,OAAO,CAAe;IAC9B,uCAAuC;IACvC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAA4B;gBAEhC,OAAO,EAAE,YAAY;IAIjC,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IA2BhE,6BAA6B;IAC7B,IAAI,IAAI,YAAY,GAAG,IAAI;IAW3B,yBAAyB;IACzB,IAAI,IAAI,YAAY,GAAG,IAAI;IAS3B,6BAA6B;IAC7B,OAAO,IAAI,YAAY;IAIvB;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;CAOjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-mini.d.ts","sourceRoot":"","sources":["../../src/core/html-mini.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,eAAe;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,gCAAgC;IAChC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxC,QAAQ,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,eAAe,CAAC;AAwDlD,8CAA8C;AAC9C,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsBpD;AAED,qCAAqC;AACrC,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKhD;AAED,uCAAuC;AACvC,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAgBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAmG1D;AAED,mDAAmD;AACnD,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,CAiBjE;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,CAczD;
|
|
1
|
+
{"version":3,"file":"html-mini.d.ts","sourceRoot":"","sources":["../../src/core/html-mini.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,eAAe;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,gCAAgC;IAChC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxC,QAAQ,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,eAAe,CAAC;AAwDlD,8CAA8C;AAC9C,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsBpD;AAED,qCAAqC;AACrC,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKhD;AAED,uCAAuC;AACvC,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAgBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAmG1D;AAED,mDAAmD;AACnD,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,CAiBjE;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,CAczD;AAWD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,CAiBtE;AAED,gCAAgC;AAChC,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,GAAG,EAAE,MAAM,GACV,eAAe,EAAE,CAInB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,GAAG,EAAE,MAAM,GACV,eAAe,GAAG,IAAI,CAQxB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { BlockSnapshot } from './blocks.js';
|
|
2
|
+
/**
|
|
3
|
+
* HTML 문자열을 `BlockSnapshot[]` 로 변환한다 (브라우저 전용).
|
|
4
|
+
*
|
|
5
|
+
* 에디터 본문과 같은 정화 · 정규화 경로를 타므로, 같은 HTML 을 에디터에 넣고
|
|
6
|
+
* `getSnapshots()` 한 결과와 블록 구성이 같다. 편집용 꼬리 단락은 붙이지
|
|
7
|
+
* 않는다 — 뷰어에 넘길 목록에 원본에 없던 빈 단락이 생기면 여백이 늘어난다.
|
|
8
|
+
*/
|
|
9
|
+
export declare function htmlToBlocks(html: string): BlockSnapshot[];
|
|
10
|
+
//# sourceMappingURL=html-to-blocks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-to-blocks.d.ts","sourceRoot":"","sources":["../../src/core/html-to-blocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAU9C;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAS1D"}
|
|
@@ -21,6 +21,8 @@ export interface Strings {
|
|
|
21
21
|
italic: string;
|
|
22
22
|
underline: string;
|
|
23
23
|
strike: string;
|
|
24
|
+
superscript: string;
|
|
25
|
+
subscript: string;
|
|
24
26
|
color: string;
|
|
25
27
|
backgroundColor: string;
|
|
26
28
|
align: string;
|
|
@@ -36,6 +38,13 @@ export interface Strings {
|
|
|
36
38
|
table: string;
|
|
37
39
|
hr: string;
|
|
38
40
|
clearFormat: string;
|
|
41
|
+
lineHeight: string;
|
|
42
|
+
letterSpacing: string;
|
|
43
|
+
specialChar: string;
|
|
44
|
+
findReplace: string;
|
|
45
|
+
source: string;
|
|
46
|
+
print: string;
|
|
47
|
+
fullscreen: string;
|
|
39
48
|
blockTypeChangeTooltip: string;
|
|
40
49
|
blockMoveTooltip: string;
|
|
41
50
|
addBelowTooltip: string;
|
|
@@ -49,6 +58,8 @@ export interface Strings {
|
|
|
49
58
|
taskList: string;
|
|
50
59
|
blockquote: string;
|
|
51
60
|
codeBlock: string;
|
|
61
|
+
toggle: string;
|
|
62
|
+
callout: string;
|
|
52
63
|
image: string;
|
|
53
64
|
table: string;
|
|
54
65
|
hr: string;
|
|
@@ -68,6 +79,8 @@ export interface Strings {
|
|
|
68
79
|
orderedList: string;
|
|
69
80
|
blockquote: string;
|
|
70
81
|
codeBlock: string;
|
|
82
|
+
toggle: string;
|
|
83
|
+
callout: string;
|
|
71
84
|
hr: string;
|
|
72
85
|
link: string;
|
|
73
86
|
image: string;
|
|
@@ -95,6 +108,37 @@ export interface Strings {
|
|
|
95
108
|
colRight: string;
|
|
96
109
|
deleteRow: string;
|
|
97
110
|
deleteCol: string;
|
|
111
|
+
mergeCells: string;
|
|
112
|
+
splitCell: string;
|
|
113
|
+
};
|
|
114
|
+
docTools: {
|
|
115
|
+
/** 본문 편집 영역의 접근성 이름. `ariaLabel` 옵션이 없을 때 쓴다. */
|
|
116
|
+
editorLabel: string;
|
|
117
|
+
find: string;
|
|
118
|
+
replaceWith: string;
|
|
119
|
+
previous: string;
|
|
120
|
+
next: string;
|
|
121
|
+
replace: string;
|
|
122
|
+
replaceAll: string;
|
|
123
|
+
close: string;
|
|
124
|
+
/** `{current}` / `{total}`. */
|
|
125
|
+
matchCount: string;
|
|
126
|
+
noMatch: string;
|
|
127
|
+
/** `{count}` 건을 바꿨을 때. */
|
|
128
|
+
replaced: string;
|
|
129
|
+
matchCase: string;
|
|
130
|
+
sourceLabel: string;
|
|
131
|
+
letterSpacingNormal: string;
|
|
132
|
+
/** `{size}` — 올릴 수 있는 최대 크기. */
|
|
133
|
+
tooLarge: string;
|
|
134
|
+
specialGroups: {
|
|
135
|
+
symbols: string;
|
|
136
|
+
arrows: string;
|
|
137
|
+
numbers: string;
|
|
138
|
+
units: string;
|
|
139
|
+
brackets: string;
|
|
140
|
+
math: string;
|
|
141
|
+
};
|
|
98
142
|
};
|
|
99
143
|
fontFamily: {
|
|
100
144
|
systemDefault: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/core/i18n.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/core/i18n.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 외부 HTML 문서를 가져와 모든 스타일을 인라인으로 베이크한다.
|
|
3
|
-
*
|
|
4
|
-
* 흐름:
|
|
5
|
-
* 1. 숨김 iframe 을 만들고 srcdoc 으로 HTML 주입
|
|
6
|
-
* 2. iframe load 이벤트(=body 의 마지막 동기 스크립트까지 실행 완료) +
|
|
7
|
-
* 추가 RAF/idle 대기 → setTimeout(0) 류 비동기 스타일 적용까지 안정화
|
|
8
|
-
* 3. body 트리 전체를 walk 하면서 각 element 의 computed style 중
|
|
9
|
-
* "캐스케이드로 채워지지 않을" 속성만 인라인 style 속성으로 베이크
|
|
10
|
-
* 4. iframe 제거 후 변환된 element 들의 outerHTML 배열 반환
|
|
11
|
-
*
|
|
12
|
-
* 다른 origin / iframe contentDocument 접근 제한이 발생하면 reject.
|
|
13
|
-
*/
|
|
14
1
|
export declare function isBlockLevelTag(tagName: string): boolean;
|
|
15
2
|
export interface ImportHtmlOptions {
|
|
16
3
|
/** iframe load 후 추가 idle 대기(ms). Tailwind CDN 등 런타임 스타일 주입을
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-html.d.ts","sourceRoot":"","sources":["../../src/core/import-html.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"import-html.d.ts","sourceRoot":"","sources":["../../src/core/import-html.ts"],"names":[],"mappings":"AA8BA,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAExD;AAiJD,MAAM,WAAW,iBAAiB;IAChC;6BACyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,WAAW,EAAE,CAAC,CAwGxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-markdown.d.ts","sourceRoot":"","sources":["../../src/core/import-markdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;
|
|
1
|
+
{"version":3,"file":"import-markdown.d.ts","sourceRoot":"","sources":["../../src/core/import-markdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAiBH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,EAAE,CAU1D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAiIjD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 붙여넣기 · 끌어 놓기로 들어온 조각을 캐럿 자리에 넣는다.
|
|
3
|
+
*
|
|
4
|
+
* `document.execCommand('insertHTML')` 을 쓰지 않는 이유 — 크롬은 넣는 순간
|
|
5
|
+
* 주변 글자의 계산된 스타일을 `<span style>` 으로 덧입혀, 깨끗하게 다듬은 조각을
|
|
6
|
+
* 다시 지저분하게 만든다. 표를 문단 안에 넣으면 문단을 이상하게 쪼개기도 한다.
|
|
7
|
+
* 이 에디터는 이력을 직접 관리하므로 브라우저 undo 스택이 필요 없다.
|
|
8
|
+
*
|
|
9
|
+
* 규칙은 워드프로세서와 같다.
|
|
10
|
+
* - 글자만 있는 조각은 캐럿 자리에 그대로 끼운다.
|
|
11
|
+
* - 문단 · 표 같은 블록이 있으면 지금 문단을 캐럿에서 둘로 나누고 그 사이에
|
|
12
|
+
* 넣는다. 첫 문단은 앞 조각에, 마지막 문단은 뒤 조각에 이어 붙인다.
|
|
13
|
+
* - 표 칸 · 목록 항목 · 코드 안처럼 블록을 둘 수 없는 자리에는 줄바꿈으로
|
|
14
|
+
* 이은 글로 넣는다.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* `range` 자리에 조각을 넣고, 넣은 내용의 **끝** 을 가리키는 [노드, 오프셋]
|
|
18
|
+
* 을 돌려준다 (캐럿을 둘 곳). `root` 는 본문 element.
|
|
19
|
+
*/
|
|
20
|
+
export declare function insertFragment(root: HTMLElement, range: Range, frag: DocumentFragment): [Node, number] | null;
|
|
21
|
+
//# sourceMappingURL=insert-fragment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert-fragment.d.ts","sourceRoot":"","sources":["../../src/core/insert-fragment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA2FH;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,gBAAgB,GACrB,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,CAyEvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-export.d.ts","sourceRoot":"","sources":["../../src/core/markdown-export.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"markdown-export.d.ts","sourceRoot":"","sources":["../../src/core/markdown-export.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAe9C,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACzB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAOD,6BAA6B;AAC7B,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,aAAa,EAAE,EACnC,OAAO,GAAE,eAAoB,GAC5B,MAAM,CAWR"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 붙여넣은 HTML 을 에디터 문서로 다듬는다 — 워드 · 한글 · 엑셀 · 웹.
|
|
3
|
+
*
|
|
4
|
+
* ## 왜 필요한가
|
|
5
|
+
*
|
|
6
|
+
* 오피스 프로그램이 클립보드에 올리는 HTML 은 문서가 아니라 "그 프로그램이
|
|
7
|
+
* 다시 읽을 수 있는 덤프" 다. 서식 대부분이 `<style>` 의 클래스 규칙
|
|
8
|
+
* (`.xl65`, `p.MsoNormal`, `P.HStyle0`) 에 들어 있고, 본문에는 `mso-*` 속성 ·
|
|
9
|
+
* `<o:p>` · 조건부 주석 · 목록 기호를 흉내 낸 글자가 섞여 있다. 그대로 넣으면
|
|
10
|
+
*
|
|
11
|
+
* - 엑셀 머리글의 배경 · 테두리 · 굵기가 사라지고(클래스에만 있으므로),
|
|
12
|
+
* - 워드 글머리 목록이 "§ 신규 고객" 같은 글자 문단이 되고,
|
|
13
|
+
* - 저장한 HTML 이 몇 배로 부풀어 서버 · 뷰어에서도 같은 쓰레기를 끌고 다닌다.
|
|
14
|
+
*
|
|
15
|
+
* ## 무엇을 하는가
|
|
16
|
+
*
|
|
17
|
+
* 1. `DOMParser` 로 **비활성 문서** 에 읽는다 — 스크립트가 돌지 않고 이미지도
|
|
18
|
+
* 내려받지 않는다. 보안 거름은 이 다음 단계(`parseSafeFragment`) 가 맡는다.
|
|
19
|
+
* 2. `<style>` 의 클래스 규칙에서 **눈에 보이는 서식만**(굵기 · 기울임 · 색 ·
|
|
20
|
+
* 배경 · 정렬 · 테두리) 골라 요소의 style 로 옮긴다. 글꼴 · 크기 · 줄 간격 같은
|
|
21
|
+
* "문서 기본값" 은 옮기지 않는다 — 붙여넣은 글이 주변 글과 다른 글꼴로 박히는
|
|
22
|
+
* 것이 사용자가 가장 싫어하는 결과다. 요소에 **직접** 쓴 글꼴 · 크기는 남긴다.
|
|
23
|
+
* 3. 워드의 `mso-list` 문단을 진짜 `<ul>/<ol>` 로 묶는다(수준별 중첩 포함).
|
|
24
|
+
* 4. `mso-*` · 클래스 · `lang` · `<o:p>` · 빈 `<span>` 을 걷어 낸다. 길이 단위 pt 는
|
|
25
|
+
* px 로 (글자 크기는 에디터 목록과 같은 pt 로 둔다).
|
|
26
|
+
* 5. 표 칸 안의 문단 하나짜리 `<p>` 는 풀어 칸에 글만 남긴다.
|
|
27
|
+
*/
|
|
28
|
+
export type PasteSource = 'word' | 'excel' | 'hwp' | 'web';
|
|
29
|
+
/** 클립보드 HTML 이 어느 프로그램에서 왔는지. */
|
|
30
|
+
export declare function detectSource(html: string): PasteSource;
|
|
31
|
+
/**
|
|
32
|
+
* 붙여넣을 HTML 을 다듬어 돌려준다. 결과는 아직 **신뢰할 수 없는** HTML 이다
|
|
33
|
+
* — 호출하는 쪽이 반드시 sanitize 를 거쳐 문서에 넣는다.
|
|
34
|
+
*/
|
|
35
|
+
export declare function cleanPastedHtml(html: string): string;
|
|
36
|
+
//# sourceMappingURL=paste-clean.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paste-clean.d.ts","sourceRoot":"","sources":["../../src/core/paste-clean.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAoBH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;AAE3D,iCAAiC;AACjC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAMtD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqDpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-string.d.ts","sourceRoot":"","sources":["../../src/core/render-string.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"render-string.d.ts","sourceRoot":"","sources":["../../src/core/render-string.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,UAAU,CAAC;AAkC5D,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,6CAA6C;IAC7C,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,aAAa,EAAE,EACnC,OAAO,GAAE,iBAAsB,GAC9B,MAAM,CAQR;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAM,GAChD,MAAM,CAER"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** 신뢰할 수 없는 HTML 을 정화한 DocumentFragment 로 만든다. `doc` 의 노드다. */
|
|
2
|
+
export declare function parseSafeFragment(html: string, doc?: Document): DocumentFragment;
|
|
3
|
+
/**
|
|
4
|
+
* `root` 아래를 제자리에서 정화한다. `root` 자신의 속성은 건드리지 않는다.
|
|
5
|
+
*
|
|
6
|
+
* 이미 문서에 붙어 있는 트리에도 쓸 수 있다 (붙여넣기 뒤 방어선 등). 다만
|
|
7
|
+
* 그때는 이미 로드가 시작됐을 수 있으므로 들어오는 길목에서는
|
|
8
|
+
* {@link parseSafeFragment} 를 쓴다.
|
|
9
|
+
*/
|
|
10
|
+
export declare function sanitizeTree(root: ParentNode): void;
|
|
11
|
+
/**
|
|
12
|
+
* 이미 본문에 붙은 트리의 방어선 — **실행 경로만** 끊는다.
|
|
13
|
+
*
|
|
14
|
+
* 들어오는 길목은 {@link parseSafeFragment} 가 맡는다. 이 함수는 그 길목을
|
|
15
|
+
* 거치지 않고 브라우저가 직접 넣은 HTML(끌어다 놓기 등) 을 위해 타이핑마다
|
|
16
|
+
* 바뀐 블록에만 돈다. 그래서 가볍게 유지한다 — 모르는 태그를 벗기거나
|
|
17
|
+
* 속성 허용 목록을 적용하지 않는다(에디터의 편집 보조 버튼도 이 트리 안에
|
|
18
|
+
* 있다). 스크립트 · 임베드 · 이벤트 핸들러 · 위험한 URL 만 지운다.
|
|
19
|
+
*/
|
|
20
|
+
export declare function guardLiveTree(root: Element): void;
|
|
21
|
+
//# sourceMappingURL=sanitize-dom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize-dom.d.ts","sourceRoot":"","sources":["../../src/core/sanitize-dom.ts"],"names":[],"mappings":"AAYA,+DAA+D;AAC/D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,QAAmB,GAAG,gBAAgB,CAO1F;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAOnD;AA0DD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAajD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize-html.d.ts","sourceRoot":"","sources":["../../src/core/sanitize-html.ts"],"names":[],"mappings":"AAeA;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD"}
|