@moda-editor/core 0.3.2 → 0.3.3
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/dist/features/marks.d.ts.map +1 -1
- package/dist/features/marks.js +24 -2
- package/dist/features/marks.js.map +1 -1
- package/dist/fixtures/external-pastes.d.ts +33 -0
- package/dist/fixtures/external-pastes.d.ts.map +1 -0
- package/dist/fixtures/external-pastes.js +134 -0
- package/dist/fixtures/external-pastes.js.map +1 -0
- package/dist/history.d.ts.map +1 -1
- package/dist/history.js +57 -2
- package/dist/history.js.map +1 -1
- package/dist/parse/html.d.ts.map +1 -1
- package/dist/parse/html.js +5 -2
- package/dist/parse/html.js.map +1 -1
- package/dist/view/ime.d.ts +21 -0
- package/dist/view/ime.d.ts.map +1 -1
- package/dist/view/ime.js +101 -72
- package/dist/view/ime.js.map +1 -1
- package/dist/view/input-selection.d.ts.map +1 -1
- package/dist/view/input-selection.js +5 -2
- package/dist/view/input-selection.js.map +1 -1
- package/dist/view/input.d.ts +14 -0
- package/dist/view/input.d.ts.map +1 -1
- package/dist/view/input.js +56 -2
- package/dist/view/input.js.map +1 -1
- package/dist/view/mount.d.ts +7 -0
- package/dist/view/mount.d.ts.map +1 -1
- package/dist/view/mount.js +87 -12
- package/dist/view/mount.js.map +1 -1
- package/package.json +1 -1
package/dist/view/ime.js
CHANGED
|
@@ -3,13 +3,95 @@ import { pathEq } from "../state/apply.js";
|
|
|
3
3
|
import { normalizeRange, point, textSelection } from "../state/selection.js";
|
|
4
4
|
import { domEndsWith, topBlockKey } from "./caret.js";
|
|
5
5
|
import { PATH_ATTR } from "./dom.js";
|
|
6
|
+
/**
|
|
7
|
+
* focus가 가리키는 텍스트 홀더 요소와 해석된 리프 경로 — 없으면 null.
|
|
8
|
+
* focus가 컨테이너 경계({[i],k})면 홀더가 아니라 블록이 걸리므로
|
|
9
|
+
* 캐럿 기준 이웃 자식 경로로 내려간다. Chromium은 빈 문단(bogus br)의
|
|
10
|
+
* 조합 커밋 뒤 캐럿을 <p>의 자식 인덱스 경계에 놓는다 — 이 경로를
|
|
11
|
+
* 해석 못 하면 커밋이 통째로 유실된다
|
|
12
|
+
*/
|
|
13
|
+
function resolveTextHolder(el, focus) {
|
|
14
|
+
const holderPath = (p) => el.querySelector(`[${PATH_ATTR}="${p.join(",")}"]`);
|
|
15
|
+
const isTextHolder = (h) => !!h && !h.querySelector(`[${PATH_ATTR}]`);
|
|
16
|
+
let path = [...focus.path];
|
|
17
|
+
let holder = holderPath(path);
|
|
18
|
+
if (!isTextHolder(holder)) {
|
|
19
|
+
holder = null;
|
|
20
|
+
for (const i of [focus.offset - 1, focus.offset]) {
|
|
21
|
+
if (i < 0)
|
|
22
|
+
continue;
|
|
23
|
+
const p = [...path, i];
|
|
24
|
+
const h = holderPath(p);
|
|
25
|
+
if (isTextHolder(h)) {
|
|
26
|
+
holder = h;
|
|
27
|
+
path = p;
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return holder ? { holder, path } : null;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 캐럿 리프의 DOM 텍스트를 doc에 흡수한다 — IME 커밋 흡수와
|
|
36
|
+
* beforeinput 없는 네이티브 입력(input 폴백)이 공유하는 diff-흡수.
|
|
37
|
+
* 홀더의 DOM 텍스트와 doc 텍스트를 공통 접두/접미로 비교해 차이
|
|
38
|
+
* 구간만 delete+insert 트랜잭션으로 반영하고, 브라우저가 직접 쓴
|
|
39
|
+
* 블록을 더티 표시해 리렌더가 리마운트로 복구하게 한다.
|
|
40
|
+
* guard(focusPath, docText)가 false면 흡수를 건너뛴다 (흡수 대기 창의
|
|
41
|
+
* 외부 편집 감지 등). 트랜잭션을 디스패치했으면 true를 돌려준다.
|
|
42
|
+
*/
|
|
43
|
+
export function absorbDomText(host, focus, guard) {
|
|
44
|
+
const { editor, el, dirtyPaths } = host;
|
|
45
|
+
const r = resolveTextHolder(el, focus);
|
|
46
|
+
if (!r)
|
|
47
|
+
return false;
|
|
48
|
+
const domText = r.holder.textContent ?? "";
|
|
49
|
+
const node = nodeAt(editor.state.doc, r.path);
|
|
50
|
+
const docText = node?.type === "text" ? (node.text ?? "") : "";
|
|
51
|
+
if (guard && !guard(r.path, docText))
|
|
52
|
+
return false;
|
|
53
|
+
if (domText === docText)
|
|
54
|
+
return false;
|
|
55
|
+
let lo = 0;
|
|
56
|
+
const max = Math.min(domText.length, docText.length);
|
|
57
|
+
while (lo < max && domText[lo] === docText[lo])
|
|
58
|
+
lo++;
|
|
59
|
+
let hiDom = domText.length;
|
|
60
|
+
let hiDoc = docText.length;
|
|
61
|
+
while (hiDom > lo &&
|
|
62
|
+
hiDoc > lo &&
|
|
63
|
+
domText[hiDom - 1] === docText[hiDoc - 1]) {
|
|
64
|
+
hiDom--;
|
|
65
|
+
hiDoc--;
|
|
66
|
+
}
|
|
67
|
+
const tr = editor.state.tr();
|
|
68
|
+
if (hiDoc > lo) {
|
|
69
|
+
tr.delete({
|
|
70
|
+
anchor: point(r.path, lo),
|
|
71
|
+
focus: point(r.path, hiDoc),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
const inserted = domText.slice(lo, hiDom);
|
|
75
|
+
if (inserted)
|
|
76
|
+
tr.insertText(inserted, point(r.path, lo));
|
|
77
|
+
if (!tr.docChanged)
|
|
78
|
+
return false;
|
|
79
|
+
tr.setMeta("history.group", "type").setMeta("ime", true);
|
|
80
|
+
// 브라우저가 이 블록의 DOM을 직접 바꿨다 — 리렌더 시 프레임워크
|
|
81
|
+
// 리컨실이 깨지지 않게 블록 리마운트 대상으로 표시한다
|
|
82
|
+
const dk = topBlockKey({ path: r.path, offset: focus.offset });
|
|
83
|
+
if (dk != null)
|
|
84
|
+
dirtyPaths.add(dk);
|
|
85
|
+
editor.dispatch(tr);
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
6
88
|
/**
|
|
7
89
|
* IME 세션을 생성한다 — 한 contenteditable 바인딩당 하나.
|
|
8
90
|
* 모든 상태는 클로저에 갇히고 호스트가 준 인터페이스로만
|
|
9
91
|
* DOM·에디터에 닿는다.
|
|
10
92
|
*/
|
|
11
93
|
export function createImeSession(host) {
|
|
12
|
-
const { editor, el, dirtyPaths, readDomSel } = host;
|
|
94
|
+
const { editor, el, dirtyPaths, readDomSel, onIdle } = host;
|
|
13
95
|
let composing = false;
|
|
14
96
|
// 조합이 시작된 리프 포인트 — 흡수가 DOM 셀렉션을 못 읽을 때의 폴백
|
|
15
97
|
let compStart = null;
|
|
@@ -31,18 +113,18 @@ export function createImeSession(host) {
|
|
|
31
113
|
// 키입력까지 에코로 삼키므로 페이로드 일치를 함께 요구한다.
|
|
32
114
|
// 페이로드를 못 읽는 환경(null)은 기존 판정으로 폴백한다
|
|
33
115
|
let compEndData = null;
|
|
34
|
-
/**
|
|
35
|
-
* composition 중 브라우저가 직접 바꾼 DOM을 doc에 흡수한다.
|
|
36
|
-
* 캐럿이 위치한 텍스트 홀더의 DOM 텍스트와 doc 텍스트를 공통
|
|
37
|
-
* 접두/접미로 diff해 차이만큼만 트랜잭션으로 반영한다.
|
|
38
|
-
* (제약: 조합이 하나의 텍스트 홀더 안에 머문다고 가정 —
|
|
39
|
-
* 크로스-블록 조합 삭제는 compositionstart의 선처리가 막는다)
|
|
40
|
-
*/
|
|
41
116
|
/** 포인트가 가리키는 리프의 doc 텍스트 — 비텍스트면 ""로 본다 */
|
|
42
117
|
const docTextAt = (p) => {
|
|
43
118
|
const n = nodeAt(editor.state.doc, p.path);
|
|
44
119
|
return n?.type === "text" ? (n.text ?? "") : "";
|
|
45
120
|
};
|
|
121
|
+
/**
|
|
122
|
+
* composition 중 브라우저가 직접 바꾼 DOM을 doc에 흡수한다.
|
|
123
|
+
* 홀더 해석과 diff-흡수는 absorbDomText가 담당하고, 여기서는 조합
|
|
124
|
+
* 세션 특유의 홀더 선택(compStart 폴백)과 외부 편집 감지 가드를 입힌다.
|
|
125
|
+
* (제약: 조합이 하나의 텍스트 홀더 안에 머문다고 가정 —
|
|
126
|
+
* 크로스-블록 조합 삭제는 compositionstart의 선처리가 막는다)
|
|
127
|
+
*/
|
|
46
128
|
const absorbComposition = () => {
|
|
47
129
|
const live = readDomSel()?.focus;
|
|
48
130
|
let focus = live ?? compStart;
|
|
@@ -60,75 +142,15 @@ export function createImeSession(host) {
|
|
|
60
142
|
}
|
|
61
143
|
if (!focus || focus.path.length === 0)
|
|
62
144
|
return;
|
|
63
|
-
|
|
64
|
-
// 아니라 블록이 걸리므로, 캐럿 기준 이웃 자식 경로로 내려간다.
|
|
65
|
-
// Chromium은 빈 문단(bogus br)의 조합 커밋 뒤 캐럿을 <p>의 자식
|
|
66
|
-
// 인덱스 경계에 놓는다 — 이 경로를 해석 못 하면 커밋이 통째로 유실된다
|
|
67
|
-
const holderPath = (p) => el.querySelector(`[${PATH_ATTR}="${p.join(",")}"]`);
|
|
68
|
-
const isTextHolder = (h) => !!h && !h.querySelector(`[${PATH_ATTR}]`);
|
|
69
|
-
let focusPath = focus.path;
|
|
70
|
-
let holder = holderPath(focusPath);
|
|
71
|
-
if (!isTextHolder(holder)) {
|
|
72
|
-
holder = null;
|
|
73
|
-
for (const i of [focus.offset - 1, focus.offset]) {
|
|
74
|
-
if (i < 0)
|
|
75
|
-
continue;
|
|
76
|
-
const p = [...focus.path, i];
|
|
77
|
-
const h = holderPath(p);
|
|
78
|
-
if (isTextHolder(h)) {
|
|
79
|
-
holder = h;
|
|
80
|
-
focusPath = p;
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
if (!holder)
|
|
86
|
-
return;
|
|
87
|
-
const domText = holder.textContent ?? "";
|
|
88
|
-
const docText = docTextAt({ path: focusPath, offset: focus.offset });
|
|
145
|
+
absorbDomText({ editor, el, dirtyPaths }, focus, (focusPath, docText) =>
|
|
89
146
|
// 조합 리프의 doc이 시작 스냅샷과 다르면 대기 창에 외부(원격·
|
|
90
147
|
// 플러그인) 편집이 들어온 것 — DOM(스냅샷+커밋 텍스트) 기준 diff가
|
|
91
148
|
// 그 편집을 지우므로 흡수를 건너뛴다. 커밋은 유실되지만 문서는
|
|
92
149
|
// 수렴 상태를 유지한다
|
|
93
|
-
|
|
150
|
+
!(compStart &&
|
|
94
151
|
compStartText !== null &&
|
|
95
152
|
pathEq(focusPath, compStart.path) &&
|
|
96
|
-
docText !== compStartText)
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
if (domText === docText)
|
|
100
|
-
return;
|
|
101
|
-
let lo = 0;
|
|
102
|
-
const max = Math.min(domText.length, docText.length);
|
|
103
|
-
while (lo < max && domText[lo] === docText[lo])
|
|
104
|
-
lo++;
|
|
105
|
-
let hiDom = domText.length;
|
|
106
|
-
let hiDoc = docText.length;
|
|
107
|
-
while (hiDom > lo &&
|
|
108
|
-
hiDoc > lo &&
|
|
109
|
-
domText[hiDom - 1] === docText[hiDoc - 1]) {
|
|
110
|
-
hiDom--;
|
|
111
|
-
hiDoc--;
|
|
112
|
-
}
|
|
113
|
-
const tr = editor.state.tr();
|
|
114
|
-
if (hiDoc > lo) {
|
|
115
|
-
tr.delete({
|
|
116
|
-
anchor: point(focusPath, lo),
|
|
117
|
-
focus: point(focusPath, hiDoc),
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
const inserted = domText.slice(lo, hiDom);
|
|
121
|
-
if (inserted)
|
|
122
|
-
tr.insertText(inserted, point(focusPath, lo));
|
|
123
|
-
if (!tr.docChanged)
|
|
124
|
-
return;
|
|
125
|
-
tr.setMeta("history.group", "type").setMeta("ime", true);
|
|
126
|
-
// 브라우저가 이 블록의 DOM을 직접 바꿨다 — 리렌더 시 프레임워크
|
|
127
|
-
// 리컨실이 깨지지 않게 블록 리마운트 대상으로 표시한다
|
|
128
|
-
const dk = topBlockKey(focus) ?? topBlockKey(compStart);
|
|
129
|
-
if (dk != null)
|
|
130
|
-
dirtyPaths.add(dk);
|
|
131
|
-
editor.dispatch(tr);
|
|
153
|
+
docText !== compStartText));
|
|
132
154
|
};
|
|
133
155
|
/**
|
|
134
156
|
* 대기 중인 흡수를 즉시 실행 — 커밋 직후의 구조 입력(Enter 등)이
|
|
@@ -145,6 +167,9 @@ export function createImeSession(host) {
|
|
|
145
167
|
absorbComposition();
|
|
146
168
|
compStart = null;
|
|
147
169
|
compStartText = null;
|
|
170
|
+
// 조합 창이 닫혔다 — 흡수가 tr을 만들지 않아도 호출된다.
|
|
171
|
+
// 어댑터가 조합 중 미뤄둔 DOM 쓰기(dirty 리마운트·재구축)를 여기서 커밋한다
|
|
172
|
+
onIdle?.();
|
|
148
173
|
};
|
|
149
174
|
return {
|
|
150
175
|
get active() {
|
|
@@ -164,7 +189,6 @@ export function createImeSession(host) {
|
|
|
164
189
|
compTimer = null;
|
|
165
190
|
}
|
|
166
191
|
pendingAbsorb = false;
|
|
167
|
-
composing = true;
|
|
168
192
|
const sel = readDomSel();
|
|
169
193
|
compStart = sel?.focus ?? null;
|
|
170
194
|
// 다른 리프에 걸친 선택 위에서 시작되는 조합: 브라우저가 선택
|
|
@@ -197,6 +221,11 @@ export function createImeSession(host) {
|
|
|
197
221
|
// 들어왔는지 absorb이 판별하는 기준 (정리 tr 이후에 잡는다)
|
|
198
222
|
compStartText = compStart ? docTextAt(compStart) : null;
|
|
199
223
|
compEndData = null;
|
|
224
|
+
// 세션 확립은 정리 디스패치 "뒤"에 한다 — 위 선삭제 tr의 렌더가
|
|
225
|
+
// 막 표시된 더티 블록을 리마운트하는 것이 설계된 복구 경로다
|
|
226
|
+
// (composing이 먼저 서면 어댑터의 리마운트 미루기 가드가 그
|
|
227
|
+
// 복구까지 지연시킨다). 이 시점부터 브라우저가 DOM을 소유한다
|
|
228
|
+
composing = true;
|
|
200
229
|
},
|
|
201
230
|
end(e) {
|
|
202
231
|
// start 없는 compositionend(일부 IME의 취소·포커스 해제 경로)나
|
package/dist/view/ime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ime.js","sourceRoot":"","sources":["../../src/view/ime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE7E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"ime.js","sourceRoot":"","sources":["../../src/view/ime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-selection.d.ts","sourceRoot":"","sources":["../../src/view/input-selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD,OAAO,KAAK,EAAE,KAAK,EAAiB,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,WAAW,CAAC;IAChB,iDAAiD;IACjD,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,6BAA6B;IAC7B,UAAU,EAAE,MAAM;QAAE,MAAM,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI,CAAC;IACzD,kDAAkD;IAClD,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,aAAa,IAAI,IAAI,CAAC;IACtB,yCAAyC;IACzC,gBAAgB,IAAI,IAAI,CAAC;IACzB,4BAA4B;IAC5B,gBAAgB,IAAI,IAAI,CAAC;IACzB,iBAAiB,IAAI,IAAI,CAAC;IAC1B,SAAS,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,UAAU,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;CACjC;AAED,gCAAgC;AAChC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"input-selection.d.ts","sourceRoot":"","sources":["../../src/view/input-selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD,OAAO,KAAK,EAAE,KAAK,EAAiB,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,WAAW,CAAC;IAChB,iDAAiD;IACjD,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,6BAA6B;IAC7B,UAAU,EAAE,MAAM;QAAE,MAAM,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI,CAAC;IACzD,kDAAkD;IAClD,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,aAAa,IAAI,IAAI,CAAC;IACtB,yCAAyC;IACzC,gBAAgB,IAAI,IAAI,CAAC;IACzB,4BAA4B;IAC5B,gBAAgB,IAAI,IAAI,CAAC;IACzB,iBAAiB,IAAI,IAAI,CAAC;IAC1B,SAAS,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,UAAU,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;CACjC;AAED,gCAAgC;AAChC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAwO1E"}
|
|
@@ -53,8 +53,11 @@ export function createSelectionSync(deps) {
|
|
|
53
53
|
// 텍스트를 품고 있다 — 지연된(비동기) 복원이 이 창에 떨어지면
|
|
54
54
|
// 캐럿을 되돌려 흡수가 목표 홀더를 놓친다. 흡수 뒤의 디스패치가
|
|
55
55
|
// 다시 복원을 트리거하므로 이 창만 건너뛴다 — 조합 중(composing)엔
|
|
56
|
-
//
|
|
57
|
-
//
|
|
56
|
+
// 복원이 필요하다: 어댑터의 선삭제 블록 리마운트는 비동기라
|
|
57
|
+
// composing이 선 뒤에 커밋되고, 리마운트가 분리시킨 DOM 캐럿을
|
|
58
|
+
// 새 DOM으로 재앵커하는 게 이 복원의 역할이다 (없으면 조합
|
|
59
|
+
// 세션이 유실돼 커밋이 통째로 날아간다 — 크로스-블록 조합
|
|
60
|
+
// e2e 회귀로 확인)
|
|
58
61
|
if (ime.absorbing)
|
|
59
62
|
return;
|
|
60
63
|
const sel = editor.state.selection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-selection.js","sourceRoot":"","sources":["../../src/view/input-selection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAuCvD,gCAAgC;AAChC,MAAM,UAAU,mBAAmB,CAAC,IAAuB;IACzD,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAEzD;;;;;OAKG;IACH,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAClC,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;QACD,gDAAgD;QAChD,2CAA2C;QAC3C,EAAE,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAChD,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAClC,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;QACnC,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxB,mDAAmD;YACnD,6CAA6C;YAC7C,MAAM,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,SAAS,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACvE,CAAC,GAAG,EAAE,OAAO,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACvE,CAAC;IACH,CAAC,CAAC;IAEF;;;;;OAKG;IACH,IAAI,WAAW,GAA2C,IAAI,CAAC;IAE/D,MAAM,QAAQ,GAAG,CAAC,MAAa,EAAE,KAAY,EAAE,EAAE;QAC/C,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACrC,WAAW,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAClC,CAAC,CAAC;IAEF,qCAAqC;IACrC,uBAAuB;IACvB,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,wCAAwC;QACxC,kCAAkC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;QACrD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;gBACjD,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,2CAA2C;QAC3C,sCAAsC;QACtC,sCAAsC;QACtC,6CAA6C;QAC7C,
|
|
1
|
+
{"version":3,"file":"input-selection.js","sourceRoot":"","sources":["../../src/view/input-selection.ts"],"names":[],"mappings":"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"}
|
package/dist/view/input.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Editor } from "../editor/editor.js";
|
|
2
|
+
import type { ImeSession } from "./ime.js";
|
|
2
3
|
/**
|
|
3
4
|
* contenteditable 바인딩 — DOM 이벤트 → 모델 트랜잭션 중계의
|
|
4
5
|
* 오케스트레이터. 각 어댑터는 이 함수만 호출한다 (PM domchange +
|
|
@@ -34,6 +35,19 @@ export interface EditorInputBinding {
|
|
|
34
35
|
* 경로 — 어댑터가 리렌더 전에 drain해 해당 블록을 리마운트한다
|
|
35
36
|
*/
|
|
36
37
|
readonly dirtyPaths: Set<string>;
|
|
38
|
+
/**
|
|
39
|
+
* IME 세션 — active(조합 중)/absorbing(흡수 대기) 동안 브라우저가
|
|
40
|
+
* DOM을 소유한다. 어댑터는 이 창의 파괴적 DOM 쓰기(dirty 리마운트·
|
|
41
|
+
* 전체 재구축)를 미뤄야 한다 — 지금 갈면 살아있는 조합 세션과
|
|
42
|
+
* 미흡수 커밋 텍스트가 파괴된다
|
|
43
|
+
*/
|
|
44
|
+
readonly ime: ImeSession;
|
|
45
|
+
/**
|
|
46
|
+
* 흡수 flush 직후에 한 번 호출할 콜백 등록 — 조합 창에 미뤄둔
|
|
47
|
+
* DOM 쓰기의 커밋 지점. 흡수가 트랜잭션을 만들지 않아도 호출된다.
|
|
48
|
+
* 등록 해제 함수를 돌려준다
|
|
49
|
+
*/
|
|
50
|
+
afterComposition(cb: () => void): () => void;
|
|
37
51
|
}
|
|
38
52
|
export declare function bindEditorInput(editor: Editor, el: HTMLElement): EditorInputBinding;
|
|
39
53
|
export { DirtyKeyMap } from "./dirty-keys.js";
|
package/dist/view/input.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/view/input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/view/input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAQ3C;;;;;;;;;;;;;;;;;;GAkBG;AAEH,kCAAkC;AAClC,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,MAAM,IAAI,IAAI,CAAC;IACf;;;OAGG;IACH,gBAAgB,IAAI,IAAI,CAAC;IACzB,iDAAiD;IACjD,gBAAgB,IAAI,IAAI,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC9C;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,WAAW,GACd,kBAAkB,CA8HpB;AAGD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/view/input.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { domSelection } from "./dom.js";
|
|
2
|
-
import { createImeSession } from "./ime.js";
|
|
2
|
+
import { absorbDomText, createImeSession } from "./ime.js";
|
|
3
|
+
import { topBlockKey } from "./caret.js";
|
|
3
4
|
import { createSelectionSync } from "./input-selection.js";
|
|
4
5
|
import { createBeforeInputHandler } from "./input-beforeinput.js";
|
|
5
6
|
import { createKeydownHandler } from "./input-keys.js";
|
|
@@ -7,11 +8,32 @@ import { createPointerHandlers } from "./input-pointer.js";
|
|
|
7
8
|
export function bindEditorInput(editor, el) {
|
|
8
9
|
const dirtyPaths = new Set();
|
|
9
10
|
const readDomSel = () => domSelection(el);
|
|
11
|
+
/** 흡수 flush 직후 콜백 — 조합 창에 미뤄둔 DOM 쓰기를 커밋하는 지점 */
|
|
12
|
+
const idleCbs = new Set();
|
|
13
|
+
// selSync는 ime가 먼저 만들어져야 하므로 늦은 바인딩 — onIdle은
|
|
14
|
+
// 바인딩 완료 뒤의 조합 flush에서만 발화해 null 경로는 도달하지 않는다
|
|
15
|
+
let selSync = null;
|
|
10
16
|
/** IME 세션 — 한 바인딩당 하나. 상태 기계는 ime.ts에 갇혀 있다 */
|
|
11
|
-
const ime = createImeSession({
|
|
17
|
+
const ime = createImeSession({
|
|
18
|
+
editor,
|
|
19
|
+
el,
|
|
20
|
+
dirtyPaths,
|
|
21
|
+
readDomSel,
|
|
22
|
+
onIdle: () => {
|
|
23
|
+
for (const cb of idleCbs)
|
|
24
|
+
cb();
|
|
25
|
+
// 조합 창에 스킵된 셀렉션 복원을 재생한다 — restoreSelection은
|
|
26
|
+
// 조합 중 no-op이라, 흡수가 tr을 만들지 않은(통지 없는) 경로나
|
|
27
|
+
// 셀렉션만 실은 외부 tr에서는 이것이 캐럿을 doc으로 수렴시키는
|
|
28
|
+
// 유일한 복원 지점이다. 어댑터의 post-commit 복원은 이미 DOM과
|
|
29
|
+
// 일치하면 no-op이라 이중 호출 비용이 없다
|
|
30
|
+
selSync?.restoreSelection();
|
|
31
|
+
},
|
|
32
|
+
});
|
|
12
33
|
/** 셀렉션·포커스·오버레이 동기화 — 내부에 lastApplied/pendingSel/
|
|
13
34
|
* focused 상태를 캡슐화한다 */
|
|
14
35
|
const sel = createSelectionSync({ editor, el, dirtyPaths, readDomSel, ime });
|
|
36
|
+
selSync = sel;
|
|
15
37
|
/** DOM 이벤트 핸들러 묶음 — 각 모듈의 팩토리가 의존성을 주입받는다 */
|
|
16
38
|
const onBeforeInput = createBeforeInputHandler({
|
|
17
39
|
editor,
|
|
@@ -30,7 +52,32 @@ export function bindEditorInput(editor, el) {
|
|
|
30
52
|
el,
|
|
31
53
|
ime,
|
|
32
54
|
});
|
|
55
|
+
/**
|
|
56
|
+
* 네이티브 DOM 변경 폴백 — beforeinput을 preventDefault한 편집은
|
|
57
|
+
* DOM이 안 바뀌어 input을 발생시키지 않으므로, 여기 도달한 input은
|
|
58
|
+
* 우리가 모르는 DOM 변경이다 (iOS 자동고침·받아쓰기처럼 beforeinput이
|
|
59
|
+
* 생략되는 경로). 그대로 두면 doc↔DOM이 영구히 어긋나므로 캐럿
|
|
60
|
+
* 홀더의 텍스트 차이를 트랜잭션으로 흡수하고, 텍스트 diff로 못 잡는
|
|
61
|
+
* 구조 변경은 포커스 블록을 더티 표시해 다음 렌더가 리마운트로
|
|
62
|
+
* 복구하게 한다 (PM DOMObserver의 축소판)
|
|
63
|
+
*/
|
|
64
|
+
const onInput = (e) => {
|
|
65
|
+
// 조합 경로는 흡수가 담당한다 — 조합 중/흡수 대기 창의 input과
|
|
66
|
+
// isComposing input은 건드리지 않는다
|
|
67
|
+
if (ime.active || e.isComposing || !editor.editable) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const domSel = readDomSel();
|
|
71
|
+
if (!domSel)
|
|
72
|
+
return;
|
|
73
|
+
if (!absorbDomText({ editor, el, dirtyPaths }, domSel.focus)) {
|
|
74
|
+
const k = topBlockKey(domSel.focus) ?? topBlockKey(domSel.anchor);
|
|
75
|
+
if (k != null)
|
|
76
|
+
dirtyPaths.add(k);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
33
79
|
el.addEventListener("beforeinput", onBeforeInput);
|
|
80
|
+
el.addEventListener("input", onInput);
|
|
34
81
|
el.addEventListener("keydown", onKeydown);
|
|
35
82
|
el.addEventListener("mousedown", onMouseDown);
|
|
36
83
|
el.addEventListener("paste", onPaste);
|
|
@@ -47,12 +94,19 @@ export function bindEditorInput(editor, el) {
|
|
|
47
94
|
sel.paintOverlays();
|
|
48
95
|
return {
|
|
49
96
|
dirtyPaths,
|
|
97
|
+
ime,
|
|
98
|
+
afterComposition(cb) {
|
|
99
|
+
idleCbs.add(cb);
|
|
100
|
+
return () => idleCbs.delete(cb);
|
|
101
|
+
},
|
|
50
102
|
unbind() {
|
|
51
103
|
ime.destroy();
|
|
104
|
+
idleCbs.clear();
|
|
52
105
|
// 기능 오버레이 정리 — 거터/크롬 바 DOM + ResizeObserver 해제
|
|
53
106
|
for (const h of editor.inputHooks)
|
|
54
107
|
h.destroyOverlay?.(el);
|
|
55
108
|
el.removeEventListener("beforeinput", onBeforeInput);
|
|
109
|
+
el.removeEventListener("input", onInput);
|
|
56
110
|
el.removeEventListener("keydown", onKeydown);
|
|
57
111
|
el.removeEventListener("mousedown", onMouseDown);
|
|
58
112
|
el.removeEventListener("paste", onPaste);
|
package/dist/view/input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/view/input.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/view/input.ts"],"names":[],"mappings":"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"}
|
package/dist/view/mount.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Editor, EditorOptions } from "../editor/editor.js";
|
|
2
2
|
import type { NodeViewProps } from "./render.js";
|
|
3
|
+
import type { EditorInputBinding } from "./input.js";
|
|
3
4
|
/**
|
|
4
5
|
* DOM 전용 에디터 렌더러 (vanilla) — 어댑터들과 같은 DOM 계약:
|
|
5
6
|
* .me-root > .me-editor[contenteditable][data-me-path=""]
|
|
@@ -20,6 +21,12 @@ export interface MountedEditor {
|
|
|
20
21
|
editor: Editor;
|
|
21
22
|
/** 호스트 안에 생성된 루트 요소 */
|
|
22
23
|
rootEl: HTMLElement;
|
|
24
|
+
/**
|
|
25
|
+
* 입력 바인딩 — bindEditorInput과 같은 공개 계약. 프레임워크
|
|
26
|
+
* 어댑터가 직접 쓰는 것과 같은 수단(셀렉션 동기화, dirtyPaths)에
|
|
27
|
+
* 접근할 수 있다. dirtyPaths 소비는 mountEditor의 render가 한다.
|
|
28
|
+
*/
|
|
29
|
+
binding: EditorInputBinding;
|
|
23
30
|
destroy(): void;
|
|
24
31
|
}
|
|
25
32
|
/**
|
package/dist/view/mount.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../../src/view/mount.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGjE,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../../src/view/mount.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGjE,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AAG7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD;;;;;;GAMG;AAEH,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,WAAW,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,MAAM,EAAE,WAAW,CAAC;IACpB;;;;OAIG;IACH,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,IAAI,IAAI,CAAC;CACjB;AA6DD;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,WAAW,EACjB,OAAO,GAAE,kBAAuB,GAC/B,aAAa,CAgLf"}
|