@moda-editor/core 0.3.1 → 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.
Files changed (137) 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 +25 -3
  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/fixtures/external-pastes.d.ts +33 -0
  35. package/dist/fixtures/external-pastes.d.ts.map +1 -0
  36. package/dist/fixtures/external-pastes.js +134 -0
  37. package/dist/fixtures/external-pastes.js.map +1 -0
  38. package/dist/history.d.ts.map +1 -1
  39. package/dist/history.js +57 -2
  40. package/dist/history.js.map +1 -1
  41. package/dist/index.d.ts +6 -5
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +3 -3
  44. package/dist/index.js.map +1 -1
  45. package/dist/model/node.d.ts.map +1 -1
  46. package/dist/model/node.js +1 -2
  47. package/dist/model/node.js.map +1 -1
  48. package/dist/model/schema.d.ts +7 -0
  49. package/dist/model/schema.d.ts.map +1 -1
  50. package/dist/model/schema.js.map +1 -1
  51. package/dist/model/traverse.d.ts +10 -3
  52. package/dist/model/traverse.d.ts.map +1 -1
  53. package/dist/model/traverse.js +13 -5
  54. package/dist/model/traverse.js.map +1 -1
  55. package/dist/parse/html.d.ts.map +1 -1
  56. package/dist/parse/html.js +33 -3
  57. package/dist/parse/html.js.map +1 -1
  58. package/dist/presets/markdown-parse.d.ts.map +1 -1
  59. package/dist/presets/markdown-parse.js +9 -0
  60. package/dist/presets/markdown-parse.js.map +1 -1
  61. package/dist/presets/markdown.d.ts.map +1 -1
  62. package/dist/presets/markdown.js +7 -6
  63. package/dist/presets/markdown.js.map +1 -1
  64. package/dist/presets/starter.d.ts.map +1 -1
  65. package/dist/presets/starter.js.map +1 -1
  66. package/dist/state/apply.d.ts.map +1 -1
  67. package/dist/state/apply.js +1 -3
  68. package/dist/state/apply.js.map +1 -1
  69. package/dist/state/input-rules.d.ts.map +1 -1
  70. package/dist/state/input-rules.js +4 -0
  71. package/dist/state/input-rules.js.map +1 -1
  72. package/dist/state/insert-ops.d.ts.map +1 -1
  73. package/dist/state/insert-ops.js +9 -2
  74. package/dist/state/insert-ops.js.map +1 -1
  75. package/dist/state/list-ops.d.ts.map +1 -1
  76. package/dist/state/list-ops.js.map +1 -1
  77. package/dist/state/navigate.d.ts.map +1 -1
  78. package/dist/state/navigate.js +14 -4
  79. package/dist/state/navigate.js.map +1 -1
  80. package/dist/state/resolve-insert.d.ts.map +1 -1
  81. package/dist/state/resolve-insert.js +12 -1
  82. package/dist/state/resolve-insert.js.map +1 -1
  83. package/dist/styles.css +27 -12
  84. package/dist/theme.d.ts.map +1 -1
  85. package/dist/theme.js.map +1 -1
  86. package/dist/view/decoration.d.ts.map +1 -1
  87. package/dist/view/decoration.js +60 -44
  88. package/dist/view/decoration.js.map +1 -1
  89. package/dist/view/highlight-registry.d.ts.map +1 -1
  90. package/dist/view/highlight-registry.js.map +1 -1
  91. package/dist/view/ime.d.ts +22 -1
  92. package/dist/view/ime.d.ts.map +1 -1
  93. package/dist/view/ime.js +124 -56
  94. package/dist/view/ime.js.map +1 -1
  95. package/dist/view/input-beforeinput.d.ts +25 -0
  96. package/dist/view/input-beforeinput.d.ts.map +1 -0
  97. package/dist/view/input-beforeinput.js +330 -0
  98. package/dist/view/input-beforeinput.js.map +1 -0
  99. package/dist/view/input-keys.d.ts +25 -0
  100. package/dist/view/input-keys.d.ts.map +1 -0
  101. package/dist/view/input-keys.js +69 -0
  102. package/dist/view/input-keys.js.map +1 -0
  103. package/dist/view/input-pointer.d.ts +24 -0
  104. package/dist/view/input-pointer.d.ts.map +1 -0
  105. package/dist/view/input-pointer.js +96 -0
  106. package/dist/view/input-pointer.js.map +1 -0
  107. package/dist/view/input-selection.d.ts +41 -0
  108. package/dist/view/input-selection.d.ts.map +1 -0
  109. package/dist/view/input-selection.js +219 -0
  110. package/dist/view/input-selection.js.map +1 -0
  111. package/dist/view/input.d.ts +39 -30
  112. package/dist/view/input.d.ts.map +1 -1
  113. package/dist/view/input.js +84 -679
  114. package/dist/view/input.js.map +1 -1
  115. package/dist/view/mount.d.ts +7 -0
  116. package/dist/view/mount.d.ts.map +1 -1
  117. package/dist/view/mount.js +107 -19
  118. package/dist/view/mount.js.map +1 -1
  119. package/dist/view/node-selection.d.ts.map +1 -1
  120. package/dist/view/node-selection.js +1 -3
  121. package/dist/view/node-selection.js.map +1 -1
  122. package/dist/view/render.d.ts.map +1 -1
  123. package/dist/view/render.js +10 -3
  124. package/dist/view/render.js.map +1 -1
  125. package/dist/widget/core.d.ts +37 -0
  126. package/dist/widget/core.d.ts.map +1 -0
  127. package/dist/widget/core.js +117 -0
  128. package/dist/widget/core.js.map +1 -0
  129. package/dist/widget/mount.d.ts +24 -0
  130. package/dist/widget/mount.d.ts.map +1 -0
  131. package/dist/widget/mount.js +45 -0
  132. package/dist/widget/mount.js.map +1 -0
  133. package/dist/widget/types.d.ts +44 -0
  134. package/dist/widget/types.d.ts.map +1 -0
  135. package/dist/widget/types.js +8 -0
  136. package/dist/widget/types.js.map +1 -0
  137. package/package.json +2 -6
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;
@@ -26,18 +108,23 @@ export function createImeSession(host) {
26
108
  // 한 번 더 보낸다(Safari 확정, Chromium도 비동기 커밋 경로가 있다) —
27
109
  // 타이머보다 늦게 오면 에코를 구별하기 위해 종료 시각을 기록한다
28
110
  let compEndedAt = 0;
29
- /**
30
- * composition 중 브라우저가 직접 바꾼 DOM을 doc에 흡수한다.
31
- * 캐럿이 위치한 텍스트 홀더의 DOM 텍스트와 doc 텍스트를 공통
32
- * 접두/접미로 diff해 차이만큼만 트랜잭션으로 반영한다.
33
- * (제약: 조합이 하나의 텍스트 홀더 안에 머문다고 가정 —
34
- * 크로스-블록 조합 삭제는 compositionstart의 선처리가 막는다)
35
- */
111
+ // compositionend의 커밋 페이로드 — 늦은 에코는 이 문자열을 반복한다.
112
+ // "DOM 끝자락 일치"만으로는 커밋 직후 같은 문자를 재입력한 실제
113
+ // 키입력까지 에코로 삼키므로 페이로드 일치를 함께 요구한다.
114
+ // 페이로드를 못 읽는 환경(null)은 기존 판정으로 폴백한다
115
+ let compEndData = null;
36
116
  /** 포인트가 가리키는 리프의 doc 텍스트 — 비텍스트면 ""로 본다 */
37
117
  const docTextAt = (p) => {
38
118
  const n = nodeAt(editor.state.doc, p.path);
39
119
  return n?.type === "text" ? (n.text ?? "") : "";
40
120
  };
121
+ /**
122
+ * composition 중 브라우저가 직접 바꾼 DOM을 doc에 흡수한다.
123
+ * 홀더 해석과 diff-흡수는 absorbDomText가 담당하고, 여기서는 조합
124
+ * 세션 특유의 홀더 선택(compStart 폴백)과 외부 편집 감지 가드를 입힌다.
125
+ * (제약: 조합이 하나의 텍스트 홀더 안에 머문다고 가정 —
126
+ * 크로스-블록 조합 삭제는 compositionstart의 선처리가 막는다)
127
+ */
41
128
  const absorbComposition = () => {
42
129
  const live = readDomSel()?.focus;
43
130
  let focus = live ?? compStart;
@@ -55,55 +142,15 @@ export function createImeSession(host) {
55
142
  }
56
143
  if (!focus || focus.path.length === 0)
57
144
  return;
58
- const holder = el.querySelector(`[${PATH_ATTR}="${focus.path.join(",")}"]`);
59
- // 텍스트 홀더가 아니면(안에 me-path 자식이 있으면) 흡수 불가
60
- if (!holder || holder.querySelector(`[${PATH_ATTR}]`))
61
- return;
62
- const domText = holder.textContent ?? "";
63
- const docText = docTextAt(focus);
145
+ absorbDomText({ editor, el, dirtyPaths }, focus, (focusPath, docText) =>
64
146
  // 조합 리프의 doc이 시작 스냅샷과 다르면 대기 창에 외부(원격·
65
147
  // 플러그인) 편집이 들어온 것 — DOM(스냅샷+커밋 텍스트) 기준 diff가
66
148
  // 그 편집을 지우므로 흡수를 건너뛴다. 커밋은 유실되지만 문서는
67
149
  // 수렴 상태를 유지한다
68
- if (compStart &&
150
+ !(compStart &&
69
151
  compStartText !== null &&
70
- pathEq(focus.path, compStart.path) &&
71
- docText !== compStartText) {
72
- return;
73
- }
74
- if (domText === docText)
75
- return;
76
- let lo = 0;
77
- const max = Math.min(domText.length, docText.length);
78
- while (lo < max && domText[lo] === docText[lo])
79
- lo++;
80
- let hiDom = domText.length;
81
- let hiDoc = docText.length;
82
- while (hiDom > lo &&
83
- hiDoc > lo &&
84
- domText[hiDom - 1] === docText[hiDoc - 1]) {
85
- hiDom--;
86
- hiDoc--;
87
- }
88
- const tr = editor.state.tr();
89
- if (hiDoc > lo) {
90
- tr.delete({
91
- anchor: point(focus.path, lo),
92
- focus: point(focus.path, hiDoc),
93
- });
94
- }
95
- const inserted = domText.slice(lo, hiDom);
96
- if (inserted)
97
- tr.insertText(inserted, point(focus.path, lo));
98
- if (!tr.docChanged)
99
- return;
100
- tr.setMeta("history.group", "type").setMeta("ime", true);
101
- // 브라우저가 이 블록의 DOM을 직접 바꿨다 — 리렌더 시 프레임워크
102
- // 리컨실이 깨지지 않게 블록 리마운트 대상으로 표시한다
103
- const dk = topBlockKey(focus) ?? topBlockKey(compStart);
104
- if (dk != null)
105
- dirtyPaths.add(dk);
106
- editor.dispatch(tr);
152
+ pathEq(focusPath, compStart.path) &&
153
+ docText !== compStartText));
107
154
  };
108
155
  /**
109
156
  * 대기 중인 흡수를 즉시 실행 — 커밋 직후의 구조 입력(Enter 등)이
@@ -120,6 +167,9 @@ export function createImeSession(host) {
120
167
  absorbComposition();
121
168
  compStart = null;
122
169
  compStartText = null;
170
+ // 조합 창이 닫혔다 — 흡수가 tr을 만들지 않아도 호출된다.
171
+ // 어댑터가 조합 중 미뤄둔 DOM 쓰기(dirty 리마운트·재구축)를 여기서 커밋한다
172
+ onIdle?.();
123
173
  };
124
174
  return {
125
175
  get active() {
@@ -139,7 +189,6 @@ export function createImeSession(host) {
139
189
  compTimer = null;
140
190
  }
141
191
  pendingAbsorb = false;
142
- composing = true;
143
192
  const sel = readDomSel();
144
193
  compStart = sel?.focus ?? null;
145
194
  // 다른 리프에 걸친 선택 위에서 시작되는 조합: 브라우저가 선택
@@ -171,14 +220,27 @@ export function createImeSession(host) {
171
220
  // 흡수 대상 리프의 doc 텍스트 스냅샷 — 대기 창에 외부 편집이
172
221
  // 들어왔는지 absorb이 판별하는 기준 (정리 tr 이후에 잡는다)
173
222
  compStartText = compStart ? docTextAt(compStart) : null;
223
+ compEndData = null;
224
+ // 세션 확립은 정리 디스패치 "뒤"에 한다 — 위 선삭제 tr의 렌더가
225
+ // 막 표시된 더티 블록을 리마운트하는 것이 설계된 복구 경로다
226
+ // (composing이 먼저 서면 어댑터의 리마운트 미루기 가드가 그
227
+ // 복구까지 지연시킨다). 이 시점부터 브라우저가 DOM을 소유한다
228
+ composing = true;
174
229
  },
175
- end() {
230
+ end(e) {
231
+ // start 없는 compositionend(일부 IME의 취소·포커스 해제 경로)나
232
+ // 같은 세션의 중복 end는 무시한다 — 없는 조합을 흡수하면 엉뚱한
233
+ // 홀더의 DOM/doc 차이를 커밋해 원격 편집 등의 정상 텍스트를
234
+ // 되돌릴 수 있다
235
+ if (!composing || pendingAbsorb)
236
+ return;
176
237
  // composing 해제와 흡수를 다음 태스크로 미룬다 — 같은 태스크의
177
238
  // 후속 beforeinput/keydown(Safari 최종 커밋, IME Enter 오커밋)을
178
239
  // composing 가드가 계속 걸러내게 하기 위해서다. 단 그 창에 도착한
179
240
  // 구조 입력은 flushComposition이 흡수를 앞당겨 정상 처리한다.
180
241
  pendingAbsorb = true;
181
242
  compEndedAt = performance.now();
243
+ compEndData = e?.data ?? null;
182
244
  compTimer = setTimeout(flushComposition, 0);
183
245
  },
184
246
  gate(e, domSel) {
@@ -198,10 +260,13 @@ export function createImeSession(host) {
198
260
  }
199
261
  // 커밋 에코 — DOM에 이미 같은 텍스트가 쓰여 있으면(조합 중 브라우저가
200
262
  // 넣은 상태) 통과시키면 브라우저가 한 번 더 써서 "세세"가 된다.
201
- // DOM에 없으면(Safari 최종 커밋) 살려둬야 글자가 사라지지 않는다
263
+ // DOM에 없으면(Safari 최종 커밋) 살려둬야 글자가 사라지지 않는다.
264
+ // 페이로드가 읽힐 때는 커밋 문자열과도 일치해야 한다 — DOM 끝자락
265
+ // 일치만으로는 커밋 직후 같은 문자의 실제 재입력까지 막는다
202
266
  if ((e.inputType === "insertText" ||
203
267
  e.inputType === "insertCompositionText") &&
204
268
  e.data &&
269
+ (compEndData == null || e.data === compEndData) &&
205
270
  domSel &&
206
271
  domEndsWith(el, domSel.focus, e.data)) {
207
272
  return "prevent";
@@ -210,9 +275,12 @@ export function createImeSession(host) {
210
275
  },
211
276
  isLateEcho(data, domSel) {
212
277
  // 커밋 에코가 흡수 타이머보다 늦게 도착한 경우 — DOM과 doc에
213
- // 이미 같은 글자가 있으므로 다시 넣으면 "세세"가 된다
278
+ // 이미 같은 글자가 있으므로 다시 넣으면 "세세"가 된다.
279
+ // 커밋 페이로드와의 일치를 요구해, 커밋 직후 같은 문자를 빠르게
280
+ // 재입력한 실제 키입력이 에코로 삼켜지는 것을 막는다
214
281
  return (compEndedAt > 0 &&
215
282
  performance.now() - compEndedAt < 300 &&
283
+ (compEndData == null || data === compEndData) &&
216
284
  domSel != null &&
217
285
  domEndsWith(el, domSel.focus, data));
218
286
  },
@@ -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"}