quoin-editor 2.0.5 → 2.1.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 (215) hide show
  1. package/CHANGELOG.md +105 -0
  2. package/MIGRATION.md +1 -1
  3. package/README.md +4 -3
  4. package/dist/ai.cjs +124 -94
  5. package/dist/ai.d.cts +7 -0
  6. package/dist/ai.d.ts +7 -0
  7. package/dist/ai.js +50 -20
  8. package/dist/ai.js.map +1 -1
  9. package/dist/catalogue.cjs +28 -26
  10. package/dist/catalogue.js +19 -17
  11. package/dist/catalogue.js.map +1 -1
  12. package/dist/{chunk-JGEDJYIV.cjs → chunk-2FUWXPPC.cjs} +92 -98
  13. package/dist/{chunk-NHNW5DK3.js → chunk-3F76QQ65.js} +6 -6
  14. package/dist/{chunk-NHNW5DK3.js.map → chunk-3F76QQ65.js.map} +1 -1
  15. package/dist/{chunk-DBOZFNWU.js → chunk-3QYFAAQR.js} +3 -3
  16. package/dist/{chunk-DBOZFNWU.js.map → chunk-3QYFAAQR.js.map} +1 -1
  17. package/dist/{chunk-I7X7B3WD.cjs → chunk-4JDRDPLC.cjs} +17 -8
  18. package/dist/{chunk-EBSDPHPS.cjs → chunk-4UFWFV43.cjs} +1060 -719
  19. package/dist/{chunk-LM3DHROX.cjs → chunk-5AUIA4B3.cjs} +2 -2
  20. package/dist/{chunk-3INFNIGN.cjs → chunk-5H3BB5VJ.cjs} +131 -78
  21. package/dist/{chunk-DJU25PFC.cjs → chunk-5L2NSIHZ.cjs} +11 -11
  22. package/dist/{chunk-W376L2GM.js → chunk-6Y7JAWYY.js} +8 -8
  23. package/dist/chunk-6Y7JAWYY.js.map +1 -0
  24. package/dist/{chunk-UDBLZILE.js → chunk-ATKDXQEY.js} +12 -7
  25. package/dist/{chunk-UDBLZILE.js.map → chunk-ATKDXQEY.js.map} +1 -1
  26. package/dist/{chunk-A2IQHMIH.js → chunk-BE2SYPK5.js} +49 -54
  27. package/dist/chunk-BE2SYPK5.js.map +1 -0
  28. package/dist/{chunk-PURYVDC3.cjs → chunk-CFICD2JP.cjs} +21 -16
  29. package/dist/{chunk-3HW3WRYC.cjs → chunk-CSIUXYRU.cjs} +2 -2
  30. package/dist/{chunk-N7BSFDDM.cjs → chunk-DBKL524I.cjs} +23 -23
  31. package/dist/{chunk-XE3IYW5B.js → chunk-DEFYFIWW.js} +90 -37
  32. package/dist/chunk-DEFYFIWW.js.map +1 -0
  33. package/dist/{chunk-7E43TURF.cjs → chunk-ECI3PSMS.cjs} +7 -7
  34. package/dist/{chunk-4G645EYO.js → chunk-F73QEF7E.js} +5 -5
  35. package/dist/{chunk-4G645EYO.js.map → chunk-F73QEF7E.js.map} +1 -1
  36. package/dist/{chunk-KHRVCTQQ.cjs → chunk-FUT7XLMP.cjs} +61 -74
  37. package/dist/{chunk-7J63427U.cjs → chunk-GQSBOBOM.cjs} +375 -320
  38. package/dist/{chunk-LU3T3JB4.js → chunk-HPNSQWRD.js} +15 -28
  39. package/dist/chunk-HPNSQWRD.js.map +1 -0
  40. package/dist/{chunk-7Y4B7NHO.js → chunk-I34BFOLL.js} +18 -11
  41. package/dist/chunk-I34BFOLL.js.map +1 -0
  42. package/dist/{chunk-AJT54OMZ.js → chunk-IFRXEFQH.js} +9 -15
  43. package/dist/chunk-IFRXEFQH.js.map +1 -0
  44. package/dist/{chunk-YYW33WUL.cjs → chunk-K3XWVRL4.cjs} +8 -8
  45. package/dist/{chunk-LSI4RMTY.js → chunk-L5L6YNLT.js} +3 -3
  46. package/dist/{chunk-LSI4RMTY.js.map → chunk-L5L6YNLT.js.map} +1 -1
  47. package/dist/{chunk-2BPXVQBP.js → chunk-MO4UMXMT.js} +238 -86
  48. package/dist/chunk-MO4UMXMT.js.map +1 -0
  49. package/dist/{chunk-2QKFRKOP.cjs → chunk-N25EH2GZ.cjs} +351 -205
  50. package/dist/{chunk-CSPCDVCT.js → chunk-NCV2ML25.js} +3 -3
  51. package/dist/{chunk-CSPCDVCT.js.map → chunk-NCV2ML25.js.map} +1 -1
  52. package/dist/{chunk-NUQ64S5B.cjs → chunk-OJSKSQTL.cjs} +26 -26
  53. package/dist/chunk-PIWMU4BV.js +9 -0
  54. package/dist/chunk-PIWMU4BV.js.map +1 -0
  55. package/dist/chunk-QFGWSFOI.cjs +10 -0
  56. package/dist/{chunk-GPTJYWGS.js → chunk-RNBLVGWY.js} +3 -3
  57. package/dist/{chunk-GPTJYWGS.js.map → chunk-RNBLVGWY.js.map} +1 -1
  58. package/dist/{chunk-5RBMZGKV.js → chunk-TL2MJOWM.js} +325 -57
  59. package/dist/chunk-TL2MJOWM.js.map +1 -0
  60. package/dist/{chunk-YEDPBYO5.cjs → chunk-UDQ52EEC.cjs} +4 -4
  61. package/dist/{chunk-EIWPJWY3.js → chunk-UE2NQPNG.js} +5 -5
  62. package/dist/{chunk-EIWPJWY3.js.map → chunk-UE2NQPNG.js.map} +1 -1
  63. package/dist/{chunk-BE2YHZXA.cjs → chunk-ULV3SCYP.cjs} +26 -15
  64. package/dist/{chunk-WDBFGX3U.cjs → chunk-VTTMJGWP.cjs} +72 -77
  65. package/dist/{chunk-556PFYES.js → chunk-WK4UGDZN.js} +290 -235
  66. package/dist/chunk-WK4UGDZN.js.map +1 -0
  67. package/dist/{chunk-JZF6UQH5.cjs → chunk-WMKA37NJ.cjs} +12 -12
  68. package/dist/{chunk-F2ZK6Z52.js → chunk-Y26F2X4E.js} +3 -3
  69. package/dist/{chunk-F2ZK6Z52.js.map → chunk-Y26F2X4E.js.map} +1 -1
  70. package/dist/{chunk-FK7EBZPX.cjs → chunk-Z5EEDCRI.cjs} +549 -276
  71. package/dist/{chunk-G6NBQYMM.js → chunk-ZGFZRVQA.js} +817 -478
  72. package/dist/chunk-ZGFZRVQA.js.map +1 -0
  73. package/dist/{chunk-QLVX7MPS.js → chunk-ZQF45LA4.js} +19 -8
  74. package/dist/chunk-ZQF45LA4.js.map +1 -0
  75. package/dist/comments.cjs +127 -65
  76. package/dist/comments.d.cts +35 -2
  77. package/dist/comments.d.ts +35 -2
  78. package/dist/comments.js +73 -12
  79. package/dist/comments.js.map +1 -1
  80. package/dist/{diagram-extension-22x_njXB.d.ts → diagram-extension-BMlh8GCw.d.ts} +1 -1
  81. package/dist/{diagram-extension-C_FSkoj9.d.cts → diagram-extension-gmndUpti.d.cts} +1 -1
  82. package/dist/diagram.cjs +10 -9
  83. package/dist/diagram.d.cts +2 -2
  84. package/dist/diagram.d.ts +2 -2
  85. package/dist/diagram.js +7 -6
  86. package/dist/diff.cjs +25 -25
  87. package/dist/diff.js +3 -3
  88. package/dist/docx.cjs +31 -30
  89. package/dist/docx.js +5 -4
  90. package/dist/docx.js.map +1 -1
  91. package/dist/embed.cjs +10 -9
  92. package/dist/embed.js +8 -7
  93. package/dist/{emoji-extension-Dk5IQLZf.d.cts → emoji-extension-DD9CQTQj.d.cts} +1 -1
  94. package/dist/{emoji-extension-C832oGeT.d.ts → emoji-extension-U_PWZ2fX.d.ts} +1 -1
  95. package/dist/emoji.cjs +10 -9
  96. package/dist/emoji.d.cts +2 -2
  97. package/dist/emoji.d.ts +2 -2
  98. package/dist/emoji.js +7 -6
  99. package/dist/engine.cjs +58 -58
  100. package/dist/engine.d.cts +3 -3
  101. package/dist/engine.d.ts +3 -3
  102. package/dist/engine.js +3 -3
  103. package/dist/{find-extension-DmK9_N81.d.ts → find-extension-BGlqooZi.d.ts} +1 -1
  104. package/dist/{find-extension-BfruAPLi.d.cts → find-extension-BPnAJ8bY.d.cts} +1 -1
  105. package/dist/find.cjs +11 -10
  106. package/dist/find.d.cts +1 -1
  107. package/dist/find.d.ts +1 -1
  108. package/dist/find.js +7 -6
  109. package/dist/headless.cjs +70 -69
  110. package/dist/headless.d.cts +33 -10
  111. package/dist/headless.d.ts +33 -10
  112. package/dist/headless.js +5 -4
  113. package/dist/highlight.cjs +7 -6
  114. package/dist/highlight.js +6 -5
  115. package/dist/highlight.js.map +1 -1
  116. package/dist/{index-3fYvwqUZ.d.cts → index-DN7vRKFw.d.cts} +1 -1
  117. package/dist/{index-CgxnzCO5.d.ts → index-DyIYI3PM.d.ts} +1 -1
  118. package/dist/index.cjs +82 -81
  119. package/dist/index.d.cts +19 -12
  120. package/dist/index.d.ts +19 -12
  121. package/dist/index.js +6 -5
  122. package/dist/{labels-CiCxj2jP.d.cts → labels-BJORhN93.d.ts} +10 -5
  123. package/dist/{labels-BhRJYo46.d.ts → labels-CVYJ2-1X.d.cts} +10 -5
  124. package/dist/locale-ar.cjs +10 -0
  125. package/dist/locale-ar.d.cts +1 -1
  126. package/dist/locale-ar.d.ts +1 -1
  127. package/dist/locale-ar.js +10 -0
  128. package/dist/locale-ar.js.map +1 -1
  129. package/dist/locale-de.cjs +4 -0
  130. package/dist/locale-de.d.cts +1 -1
  131. package/dist/locale-de.d.ts +1 -1
  132. package/dist/locale-de.js +4 -0
  133. package/dist/locale-de.js.map +1 -1
  134. package/dist/locale-es.cjs +4 -0
  135. package/dist/locale-es.d.cts +1 -1
  136. package/dist/locale-es.d.ts +1 -1
  137. package/dist/locale-es.js +4 -0
  138. package/dist/locale-es.js.map +1 -1
  139. package/dist/locale-fr.cjs +4 -0
  140. package/dist/locale-fr.d.cts +1 -1
  141. package/dist/locale-fr.d.ts +1 -1
  142. package/dist/locale-fr.js +4 -0
  143. package/dist/locale-fr.js.map +1 -1
  144. package/dist/locale-ja.cjs +4 -0
  145. package/dist/locale-ja.d.cts +1 -1
  146. package/dist/locale-ja.d.ts +1 -1
  147. package/dist/locale-ja.js +4 -0
  148. package/dist/locale-ja.js.map +1 -1
  149. package/dist/locale-pt.cjs +4 -0
  150. package/dist/locale-pt.d.cts +1 -1
  151. package/dist/locale-pt.d.ts +1 -1
  152. package/dist/locale-pt.js +4 -0
  153. package/dist/locale-pt.js.map +1 -1
  154. package/dist/locale-zh.cjs +4 -0
  155. package/dist/locale-zh.d.cts +1 -1
  156. package/dist/locale-zh.d.ts +1 -1
  157. package/dist/locale-zh.js +4 -0
  158. package/dist/locale-zh.js.map +1 -1
  159. package/dist/math.cjs +11 -10
  160. package/dist/math.js +9 -8
  161. package/dist/mention.cjs +11 -10
  162. package/dist/mention.js +9 -8
  163. package/dist/{node-reveal-DY6bimv3.d.cts → node-reveal-Be7Xa0BL.d.cts} +1 -1
  164. package/dist/{node-reveal-BnFcnHhz.d.ts → node-reveal-CftIEqF_.d.ts} +1 -1
  165. package/dist/palette-DuIFHYHc.d.cts +10 -0
  166. package/dist/palette-DuIFHYHc.d.ts +10 -0
  167. package/dist/presence.cjs +39 -38
  168. package/dist/presence.js +8 -7
  169. package/dist/presence.js.map +1 -1
  170. package/dist/source.cjs +10 -9
  171. package/dist/source.d.cts +1 -1
  172. package/dist/source.d.ts +1 -1
  173. package/dist/source.js +6 -5
  174. package/dist/source.js.map +1 -1
  175. package/dist/{stats-extension-Dmw0Ujxe.d.ts → stats-extension-Bbpr593p.d.ts} +1 -1
  176. package/dist/{stats-extension-D5HySF0a.d.cts → stats-extension-D7FaeydW.d.cts} +1 -1
  177. package/dist/stats.cjs +12 -10
  178. package/dist/stats.d.cts +2 -2
  179. package/dist/stats.d.ts +2 -2
  180. package/dist/stats.js +9 -7
  181. package/dist/styles.css +1 -1
  182. package/dist/{table-extension-7LkLNK6Q.d.cts → table-extension-DNijjmxV.d.cts} +1 -1
  183. package/dist/{table-extension-DEpV0DnP.d.ts → table-extension-Dp6FYGPh.d.ts} +1 -1
  184. package/dist/table.cjs +26 -25
  185. package/dist/table.d.cts +4 -3
  186. package/dist/table.d.ts +4 -3
  187. package/dist/table.js +7 -6
  188. package/dist/{toc-extension-Dvh37bWQ.d.cts → toc-extension-BGEVAmSY.d.cts} +1 -1
  189. package/dist/{toc-extension-SVckrFmb.d.ts → toc-extension-DZIe40eV.d.ts} +1 -1
  190. package/dist/toc.cjs +10 -9
  191. package/dist/toc.d.cts +2 -2
  192. package/dist/toc.d.ts +2 -2
  193. package/dist/toc.js +7 -6
  194. package/dist/{types-DMuuDBVh.d.ts → types-Byu2a9qk.d.ts} +6 -1
  195. package/dist/{types-Bzhq5AXj.d.cts → types-DdDlCyyZ.d.cts} +6 -1
  196. package/dist/view.cjs +4 -4
  197. package/dist/view.js +2 -2
  198. package/dist/yjs.cjs +121 -121
  199. package/dist/yjs.d.cts +2 -2
  200. package/dist/yjs.d.ts +2 -2
  201. package/dist/yjs.js +5 -5
  202. package/package.json +4 -3
  203. package/dist/chunk-2BPXVQBP.js.map +0 -1
  204. package/dist/chunk-556PFYES.js.map +0 -1
  205. package/dist/chunk-5RBMZGKV.js.map +0 -1
  206. package/dist/chunk-7Y4B7NHO.js.map +0 -1
  207. package/dist/chunk-A2IQHMIH.js.map +0 -1
  208. package/dist/chunk-AJT54OMZ.js.map +0 -1
  209. package/dist/chunk-G6NBQYMM.js.map +0 -1
  210. package/dist/chunk-LU3T3JB4.js.map +0 -1
  211. package/dist/chunk-QLVX7MPS.js.map +0 -1
  212. package/dist/chunk-W376L2GM.js.map +0 -1
  213. package/dist/chunk-XE3IYW5B.js.map +0 -1
  214. package/dist/palette-BrX-hEd-.d.cts +0 -4
  215. package/dist/palette-BrX-hEd-.d.ts +0 -4
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var chunkI7X7B3WD_cjs = require('./chunk-I7X7B3WD.cjs');
3
+ var chunk4JDRDPLC_cjs = require('./chunk-4JDRDPLC.cjs');
4
4
 
5
5
  // src/extensions/web-address.ts
6
6
  var WEB = /^https?:\/\/[^/?#\s]/i;
7
7
  function webAddress(value) {
8
- const href = typeof value === "string" ? chunkI7X7B3WD_cjs.sanitizeHref(value) : null;
8
+ const href = typeof value === "string" ? chunk4JDRDPLC_cjs.sanitizeHref(value) : null;
9
9
  return href !== null && WEB.test(href) ? href : null;
10
10
  }
11
11
  function domainOf(value) {
@@ -1,12 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkEBSDPHPS_cjs = require('./chunk-EBSDPHPS.cjs');
4
- var chunk2QKFRKOP_cjs = require('./chunk-2QKFRKOP.cjs');
3
+ var chunk4UFWFV43_cjs = require('./chunk-4UFWFV43.cjs');
4
+ var chunkN25EH2GZ_cjs = require('./chunk-N25EH2GZ.cjs');
5
5
  var chunkZWTIRGY5_cjs = require('./chunk-ZWTIRGY5.cjs');
6
- var chunkFK7EBZPX_cjs = require('./chunk-FK7EBZPX.cjs');
7
- var chunkI7X7B3WD_cjs = require('./chunk-I7X7B3WD.cjs');
6
+ var chunkZ5EEDCRI_cjs = require('./chunk-Z5EEDCRI.cjs');
7
+ var chunk4JDRDPLC_cjs = require('./chunk-4JDRDPLC.cjs');
8
8
  var react = require('react');
9
9
  var reactDom = require('react-dom');
10
+ var reactDirection = require('@radix-ui/react-direction');
10
11
  var jsxRuntime = require('react/jsx-runtime');
11
12
 
12
13
  // src/engine/find/find-pattern.ts
@@ -23,6 +24,35 @@ function findPattern({ query, caseSensitive, wholeWord, regex }) {
23
24
  }
24
25
  }
25
26
 
27
+ // src/engine/find/run-pattern.ts
28
+ var NEVER = "(?!)";
29
+ function anchored(source, start, end) {
30
+ let out = "";
31
+ let inClass = false;
32
+ for (let i = 0; i < source.length; i++) {
33
+ const char = source[i];
34
+ if (char === "\\") {
35
+ out += source.slice(i, i + 2);
36
+ i++;
37
+ } else if (inClass) {
38
+ inClass = char !== "]";
39
+ out += char;
40
+ } else {
41
+ inClass = char === "[";
42
+ out += char === "^" && !start || char === "$" && !end ? NEVER : char;
43
+ }
44
+ }
45
+ return out;
46
+ }
47
+ function runPattern(pattern) {
48
+ const variants = {};
49
+ return ({ start, text: text2 }, regionLength) => {
50
+ const atStart = start === 0;
51
+ const atEnd = start + text2.length === regionLength;
52
+ return variants[`${atStart} ${atEnd}`] ??= new RegExp(anchored(pattern.source, atStart, atEnd), pattern.flags);
53
+ };
54
+ }
55
+
26
56
  // src/engine/find/text-runs.ts
27
57
  function textRuns(inline) {
28
58
  const runs = [];
@@ -48,10 +78,13 @@ function runHolding(inline, from, to) {
48
78
  }
49
79
 
50
80
  // src/engine/find/find-matches.ts
51
- function regionMatches(pattern, block, region) {
81
+ function regionMatches(patternOf, block, region) {
52
82
  const matches = [];
53
- for (const { start, text: text2 } of textRuns(block.regions[region])) {
54
- for (const found of text2.matchAll(pattern)) {
83
+ const inline = block.regions[region];
84
+ const length = chunk4JDRDPLC_cjs.inlineLength(inline);
85
+ for (const run of textRuns(inline)) {
86
+ const { start, text: text2 } = run;
87
+ for (const found of text2.matchAll(patternOf(run, length))) {
55
88
  if (found[0] === "") continue;
56
89
  const from = start + found.index;
57
90
  matches.push({ block: block.id, region, from, to: from + found[0].length });
@@ -63,12 +96,13 @@ function blockMatcher(query, options) {
63
96
  if (query === "") return () => [];
64
97
  const pattern = findPattern({ ...options, query });
65
98
  if (!(pattern instanceof RegExp)) return pattern;
99
+ const patternOf = runPattern(pattern);
66
100
  const found = /* @__PURE__ */ new WeakMap();
67
101
  return (block) => {
68
102
  let matches = found.get(block);
69
103
  if (matches === void 0) {
70
- const regions = Object.keys(block.regions).sort(chunkI7X7B3WD_cjs.compareRegionNames);
71
- matches = regions.flatMap((region) => regionMatches(pattern, block, region));
104
+ const regions = Object.keys(block.regions).sort(chunk4JDRDPLC_cjs.compareRegionNames);
105
+ matches = regions.flatMap((region) => regionMatches(patternOf, block, region));
72
106
  found.set(block, matches);
73
107
  }
74
108
  return matches;
@@ -81,7 +115,6 @@ function findMatches(doc, query, options) {
81
115
  }
82
116
 
83
117
  // src/extensions/find/find-state.ts
84
- var MATCH_CAP = 1e3;
85
118
  var CLOSED = {
86
119
  open: false,
87
120
  opened: 0,
@@ -89,39 +122,42 @@ var CLOSED = {
89
122
  matcher: null,
90
123
  error: null,
91
124
  matches: [],
92
- capped: false,
93
125
  current: -1,
94
126
  origin: null
95
127
  };
96
128
  var startOfMatch = ({ block, region, from }) => ({ block, region, offset: from });
97
129
  function originOf({ doc, selection }) {
98
- const range = chunkFK7EBZPX_cjs.selectionRange(doc, selection);
130
+ const range = chunkZ5EEDCRI_cjs.selectionRange(doc, selection);
99
131
  if (range !== null) return range.from;
100
- const [block] = chunkFK7EBZPX_cjs.selectedBlockIds(doc, selection);
132
+ const [block] = chunkZ5EEDCRI_cjs.selectedBlockIds(doc, selection);
101
133
  return block === void 0 ? null : { block, region: "", offset: 0 };
102
134
  }
103
135
  function nearestMatch(state, matches, at) {
104
136
  if (matches.length === 0) return -1;
105
- if (at === null || chunkI7X7B3WD_cjs.indexOfBlock(state.doc, at.block) < 0) return 0;
106
- const index = matches.findIndex((match) => chunkFK7EBZPX_cjs.comparePos(state.doc, startOfMatch(match), at) >= 0);
107
- return index < 0 ? 0 : index;
137
+ if (at === null || chunk4JDRDPLC_cjs.indexOfBlock(state.doc, at.block) < 0) return 0;
138
+ let low = 0;
139
+ let high = matches.length;
140
+ while (low < high) {
141
+ const middle = low + high >> 1;
142
+ if (chunkZ5EEDCRI_cjs.comparePos(state.doc, startOfMatch(matches[middle]), at) < 0) low = middle + 1;
143
+ else high = middle;
144
+ }
145
+ return low === matches.length ? 0 : low;
108
146
  }
109
147
  function searched(value, state, at) {
110
148
  const matcher = value.matcher ?? blockMatcher(value.search.query, value.search);
111
149
  if (typeof matcher !== "function") {
112
- return { ...value, matcher: null, error: matcher.error, matches: [], capped: false, current: -1 };
150
+ return { ...value, matcher: null, error: matcher.error, matches: [], current: -1 };
113
151
  }
114
- const all = state.doc.blocks.flatMap((block) => matcher(block));
115
- const matches = all.length > MATCH_CAP ? all.slice(0, MATCH_CAP) : all;
116
- const current = nearestMatch(state, matches, at);
117
- return { ...value, matcher, error: null, matches, capped: all.length > MATCH_CAP, current };
152
+ const matches = state.doc.blocks.flatMap((block) => matcher(block));
153
+ return { ...value, matcher, error: null, matches, current: nearestMatch(state, matches, at) };
118
154
  }
119
155
  function currentMatch(value) {
120
156
  return value.matches[value.current] ?? null;
121
157
  }
122
158
 
123
159
  // src/extensions/find/find-plugin.ts
124
- var findKey = chunkFK7EBZPX_cjs.createPluginKey("find");
160
+ var findKey = chunkZ5EEDCRI_cjs.createPluginKey("find");
125
161
  var FIND = "find";
126
162
  var wrap = (index, length) => (index + length) % length;
127
163
  function remapped(tr, value, state) {
@@ -159,23 +195,30 @@ var findPlugin = {
159
195
  // src/extensions/find/find-decorations.ts
160
196
  var MATCH_CLASS = "quoin-find-match";
161
197
  var CURRENT_CLASS = "quoin-find-current";
198
+ var DRAWN_MATCHES = 1e3;
162
199
  var MATCH = { class: MATCH_CLASS };
163
200
  var CURRENT = { class: `${MATCH_CLASS} ${CURRENT_CLASS}` };
164
201
  var NONE = [];
165
202
  var drawn = /* @__PURE__ */ new WeakMap();
203
+ function firstDrawn({ matches, current }) {
204
+ return Math.max(0, Math.min(current - DRAWN_MATCHES / 2, matches.length - DRAWN_MATCHES));
205
+ }
166
206
  function findDecorations(state) {
167
- const value = chunkFK7EBZPX_cjs.getPluginState(state, findKey);
207
+ const value = chunkZ5EEDCRI_cjs.getPluginState(state, findKey);
168
208
  if (!value.open || value.matches.length === 0) return NONE;
169
209
  let decorations = drawn.get(value);
170
210
  if (decorations === void 0) {
171
- decorations = value.matches.map(({ block, region, from, to }, index) => ({
172
- kind: "inline",
173
- block,
174
- region,
175
- from,
176
- to,
177
- attrs: index === value.current ? CURRENT : MATCH
178
- }));
211
+ const first = firstDrawn(value);
212
+ decorations = value.matches.slice(first, first + DRAWN_MATCHES).map(
213
+ ({ block, region, from, to }, index) => ({
214
+ kind: "inline",
215
+ block,
216
+ region,
217
+ from,
218
+ to,
219
+ attrs: first + index === value.current ? CURRENT : MATCH
220
+ })
221
+ );
179
222
  drawn.set(value, decorations);
180
223
  }
181
224
  return decorations;
@@ -207,40 +250,42 @@ function expand(run, sticky, from, to, replacement) {
207
250
  const replaced = run.text.replace(sticky, replacement);
208
251
  return replaced.slice(from, replaced.length - (run.text.length - to));
209
252
  }
210
- function replacementFor(doc, pattern, search, match, replacement) {
211
- const inline = chunkI7X7B3WD_cjs.blockById(doc, match.block)?.regions[match.region];
253
+ function replacementFor(doc, patternOf, search, match, replacement) {
254
+ const inline = chunk4JDRDPLC_cjs.blockById(doc, match.block)?.regions[match.region];
212
255
  const run = inline && runHolding(inline, match.from, match.to);
213
256
  if (inline === void 0 || run === void 0) return null;
214
257
  const from = match.from - run.start;
215
258
  const to = match.to - run.start;
259
+ const pattern = patternOf(run, chunk4JDRDPLC_cjs.inlineLength(inline));
216
260
  const sticky = new RegExp(pattern.source, pattern.flags.replace("g", "y"));
217
261
  sticky.lastIndex = from;
218
262
  const found = sticky.exec(run.text);
219
263
  if (found === null || sticky.lastIndex !== to) return null;
220
264
  const replaced = search.regex ? expand(run, sticky, from, to, replacement) : replacement;
221
265
  if (replaced === found[0]) return null;
222
- const marks = chunkI7X7B3WD_cjs.sliceInline(inline, match.from, match.from + 1)[0]?.marks ?? [];
223
- return { match, slice: replaced === "" ? [] : [chunkI7X7B3WD_cjs.text(replaced, marks)] };
266
+ const marks = chunk4JDRDPLC_cjs.sliceInline(inline, match.from, match.from + 1)[0]?.marks ?? [];
267
+ return { match, slice: replaced === "" ? [] : [chunk4JDRDPLC_cjs.text(replaced, marks)] };
224
268
  }
225
269
  var startOf = ({ block, region, from }) => ({ block, region, offset: from });
226
270
  var endOf = ({ block, region, to }) => ({ block, region, offset: to });
227
271
  function lastFirst(doc, replacements) {
228
- const sorted = [...replacements].sort((a, b) => chunkFK7EBZPX_cjs.comparePos(doc, startOf(b.match), startOf(a.match)));
229
- return sorted.filter((item, i) => i === 0 || chunkFK7EBZPX_cjs.comparePos(doc, endOf(item.match), startOf(sorted[i - 1].match)) <= 0);
272
+ const sorted = [...replacements].sort((a, b) => chunkZ5EEDCRI_cjs.comparePos(doc, startOf(b.match), startOf(a.match)));
273
+ return sorted.filter((item, i) => i === 0 || chunkZ5EEDCRI_cjs.comparePos(doc, endOf(item.match), startOf(sorted[i - 1].match)) <= 0);
230
274
  }
231
275
  function replaceMatches(search, matches, replacement) {
232
276
  return (state, dispatch) => {
233
277
  const pattern = findPattern(search);
234
278
  if (!(pattern instanceof RegExp) || search.query === "") return false;
279
+ const patternOf = runPattern(pattern);
235
280
  const replacements = lastFirst(
236
281
  state.doc,
237
- matches.map((match) => replacementFor(state.doc, pattern, search, match, replacement)).filter((found) => found !== null)
282
+ matches.map((match) => replacementFor(state.doc, patternOf, search, match, replacement)).filter((found) => found !== null)
238
283
  );
239
284
  if (replacements.length === 0) return false;
240
285
  if (dispatch) {
241
- const tr = new chunkFK7EBZPX_cjs.Transaction(state);
286
+ const tr = new chunkZ5EEDCRI_cjs.Transaction(state);
242
287
  for (const { match, slice } of replacements) {
243
- tr.step(chunkFK7EBZPX_cjs.replaceInlineStep(match.block, match.region, match.from, match.to, slice));
288
+ tr.step(chunkZ5EEDCRI_cjs.replaceInlineStep(match.block, match.region, match.from, match.to, slice));
244
289
  }
245
290
  dispatch(tr);
246
291
  }
@@ -249,13 +294,13 @@ function replaceMatches(search, matches, replacement) {
249
294
  }
250
295
 
251
296
  // src/extensions/find/find-commands.ts
252
- var act = (state, action) => new chunkFK7EBZPX_cjs.Transaction(state).setMeta(FIND, action);
297
+ var act = (state, action) => new chunkZ5EEDCRI_cjs.Transaction(state).setMeta(FIND, action);
253
298
  function selectedText({ doc, selection }) {
254
299
  if (selection?.kind !== "text") return void 0;
255
300
  const { anchor, head } = selection;
256
301
  if (anchor.block !== head.block || anchor.region !== head.region || anchor.offset === head.offset) return void 0;
257
- const inline = chunkI7X7B3WD_cjs.blockById(doc, anchor.block)?.regions[anchor.region];
258
- const slice = inline && chunkI7X7B3WD_cjs.sliceInline(inline, Math.min(anchor.offset, head.offset), Math.max(anchor.offset, head.offset));
302
+ const inline = chunk4JDRDPLC_cjs.blockById(doc, anchor.block)?.regions[anchor.region];
303
+ const slice = inline && chunk4JDRDPLC_cjs.sliceInline(inline, Math.min(anchor.offset, head.offset), Math.max(anchor.offset, head.offset));
259
304
  if (slice === void 0 || slice.some((node) => node.kind === "atom")) return void 0;
260
305
  return slice.map((node) => node.kind === "text" ? node.text : "").join("");
261
306
  }
@@ -274,7 +319,7 @@ function stepFind(state, by) {
274
319
  }
275
320
  function replaceCurrent(replacement) {
276
321
  return (state, dispatch) => {
277
- const value = chunkFK7EBZPX_cjs.getPluginState(state, findKey);
322
+ const value = chunkZ5EEDCRI_cjs.getPluginState(state, findKey);
278
323
  const match = currentMatch(value);
279
324
  if (!value.open || match === null) return false;
280
325
  const replaced = dispatch && ((tr) => dispatch(tr.setMeta(FIND, { type: "replaced" })));
@@ -283,7 +328,7 @@ function replaceCurrent(replacement) {
283
328
  }
284
329
  function replaceAll(replacement) {
285
330
  return (state, dispatch) => {
286
- const { open, search } = chunkFK7EBZPX_cjs.getPluginState(state, findKey);
331
+ const { open, search } = chunkZ5EEDCRI_cjs.getPluginState(state, findKey);
287
332
  const result = findMatches(state.doc, search.query, search);
288
333
  if (!open || "error" in result) return false;
289
334
  return replaceMatches(search, result.matches, replacement)(state, dispatch);
@@ -294,7 +339,7 @@ function replaceAll(replacement) {
294
339
  function findActions(controller) {
295
340
  const { editor } = controller;
296
341
  const write = (tr) => editor.dispatch(tr);
297
- const current = () => chunkFK7EBZPX_cjs.getPluginState(editor.state, findKey);
342
+ const current = () => chunkZ5EEDCRI_cjs.getPluginState(editor.state, findKey);
298
343
  return {
299
344
  search: (query) => write(setSearch(editor.state, { ...current().search, query })),
300
345
  toggle(option) {
@@ -311,7 +356,7 @@ function findActions(controller) {
311
356
  const tr = closeFind(editor.state);
312
357
  if (match !== null) {
313
358
  const { block, region, from, to } = match;
314
- tr.setSelection(chunkFK7EBZPX_cjs.textSelection({ block, region, offset: from }, { block, region, offset: to }));
359
+ tr.setSelection(chunkZ5EEDCRI_cjs.textSelection({ block, region, offset: from }, { block, region, offset: to }));
315
360
  }
316
361
  controller.dispatch(tr);
317
362
  controller.focus();
@@ -323,9 +368,9 @@ function statusText(labels, value) {
323
368
  if (value.error !== null) return labels.invalidPattern;
324
369
  if (value.search.query === "") return "";
325
370
  if (value.matches.length === 0) return labels.noResults;
326
- return labels.matchCount(value.current + 1, value.matches.length, value.capped);
371
+ return labels.matchCount(value.current + 1, value.matches.length, false);
327
372
  }
328
- function FindStatus({ labels, value }) {
373
+ function FindStatus({ id, labels, value }) {
329
374
  const text2 = statusText(labels, value);
330
375
  const [announced, setAnnounced] = react.useState("");
331
376
  react.useEffect(() => {
@@ -333,20 +378,20 @@ function FindStatus({ labels, value }) {
333
378
  return () => clearTimeout(timer);
334
379
  }, [text2]);
335
380
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
336
- /* @__PURE__ */ jsxRuntime.jsx("span", { "data-quoin-find-status": "", className: "text-muted-foreground min-w-16 text-xs whitespace-nowrap tabular-nums", children: text2 }),
381
+ /* @__PURE__ */ jsxRuntime.jsx("span", { id, "data-quoin-find-status": "", className: "text-muted-foreground min-w-16 text-xs whitespace-nowrap tabular-nums", children: text2 }),
337
382
  /* @__PURE__ */ jsxRuntime.jsx("span", { "data-quoin-find-announcer": "", "aria-live": "polite", className: "quoin-visually-hidden", children: announced })
338
383
  ] });
339
384
  }
340
385
  var TOGGLES = [
341
- { option: "caseSensitive", label: "matchCase", icon: chunkEBSDPHPS_cjs.CaseSensitive },
342
- { option: "wholeWord", label: "wholeWord", icon: chunkEBSDPHPS_cjs.WholeWord },
343
- { option: "regex", label: "regularExpression", icon: chunkEBSDPHPS_cjs.Regex }
386
+ { option: "caseSensitive", label: "matchCase", icon: chunk4UFWFV43_cjs.CaseSensitive },
387
+ { option: "wholeWord", label: "wholeWord", icon: chunk4UFWFV43_cjs.WholeWord },
388
+ { option: "regex", label: "regularExpression", icon: chunk4UFWFV43_cjs.Regex }
344
389
  ];
345
390
  function FindToggles({ labels, options, onToggle }) {
346
391
  return TOGGLES.map(({ option, label, icon: Icon }) => {
347
392
  const name = labels[label];
348
393
  return /* @__PURE__ */ jsxRuntime.jsx(
349
- chunkEBSDPHPS_cjs.Button,
394
+ chunk4UFWFV43_cjs.Button,
350
395
  {
351
396
  type: "button",
352
397
  variant: "ghost",
@@ -362,13 +407,13 @@ function FindToggles({ labels, options, onToggle }) {
362
407
  );
363
408
  });
364
409
  }
365
- var isFindShortcut = (event, isMac) => chunkFK7EBZPX_cjs.keyName(event, isMac) === chunkFK7EBZPX_cjs.normalizeKey("Mod-Shift-f", isMac);
410
+ var isFindShortcut = (event, isMac) => chunkZ5EEDCRI_cjs.keyName(event, isMac) === chunkZ5EEDCRI_cjs.normalizeKey("Mod-Shift-f", isMac);
366
411
  function useFindShortcut(controller) {
367
412
  react.useEffect(() => {
368
413
  const root = controller.root;
369
414
  if (root === null) return;
370
415
  const onKeyDown = (event) => {
371
- if (chunk2QKFRKOP_cjs.isComposingKey(controller, event) || !isFindShortcut(event, controller.isMac)) return;
416
+ if (chunkN25EH2GZ_cjs.isComposingKey(controller, event) || !isFindShortcut(event, controller.isMac)) return;
372
417
  event.preventDefault();
373
418
  const { editor } = controller;
374
419
  openFind(editor.state, (tr) => editor.dispatch(tr));
@@ -377,15 +422,19 @@ function useFindShortcut(controller) {
377
422
  return () => root.removeEventListener("keydown", onKeyDown);
378
423
  }, [controller]);
379
424
  }
425
+ var CLEARANCE = "--quoin-find-clearance";
380
426
  function useScrollToCurrent(controller, panel, match) {
381
427
  const key = match && `${match.block}
382
428
  ${match.region}
383
429
  ${match.from}`;
384
430
  react.useEffect(() => {
385
431
  const owner = panel.current?.ownerDocument;
386
- if (key === null || !panel.current?.contains(owner?.activeElement ?? null)) return;
387
- controller.root?.querySelector(`.${CURRENT_CLASS}`)?.scrollIntoView?.({ block: "nearest", inline: "nearest" });
432
+ const { root } = controller;
433
+ if (key === null || root === null || !panel.current?.contains(owner?.activeElement ?? null)) return;
434
+ root.style.setProperty(CLEARANCE, `${panel.current.getBoundingClientRect().bottom}px`);
435
+ root.querySelector(`.${CURRENT_CLASS}`)?.scrollIntoView?.({ block: "nearest", inline: "nearest" });
388
436
  }, [controller, panel, key]);
437
+ react.useEffect(() => () => void controller.root?.style.removeProperty(CLEARANCE), [controller]);
389
438
  }
390
439
  var composing = (event) => event.nativeEvent.isComposing || event.keyCode === 229;
391
440
  var focusAll = (field) => {
@@ -393,17 +442,19 @@ var focusAll = (field) => {
393
442
  field?.select();
394
443
  };
395
444
  var HISTORY = [
396
- ["Mod-z", chunkFK7EBZPX_cjs.undo],
397
- ["Mod-Shift-z", chunkFK7EBZPX_cjs.redo],
398
- ["Mod-y", chunkFK7EBZPX_cjs.redo]
445
+ ["Mod-z", chunkZ5EEDCRI_cjs.undo],
446
+ ["Mod-Shift-z", chunkZ5EEDCRI_cjs.redo],
447
+ ["Mod-y", chunkZ5EEDCRI_cjs.redo]
399
448
  ];
400
- var historyCommand = (event, isMac) => HISTORY.find(([key]) => chunkFK7EBZPX_cjs.normalizeKey(key, isMac) === chunkFK7EBZPX_cjs.keyName(event, isMac))?.[1];
449
+ var historyCommand = (event, isMac) => HISTORY.find(([key]) => chunkZ5EEDCRI_cjs.normalizeKey(key, isMac) === chunkZ5EEDCRI_cjs.keyName(event, isMac))?.[1];
401
450
  var plainEnter = (event) => event.key === "Enter" && !event.altKey && !event.ctrlKey && !event.metaKey;
402
451
  function FindPanel({ controller, labels, value, readOnly }) {
403
452
  const actions = react.useMemo(() => findActions(controller), [controller]);
404
453
  const [replacement, setReplacement] = react.useState("");
405
454
  const panel = react.useRef(null);
455
+ const dir = reactDirection.useDirection();
406
456
  const query = react.useRef(null);
457
+ const statusId = react.useId();
407
458
  react.useEffect(() => focusAll(query.current), [value.opened]);
408
459
  useScrollToCurrent(controller, panel, currentMatch(value));
409
460
  const onPanelKeyDown = (event) => {
@@ -439,30 +490,32 @@ function FindPanel({ controller, labels, value, readOnly }) {
439
490
  "div",
440
491
  {
441
492
  ref: panel,
493
+ dir,
442
494
  role: "search",
443
495
  "aria-label": labels.findAndReplace,
444
- className: "quoin quoin-find-panel bg-popover fixed top-4 right-4 z-50 max-w-[calc(100vw-2rem)] text-popover-foreground flex flex-col gap-1.5 rounded-lg border p-2 shadow-md",
496
+ className: "quoin quoin-find-panel bg-popover fixed top-4 end-4 z-50 max-w-[calc(100vw-2rem)] text-popover-foreground flex flex-col gap-1.5 rounded-lg border p-2 shadow-md",
445
497
  onKeyDown: onPanelKeyDown,
446
498
  onClick: onPanelClick,
447
499
  children: [
448
500
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-1", children: [
449
501
  /* @__PURE__ */ jsxRuntime.jsx(
450
- chunkEBSDPHPS_cjs.Input,
502
+ chunk4UFWFV43_cjs.Input,
451
503
  {
452
504
  ref: query,
453
505
  "aria-label": labels.find,
454
506
  placeholder: labels.find,
455
507
  value: value.search.query,
456
508
  "aria-invalid": value.error !== null,
509
+ "aria-describedby": value.error === null ? void 0 : statusId,
457
510
  onChange: (event) => actions.search(event.target.value),
458
511
  onKeyDown: onQueryKeyDown,
459
512
  className: "h-8 w-48"
460
513
  }
461
514
  ),
462
- /* @__PURE__ */ jsxRuntime.jsx(FindStatus, { labels, value }),
515
+ /* @__PURE__ */ jsxRuntime.jsx(FindStatus, { id: statusId, labels, value }),
463
516
  /* @__PURE__ */ jsxRuntime.jsx(FindToggles, { labels, options: value.search, onToggle: actions.toggle }),
464
517
  /* @__PURE__ */ jsxRuntime.jsx(
465
- chunkEBSDPHPS_cjs.Button,
518
+ chunk4UFWFV43_cjs.Button,
466
519
  {
467
520
  type: "button",
468
521
  variant: "ghost",
@@ -470,11 +523,11 @@ function FindPanel({ controller, labels, value, readOnly }) {
470
523
  "aria-label": labels.previousMatch,
471
524
  title: labels.previousMatch,
472
525
  onClick: () => actions.step(-1),
473
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkEBSDPHPS_cjs.ChevronUp, { "aria-hidden": true })
526
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunk4UFWFV43_cjs.ChevronUp, { "aria-hidden": true })
474
527
  }
475
528
  ),
476
529
  /* @__PURE__ */ jsxRuntime.jsx(
477
- chunkEBSDPHPS_cjs.Button,
530
+ chunk4UFWFV43_cjs.Button,
478
531
  {
479
532
  type: "button",
480
533
  variant: "ghost",
@@ -482,11 +535,11 @@ function FindPanel({ controller, labels, value, readOnly }) {
482
535
  "aria-label": labels.nextMatch,
483
536
  title: labels.nextMatch,
484
537
  onClick: () => actions.step(1),
485
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkEBSDPHPS_cjs.ChevronDown, { "aria-hidden": true })
538
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunk4UFWFV43_cjs.ChevronDown, { "aria-hidden": true })
486
539
  }
487
540
  ),
488
541
  /* @__PURE__ */ jsxRuntime.jsx(
489
- chunkEBSDPHPS_cjs.Button,
542
+ chunk4UFWFV43_cjs.Button,
490
543
  {
491
544
  type: "button",
492
545
  variant: "ghost",
@@ -494,13 +547,13 @@ function FindPanel({ controller, labels, value, readOnly }) {
494
547
  "aria-label": labels.close,
495
548
  title: labels.close,
496
549
  onClick: actions.close,
497
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkEBSDPHPS_cjs.X, { "aria-hidden": true })
550
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunk4UFWFV43_cjs.X, { "aria-hidden": true })
498
551
  }
499
552
  )
500
553
  ] }),
501
554
  !readOnly && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-1", children: [
502
555
  /* @__PURE__ */ jsxRuntime.jsx(
503
- chunkEBSDPHPS_cjs.Input,
556
+ chunk4UFWFV43_cjs.Input,
504
557
  {
505
558
  "aria-label": labels.replaceWith,
506
559
  placeholder: labels.replaceWith,
@@ -510,18 +563,18 @@ function FindPanel({ controller, labels, value, readOnly }) {
510
563
  className: "h-8 w-48"
511
564
  }
512
565
  ),
513
- /* @__PURE__ */ jsxRuntime.jsx(chunkEBSDPHPS_cjs.Button, { type: "button", variant: "outline", size: "sm", onClick: () => actions.replace(replacement), children: labels.replace }),
514
- /* @__PURE__ */ jsxRuntime.jsx(chunkEBSDPHPS_cjs.Button, { type: "button", variant: "outline", size: "sm", onClick: () => actions.replaceAll(replacement), children: labels.replaceAll })
566
+ /* @__PURE__ */ jsxRuntime.jsx(chunk4UFWFV43_cjs.Button, { type: "button", variant: "outline", size: "sm", onClick: () => actions.replace(replacement), children: labels.replace }),
567
+ /* @__PURE__ */ jsxRuntime.jsx(chunk4UFWFV43_cjs.Button, { type: "button", variant: "outline", size: "sm", onClick: () => actions.replaceAll(replacement), children: labels.replaceAll })
515
568
  ] })
516
569
  ]
517
570
  }
518
571
  );
519
572
  }
520
573
  function FindOverlay({ controller, labels }) {
521
- const readOnly = chunk2QKFRKOP_cjs.useReadOnly(controller);
522
- const value = chunk2QKFRKOP_cjs.useEditorState(
574
+ const readOnly = chunkN25EH2GZ_cjs.useReadOnly(controller);
575
+ const value = chunkN25EH2GZ_cjs.useEditorState(
523
576
  controller,
524
- react.useCallback((state) => chunkFK7EBZPX_cjs.getPluginState(state, findKey), [])
577
+ react.useCallback((state) => chunkZ5EEDCRI_cjs.getPluginState(state, findKey), [])
525
578
  );
526
579
  useFindShortcut(controller);
527
580
  if (!value.open) return null;
@@ -533,7 +586,7 @@ function findExtension(options = {}) {
533
586
  const labels = resolveFindLabels(options.labels);
534
587
  const Overlay = ({ controller }) => /* @__PURE__ */ jsxRuntime.jsx(FindOverlay, { controller, labels });
535
588
  const ui = { overlays: [Overlay] };
536
- return chunkFK7EBZPX_cjs.defineExtension({ name: "find", plugins: [findPlugin], decorations: findDecorations, ui });
589
+ return chunkZ5EEDCRI_cjs.defineExtension({ name: "find", plugins: [findPlugin], decorations: findDecorations, ui });
537
590
  }
538
591
 
539
592
  exports.englishFindLabels = englishFindLabels;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkI7X7B3WD_cjs = require('./chunk-I7X7B3WD.cjs');
3
+ var chunk4JDRDPLC_cjs = require('./chunk-4JDRDPLC.cjs');
4
4
 
5
5
  // src/engine/diff/myers.ts
6
6
  var same = (x, y) => x === y;
@@ -97,21 +97,21 @@ function tokenize(inline) {
97
97
 
98
98
  // src/engine/diff/diff-inline.ts
99
99
  function diffInline(a, b) {
100
- return diffSequences(tokenize(a), tokenize(b), chunkI7X7B3WD_cjs.equalNode).map(({ op, items }) => ({
100
+ return diffSequences(tokenize(a), tokenize(b), chunk4JDRDPLC_cjs.equalNode).map(({ op, items }) => ({
101
101
  op,
102
- inline: chunkI7X7B3WD_cjs.normalizeInline(items)
102
+ inline: chunk4JDRDPLC_cjs.normalizeInline(items)
103
103
  }));
104
104
  }
105
105
 
106
106
  // src/engine/diff/block-change.ts
107
107
  var indentOf = (block) => block.indent ?? 0;
108
108
  function sameContent(a, b) {
109
- return a.type === b.type && indentOf(a) === indentOf(b) && chunkI7X7B3WD_cjs.sameValue(a.data, b.data);
109
+ return a.type === b.type && indentOf(a) === indentOf(b) && chunk4JDRDPLC_cjs.sameValue(a.data, b.data);
110
110
  }
111
111
  function changeBetween(before, after, schema, ctx) {
112
- const left = chunkI7X7B3WD_cjs.specFor(schema, before.type).fromData(before.data, ctx);
113
- const right = chunkI7X7B3WD_cjs.specFor(schema, after.type).fromData(after.data, ctx);
114
- const names = [.../* @__PURE__ */ new Set([...Object.keys(left.regions), ...Object.keys(right.regions)])].sort(chunkI7X7B3WD_cjs.compareRegionNames);
112
+ const left = chunk4JDRDPLC_cjs.specFor(schema, before.type).fromData(before.data, ctx);
113
+ const right = chunk4JDRDPLC_cjs.specFor(schema, after.type).fromData(after.data, ctx);
114
+ const names = [.../* @__PURE__ */ new Set([...Object.keys(left.regions), ...Object.keys(right.regions)])].sort(chunk4JDRDPLC_cjs.compareRegionNames);
115
115
  return {
116
116
  op: "change",
117
117
  before,
@@ -119,7 +119,7 @@ function changeBetween(before, after, schema, ctx) {
119
119
  regions: Object.fromEntries(
120
120
  names.map((name) => [name, diffInline(left.regions[name] ?? [], right.regions[name] ?? [])])
121
121
  ),
122
- attrsChanged: before.type !== after.type || indentOf(before) !== indentOf(after) || !chunkI7X7B3WD_cjs.sameValue(left.attrs, right.attrs)
122
+ attrsChanged: before.type !== after.type || indentOf(before) !== indentOf(after) || !chunk4JDRDPLC_cjs.sameValue(left.attrs, right.attrs)
123
123
  };
124
124
  }
125
125
 
@@ -173,7 +173,7 @@ function profileOf(block) {
173
173
  }
174
174
  function similarity(a, b) {
175
175
  if (a.block.type !== b.block.type) return 0;
176
- if (a.total === 0 && b.total === 0) return chunkI7X7B3WD_cjs.sameValue(a.block.data, b.block.data) ? 1 : 0;
176
+ if (a.total === 0 && b.total === 0) return chunk4JDRDPLC_cjs.sameValue(a.block.data, b.block.data) ? 1 : 0;
177
177
  let shared = 0;
178
178
  for (const [word, count] of a.words) shared += Math.min(count, b.words.get(word) ?? 0);
179
179
  return 2 * shared / (a.total + b.total);
@@ -286,8 +286,8 @@ function idsMostlyMatch(a, b) {
286
286
  return matching * 2 >= Math.min(a.length, b.length);
287
287
  }
288
288
  function diffBlocks(a, b, options = {}) {
289
- const schema = options.schema ?? chunkI7X7B3WD_cjs.createSchema();
290
- const codec = chunkI7X7B3WD_cjs.createBlockCodec(schema);
289
+ const schema = options.schema ?? chunk4JDRDPLC_cjs.createSchema();
290
+ const codec = chunk4JDRDPLC_cjs.createBlockCodec(schema);
291
291
  const byId = idsMostlyMatch(a, b);
292
292
  const taken = { before: new Set(a.map(idOf2)), after: new Set(b.map(idOf2)) };
293
293
  const expand = (block, side) => {
@@ -1,9 +1,9 @@
1
- import { selectedAtomDecorations, atomKeymap, useSelectionOutOfAtoms, atomAtTarget, plainEnter, selectedAtom } from './chunk-4G645EYO.js';
2
- import { webAddress } from './chunk-DBOZFNWU.js';
3
- import { suggestionPlugin, useQuoin, SuggestionMenu, replaceTrigger, toError, dismissSuggestion } from './chunk-G6NBQYMM.js';
4
- import { useReadOnly, useIsomorphicLayoutEffect, isComposingKey } from './chunk-2BPXVQBP.js';
1
+ import { selectedAtomDecorations, atomKeymap, useSelectionOutOfAtoms, atomAtTarget, plainEnter, selectedAtom } from './chunk-F73QEF7E.js';
2
+ import { webAddress } from './chunk-3QYFAAQR.js';
3
+ import { suggestionPlugin, useQuoin, SuggestionMenu, replaceTrigger, toError, dismissSuggestion } from './chunk-ZGFZRVQA.js';
4
+ import { useReadOnly, useIsomorphicLayoutEffect, isComposingKey } from './chunk-MO4UMXMT.js';
5
5
  import { mergeLabels } from './chunk-DLQCTGC3.js';
6
- import { createPluginKey, defineExtension, getPluginState, runCommands, insertMention, insertText } from './chunk-5RBMZGKV.js';
6
+ import { createPluginKey, defineExtension, getPluginState, runCommands, insertMention, insertText } from './chunk-TL2MJOWM.js';
7
7
  import { useEffect, useRef, useMemo, useCallback, useState } from 'react';
8
8
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
9
9
 
@@ -111,7 +111,7 @@ function useCloseOnSpace(controller, foundNothing) {
111
111
  const onBeforeInput = (event) => {
112
112
  if (event.inputType !== "insertText" || event.isComposing || !STARTS_WITH_SPACE.test(event.data ?? "")) return;
113
113
  const query = getPluginState(controller.editor.state, mentionKey).active?.query;
114
- if (query === "" || query !== void 0 && foundNothing(query)) controller.run(dismissSuggestion(mentionKey));
114
+ if (query && foundNothing(query)) controller.run(dismissSuggestion(mentionKey));
115
115
  };
116
116
  root.addEventListener("beforeinput", onBeforeInput, true);
117
117
  return () => root.removeEventListener("beforeinput", onBeforeInput, true);
@@ -268,5 +268,5 @@ function mentionExtension(options = {}) {
268
268
  }
269
269
 
270
270
  export { englishMentionLabels, mentionExtension };
271
- //# sourceMappingURL=chunk-W376L2GM.js.map
272
- //# sourceMappingURL=chunk-W376L2GM.js.map
271
+ //# sourceMappingURL=chunk-6Y7JAWYY.js.map
272
+ //# sourceMappingURL=chunk-6Y7JAWYY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/extensions/mention/mention-feature.ts","../src/extensions/mention/mention-key.ts","../src/extensions/mention/mention-labels.ts","../src/extensions/mention/MentionChip.ts","../src/extensions/mention/choose-mention.ts","../src/extensions/mention/mention-results.ts","../src/extensions/mention/mention-source.ts","../src/extensions/mention/use-close-on-space.ts","../src/extensions/mention/MentionItem.tsx","../src/extensions/mention/MentionMenu.tsx","../src/extensions/mention/use-mention-opening.ts","../src/extensions/mention/use-read-only-chips.ts","../src/extensions/mention/MentionOverlay.tsx","../src/extensions/mention/mention-extension.tsx"],"names":["jsx","useEffect"],"mappings":"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","file":"chunk-6Y7JAWYY.js"}