@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/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
- // 텍스트 홀더를 찾는다 — focus가 컨테이너 경계({[i],k})면 홀더가
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
- if (compStart &&
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의 취소·포커스 해제 경로)나
@@ -1 +1 @@
1
- {"version":3,"file":"ime.js","sourceRoot":"","sources":["../../src/view/ime.ts"],"names":[],"mappings":"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"}
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;AA4CrC;;;;;;GAMG;AACH,SAAS,iBAAiB,CACxB,EAAe,EACf,KAAY;IAEZ,MAAM,UAAU,GAAG,CAAC,CAAoB,EAAE,EAAE,CAC1C,EAAE,CAAC,aAAa,CAAc,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,CAAC,CAAqB,EAAoB,EAAE,CAC/D,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC;IAC5C,IAAI,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,IAAI,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC;gBAAE,SAAS;YACpB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;YACvB,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpB,MAAM,GAAG,CAAC,CAAC;gBACX,IAAI,GAAG,CAAC,CAAC;gBACT,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAgB,EAChB,KAAY,EACZ,KAA6D;IAE7D,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IACxC,MAAM,CAAC,GAAG,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrB,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACnD,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,OAAO,EAAE,GAAG,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,EAAE,CAAC;QAAE,EAAE,EAAE,CAAC;IACrD,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3B,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3B,OACE,KAAK,GAAG,EAAE;QACV,KAAK,GAAG,EAAE;QACV,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,EACzC,CAAC;QACD,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;IACV,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;IAC7B,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QACf,EAAE,CAAC,MAAM,CAAC;YACR,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACzB,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC1C,IAAI,QAAQ;QAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IACjC,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACzD,wCAAwC;IACxC,gCAAgC;IAChC,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/D,IAAI,EAAE,IAAI,IAAI;QAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACpB,OAAO,IAAI,CAAC;AACd,CAAC;AAuCD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC5C,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAE5D,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,2CAA2C;IAC3C,IAAI,SAAS,GAAiB,IAAI,CAAC;IACnC,yCAAyC;IACzC,6BAA6B;IAC7B,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,gCAAgC;IAChC,IAAI,SAAS,GAAyC,IAAI,CAAC;IAC3D,8CAA8C;IAC9C,+CAA+C;IAC/C,oCAAoC;IACpC,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,sDAAsD;IACtD,kDAAkD;IAClD,sCAAsC;IACtC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,gDAAgD;IAChD,wCAAwC;IACxC,mCAAmC;IACnC,oCAAoC;IACpC,IAAI,WAAW,GAAkB,IAAI,CAAC;IAEtC,2CAA2C;IAC3C,MAAM,SAAS,GAAG,CAAC,CAAQ,EAAU,EAAE;QACrC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,CAAC,CAAC;IAEF;;;;;;OAMG;IACH,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,MAAM,IAAI,GAAG,UAAU,EAAE,EAAE,KAAK,CAAC;QACjC,IAAI,KAAK,GAAG,IAAI,IAAI,SAAS,CAAC;QAC9B,0CAA0C;QAC1C,wCAAwC;QACxC,6CAA6C;QAC7C,qCAAqC;QACrC,IAAI,SAAS,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5D,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM;gBACvC,CAAC,CAAC,EAAE,CAAC,aAAa,CACd,IAAI,SAAS,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAC/C;gBACH,CAAC,CAAC,IAAI,CAAC;YACT,IAAI,CAAC,WAAW,EAAE,WAAW,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9D,KAAK,GAAG,SAAS,CAAC;YACpB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC9C,aAAa,CACX,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,EAC1B,KAAK,EACL,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE;QACrB,uCAAuC;QACvC,6CAA6C;QAC7C,qCAAqC;QACrC,cAAc;QACd,CAAC,CACC,SAAS;YACT,aAAa,KAAK,IAAI;YACtB,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC;YACjC,OAAO,KAAK,aAAa,CAC1B,CACJ,CAAC;IACJ,CAAC,CAAC;IAEF;;;OAGG;IACH,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,SAAS,GAAG,KAAK,CAAC;QAClB,aAAa,GAAG,KAAK,CAAC;QACtB,IAAI,MAAM,CAAC,QAAQ;YAAE,iBAAiB,EAAE,CAAC;QACzC,SAAS,GAAG,IAAI,CAAC;QACjB,aAAa,GAAG,IAAI,CAAC;QACrB,oCAAoC;QACpC,iDAAiD;QACjD,MAAM,EAAE,EAAE,CAAC;IACb,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,MAAM;YACR,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,SAAS;YACX,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,KAAK;YACH,uCAAuC;YACvC,iDAAiD;YACjD,+BAA+B;YAC/B,yCAAyC;YACzC,2CAA2C;YAC3C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACvB,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;YACD,aAAa,GAAG,KAAK,CAAC;YACtB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;YACzB,SAAS,GAAG,GAAG,EAAE,KAAK,IAAI,IAAI,CAAC;YAC/B,qCAAqC;YACrC,sCAAsC;YACtC,sCAAsC;YACtC,sCAAsC;YACtC,qCAAqC;YACrC,IAAI,GAAG,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvE,wCAAwC;gBACxC,0CAA0C;gBAC1C,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,kBAAkB,EAAE,EAAE,CAAC;gBACxD,mDAAmD;gBACnD,iBAAiB;gBACjB,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;gBACxC,MAAM,CAAC,QAAQ,CACb,MAAM,CAAC,KAAK;qBACT,EAAE,EAAE;qBACJ,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;qBAChD,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;qBACjC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC;qBAChC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CACxB,CAAC;gBACF,wCAAwC;gBACxC,qBAAqB;gBACrB,KAAK,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBAClE,IAAI,CAAC,IAAI,IAAI;wBAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnC,CAAC;gBACD,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;YACD,uCAAuC;YACvC,wCAAwC;YACxC,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACxD,WAAW,GAAG,IAAI,CAAC;YACnB,yCAAyC;YACzC,oCAAoC;YACpC,wCAAwC;YACxC,sCAAsC;YACtC,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QAED,GAAG,CAAC,CAAoB;YACtB,iDAAiD;YACjD,wCAAwC;YACxC,uCAAuC;YACvC,WAAW;YACX,IAAI,CAAC,SAAS,IAAI,aAAa;gBAAE,OAAO;YACxC,0CAA0C;YAC1C,uDAAuD;YACvD,4CAA4C;YAC5C,4CAA4C;YAC5C,aAAa,GAAG,IAAI,CAAC;YACrB,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAChC,WAAW,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC;YAC9B,SAAS,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,CAAC,EAAE,MAAM;YACZ,IAAI,CAAC,SAAS;gBAAE,OAAO,SAAS,CAAC;YACjC,4CAA4C;YAC5C,2CAA2C;YAC3C,8BAA8B;YAC9B,MAAM,UAAU,GACd,CAAC,CAAC,SAAS,KAAK,iBAAiB;gBACjC,CAAC,CAAC,SAAS,KAAK,iBAAiB;gBACjC,CAAC,CAAC,SAAS,KAAK,iBAAiB;gBACjC,CAAC,CAAC,SAAS,KAAK,gBAAgB;gBAChC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,aAAa,IAAI,UAAU,EAAE,CAAC;gBAChC,gBAAgB,EAAE,CAAC;gBACnB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,4CAA4C;YAC5C,wCAAwC;YACxC,4CAA4C;YAC5C,yCAAyC;YACzC,mCAAmC;YACnC,IACE,CAAC,CAAC,CAAC,SAAS,KAAK,YAAY;gBAC3B,CAAC,CAAC,SAAS,KAAK,uBAAuB,CAAC;gBAC1C,CAAC,CAAC,IAAI;gBACN,CAAC,WAAW,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;gBAC/C,MAAM;gBACN,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EACrC,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,UAAU,CAAC,IAAI,EAAE,MAAM;YACrB,wCAAwC;YACxC,kCAAkC;YAClC,sCAAsC;YACtC,+BAA+B;YAC/B,OAAO,CACL,WAAW,GAAG,CAAC;gBACf,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,GAAG,GAAG;gBACrC,CAAC,WAAW,IAAI,IAAI,IAAI,IAAI,KAAK,WAAW,CAAC;gBAC7C,MAAM,IAAI,IAAI;gBACd,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CACpC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,SAAS,KAAK,IAAI;gBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QAClD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -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,CAqO1E"}
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
- // 우리 트랜잭션(크로스-블록 선택 선삭제 등)이 DOM을 바꾸므로
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":"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"}
1
+ {"version":3,"file":"input-selection.js","sourceRoot":"","sources":["../../src/view/input-selection.ts"],"names":[],"mappings":"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"}
@@ -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";
@@ -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;AASlD;;;;;;;;;;;;;;;;;;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;CAClC;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,WAAW,GACd,kBAAkB,CAyEpB;AAGD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,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"}
@@ -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({ editor, el, dirtyPaths, readDomSel });
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);
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/view/input.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/view/input.ts"],"names":[],"mappings":"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"}
@@ -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
  /**
@@ -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;AAI7D;;;;;;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,OAAO,IAAI,IAAI,CAAC;CACjB;AA+CD;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,WAAW,EACjB,OAAO,GAAE,kBAAuB,GAC/B,aAAa,CAmHf"}
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"}