@moda-editor/core 0.1.3 → 0.2.0

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 (252) hide show
  1. package/dist/collab.d.ts +61 -0
  2. package/dist/collab.d.ts.map +1 -0
  3. package/dist/collab.js +67 -0
  4. package/dist/collab.js.map +1 -0
  5. package/dist/commands.d.ts +11 -0
  6. package/dist/commands.d.ts.map +1 -1
  7. package/dist/commands.js +48 -4
  8. package/dist/commands.js.map +1 -1
  9. package/dist/conformance/editor-base.d.ts +7 -0
  10. package/dist/conformance/editor-base.d.ts.map +1 -0
  11. package/dist/conformance/editor-base.js +304 -0
  12. package/dist/conformance/editor-base.js.map +1 -0
  13. package/dist/conformance/editor-codeblock.d.ts +8 -0
  14. package/dist/conformance/editor-codeblock.d.ts.map +1 -0
  15. package/dist/conformance/editor-codeblock.js +402 -0
  16. package/dist/conformance/editor-codeblock.js.map +1 -0
  17. package/dist/conformance/editor-ime.d.ts +7 -0
  18. package/dist/conformance/editor-ime.d.ts.map +1 -0
  19. package/dist/conformance/editor-ime.js +166 -0
  20. package/dist/conformance/editor-ime.js.map +1 -0
  21. package/dist/conformance/editor-input.d.ts +8 -0
  22. package/dist/conformance/editor-input.d.ts.map +1 -0
  23. package/dist/conformance/editor-input.js +676 -0
  24. package/dist/conformance/editor-input.js.map +1 -0
  25. package/dist/conformance/editor-nodeview.d.ts +7 -0
  26. package/dist/conformance/editor-nodeview.d.ts.map +1 -0
  27. package/dist/conformance/editor-nodeview.js +169 -0
  28. package/dist/conformance/editor-nodeview.js.map +1 -0
  29. package/dist/conformance/editor-overlay.d.ts +8 -0
  30. package/dist/conformance/editor-overlay.d.ts.map +1 -0
  31. package/dist/conformance/editor-overlay.js +345 -0
  32. package/dist/conformance/editor-overlay.js.map +1 -0
  33. package/dist/conformance/fixtures.d.ts +4 -0
  34. package/dist/conformance/fixtures.d.ts.map +1 -0
  35. package/dist/conformance/fixtures.js +15 -0
  36. package/dist/conformance/fixtures.js.map +1 -0
  37. package/dist/conformance/index.d.ts +14 -0
  38. package/dist/conformance/index.d.ts.map +1 -0
  39. package/dist/conformance/index.js +28 -0
  40. package/dist/conformance/index.js.map +1 -0
  41. package/dist/conformance/types.d.ts +51 -0
  42. package/dist/conformance/types.d.ts.map +1 -0
  43. package/dist/conformance/types.js +2 -0
  44. package/dist/conformance/types.js.map +1 -0
  45. package/dist/conformance/widget.d.ts +3 -0
  46. package/dist/conformance/widget.d.ts.map +1 -0
  47. package/dist/conformance/widget.js +49 -0
  48. package/dist/conformance/widget.js.map +1 -0
  49. package/dist/conformance.d.ts +1 -58
  50. package/dist/conformance.d.ts.map +1 -1
  51. package/dist/conformance.js +3 -1748
  52. package/dist/conformance.js.map +1 -1
  53. package/dist/editor/editor.d.ts.map +1 -1
  54. package/dist/editor/editor.js +18 -1
  55. package/dist/editor/editor.js.map +1 -1
  56. package/dist/editor/extension.d.ts +47 -3
  57. package/dist/editor/extension.d.ts.map +1 -1
  58. package/dist/features/ace.d.ts +4 -0
  59. package/dist/features/ace.d.ts.map +1 -1
  60. package/dist/features/ace.js +59 -20
  61. package/dist/features/ace.js.map +1 -1
  62. package/dist/features/block-dnd.d.ts +7 -0
  63. package/dist/features/block-dnd.d.ts.map +1 -0
  64. package/dist/features/block-dnd.js +207 -0
  65. package/dist/features/block-dnd.js.map +1 -0
  66. package/dist/features/code-block.d.ts +9 -84
  67. package/dist/features/code-block.d.ts.map +1 -1
  68. package/dist/features/code-block.js +84 -1034
  69. package/dist/features/code-block.js.map +1 -1
  70. package/dist/features/code-context.d.ts +81 -0
  71. package/dist/features/code-context.d.ts.map +1 -0
  72. package/dist/features/code-context.js +322 -0
  73. package/dist/features/code-context.js.map +1 -0
  74. package/dist/features/code-edit.d.ts +50 -0
  75. package/dist/features/code-edit.d.ts.map +1 -0
  76. package/dist/features/code-edit.js +412 -0
  77. package/dist/features/code-edit.js.map +1 -0
  78. package/dist/features/code-format.d.ts +21 -0
  79. package/dist/features/code-format.d.ts.map +1 -0
  80. package/dist/features/code-format.js +410 -0
  81. package/dist/features/code-format.js.map +1 -0
  82. package/dist/features/doc.d.ts +16 -0
  83. package/dist/features/doc.d.ts.map +1 -1
  84. package/dist/features/doc.js +154 -2
  85. package/dist/features/doc.js.map +1 -1
  86. package/dist/features/heading.d.ts.map +1 -1
  87. package/dist/features/heading.js.map +1 -1
  88. package/dist/features/image.d.ts +3 -1
  89. package/dist/features/image.d.ts.map +1 -1
  90. package/dist/features/image.js +27 -9
  91. package/dist/features/image.js.map +1 -1
  92. package/dist/features/index.d.ts +7 -0
  93. package/dist/features/index.d.ts.map +1 -1
  94. package/dist/features/index.js +16 -0
  95. package/dist/features/index.js.map +1 -1
  96. package/dist/features/inline-style.d.ts.map +1 -1
  97. package/dist/features/inline-style.js +4 -1
  98. package/dist/features/inline-style.js.map +1 -1
  99. package/dist/features/link.d.ts.map +1 -1
  100. package/dist/features/link.js +1 -1
  101. package/dist/features/link.js.map +1 -1
  102. package/dist/features/markdown.d.ts +15 -0
  103. package/dist/features/markdown.d.ts.map +1 -0
  104. package/dist/features/markdown.js +80 -0
  105. package/dist/features/markdown.js.map +1 -0
  106. package/dist/features/marks.d.ts.map +1 -1
  107. package/dist/features/marks.js +49 -4
  108. package/dist/features/marks.js.map +1 -1
  109. package/dist/features/mention.d.ts +30 -0
  110. package/dist/features/mention.d.ts.map +1 -0
  111. package/dist/features/mention.js +89 -0
  112. package/dist/features/mention.js.map +1 -0
  113. package/dist/features/script.d.ts.map +1 -1
  114. package/dist/features/script.js.map +1 -1
  115. package/dist/features/search.d.ts +76 -0
  116. package/dist/features/search.d.ts.map +1 -0
  117. package/dist/features/search.js +281 -0
  118. package/dist/features/search.js.map +1 -0
  119. package/dist/features/shared.d.ts +69 -0
  120. package/dist/features/shared.d.ts.map +1 -0
  121. package/dist/features/shared.js +272 -0
  122. package/dist/features/shared.js.map +1 -0
  123. package/dist/features/table.d.ts.map +1 -1
  124. package/dist/features/table.js +17 -3
  125. package/dist/features/table.js.map +1 -1
  126. package/dist/features/testkit.d.ts.map +1 -1
  127. package/dist/features/testkit.js +1 -1
  128. package/dist/features/testkit.js.map +1 -1
  129. package/dist/history.d.ts.map +1 -1
  130. package/dist/history.js +65 -20
  131. package/dist/history.js.map +1 -1
  132. package/dist/index.d.ts +21 -7
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +18 -6
  135. package/dist/index.js.map +1 -1
  136. package/dist/model/schema.d.ts.map +1 -1
  137. package/dist/model/schema.js +2 -1
  138. package/dist/model/schema.js.map +1 -1
  139. package/dist/parse/html.d.ts.map +1 -1
  140. package/dist/parse/html.js +38 -6
  141. package/dist/parse/html.js.map +1 -1
  142. package/dist/parse/sanitize.d.ts.map +1 -1
  143. package/dist/parse/sanitize.js +4 -1
  144. package/dist/parse/sanitize.js.map +1 -1
  145. package/dist/presets/highlight.d.ts.map +1 -1
  146. package/dist/presets/highlight.js +1 -4
  147. package/dist/presets/highlight.js.map +1 -1
  148. package/dist/presets/markdown-parse.d.ts +13 -0
  149. package/dist/presets/markdown-parse.d.ts.map +1 -0
  150. package/dist/presets/markdown-parse.js +398 -0
  151. package/dist/presets/markdown-parse.js.map +1 -0
  152. package/dist/presets/markdown.d.ts +46 -0
  153. package/dist/presets/markdown.d.ts.map +1 -0
  154. package/dist/presets/markdown.js +196 -0
  155. package/dist/presets/markdown.js.map +1 -0
  156. package/dist/state/apply.d.ts.map +1 -1
  157. package/dist/state/apply.js +25 -13
  158. package/dist/state/apply.js.map +1 -1
  159. package/dist/state/delete-ops.d.ts +34 -0
  160. package/dist/state/delete-ops.d.ts.map +1 -0
  161. package/dist/state/delete-ops.js +204 -0
  162. package/dist/state/delete-ops.js.map +1 -0
  163. package/dist/state/input-rules.d.ts +30 -0
  164. package/dist/state/input-rules.d.ts.map +1 -0
  165. package/dist/state/input-rules.js +70 -0
  166. package/dist/state/input-rules.js.map +1 -0
  167. package/dist/state/insert-ops.d.ts +54 -0
  168. package/dist/state/insert-ops.d.ts.map +1 -0
  169. package/dist/state/insert-ops.js +186 -0
  170. package/dist/state/insert-ops.js.map +1 -0
  171. package/dist/state/list-ops.d.ts +46 -0
  172. package/dist/state/list-ops.d.ts.map +1 -0
  173. package/dist/state/list-ops.js +231 -0
  174. package/dist/state/list-ops.js.map +1 -0
  175. package/dist/state/navigate.d.ts.map +1 -1
  176. package/dist/state/navigate.js +3 -1
  177. package/dist/state/navigate.js.map +1 -1
  178. package/dist/state/resolve-insert.d.ts +55 -0
  179. package/dist/state/resolve-insert.d.ts.map +1 -0
  180. package/dist/state/resolve-insert.js +118 -0
  181. package/dist/state/resolve-insert.js.map +1 -0
  182. package/dist/state/slice-ops.d.ts +46 -0
  183. package/dist/state/slice-ops.d.ts.map +1 -0
  184. package/dist/state/slice-ops.js +150 -0
  185. package/dist/state/slice-ops.js.map +1 -0
  186. package/dist/state/state.d.ts +6 -1
  187. package/dist/state/state.d.ts.map +1 -1
  188. package/dist/state/state.js +10 -0
  189. package/dist/state/state.js.map +1 -1
  190. package/dist/state/transaction.d.ts +43 -49
  191. package/dist/state/transaction.d.ts.map +1 -1
  192. package/dist/state/transaction.js +62 -858
  193. package/dist/state/transaction.js.map +1 -1
  194. package/dist/styles.css +401 -213
  195. package/dist/theme.d.ts +29 -0
  196. package/dist/theme.d.ts.map +1 -0
  197. package/dist/theme.js +347 -0
  198. package/dist/theme.js.map +1 -0
  199. package/dist/view/adapter.d.ts +84 -0
  200. package/dist/view/adapter.d.ts.map +1 -0
  201. package/dist/view/adapter.js +76 -0
  202. package/dist/view/adapter.js.map +1 -0
  203. package/dist/view/caret.d.ts +25 -0
  204. package/dist/view/caret.d.ts.map +1 -0
  205. package/dist/view/caret.js +43 -0
  206. package/dist/view/caret.js.map +1 -0
  207. package/dist/view/decoration.d.ts +9 -0
  208. package/dist/view/decoration.d.ts.map +1 -0
  209. package/dist/view/decoration.js +214 -0
  210. package/dist/view/decoration.js.map +1 -0
  211. package/dist/view/dirty-keys.d.ts +18 -0
  212. package/dist/view/dirty-keys.d.ts.map +1 -0
  213. package/dist/view/dirty-keys.js +31 -0
  214. package/dist/view/dirty-keys.js.map +1 -0
  215. package/dist/view/dom.d.ts.map +1 -1
  216. package/dist/view/dom.js +7 -5
  217. package/dist/view/dom.js.map +1 -1
  218. package/dist/view/hook-ctx.d.ts +32 -0
  219. package/dist/view/hook-ctx.d.ts.map +1 -0
  220. package/dist/view/hook-ctx.js +64 -0
  221. package/dist/view/hook-ctx.js.map +1 -0
  222. package/dist/view/ime.d.ts +72 -0
  223. package/dist/view/ime.d.ts.map +1 -0
  224. package/dist/view/ime.js +185 -0
  225. package/dist/view/ime.js.map +1 -0
  226. package/dist/view/input.d.ts +12 -12
  227. package/dist/view/input.d.ts.map +1 -1
  228. package/dist/view/input.js +156 -535
  229. package/dist/view/input.js.map +1 -1
  230. package/dist/view/keys.d.ts +25 -0
  231. package/dist/view/keys.d.ts.map +1 -0
  232. package/dist/view/keys.js +106 -0
  233. package/dist/view/keys.js.map +1 -0
  234. package/dist/view/line-nav.d.ts +13 -0
  235. package/dist/view/line-nav.d.ts.map +1 -0
  236. package/dist/view/line-nav.js +114 -0
  237. package/dist/view/line-nav.js.map +1 -0
  238. package/dist/view/mount.d.ts.map +1 -1
  239. package/dist/view/mount.js +43 -39
  240. package/dist/view/mount.js.map +1 -1
  241. package/dist/view/node-selection.d.ts +33 -0
  242. package/dist/view/node-selection.d.ts.map +1 -0
  243. package/dist/view/node-selection.js +107 -0
  244. package/dist/view/node-selection.js.map +1 -0
  245. package/dist/view/render.d.ts +4 -1
  246. package/dist/view/render.d.ts.map +1 -1
  247. package/dist/view/render.js +22 -3
  248. package/dist/view/render.js.map +1 -1
  249. package/dist/view/serialize.d.ts.map +1 -1
  250. package/dist/view/serialize.js +14 -5
  251. package/dist/view/serialize.js.map +1 -1
  252. package/package.json +1 -1
@@ -0,0 +1,207 @@
1
+ import { point } from "../state/selection.js";
2
+ import { defineFeature } from "./feature.js";
3
+ /**
4
+ * 블록 드래그&드롭 — Notion식 블록 재배치.
5
+ *
6
+ * DOM 계약: `.me-editor`의 직계 요소 자식은 doc 루트 블록과 1:1 —
7
+ * 자식 인덱스가 곧 블록 경로다. 최상위 블록만 이동 대상으로 한다
8
+ * (중첩 블록의 리스트/표 내부 재배치는 별개 기능).
9
+ *
10
+ * UI는 .me-editor의 형제 오버레이(.me-dnd)로 그린다 — 편집 DOM 안에
11
+ * 핸들을 넣으면 DOM↔Point 매핑과 IME 경계가 깨진다. 거터 스트립
12
+ * (왼쪽 여백)에만 겹치게 둬 Chrome 캐럿 줄 경계 계산을 지킨다.
13
+ *
14
+ * .me-dnd (pointer-events:none)
15
+ * ├ .me-drag-handle (pointer-events:auto, draggable) — 호버 블록 좌측
16
+ * └ .me-drop-line — dragover 중 삽입 경계 표시
17
+ *
18
+ * 데이터는 "application/x-moda-block" MIME로 나른다 — 파일 드롭
19
+ * (imageFeature의 files 훅)과 섞이지 않게 자기 타입일 때만
20
+ * dragover/drop을 소비한다.
21
+ */
22
+ const MIME = "application/x-moda-block";
23
+ const dndViews = new WeakMap();
24
+ /**
25
+ * 포인터 아래의 최상위 블록 — target에서 올라가 el의 직계 자식을
26
+ * 찾는다. 직계 자식 인덱스 = doc 루트 블록 인덱스 (DOM 계약).
27
+ * 노드 뷰 래퍼(.me-node-view)도 직계 자식이므로 같은 규칙이 성립한다.
28
+ */
29
+ function topBlockAt(el, target) {
30
+ const ElementCtor = el.ownerDocument.defaultView?.Element;
31
+ if (!ElementCtor || !(target instanceof ElementCtor))
32
+ return null;
33
+ let host = target;
34
+ while (host && host.parentElement !== el)
35
+ host = host.parentElement;
36
+ if (!host)
37
+ return null;
38
+ return { host, index: Array.prototype.indexOf.call(el.children, host) };
39
+ }
40
+ /**
41
+ * dragover의 삽입 경계 — 블록 중간선 기준 before/after를 계산한다.
42
+ * to는 "원래 배열의 삽입 경계"(블록 i 앞=i, 뒤=i+1), y는 표시선 위치.
43
+ */
44
+ function dropTargetAt(el, e) {
45
+ const hit = topBlockAt(el, e.target);
46
+ if (!hit)
47
+ return null;
48
+ const r = hit.host.getBoundingClientRect();
49
+ const after = e.clientY > r.top + r.height / 2;
50
+ return { to: hit.index + (after ? 1 : 0), y: after ? r.bottom : r.top };
51
+ }
52
+ /**
53
+ * 오버레이 DOM과 이벤트 리스너를 지연 바인딩한다 — paintOverlay는
54
+ * 렌더 커밋마다 호출되므로 WeakMap으로 한 번만 붙인다.
55
+ */
56
+ function ensureBound(el, editor) {
57
+ const prev = dndViews.get(el);
58
+ if (prev)
59
+ return prev;
60
+ const doc = el.ownerDocument;
61
+ const root = el.parentElement;
62
+ // .me-root 형제로 올라가야 하므로 부모가 없으면 오버레이를 못 둔다
63
+ if (!root)
64
+ return null;
65
+ const overlay = doc.createElement("div");
66
+ overlay.className = "me-dnd";
67
+ overlay.setAttribute("contenteditable", "false");
68
+ const handle = doc.createElement("div");
69
+ handle.className = "me-drag-handle";
70
+ handle.draggable = true;
71
+ handle.title = "드래그해서 블록 이동";
72
+ handle.textContent = "⋮⋮";
73
+ const line = doc.createElement("div");
74
+ line.className = "me-drop-line";
75
+ overlay.append(handle, line);
76
+ root.appendChild(overlay);
77
+ const vs = {
78
+ overlay,
79
+ handle,
80
+ line,
81
+ hover: -1,
82
+ from: null,
83
+ listeners: [],
84
+ };
85
+ const on = (t, type, fn) => {
86
+ t.addEventListener(type, fn);
87
+ vs.listeners.push([t, type, fn]);
88
+ };
89
+ // 블록 위 호버 → 핸들을 그 블록의 왼쪽 거터 자리에 표시한다
90
+ on(el, "mousemove", ((e) => {
91
+ if (vs.from !== null)
92
+ return; // 드래그 중에는 핸들을 감춘 채 둔다
93
+ const hit = topBlockAt(el, e.target);
94
+ if (!hit) {
95
+ vs.hover = -1;
96
+ handle.classList.remove("is-visible");
97
+ return;
98
+ }
99
+ vs.hover = hit.index;
100
+ const r = hit.host.getBoundingClientRect();
101
+ const rr = overlay.getBoundingClientRect();
102
+ handle.style.top = `${r.top - rr.top}px`;
103
+ handle.classList.add("is-visible");
104
+ }));
105
+ on(el, "mouseleave", (() => {
106
+ vs.hover = -1;
107
+ handle.classList.remove("is-visible");
108
+ }));
109
+ on(handle, "dragstart", ((e) => {
110
+ if (vs.hover < 0) {
111
+ e.preventDefault();
112
+ return;
113
+ }
114
+ vs.from = vs.hover;
115
+ e.dataTransfer?.setData(MIME, String(vs.from));
116
+ // effectAllowed가 없으면 일부 브라우저가 drop을 보내지 않는다
117
+ if (e.dataTransfer)
118
+ e.dataTransfer.effectAllowed = "move";
119
+ handle.classList.remove("is-visible");
120
+ }));
121
+ const clearDrag = () => {
122
+ vs.from = null;
123
+ line.classList.remove("is-visible");
124
+ handle.classList.remove("is-visible");
125
+ };
126
+ on(handle, "dragend", clearDrag);
127
+ on(el, "dragover", ((e) => {
128
+ // 우리 MIME이 아니면(파일 드롭 등) 관여하지 않는다
129
+ if (!e.dataTransfer?.types.includes(MIME))
130
+ return;
131
+ const t = dropTargetAt(el, e);
132
+ if (!t)
133
+ return;
134
+ e.preventDefault(); // drop 허용
135
+ if (e.dataTransfer)
136
+ e.dataTransfer.dropEffect = "move";
137
+ const rr = overlay.getBoundingClientRect();
138
+ line.style.top = `${t.y - rr.top}px`;
139
+ line.classList.add("is-visible");
140
+ }));
141
+ on(el, "drop", ((e) => {
142
+ if (!e.dataTransfer?.types.includes(MIME))
143
+ return;
144
+ const t = dropTargetAt(el, e);
145
+ const from = vs.from ?? Number(e.dataTransfer.getData(MIME));
146
+ clearDrag();
147
+ if (!t || !Number.isFinite(from))
148
+ return;
149
+ e.preventDefault();
150
+ editor.commands["moveBlock"](from, t.to);
151
+ }));
152
+ on(el, "dragleave", (() => {
153
+ line.classList.remove("is-visible");
154
+ }));
155
+ dndViews.set(el, vs);
156
+ return vs;
157
+ }
158
+ /**
159
+ * 블록 드래그&드롭 피처 — `moveBlock(from, to)` 커맨드 + 호버 핸들/
160
+ * 드롭 라인 오버레이. `to`는 제거 전 기준 삽입 경계다
161
+ * (예: 블록0을 블록2 뒤로 → moveBlock(0, 3)).
162
+ */
163
+ export const blockDndFeature = defineFeature({
164
+ name: "block-dnd",
165
+ description: "블록 드래그&드롭 — .me-drag-handle로 최상위 블록 재배치 (moveBlock)",
166
+ commands: {
167
+ /**
168
+ * 최상위 블록 from을 경계 to로 이동한다. to는 "원래 배열의 삽입
169
+ * 경계" — 블록 i 앞이 i, 뒤가 i+1. from 제거로 생기는 인덱스
170
+ * 시프트(to>from이면 -1)는 여기서 정규화한다.
171
+ */
172
+ moveBlock(ctx, ...args) {
173
+ const from = args[0];
174
+ const to = args[1];
175
+ if (typeof from !== "number" || typeof to !== "number")
176
+ return false;
177
+ const len = ctx.state.doc.content?.length ?? 0;
178
+ if (from < 0 || from >= len || to < 0 || to > len)
179
+ return false;
180
+ if (to === from || to === from + 1)
181
+ return true; // 제자리 — no-op
182
+ const node = ctx.state.doc.content[from];
183
+ const adj = to > from ? to - 1 : to;
184
+ ctx.tr
185
+ .delete({ anchor: point([], from), focus: point([], from + 1) })
186
+ .insertNode(point([], adj), node);
187
+ ctx.dispatch();
188
+ return true;
189
+ },
190
+ },
191
+ input: {
192
+ paintOverlay(el, _state, editor) {
193
+ ensureBound(el, editor);
194
+ },
195
+ destroyOverlay(el) {
196
+ const vs = dndViews.get(el);
197
+ if (!vs)
198
+ return;
199
+ for (const [t, type, fn] of vs.listeners) {
200
+ t.removeEventListener(type, fn);
201
+ }
202
+ vs.overlay.remove();
203
+ dndViews.delete(el);
204
+ },
205
+ },
206
+ });
207
+ //# sourceMappingURL=block-dnd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block-dnd.js","sourceRoot":"","sources":["../../src/features/block-dnd.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,13 @@
1
1
  import type { Command } from "../editor/extension.js";
2
- import type { EditorNode } from "../model/node.js";
3
- import type { EditorState } from "../state/state.js";
2
+ /**
3
+ * 코드블록 — ` ``` ` 입력 규칙, 구문 하이라이트, Ace/VS Code 관례의
4
+ * 코드 편집 명령(들여쓰기·주석 토글·줄 이동/복제·괄호 매칭·화살표
5
+ * 탈출). 코드 텍스트는 마크 없는 순수 텍스트다.
6
+ *
7
+ * 모듈 구성 — 이 파일은 스키마·블록 변환·크롬 UI·feature 정의만 갖고,
8
+ * 컨텍스트 해석은 code-context.ts, 편집 커맨드는 code-edit.ts,
9
+ * 서식 엔진은 code-format.ts에 있다.
10
+ */
4
11
  /**
5
12
  * 코드블록 — ` ``` ` 입력 규칙, 구문 하이라이트, Ace/VS Code 관례의
6
13
  * 코드 편집 명령(들여쓰기·주석 토글·줄 이동/복제·괄호 매칭·화살표
@@ -20,87 +27,5 @@ export declare function setCodeLanguage(language: string): Command;
20
27
  * 무관하게 특정 블록을 바꿀 때 쓴다.
21
28
  */
22
29
  export declare function setCodeLanguageAt(blockPath: readonly number[], language: string): Command;
23
- /**
24
- * 코드 서식 정리 — 언어 서버 없이 안전한 수준만 한다:
25
- * - 언어가 json이거나(미지정이고 {/[ 로 시작할 때) JSON으로 파싱되면
26
- * 2칸 pretty-print
27
- * - 중괄호 계열(js/ts/java/c/go/rust/php/css…): 브래킷 깊이로
28
- * 재들여쓰기 — 문자열·주석·템플릿·정규식 안의 기호는 세지 않는다
29
- * - 마크업(html/xml/vue/svelte): 태그 깊이로 재들여쓰기
30
- * - 쉘(sh/bash): if/fi·do/done·case/esac·{} 블록으로 재들여쓰기
31
- * - sql: 예약어 대문자화
32
- * - 모든 언어: 줄 끝 공백 제거 + 3개 이상 연속 빈 줄을 2개로 +
33
- * 파일 끝 빈 줄 제거 (EditorConfig/prettier 공통 규칙)
34
- * 들여쓰기 단위는 기존 코드에서 추정하고 없으면 2칸. 줄 구조는 바꾸지
35
- * 않는다 — 선행 공백만 다시 쓰는 수준이라 깨진 코드에서도 안전하다.
36
- * 바뀔 게 없으면 null.
37
- */
38
- export declare function formatCodeText(code: string, language: string): string | null;
39
- /**
40
- * 경로로 지정한 코드블록 서식 정리 — 노드 뷰 크롬 바처럼 캐럿과
41
- * 무관하게 특정 블록을 정리할 때 쓴다. 이 블록 안의 셀렉션
42
- * 엔드포인트는 새 텍스트 길이로 클램프해 보존한다.
43
- */
44
- export declare function formatCodeAt(blockPath: readonly number[]): Command;
45
- /** 캐럿 코드블록 서식 정리 — Shift-Alt-F/정리 버튼 (VS Code 관례) */
46
- export declare const formatCode: Command;
47
- /**
48
- * 문자열/주석 토큰 안의 문자 오프셋 판정 — spec.codeHighlighter로
49
- * 토큰화해 그 구간에 있으면 true를 돌린다 (Ace가 페어링·매칭을
50
- * 끌 때 쓰는 isCodeLike 관례). 하이라이터가 없으면 null.
51
- */
52
- export declare function codeStringMask(state: EditorState, block: EditorNode): ((off: number) => boolean) | null;
53
- /**
54
- * Tab — 코드블록 들여쓰기. collapsed면 캐럿에 \t 삽입,
55
- * 범위 선택이면 걸친 줄 전부의 앞에 \t를 단다 (VS Code 관례).
56
- * 코드블록 밖이면 false — 리스트/표 키바인딩으로 폴스루.
57
- */
58
- export declare const indentCode: Command;
59
- /**
60
- * Shift-Tab — 코드블록 내어쓰기. 걸친 각 줄의 앞에서 \t 하나 또는
61
- * 스페이스 최대 tabSize개를 지운다. 코드블록 밖이면 false로 폴스루.
62
- */
63
- export declare const dedentCode: Command;
64
- /**
65
- * ArrowDown/ArrowUp — 코드블록 가장자리 줄 탈출 (Tiptap
66
- * exitOnArrowDown/Up 관례). 마지막 줄에서 ArrowDown을 누르면 블록
67
- * 뒤로, 첫 줄에서 ArrowUp이면 블록 앞으로 나간다 — 이웃 블록이
68
- * 없으면 빈 문단을 만든다. Notion의 코드블록 화살표 탈출과 같다.
69
- */
70
- export declare function exitCodeArrow(direction: "up" | "down"): Command;
71
- /** 캐럿 코드블록의 텍스트 — 복사 버튼 등 UI용. 밖이면 null */
72
- export declare function codeTextAt(state: EditorState): string | null;
73
- /** 코드블록 안 캐럿의 줄/열 (Ace 상태바 Ln:Col 관례). 밖이면 null */
74
- export declare function codeCaret(state: EditorState): {
75
- line: number;
76
- col: number;
77
- } | null;
78
- /**
79
- * Mod-/ — 코드블록 줄 주석 토글 (Ace toggleCommentLines 관례).
80
- * 걸친 줄이 전부 주석이면 해제, 아니면 주석을 단다 — 마커는
81
- * 선행 공백 뒤에 붙어 들여쓰기가 보존된다 (VS Code 관례).
82
- * 블록 주석 언어(css/html 등)는 줄마다 블록 마커로 감싼다.
83
- */
84
- export declare const toggleCodeComment: Command;
85
- /**
86
- * Alt-↑/↓ — 선택이 걸친 줄들을 위/아래 한 줄 이동 (Ace movelines·
87
- * VS Code 관례). 첫/마지막 줄 가장자리에선 false로 폴스루한다.
88
- */
89
- export declare function moveCodeLines(direction: "up" | "down"): Command;
90
- /**
91
- * Mod-Shift-D — 선택이 걸친 줄들을 바로 아래에 복제
92
- * (Ace duplicateSelection 관례). 사본이 선택된다.
93
- */
94
- export declare const duplicateCodeLines: Command;
95
- /**
96
- * 캐럿 인접 괄호와 짝의 문자 오프셋 (Ace bracket matching 관례).
97
- * 캐럿 앞/뒤의 ()[]{}를 보고 같은 종류만 세는 깊이 스캔으로 짝을
98
- * 찾는다 — 문자열/주석 토큰 안쪽의 괄호는 코드로 세지 않는다.
99
- * 없으면 null.
100
- */
101
- export declare function codeBracketAt(state: EditorState): {
102
- a: number;
103
- b: number;
104
- } | null;
105
30
  export declare const codeBlockFeature: import("./feature.js").Feature;
106
31
  //# sourceMappingURL=code-block.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"code-block.d.ts","sourceRoot":"","sources":["../../src/features/code-block.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAUnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAerD;;;;GAIG;AAIH;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,OA6C7B,CAAC;AAEF,uDAAuD;AACvD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAUzD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,QAAQ,EAAE,MAAM,GACf,OAAO,CAQT;AAsQD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAgCf;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAgClE;AAED,qDAAqD;AACrD,eAAO,MAAM,UAAU,EAAE,OAIxB,CAAC;AAqJF;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,UAAU,GAChB,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,IAAI,CAwBnC;AAgBD;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,OAyCxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,OA0CxB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAkC/D;AAED,2CAA2C;AAC3C,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAG5D;AAED,mDAAmD;AACnD,wBAAgB,SAAS,CACvB,KAAK,EAAE,WAAW,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMtC;AAqFD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAsH/B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAyD/D;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,OAsBhC,CAAC;AASF;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,WAAW,GACjB;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAwCjC;AAiJD,eAAO,MAAM,gBAAgB,gCAuT3B,CAAC"}
1
+ {"version":3,"file":"code-block.d.ts","sourceRoot":"","sources":["../../src/features/code-block.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAkCtD;;;;;;;;GAQG;AAEH;;;;GAIG;AAIH;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,OAmE7B,CAAC;AAEF,uDAAuD;AACvD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAazD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,QAAQ,EAAE,MAAM,GACf,OAAO,CAQT;AAsJD,eAAO,MAAM,gBAAgB,gCA8U3B,CAAC"}