@opensumi/ide-editor 2.27.3-next-1714461024.0 → 2.27.3-next-1714464252.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.
- package/lib/browser/doc-model/editor-document-model-service.d.ts +3 -1
- package/lib/browser/doc-model/editor-document-model-service.d.ts.map +1 -1
- package/lib/browser/doc-model/editor-document-model-service.js +6 -1
- package/lib/browser/doc-model/editor-document-model-service.js.map +1 -1
- package/lib/browser/doc-model/types.d.ts +1 -0
- package/lib/browser/doc-model/types.d.ts.map +1 -1
- package/lib/browser/doc-model/types.js.map +1 -1
- package/lib/browser/editor-collection.service.d.ts +6 -6
- package/lib/browser/editor-collection.service.d.ts.map +1 -1
- package/lib/browser/editor-collection.service.js.map +1 -1
- package/lib/browser/editor-electron.contribution.d.ts +2 -2
- package/lib/browser/editor-electron.contribution.d.ts.map +1 -1
- package/lib/browser/editor-electron.contribution.js +1 -1
- package/lib/browser/editor-electron.contribution.js.map +1 -1
- package/lib/browser/editor.decoration.service.d.ts.map +1 -1
- package/lib/browser/editor.decoration.service.js +6 -4
- package/lib/browser/editor.decoration.service.js.map +1 -1
- package/lib/browser/editor.module.less +0 -54
- package/lib/browser/hooks/useEditor.d.ts +4 -0
- package/lib/browser/hooks/useEditor.d.ts.map +1 -0
- package/lib/browser/hooks/useEditor.js +31 -0
- package/lib/browser/hooks/useEditor.js.map +1 -0
- package/lib/browser/hooks/useInMergeChanges.d.ts +3 -0
- package/lib/browser/hooks/useInMergeChanges.d.ts.map +1 -0
- package/lib/browser/hooks/useInMergeChanges.js +27 -0
- package/lib/browser/hooks/useInMergeChanges.js.map +1 -0
- package/lib/browser/merge-conflict/conflict-parser.d.ts +46 -0
- package/lib/browser/merge-conflict/conflict-parser.d.ts.map +1 -0
- package/lib/browser/merge-conflict/conflict-parser.js +209 -0
- package/lib/browser/merge-conflict/conflict-parser.js.map +1 -0
- package/lib/browser/merge-conflict/index.d.ts +3 -0
- package/lib/browser/merge-conflict/index.d.ts.map +1 -0
- package/lib/browser/merge-conflict/index.js +6 -0
- package/lib/browser/merge-conflict/index.js.map +1 -0
- package/lib/browser/merge-conflict/types.d.ts +60 -0
- package/lib/browser/merge-conflict/types.d.ts.map +1 -0
- package/lib/browser/merge-conflict/types.js +15 -0
- package/lib/browser/merge-conflict/types.js.map +1 -0
- package/lib/browser/merge-editor/MergeEditorFloatComponents.d.ts.map +1 -1
- package/lib/browser/merge-editor/MergeEditorFloatComponents.js +75 -49
- package/lib/browser/merge-editor/MergeEditorFloatComponents.js.map +1 -1
- package/lib/browser/merge-editor/merge-editor.module.less +71 -0
- package/lib/browser/merge-editor/merge-editor.provider.d.ts.map +1 -1
- package/lib/browser/merge-editor/merge-editor.provider.js +3 -0
- package/lib/browser/merge-editor/merge-editor.provider.js.map +1 -1
- package/lib/common/editor.d.ts +1 -1
- package/package.json +14 -14
- package/src/browser/doc-model/editor-document-model-service.ts +11 -1
- package/src/browser/doc-model/types.ts +4 -0
- package/src/browser/editor-collection.service.ts +7 -7
- package/src/browser/editor-electron.contribution.ts +1 -2
- package/src/browser/editor.decoration.service.ts +6 -4
- package/src/browser/editor.module.less +0 -54
- package/src/browser/hooks/useEditor.ts +34 -0
- package/src/browser/hooks/useInMergeChanges.ts +30 -0
- package/src/browser/merge-conflict/conflict-parser.ts +323 -0
- package/src/browser/merge-conflict/index.ts +2 -0
- package/src/browser/merge-conflict/types.ts +73 -0
- package/src/browser/merge-editor/MergeEditorFloatComponents.tsx +109 -74
- package/src/browser/merge-editor/merge-editor.module.less +71 -0
- package/src/browser/merge-editor/merge-editor.provider.ts +3 -0
- package/src/common/editor.ts +1 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Disposable, LRUCache } from '@opensumi/ide-core-common';
|
|
2
|
+
import * as monaco from '@opensumi/ide-monaco';
|
|
3
|
+
import { ICacheDocumentMergeConflict, IDocumentMergeConflictDescriptor, IMergeRegion } from './types';
|
|
4
|
+
export interface IConflictCache {
|
|
5
|
+
id: string;
|
|
6
|
+
range: monaco.Range;
|
|
7
|
+
text: string;
|
|
8
|
+
isResolved: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare class TextLine {
|
|
11
|
+
lineNumber: number;
|
|
12
|
+
text: string;
|
|
13
|
+
range: monaco.Range;
|
|
14
|
+
rangeIncludingLineBreak: monaco.Range;
|
|
15
|
+
firstNonWhitespaceCharacterIndex: number;
|
|
16
|
+
isEmptyOrWhitespace: boolean;
|
|
17
|
+
constructor(document: monaco.editor.ITextModel, line: number);
|
|
18
|
+
}
|
|
19
|
+
export declare class MergeConflictParser extends Disposable {
|
|
20
|
+
cache: LRUCache<string, DocumentMergeConflict[]>;
|
|
21
|
+
private _conflictTextCaches;
|
|
22
|
+
private _conflictRangeCaches;
|
|
23
|
+
private static createCacheKey;
|
|
24
|
+
scanDocument(document: monaco.editor.ITextModel): DocumentMergeConflict[];
|
|
25
|
+
getConflictText(uri: string): string | undefined;
|
|
26
|
+
getAllConflictsByUri(uri: string): IConflictCache[] | undefined;
|
|
27
|
+
getAllConflicts(): Map<string, IConflictCache[]>;
|
|
28
|
+
setConflictResolved(uri: string, id: string): void;
|
|
29
|
+
deleteConflictText(uri: string): void;
|
|
30
|
+
dispose(): void;
|
|
31
|
+
}
|
|
32
|
+
export declare class DocumentMergeConflict implements ICacheDocumentMergeConflict {
|
|
33
|
+
range: monaco.Range;
|
|
34
|
+
current: IMergeRegion;
|
|
35
|
+
incoming: IMergeRegion;
|
|
36
|
+
commonAncestors: IMergeRegion[];
|
|
37
|
+
splitter: monaco.Range;
|
|
38
|
+
incomingContent: string;
|
|
39
|
+
currentContent: string;
|
|
40
|
+
bothContent: string;
|
|
41
|
+
aiContent?: string;
|
|
42
|
+
defaultContent: string;
|
|
43
|
+
private applied;
|
|
44
|
+
constructor(descriptor: IDocumentMergeConflictDescriptor);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=conflict-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conflict-parser.d.ts","sourceRoot":"","sources":["../../../src/browser/merge-conflict/conflict-parser.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAQ,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,2BAA2B,EAAE,gCAAgC,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AActG,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,QAAQ;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;IACpB,uBAAuB,EAAE,MAAM,CAAC,KAAK,CAAC;IACtC,gCAAgC,EAAE,MAAM,CAAC;IACzC,mBAAmB,EAAE,OAAO,CAAC;gBACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM;CAY7D;AAED,qBACa,mBAAoB,SAAQ,UAAU;IACjD,KAAK,4CAAsD;IAE3D,OAAO,CAAC,mBAAmB,CAA6B;IAExD,OAAO,CAAC,oBAAoB,CAAuC;IAEnE,OAAO,CAAC,MAAM,CAAC,cAAc;IAI7B,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;IAkF/C,eAAe,CAAC,GAAG,EAAE,MAAM;IAG3B,oBAAoB,CAAC,GAAG,EAAE,MAAM;IAIhC,eAAe;IAIf,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAU3C,kBAAkB,CAAC,GAAG,EAAE,MAAM;IAG9B,OAAO;CAIR;AAiID,qBAAa,qBAAsB,YAAW,2BAA2B;IAChE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;IACpB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,OAAO,CAAS;gBACZ,UAAU,EAAE,gCAAgC;CAOzD"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* ---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
4
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
// Some code copied and modified from https://github.com/microsoft/vscode/blob/main/extensions/merge-conflict/src/mergeConflictParser.ts
|
|
7
|
+
var MergeConflictParser_1;
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DocumentMergeConflict = exports.MergeConflictParser = exports.TextLine = void 0;
|
|
10
|
+
const tslib_1 = require("tslib");
|
|
11
|
+
const di_1 = require("@opensumi/di");
|
|
12
|
+
const ide_core_common_1 = require("@opensumi/ide-core-common");
|
|
13
|
+
const monaco = tslib_1.__importStar(require("@opensumi/ide-monaco"));
|
|
14
|
+
const startHeaderMarker = '<<<<<<<';
|
|
15
|
+
const commonAncestorsMarker = '|||||||';
|
|
16
|
+
const splitterMarker = '=======';
|
|
17
|
+
const endFooterMarker = '>>>>>>>';
|
|
18
|
+
class TextLine {
|
|
19
|
+
constructor(document, line) {
|
|
20
|
+
if (typeof line !== 'number' || line <= 0 || line > document.getLineCount()) {
|
|
21
|
+
throw new Error('Illegal value for `line`');
|
|
22
|
+
}
|
|
23
|
+
this.text = document.getLineContent(line);
|
|
24
|
+
this.firstNonWhitespaceCharacterIndex = /^(\s*)/.exec(this.text)[1].length;
|
|
25
|
+
this.range = new monaco.Range(line, 1, line, this.text.length + 1);
|
|
26
|
+
this.rangeIncludingLineBreak =
|
|
27
|
+
line <= document.getLineCount() ? new monaco.Range(line, 1, line + 1, 1) : this.range;
|
|
28
|
+
this.lineNumber = line;
|
|
29
|
+
this.isEmptyOrWhitespace = this.firstNonWhitespaceCharacterIndex === this.text.length;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.TextLine = TextLine;
|
|
33
|
+
let MergeConflictParser = MergeConflictParser_1 = class MergeConflictParser extends ide_core_common_1.Disposable {
|
|
34
|
+
constructor() {
|
|
35
|
+
super(...arguments);
|
|
36
|
+
this.cache = new ide_core_common_1.LRUCache(100);
|
|
37
|
+
this._conflictTextCaches = new Map();
|
|
38
|
+
this._conflictRangeCaches = new Map();
|
|
39
|
+
}
|
|
40
|
+
static createCacheKey(document) {
|
|
41
|
+
return `${document.uri.toString()}-${document.getAlternativeVersionId()}`;
|
|
42
|
+
}
|
|
43
|
+
scanDocument(document) {
|
|
44
|
+
const cacheKey = MergeConflictParser_1.createCacheKey(document);
|
|
45
|
+
if (this.cache.has(cacheKey)) {
|
|
46
|
+
return this.cache.get(cacheKey);
|
|
47
|
+
}
|
|
48
|
+
// Scan each line in the document, we already know there is at least a <<<<<<< and
|
|
49
|
+
// >>>>>> marker within the document, we need to group these into conflict ranges.
|
|
50
|
+
// We initially build a scan match, that references the lines of the header, splitter
|
|
51
|
+
// and footer. This is then converted into a full descriptor containing all required
|
|
52
|
+
// ranges.
|
|
53
|
+
let currentConflict = null;
|
|
54
|
+
const conflictDescriptors = [];
|
|
55
|
+
const cacheConflictDescriptors = this._conflictTextCaches.get(document.uri.toString());
|
|
56
|
+
for (let i = 0; i < document.getLineCount(); i++) {
|
|
57
|
+
const line = new TextLine(document, i + 1);
|
|
58
|
+
// Ignore empty lines
|
|
59
|
+
if (!line || line.isEmptyOrWhitespace) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
// Is this a start line? <<<<<<<
|
|
63
|
+
if (line.text.startsWith(startHeaderMarker)) {
|
|
64
|
+
if (currentConflict !== null) {
|
|
65
|
+
// Error, we should not see a startMarker before we've seen an endMarker
|
|
66
|
+
currentConflict = null;
|
|
67
|
+
// Give up parsing, anything matched up this to this point will be decorated
|
|
68
|
+
// anything after will not
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
// Create a new conflict starting at this line
|
|
72
|
+
currentConflict = { startHeader: line, commonAncestors: [] };
|
|
73
|
+
}
|
|
74
|
+
// Are we within a conflict block and is this a common ancestors marker? |||||||
|
|
75
|
+
else if (currentConflict && !currentConflict.splitter && line.text.startsWith(commonAncestorsMarker)) {
|
|
76
|
+
currentConflict.commonAncestors.push(line);
|
|
77
|
+
}
|
|
78
|
+
// Are we within a conflict block and is this a splitter? =======
|
|
79
|
+
else if (currentConflict && !currentConflict.splitter && line.text === splitterMarker) {
|
|
80
|
+
currentConflict.splitter = line;
|
|
81
|
+
}
|
|
82
|
+
// Are we within a conflict block and is this a footer? >>>>>>>
|
|
83
|
+
else if (currentConflict && line.text.startsWith(endFooterMarker)) {
|
|
84
|
+
currentConflict.endFooter = line;
|
|
85
|
+
// Create a full descriptor from the lines that we matched. This can return
|
|
86
|
+
// null if the descriptor could not be completed.
|
|
87
|
+
const completeDescriptor = scanItemTolMergeConflictDescriptor(document, currentConflict);
|
|
88
|
+
if (completeDescriptor !== null) {
|
|
89
|
+
conflictDescriptors.push(completeDescriptor);
|
|
90
|
+
}
|
|
91
|
+
// Reset the current conflict to be empty, so we can match the next
|
|
92
|
+
// starting header marker.
|
|
93
|
+
currentConflict = null;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (!cacheConflictDescriptors && conflictDescriptors.length) {
|
|
97
|
+
this._conflictTextCaches.set(document.uri.toString(), document.getValue());
|
|
98
|
+
const conflictRanges = [];
|
|
99
|
+
conflictDescriptors.filter(Boolean).forEach((descriptor) => {
|
|
100
|
+
const range = descriptor.range;
|
|
101
|
+
conflictRanges.push({
|
|
102
|
+
id: (0, ide_core_common_1.uuid)(),
|
|
103
|
+
range,
|
|
104
|
+
text: document.getValueInRange(range),
|
|
105
|
+
isResolved: false,
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
this._conflictRangeCaches.set(document.uri.toString(), conflictRanges);
|
|
109
|
+
}
|
|
110
|
+
const result = conflictDescriptors === null || conflictDescriptors === void 0 ? void 0 : conflictDescriptors.filter(Boolean).map((descriptor) => new DocumentMergeConflict(descriptor));
|
|
111
|
+
this.cache.set(cacheKey, result);
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
getConflictText(uri) {
|
|
115
|
+
return this._conflictTextCaches.get(uri);
|
|
116
|
+
}
|
|
117
|
+
getAllConflictsByUri(uri) {
|
|
118
|
+
return this._conflictRangeCaches.get(uri);
|
|
119
|
+
}
|
|
120
|
+
getAllConflicts() {
|
|
121
|
+
return this._conflictRangeCaches;
|
|
122
|
+
}
|
|
123
|
+
setConflictResolved(uri, id) {
|
|
124
|
+
const conflictRanges = this._conflictRangeCaches.get(uri);
|
|
125
|
+
if (conflictRanges) {
|
|
126
|
+
const conflictRange = conflictRanges.find((item) => item.id === id);
|
|
127
|
+
if (conflictRange) {
|
|
128
|
+
conflictRange.isResolved = true;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
deleteConflictText(uri) {
|
|
133
|
+
this._conflictTextCaches.delete(uri);
|
|
134
|
+
}
|
|
135
|
+
dispose() {
|
|
136
|
+
this._conflictTextCaches.clear();
|
|
137
|
+
this._conflictRangeCaches.clear();
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
MergeConflictParser = MergeConflictParser_1 = tslib_1.__decorate([
|
|
141
|
+
(0, di_1.Injectable)()
|
|
142
|
+
], MergeConflictParser);
|
|
143
|
+
exports.MergeConflictParser = MergeConflictParser;
|
|
144
|
+
function scanItemTolMergeConflictDescriptor(document, scanned) {
|
|
145
|
+
// Validate we have all the required lines within the scan item.
|
|
146
|
+
if (!scanned.startHeader || !scanned.splitter || !scanned.endFooter) {
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
const tokenAfterCurrentBlock = scanned.commonAncestors[0] || scanned.splitter;
|
|
150
|
+
// Assume that descriptor.current.header, descriptor.incoming.header and descriptor.splitter
|
|
151
|
+
// have valid ranges, fill in content and total ranges from these parts.
|
|
152
|
+
// NOTE: We need to shift the decorator range back one character so the splitter does not end up with
|
|
153
|
+
// two decoration colors (current and splitter), if we take the new line from the content into account
|
|
154
|
+
// the decorator will wrap to the next line.
|
|
155
|
+
return {
|
|
156
|
+
current: {
|
|
157
|
+
header: scanned.startHeader.range,
|
|
158
|
+
decoratorContent: new monaco.Range(scanned.startHeader.rangeIncludingLineBreak.endLineNumber, scanned.startHeader.rangeIncludingLineBreak.endColumn, shiftBackOneCharacter(document, tokenAfterCurrentBlock.range.getStartPosition(), scanned.startHeader.rangeIncludingLineBreak.getEndPosition()).lineNumber, shiftBackOneCharacter(document, tokenAfterCurrentBlock.range.getStartPosition(), scanned.startHeader.rangeIncludingLineBreak.getEndPosition()).column),
|
|
159
|
+
// Current content is range between header (shifted for linebreak) and splitter or common ancestors mark start
|
|
160
|
+
content: new monaco.Range(scanned.startHeader.rangeIncludingLineBreak.endLineNumber, scanned.startHeader.rangeIncludingLineBreak.endColumn, tokenAfterCurrentBlock.range.startLineNumber, tokenAfterCurrentBlock.range.startColumn),
|
|
161
|
+
name: scanned.startHeader.text.substring(startHeaderMarker.length + 1),
|
|
162
|
+
},
|
|
163
|
+
commonAncestors: scanned.commonAncestors.map((currentTokenLine, index, commonAncestors) => {
|
|
164
|
+
const nextTokenLine = commonAncestors[index + 1] || scanned.splitter;
|
|
165
|
+
return {
|
|
166
|
+
header: currentTokenLine.range,
|
|
167
|
+
decoratorContent: new monaco.Range(currentTokenLine.rangeIncludingLineBreak.endLineNumber, currentTokenLine.rangeIncludingLineBreak.endColumn, shiftBackOneCharacter(document, nextTokenLine.range.getStartPosition(), currentTokenLine.rangeIncludingLineBreak.getEndPosition()).lineNumber, shiftBackOneCharacter(document, nextTokenLine.range.getStartPosition(), currentTokenLine.rangeIncludingLineBreak.getEndPosition()).lineNumber),
|
|
168
|
+
// Each common ancestors block is range between one common ancestors token
|
|
169
|
+
// (shifted for linebreak) and start of next common ancestors token or splitter
|
|
170
|
+
content: new monaco.Range(currentTokenLine.rangeIncludingLineBreak.endLineNumber, currentTokenLine.rangeIncludingLineBreak.endColumn, nextTokenLine.range.startLineNumber, nextTokenLine.range.startColumn),
|
|
171
|
+
name: currentTokenLine.text.substring(commonAncestorsMarker.length + 1),
|
|
172
|
+
};
|
|
173
|
+
}),
|
|
174
|
+
splitter: scanned.splitter.range,
|
|
175
|
+
incoming: {
|
|
176
|
+
header: scanned.endFooter.range,
|
|
177
|
+
decoratorContent: new monaco.Range(scanned.splitter.rangeIncludingLineBreak.endLineNumber, scanned.splitter.rangeIncludingLineBreak.endColumn, shiftBackOneCharacter(document, scanned.endFooter.range.getStartPosition(), scanned.splitter.rangeIncludingLineBreak.getEndPosition()).lineNumber, shiftBackOneCharacter(document, scanned.endFooter.range.getStartPosition(), scanned.splitter.rangeIncludingLineBreak.getEndPosition()).column),
|
|
178
|
+
// Incoming content is range between splitter (shifted for linebreak) and footer start
|
|
179
|
+
content: new monaco.Range(scanned.splitter.rangeIncludingLineBreak.endLineNumber, scanned.splitter.rangeIncludingLineBreak.endColumn, scanned.endFooter.range.startLineNumber, scanned.endFooter.range.startColumn),
|
|
180
|
+
name: scanned.endFooter.text.substring(endFooterMarker.length + 1),
|
|
181
|
+
},
|
|
182
|
+
// Entire range is between current header start and incoming header end (including line break)
|
|
183
|
+
range: new monaco.Range(scanned.startHeader.range.startLineNumber, scanned.startHeader.range.startColumn, scanned.endFooter.range.endLineNumber, scanned.endFooter.range.endColumn),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
function shiftBackOneCharacter(document, range, unlessEqual) {
|
|
187
|
+
if (range.equals(unlessEqual)) {
|
|
188
|
+
return range;
|
|
189
|
+
}
|
|
190
|
+
let line = range.lineNumber;
|
|
191
|
+
let character = range.column - 1;
|
|
192
|
+
if (character < 0) {
|
|
193
|
+
line--;
|
|
194
|
+
character = new TextLine(document, line).range.endColumn;
|
|
195
|
+
}
|
|
196
|
+
return new monaco.Position(line, character);
|
|
197
|
+
}
|
|
198
|
+
class DocumentMergeConflict {
|
|
199
|
+
constructor(descriptor) {
|
|
200
|
+
this.applied = false;
|
|
201
|
+
this.range = descriptor.range;
|
|
202
|
+
this.current = descriptor.current;
|
|
203
|
+
this.incoming = descriptor.incoming;
|
|
204
|
+
this.commonAncestors = descriptor.commonAncestors;
|
|
205
|
+
this.splitter = descriptor.splitter;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
exports.DocumentMergeConflict = DocumentMergeConflict;
|
|
209
|
+
//# sourceMappingURL=conflict-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conflict-parser.js","sourceRoot":"","sources":["../../../src/browser/merge-conflict/conflict-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/browser/merge-conflict/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/browser/merge-conflict/index.ts"],"names":[],"mappings":";;;AAAA,4DAAkC;AAClC,kDAAwB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import * as monaco from '@opensumi/ide-monaco';
|
|
2
|
+
export interface IMergeRegion {
|
|
3
|
+
name: string;
|
|
4
|
+
header: monaco.Range;
|
|
5
|
+
content: monaco.Range;
|
|
6
|
+
decoratorContent?: monaco.Range;
|
|
7
|
+
}
|
|
8
|
+
export declare const enum CommitType {
|
|
9
|
+
Current = 0,
|
|
10
|
+
Incoming = 1,
|
|
11
|
+
Both = 2
|
|
12
|
+
}
|
|
13
|
+
export interface IExtensionConfiguration {
|
|
14
|
+
enableCodeLens: boolean;
|
|
15
|
+
enableDecorations: boolean;
|
|
16
|
+
enableEditorOverview: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface IDocumentMergeConflict extends IDocumentMergeConflictDescriptor {
|
|
19
|
+
commitEdit(type: CommitType, editor: monaco.editor.ITextModel): Thenable<boolean>;
|
|
20
|
+
applyEdit(type: CommitType, document: monaco.editor.ITextModel, edit: {
|
|
21
|
+
replace(range: monaco.Range, newText: string): void;
|
|
22
|
+
}): void;
|
|
23
|
+
}
|
|
24
|
+
export interface IDocumentMergeConflictDescriptor {
|
|
25
|
+
[x: string]: any;
|
|
26
|
+
range: monaco.Range;
|
|
27
|
+
current: IMergeRegion;
|
|
28
|
+
incoming: IMergeRegion;
|
|
29
|
+
commonAncestors: IMergeRegion[];
|
|
30
|
+
splitter: monaco.Range;
|
|
31
|
+
}
|
|
32
|
+
export interface ICacheDocumentMergeConflict extends IDocumentMergeConflictDescriptor {
|
|
33
|
+
incomingContent: string;
|
|
34
|
+
currentContent: string;
|
|
35
|
+
bothContent: string;
|
|
36
|
+
aiContent?: string;
|
|
37
|
+
defaultContent: string;
|
|
38
|
+
}
|
|
39
|
+
export interface IDocumentMergeConflictTracker {
|
|
40
|
+
getConflicts(document: monaco.editor.ITextModel): PromiseLike<IDocumentMergeConflict[]>;
|
|
41
|
+
isPending(document: monaco.editor.ITextModel): boolean;
|
|
42
|
+
forget(document: monaco.editor.ITextModel): void;
|
|
43
|
+
}
|
|
44
|
+
export interface IDocumentMergeConflictTrackerService {
|
|
45
|
+
createTracker(origin: string): IDocumentMergeConflictTracker;
|
|
46
|
+
forget(document: monaco.editor.ITextModel): void;
|
|
47
|
+
}
|
|
48
|
+
export interface IDocumentMergeConflictNavigationResults {
|
|
49
|
+
canNavigate: boolean;
|
|
50
|
+
conflict?: IDocumentMergeConflict;
|
|
51
|
+
}
|
|
52
|
+
export declare enum NavigationDirection {
|
|
53
|
+
Forwards = 0,
|
|
54
|
+
Backwards = 1
|
|
55
|
+
}
|
|
56
|
+
export declare namespace AI_COMMAND {
|
|
57
|
+
const ACCEPT: string;
|
|
58
|
+
const REVERT: string;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/browser/merge-conflict/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;CACjC;AAED,0BAAkB,UAAU;IAC1B,OAAO,IAAA;IACP,QAAQ,IAAA;IACR,IAAI,IAAA;CACL;AAED,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAuB,SAAQ,gCAAgC;IAC9E,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClF,SAAS,CACP,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAClC,IAAI,EAAE;QAAE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAC5D,IAAI,CAAC;CACT;AAED,MAAM,WAAW,gCAAgC;IAC/C,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;IACpB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC;CACxB;AAGD,MAAM,WAAW,2BAA4B,SAAQ,gCAAgC;IACnF,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AACD,MAAM,WAAW,6BAA6B;IAC5C,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,WAAW,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACxF,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC;IACvD,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,oCAAoC;IACnD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,6BAA6B,CAAC;IAC7D,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,uCAAuC;IACtD,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;CACnC;AAED,oBAAY,mBAAmB;IAC7B,QAAQ,IAAA;IACR,SAAS,IAAA;CACV;AAED,yBAAiB,UAAU,CAAC;IAEnB,MAAM,MAAM,QAAgC,CAAC;IAC7C,MAAM,MAAM,QAAgC,CAAC;CACrD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AI_COMMAND = exports.NavigationDirection = void 0;
|
|
4
|
+
var NavigationDirection;
|
|
5
|
+
(function (NavigationDirection) {
|
|
6
|
+
NavigationDirection[NavigationDirection["Forwards"] = 0] = "Forwards";
|
|
7
|
+
NavigationDirection[NavigationDirection["Backwards"] = 1] = "Backwards";
|
|
8
|
+
})(NavigationDirection = exports.NavigationDirection || (exports.NavigationDirection = {}));
|
|
9
|
+
var AI_COMMAND;
|
|
10
|
+
(function (AI_COMMAND) {
|
|
11
|
+
const MERGE_CONFLICT = 'merge-conflict';
|
|
12
|
+
AI_COMMAND.ACCEPT = `${MERGE_CONFLICT}.ai.accept`;
|
|
13
|
+
AI_COMMAND.REVERT = `${MERGE_CONFLICT}.ai.revert`;
|
|
14
|
+
})(AI_COMMAND = exports.AI_COMMAND || (exports.AI_COMMAND = {}));
|
|
15
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/browser/merge-conflict/types.ts"],"names":[],"mappings":";;;AA+DA,IAAY,mBAGX;AAHD,WAAY,mBAAmB;IAC7B,qEAAQ,CAAA;IACR,uEAAS,CAAA;AACX,CAAC,EAHW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAG9B;AAED,IAAiB,UAAU,CAI1B;AAJD,WAAiB,UAAU;IACzB,MAAM,cAAc,GAAG,gBAAgB,CAAC;IAC3B,iBAAM,GAAG,GAAG,cAAc,YAAY,CAAC;IACvC,iBAAM,GAAG,GAAG,cAAc,YAAY,CAAC;AACtD,CAAC,EAJgB,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAI1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MergeEditorFloatComponents.d.ts","sourceRoot":"","sources":["../../../src/browser/merge-editor/MergeEditorFloatComponents.tsx"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"MergeEditorFloatComponents.d.ts","sourceRoot":"","sources":["../../../src/browser/merge-editor/MergeEditorFloatComponents.tsx"],"names":[],"mappings":"AAGA,OAAO,EAOL,GAAG,EAGJ,MAAM,4BAA4B,CAAC;AAMpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAIhD,eAAO,MAAM,0BAA0B,EAAE,oBAAoB,CAAC;IAAE,GAAG,EAAE,GAAG,CAAA;CAAE,CAiJzE,CAAC"}
|
|
@@ -5,28 +5,45 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
6
|
const ide_components_1 = require("@opensumi/ide-components");
|
|
7
7
|
const ide_core_browser_1 = require("@opensumi/ide-core-browser");
|
|
8
|
-
const
|
|
8
|
+
const git_1 = require("@opensumi/ide-core-common/lib/commands/git");
|
|
9
|
+
const useEditor_1 = require("../hooks/useEditor");
|
|
10
|
+
const useInMergeChanges_1 = require("../hooks/useInMergeChanges");
|
|
11
|
+
const merge_conflict_1 = require("../merge-conflict");
|
|
12
|
+
const merge_editor_module_less_1 = tslib_1.__importDefault(require("./merge-editor.module.less"));
|
|
9
13
|
const MergeEditorFloatComponents = ({ resource }) => {
|
|
10
14
|
const aiNativeConfigService = (0, ide_core_browser_1.useInjectable)(ide_core_browser_1.AINativeConfigService);
|
|
11
15
|
const commandService = (0, ide_core_browser_1.useInjectable)(ide_core_browser_1.CommandService);
|
|
12
16
|
const commandRegistry = (0, ide_core_browser_1.useInjectable)(ide_core_browser_1.CommandRegistry);
|
|
13
|
-
const
|
|
17
|
+
const mergeConflictParser = (0, ide_core_browser_1.useInjectable)(merge_conflict_1.MergeConflictParser);
|
|
18
|
+
const editorModel = (0, useEditor_1.useEditorDocumentModelRef)(resource.uri);
|
|
14
19
|
const [isVisiable, setIsVisiable] = (0, react_1.useState)(false);
|
|
15
|
-
const
|
|
20
|
+
const [conflicts, setConflicts] = (0, react_1.useState)([]);
|
|
21
|
+
const inMergeChanges = (0, useInMergeChanges_1.useInMergeChanges)(resource.uri.toString());
|
|
16
22
|
(0, react_1.useEffect)(() => {
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
const disposables = new ide_core_browser_1.DisposableStore();
|
|
24
|
+
if (editorModel) {
|
|
25
|
+
const { instance } = editorModel;
|
|
26
|
+
const run = () => {
|
|
27
|
+
const conflicts = mergeConflictParser.scanDocument(instance.getMonacoModel());
|
|
28
|
+
if (conflicts.length > 0) {
|
|
29
|
+
setIsVisiable(true);
|
|
30
|
+
setConflicts(conflicts);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
setIsVisiable(false);
|
|
34
|
+
setConflicts([]);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
disposables.add(editorModel.instance.getMonacoModel().onDidChangeContent(() => {
|
|
23
38
|
run();
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
39
|
+
}));
|
|
40
|
+
run();
|
|
41
|
+
return () => {
|
|
42
|
+
disposables.dispose();
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}, [editorModel]);
|
|
46
|
+
const [isAIResolving, setIsAIResolving] = (0, react_1.useState)(false);
|
|
30
47
|
const handleOpenMergeEditor = (0, react_1.useCallback)(async () => {
|
|
31
48
|
const { uri } = resource;
|
|
32
49
|
[ide_core_browser_1.SCM_COMMANDS.GIT_OPEN_MERGE_EDITOR, ide_core_browser_1.SCM_COMMANDS._GIT_OPEN_MERGE_EDITOR].forEach(({ id: command }) => {
|
|
@@ -35,49 +52,58 @@ const MergeEditorFloatComponents = ({ resource }) => {
|
|
|
35
52
|
}
|
|
36
53
|
});
|
|
37
54
|
}, [resource]);
|
|
38
|
-
const
|
|
39
|
-
const handlePrev = () => {
|
|
40
|
-
commandService.tryExecuteCommand(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
55
|
+
const isSupportAIResolve = (0, react_1.useCallback)(() => aiNativeConfigService.capabilities.supportsConflictResolve, [aiNativeConfigService]);
|
|
56
|
+
const handlePrev = (0, react_1.useCallback)(() => {
|
|
57
|
+
commandService.tryExecuteCommand(git_1.MergeConflictCommands.Previous).then(() => {
|
|
58
|
+
// TODO: 编辑器向上滚动一行
|
|
59
|
+
});
|
|
60
|
+
}, []);
|
|
61
|
+
const handleNext = (0, react_1.useCallback)(() => {
|
|
62
|
+
commandService.tryExecuteCommand(git_1.MergeConflictCommands.Next).then(() => {
|
|
63
|
+
// TODO: 编辑器向上滚动一行
|
|
64
|
+
});
|
|
65
|
+
}, []);
|
|
45
66
|
const handleAIResolve = (0, react_1.useCallback)(async () => {
|
|
46
|
-
|
|
47
|
-
if (
|
|
48
|
-
await commandService.executeCommand(
|
|
67
|
+
setIsAIResolving(true);
|
|
68
|
+
if (isAIResolving) {
|
|
69
|
+
await commandService.executeCommand(ide_core_browser_1.MERGE_CONFLICT_COMMANDS.AI_ALL_ACCEPT_STOP.id, resource.uri);
|
|
49
70
|
}
|
|
50
71
|
else {
|
|
51
|
-
await commandService.executeCommand(
|
|
72
|
+
await commandService.executeCommand(ide_core_browser_1.MERGE_CONFLICT_COMMANDS.AI_ALL_ACCEPT.id, resource.uri);
|
|
52
73
|
}
|
|
53
|
-
|
|
54
|
-
}, [resource,
|
|
74
|
+
setIsAIResolving(false);
|
|
75
|
+
}, [resource, isAIResolving]);
|
|
55
76
|
const handleReset = (0, react_1.useCallback)(() => {
|
|
56
|
-
commandService.executeCommand(
|
|
77
|
+
commandService.executeCommand(ide_core_browser_1.MERGE_CONFLICT_COMMANDS.ALL_RESET.id, resource.uri);
|
|
57
78
|
}, [resource]);
|
|
58
79
|
if (!isVisiable) {
|
|
59
80
|
return null;
|
|
60
81
|
}
|
|
61
|
-
return (react_1.default.createElement("div", { className:
|
|
62
|
-
react_1.default.createElement("div", {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
react_1.default.createElement(ide_components_1.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
react_1.default.createElement(
|
|
75
|
-
react_1.default.createElement(
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
react_1.default.createElement(
|
|
79
|
-
|
|
80
|
-
|
|
82
|
+
return (react_1.default.createElement("div", { className: merge_editor_module_less_1.default.merge_editor_float_container },
|
|
83
|
+
react_1.default.createElement("div", { className: merge_editor_module_less_1.default.merge_editor_float_container_info },
|
|
84
|
+
"\u5269\u4F59\u672A\u89E3\u51B3\u51B2\u7A81 ",
|
|
85
|
+
conflicts.length,
|
|
86
|
+
" \u5904"),
|
|
87
|
+
react_1.default.createElement("div", { className: merge_editor_module_less_1.default.merge_editor_float_container_operation_bar },
|
|
88
|
+
react_1.default.createElement("div", { id: 'merge.editor.action.button.nav' },
|
|
89
|
+
react_1.default.createElement(ide_components_1.Button, { className: merge_editor_module_less_1.default.merge_conflict_bottom_btn, size: 'default', onClick: handlePrev },
|
|
90
|
+
react_1.default.createElement(ide_components_1.Icon, { icon: 'left' }),
|
|
91
|
+
react_1.default.createElement("span", null, (0, ide_core_browser_1.localize)('mergeEditor.conflict.prev'))),
|
|
92
|
+
react_1.default.createElement(ide_components_1.Button, { className: merge_editor_module_less_1.default.merge_conflict_bottom_btn, size: 'default', onClick: handleNext },
|
|
93
|
+
react_1.default.createElement("span", null, (0, ide_core_browser_1.localize)('mergeEditor.conflict.next')),
|
|
94
|
+
react_1.default.createElement(ide_components_1.Icon, { icon: 'right' }))),
|
|
95
|
+
react_1.default.createElement("span", { className: merge_editor_module_less_1.default.line_vertical }),
|
|
96
|
+
inMergeChanges && (react_1.default.createElement(ide_components_1.Button, { id: 'merge.editor.open.tradition', className: merge_editor_module_less_1.default.merge_conflict_bottom_btn, size: 'default', onClick: handleOpenMergeEditor },
|
|
97
|
+
react_1.default.createElement(ide_components_1.Icon, { icon: 'swap' }),
|
|
98
|
+
react_1.default.createElement("span", null, (0, ide_core_browser_1.localize)('mergeEditor.open.3way')))),
|
|
99
|
+
react_1.default.createElement(ide_components_1.Button, { id: 'merge.editor.rest', className: merge_editor_module_less_1.default.merge_conflict_bottom_btn, size: 'default', onClick: handleReset },
|
|
100
|
+
react_1.default.createElement(ide_components_1.Icon, { icon: 'discard' }),
|
|
101
|
+
react_1.default.createElement("span", null, (0, ide_core_browser_1.localize)('mergeEditor.reset'))),
|
|
102
|
+
isSupportAIResolve() && (react_1.default.createElement(ide_components_1.Button, { id: 'merge.editor.conflict.resolve.all', size: 'default', className: `${merge_editor_module_less_1.default.merge_conflict_bottom_btn} ${merge_editor_module_less_1.default.magic_btn}`, onClick: handleAIResolve }, isAIResolving ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
103
|
+
react_1.default.createElement(ide_components_1.Icon, { icon: 'circle-pause' }),
|
|
104
|
+
react_1.default.createElement("span", null, (0, ide_core_browser_1.localize)('mergeEditor.conflict.ai.resolve.all.stop')))) : (react_1.default.createElement(react_1.default.Fragment, null,
|
|
105
|
+
react_1.default.createElement(ide_components_1.Icon, { icon: 'magic-wand' }),
|
|
106
|
+
react_1.default.createElement("span", null, (0, ide_core_browser_1.localize)('mergeEditor.conflict.ai.resolve.all')))))))));
|
|
81
107
|
};
|
|
82
108
|
exports.MergeEditorFloatComponents = MergeEditorFloatComponents;
|
|
83
109
|
//# sourceMappingURL=MergeEditorFloatComponents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MergeEditorFloatComponents.js","sourceRoot":"","sources":["../../../src/browser/merge-editor/MergeEditorFloatComponents.tsx"],"names":[],"mappings":";;;;AAAA,uDAAgE;AAEhE,6DAAwD;AACxD,iEAUoC;
|
|
1
|
+
{"version":3,"file":"MergeEditorFloatComponents.js","sourceRoot":"","sources":["../../../src/browser/merge-editor/MergeEditorFloatComponents.tsx"],"names":[],"mappings":"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"}
|