@theia/scm 1.64.0-next.28 → 1.64.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/lib/browser/decorations/scm-decorations-service.d.ts.map +1 -1
  2. package/lib/browser/decorations/scm-decorations-service.js +19 -1
  3. package/lib/browser/decorations/scm-decorations-service.js.map +1 -1
  4. package/lib/browser/merge-editor/merge-editor-contribution.d.ts +34 -0
  5. package/lib/browser/merge-editor/merge-editor-contribution.d.ts.map +1 -0
  6. package/lib/browser/merge-editor/merge-editor-contribution.js +335 -0
  7. package/lib/browser/merge-editor/merge-editor-contribution.js.map +1 -0
  8. package/lib/browser/merge-editor/merge-editor-dev-contribution.d.ts +31 -0
  9. package/lib/browser/merge-editor/merge-editor-dev-contribution.d.ts.map +1 -0
  10. package/lib/browser/merge-editor/merge-editor-dev-contribution.js +151 -0
  11. package/lib/browser/merge-editor/merge-editor-dev-contribution.js.map +1 -0
  12. package/lib/browser/merge-editor/merge-editor-module.d.ts +24 -0
  13. package/lib/browser/merge-editor/merge-editor-module.d.ts.map +1 -0
  14. package/lib/browser/merge-editor/merge-editor-module.js +109 -0
  15. package/lib/browser/merge-editor/merge-editor-module.js.map +1 -0
  16. package/lib/browser/merge-editor/merge-editor.d.ts +122 -0
  17. package/lib/browser/merge-editor/merge-editor.d.ts.map +1 -0
  18. package/lib/browser/merge-editor/merge-editor.js +560 -0
  19. package/lib/browser/merge-editor/merge-editor.js.map +1 -0
  20. package/lib/browser/merge-editor/model/line-range.d.ts +37 -0
  21. package/lib/browser/merge-editor/model/line-range.d.ts.map +1 -0
  22. package/lib/browser/merge-editor/model/line-range.js +111 -0
  23. package/lib/browser/merge-editor/model/line-range.js.map +1 -0
  24. package/lib/browser/merge-editor/model/live-diff.d.ts +26 -0
  25. package/lib/browser/merge-editor/model/live-diff.d.ts.map +1 -0
  26. package/lib/browser/merge-editor/model/live-diff.js +85 -0
  27. package/lib/browser/merge-editor/model/live-diff.js.map +1 -0
  28. package/lib/browser/merge-editor/model/merge-editor-model.d.ts +116 -0
  29. package/lib/browser/merge-editor/model/merge-editor-model.d.ts.map +1 -0
  30. package/lib/browser/merge-editor/model/merge-editor-model.js +507 -0
  31. package/lib/browser/merge-editor/model/merge-editor-model.js.map +1 -0
  32. package/lib/browser/merge-editor/model/merge-range.d.ts +50 -0
  33. package/lib/browser/merge-editor/model/merge-range.d.ts.map +1 -0
  34. package/lib/browser/merge-editor/model/merge-range.js +215 -0
  35. package/lib/browser/merge-editor/model/merge-range.js.map +1 -0
  36. package/lib/browser/merge-editor/model/range-editing.d.ts +21 -0
  37. package/lib/browser/merge-editor/model/range-editing.d.ts.map +1 -0
  38. package/lib/browser/merge-editor/model/range-editing.js +68 -0
  39. package/lib/browser/merge-editor/model/range-editing.js.map +1 -0
  40. package/lib/browser/merge-editor/model/range-mapping.d.ts +106 -0
  41. package/lib/browser/merge-editor/model/range-mapping.d.ts.map +1 -0
  42. package/lib/browser/merge-editor/model/range-mapping.js +252 -0
  43. package/lib/browser/merge-editor/model/range-mapping.js.map +1 -0
  44. package/lib/browser/merge-editor/model/range-mapping.spec.d.ts +2 -0
  45. package/lib/browser/merge-editor/model/range-mapping.spec.d.ts.map +1 -0
  46. package/lib/browser/merge-editor/model/range-mapping.spec.js +48 -0
  47. package/lib/browser/merge-editor/model/range-mapping.spec.js.map +1 -0
  48. package/lib/browser/merge-editor/model/range-utils.d.ts +25 -0
  49. package/lib/browser/merge-editor/model/range-utils.d.ts.map +1 -0
  50. package/lib/browser/merge-editor/model/range-utils.js +118 -0
  51. package/lib/browser/merge-editor/model/range-utils.js.map +1 -0
  52. package/lib/browser/merge-editor/view/diff-spacers.d.ts +50 -0
  53. package/lib/browser/merge-editor/view/diff-spacers.d.ts.map +1 -0
  54. package/lib/browser/merge-editor/view/diff-spacers.js +133 -0
  55. package/lib/browser/merge-editor/view/diff-spacers.js.map +1 -0
  56. package/lib/browser/merge-editor/view/merge-editor-panes/index.d.ts +6 -0
  57. package/lib/browser/merge-editor/view/merge-editor-panes/index.d.ts.map +1 -0
  58. package/lib/browser/merge-editor/view/merge-editor-panes/index.js +24 -0
  59. package/lib/browser/merge-editor/view/merge-editor-panes/index.js.map +1 -0
  60. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-base-pane.d.ts +12 -0
  61. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-base-pane.d.ts.map +1 -0
  62. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-base-pane.js +65 -0
  63. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-base-pane.js.map +1 -0
  64. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-pane-header.d.ts +30 -0
  65. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-pane-header.d.ts.map +1 -0
  66. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-pane-header.js +102 -0
  67. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-pane-header.js.map +1 -0
  68. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-pane.d.ts +49 -0
  69. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-pane.d.ts.map +1 -0
  70. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-pane.js +214 -0
  71. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-pane.js.map +1 -0
  72. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-result-pane.d.ts +16 -0
  73. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-result-pane.d.ts.map +1 -0
  74. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-result-pane.js +107 -0
  75. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-result-pane.js.map +1 -0
  76. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-side-pane.d.ts +27 -0
  77. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-side-pane.d.ts.map +1 -0
  78. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-side-pane.js +135 -0
  79. package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-side-pane.js.map +1 -0
  80. package/lib/browser/merge-editor/view/merge-editor-scroll-sync.d.ts +20 -0
  81. package/lib/browser/merge-editor/view/merge-editor-scroll-sync.d.ts.map +1 -0
  82. package/lib/browser/merge-editor/view/merge-editor-scroll-sync.js +218 -0
  83. package/lib/browser/merge-editor/view/merge-editor-scroll-sync.js.map +1 -0
  84. package/lib/browser/merge-editor/view/merge-editor-view-zones.d.ts +57 -0
  85. package/lib/browser/merge-editor/view/merge-editor-view-zones.d.ts.map +1 -0
  86. package/lib/browser/merge-editor/view/merge-editor-view-zones.js +218 -0
  87. package/lib/browser/merge-editor/view/merge-editor-view-zones.js.map +1 -0
  88. package/lib/browser/merge-editor/view/merge-range-actions.d.ts +23 -0
  89. package/lib/browser/merge-editor/view/merge-range-actions.d.ts.map +1 -0
  90. package/lib/browser/merge-editor/view/merge-range-actions.js +142 -0
  91. package/lib/browser/merge-editor/view/merge-range-actions.js.map +1 -0
  92. package/lib/browser/scm-colors.d.ts +2 -0
  93. package/lib/browser/scm-colors.d.ts.map +1 -1
  94. package/lib/browser/scm-colors.js +2 -0
  95. package/lib/browser/scm-colors.js.map +1 -1
  96. package/lib/browser/scm-frontend-module.d.ts.map +1 -1
  97. package/lib/browser/scm-frontend-module.js +2 -0
  98. package/lib/browser/scm-frontend-module.js.map +1 -1
  99. package/package.json +7 -7
  100. package/src/browser/decorations/scm-decorations-service.ts +18 -1
  101. package/src/browser/merge-editor/merge-editor-contribution.ts +346 -0
  102. package/src/browser/merge-editor/merge-editor-dev-contribution.ts +154 -0
  103. package/src/browser/merge-editor/merge-editor-module.ts +134 -0
  104. package/src/browser/merge-editor/merge-editor.ts +643 -0
  105. package/src/browser/merge-editor/model/line-range.ts +128 -0
  106. package/src/browser/merge-editor/model/live-diff.ts +111 -0
  107. package/src/browser/merge-editor/model/merge-editor-model.ts +623 -0
  108. package/src/browser/merge-editor/model/merge-range.ts +268 -0
  109. package/src/browser/merge-editor/model/range-editing.ts +81 -0
  110. package/src/browser/merge-editor/model/range-mapping.spec.ts +52 -0
  111. package/src/browser/merge-editor/model/range-mapping.ts +396 -0
  112. package/src/browser/merge-editor/model/range-utils.ts +115 -0
  113. package/src/browser/merge-editor/view/diff-spacers.ts +160 -0
  114. package/src/browser/merge-editor/view/merge-editor-panes/index.ts +21 -0
  115. package/src/browser/merge-editor/view/merge-editor-panes/merge-editor-base-pane.ts +71 -0
  116. package/src/browser/merge-editor/view/merge-editor-panes/merge-editor-pane-header.tsx +106 -0
  117. package/src/browser/merge-editor/view/merge-editor-panes/merge-editor-pane.ts +246 -0
  118. package/src/browser/merge-editor/view/merge-editor-panes/merge-editor-result-pane.ts +115 -0
  119. package/src/browser/merge-editor/view/merge-editor-panes/merge-editor-side-pane.ts +139 -0
  120. package/src/browser/merge-editor/view/merge-editor-scroll-sync.ts +241 -0
  121. package/src/browser/merge-editor/view/merge-editor-view-zones.ts +264 -0
  122. package/src/browser/merge-editor/view/merge-range-actions.ts +159 -0
  123. package/src/browser/scm-colors.ts +2 -0
  124. package/src/browser/scm-frontend-module.ts +4 -0
  125. package/src/browser/style/merge-editor.css +221 -0
@@ -0,0 +1,154 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2025 1C-Soft LLC and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { inject, injectable } from '@theia/core/shared/inversify';
18
+ import { Command, CommandContribution, CommandRegistry, DisposableCollection, generateUuid, InMemoryResources, MessageService, nls, QuickInputService, URI } from '@theia/core';
19
+ import { ApplicationShell, open, OpenerService } from '@theia/core/lib/browser';
20
+ import { ClipboardService } from '@theia/core/lib/browser/clipboard-service';
21
+ import { LanguageService } from '@theia/core/lib/browser/language-service';
22
+ import { MergeEditor, MergeEditorOpenerOptions, MergeEditorUri } from './merge-editor';
23
+
24
+ export namespace MergeEditorDevCommands {
25
+ export const MERGE_EDITOR_DEV_CATEGORY = 'Merge Editor (Dev)';
26
+ export const COPY_CONTENTS_TO_JSON = Command.toDefaultLocalizedCommand({
27
+ id: 'mergeEditor.dev.copyContentsToJSON',
28
+ label: 'Copy Merge Editor State as JSON',
29
+ category: MERGE_EDITOR_DEV_CATEGORY
30
+ });
31
+ export const OPEN_CONTENTS_FROM_JSON = Command.toDefaultLocalizedCommand({
32
+ id: 'mergeEditor.dev.openContentsFromJSON',
33
+ label: 'Open Merge Editor State from JSON',
34
+ category: MERGE_EDITOR_DEV_CATEGORY
35
+ });
36
+ }
37
+
38
+ @injectable()
39
+ export class MergeEditorDevContribution implements CommandContribution {
40
+
41
+ @inject(ApplicationShell)
42
+ protected readonly shell: ApplicationShell;
43
+
44
+ @inject(ClipboardService)
45
+ protected readonly clipboardService: ClipboardService;
46
+
47
+ @inject(MessageService)
48
+ protected readonly messageService: MessageService;
49
+
50
+ @inject(QuickInputService)
51
+ protected readonly quickInputService: QuickInputService;
52
+
53
+ @inject(LanguageService)
54
+ protected readonly languageService: LanguageService;
55
+
56
+ @inject(InMemoryResources)
57
+ protected readonly inMemoryResources: InMemoryResources;
58
+
59
+ @inject(OpenerService)
60
+ protected readonly openerService: OpenerService;
61
+
62
+ protected getMergeEditor(widget = this.shell.currentWidget): MergeEditor | undefined {
63
+ return widget instanceof MergeEditor ? widget : (widget?.parent ? this.getMergeEditor(widget.parent) : undefined);
64
+ }
65
+
66
+ registerCommands(commands: CommandRegistry): void {
67
+ commands.registerCommand(MergeEditorDevCommands.COPY_CONTENTS_TO_JSON, {
68
+ execute: widget => {
69
+ const editor = this.getMergeEditor(widget);
70
+ if (editor) {
71
+ this.copyContentsToJSON(editor);
72
+ }
73
+ },
74
+ isEnabled: widget => !!this.getMergeEditor(widget),
75
+ isVisible: widget => !!this.getMergeEditor(widget)
76
+ });
77
+ commands.registerCommand(MergeEditorDevCommands.OPEN_CONTENTS_FROM_JSON, {
78
+ execute: () => this.openContentsFromJSON().catch(error => this.messageService.error(error.message))
79
+ });
80
+ }
81
+
82
+ protected copyContentsToJSON(editor: MergeEditor): void {
83
+ const { model } = editor;
84
+ const editorContents: MergeEditorContents = {
85
+ base: model.baseDocument.getText(),
86
+ input1: model.side1Document.getText(),
87
+ input2: model.side2Document.getText(),
88
+ result: model.resultDocument.getText(),
89
+ languageId: model.resultDocument.getLanguageId()
90
+ };
91
+ this.clipboardService.writeText(JSON.stringify(editorContents, undefined, 2));
92
+ this.messageService.info(nls.localizeByDefault('Successfully copied merge editor state'));
93
+ }
94
+
95
+ protected async openContentsFromJSON(): Promise<void> {
96
+ const inputText = await this.quickInputService.input({
97
+ prompt: nls.localizeByDefault('Enter JSON'),
98
+ value: await this.clipboardService.readText()
99
+ });
100
+
101
+ if (!inputText) {
102
+ return;
103
+ }
104
+
105
+ const { base, input1, input2, result, languageId } = Object.assign<MergeEditorContents, unknown>({
106
+ base: '',
107
+ input1: '',
108
+ input2: '',
109
+ result: '',
110
+ languageId: 'plaintext'
111
+ }, JSON.parse(inputText));
112
+
113
+ const extension = Array.from(this.languageService.getLanguage(languageId!)?.extensions ?? [''])[0];
114
+
115
+ const parentUri = new URI('merge-editor-dev://' + generateUuid());
116
+ const baseUri = parentUri.resolve('base' + extension);
117
+ const side1Uri = parentUri.resolve('side1' + extension);
118
+ const side2Uri = parentUri.resolve('side2' + extension);
119
+ const resultUri = parentUri.resolve('result' + extension);
120
+
121
+ const toDispose = new DisposableCollection();
122
+ try {
123
+ toDispose.push(this.inMemoryResources.add(baseUri, base));
124
+ toDispose.push(this.inMemoryResources.add(side1Uri, input1));
125
+ toDispose.push(this.inMemoryResources.add(side2Uri, input2));
126
+ toDispose.push(this.inMemoryResources.add(resultUri, result));
127
+
128
+ const uri = MergeEditorUri.encode({ baseUri, side1Uri, side2Uri, resultUri });
129
+ const options: MergeEditorOpenerOptions = {
130
+ widgetState: {
131
+ side1State: {
132
+ title: 'Left',
133
+ description: '(from JSON)'
134
+ },
135
+ side2State: {
136
+ title: 'Right',
137
+ description: '(from JSON)'
138
+ }
139
+ }
140
+ };
141
+ await open(this.openerService, uri, options);
142
+ } finally {
143
+ toDispose.dispose();
144
+ }
145
+ }
146
+ }
147
+
148
+ export interface MergeEditorContents {
149
+ base: string;
150
+ input1: string;
151
+ input2: string;
152
+ result: string;
153
+ languageId?: string;
154
+ }
@@ -0,0 +1,134 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2025 1C-Soft LLC and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import '../../../src/browser/style/merge-editor.css';
18
+
19
+ import { Container, interfaces } from '@theia/core/shared/inversify';
20
+ import { CommandContribution, DisposableCollection, MenuContribution, URI } from '@theia/core';
21
+ import { TabBarToolbarContribution } from '@theia/core/lib/browser/shell/tab-bar-toolbar';
22
+ import { FrontendApplicationContribution, KeybindingContribution, NavigatableWidgetOptions, OpenHandler, WidgetFactory } from '@theia/core/lib/browser';
23
+ import { ColorContribution } from '@theia/core/lib/browser/color-application-contribution';
24
+ import { EditorManager, EditorWidget } from '@theia/editor/lib/browser';
25
+ import { MonacoEditor } from '@theia/monaco/lib/browser/monaco-editor';
26
+ import { MergeEditorModel, MergeEditorModelProps } from './model/merge-editor-model';
27
+ import { MergeEditorBasePane, MergeEditorPaneHeader, MergeEditorResultPane, MergeEditorSide1Pane, MergeEditorSide2Pane } from './view/merge-editor-panes';
28
+ import { DiffSpacerService } from './view/diff-spacers';
29
+ import { MergeEditorViewZoneComputer } from './view/merge-editor-view-zones';
30
+ import { MergeEditor, MergeEditorOpenHandler, MergeEditorSettings, MergeEditorUri, MergeUris } from './merge-editor';
31
+ import { MergeEditorContribution } from './merge-editor-contribution';
32
+ import { MergeEditorDevContribution } from './merge-editor-dev-contribution';
33
+
34
+ export function bindMergeEditor(bind: interfaces.Bind): void {
35
+ bind(MergeEditorSettings).toSelf().inSingletonScope();
36
+ bind(DiffSpacerService).toSelf().inSingletonScope();
37
+ bind(MergeEditorViewZoneComputer).toSelf().inSingletonScope();
38
+ bind(MergeEditorFactory).toDynamicValue(ctx => new MergeEditorFactory(ctx.container)).inSingletonScope();
39
+ bind(WidgetFactory).toDynamicValue(ctx => ({
40
+ id: MergeEditorOpenHandler.ID,
41
+ createWidget: (options: NavigatableWidgetOptions) => ctx.container.get(MergeEditorFactory).createMergeEditor(MergeEditorUri.decode(new URI(options.uri)))
42
+ })).inSingletonScope();
43
+
44
+ bind(MergeEditorOpenHandler).toSelf().inSingletonScope();
45
+ bind(OpenHandler).toService(MergeEditorOpenHandler);
46
+
47
+ bind(MergeEditorContribution).toSelf().inSingletonScope();
48
+ [FrontendApplicationContribution, CommandContribution, MenuContribution, TabBarToolbarContribution, KeybindingContribution, ColorContribution].forEach(serviceIdentifier =>
49
+ bind(serviceIdentifier).toService(MergeEditorContribution)
50
+ );
51
+ bind(MergeEditorDevContribution).toSelf().inSingletonScope();
52
+ bind(CommandContribution).toService(MergeEditorDevContribution);
53
+ }
54
+
55
+ export class MergeEditorFactory {
56
+
57
+ constructor(
58
+ protected readonly container: interfaces.Container,
59
+ protected readonly editorManager = container.get(EditorManager)
60
+ ) { }
61
+
62
+ async createMergeEditor({ baseUri, side1Uri, side2Uri, resultUri }: MergeUris): Promise<MergeEditor> {
63
+ const toDisposeOnError = new DisposableCollection();
64
+ const createEditorWidget = (uri: URI) => this.createEditorWidget(uri, toDisposeOnError);
65
+ try {
66
+ const [baseEditorWidget, side1EditorWidget, side2EditorWidget, resultEditorWidget] = await Promise.all(
67
+ [createEditorWidget(baseUri), createEditorWidget(side1Uri), createEditorWidget(side2Uri), createEditorWidget(resultUri)]
68
+ );
69
+ const resultDocument = MonacoEditor.get(resultEditorWidget)!.document;
70
+ const hasConflictMarkers = resultDocument.textEditorModel.getLinesContent().some(lineContent => lineContent.startsWith('<<<<<<<'));
71
+ return this.createMergeEditorContainer({
72
+ baseEditorWidget,
73
+ side1EditorWidget,
74
+ side2EditorWidget,
75
+ resultEditorWidget,
76
+ options: {
77
+ resetResult: hasConflictMarkers
78
+ }
79
+ }).get(MergeEditor);
80
+ } catch (error) {
81
+ toDisposeOnError.dispose();
82
+ throw error;
83
+ }
84
+ }
85
+
86
+ protected async createEditorWidget(uri: URI, disposables: DisposableCollection): Promise<EditorWidget> {
87
+ const editorWidget = await this.editorManager.createByUri(uri);
88
+ disposables.push(editorWidget);
89
+ const editor = MonacoEditor.get(editorWidget);
90
+ if (!editor) {
91
+ throw new Error('The merge editor only supports Monaco editors as its parts');
92
+ }
93
+ editor.getControl().updateOptions({ folding: false, codeLens: false, minimap: { enabled: false } });
94
+ editor.setShouldDisplayDirtyDiff(false);
95
+ return editorWidget;
96
+ }
97
+
98
+ protected createMergeEditorContainer({
99
+ baseEditorWidget,
100
+ side1EditorWidget,
101
+ side2EditorWidget,
102
+ resultEditorWidget,
103
+ options
104
+ }: MergeEditorContainerProps): interfaces.Container {
105
+ const child = new Container({ defaultScope: 'Singleton' });
106
+ child.parent = this.container;
107
+ const [baseEditor, side1Editor, side2Editor, resultEditor] = [baseEditorWidget, side1EditorWidget, side2EditorWidget, resultEditorWidget].map(
108
+ editorWidget => MonacoEditor.get(editorWidget)!
109
+ );
110
+ child.bind(MergeEditorModelProps).toConstantValue({ baseEditor, side1Editor, side2Editor, resultEditor, options });
111
+ child.bind(MergeEditorModel).toSelf();
112
+ child.bind(MergeEditorPaneHeader).toSelf().inTransientScope();
113
+ child.bind(MergeEditorBasePane).toSelf();
114
+ child.bind(MergeEditorSide1Pane).toSelf();
115
+ child.bind(MergeEditorSide2Pane).toSelf();
116
+ child.bind(MergeEditorResultPane).toSelf();
117
+ child.bind(EditorWidget).toConstantValue(baseEditorWidget).whenInjectedInto(MergeEditorBasePane);
118
+ child.bind(EditorWidget).toConstantValue(side1EditorWidget).whenInjectedInto(MergeEditorSide1Pane);
119
+ child.bind(EditorWidget).toConstantValue(side2EditorWidget).whenInjectedInto(MergeEditorSide2Pane);
120
+ child.bind(EditorWidget).toConstantValue(resultEditorWidget).whenInjectedInto(MergeEditorResultPane);
121
+ child.bind(MergeEditor).toSelf();
122
+ return child;
123
+ }
124
+ }
125
+
126
+ export interface MergeEditorContainerProps {
127
+ baseEditorWidget: EditorWidget;
128
+ side1EditorWidget: EditorWidget;
129
+ side2EditorWidget: EditorWidget;
130
+ resultEditorWidget: EditorWidget;
131
+ options?: {
132
+ resetResult?: boolean;
133
+ }
134
+ }