@vscode/markdown-editor 0.0.2-127 → 0.0.2-129

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vscode/markdown-editor",
3
- "version": "0.0.2-127",
3
+ "version": "0.0.2-129",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -120,5 +120,5 @@
120
120
  "vitest": "^4.1.0",
121
121
  "zod": "^4.3.6"
122
122
  },
123
- "gitHead": "3966f6f076ae89164503a7df77c74210a48194ae"
123
+ "gitHead": "3059f778245ebd7d921cfb692a5cdbf561cea9c9"
124
124
  }
@@ -37,6 +37,103 @@
37
37
  caret-color: transparent;
38
38
  }
39
39
 
40
+ .md-iframe-toolbar,
41
+ .md-iframe-resize-handle {
42
+ position: absolute;
43
+ box-sizing: border-box;
44
+ pointer-events: auto;
45
+ background: var(--md-iframe-background, #fff);
46
+ color: var(--md-iframe-foreground, #616161);
47
+ }
48
+
49
+ .md-iframe-toolbar:not([hidden]) {
50
+ display: flex;
51
+ align-items: center;
52
+ justify-content: flex-end;
53
+ gap: 2px;
54
+ padding: 2px 4px;
55
+ border: 1px solid var(--md-iframe-border, #e5e5e5);
56
+ border-radius: 5px;
57
+ width: max-content;
58
+ transform: translateX(-100%);
59
+ opacity: 0;
60
+ }
61
+
62
+ .md-iframe-frame:hover + .md-iframe-toolbar,
63
+ .md-iframe-toolbar:hover,
64
+ .md-iframe-toolbar:focus-within,
65
+ .md-iframe-toolbar:has(.md-code-block-copy-feedback),
66
+ .md-iframe-toolbar.md-iframe-toolbar-full-view {
67
+ opacity: 1;
68
+ }
69
+
70
+ .md-iframe-toolbar > .md-code-block-actions {
71
+ position: static;
72
+ height: auto;
73
+ margin: 0;
74
+ padding: 0;
75
+ opacity: 1;
76
+ order: 1;
77
+ }
78
+
79
+ .md-iframe-toolbar .md-code-block-copy-status:not(:empty) {
80
+ position: absolute;
81
+ top: 100%;
82
+ right: 0;
83
+ margin-top: 4px;
84
+ white-space: nowrap;
85
+ }
86
+
87
+ @media (hover: none) {
88
+ .md-iframe-toolbar:not([hidden]) {
89
+ opacity: 1;
90
+ }
91
+ }
92
+
93
+ .md-iframe-toolbar button,
94
+ .md-iframe-toolbar .md-code-block-copy {
95
+ background: transparent;
96
+ color: inherit;
97
+ border: none;
98
+ border-radius: 3px;
99
+ width: 22px;
100
+ height: 22px;
101
+ padding: 3px;
102
+ cursor: pointer;
103
+ }
104
+
105
+ .md-iframe-toolbar button:not([hidden]) {
106
+ display: grid;
107
+ place-items: center;
108
+ }
109
+
110
+ .md-iframe-toolbar button:hover,
111
+ .md-iframe-toolbar button[aria-pressed=true] {
112
+ background: var(--md-iframe-hover-background, rgba(128, 128, 128, 0.12));
113
+ }
114
+
115
+ .md-iframe-toolbar button:focus-visible,
116
+ .md-iframe-resize-handle:focus-visible {
117
+ outline: 1px solid var(--md-iframe-focus-border, #007acc);
118
+ outline-offset: -1px;
119
+ }
120
+
121
+ .md-iframe-resize-handle {
122
+ cursor: ns-resize;
123
+ touch-action: none;
124
+ }
125
+
126
+ .md-iframe-resize-handle::after {
127
+ content: '';
128
+ display: block;
129
+ width: 32px;
130
+ height: 2px;
131
+ margin: 2px auto;
132
+ border-radius: 1px;
133
+ background: currentColor;
134
+ opacity: 0.35;
135
+ }
136
+
40
137
  .md-editor-a11y-status {
41
138
  position: absolute;
42
139
  width: 1px;
@@ -1400,6 +1497,7 @@ pre.md-unhandled-scroll.md-code-block {
1400
1497
  }
1401
1498
 
1402
1499
  .md-code-block-container:hover>.md-code-block-actions,
1500
+ .md-code-block-container:hover>.md-embedded-code-editor>.md-code-block-actions,
1403
1501
  .md-code-block-actions:focus-within,
1404
1502
  .md-code-block-actions.md-code-block-copy-feedback {
1405
1503
  opacity: 1;
@@ -31,6 +31,11 @@
31
31
  */
32
32
 
33
33
  .md-editor.md-theme-vscode-default {
34
+ --md-iframe-background: var(--vscode-editor-background, #fff);
35
+ --md-iframe-foreground: var(--vscode-descriptionForeground, #616161);
36
+ --md-iframe-border: var(--vscode-widget-border, var(--vscode-editorWidget-border, #e5e5e5));
37
+ --md-iframe-hover-background: var(--vscode-toolbar-hoverBackground, rgba(128, 128, 128, 0.12));
38
+ --md-iframe-focus-border: var(--vscode-focusBorder, #007acc);
34
39
  font-family: var(--markdown-font-family, -apple-system, BlinkMacSystemFont,
35
40
  'Segoe WPC', 'Segoe UI', system-ui, 'Ubuntu', 'Droid Sans', sans-serif);
36
41
  font-size: var(--markdown-font-size, 14px);
@@ -40,6 +40,11 @@
40
40
  */
41
41
 
42
42
  .md-editor.md-theme-vscode-github {
43
+ --md-iframe-background: var(--vscode-editor-background, #fff);
44
+ --md-iframe-foreground: var(--vscode-descriptionForeground, #616161);
45
+ --md-iframe-border: var(--vscode-widget-border, var(--vscode-editorWidget-border, #e5e5e5));
46
+ --md-iframe-hover-background: var(--vscode-toolbar-hoverBackground, rgba(128, 128, 128, 0.12));
47
+ --md-iframe-focus-border: var(--vscode-focusBorder, #007acc);
43
48
  font-family: var(--markdown-font-family, -apple-system, BlinkMacSystemFont,
44
49
  'Segoe WPC', 'Segoe UI', system-ui, 'Ubuntu', 'Droid Sans', sans-serif);
45
50
  font-size: var(--markdown-font-size, 16px);
@@ -1,215 +0,0 @@
1
- class s {
2
- constructor(e, t) {
3
- if (this.start = e, this.endExclusive = t, e > t)
4
- throw new Error(`Invalid range: [${e}, ${t})`);
5
- }
6
- static fromTo(e, t) {
7
- return new s(e, t);
8
- }
9
- static ofLength(e) {
10
- return new s(0, e);
11
- }
12
- static ofStartAndLength(e, t) {
13
- return new s(e, e + t);
14
- }
15
- static emptyAt(e) {
16
- return new s(e, e);
17
- }
18
- get isEmpty() {
19
- return this.start === this.endExclusive;
20
- }
21
- get length() {
22
- return this.endExclusive - this.start;
23
- }
24
- delta(e) {
25
- return new s(this.start + e, this.endExclusive + e);
26
- }
27
- deltaStart(e) {
28
- return new s(this.start + e, this.endExclusive);
29
- }
30
- deltaEnd(e) {
31
- return new s(this.start, this.endExclusive + e);
32
- }
33
- contains(e) {
34
- return this.start <= e && e < this.endExclusive;
35
- }
36
- containsRange(e) {
37
- return this.start <= e.start && e.endExclusive <= this.endExclusive;
38
- }
39
- intersects(e) {
40
- return Math.max(this.start, e.start) < Math.min(this.endExclusive, e.endExclusive);
41
- }
42
- intersectsOrTouches(e) {
43
- return Math.max(this.start, e.start) <= Math.min(this.endExclusive, e.endExclusive);
44
- }
45
- intersect(e) {
46
- const t = Math.max(this.start, e.start), n = Math.min(this.endExclusive, e.endExclusive);
47
- if (t <= n)
48
- return new s(t, n);
49
- }
50
- join(e) {
51
- return new s(
52
- Math.min(this.start, e.start),
53
- Math.max(this.endExclusive, e.endExclusive)
54
- );
55
- }
56
- isBefore(e) {
57
- return this.endExclusive <= e.start;
58
- }
59
- isAfter(e) {
60
- return this.start >= e.endExclusive;
61
- }
62
- substring(e) {
63
- return e.substring(this.start, this.endExclusive);
64
- }
65
- slice(e) {
66
- return e.slice(this.start, this.endExclusive);
67
- }
68
- equals(e) {
69
- return this.start === e.start && this.endExclusive === e.endExclusive;
70
- }
71
- toString() {
72
- return `[${this.start}, ${this.endExclusive})`;
73
- }
74
- }
75
- class a {
76
- constructor(e, t) {
77
- this.replaceRange = e, this.newText = t;
78
- }
79
- static insert(e, t) {
80
- return new a(s.emptyAt(e), t);
81
- }
82
- static replace(e, t) {
83
- return new a(e, t);
84
- }
85
- static delete(e) {
86
- return new a(e, "");
87
- }
88
- get isEmpty() {
89
- return this.replaceRange.isEmpty && this.newText.length === 0;
90
- }
91
- equals(e) {
92
- return this.replaceRange.equals(e.replaceRange) && this.newText === e.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(e) {
99
- const t = this.replaceRange.substring(e), n = h(t, this.newText), r = Math.min(
100
- t.length - n,
101
- this.newText.length - n,
102
- u(t, this.newText)
103
- );
104
- return new a(
105
- new s(
106
- this.replaceRange.start + n,
107
- this.replaceRange.endExclusive - r
108
- ),
109
- this.newText.substring(n, this.newText.length - r)
110
- );
111
- }
112
- toString() {
113
- return `${this.replaceRange} -> ${JSON.stringify(this.newText)}`;
114
- }
115
- }
116
- function h(i, e) {
117
- const t = Math.min(i.length, e.length);
118
- let n = 0;
119
- for (; n < t && i.charCodeAt(n) === e.charCodeAt(n); )
120
- n++;
121
- return n;
122
- }
123
- function u(i, e) {
124
- const t = Math.min(i.length, e.length);
125
- let n = 0;
126
- for (; n < t && i.charCodeAt(i.length - n - 1) === e.charCodeAt(e.length - n - 1); )
127
- n++;
128
- return n;
129
- }
130
- class l {
131
- static empty = new l([]);
132
- static single(e) {
133
- return new l([e]);
134
- }
135
- static replace(e, t) {
136
- return new l([a.replace(e, t)]);
137
- }
138
- static insert(e, t) {
139
- return new l([a.insert(e, t)]);
140
- }
141
- static delete(e) {
142
- return new l([a.delete(e)]);
143
- }
144
- replacements;
145
- constructor(e) {
146
- let t = -1;
147
- for (const n of e) {
148
- if (n.replaceRange.start < t)
149
- throw new Error(
150
- `Edits must be disjoint and sorted. Found ${n} after ${t}`
151
- );
152
- t = n.replaceRange.endExclusive;
153
- }
154
- this.replacements = e;
155
- }
156
- get isEmpty() {
157
- return this.replacements.length === 0;
158
- }
159
- apply(e) {
160
- const t = [];
161
- let n = 0;
162
- for (const r of this.replacements)
163
- t.push(e.substring(n, r.replaceRange.start)), t.push(r.newText), n = r.replaceRange.endExclusive;
164
- return t.push(e.substring(n)), t.join("");
165
- }
166
- inverse(e) {
167
- const t = [];
168
- let n = 0;
169
- for (const r of this.replacements) {
170
- const c = e.substring(r.replaceRange.start, r.replaceRange.endExclusive);
171
- t.push(
172
- a.replace(
173
- s.ofStartAndLength(r.replaceRange.start + n, r.newText.length),
174
- c
175
- )
176
- ), n += r.newText.length - r.replaceRange.length;
177
- }
178
- return new l(t);
179
- }
180
- equals(e) {
181
- if (this.replacements.length !== e.replacements.length)
182
- return !1;
183
- for (let t = 0; t < this.replacements.length; t++)
184
- if (!this.replacements[t].equals(e.replacements[t]))
185
- return !1;
186
- return !0;
187
- }
188
- mapOffset(e) {
189
- let t = 0;
190
- for (const n of this.replacements) {
191
- if (n.replaceRange.start > e)
192
- break;
193
- if (n.replaceRange.endExclusive <= e)
194
- t += n.newText.length - n.replaceRange.length;
195
- else
196
- return n.replaceRange.start + t + n.newText.length;
197
- }
198
- return e + t;
199
- }
200
- toString() {
201
- return `[${this.replacements.map((e) => e.toString()).join(", ")}]`;
202
- }
203
- }
204
- function o(i, e) {
205
- return i === e ? l.empty : l.single(
206
- a.replace(new s(0, i.length), e).removeCommonSuffixPrefix(i)
207
- );
208
- }
209
- export {
210
- s as O,
211
- l as S,
212
- a,
213
- o as c
214
- };
215
- //# sourceMappingURL=stringEdit-CVDbCUBY.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stringEdit-CVDbCUBY.js","sources":["../src/core/offsetRange.ts","../src/core/stringEdit.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"],"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"],"mappings":"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"}