@moda-editor/core 0.3.1 → 0.3.2

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.
Files changed (131) hide show
  1. package/dist/commands.d.ts.map +1 -1
  2. package/dist/commands.js +14 -1
  3. package/dist/commands.js.map +1 -1
  4. package/dist/editor/editor.d.ts.map +1 -1
  5. package/dist/editor/editor.js +3 -1
  6. package/dist/editor/editor.js.map +1 -1
  7. package/dist/features/code-block.d.ts.map +1 -1
  8. package/dist/features/code-block.js +10 -2
  9. package/dist/features/code-block.js.map +1 -1
  10. package/dist/features/code-edit.d.ts.map +1 -1
  11. package/dist/features/code-edit.js.map +1 -1
  12. package/dist/features/code-format.js.map +1 -1
  13. package/dist/features/hard-break.d.ts.map +1 -1
  14. package/dist/features/hard-break.js +2 -0
  15. package/dist/features/hard-break.js.map +1 -1
  16. package/dist/features/heading.d.ts.map +1 -1
  17. package/dist/features/heading.js +3 -1
  18. package/dist/features/heading.js.map +1 -1
  19. package/dist/features/horizontal-rule.d.ts.map +1 -1
  20. package/dist/features/horizontal-rule.js.map +1 -1
  21. package/dist/features/image.d.ts.map +1 -1
  22. package/dist/features/image.js.map +1 -1
  23. package/dist/features/link.d.ts.map +1 -1
  24. package/dist/features/link.js.map +1 -1
  25. package/dist/features/marks.d.ts.map +1 -1
  26. package/dist/features/marks.js +1 -1
  27. package/dist/features/marks.js.map +1 -1
  28. package/dist/features/search.d.ts.map +1 -1
  29. package/dist/features/search.js +1 -7
  30. package/dist/features/search.js.map +1 -1
  31. package/dist/features/table.d.ts.map +1 -1
  32. package/dist/features/table.js +30 -7
  33. package/dist/features/table.js.map +1 -1
  34. package/dist/history.d.ts.map +1 -1
  35. package/dist/history.js.map +1 -1
  36. package/dist/index.d.ts +6 -5
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +3 -3
  39. package/dist/index.js.map +1 -1
  40. package/dist/model/node.d.ts.map +1 -1
  41. package/dist/model/node.js +1 -2
  42. package/dist/model/node.js.map +1 -1
  43. package/dist/model/schema.d.ts +7 -0
  44. package/dist/model/schema.d.ts.map +1 -1
  45. package/dist/model/schema.js.map +1 -1
  46. package/dist/model/traverse.d.ts +10 -3
  47. package/dist/model/traverse.d.ts.map +1 -1
  48. package/dist/model/traverse.js +13 -5
  49. package/dist/model/traverse.js.map +1 -1
  50. package/dist/parse/html.d.ts.map +1 -1
  51. package/dist/parse/html.js +28 -1
  52. package/dist/parse/html.js.map +1 -1
  53. package/dist/presets/markdown-parse.d.ts.map +1 -1
  54. package/dist/presets/markdown-parse.js +9 -0
  55. package/dist/presets/markdown-parse.js.map +1 -1
  56. package/dist/presets/markdown.d.ts.map +1 -1
  57. package/dist/presets/markdown.js +7 -6
  58. package/dist/presets/markdown.js.map +1 -1
  59. package/dist/presets/starter.d.ts.map +1 -1
  60. package/dist/presets/starter.js.map +1 -1
  61. package/dist/state/apply.d.ts.map +1 -1
  62. package/dist/state/apply.js +1 -3
  63. package/dist/state/apply.js.map +1 -1
  64. package/dist/state/input-rules.d.ts.map +1 -1
  65. package/dist/state/input-rules.js +4 -0
  66. package/dist/state/input-rules.js.map +1 -1
  67. package/dist/state/insert-ops.d.ts.map +1 -1
  68. package/dist/state/insert-ops.js +9 -2
  69. package/dist/state/insert-ops.js.map +1 -1
  70. package/dist/state/list-ops.d.ts.map +1 -1
  71. package/dist/state/list-ops.js.map +1 -1
  72. package/dist/state/navigate.d.ts.map +1 -1
  73. package/dist/state/navigate.js +14 -4
  74. package/dist/state/navigate.js.map +1 -1
  75. package/dist/state/resolve-insert.d.ts.map +1 -1
  76. package/dist/state/resolve-insert.js +12 -1
  77. package/dist/state/resolve-insert.js.map +1 -1
  78. package/dist/styles.css +27 -12
  79. package/dist/theme.d.ts.map +1 -1
  80. package/dist/theme.js.map +1 -1
  81. package/dist/view/decoration.d.ts.map +1 -1
  82. package/dist/view/decoration.js +60 -44
  83. package/dist/view/decoration.js.map +1 -1
  84. package/dist/view/highlight-registry.d.ts.map +1 -1
  85. package/dist/view/highlight-registry.js.map +1 -1
  86. package/dist/view/ime.d.ts +1 -1
  87. package/dist/view/ime.d.ts.map +1 -1
  88. package/dist/view/ime.js +50 -11
  89. package/dist/view/ime.js.map +1 -1
  90. package/dist/view/input-beforeinput.d.ts +25 -0
  91. package/dist/view/input-beforeinput.d.ts.map +1 -0
  92. package/dist/view/input-beforeinput.js +330 -0
  93. package/dist/view/input-beforeinput.js.map +1 -0
  94. package/dist/view/input-keys.d.ts +25 -0
  95. package/dist/view/input-keys.d.ts.map +1 -0
  96. package/dist/view/input-keys.js +69 -0
  97. package/dist/view/input-keys.js.map +1 -0
  98. package/dist/view/input-pointer.d.ts +24 -0
  99. package/dist/view/input-pointer.d.ts.map +1 -0
  100. package/dist/view/input-pointer.js +96 -0
  101. package/dist/view/input-pointer.js.map +1 -0
  102. package/dist/view/input-selection.d.ts +41 -0
  103. package/dist/view/input-selection.d.ts.map +1 -0
  104. package/dist/view/input-selection.js +216 -0
  105. package/dist/view/input-selection.js.map +1 -0
  106. package/dist/view/input.d.ts +25 -30
  107. package/dist/view/input.d.ts.map +1 -1
  108. package/dist/view/input.js +36 -685
  109. package/dist/view/input.js.map +1 -1
  110. package/dist/view/mount.d.ts.map +1 -1
  111. package/dist/view/mount.js +20 -7
  112. package/dist/view/mount.js.map +1 -1
  113. package/dist/view/node-selection.d.ts.map +1 -1
  114. package/dist/view/node-selection.js +1 -3
  115. package/dist/view/node-selection.js.map +1 -1
  116. package/dist/view/render.d.ts.map +1 -1
  117. package/dist/view/render.js +10 -3
  118. package/dist/view/render.js.map +1 -1
  119. package/dist/widget/core.d.ts +37 -0
  120. package/dist/widget/core.d.ts.map +1 -0
  121. package/dist/widget/core.js +117 -0
  122. package/dist/widget/core.js.map +1 -0
  123. package/dist/widget/mount.d.ts +24 -0
  124. package/dist/widget/mount.d.ts.map +1 -0
  125. package/dist/widget/mount.js +45 -0
  126. package/dist/widget/mount.js.map +1 -0
  127. package/dist/widget/types.d.ts +44 -0
  128. package/dist/widget/types.d.ts.map +1 -0
  129. package/dist/widget/types.js +8 -0
  130. package/dist/widget/types.js.map +1 -0
  131. package/package.json +2 -6
@@ -44,31 +44,13 @@ function mergeAttrs(base, decos) {
44
44
  return out;
45
45
  }
46
46
  /**
47
- * 텍스트 노드의 렌더 결과에서 `text`를 담은 최심층 RenderNode를 찾는다 —
48
- * 마크 래퍼(children=[단일])를 내려간다. 없으면(bogus br 등) null.
47
+ * 텍스트 리프(RenderNode.text 보유) 하나를 리프 상대 데코 구간으로
48
+ * 분할한다. 구간 경계를 모아 세그먼트를 만들고 데코가 덮는
49
+ * 세그먼트만 span.me-deco로 감싼다 — 리프 안쪽 분할이라 바깥의
50
+ * 자식 수·data-me-path 매핑은 불변이다.
49
51
  */
50
- function textHolder(rn) {
51
- let cur = rn;
52
- for (;;) {
53
- if (cur.text != null)
54
- return cur;
55
- if (cur.children?.length === 1) {
56
- cur = cur.children[0];
57
- continue;
58
- }
59
- return null;
60
- }
61
- }
62
- /**
63
- * 텍스트 노드 하나에 걸린 데코로 RenderNode를 분할한다.
64
- * 구간 경계를 모아 세그먼트를 만들고, 데코가 덮는 세그먼트만
65
- * span.me-deco로 감싼다 — 홀더 안쪽이라 자식 수·매핑 불변.
66
- */
67
- function decoSplit(rn, decos) {
68
- const holder = textHolder(rn);
69
- if (!holder)
70
- return rn;
71
- const text = holder.text ?? "";
52
+ function splitTextLeaf(leaf, decos) {
53
+ const text = leaf.text ?? "";
72
54
  const len = text.length;
73
55
  // 경계점 — 0/len과 겹치는 데코의 클립된 끝
74
56
  const cuts = new Set([0, len]);
@@ -85,31 +67,65 @@ function decoSplit(rn, decos) {
85
67
  const e = pts[i + 1];
86
68
  const segText = text.slice(s, e);
87
69
  const covering = decos.filter((d) => d.s <= s && d.e >= e);
88
- if (!covering.length) {
89
- children.push({
70
+ children.push(covering.length
71
+ ? {
72
+ tag: "span",
73
+ attrs: mergeAttrs({ class: "me-deco" }, covering.map((d) => d.attrs)),
74
+ text: segText,
75
+ path: [...leaf.path, i],
76
+ source: leaf.source,
77
+ }
78
+ : {
90
79
  tag: "span",
91
80
  text: segText,
92
- path: [...rn.path, i],
93
- source: rn.source,
81
+ path: [...leaf.path, i],
82
+ source: leaf.source,
94
83
  });
95
- continue;
84
+ }
85
+ return { ...leaf, text: undefined, children };
86
+ }
87
+ /**
88
+ * 텍스트 노드 하나의 렌더 결과에 데코를 적용한다.
89
+ *
90
+ * 텍스트 리프를 문서 순서로 순회하며 누적 오프셋을 매긴다 — 렌더
91
+ * 변환(마크 래퍼·코드블록의 .me-cl 줄/.me-tok·.me-ws 토큰 분할)로
92
+ * 한 텍스트 자식이 여러 리프로 쪼개져도 textContent 합은 원문과
93
+ * 같으므로 같은 플랫 오프셋 규약이 성립한다. 데코와 겹치는 리프만
94
+ * 세그먼트로 분할한다. 이전 구현은 "단일 자식 체인 끝의 홀더"만
95
+ * 찾아 토큰화된 홀더의 데코를 통째로 버렸다.
96
+ */
97
+ function decoSplit(rn, decos) {
98
+ // st.base — 순회 중 누적 플랫 오프셋. 형제 배열 순회가 곧 문서 순서다
99
+ const walk = (node, st) => {
100
+ if (node.text != null) {
101
+ const s = st.base;
102
+ const len = node.text.length;
103
+ st.base += len;
104
+ // 이 리프 구간 [s, s+len)과 겹치는 데코를 리프 상대 좌표로 클립
105
+ const local = [];
106
+ for (const d of decos) {
107
+ const ls = Math.max(0, d.s - s);
108
+ const le = Math.min(len, d.e - s);
109
+ if (le > ls)
110
+ local.push({ s: ls, e: le, attrs: d.attrs });
111
+ }
112
+ return local.length ? splitTextLeaf(node, local) : node;
96
113
  }
97
- children.push({
98
- tag: "span",
99
- attrs: mergeAttrs({ class: "me-deco" }, covering.map((d) => d.attrs)),
100
- text: segText,
101
- path: [...rn.path, i],
102
- source: rn.source,
114
+ const kids = node.children;
115
+ if (!kids?.length)
116
+ return node; // bogus br·atom — 오프셋 기여 없음
117
+ let changed = false;
118
+ const next = kids.map((k) => {
119
+ const n = walk(k, st);
120
+ if (n !== k)
121
+ changed = true;
122
+ return n;
103
123
  });
104
- }
105
- // 최심층 홀더를 children으로 교체하며 래퍼 체인을 재구성한다
106
- const rebuild = (node) => node === holder
107
- ? { ...node, text: undefined, children }
108
- : {
109
- ...node,
110
- children: node.children.map((c) => rebuild(c)),
111
- };
112
- return rebuild(rn);
124
+ // 무변경 서브트리는 참조를 유지한다 — 어댑터의 shallow 비교가
125
+ // 데코 무관 구역의 리렌더를 건너뛰게 한다
126
+ return changed ? { ...node, children: next } : node;
127
+ };
128
+ return walk(rn, { base: 0 });
113
129
  }
114
130
  // 문서 순서 비교는 selection.ts의 docOrderCmp를 쓴다 — 컨테이너 경계
115
131
  // 포인트({P,k})를 "자식 k 앞"으로 해석하는 혼합 깊이 비교자
@@ -1 +1 @@
1
- {"version":3,"file":"decoration.js","sourceRoot":"","sources":["../../src/view/decoration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decoration.js","sourceRoot":"","sources":["../../src/view/decoration.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"highlight-registry.d.ts","sourceRoot":"","sources":["../../src/view/highlight-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoDH;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,WAAW,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,KAAK,EAAE,GACvB,IAAI,CAON;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAO1D"}
1
+ {"version":3,"file":"highlight-registry.d.ts","sourceRoot":"","sources":["../../src/view/highlight-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAuDH;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,WAAW,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,KAAK,EAAE,GACvB,IAAI,CAON;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAO1D"}
@@ -1 +1 @@
1
- {"version":3,"file":"highlight-registry.js","sourceRoot":"","sources":["../../src/view/highlight-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,kCAAkC;AAClC,MAAM,YAAY,GAAG,IAAI,OAAO,EAG7B,CAAC;AAEJ,SAAS,WAAW,CAAC,EAAe;IAClC,OACE,EAAE,CAAC,aAAa,CAAC,WAGlB,EAAE,GAAG,EAAE,UAAU,CAAC;AACrB,CAAC;AAED,SAAS,aAAa,CAAC,EAAe;IACpC,OAAQ,EAAE,CAAC,aAAa,CAAC,WAGX,EAAE,SAAS,CAAC;AAC5B,CAAC;AAED,SAAS,MAAM,CAAC,GAAa,EAAE,IAAY;IACzC,IAAI,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM;QAAE,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,4CAA4C;AAC5C,SAAS,KAAK,CAAC,GAAa,EAAE,EAAe,EAAE,IAAY;IACzD,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAAE,OAAO;IACvB,MAAM,GAAG,GAAY,EAAE,CAAC;IACxB,KAAK,MAAM,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;IACrD,MAAM,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;IAC5B,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;QAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;;QAC7C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,EAAe,EACf,IAAY,EACZ,MAAwB;IAExB,MAAM,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC;IAC7B,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAAE,OAAO;IACnD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5B,IAAI,MAAM,CAAC,MAAM;QAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;;QAChC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClB,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAe;IAClD,MAAM,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC;IAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YAAE,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"highlight-registry.js","sourceRoot":"","sources":["../../src/view/highlight-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,kCAAkC;AAClC,MAAM,YAAY,GAAG,IAAI,OAAO,EAG7B,CAAC;AAEJ,SAAS,WAAW,CAAC,EAAe;IAClC,OACE,EAAE,CAAC,aAAa,CAAC,WAGlB,EAAE,GAAG,EAAE,UAAU,CAAC;AACrB,CAAC;AAED,SAAS,aAAa,CAAC,EAAe;IACpC,OACE,EAAE,CAAC,aAAa,CAAC,WAElB,EAAE,SAAS,CAAC;AACf,CAAC;AAED,SAAS,MAAM,CACb,GAAa,EACb,IAAY;IAEZ,IAAI,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM;QAAE,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,4CAA4C;AAC5C,SAAS,KAAK,CAAC,GAAa,EAAE,EAAe,EAAE,IAAY;IACzD,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAAE,OAAO;IACvB,MAAM,GAAG,GAAY,EAAE,CAAC;IACxB,KAAK,MAAM,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;IACrD,MAAM,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;IAC5B,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;QAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;;QAC7C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,EAAe,EACf,IAAY,EACZ,MAAwB;IAExB,MAAM,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC;IAC7B,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAAE,OAAO;IACnD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5B,IAAI,MAAM,CAAC,MAAM;QAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;;QAChC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClB,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAe;IAClD,MAAM,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC;IAC7B,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YAAE,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;AACH,CAAC"}
@@ -52,7 +52,7 @@ export interface ImeSession {
52
52
  /** compositionstart — 남은 플러시 예약을 취소하고 새 세션을 연다 */
53
53
  start(): void;
54
54
  /** compositionend — 커밋 확정. 흡수를 다음 태스크로 예약한다 */
55
- end(): void;
55
+ end(e?: CompositionEvent): void;
56
56
  /** beforeinput 게이트 — 조합 중 도착한 입력의 처리 방침을 결정한다 */
57
57
  gate(e: InputEvent, domSel: {
58
58
  anchor: Point;
@@ -1 +1 @@
1
- {"version":3,"file":"ime.d.ts","sourceRoot":"","sources":["../../src/view/ime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAInD;;;;;;;;;;;;;;;;;;GAkBG;AAEH,yCAAyC;AACzC,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB,0CAA0C;IAC1C,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,4CAA4C;IAC5C,UAAU,IAAI;QAAE,MAAM,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI,CAAC;CACtD;AAED;;;;;;GAMG;AACH,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAExD,uCAAuC;AACvC,MAAM,WAAW,UAAU;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,kDAAkD;IAClD,KAAK,IAAI,IAAI,CAAC;IACd,+CAA+C;IAC/C,GAAG,IAAI,IAAI,CAAC;IACZ,iDAAiD;IACjD,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE;QAAE,MAAM,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI,GAAG,OAAO,CAAC;IAC7E;;;OAGG;IACH,UAAU,CACR,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE;QAAE,MAAM,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI,GAC7C,OAAO,CAAC;IACX,gCAAgC;IAChC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAmO1D"}
1
+ {"version":3,"file":"ime.d.ts","sourceRoot":"","sources":["../../src/view/ime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAInD;;;;;;;;;;;;;;;;;;GAkBG;AAEH,yCAAyC;AACzC,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB,0CAA0C;IAC1C,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,4CAA4C;IAC5C,UAAU,IAAI;QAAE,MAAM,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI,CAAC;CACtD;AAED;;;;;;GAMG;AACH,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAExD,uCAAuC;AACvC,MAAM,WAAW,UAAU;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,kDAAkD;IAClD,KAAK,IAAI,IAAI,CAAC;IACd,+CAA+C;IAC/C,GAAG,CAAC,CAAC,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChC,iDAAiD;IACjD,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE;QAAE,MAAM,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI,GAAG,OAAO,CAAC;IAC7E;;;OAGG;IACH,UAAU,CACR,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE;QAAE,MAAM,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI,GAC7C,OAAO,CAAC;IACX,gCAAgC;IAChC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAwQ1D"}
package/dist/view/ime.js CHANGED
@@ -26,6 +26,11 @@ export function createImeSession(host) {
26
26
  // 한 번 더 보낸다(Safari 확정, Chromium도 비동기 커밋 경로가 있다) —
27
27
  // 타이머보다 늦게 오면 에코를 구별하기 위해 종료 시각을 기록한다
28
28
  let compEndedAt = 0;
29
+ // compositionend의 커밋 페이로드 — 늦은 에코는 이 문자열을 반복한다.
30
+ // "DOM 끝자락 일치"만으로는 커밋 직후 같은 문자를 재입력한 실제
31
+ // 키입력까지 에코로 삼키므로 페이로드 일치를 함께 요구한다.
32
+ // 페이로드를 못 읽는 환경(null)은 기존 판정으로 폴백한다
33
+ let compEndData = null;
29
34
  /**
30
35
  * composition 중 브라우저가 직접 바꾼 DOM을 doc에 흡수한다.
31
36
  * 캐럿이 위치한 텍스트 홀더의 DOM 텍스트와 doc 텍스트를 공통
@@ -55,19 +60,39 @@ export function createImeSession(host) {
55
60
  }
56
61
  if (!focus || focus.path.length === 0)
57
62
  return;
58
- const holder = el.querySelector(`[${PATH_ATTR}="${focus.path.join(",")}"]`);
59
- // 텍스트 홀더가 아니면(안에 me-path 자식이 있으면) 흡수 불가
60
- if (!holder || holder.querySelector(`[${PATH_ATTR}]`))
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)
61
86
  return;
62
87
  const domText = holder.textContent ?? "";
63
- const docText = docTextAt(focus);
88
+ const docText = docTextAt({ path: focusPath, offset: focus.offset });
64
89
  // 조합 리프의 doc이 시작 스냅샷과 다르면 대기 창에 외부(원격·
65
90
  // 플러그인) 편집이 들어온 것 — DOM(스냅샷+커밋 텍스트) 기준 diff가
66
91
  // 그 편집을 지우므로 흡수를 건너뛴다. 커밋은 유실되지만 문서는
67
92
  // 수렴 상태를 유지한다
68
93
  if (compStart &&
69
94
  compStartText !== null &&
70
- pathEq(focus.path, compStart.path) &&
95
+ pathEq(focusPath, compStart.path) &&
71
96
  docText !== compStartText) {
72
97
  return;
73
98
  }
@@ -88,13 +113,13 @@ export function createImeSession(host) {
88
113
  const tr = editor.state.tr();
89
114
  if (hiDoc > lo) {
90
115
  tr.delete({
91
- anchor: point(focus.path, lo),
92
- focus: point(focus.path, hiDoc),
116
+ anchor: point(focusPath, lo),
117
+ focus: point(focusPath, hiDoc),
93
118
  });
94
119
  }
95
120
  const inserted = domText.slice(lo, hiDom);
96
121
  if (inserted)
97
- tr.insertText(inserted, point(focus.path, lo));
122
+ tr.insertText(inserted, point(focusPath, lo));
98
123
  if (!tr.docChanged)
99
124
  return;
100
125
  tr.setMeta("history.group", "type").setMeta("ime", true);
@@ -171,14 +196,22 @@ export function createImeSession(host) {
171
196
  // 흡수 대상 리프의 doc 텍스트 스냅샷 — 대기 창에 외부 편집이
172
197
  // 들어왔는지 absorb이 판별하는 기준 (정리 tr 이후에 잡는다)
173
198
  compStartText = compStart ? docTextAt(compStart) : null;
199
+ compEndData = null;
174
200
  },
175
- end() {
201
+ end(e) {
202
+ // start 없는 compositionend(일부 IME의 취소·포커스 해제 경로)나
203
+ // 같은 세션의 중복 end는 무시한다 — 없는 조합을 흡수하면 엉뚱한
204
+ // 홀더의 DOM/doc 차이를 커밋해 원격 편집 등의 정상 텍스트를
205
+ // 되돌릴 수 있다
206
+ if (!composing || pendingAbsorb)
207
+ return;
176
208
  // composing 해제와 흡수를 다음 태스크로 미룬다 — 같은 태스크의
177
209
  // 후속 beforeinput/keydown(Safari 최종 커밋, IME Enter 오커밋)을
178
210
  // composing 가드가 계속 걸러내게 하기 위해서다. 단 그 창에 도착한
179
211
  // 구조 입력은 flushComposition이 흡수를 앞당겨 정상 처리한다.
180
212
  pendingAbsorb = true;
181
213
  compEndedAt = performance.now();
214
+ compEndData = e?.data ?? null;
182
215
  compTimer = setTimeout(flushComposition, 0);
183
216
  },
184
217
  gate(e, domSel) {
@@ -198,10 +231,13 @@ export function createImeSession(host) {
198
231
  }
199
232
  // 커밋 에코 — DOM에 이미 같은 텍스트가 쓰여 있으면(조합 중 브라우저가
200
233
  // 넣은 상태) 통과시키면 브라우저가 한 번 더 써서 "세세"가 된다.
201
- // DOM에 없으면(Safari 최종 커밋) 살려둬야 글자가 사라지지 않는다
234
+ // DOM에 없으면(Safari 최종 커밋) 살려둬야 글자가 사라지지 않는다.
235
+ // 페이로드가 읽힐 때는 커밋 문자열과도 일치해야 한다 — DOM 끝자락
236
+ // 일치만으로는 커밋 직후 같은 문자의 실제 재입력까지 막는다
202
237
  if ((e.inputType === "insertText" ||
203
238
  e.inputType === "insertCompositionText") &&
204
239
  e.data &&
240
+ (compEndData == null || e.data === compEndData) &&
205
241
  domSel &&
206
242
  domEndsWith(el, domSel.focus, e.data)) {
207
243
  return "prevent";
@@ -210,9 +246,12 @@ export function createImeSession(host) {
210
246
  },
211
247
  isLateEcho(data, domSel) {
212
248
  // 커밋 에코가 흡수 타이머보다 늦게 도착한 경우 — DOM과 doc에
213
- // 이미 같은 글자가 있으므로 다시 넣으면 "세세"가 된다
249
+ // 이미 같은 글자가 있으므로 다시 넣으면 "세세"가 된다.
250
+ // 커밋 페이로드와의 일치를 요구해, 커밋 직후 같은 문자를 빠르게
251
+ // 재입력한 실제 키입력이 에코로 삼켜지는 것을 막는다
214
252
  return (compEndedAt > 0 &&
215
253
  performance.now() - compEndedAt < 300 &&
254
+ (compEndData == null || data === compEndData) &&
216
255
  domSel != null &&
217
256
  domEndsWith(el, domSel.focus, data));
218
257
  },
@@ -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":"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"}
@@ -0,0 +1,25 @@
1
+ import type { Editor } from "../editor/editor.js";
2
+ import type { Point } from "../state/selection.js";
3
+ import type { ImeSession } from "./ime.js";
4
+ /**
5
+ * beforeinput 핸들러 — 브라우저가 contenteditable DOM을 직접 바꾸는
6
+ * 것을 막고(preventDefault) 모든 입력을 트랜잭션으로 번역한다.
7
+ *
8
+ * bindEditorInput에서 분리된 모듈 — inputType별 디스패치(텍스트 삽입·
9
+ * 개행·삭제·붙여넣기·드롭·서식 커맨드)만 담는다. IME 게이트 판정과
10
+ * 입력 훅 소비가 먼저 돌고, 남은 입력은 tr.delete+insert로 처리한다.
11
+ */
12
+ export interface BeforeInputDeps {
13
+ editor: Editor;
14
+ el: HTMLElement;
15
+ /** DOM 셀렉션을 Point로 읽는 판독기 */
16
+ readDomSel: () => {
17
+ anchor: Point;
18
+ focus: Point;
19
+ } | null;
20
+ /** IME 세션 — gate/isLateEcho 판정에 쓴다 */
21
+ ime: ImeSession;
22
+ }
23
+ /** beforeinput 리스너를 생성한다 */
24
+ export declare function createBeforeInputHandler(deps: BeforeInputDeps): (e: InputEvent) => void;
25
+ //# sourceMappingURL=input-beforeinput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-beforeinput.d.ts","sourceRoot":"","sources":["../../src/view/input-beforeinput.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAKlD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAInD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAK3C;;;;;;;GAOG;AAEH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,WAAW,CAAC;IAChB,6BAA6B;IAC7B,UAAU,EAAE,MAAM;QAAE,MAAM,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI,CAAC;IACzD,sCAAsC;IACtC,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,4BAA4B;AAC5B,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,eAAe,GACpB,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CA6TzB"}