@moda-editor/core 0.1.1

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 (184) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +16 -0
  3. package/dist/commands.d.ts +78 -0
  4. package/dist/commands.d.ts.map +1 -0
  5. package/dist/commands.js +299 -0
  6. package/dist/commands.js.map +1 -0
  7. package/dist/conformance.d.ts +59 -0
  8. package/dist/conformance.d.ts.map +1 -0
  9. package/dist/conformance.js +1609 -0
  10. package/dist/conformance.js.map +1 -0
  11. package/dist/core.d.ts +37 -0
  12. package/dist/core.d.ts.map +1 -0
  13. package/dist/core.js +117 -0
  14. package/dist/core.js.map +1 -0
  15. package/dist/editor/editor.d.ts +104 -0
  16. package/dist/editor/editor.d.ts.map +1 -0
  17. package/dist/editor/editor.js +204 -0
  18. package/dist/editor/editor.js.map +1 -0
  19. package/dist/editor/extension.d.ts +170 -0
  20. package/dist/editor/extension.d.ts.map +1 -0
  21. package/dist/editor/extension.js +2 -0
  22. package/dist/editor/extension.js.map +1 -0
  23. package/dist/features/ace.d.ts +9 -0
  24. package/dist/features/ace.d.ts.map +1 -0
  25. package/dist/features/ace.js +144 -0
  26. package/dist/features/ace.js.map +1 -0
  27. package/dist/features/alignment.d.ts +9 -0
  28. package/dist/features/alignment.d.ts.map +1 -0
  29. package/dist/features/alignment.js +28 -0
  30. package/dist/features/alignment.js.map +1 -0
  31. package/dist/features/blockquote.d.ts +9 -0
  32. package/dist/features/blockquote.d.ts.map +1 -0
  33. package/dist/features/blockquote.js +65 -0
  34. package/dist/features/blockquote.js.map +1 -0
  35. package/dist/features/code-block.d.ts +77 -0
  36. package/dist/features/code-block.d.ts.map +1 -0
  37. package/dist/features/code-block.js +986 -0
  38. package/dist/features/code-block.js.map +1 -0
  39. package/dist/features/doc.d.ts +15 -0
  40. package/dist/features/doc.d.ts.map +1 -0
  41. package/dist/features/doc.js +79 -0
  42. package/dist/features/doc.js.map +1 -0
  43. package/dist/features/feature.d.ts +26 -0
  44. package/dist/features/feature.d.ts.map +1 -0
  45. package/dist/features/feature.js +8 -0
  46. package/dist/features/feature.js.map +1 -0
  47. package/dist/features/hard-break.d.ts +9 -0
  48. package/dist/features/hard-break.d.ts.map +1 -0
  49. package/dist/features/hard-break.js +48 -0
  50. package/dist/features/hard-break.js.map +1 -0
  51. package/dist/features/heading.d.ts +3 -0
  52. package/dist/features/heading.d.ts.map +1 -0
  53. package/dist/features/heading.js +31 -0
  54. package/dist/features/heading.js.map +1 -0
  55. package/dist/features/horizontal-rule.d.ts +9 -0
  56. package/dist/features/horizontal-rule.d.ts.map +1 -0
  57. package/dist/features/horizontal-rule.js +64 -0
  58. package/dist/features/horizontal-rule.js.map +1 -0
  59. package/dist/features/image.d.ts +12 -0
  60. package/dist/features/image.d.ts.map +1 -0
  61. package/dist/features/image.js +116 -0
  62. package/dist/features/image.js.map +1 -0
  63. package/dist/features/index.d.ts +31 -0
  64. package/dist/features/index.d.ts.map +1 -0
  65. package/dist/features/index.js +65 -0
  66. package/dist/features/index.js.map +1 -0
  67. package/dist/features/inline-style.d.ts +12 -0
  68. package/dist/features/inline-style.d.ts.map +1 -0
  69. package/dist/features/inline-style.js +126 -0
  70. package/dist/features/inline-style.js.map +1 -0
  71. package/dist/features/link.d.ts +29 -0
  72. package/dist/features/link.d.ts.map +1 -0
  73. package/dist/features/link.js +198 -0
  74. package/dist/features/link.js.map +1 -0
  75. package/dist/features/lists.d.ts +14 -0
  76. package/dist/features/lists.d.ts.map +1 -0
  77. package/dist/features/lists.js +178 -0
  78. package/dist/features/lists.js.map +1 -0
  79. package/dist/features/marks.d.ts +6 -0
  80. package/dist/features/marks.d.ts.map +1 -0
  81. package/dist/features/marks.js +68 -0
  82. package/dist/features/marks.js.map +1 -0
  83. package/dist/features/script.d.ts +2 -0
  84. package/dist/features/script.d.ts.map +1 -0
  85. package/dist/features/script.js +55 -0
  86. package/dist/features/script.js.map +1 -0
  87. package/dist/features/table.d.ts +20 -0
  88. package/dist/features/table.d.ts.map +1 -0
  89. package/dist/features/table.js +195 -0
  90. package/dist/features/table.js.map +1 -0
  91. package/dist/features/task-list.d.ts +10 -0
  92. package/dist/features/task-list.d.ts.map +1 -0
  93. package/dist/features/task-list.js +68 -0
  94. package/dist/features/task-list.js.map +1 -0
  95. package/dist/features/testkit.d.ts +32 -0
  96. package/dist/features/testkit.d.ts.map +1 -0
  97. package/dist/features/testkit.js +92 -0
  98. package/dist/features/testkit.js.map +1 -0
  99. package/dist/history.d.ts +40 -0
  100. package/dist/history.d.ts.map +1 -0
  101. package/dist/history.js +192 -0
  102. package/dist/history.js.map +1 -0
  103. package/dist/index.d.ts +39 -0
  104. package/dist/index.d.ts.map +1 -0
  105. package/dist/index.js +29 -0
  106. package/dist/index.js.map +1 -0
  107. package/dist/model/node.d.ts +47 -0
  108. package/dist/model/node.d.ts.map +1 -0
  109. package/dist/model/node.js +30 -0
  110. package/dist/model/node.js.map +1 -0
  111. package/dist/model/schema.d.ts +105 -0
  112. package/dist/model/schema.d.ts.map +1 -0
  113. package/dist/model/schema.js +46 -0
  114. package/dist/model/schema.js.map +1 -0
  115. package/dist/model/traverse.d.ts +36 -0
  116. package/dist/model/traverse.d.ts.map +1 -0
  117. package/dist/model/traverse.js +123 -0
  118. package/dist/model/traverse.js.map +1 -0
  119. package/dist/mount.d.ts +24 -0
  120. package/dist/mount.d.ts.map +1 -0
  121. package/dist/mount.js +45 -0
  122. package/dist/mount.js.map +1 -0
  123. package/dist/parse/html.d.ts +8 -0
  124. package/dist/parse/html.d.ts.map +1 -0
  125. package/dist/parse/html.js +247 -0
  126. package/dist/parse/html.js.map +1 -0
  127. package/dist/parse/sanitize.d.ts +20 -0
  128. package/dist/parse/sanitize.d.ts.map +1 -0
  129. package/dist/parse/sanitize.js +116 -0
  130. package/dist/parse/sanitize.js.map +1 -0
  131. package/dist/presets/highlight.d.ts +23 -0
  132. package/dist/presets/highlight.d.ts.map +1 -0
  133. package/dist/presets/highlight.js +170 -0
  134. package/dist/presets/highlight.js.map +1 -0
  135. package/dist/presets/starter.d.ts +14 -0
  136. package/dist/presets/starter.d.ts.map +1 -0
  137. package/dist/presets/starter.js +18 -0
  138. package/dist/presets/starter.js.map +1 -0
  139. package/dist/state/apply.d.ts +64 -0
  140. package/dist/state/apply.d.ts.map +1 -0
  141. package/dist/state/apply.js +528 -0
  142. package/dist/state/apply.js.map +1 -0
  143. package/dist/state/navigate.d.ts +5 -0
  144. package/dist/state/navigate.d.ts.map +1 -0
  145. package/dist/state/navigate.js +81 -0
  146. package/dist/state/navigate.js.map +1 -0
  147. package/dist/state/selection.d.ts +44 -0
  148. package/dist/state/selection.d.ts.map +1 -0
  149. package/dist/state/selection.js +63 -0
  150. package/dist/state/selection.js.map +1 -0
  151. package/dist/state/state.d.ts +39 -0
  152. package/dist/state/state.d.ts.map +1 -0
  153. package/dist/state/state.js +123 -0
  154. package/dist/state/state.js.map +1 -0
  155. package/dist/state/transaction.d.ts +234 -0
  156. package/dist/state/transaction.d.ts.map +1 -0
  157. package/dist/state/transaction.js +988 -0
  158. package/dist/state/transaction.js.map +1 -0
  159. package/dist/styles.css +948 -0
  160. package/dist/types.d.ts +44 -0
  161. package/dist/types.d.ts.map +1 -0
  162. package/dist/types.js +8 -0
  163. package/dist/types.js.map +1 -0
  164. package/dist/view/dom.d.ts +26 -0
  165. package/dist/view/dom.d.ts.map +1 -0
  166. package/dist/view/dom.js +249 -0
  167. package/dist/view/dom.js.map +1 -0
  168. package/dist/view/input.d.ts +45 -0
  169. package/dist/view/input.d.ts.map +1 -0
  170. package/dist/view/input.js +901 -0
  171. package/dist/view/input.js.map +1 -0
  172. package/dist/view/mount.d.ts +26 -0
  173. package/dist/view/mount.d.ts.map +1 -0
  174. package/dist/view/mount.js +119 -0
  175. package/dist/view/mount.js.map +1 -0
  176. package/dist/view/render.d.ts +64 -0
  177. package/dist/view/render.d.ts.map +1 -0
  178. package/dist/view/render.js +203 -0
  179. package/dist/view/render.js.map +1 -0
  180. package/dist/view/serialize.d.ts +4 -0
  181. package/dist/view/serialize.d.ts.map +1 -0
  182. package/dist/view/serialize.js +37 -0
  183. package/dist/view/serialize.js.map +1 -0
  184. package/package.json +44 -0
@@ -0,0 +1,23 @@
1
+ /**
2
+ * 코드블록 구문 하이라이트 — 뷰 레벨 토크나이저.
3
+ *
4
+ * Tiptap의 CodeBlockLowlight와 같은 디커플된 설계다: 스키마는 토큰만
5
+ * 만들고(doc에 마크를 새기지 않는다), 렌더 계층이 토큰을
6
+ * `span.me-tok-<kind>`로 출력한다. 하이라이터가 없으면 플레인 텍스트.
7
+ * 무거운 엔진이 필요하면 lowlight/highlight.js 결과를 같은 토큰
8
+ * 형태로 바꿔 spec.codeHighlighter에 주입하면 된다.
9
+ */
10
+ export interface CodeToken {
11
+ text: string;
12
+ /** 토큰 종류 — `me-tok-<kind>` 클래스로 렌더 */
13
+ kind?: string;
14
+ }
15
+ export type CodeHighlighter = (code: string, language: string | null) => CodeToken[];
16
+ /**
17
+ * 내장 하이라이터 — 경량 정규식 토크나이저.
18
+ * 언어가 없거나 미지원이면 GENERIC(주석·문자열·숫자)만 적용한다.
19
+ * 반환 토큰을 이어붙이면 반드시 원문과 같다 (불변 계약 — render가
20
+ * 의존한다).
21
+ */
22
+ export declare const highlightCode: CodeHighlighter;
23
+ //# sourceMappingURL=highlight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../src/presets/highlight.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,eAAe,GAAG,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,KACpB,SAAS,EAAE,CAAC;AA+IjB;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,eA+B3B,CAAC"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * 코드블록 구문 하이라이트 — 뷰 레벨 토크나이저.
3
+ *
4
+ * Tiptap의 CodeBlockLowlight와 같은 디커플된 설계다: 스키마는 토큰만
5
+ * 만들고(doc에 마크를 새기지 않는다), 렌더 계층이 토큰을
6
+ * `span.me-tok-<kind>`로 출력한다. 하이라이터가 없으면 플레인 텍스트.
7
+ * 무거운 엔진이 필요하면 lowlight/highlight.js 결과를 같은 토큰
8
+ * 형태로 바꿔 spec.codeHighlighter에 주입하면 된다.
9
+ */
10
+ const WORD = String.raw `[A-Za-z_$][\w$]*`;
11
+ function kw(list) {
12
+ return new RegExp(`^(?:${list.trim().split(/\s+/).join("|")})\\b`);
13
+ }
14
+ const C_LIKE = [
15
+ ["comment", /^\/\/[^\n]*/],
16
+ ["comment", /^\/\*[\s\S]*?\*\//],
17
+ ["string", /^"(?:[^"\\\n]|\\.)*"?/],
18
+ ["string", /^'(?:[^'\\\n]|\\.)*'?/],
19
+ ["string", /^`(?:[^`\\]|\\.)*`?/],
20
+ [
21
+ "keyword",
22
+ kw(`abstract as async await break case catch class const continue
23
+ debugger default delete do else enum export extends finally for
24
+ from function if implements import in instanceof interface let
25
+ new of private protected public return static super switch this
26
+ throw try type typeof var void while with yield package using
27
+ namespace readonly declare override satisfies keyof infer`),
28
+ ],
29
+ [
30
+ "literal",
31
+ kw(`true false null undefined nil none self`),
32
+ ],
33
+ ["number", /^\b(?:0x[\da-fA-F]+|0b[01]+|\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)\b/],
34
+ ["function", new RegExp(`^${WORD}(?=\\s*\\()`)],
35
+ ];
36
+ const PYTHON = [
37
+ ["comment", /^#[^\n]*/],
38
+ ["string", /^"""[\s\S]*?"""/],
39
+ ["string", /^'''[\s\S]*?'''/],
40
+ ["string", /^"(?:[^"\\\n]|\\.)*"?/],
41
+ ["string", /^'(?:[^'\\\n]|\\.)*'?/],
42
+ [
43
+ "keyword",
44
+ kw(`and as assert async await break class continue def del elif else
45
+ except finally for from global if import in is lambda nonlocal
46
+ not or pass raise return try while with yield match case`),
47
+ ],
48
+ ["literal", kw(`True False None`)],
49
+ ["number", /^\b\d+(?:\.\d+)?\b/],
50
+ ["function", new RegExp(`^${WORD}(?=\\s*\\()`)],
51
+ ];
52
+ const SHELL = [
53
+ ["comment", /^#[^\n]*/],
54
+ ["string", /^"(?:[^"\\]|\\.)*"?/],
55
+ ["string", /^'[^']*'?/],
56
+ [
57
+ "keyword",
58
+ kw(`if then else elif fi for while until do done case esac function
59
+ in echo cd export local readonly return exit set shift source`),
60
+ ],
61
+ ["number", /^\b\d+\b/],
62
+ ];
63
+ const MARKUP = [
64
+ ["comment", /^<!--[\s\S]*?-->/],
65
+ ["string", /^"[^"]*"?/],
66
+ ["string", /^'[^']*'?/],
67
+ ["tag", /^<\/?[A-Za-z][\w-]*/],
68
+ ["tag", /^\/?>/],
69
+ ["attr", new RegExp(`^[\\w-]+(?==)`)],
70
+ ];
71
+ const CSS = [
72
+ ["comment", /^\/\*[\s\S]*?\*\//],
73
+ ["string", /^"[^"]*"?/],
74
+ ["string", /^'[^']*'?/],
75
+ ["attr", new RegExp(`^[a-z-]+(?=\\s*:)`)],
76
+ ["number", /^#[0-9a-fA-F]{3,8}\b/],
77
+ ["number", /^\b\d+(?:\.\d+)?(?:px|em|rem|%|vh|vw|s|ms|deg|fr)?\b/],
78
+ ["keyword", /^@[\w-]+/],
79
+ ["keyword", /^![a-z]+/],
80
+ ["tag", new RegExp(`^[.#]?${WORD}(?=[^{]*\\{)`)],
81
+ ];
82
+ const JSON_L = [
83
+ ["attr", /^"(?:[^"\\]|\\.)*"(?=\s*:)/],
84
+ ["string", /^"(?:[^"\\]|\\.)*"?/],
85
+ ["literal", kw(`true false null`)],
86
+ ["number", /^-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/],
87
+ ];
88
+ /** 언어 별칭 → 패턴. 언어 미지정/미지원이면 GENERIC(문자열·주석·숫자만) */
89
+ const LANGS = {
90
+ js: C_LIKE,
91
+ jsx: C_LIKE,
92
+ ts: C_LIKE,
93
+ tsx: C_LIKE,
94
+ javascript: C_LIKE,
95
+ typescript: C_LIKE,
96
+ java: C_LIKE,
97
+ c: C_LIKE,
98
+ cpp: C_LIKE,
99
+ cs: C_LIKE,
100
+ go: C_LIKE,
101
+ rust: C_LIKE,
102
+ php: C_LIKE,
103
+ swift: C_LIKE,
104
+ kotlin: C_LIKE,
105
+ py: PYTHON,
106
+ python: PYTHON,
107
+ rb: PYTHON,
108
+ ruby: PYTHON,
109
+ yaml: PYTHON,
110
+ sh: SHELL,
111
+ bash: SHELL,
112
+ shell: SHELL,
113
+ zsh: SHELL,
114
+ html: MARKUP,
115
+ xml: MARKUP,
116
+ vue: MARKUP,
117
+ svelte: MARKUP,
118
+ css: CSS,
119
+ scss: CSS,
120
+ less: CSS,
121
+ json: JSON_L,
122
+ };
123
+ const GENERIC = [
124
+ ["comment", /^\/\/[^\n]*/],
125
+ ["comment", /^\/\*[\s\S]*?\*\//],
126
+ ["comment", /^#[^\n]*/],
127
+ ["string", /^"(?:[^"\\\n]|\\.)*"?/],
128
+ ["string", /^'(?:[^'\\\n]|\\.)*'?/],
129
+ ["string", /^`(?:[^`\\]|\\.)*`?/],
130
+ ["number", /^\b\d+(?:\.\d+)?\b/],
131
+ ];
132
+ /**
133
+ * 내장 하이라이터 — 경량 정규식 토크나이저.
134
+ * 언어가 없거나 미지원이면 GENERIC(주석·문자열·숫자)만 적용한다.
135
+ * 반환 토큰을 이어붙이면 반드시 원문과 같다 (불변 계약 — render가
136
+ * 의존한다).
137
+ */
138
+ export const highlightCode = (code, language) => {
139
+ const rules = LANGS[language ?? ""] ?? GENERIC;
140
+ const out = [];
141
+ let i = 0;
142
+ let plain = "";
143
+ const flush = () => {
144
+ if (plain) {
145
+ out.push({ text: plain });
146
+ plain = "";
147
+ }
148
+ };
149
+ while (i < code.length) {
150
+ const rest = code.slice(i);
151
+ let matched = false;
152
+ for (const [kind, re] of rules) {
153
+ const m = re.exec(rest);
154
+ if (m && m[0].length) {
155
+ flush();
156
+ out.push({ text: m[0], kind });
157
+ i += m[0].length;
158
+ matched = true;
159
+ break;
160
+ }
161
+ }
162
+ if (!matched) {
163
+ plain += code[i];
164
+ i += 1;
165
+ }
166
+ }
167
+ flush();
168
+ return out;
169
+ };
170
+ //# sourceMappingURL=highlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../src/presets/highlight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Extension } from "../editor/extension.js";
2
+ /**
3
+ * 스타터 킷 — 데모/테스트/빠른 시작용 기본 스키마와 커맨드 번들.
4
+ * 제품 코드도 이 구성에서 시작해 확장을 추가하는 것이 관례다.
5
+ *
6
+ * 실제 기능은 features/ 아래 모듈로 나뉘어 있다 — 이 파일은 조립과
7
+ * 공개 심볼 재수출만 담당한다. 새 기능은 features/에 모듈을 추가하고
8
+ * features/index.ts의 starterFeatures()에 등록한다.
9
+ */
10
+ export * from "../features/index.js";
11
+ export { canUndo, canRedo } from "../history.js";
12
+ /** 스타터 확장 집합 — 기능 모듈 + 히스토리 */
13
+ export declare function starterExtensions(): Extension[];
14
+ //# sourceMappingURL=starter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starter.d.ts","sourceRoot":"","sources":["../../src/presets/starter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAIxD;;;;;;;GAOG;AAGH,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEjD,+BAA+B;AAC/B,wBAAgB,iBAAiB,IAAI,SAAS,EAAE,CAE/C"}
@@ -0,0 +1,18 @@
1
+ import { historyExtension } from "../history.js";
2
+ import { starterFeatures } from "../features/index.js";
3
+ /**
4
+ * 스타터 킷 — 데모/테스트/빠른 시작용 기본 스키마와 커맨드 번들.
5
+ * 제품 코드도 이 구성에서 시작해 확장을 추가하는 것이 관례다.
6
+ *
7
+ * 실제 기능은 features/ 아래 모듈로 나뉘어 있다 — 이 파일은 조립과
8
+ * 공개 심볼 재수출만 담당한다. 새 기능은 features/에 모듈을 추가하고
9
+ * features/index.ts의 starterFeatures()에 등록한다.
10
+ */
11
+ // 기능 모듈 전체 재수출 — 기존 presets/starter.js 임포트 경로 호환
12
+ export * from "../features/index.js";
13
+ export { canUndo, canRedo } from "../history.js";
14
+ /** 스타터 확장 집합 — 기능 모듈 + 히스토리 */
15
+ export function starterExtensions() {
16
+ return [...starterFeatures(), historyExtension()];
17
+ }
18
+ //# sourceMappingURL=starter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starter.js","sourceRoot":"","sources":["../../src/presets/starter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;;;;;;GAOG;AAEH,iDAAiD;AACjD,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEjD,+BAA+B;AAC/B,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,GAAG,eAAe,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,64 @@
1
+ import type { DocNode, EditorNode, Mark } from "../model/node.js";
2
+ import type { SplitStep, Step } from "./transaction.js";
3
+ import { pointEq } from "./selection.js";
4
+ import type { Point, Range } from "./selection.js";
5
+ /**
6
+ * Step 적용 엔진 — 순수 함수 (doc, step) → doc.
7
+ *
8
+ * 위치 규약: step의 at.path가 해석되는 노드에 따라 offset 의미가 달라진다.
9
+ * 텍스트 노드 → offset = 문자 오프셋
10
+ * 비텍스트 노드 → offset = 자식 인덱스 (children 사이의 경계)
11
+ * Point와 같은 규약이라 셀렉션 매핑과 일관된다.
12
+ */
13
+ export declare function marksEq(a: readonly Mark[] | undefined, b: readonly Mark[] | undefined): boolean;
14
+ export declare function applyStep(doc: DocNode, step: Step): DocNode;
15
+ /** 텍스트 노드가 range와 겹치는 구간 [s,e) — 겹침 없으면 null */
16
+ export declare function coveredOffsets(node: EditorNode, path: readonly number[], range: Range): {
17
+ s: number;
18
+ e: number;
19
+ } | null;
20
+ /**
21
+ * 마크 range 엔드포인트를 현재 doc 좌표로 재해석한다.
22
+ * 스텝이 기록된 뒤 앞선 스텝(또는 되돌리기 대상 원본)이 텍스트를
23
+ * 분할하면, 예컨대 [2,0]:2..3이 가리키던 "H2O"는 [H2, O]가 되어
24
+ * 엔드포인트가 노드 길이를 넘어선다. 오프셋 초과분을 뒤따르는 텍스트
25
+ * 형제로 넘겨 의미상 같은 위치를 복원한다 — 이게 없으면 removeMark 뒤
26
+ * addMark처럼 같은 범위의 연속 마크 스텝과 부분 범위 마크의 undo가
27
+ * 조용히 무동작한다.
28
+ */
29
+ export declare function resolveMarkPoint(doc: DocNode, p: Point): Point;
30
+ /**
31
+ * 컨테이너 경계 포인트를 가장 가까운 텍스트 리프 포인트로 내린다.
32
+ * {P,k}(자식 k 앞)는 자식 k의 첫 텍스트 시작 — k가 자식 수를 넘으면
33
+ * 마지막 자식의 텍스트 끝. 마크/텍스트 추출처럼 리프 좌표가 필요한
34
+ * 곳에서 element-boundary 셀렉션을 환원할 때 쓴다. 텍스트가 없는
35
+ * 빈 컨테이너나 해석 불가면 원래 포인트를 돌려준다.
36
+ */
37
+ export declare function leafPoint(doc: DocNode, p: Point): Point;
38
+ /**
39
+ * split을 원시 연산 시퀀스로 분해 — apply와 mapPoint가 같은 연산을
40
+ * 공유해 매핑이 어긋나지 않는다.
41
+ * textSplit: 텍스트 노드를 offset에서 둘로
42
+ * nodeSplit: 노드를 자식 index에서 둘로 (attrs 보존)
43
+ */
44
+ export type SplitOp = {
45
+ kind: "text";
46
+ path: readonly number[];
47
+ offset: number;
48
+ } | {
49
+ kind: "node";
50
+ path: readonly number[];
51
+ index: number;
52
+ };
53
+ export declare function computeSplitOps(doc: DocNode, step: SplitStep): SplitOp[];
54
+ /**
55
+ * mapPoint(p, step, docBefore) — PM의 pos mapping과 같은 역할.
56
+ * 셀렉션을 트랜잭션 이후로 넘기는 데 쓴다.
57
+ * 규약: insert는 "왼쪽 편향"(같은 위치의 포인트는 삽입물 앞에 머문다),
58
+ * remove는 범위 안 포인트를 제거 시작점으로 클램프한다.
59
+ */
60
+ export declare function mapPoint(p: Point, step: Step, doc: DocNode): Point;
61
+ declare function pathEq(a: readonly number[], b: readonly number[]): boolean;
62
+ export declare function mapThroughSplitOp(p: Point, op: SplitOp): Point;
63
+ export { pointEq, pathEq };
64
+ //# sourceMappingURL=apply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/state/apply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AASlE,OAAO,KAAK,EAOV,SAAS,EACT,IAAI,EACL,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAY,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;;;GAOG;AAEH,wBAAgB,OAAO,CAAC,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,SAAS,EAAE,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,SAAS,GAAG,OAAO,CAO/F;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAiB3D;AA4ED,gDAAgD;AAChD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,KAAK,EAAE,KAAK,GACX;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAkBjC;AAYD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAe9D;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAmBvD;AAoCD;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,EAAE,CAoBxE;AAoDD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,GAAG,KAAK,CAmBlE;AAED,iBAAS,MAAM,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,EAAE,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAEnE;AAoJD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,GAAG,KAAK,CA6C9D;AAqCD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC"}