@vscode/markdown-editor 0.0.2-13 → 0.0.2-131

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 (79) hide show
  1. package/README.md +659 -0
  2. package/dist/commands.d.ts +67 -0
  3. package/dist/commands.js +185 -0
  4. package/dist/commands.js.map +1 -0
  5. package/dist/config-BGeaJqWk.js +286 -0
  6. package/dist/config-BGeaJqWk.js.map +1 -0
  7. package/dist/config.d.ts +10 -0
  8. package/dist/config.js +6 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/index.d.ts +1611 -270
  11. package/dist/index.js +7839 -3291
  12. package/dist/index.js.map +1 -1
  13. package/dist/markdown-editor.css +1 -1
  14. package/dist/scrolling-C4GW1cCQ.js +391 -0
  15. package/dist/scrolling-C4GW1cCQ.js.map +1 -0
  16. package/dist/web-editors.d.ts +354 -0
  17. package/dist/web-editors.js +7528 -0
  18. package/dist/web-editors.js.map +1 -0
  19. package/package.json +59 -19
  20. package/src/contrib/comments/commentInput.css +38 -80
  21. package/src/contrib/comments/commentWidget.css +60 -0
  22. package/src/contrib/find/find.css +347 -0
  23. package/src/contrib/rename/rename.css +73 -0
  24. package/src/contrib/suggest/suggest.css +109 -0
  25. package/src/view/editor.css +1702 -111
  26. package/src/view/themes/default.css +21 -4
  27. package/src/view/themes/github.css +25 -13
  28. package/src/view/themes/vscode-default.css +98 -23
  29. package/src/view/themes/vscode-github.css +84 -15
  30. package/dist/_observables/assert.d.ts +0 -2
  31. package/dist/_observables/deps.d.ts +0 -28
  32. package/dist/_observables/disposables.d.ts +0 -19
  33. package/dist/_observables/equals.d.ts +0 -32
  34. package/dist/_observables/index.d.ts +0 -2
  35. package/dist/_observables/observableInternal/base.d.ts +0 -172
  36. package/dist/_observables/observableInternal/changeTracker.d.ts +0 -44
  37. package/dist/_observables/observableInternal/commonFacade/cancellation.d.ts +0 -24
  38. package/dist/_observables/observableInternal/commonFacade/deps.d.ts +0 -24
  39. package/dist/_observables/observableInternal/debugLocation.d.ts +0 -21
  40. package/dist/_observables/observableInternal/debugName.d.ts +0 -33
  41. package/dist/_observables/observableInternal/experimental/deferUnobserve.d.ts +0 -16
  42. package/dist/_observables/observableInternal/experimental/reducer.d.ts +0 -37
  43. package/dist/_observables/observableInternal/experimental/utils.d.ts +0 -15
  44. package/dist/_observables/observableInternal/index.d.ts +0 -25
  45. package/dist/_observables/observableInternal/logging/consoleObservableLogger.d.ts +0 -40
  46. package/dist/_observables/observableInternal/logging/debugGetDependencyGraph.d.ts +0 -4
  47. package/dist/_observables/observableInternal/logging/debugger/debuggerRpc.d.ts +0 -4
  48. package/dist/_observables/observableInternal/logging/debugger/devToolsLogger.d.ts +0 -43
  49. package/dist/_observables/observableInternal/logging/debugger/rpc.d.ts +0 -41
  50. package/dist/_observables/observableInternal/logging/debugger/utils.d.ts +0 -13
  51. package/dist/_observables/observableInternal/logging/logging.d.ts +0 -30
  52. package/dist/_observables/observableInternal/map.d.ts +0 -18
  53. package/dist/_observables/observableInternal/observables/baseObservable.d.ts +0 -58
  54. package/dist/_observables/observableInternal/observables/constObservable.d.ts +0 -5
  55. package/dist/_observables/observableInternal/observables/derived.d.ts +0 -46
  56. package/dist/_observables/observableInternal/observables/derivedImpl.d.ts +0 -83
  57. package/dist/_observables/observableInternal/observables/lazyObservableValue.d.ts +0 -27
  58. package/dist/_observables/observableInternal/observables/observableFromEvent.d.ts +0 -37
  59. package/dist/_observables/observableInternal/observables/observableSignal.d.ts +0 -11
  60. package/dist/_observables/observableInternal/observables/observableSignalFromEvent.d.ts +0 -5
  61. package/dist/_observables/observableInternal/observables/observableValue.d.ts +0 -37
  62. package/dist/_observables/observableInternal/observables/observableValueOpts.d.ts +0 -8
  63. package/dist/_observables/observableInternal/reactions/autorun.d.ts +0 -56
  64. package/dist/_observables/observableInternal/reactions/autorunImpl.d.ts +0 -53
  65. package/dist/_observables/observableInternal/set.d.ts +0 -17
  66. package/dist/_observables/observableInternal/transaction.d.ts +0 -27
  67. package/dist/_observables/observableInternal/utils/promise.d.ts +0 -75
  68. package/dist/_observables/observableInternal/utils/runOnChange.d.ts +0 -7
  69. package/dist/_observables/observableInternal/utils/utils.d.ts +0 -43
  70. package/dist/_observables/observableInternal/utils/utilsCancellation.d.ts +0 -10
  71. package/dist/_observables/observableInternal/utils/valueWithChangeEvent.d.ts +0 -10
  72. package/dist/_observables/utils.d.ts +0 -15
  73. package/dist/observables.d.ts +0 -4
  74. package/dist/observables.js +0 -439
  75. package/dist/observables.js.map +0 -1
  76. package/dist/runOnChange-C00UIwqQ.js +0 -1538
  77. package/dist/runOnChange-C00UIwqQ.js.map +0 -1
  78. package/src/contrib/comments/comments.css +0 -129
  79. package/src/contrib/commentsVscode/vscodeCommentWidgetV2.css +0 -166
@@ -0,0 +1,391 @@
1
+ class i {
2
+ constructor(t, e) {
3
+ if (this.start = t, this.endExclusive = e, t > e)
4
+ throw new Error(`Invalid range: [${t}, ${e})`);
5
+ }
6
+ static fromTo(t, e) {
7
+ return new i(t, e);
8
+ }
9
+ static ofLength(t) {
10
+ return new i(0, t);
11
+ }
12
+ static ofStartAndLength(t, e) {
13
+ return new i(t, t + e);
14
+ }
15
+ static emptyAt(t) {
16
+ return new i(t, t);
17
+ }
18
+ get isEmpty() {
19
+ return this.start === this.endExclusive;
20
+ }
21
+ get length() {
22
+ return this.endExclusive - this.start;
23
+ }
24
+ delta(t) {
25
+ return new i(this.start + t, this.endExclusive + t);
26
+ }
27
+ deltaStart(t) {
28
+ return new i(this.start + t, this.endExclusive);
29
+ }
30
+ deltaEnd(t) {
31
+ return new i(this.start, this.endExclusive + t);
32
+ }
33
+ contains(t) {
34
+ return this.start <= t && t < this.endExclusive;
35
+ }
36
+ containsRange(t) {
37
+ return this.start <= t.start && t.endExclusive <= this.endExclusive;
38
+ }
39
+ intersects(t) {
40
+ return Math.max(this.start, t.start) < Math.min(this.endExclusive, t.endExclusive);
41
+ }
42
+ intersectsOrTouches(t) {
43
+ return Math.max(this.start, t.start) <= Math.min(this.endExclusive, t.endExclusive);
44
+ }
45
+ intersect(t) {
46
+ const e = Math.max(this.start, t.start), s = Math.min(this.endExclusive, t.endExclusive);
47
+ if (e <= s)
48
+ return new i(e, s);
49
+ }
50
+ join(t) {
51
+ return new i(
52
+ Math.min(this.start, t.start),
53
+ Math.max(this.endExclusive, t.endExclusive)
54
+ );
55
+ }
56
+ isBefore(t) {
57
+ return this.endExclusive <= t.start;
58
+ }
59
+ isAfter(t) {
60
+ return this.start >= t.endExclusive;
61
+ }
62
+ substring(t) {
63
+ return t.substring(this.start, this.endExclusive);
64
+ }
65
+ slice(t) {
66
+ return t.slice(this.start, this.endExclusive);
67
+ }
68
+ equals(t) {
69
+ return this.start === t.start && this.endExclusive === t.endExclusive;
70
+ }
71
+ toString() {
72
+ return `[${this.start}, ${this.endExclusive})`;
73
+ }
74
+ }
75
+ class l {
76
+ constructor(t, e) {
77
+ this.replaceRange = t, this.newText = e;
78
+ }
79
+ static insert(t, e) {
80
+ return new l(i.emptyAt(t), e);
81
+ }
82
+ static replace(t, e) {
83
+ return new l(t, e);
84
+ }
85
+ static delete(t) {
86
+ return new l(t, "");
87
+ }
88
+ get isEmpty() {
89
+ return this.replaceRange.isEmpty && this.newText.length === 0;
90
+ }
91
+ equals(t) {
92
+ return this.replaceRange.equals(t.replaceRange) && this.newText === t.newText;
93
+ }
94
+ /**
95
+ * Narrows this replacement to the span that actually changes, by trimming
96
+ * the prefix and suffix it shares with the text it replaces in `source`.
97
+ */
98
+ removeCommonSuffixPrefix(t) {
99
+ const e = this.replaceRange.substring(t), s = M(e, this.newText), r = Math.min(
100
+ e.length - s,
101
+ this.newText.length - s,
102
+ S(e, this.newText)
103
+ );
104
+ return new l(
105
+ new i(
106
+ this.replaceRange.start + s,
107
+ this.replaceRange.endExclusive - r
108
+ ),
109
+ this.newText.substring(s, this.newText.length - r)
110
+ );
111
+ }
112
+ toString() {
113
+ return `${this.replaceRange} -> ${JSON.stringify(this.newText)}`;
114
+ }
115
+ }
116
+ function M(n, t) {
117
+ const e = Math.min(n.length, t.length);
118
+ let s = 0;
119
+ for (; s < e && n.charCodeAt(s) === t.charCodeAt(s); )
120
+ s++;
121
+ return s;
122
+ }
123
+ function S(n, t) {
124
+ const e = Math.min(n.length, t.length);
125
+ let s = 0;
126
+ for (; s < e && n.charCodeAt(n.length - s - 1) === t.charCodeAt(t.length - s - 1); )
127
+ s++;
128
+ return s;
129
+ }
130
+ class h {
131
+ static empty = new h([]);
132
+ static single(t) {
133
+ return new h([t]);
134
+ }
135
+ static replace(t, e) {
136
+ return new h([l.replace(t, e)]);
137
+ }
138
+ static insert(t, e) {
139
+ return new h([l.insert(t, e)]);
140
+ }
141
+ static delete(t) {
142
+ return new h([l.delete(t)]);
143
+ }
144
+ replacements;
145
+ constructor(t) {
146
+ let e = -1;
147
+ for (const s of t) {
148
+ if (s.replaceRange.start < e)
149
+ throw new Error(
150
+ `Edits must be disjoint and sorted. Found ${s} after ${e}`
151
+ );
152
+ e = s.replaceRange.endExclusive;
153
+ }
154
+ this.replacements = t;
155
+ }
156
+ get isEmpty() {
157
+ return this.replacements.length === 0;
158
+ }
159
+ apply(t) {
160
+ const e = [];
161
+ let s = 0;
162
+ for (const r of this.replacements)
163
+ e.push(t.substring(s, r.replaceRange.start)), e.push(r.newText), s = r.replaceRange.endExclusive;
164
+ return e.push(t.substring(s)), e.join("");
165
+ }
166
+ inverse(t) {
167
+ const e = [];
168
+ let s = 0;
169
+ for (const r of this.replacements) {
170
+ const o = t.substring(r.replaceRange.start, r.replaceRange.endExclusive);
171
+ e.push(
172
+ l.replace(
173
+ i.ofStartAndLength(r.replaceRange.start + s, r.newText.length),
174
+ o
175
+ )
176
+ ), s += r.newText.length - r.replaceRange.length;
177
+ }
178
+ return new h(e);
179
+ }
180
+ equals(t) {
181
+ if (this.replacements.length !== t.replacements.length)
182
+ return !1;
183
+ for (let e = 0; e < this.replacements.length; e++)
184
+ if (!this.replacements[e].equals(t.replacements[e]))
185
+ return !1;
186
+ return !0;
187
+ }
188
+ mapOffset(t) {
189
+ let e = 0;
190
+ for (const s of this.replacements) {
191
+ if (s.replaceRange.start > t)
192
+ break;
193
+ if (s.replaceRange.endExclusive <= t)
194
+ e += s.newText.length - s.replaceRange.length;
195
+ else
196
+ return s.replaceRange.start + e + s.newText.length;
197
+ }
198
+ return t + e;
199
+ }
200
+ toString() {
201
+ return `[${this.replacements.map((t) => t.toString()).join(", ")}]`;
202
+ }
203
+ }
204
+ function P(n, t) {
205
+ return n === t ? h.empty : h.single(
206
+ l.replace(new i(0, n.length), t).removeCommonSuffixPrefix(n)
207
+ );
208
+ }
209
+ class d {
210
+ constructor(t, e) {
211
+ this.x = t, this.y = e;
212
+ }
213
+ static ZERO = new d(0, 0);
214
+ translate(t, e) {
215
+ return new d(this.x + t, this.y + e);
216
+ }
217
+ }
218
+ class c {
219
+ constructor(t, e, s, r) {
220
+ this.x = t, this.y = e, this.width = s, this.height = r;
221
+ }
222
+ static EMPTY = new c(0, 0, 0, 0);
223
+ static fromPointPoint(t, e, s, r) {
224
+ return new c(t, e, s - t, r - e);
225
+ }
226
+ static fromPointSize(t, e, s, r) {
227
+ return new c(t, e, s, r);
228
+ }
229
+ get left() {
230
+ return this.x;
231
+ }
232
+ get top() {
233
+ return this.y;
234
+ }
235
+ get right() {
236
+ return this.x + this.width;
237
+ }
238
+ get bottom() {
239
+ return this.y + this.height;
240
+ }
241
+ get topLeft() {
242
+ return new d(this.x, this.y);
243
+ }
244
+ containsX(t) {
245
+ return t >= this.left && t < this.right;
246
+ }
247
+ containsY(t) {
248
+ return t >= this.top && t < this.bottom;
249
+ }
250
+ containsPoint(t) {
251
+ return this.containsX(t.x) && this.containsY(t.y);
252
+ }
253
+ /** Same y/height, zero-width band at `x = this.left`. Useful for caret rects derived from a line. */
254
+ withZeroWidthAt(t) {
255
+ return new c(t, this.y, 0, this.height);
256
+ }
257
+ translate(t, e) {
258
+ return new c(this.x + t, this.y + e, this.width, this.height);
259
+ }
260
+ }
261
+ const m = 1;
262
+ function W(n, t, e) {
263
+ if (T(n))
264
+ return;
265
+ const s = n.ownerDocument;
266
+ if (n === s.scrollingElement)
267
+ return H(s.defaultView ?? window, t, e);
268
+ const r = y(n, t, e, n.clientWidth, n.clientHeight);
269
+ return {
270
+ eventTarget: n,
271
+ isReached: () => b(n.scrollLeft, n.scrollTop, r)
272
+ };
273
+ }
274
+ function H(n, t, e) {
275
+ const s = n.document, r = y(
276
+ s.scrollingElement ?? s.documentElement,
277
+ t,
278
+ e,
279
+ s.documentElement.clientWidth || n.innerWidth,
280
+ s.documentElement.clientHeight || n.innerHeight
281
+ );
282
+ return {
283
+ eventTarget: s,
284
+ isReached: () => b(n.scrollX, n.scrollY, r)
285
+ };
286
+ }
287
+ function y(n, t, e, s, r) {
288
+ const o = Math.max(0, n.scrollWidth - s), a = Math.max(0, n.scrollHeight - r), u = (n.ownerDocument.defaultView ?? window).getComputedStyle(n).direction === "rtl";
289
+ return new d(
290
+ u ? Math.max(-o, Math.min(0, t)) : Math.max(0, Math.min(o, t)),
291
+ Math.max(0, Math.min(a, e))
292
+ );
293
+ }
294
+ function b(n, t, e) {
295
+ return Math.abs(n - e.x) <= m && Math.abs(t - e.y) <= m;
296
+ }
297
+ function L(n) {
298
+ const t = n.ownerDocument, e = t.defaultView ?? window;
299
+ let s = c.fromPointSize(
300
+ 0,
301
+ 0,
302
+ t.documentElement.clientWidth || e.innerWidth,
303
+ t.documentElement.clientHeight || e.innerHeight
304
+ );
305
+ for (let r = n.parentElement; r; r = r.parentElement) {
306
+ const o = e.getComputedStyle(r), a = E(o.overflowX), u = E(o.overflowY);
307
+ if (!a && !u)
308
+ continue;
309
+ const g = C(r), f = a ? Math.max(s.left, g.left) : s.left, w = a ? Math.min(s.right, g.right) : s.right, p = u ? Math.max(s.top, g.top) : s.top, x = u ? Math.min(s.bottom, g.bottom) : s.bottom;
310
+ if (w <= f || x <= p)
311
+ return c.fromPointSize(f, p, 0, 0);
312
+ s = c.fromPointPoint(
313
+ f,
314
+ p,
315
+ w,
316
+ x
317
+ );
318
+ }
319
+ return s;
320
+ }
321
+ function C(n) {
322
+ const t = n.getBoundingClientRect(), e = n.offsetWidth > 0 ? t.width / n.offsetWidth : 1, s = n.offsetHeight > 0 ? t.height / n.offsetHeight : 1;
323
+ return c.fromPointSize(
324
+ t.left + n.clientLeft * e,
325
+ t.top + n.clientTop * s,
326
+ n.clientWidth * e,
327
+ n.clientHeight * s
328
+ );
329
+ }
330
+ function A(n, t, e) {
331
+ const s = n.getBoundingClientRect(), r = n.offsetWidth > 0 ? s.width / n.offsetWidth : 1, o = n.offsetHeight > 0 ? s.height / n.offsetHeight : 1;
332
+ return {
333
+ x: t / r,
334
+ y: e / o
335
+ };
336
+ }
337
+ function R(n) {
338
+ const t = Math.max(n.horizontalScrollbarHeight, 0);
339
+ return n.scrollHeight - n.clientHeight > t;
340
+ }
341
+ function T(n) {
342
+ const t = n.ownerDocument;
343
+ if (n !== t.body)
344
+ return !1;
345
+ const e = t.defaultView?.getComputedStyle(t.documentElement);
346
+ return e !== void 0 && e.overflowX === "visible" && e.overflowY === "visible";
347
+ }
348
+ function Y(n) {
349
+ if (T(n))
350
+ return !1;
351
+ const t = n.ownerDocument.defaultView?.getComputedStyle(n), e = t ? parseFloat(t.borderTopWidth) + parseFloat(t.borderBottomWidth) : 0;
352
+ return R({
353
+ scrollHeight: n.scrollHeight,
354
+ clientHeight: n.clientHeight,
355
+ horizontalScrollbarHeight: n.offsetHeight - n.clientHeight - (Number.isFinite(e) ? e : 0)
356
+ });
357
+ }
358
+ function X(n) {
359
+ const e = n.ownerDocument.defaultView ?? window, s = [];
360
+ for (let r = n.parentElement; r; r = r.parentElement) {
361
+ const o = e.getComputedStyle(r), a = v(o.overflowX) && r.scrollWidth > r.clientWidth, u = v(o.overflowY) && r.scrollHeight > r.clientHeight;
362
+ (a || u) && s.push(r);
363
+ }
364
+ return s;
365
+ }
366
+ function V(n, t) {
367
+ return n.left <= t.left && t.right <= n.right && n.top <= t.top && t.bottom <= n.bottom;
368
+ }
369
+ function E(n) {
370
+ return n === "auto" || n === "scroll" || n === "hidden" || n === "clip";
371
+ }
372
+ function v(n) {
373
+ return n === "auto" || n === "scroll" || n === "hidden";
374
+ }
375
+ export {
376
+ i as O,
377
+ d as P,
378
+ c as R,
379
+ h as S,
380
+ L as a,
381
+ l as b,
382
+ A as c,
383
+ P as d,
384
+ V as e,
385
+ X as f,
386
+ C as g,
387
+ Y as h,
388
+ W as i,
389
+ H as j
390
+ };
391
+ //# sourceMappingURL=scrolling-C4GW1cCQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrolling-C4GW1cCQ.js","sources":["../src/core/offsetRange.ts","../src/core/stringEdit.ts","../src/core/geometry.ts","../src/view/scrolling.ts"],"sourcesContent":["export class OffsetRange {\n\tpublic static fromTo(start: number, endExclusive: number): OffsetRange {\n\t\treturn new OffsetRange(start, endExclusive);\n\t}\n\n\tpublic static ofLength(length: number): OffsetRange {\n\t\treturn new OffsetRange(0, length);\n\t}\n\n\tpublic static ofStartAndLength(start: number, length: number): OffsetRange {\n\t\treturn new OffsetRange(start, start + length);\n\t}\n\n\tpublic static emptyAt(offset: number): OffsetRange {\n\t\treturn new OffsetRange(offset, offset);\n\t}\n\n\tconstructor(\n\t\tpublic readonly start: number,\n\t\tpublic readonly endExclusive: number,\n\t) {\n\t\tif (start > endExclusive) {\n\t\t\tthrow new Error(`Invalid range: [${start}, ${endExclusive})`);\n\t\t}\n\t}\n\n\tget isEmpty(): boolean {\n\t\treturn this.start === this.endExclusive;\n\t}\n\n\tget length(): number {\n\t\treturn this.endExclusive - this.start;\n\t}\n\n\tpublic delta(offset: number): OffsetRange {\n\t\treturn new OffsetRange(this.start + offset, this.endExclusive + offset);\n\t}\n\n\tpublic deltaStart(offset: number): OffsetRange {\n\t\treturn new OffsetRange(this.start + offset, this.endExclusive);\n\t}\n\n\tpublic deltaEnd(offset: number): OffsetRange {\n\t\treturn new OffsetRange(this.start, this.endExclusive + offset);\n\t}\n\n\tpublic contains(offset: number): boolean {\n\t\treturn this.start <= offset && offset < this.endExclusive;\n\t}\n\n\tpublic containsRange(other: OffsetRange): boolean {\n\t\treturn this.start <= other.start && other.endExclusive <= this.endExclusive;\n\t}\n\n\tpublic intersects(other: OffsetRange): boolean {\n\t\treturn Math.max(this.start, other.start) < Math.min(this.endExclusive, other.endExclusive);\n\t}\n\n\tpublic intersectsOrTouches(other: OffsetRange): boolean {\n\t\treturn Math.max(this.start, other.start) <= Math.min(this.endExclusive, other.endExclusive);\n\t}\n\n\tpublic intersect(other: OffsetRange): OffsetRange | undefined {\n\t\tconst start = Math.max(this.start, other.start);\n\t\tconst end = Math.min(this.endExclusive, other.endExclusive);\n\t\tif (start <= end) {\n\t\t\treturn new OffsetRange(start, end);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tpublic join(other: OffsetRange): OffsetRange {\n\t\treturn new OffsetRange(\n\t\t\tMath.min(this.start, other.start),\n\t\t\tMath.max(this.endExclusive, other.endExclusive),\n\t\t);\n\t}\n\n\tpublic isBefore(other: OffsetRange): boolean {\n\t\treturn this.endExclusive <= other.start;\n\t}\n\n\tpublic isAfter(other: OffsetRange): boolean {\n\t\treturn this.start >= other.endExclusive;\n\t}\n\n\tpublic substring(str: string): string {\n\t\treturn str.substring(this.start, this.endExclusive);\n\t}\n\n\tpublic slice<T>(arr: readonly T[]): T[] {\n\t\treturn arr.slice(this.start, this.endExclusive);\n\t}\n\n\tpublic equals(other: OffsetRange): boolean {\n\t\treturn this.start === other.start && this.endExclusive === other.endExclusive;\n\t}\n\n\tpublic toString(): string {\n\t\treturn `[${this.start}, ${this.endExclusive})`;\n\t}\n}\n","import { OffsetRange } from './offsetRange.js';\n\nexport class StringReplacement {\n\tpublic static insert(offset: number, text: string): StringReplacement {\n\t\treturn new StringReplacement(OffsetRange.emptyAt(offset), text);\n\t}\n\n\tpublic static replace(range: OffsetRange, text: string): StringReplacement {\n\t\treturn new StringReplacement(range, text);\n\t}\n\n\tpublic static delete(range: OffsetRange): StringReplacement {\n\t\treturn new StringReplacement(range, '');\n\t}\n\n\tconstructor(\n\t\tpublic readonly replaceRange: OffsetRange,\n\t\tpublic readonly newText: string,\n\t) {}\n\n\tget isEmpty(): boolean {\n\t\treturn this.replaceRange.isEmpty && this.newText.length === 0;\n\t}\n\n\tpublic equals(other: StringReplacement): boolean {\n\t\treturn this.replaceRange.equals(other.replaceRange) && this.newText === other.newText;\n\t}\n\n\t/**\n\t * Narrows this replacement to the span that actually changes, by trimming\n\t * the prefix and suffix it shares with the text it replaces in `source`.\n\t */\n\tpublic removeCommonSuffixPrefix(source: string): StringReplacement {\n\t\tconst oldText = this.replaceRange.substring(source);\n\n\t\tconst prefixLength = commonPrefixLength(oldText, this.newText);\n\t\tconst suffixLength = Math.min(\n\t\t\toldText.length - prefixLength,\n\t\t\tthis.newText.length - prefixLength,\n\t\t\tcommonSuffixLength(oldText, this.newText),\n\t\t);\n\n\t\treturn new StringReplacement(\n\t\t\tnew OffsetRange(\n\t\t\t\tthis.replaceRange.start + prefixLength,\n\t\t\t\tthis.replaceRange.endExclusive - suffixLength,\n\t\t\t),\n\t\t\tthis.newText.substring(prefixLength, this.newText.length - suffixLength),\n\t\t);\n\t}\n\n\tpublic toString(): string {\n\t\treturn `${this.replaceRange} -> ${JSON.stringify(this.newText)}`;\n\t}\n}\n\n/** The length of the common prefix of `a` and `b`. */\nfunction commonPrefixLength(a: string, b: string): number {\n\tconst maxLength = Math.min(a.length, b.length);\n\tlet length = 0;\n\twhile (length < maxLength && a.charCodeAt(length) === b.charCodeAt(length)) {\n\t\tlength++;\n\t}\n\treturn length;\n}\n\n/** The length of the common suffix of `a` and `b`. */\nfunction commonSuffixLength(a: string, b: string): number {\n\tconst maxLength = Math.min(a.length, b.length);\n\tlet length = 0;\n\twhile (\n\t\tlength < maxLength\n\t\t&& a.charCodeAt(a.length - length - 1) === b.charCodeAt(b.length - length - 1)\n\t) {\n\t\tlength++;\n\t}\n\treturn length;\n}\n\nexport class StringEdit {\n\tpublic static readonly empty = new StringEdit([]);\n\n\tpublic static single(replacement: StringReplacement): StringEdit {\n\t\treturn new StringEdit([replacement]);\n\t}\n\n\tpublic static replace(range: OffsetRange, text: string): StringEdit {\n\t\treturn new StringEdit([StringReplacement.replace(range, text)]);\n\t}\n\n\tpublic static insert(offset: number, text: string): StringEdit {\n\t\treturn new StringEdit([StringReplacement.insert(offset, text)]);\n\t}\n\n\tpublic static delete(range: OffsetRange): StringEdit {\n\t\treturn new StringEdit([StringReplacement.delete(range)]);\n\t}\n\n\tpublic readonly replacements: readonly StringReplacement[];\n\n\tconstructor(replacements: readonly StringReplacement[]) {\n\t\tlet lastEndEx = -1;\n\t\tfor (const replacement of replacements) {\n\t\t\tif (replacement.replaceRange.start < lastEndEx) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Edits must be disjoint and sorted. Found ${replacement} after ${lastEndEx}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tlastEndEx = replacement.replaceRange.endExclusive;\n\t\t}\n\t\tthis.replacements = replacements;\n\t}\n\n\tget isEmpty(): boolean {\n\t\treturn this.replacements.length === 0;\n\t}\n\n\tpublic apply(base: string): string {\n\t\tconst parts: string[] = [];\n\t\tlet pos = 0;\n\t\tfor (const r of this.replacements) {\n\t\t\tparts.push(base.substring(pos, r.replaceRange.start));\n\t\t\tparts.push(r.newText);\n\t\t\tpos = r.replaceRange.endExclusive;\n\t\t}\n\t\tparts.push(base.substring(pos));\n\t\treturn parts.join('');\n\t}\n\n\tpublic inverse(original: string): StringEdit {\n\t\tconst edits: StringReplacement[] = [];\n\t\tlet offset = 0;\n\t\tfor (const r of this.replacements) {\n\t\t\tconst oldText = original.substring(r.replaceRange.start, r.replaceRange.endExclusive);\n\t\t\tedits.push(\n\t\t\t\tStringReplacement.replace(\n\t\t\t\t\tOffsetRange.ofStartAndLength(r.replaceRange.start + offset, r.newText.length),\n\t\t\t\t\toldText,\n\t\t\t\t),\n\t\t\t);\n\t\t\toffset += r.newText.length - r.replaceRange.length;\n\t\t}\n\t\treturn new StringEdit(edits);\n\t}\n\n\tpublic equals(other: StringEdit): boolean {\n\t\tif (this.replacements.length !== other.replacements.length) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (let i = 0; i < this.replacements.length; i++) {\n\t\t\tif (!this.replacements[i].equals(other.replacements[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic mapOffset(offset: number): number {\n\t\tlet delta = 0;\n\t\tfor (const r of this.replacements) {\n\t\t\tif (r.replaceRange.start > offset) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (r.replaceRange.endExclusive <= offset) {\n\t\t\t\tdelta += r.newText.length - r.replaceRange.length;\n\t\t\t} else {\n\t\t\t\t// offset is inside a replaced range — map to end of replacement\n\t\t\t\treturn r.replaceRange.start + delta + r.newText.length;\n\t\t\t}\n\t\t}\n\t\treturn offset + delta;\n\t}\n\n\tpublic toString(): string {\n\t\treturn `[${this.replacements.map(r => r.toString()).join(', ')}]`;\n\t}\n}\n\n/**\n * Computes the smallest single replacement that transforms `original` into\n * `modified`.\n *\n * Distinct from {@link computeStringEdit}, which produces a word-level\n * multi-hunk diff but requires the asynchronously loaded `@vscode/diff`\n * computer and throws before it is ready. This one is synchronous and\n * dependency-free, so it is safe on the edit-application and history paths.\n */\nexport function computeMinimalEdit(original: string, modified: string): StringEdit {\n\tif (original === modified) {\n\t\treturn StringEdit.empty;\n\t}\n\n\treturn StringEdit.single(\n\t\tStringReplacement\n\t\t\t.replace(new OffsetRange(0, original.length), modified)\n\t\t\t.removeCommonSuffixPrefix(original),\n\t);\n}\n","/**\n * Immutable point in a caller-defined 2D CSS-pixel coordinate space.\n * Coordinate-owning APIs must document whether values are viewport-client or\n * editor-local; values from different spaces must not be mixed.\n */\nexport class Point2D {\n static readonly ZERO = new Point2D(0, 0);\n\n constructor(\n readonly x: number,\n readonly y: number,\n ) { }\n\n translate(dx: number, dy: number): Point2D {\n return new Point2D(this.x + dx, this.y + dy);\n }\n}\n\n/**\n * Immutable axis-aligned rectangle in a caller-defined 2D CSS-pixel coordinate\n * space. `x`/`y` is the top-left corner, growing right/down.\n *\n * Half-open in both dimensions: `right` and `bottom` are excluded.\n */\nexport class Rect2D {\n static readonly EMPTY = new Rect2D(0, 0, 0, 0);\n\n static fromPointPoint(left: number, top: number, right: number, bottom: number): Rect2D {\n return new Rect2D(left, top, right - left, bottom - top);\n }\n\n static fromPointSize(x: number, y: number, width: number, height: number): Rect2D {\n return new Rect2D(x, y, width, height);\n }\n\n private constructor(\n readonly x: number,\n readonly y: number,\n readonly width: number,\n readonly height: number,\n ) { }\n\n get left(): number { return this.x; }\n get top(): number { return this.y; }\n get right(): number { return this.x + this.width; }\n get bottom(): number { return this.y + this.height; }\n\n get topLeft(): Point2D { return new Point2D(this.x, this.y); }\n\n containsX(x: number): boolean { return x >= this.left && x < this.right; }\n containsY(y: number): boolean { return y >= this.top && y < this.bottom; }\n containsPoint(p: Point2D): boolean { return this.containsX(p.x) && this.containsY(p.y); }\n\n /** Same y/height, zero-width band at `x = this.left`. Useful for caret rects derived from a line. */\n withZeroWidthAt(x: number): Rect2D {\n return new Rect2D(x, this.y, 0, this.height);\n }\n\n translate(dx: number, dy: number): Rect2D {\n return new Rect2D(this.x + dx, this.y + dy, this.width, this.height);\n }\n}\n","import { Point2D, Rect2D } from '../core/geometry.js';\n\nconst SCROLL_POSITION_TOLERANCE = 1;\n\n/** A scroll event target and its requested destination in layout CSS pixels. */\nexport interface ScrollDestination {\n\treadonly eventTarget: Element | Document;\n\tisReached(): boolean;\n}\n\nexport function getElementScrollDestination(element: HTMLElement, left: number, top: number): ScrollDestination | undefined {\n\tif (hasViewportPropagatedOverflow(element)) { return undefined; }\n\tconst doc = element.ownerDocument;\n\tif (element === doc.scrollingElement) {\n\t\treturn getWindowScrollDestination(doc.defaultView ?? window, left, top);\n\t}\n\tconst position = clampScrollPosition(element, left, top, element.clientWidth, element.clientHeight);\n\treturn {\n\t\teventTarget: element,\n\t\tisReached: () => isScrollPositionReached(element.scrollLeft, element.scrollTop, position),\n\t};\n}\n\nexport function getWindowScrollDestination(win: Window, left: number, top: number): ScrollDestination {\n\tconst doc = win.document;\n\tconst position = clampScrollPosition(\n\t\tdoc.scrollingElement ?? doc.documentElement,\n\t\tleft,\n\t\ttop,\n\t\tdoc.documentElement.clientWidth || win.innerWidth,\n\t\tdoc.documentElement.clientHeight || win.innerHeight,\n\t);\n\treturn {\n\t\teventTarget: doc,\n\t\tisReached: () => isScrollPositionReached(win.scrollX, win.scrollY, position),\n\t};\n}\n\nfunction clampScrollPosition(element: Element, left: number, top: number, width: number, height: number): Point2D {\n\tconst maxLeft = Math.max(0, element.scrollWidth - width);\n\tconst maxTop = Math.max(0, element.scrollHeight - height);\n\tconst rtl = (element.ownerDocument.defaultView ?? window).getComputedStyle(element).direction === 'rtl';\n\treturn new Point2D(\n\t\trtl ? Math.max(-maxLeft, Math.min(0, left)) : Math.max(0, Math.min(maxLeft, left)),\n\t\tMath.max(0, Math.min(maxTop, top)),\n\t);\n}\n\nfunction isScrollPositionReached(left: number, top: number, position: Point2D): boolean {\n\treturn Math.abs(left - position.x) <= SCROLL_POSITION_TOLERANCE\n\t\t&& Math.abs(top - position.y) <= SCROLL_POSITION_TOLERANCE;\n}\n\nexport function getClippingClientRect(element: Element): Rect2D {\n\tconst doc = element.ownerDocument;\n\tconst win = doc.defaultView ?? window;\n\tlet result = Rect2D.fromPointSize(\n\t\t0,\n\t\t0,\n\t\tdoc.documentElement.clientWidth || win.innerWidth,\n\t\tdoc.documentElement.clientHeight || win.innerHeight,\n\t);\n\n\tfor (let parent = element.parentElement; parent; parent = parent.parentElement) {\n\t\tconst style = win.getComputedStyle(parent);\n\t\tconst clipsX = clipsOverflow(style.overflowX);\n\t\tconst clipsY = clipsOverflow(style.overflowY);\n\t\tif (!clipsX && !clipsY) { continue; }\n\n\t\tconst rect = getElementClientRect(parent);\n\t\tconst left = clipsX ? Math.max(result.left, rect.left) : result.left;\n\t\tconst right = clipsX ? Math.min(result.right, rect.right) : result.right;\n\t\tconst top = clipsY ? Math.max(result.top, rect.top) : result.top;\n\t\tconst bottom = clipsY ? Math.min(result.bottom, rect.bottom) : result.bottom;\n\t\tif (right <= left || bottom <= top) {\n\t\t\treturn Rect2D.fromPointSize(left, top, 0, 0);\n\t\t}\n\t\tresult = Rect2D.fromPointPoint(\n\t\t\tleft,\n\t\t\ttop,\n\t\t\tright,\n\t\t\tbottom,\n\t\t);\n\t}\n\treturn result;\n}\n\nexport function getElementClientRect(element: HTMLElement): Rect2D {\n\tconst bounds = element.getBoundingClientRect();\n\tconst scaleX = element.offsetWidth > 0 ? bounds.width / element.offsetWidth : 1;\n\tconst scaleY = element.offsetHeight > 0 ? bounds.height / element.offsetHeight : 1;\n\treturn Rect2D.fromPointSize(\n\t\tbounds.left + element.clientLeft * scaleX,\n\t\tbounds.top + element.clientTop * scaleY,\n\t\telement.clientWidth * scaleX,\n\t\telement.clientHeight * scaleY,\n\t);\n}\n\nexport function clientDeltaToScrollDelta(element: HTMLElement, deltaX: number, deltaY: number): { readonly x: number; readonly y: number } {\n\tconst bounds = element.getBoundingClientRect();\n\tconst scaleX = element.offsetWidth > 0 ? bounds.width / element.offsetWidth : 1;\n\tconst scaleY = element.offsetHeight > 0 ? bounds.height / element.offsetHeight : 1;\n\treturn {\n\t\tx: deltaX / scaleX,\n\t\ty: deltaY / scaleY,\n\t};\n}\n\n/** Vertical scroll geometry of an element, in unscaled layout pixels. */\nexport interface VerticalScrollGeometry {\n\treadonly scrollHeight: number;\n\treadonly clientHeight: number;\n\t/** Height the element's content box loses to a horizontal scrollbar, if any. */\n\treadonly horizontalScrollbarHeight: number;\n}\n\n/**\n * Whether an element has content that can actually be scrolled vertically.\n * A classic (space-consuming) horizontal scrollbar shrinks `clientHeight`\n * without adding scrollable content, so comparing `scrollHeight` against\n * `clientHeight` alone also reports elements that only overflow horizontally.\n */\nexport function scrollsContentVertically(geometry: VerticalScrollGeometry): boolean {\n\tconst scrollbarHeight = Math.max(geometry.horizontalScrollbarHeight, 0);\n\treturn geometry.scrollHeight - geometry.clientHeight > scrollbarHeight;\n}\n\n/**\n * Whether `element` is a `<body>` whose overflow is propagated to the viewport.\n * CSS propagates the root element's overflow to the viewport; when the root is\n * `visible`, the body's overflow is propagated instead. Such a body reports\n * scrollable geometry, but scrolling it does nothing — the window owns the\n * scrolling — so it must not be treated as an element-level scroller.\n */\nexport function hasViewportPropagatedOverflow(element: HTMLElement): boolean {\n\tconst doc = element.ownerDocument;\n\tif (element !== doc.body) { return false; }\n\tconst rootStyle = doc.defaultView?.getComputedStyle(doc.documentElement);\n\treturn rootStyle !== undefined\n\t\t&& rootStyle.overflowX === 'visible'\n\t\t&& rootStyle.overflowY === 'visible';\n}\n\n/**\n * Applies {@link scrollsContentVertically} to a live element, excluding a body\n * that only appears scrollable because its overflow is propagated to the\n * viewport.\n */\nexport function elementScrollsContentVertically(element: HTMLElement): boolean {\n\tif (hasViewportPropagatedOverflow(element)) { return false; }\n\tconst style = element.ownerDocument.defaultView?.getComputedStyle(element);\n\tconst borderY = style\n\t\t? parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth)\n\t\t: 0;\n\treturn scrollsContentVertically({\n\t\tscrollHeight: element.scrollHeight,\n\t\tclientHeight: element.clientHeight,\n\t\thorizontalScrollbarHeight: element.offsetHeight\n\t\t\t- element.clientHeight\n\t\t\t- (Number.isFinite(borderY) ? borderY : 0),\n\t});\n}\n\nexport function getScrollableAncestors(element: Element): readonly HTMLElement[] {\n\tconst doc = element.ownerDocument;\n\tconst win = doc.defaultView ?? window;\n\tconst result: HTMLElement[] = [];\n\tfor (let parent = element.parentElement; parent; parent = parent.parentElement) {\n\t\tconst style = win.getComputedStyle(parent);\n\t\tconst scrollsX = scrollsOverflow(style.overflowX) && parent.scrollWidth > parent.clientWidth;\n\t\tconst scrollsY = scrollsOverflow(style.overflowY) && parent.scrollHeight > parent.clientHeight;\n\t\tif (scrollsX || scrollsY) {\n\t\t\tresult.push(parent);\n\t\t}\n\t}\n\treturn result;\n}\n\nexport function clientRectIntersects(a: Pick<Rect2D, 'left' | 'right' | 'top' | 'bottom'>, b: Pick<Rect2D, 'left' | 'right' | 'top' | 'bottom'>): boolean {\n\treturn Math.max(a.left, b.left) < Math.min(a.right, b.right)\n\t\t&& Math.max(a.top, b.top) < Math.min(a.bottom, b.bottom);\n}\n\nexport function clientRectContains(container: Pick<Rect2D, 'left' | 'right' | 'top' | 'bottom'>, value: Pick<Rect2D, 'left' | 'right' | 'top' | 'bottom'>): boolean {\n\treturn container.left <= value.left\n\t\t&& value.right <= container.right\n\t\t&& container.top <= value.top\n\t\t&& value.bottom <= container.bottom;\n}\n\nfunction clipsOverflow(value: string): boolean {\n\treturn value === 'auto' || value === 'scroll' || value === 'hidden' || value === 'clip';\n}\n\nfunction scrollsOverflow(value: string): boolean {\n\treturn value === 'auto' || value === 'scroll' || value === 'hidden';\n}\n"],"names":["OffsetRange","start","endExclusive","length","offset","other","end","str","arr","StringReplacement","replaceRange","newText","text","range","source","oldText","prefixLength","commonPrefixLength","suffixLength","commonSuffixLength","a","b","maxLength","StringEdit","replacement","replacements","lastEndEx","base","parts","pos","original","edits","i","delta","r","computeMinimalEdit","modified","Point2D","x","y","dx","dy","Rect2D","width","height","left","top","right","bottom","p","SCROLL_POSITION_TOLERANCE","getElementScrollDestination","element","hasViewportPropagatedOverflow","doc","getWindowScrollDestination","position","clampScrollPosition","isScrollPositionReached","win","maxLeft","maxTop","rtl","getClippingClientRect","result","parent","style","clipsX","clipsOverflow","clipsY","rect","getElementClientRect","bounds","scaleX","scaleY","clientDeltaToScrollDelta","deltaX","deltaY","scrollsContentVertically","geometry","scrollbarHeight","rootStyle","elementScrollsContentVertically","borderY","getScrollableAncestors","scrollsX","scrollsOverflow","scrollsY","clientRectContains","container","value"],"mappings":"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"}