quoin-editor 0.4.1 → 1.0.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 (231) hide show
  1. package/CHANGELOG.md +205 -0
  2. package/MIGRATION.md +233 -0
  3. package/README.md +78 -715
  4. package/dist/ai.cjs +1107 -0
  5. package/dist/ai.cjs.map +1 -0
  6. package/dist/ai.d.cts +68 -0
  7. package/dist/ai.d.ts +68 -0
  8. package/dist/ai.js +1107 -0
  9. package/dist/ai.js.map +1 -0
  10. package/dist/catalogue.cjs +59 -0
  11. package/dist/catalogue.cjs.map +1 -0
  12. package/dist/catalogue.d.cts +39 -0
  13. package/dist/catalogue.d.ts +39 -0
  14. package/dist/catalogue.js +59 -0
  15. package/dist/catalogue.js.map +1 -0
  16. package/dist/chunk-2QCRZ7OL.cjs +319 -0
  17. package/dist/chunk-2QCRZ7OL.cjs.map +1 -0
  18. package/dist/chunk-2VDK27IF.cjs +6666 -0
  19. package/dist/chunk-2VDK27IF.cjs.map +1 -0
  20. package/dist/chunk-47MLKSI2.js +326 -0
  21. package/dist/chunk-47MLKSI2.js.map +1 -0
  22. package/dist/chunk-5DNCCN6X.cjs +326 -0
  23. package/dist/chunk-5DNCCN6X.cjs.map +1 -0
  24. package/dist/chunk-AEJXZBVR.cjs +1378 -0
  25. package/dist/chunk-AEJXZBVR.cjs.map +1 -0
  26. package/dist/chunk-CDELOHDY.cjs +239 -0
  27. package/dist/chunk-CDELOHDY.cjs.map +1 -0
  28. package/dist/chunk-E75EHRPA.cjs +175 -0
  29. package/dist/chunk-E75EHRPA.cjs.map +1 -0
  30. package/dist/chunk-EL2OEJQC.cjs +562 -0
  31. package/dist/chunk-EL2OEJQC.cjs.map +1 -0
  32. package/dist/chunk-GLLXHMH2.cjs +25 -0
  33. package/dist/chunk-GLLXHMH2.cjs.map +1 -0
  34. package/dist/chunk-GTTPVJSD.cjs +3286 -0
  35. package/dist/chunk-GTTPVJSD.cjs.map +1 -0
  36. package/dist/chunk-HELJTLNC.cjs +100 -0
  37. package/dist/chunk-HELJTLNC.cjs.map +1 -0
  38. package/dist/chunk-HJIQT3S5.js +4047 -0
  39. package/dist/chunk-HJIQT3S5.js.map +1 -0
  40. package/dist/chunk-HZSSEYJS.cjs +504 -0
  41. package/dist/chunk-HZSSEYJS.cjs.map +1 -0
  42. package/dist/chunk-JDPTZUBW.js +184 -0
  43. package/dist/chunk-JDPTZUBW.js.map +1 -0
  44. package/dist/chunk-JEIFJHEI.js +14 -0
  45. package/dist/chunk-JEIFJHEI.js.map +1 -0
  46. package/dist/chunk-K574XHMM.js +25 -0
  47. package/dist/chunk-K574XHMM.js.map +1 -0
  48. package/dist/chunk-KAVU6T6J.js +249 -0
  49. package/dist/chunk-KAVU6T6J.js.map +1 -0
  50. package/dist/chunk-KXOBZGQO.js +1378 -0
  51. package/dist/chunk-KXOBZGQO.js.map +1 -0
  52. package/dist/chunk-LCQSG4M6.js +3335 -0
  53. package/dist/chunk-LCQSG4M6.js.map +1 -0
  54. package/dist/chunk-MQ2XQ4MX.js +100 -0
  55. package/dist/chunk-MQ2XQ4MX.js.map +1 -0
  56. package/dist/chunk-ND5XJVK2.cjs +3335 -0
  57. package/dist/chunk-ND5XJVK2.cjs.map +1 -0
  58. package/dist/chunk-NNDYYEW5.js +504 -0
  59. package/dist/chunk-NNDYYEW5.js.map +1 -0
  60. package/dist/chunk-NOKWNK2O.js +319 -0
  61. package/dist/chunk-NOKWNK2O.js.map +1 -0
  62. package/dist/chunk-OMOBMXD5.cjs +57 -0
  63. package/dist/chunk-OMOBMXD5.cjs.map +1 -0
  64. package/dist/chunk-PMWCQSQX.js +239 -0
  65. package/dist/chunk-PMWCQSQX.js.map +1 -0
  66. package/dist/chunk-POBM7MGR.js +30 -0
  67. package/dist/chunk-POBM7MGR.js.map +1 -0
  68. package/dist/chunk-PWUEPDA3.cjs +598 -0
  69. package/dist/chunk-PWUEPDA3.cjs.map +1 -0
  70. package/dist/chunk-PZ4GT5JO.cjs +4047 -0
  71. package/dist/chunk-PZ4GT5JO.cjs.map +1 -0
  72. package/dist/chunk-QAW5NH6S.cjs +14 -0
  73. package/dist/chunk-QAW5NH6S.cjs.map +1 -0
  74. package/dist/chunk-RDG4VI6E.cjs +706 -0
  75. package/dist/chunk-RDG4VI6E.cjs.map +1 -0
  76. package/dist/chunk-RUDWMKYX.js +562 -0
  77. package/dist/chunk-RUDWMKYX.js.map +1 -0
  78. package/dist/chunk-SG37UBDO.js +706 -0
  79. package/dist/chunk-SG37UBDO.js.map +1 -0
  80. package/dist/chunk-SLVDAHHK.cjs +30 -0
  81. package/dist/chunk-SLVDAHHK.cjs.map +1 -0
  82. package/dist/chunk-T7SW6OWV.js +598 -0
  83. package/dist/chunk-T7SW6OWV.js.map +1 -0
  84. package/dist/chunk-TC4DARU2.js +175 -0
  85. package/dist/chunk-TC4DARU2.js.map +1 -0
  86. package/dist/chunk-WQHV3MRE.cjs +184 -0
  87. package/dist/chunk-WQHV3MRE.cjs.map +1 -0
  88. package/dist/chunk-WXMYDXPN.cjs +33 -0
  89. package/dist/chunk-WXMYDXPN.cjs.map +1 -0
  90. package/dist/chunk-XEBWC7ZL.js +57 -0
  91. package/dist/chunk-XEBWC7ZL.js.map +1 -0
  92. package/dist/chunk-ZC24WB7Y.cjs +249 -0
  93. package/dist/chunk-ZC24WB7Y.cjs.map +1 -0
  94. package/dist/chunk-ZGZEJCRV.js +6666 -0
  95. package/dist/chunk-ZGZEJCRV.js.map +1 -0
  96. package/dist/chunk-ZHOSSWUM.js +33 -0
  97. package/dist/chunk-ZHOSSWUM.js.map +1 -0
  98. package/dist/chunk-ZS2WA357.js +3286 -0
  99. package/dist/chunk-ZS2WA357.js.map +1 -0
  100. package/dist/comments.cjs +993 -0
  101. package/dist/comments.cjs.map +1 -0
  102. package/dist/comments.d.cts +88 -0
  103. package/dist/comments.d.ts +88 -0
  104. package/dist/comments.js +993 -0
  105. package/dist/comments.js.map +1 -0
  106. package/dist/diff.cjs +343 -0
  107. package/dist/diff.cjs.map +1 -0
  108. package/dist/diff.d.cts +67 -0
  109. package/dist/diff.d.ts +67 -0
  110. package/dist/diff.js +343 -0
  111. package/dist/diff.js.map +1 -0
  112. package/dist/docx.cjs +854 -0
  113. package/dist/docx.cjs.map +1 -0
  114. package/dist/docx.d.cts +27 -0
  115. package/dist/docx.d.ts +27 -0
  116. package/dist/docx.js +854 -0
  117. package/dist/docx.js.map +1 -0
  118. package/dist/embed-provider-jXwlRmnp.d.cts +19 -0
  119. package/dist/embed-provider-jXwlRmnp.d.ts +19 -0
  120. package/dist/embed.cjs +17 -0
  121. package/dist/embed.cjs.map +1 -0
  122. package/dist/embed.d.cts +56 -0
  123. package/dist/embed.d.ts +56 -0
  124. package/dist/embed.js +17 -0
  125. package/dist/embed.js.map +1 -0
  126. package/dist/emoji-data.cjs +1968 -0
  127. package/dist/emoji-data.cjs.map +1 -0
  128. package/dist/emoji-data.js +1968 -0
  129. package/dist/emoji-data.js.map +1 -0
  130. package/dist/emoji-extension-C12gDPm6.d.cts +46 -0
  131. package/dist/emoji-extension-DpQ43HjE.d.ts +46 -0
  132. package/dist/emoji.cjs +18 -0
  133. package/dist/emoji.cjs.map +1 -0
  134. package/dist/emoji.d.cts +31 -0
  135. package/dist/emoji.d.ts +31 -0
  136. package/dist/emoji.js +18 -0
  137. package/dist/emoji.js.map +1 -0
  138. package/dist/engine.cjs +119 -0
  139. package/dist/engine.cjs.map +1 -0
  140. package/dist/engine.d.cts +144 -0
  141. package/dist/engine.d.ts +144 -0
  142. package/dist/engine.js +119 -0
  143. package/dist/engine.js.map +1 -0
  144. package/dist/find-extension-DKqLLSuP.d.ts +41 -0
  145. package/dist/find-extension-_sbZEt3R.d.cts +41 -0
  146. package/dist/find.cjs +20 -0
  147. package/dist/find.cjs.map +1 -0
  148. package/dist/find.d.cts +44 -0
  149. package/dist/find.d.ts +44 -0
  150. package/dist/find.js +20 -0
  151. package/dist/find.js.map +1 -0
  152. package/dist/headless.cjs +151 -518
  153. package/dist/headless.cjs.map +1 -1
  154. package/dist/headless.d.cts +102 -69
  155. package/dist/headless.d.ts +102 -69
  156. package/dist/headless.js +149 -467
  157. package/dist/headless.js.map +1 -1
  158. package/dist/index-CgD72kHB.d.cts +65 -0
  159. package/dist/index-DNYbTK3w.d.ts +65 -0
  160. package/dist/index.cjs +183 -2753
  161. package/dist/index.cjs.map +1 -1
  162. package/dist/index.d.cts +345 -253
  163. package/dist/index.d.ts +345 -253
  164. package/dist/index.js +168 -2696
  165. package/dist/index.js.map +1 -1
  166. package/dist/math.cjs +18 -0
  167. package/dist/math.cjs.map +1 -0
  168. package/dist/math.d.cts +49 -0
  169. package/dist/math.d.ts +49 -0
  170. package/dist/math.js +18 -0
  171. package/dist/math.js.map +1 -0
  172. package/dist/mention.cjs +18 -0
  173. package/dist/mention.cjs.map +1 -0
  174. package/dist/mention.d.cts +50 -0
  175. package/dist/mention.d.ts +50 -0
  176. package/dist/mention.js +18 -0
  177. package/dist/mention.js.map +1 -0
  178. package/dist/presence.cjs +565 -0
  179. package/dist/presence.cjs.map +1 -0
  180. package/dist/presence.d.cts +30 -0
  181. package/dist/presence.d.ts +30 -0
  182. package/dist/presence.js +565 -0
  183. package/dist/presence.js.map +1 -0
  184. package/dist/registry-CWBOSAHm.d.cts +121 -0
  185. package/dist/registry-CWBOSAHm.d.ts +121 -0
  186. package/dist/stats-extension-Bly88uio.d.ts +40 -0
  187. package/dist/stats-extension-CJPijvUb.d.cts +40 -0
  188. package/dist/stats.cjs +19 -0
  189. package/dist/stats.cjs.map +1 -0
  190. package/dist/stats.d.cts +19 -0
  191. package/dist/stats.d.ts +19 -0
  192. package/dist/stats.js +19 -0
  193. package/dist/stats.js.map +1 -0
  194. package/dist/styles.css +1 -1
  195. package/dist/table-extension-BTLxFy2S.d.cts +57 -0
  196. package/dist/table-extension-Dzf4k6hI.d.ts +57 -0
  197. package/dist/table.cjs +50 -0
  198. package/dist/table.cjs.map +1 -0
  199. package/dist/table.d.cts +57 -0
  200. package/dist/table.d.ts +57 -0
  201. package/dist/table.js +50 -0
  202. package/dist/table.js.map +1 -0
  203. package/dist/to-html-C5t7xyaM.d.ts +21 -0
  204. package/dist/to-html-CNCITCln.d.cts +21 -0
  205. package/dist/toc-extension-B3-s6h2x.d.cts +25 -0
  206. package/dist/toc-extension-DWm5alVj.d.ts +25 -0
  207. package/dist/toc.cjs +18 -0
  208. package/dist/toc.cjs.map +1 -0
  209. package/dist/toc.d.cts +24 -0
  210. package/dist/toc.d.ts +24 -0
  211. package/dist/toc.js +18 -0
  212. package/dist/toc.js.map +1 -0
  213. package/dist/types-Cz7XJLaK.d.cts +366 -0
  214. package/dist/types-DULc8wwg.d.cts +120 -0
  215. package/dist/types-DULc8wwg.d.ts +120 -0
  216. package/dist/types-a1CRBlEh.d.ts +366 -0
  217. package/dist/view-controller-DSHw0ltQ.d.cts +118 -0
  218. package/dist/view-controller-UbpzblGl.d.ts +118 -0
  219. package/dist/view.cjs +23 -0
  220. package/dist/view.cjs.map +1 -0
  221. package/dist/view.d.cts +40 -0
  222. package/dist/view.d.ts +40 -0
  223. package/dist/view.js +23 -0
  224. package/dist/view.js.map +1 -0
  225. package/dist/yjs.cjs +1026 -0
  226. package/dist/yjs.cjs.map +1 -0
  227. package/dist/yjs.d.cts +22 -0
  228. package/dist/yjs.d.ts +22 -0
  229. package/dist/yjs.js +1026 -0
  230. package/dist/yjs.js.map +1 -0
  231. package/package.json +219 -20
package/dist/headless.js CHANGED
@@ -1,470 +1,152 @@
1
- // src/markdown/edit.ts
2
- function changedSpan(before, after) {
3
- let start = 0;
4
- const shortest = Math.min(before.length, after.length);
5
- while (start < shortest && before[start] === after[start]) start += 1;
6
- let endBefore = before.length;
7
- let endAfter = after.length;
8
- while (endBefore > start && endAfter > start && before[endBefore - 1] === after[endAfter - 1]) {
9
- endBefore -= 1;
10
- endAfter -= 1;
11
- }
12
- return { start, endBefore, replacement: after.slice(start, endAfter) };
13
- }
14
- function writeNatively(el, replacement) {
15
- if (typeof document.execCommand !== "function") return false;
16
- try {
17
- return replacement === "" ? document.execCommand("delete") : document.execCommand("insertText", false, replacement);
18
- } catch {
19
- return false;
20
- }
21
- }
22
- function applyEdit(el, edit, commit) {
23
- if (el.value !== edit.value) {
24
- const { start, endBefore, replacement } = changedSpan(el.value, edit.value);
25
- el.setSelectionRange(start, endBefore);
26
- if (!writeNatively(el, replacement)) {
27
- el.value = edit.value;
28
- }
29
- commit(el.value);
30
- }
31
- el.setSelectionRange(edit.selectionStart, edit.selectionEnd);
32
- }
33
-
34
- // src/markdown/line-at.ts
35
- var FENCE = /^ {0,3}(```|~~~)/;
36
- function lineAt(value, offset) {
37
- const start = value.lastIndexOf("\n", offset - 1) + 1;
38
- const next = value.indexOf("\n", offset);
39
- const end = next === -1 ? value.length : next;
40
- return { start, end, text: value.slice(start, end) };
41
- }
42
- function isFenceDelimiter(text) {
43
- return FENCE.test(text);
44
- }
45
- function insideFence(value, offset) {
46
- const lines = value.slice(0, offset).split("\n");
47
- if (isFenceDelimiter(lines[lines.length - 1])) return true;
48
- let open = false;
49
- for (let i = 0; i < lines.length - 1; i += 1) {
50
- if (isFenceDelimiter(lines[i])) open = !open;
51
- }
52
- return open;
53
- }
54
-
55
- // src/markdown/line-toggles.ts
56
- var EXISTING = /^(\s*)(?:#{1,6} |[-*+] \[[ xX]\] |[-*+] |\d+[.)] )?/;
57
- var PREFIX = {
58
- h1: () => "# ",
59
- h2: () => "## ",
60
- h3: () => "### ",
61
- bullet: () => "- ",
62
- ordered: (index) => `${index + 1}. `
63
- };
64
- var CARRIES = {
65
- h1: /^\s*# /,
66
- h2: /^\s*## /,
67
- h3: /^\s*### /,
68
- bullet: /^\s*[-*+] /,
69
- ordered: /^\s*\d+[.)] /
70
- };
71
- function toggleLinePrefix(kind, value, selectionStart, selectionEnd) {
72
- const first = lineAt(value, selectionStart);
73
- const last = lineAt(value, selectionEnd);
74
- const block = value.slice(first.start, last.end);
75
- const lines = block.split("\n");
76
- let offset = first.start;
77
- const eligible = lines.map((text) => {
78
- const at = offset;
79
- offset += text.length + 1;
80
- return !insideFence(value, at) && !isFenceDelimiter(text);
81
- });
82
- const carried = lines.every((text, i) => !eligible[i] || CARRIES[kind].test(text));
83
- const rewritten = lines.map((text, i) => {
84
- if (!eligible[i]) return text;
85
- const match = EXISTING.exec(text);
86
- const indent = match?.[1] ?? "";
87
- const body = text.slice(match?.[0].length ?? 0);
88
- return carried ? indent + body : indent + PREFIX[kind](i) + body;
89
- });
90
- const joined = rewritten.join("\n");
91
- const next = value.slice(0, first.start) + joined + value.slice(last.end);
92
- if (selectionStart !== selectionEnd) {
93
- return { value: next, selectionStart: first.start, selectionEnd: first.start + joined.length };
94
- }
95
- const caret = Math.max(first.start, selectionStart + (rewritten[0].length - lines[0].length));
96
- return { value: next, selectionStart: caret, selectionEnd: caret };
97
- }
98
-
99
- // src/markdown/list-continuation.ts
100
- var LIST_MARKER = /^(\s*)((?:[-*+] \[[ xX]\] )|(?:[-*+] )|(?:\d+[.)] )|(?:> ))(.*)$/;
101
- var INDENT = " ";
102
- function nextMarker(marker) {
103
- const ordered = /^(\d+)([.)] )$/.exec(marker);
104
- if (ordered) return `${Number(ordered[1]) + 1}${ordered[2]}`;
105
- const task = /^([-*+]) \[[ xX]\] $/.exec(marker);
106
- if (task) return `${task[1]} [ ] `;
107
- return marker;
108
- }
109
- function climbOut(value, line, indent, marker, content) {
110
- const outdent = indent.length >= INDENT.length;
111
- if (outdent) {
112
- const text2 = indent.slice(INDENT.length) + marker + content;
113
- const at2 = line.start + indent.length - INDENT.length + marker.length;
114
- return {
115
- value: value.slice(0, line.start) + text2 + value.slice(line.end),
116
- selectionStart: at2,
117
- selectionEnd: at2
118
- };
119
- }
120
- const leavesList = line.start > 0 && LIST_MARKER.test(lineAt(value, line.start - 1).text);
121
- const text = leavesList ? `
122
- ${content}` : content;
123
- const at = leavesList ? line.start + 1 : line.start;
124
- return {
125
- value: value.slice(0, line.start) + text + value.slice(line.end),
126
- selectionStart: at,
127
- selectionEnd: at
128
- };
129
- }
130
- function continueList(value, caret, key) {
131
- if (insideFence(value, caret)) return null;
132
- const line = lineAt(value, caret);
133
- const match = LIST_MARKER.exec(line.text);
134
- if (!match) return null;
135
- const [, indent, marker, content] = match;
136
- if (key === "Backspace") {
137
- if (caret !== line.start + indent.length + marker.length) return null;
138
- return climbOut(value, line, indent, marker, content);
139
- }
140
- if (content.trim() === "") return climbOut(value, line, indent, marker, content);
141
- const inserted = `
142
- ${indent}${nextMarker(marker)}`;
143
- const at = caret + inserted.length;
144
- return {
145
- value: value.slice(0, caret) + inserted + value.slice(caret),
146
- selectionStart: at,
147
- selectionEnd: at
148
- };
149
- }
150
-
151
- // src/markdown/indent-list.ts
152
- var INDENT2 = " ";
153
- function indentOf(text) {
154
- return /^\s*/.exec(text)?.[0].length ?? 0;
155
- }
156
- function shift(text, direction, cap) {
157
- const current = indentOf(text);
158
- if (direction === -1) return text.slice(Math.min(current, INDENT2.length));
159
- if (cap !== void 0 && current >= cap + INDENT2.length) return text;
160
- return INDENT2 + text;
161
- }
162
- function indentList(value, selectionStart, selectionEnd, direction) {
163
- if (insideFence(value, selectionStart)) return null;
164
- const first = lineAt(value, selectionStart);
165
- const last = lineAt(value, selectionEnd);
166
- const block = value.slice(first.start, last.end);
167
- const lines = block.split("\n");
168
- if (!lines.every((text) => LIST_MARKER.test(text))) return null;
169
- const cap = first.start === 0 ? 0 : indentOf(lineAt(value, first.start - 1).text);
170
- const shifted = lines.map((text, i) => shift(text, direction, i === 0 ? cap : void 0));
171
- if (shifted.every((text, i) => text === lines[i])) return null;
172
- const joined = shifted.join("\n");
173
- return {
174
- value: value.slice(0, first.start) + joined + value.slice(last.end),
175
- selectionStart: selectionStart + (shifted[0].length - lines[0].length),
176
- selectionEnd: selectionEnd + (joined.length - block.length)
177
- };
178
- }
179
-
180
- // src/markdown/wrap-selection.ts
181
- var DELIMITER = {
182
- bold: "**",
183
- italic: "_",
184
- code: "`"
185
- };
186
- var WHOLE_LINK = /^\[([^\]]*)\]\(([^)]*)\)$/;
187
- var BARE_URL = /^https?:\/\/[^\s]+$/;
188
- function unwrap(value, start, end, delimiter) {
189
- const selected = value.slice(start, end);
190
- const width = delimiter.length;
191
- if (selected.length >= 2 * width && selected.startsWith(delimiter) && selected.endsWith(delimiter)) {
192
- const inner = selected.slice(width, selected.length - width);
193
- return {
194
- value: value.slice(0, start) + inner + value.slice(end),
195
- selectionStart: start,
196
- selectionEnd: start + inner.length
197
- };
198
- }
199
- const outside = start >= width && value.slice(start - width, start) === delimiter && value.slice(end, end + width) === delimiter;
200
- if (!outside) return null;
201
- return {
202
- value: value.slice(0, start - width) + selected + value.slice(end + width),
203
- selectionStart: start - width,
204
- selectionEnd: start - width + selected.length
205
- };
206
- }
207
- function link(value, start, end) {
208
- const selected = value.slice(start, end);
209
- const whole = WHOLE_LINK.exec(selected);
210
- if (whole) {
211
- const text = whole[1];
212
- return {
213
- value: value.slice(0, start) + text + value.slice(end),
214
- selectionStart: start,
215
- selectionEnd: start + text.length
216
- };
217
- }
218
- const opened = `[${selected}](`;
219
- const at = selected === "" ? start + 1 : start + opened.length;
220
- return {
221
- value: value.slice(0, start) + opened + ")" + value.slice(end),
222
- selectionStart: at,
223
- selectionEnd: at
224
- };
225
- }
226
- function wrapSelection(kind, value, selectionStart, selectionEnd) {
227
- if (kind === "link") return link(value, selectionStart, selectionEnd);
228
- const delimiter = DELIMITER[kind];
229
- const stripped = unwrap(value, selectionStart, selectionEnd, delimiter);
230
- if (stripped) return stripped;
231
- const selected = value.slice(selectionStart, selectionEnd);
232
- if (kind === "code" && selected.includes("\n")) {
233
- const at2 = selectionStart + 4;
234
- return {
235
- value: value.slice(0, selectionStart) + "```\n" + selected + "\n```" + value.slice(selectionEnd),
236
- selectionStart: at2,
237
- selectionEnd: at2 + selected.length
238
- };
239
- }
240
- const at = selectionStart + delimiter.length;
241
- return {
242
- value: value.slice(0, selectionStart) + delimiter + selected + delimiter + value.slice(selectionEnd),
243
- selectionStart: at,
244
- selectionEnd: at + selected.length
245
- };
246
- }
247
- function linkPaste(value, selectionStart, selectionEnd, pasted) {
248
- if (selectionStart === selectionEnd) return null;
249
- const url = pasted.trim();
250
- if (!BARE_URL.test(url)) return null;
251
- const inserted = `[${value.slice(selectionStart, selectionEnd)}](${url})`;
252
- const at = selectionStart + inserted.length;
253
- return {
254
- value: value.slice(0, selectionStart) + inserted + value.slice(selectionEnd),
255
- selectionStart: at,
256
- selectionEnd: at
257
- };
258
- }
259
-
260
- // src/markdown/insert-command.ts
261
- function insertCommand(command, value, caret) {
262
- const line = lineAt(value, caret);
263
- const before = value.slice(line.start, caret).replace(/[ \t]+$/, "");
264
- const cut = line.start + before.length;
265
- const prefix = before.trim() === "" ? "" : command.separate ? "\n\n" : "\n";
266
- const at = cut + prefix.length + command.caretOffset;
267
- return {
268
- value: value.slice(0, cut) + prefix + command.insert + value.slice(caret),
269
- selectionStart: at,
270
- selectionEnd: at + (command.selectLength ?? 0)
271
- };
272
- }
273
-
274
- // src/markdown/slash-trigger.ts
275
- function shouldOpenPalette(value, selectionStart, selectionEnd) {
276
- if (selectionStart !== selectionEnd) return false;
277
- if (insideFence(value, selectionStart)) return false;
278
- if (selectionStart === 0) return true;
279
- const previous = value[selectionStart - 1];
280
- return previous === "\n" || previous === " " || previous === " ";
281
- }
282
-
283
- // src/markdown/platform.ts
284
- function isMac() {
285
- if (typeof navigator === "undefined") return false;
286
- const { userAgentData, platform } = navigator;
287
- return /mac|iphone|ipad/i.test(userAgentData?.platform || platform || "");
288
- }
289
-
290
- // src/markdown/shortcut-label.ts
291
- var MAC_LABEL = { mod: "\u2318", alt: "\u2325", shift: "\u21E7" };
292
- var OTHER_LABEL = { mod: "Ctrl", alt: "Alt", shift: "Shift" };
293
- function formatShortcut(hint) {
294
- const mac = isMac();
295
- const labels = mac ? MAC_LABEL : OTHER_LABEL;
296
- const parts = hint.split("+").map((part) => labels[part] ?? part.toUpperCase());
297
- return parts.join(mac ? "" : "+");
298
- }
299
-
300
- // src/markdown/caret-coordinates.ts
301
- var COPIED = [
302
- "boxSizing",
303
- "fontFamily",
304
- "fontSize",
305
- "fontStyle",
306
- "fontWeight",
307
- "letterSpacing",
308
- "lineHeight",
309
- "paddingBottom",
310
- "paddingLeft",
311
- "paddingRight",
312
- "paddingTop",
313
- "textIndent",
314
- "textTransform",
315
- "wordBreak",
316
- "wordSpacing",
317
- "borderBottomWidth",
318
- "borderLeftWidth",
319
- "borderRightWidth",
320
- "borderTopWidth"
321
- ];
322
- function caretRect(el) {
323
- if (el.offsetWidth === 0) return null;
324
- const style = window.getComputedStyle(el);
325
- const mirror = document.createElement("div");
326
- for (const property of COPIED) mirror.style[property] = style[property];
327
- mirror.style.position = "absolute";
328
- mirror.style.top = "0";
329
- mirror.style.left = "-9999px";
330
- mirror.style.visibility = "hidden";
331
- mirror.style.whiteSpace = "pre-wrap";
332
- mirror.style.overflowWrap = "break-word";
333
- mirror.style.width = `${el.clientWidth}px`;
334
- mirror.textContent = el.value.slice(0, el.selectionStart);
335
- const marker = document.createElement("span");
336
- marker.textContent = "\u200B";
337
- mirror.appendChild(marker);
338
- document.body.appendChild(mirror);
339
- const top = marker.offsetTop;
340
- const left = marker.offsetLeft;
341
- const height = marker.offsetHeight || Number.parseFloat(style.lineHeight) || 0;
342
- mirror.remove();
343
- if (height === 0) return null;
344
- return { top: top - el.scrollTop, left, height };
345
- }
346
-
347
- // src/markdown/useMarkdownKeymap.ts
348
- import * as React from "react";
349
- var WRAP = { b: "bold", i: "italic", e: "code", k: "link" };
350
- var HEADING = { Digit1: "h1", Digit2: "h2", Digit3: "h3" };
351
- var LIST = { Digit7: "ordered", Digit8: "bullet" };
352
- function useMarkdownKeymap({
353
- commit,
354
- onOpenPalette
355
- }) {
356
- const onKeyDown = React.useCallback(
357
- (event) => {
358
- if (event.nativeEvent.isComposing || event.keyCode === 229) return;
359
- const el = event.currentTarget;
360
- const { value, selectionStart, selectionEnd } = el;
361
- const mod = isMac() ? event.metaKey : event.ctrlKey;
362
- const run = (edit) => {
363
- if (!edit) return;
364
- event.preventDefault();
365
- applyEdit(el, edit, commit);
366
- };
367
- if (mod && event.altKey) {
368
- const kind = HEADING[event.code];
369
- if (kind) run(toggleLinePrefix(kind, value, selectionStart, selectionEnd));
370
- return;
371
- }
372
- if (mod && event.shiftKey) {
373
- const kind = LIST[event.code];
374
- if (kind) run(toggleLinePrefix(kind, value, selectionStart, selectionEnd));
375
- return;
376
- }
377
- if (mod) {
378
- const kind = WRAP[event.key.toLowerCase()];
379
- if (kind) run(wrapSelection(kind, value, selectionStart, selectionEnd));
380
- return;
381
- }
382
- if (event.key === "/") {
383
- if (!shouldOpenPalette(value, selectionStart, selectionEnd)) return;
384
- event.preventDefault();
385
- onOpenPalette();
386
- return;
387
- }
388
- if (event.key === "Enter" && !event.shiftKey) {
389
- run(continueList(value, selectionStart, "Enter"));
390
- return;
391
- }
392
- if (event.key === "Backspace" && selectionStart === selectionEnd) {
393
- run(continueList(value, selectionStart, "Backspace"));
394
- return;
395
- }
396
- if (event.key === "Tab") {
397
- run(indentList(value, selectionStart, selectionEnd, event.shiftKey ? -1 : 1));
398
- }
399
- },
400
- [commit, onOpenPalette]
401
- );
402
- const onPaste = React.useCallback(
403
- (event) => {
404
- const el = event.currentTarget;
405
- const edit = linkPaste(
406
- el.value,
407
- el.selectionStart,
408
- el.selectionEnd,
409
- event.clipboardData.getData("text/plain")
410
- );
411
- if (!edit) return;
412
- event.preventDefault();
413
- applyEdit(el, edit, commit);
414
- },
415
- [commit]
416
- );
417
- return { onKeyDown, onPaste };
418
- }
419
-
420
- // src/hooks/useAutoGrow.ts
421
- import * as React3 from "react";
422
-
423
- // src/hooks/use-isomorphic-layout-effect.ts
424
- import * as React2 from "react";
425
- var useIsomorphicLayoutEffect = typeof document === "undefined" ? React2.useEffect : React2.useLayoutEffect;
426
-
427
- // src/hooks/useAutoGrow.ts
428
- function useAutoGrow(value) {
429
- const ref = React3.useRef(null);
430
- const lastWidth = React3.useRef(null);
431
- const fit = React3.useCallback(() => {
432
- const el = ref.current;
433
- if (!el) return;
434
- const scroller = document.scrollingElement ?? document.documentElement;
435
- const scrollTop = scroller.scrollTop;
436
- el.style.height = "auto";
437
- if (el.scrollHeight > 0) el.style.height = `${el.scrollHeight}px`;
438
- if (scroller.scrollTop !== scrollTop) scroller.scrollTop = scrollTop;
439
- }, []);
440
- useIsomorphicLayoutEffect(fit, [fit, value]);
441
- React3.useEffect(() => {
442
- const el = ref.current;
443
- if (!el || typeof ResizeObserver === "undefined") return;
444
- const observer = new ResizeObserver(([entry]) => {
445
- const width = entry.contentRect.width;
446
- if (width === lastWidth.current) return;
447
- lastWidth.current = width;
448
- fit();
449
- });
450
- observer.observe(el);
451
- return () => observer.disconnect();
452
- }, [fit]);
453
- return ref;
454
- }
1
+ "use client";
2
+ import {
3
+ BlockShell,
4
+ EditableRegion,
5
+ EditorView,
6
+ SelectionSink,
7
+ ViewController,
8
+ VoidBlockFallback,
9
+ caretFromPoint,
10
+ defaultRenderers,
11
+ domMapOf,
12
+ hostKey,
13
+ isCrossSelection,
14
+ renderInline,
15
+ useEditorState,
16
+ useQuoinEditor,
17
+ useViewController
18
+ } from "./chunk-ZS2WA357.js";
19
+ import {
20
+ Transaction,
21
+ addMarkStep,
22
+ applyTransaction,
23
+ blockInputRules,
24
+ blockRangeSelection,
25
+ coreExtensions,
26
+ countDoc,
27
+ countText,
28
+ createEditor,
29
+ createPluginKey,
30
+ createState,
31
+ defineExtension,
32
+ fromHTML,
33
+ getPluginState,
34
+ insertBlockAfter,
35
+ insertBlocksStep,
36
+ insertText,
37
+ insertTextWithRules,
38
+ joinBlocksStep,
39
+ keyName,
40
+ markInputRules,
41
+ moveBlocksStep,
42
+ nodeSelection,
43
+ normalizeKey,
44
+ redo,
45
+ removeBlocksStep,
46
+ removeMarkStep,
47
+ replaceBlockStep,
48
+ replaceDocStep,
49
+ replaceInlineStep,
50
+ setAttrsStep,
51
+ setBlockType,
52
+ setIndentStep,
53
+ splitBlockStep,
54
+ stepFromJSON,
55
+ textSelection,
56
+ toHTML,
57
+ toMarkdown,
58
+ toPlainText,
59
+ toggleMark,
60
+ typographyRules,
61
+ undo
62
+ } from "./chunk-HJIQT3S5.js";
63
+ import {
64
+ diffBlocks,
65
+ diffInline
66
+ } from "./chunk-NOKWNK2O.js";
67
+ import {
68
+ PALETTE,
69
+ atom,
70
+ coreBlockSpecs,
71
+ createBlockCodec,
72
+ createSchema,
73
+ fromMarkdown,
74
+ normalizeInline,
75
+ parseInline,
76
+ sanitizeHref,
77
+ serializeInline,
78
+ text
79
+ } from "./chunk-LCQSG4M6.js";
455
80
  export {
456
- applyEdit,
457
- caretRect,
458
- continueList,
459
- formatShortcut,
460
- indentList,
461
- insertCommand,
462
- lineAt,
463
- linkPaste,
464
- shouldOpenPalette,
465
- toggleLinePrefix,
466
- useAutoGrow,
467
- useMarkdownKeymap,
468
- wrapSelection
81
+ BlockShell,
82
+ EditableRegion,
83
+ EditorView,
84
+ PALETTE,
85
+ SelectionSink,
86
+ Transaction,
87
+ ViewController,
88
+ VoidBlockFallback,
89
+ addMarkStep,
90
+ applyTransaction,
91
+ atom,
92
+ blockInputRules,
93
+ blockRangeSelection,
94
+ caretFromPoint,
95
+ coreBlockSpecs,
96
+ coreExtensions,
97
+ countDoc,
98
+ countText,
99
+ createBlockCodec,
100
+ createEditor,
101
+ createPluginKey,
102
+ createSchema,
103
+ createState,
104
+ defaultRenderers,
105
+ defineExtension,
106
+ diffBlocks,
107
+ diffInline,
108
+ domMapOf,
109
+ fromHTML,
110
+ fromMarkdown,
111
+ getPluginState,
112
+ hostKey,
113
+ insertBlockAfter,
114
+ insertBlocksStep,
115
+ insertText,
116
+ insertTextWithRules,
117
+ isCrossSelection,
118
+ joinBlocksStep,
119
+ keyName,
120
+ markInputRules,
121
+ moveBlocksStep,
122
+ nodeSelection,
123
+ normalizeInline,
124
+ normalizeKey,
125
+ parseInline,
126
+ redo,
127
+ removeBlocksStep,
128
+ removeMarkStep,
129
+ renderInline,
130
+ replaceBlockStep,
131
+ replaceDocStep,
132
+ replaceInlineStep,
133
+ sanitizeHref,
134
+ serializeInline,
135
+ setAttrsStep,
136
+ setBlockType,
137
+ setIndentStep,
138
+ splitBlockStep,
139
+ stepFromJSON,
140
+ text,
141
+ textSelection,
142
+ toHTML,
143
+ toMarkdown,
144
+ toPlainText,
145
+ toggleMark,
146
+ typographyRules,
147
+ undo,
148
+ useEditorState,
149
+ useQuoinEditor,
150
+ useViewController
469
151
  };
470
152
  //# sourceMappingURL=headless.js.map