@opensumi/ide-editor 2.27.3-rc-1714116491.0 → 2.27.3-rc-1714982362.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 (89) hide show
  1. package/lib/browser/doc-model/editor-document-model-service.d.ts +3 -1
  2. package/lib/browser/doc-model/editor-document-model-service.d.ts.map +1 -1
  3. package/lib/browser/doc-model/editor-document-model-service.js +6 -1
  4. package/lib/browser/doc-model/editor-document-model-service.js.map +1 -1
  5. package/lib/browser/doc-model/types.d.ts +1 -0
  6. package/lib/browser/doc-model/types.d.ts.map +1 -1
  7. package/lib/browser/doc-model/types.js.map +1 -1
  8. package/lib/browser/editor-collection.service.d.ts +6 -6
  9. package/lib/browser/editor-collection.service.d.ts.map +1 -1
  10. package/lib/browser/editor-collection.service.js.map +1 -1
  11. package/lib/browser/editor-electron.contribution.d.ts +2 -2
  12. package/lib/browser/editor-electron.contribution.d.ts.map +1 -1
  13. package/lib/browser/editor-electron.contribution.js +1 -1
  14. package/lib/browser/editor-electron.contribution.js.map +1 -1
  15. package/lib/browser/editor.context.d.ts +7 -0
  16. package/lib/browser/editor.context.d.ts.map +1 -0
  17. package/lib/browser/editor.context.js +10 -0
  18. package/lib/browser/editor.context.js.map +1 -0
  19. package/lib/browser/editor.contribution.d.ts.map +1 -1
  20. package/lib/browser/editor.contribution.js +0 -5
  21. package/lib/browser/editor.contribution.js.map +1 -1
  22. package/lib/browser/editor.decoration.service.d.ts +12 -1
  23. package/lib/browser/editor.decoration.service.d.ts.map +1 -1
  24. package/lib/browser/editor.decoration.service.js +59 -30
  25. package/lib/browser/editor.decoration.service.js.map +1 -1
  26. package/lib/browser/editor.module.less +0 -54
  27. package/lib/browser/editor.view.d.ts.map +1 -1
  28. package/lib/browser/editor.view.js +70 -51
  29. package/lib/browser/editor.view.js.map +1 -1
  30. package/lib/browser/hooks/useEditor.d.ts +4 -0
  31. package/lib/browser/hooks/useEditor.d.ts.map +1 -0
  32. package/lib/browser/hooks/useEditor.js +31 -0
  33. package/lib/browser/hooks/useEditor.js.map +1 -0
  34. package/lib/browser/hooks/useInMergeChanges.d.ts +3 -0
  35. package/lib/browser/hooks/useInMergeChanges.d.ts.map +1 -0
  36. package/lib/browser/hooks/useInMergeChanges.js +27 -0
  37. package/lib/browser/hooks/useInMergeChanges.js.map +1 -0
  38. package/lib/browser/merge-conflict/conflict-parser.d.ts +46 -0
  39. package/lib/browser/merge-conflict/conflict-parser.d.ts.map +1 -0
  40. package/lib/browser/merge-conflict/conflict-parser.js +209 -0
  41. package/lib/browser/merge-conflict/conflict-parser.js.map +1 -0
  42. package/lib/browser/merge-conflict/index.d.ts +3 -0
  43. package/lib/browser/merge-conflict/index.d.ts.map +1 -0
  44. package/lib/browser/merge-conflict/index.js +6 -0
  45. package/lib/browser/merge-conflict/index.js.map +1 -0
  46. package/lib/browser/merge-conflict/types.d.ts +60 -0
  47. package/lib/browser/merge-conflict/types.d.ts.map +1 -0
  48. package/lib/browser/merge-conflict/types.js +15 -0
  49. package/lib/browser/merge-conflict/types.js.map +1 -0
  50. package/lib/browser/merge-editor/MergeEditorFloatComponents.d.ts.map +1 -1
  51. package/lib/browser/merge-editor/MergeEditorFloatComponents.js +73 -49
  52. package/lib/browser/merge-editor/MergeEditorFloatComponents.js.map +1 -1
  53. package/lib/browser/merge-editor/merge-editor.module.less +71 -0
  54. package/lib/browser/merge-editor/merge-editor.provider.d.ts.map +1 -1
  55. package/lib/browser/merge-editor/merge-editor.provider.js +3 -0
  56. package/lib/browser/merge-editor/merge-editor.provider.js.map +1 -1
  57. package/lib/browser/tab.view.d.ts.map +1 -1
  58. package/lib/browser/tab.view.js +6 -5
  59. package/lib/browser/tab.view.js.map +1 -1
  60. package/lib/browser/types.d.ts +6 -0
  61. package/lib/browser/types.d.ts.map +1 -1
  62. package/lib/browser/types.js.map +1 -1
  63. package/lib/browser/workbench-editor.service.d.ts +1 -1
  64. package/lib/browser/workbench-editor.service.js +1 -1
  65. package/lib/common/editor.d.ts +3 -1
  66. package/lib/common/editor.d.ts.map +1 -1
  67. package/lib/common/editor.js.map +1 -1
  68. package/package.json +14 -14
  69. package/src/browser/doc-model/editor-document-model-service.ts +11 -1
  70. package/src/browser/doc-model/types.ts +4 -0
  71. package/src/browser/editor-collection.service.ts +7 -7
  72. package/src/browser/editor-electron.contribution.ts +1 -2
  73. package/src/browser/editor.context.ts +11 -0
  74. package/src/browser/editor.contribution.ts +0 -6
  75. package/src/browser/editor.decoration.service.ts +75 -34
  76. package/src/browser/editor.module.less +0 -54
  77. package/src/browser/editor.view.tsx +102 -77
  78. package/src/browser/hooks/useEditor.ts +34 -0
  79. package/src/browser/hooks/useInMergeChanges.ts +30 -0
  80. package/src/browser/merge-conflict/conflict-parser.ts +323 -0
  81. package/src/browser/merge-conflict/index.ts +2 -0
  82. package/src/browser/merge-conflict/types.ts +73 -0
  83. package/src/browser/merge-editor/MergeEditorFloatComponents.tsx +111 -73
  84. package/src/browser/merge-editor/merge-editor.module.less +71 -0
  85. package/src/browser/merge-editor/merge-editor.provider.ts +3 -0
  86. package/src/browser/tab.view.tsx +7 -6
  87. package/src/browser/types.ts +8 -0
  88. package/src/browser/workbench-editor.service.ts +1 -1
  89. package/src/common/editor.ts +3 -1
@@ -0,0 +1,73 @@
1
+ import * as monaco from '@opensumi/ide-monaco';
2
+
3
+ export interface IMergeRegion {
4
+ name: string;
5
+ header: monaco.Range;
6
+ content: monaco.Range;
7
+ decoratorContent?: monaco.Range;
8
+ }
9
+
10
+ export const enum CommitType {
11
+ Current,
12
+ Incoming,
13
+ Both,
14
+ }
15
+
16
+ export interface IExtensionConfiguration {
17
+ enableCodeLens: boolean;
18
+ enableDecorations: boolean;
19
+ enableEditorOverview: boolean;
20
+ }
21
+
22
+ export interface IDocumentMergeConflict extends IDocumentMergeConflictDescriptor {
23
+ commitEdit(type: CommitType, editor: monaco.editor.ITextModel): Thenable<boolean>;
24
+ applyEdit(
25
+ type: CommitType,
26
+ document: monaco.editor.ITextModel,
27
+ edit: { replace(range: monaco.Range, newText: string): void },
28
+ ): void;
29
+ }
30
+
31
+ export interface IDocumentMergeConflictDescriptor {
32
+ [x: string]: any;
33
+ range: monaco.Range;
34
+ current: IMergeRegion;
35
+ incoming: IMergeRegion;
36
+ commonAncestors: IMergeRegion[];
37
+ splitter: monaco.Range;
38
+ }
39
+
40
+ // 存储初始化内容
41
+ export interface ICacheDocumentMergeConflict extends IDocumentMergeConflictDescriptor {
42
+ incomingContent: string;
43
+ currentContent: string;
44
+ bothContent: string;
45
+ aiContent?: string;
46
+ defaultContent: string;
47
+ }
48
+ export interface IDocumentMergeConflictTracker {
49
+ getConflicts(document: monaco.editor.ITextModel): PromiseLike<IDocumentMergeConflict[]>;
50
+ isPending(document: monaco.editor.ITextModel): boolean;
51
+ forget(document: monaco.editor.ITextModel): void;
52
+ }
53
+
54
+ export interface IDocumentMergeConflictTrackerService {
55
+ createTracker(origin: string): IDocumentMergeConflictTracker;
56
+ forget(document: monaco.editor.ITextModel): void;
57
+ }
58
+
59
+ export interface IDocumentMergeConflictNavigationResults {
60
+ canNavigate: boolean;
61
+ conflict?: IDocumentMergeConflict;
62
+ }
63
+
64
+ export enum NavigationDirection {
65
+ Forwards,
66
+ Backwards,
67
+ }
68
+
69
+ export namespace AI_COMMAND {
70
+ const MERGE_CONFLICT = 'merge-conflict';
71
+ export const ACCEPT = `${MERGE_CONFLICT}.ai.accept`;
72
+ export const REVERT = `${MERGE_CONFLICT}.ai.revert`;
73
+ }
@@ -5,43 +5,65 @@ import {
5
5
  AINativeConfigService,
6
6
  CommandRegistry,
7
7
  CommandService,
8
- IContextKeyService,
8
+ DisposableStore,
9
+ MERGE_CONFLICT_COMMANDS,
9
10
  SCM_COMMANDS,
10
11
  URI,
11
- Uri,
12
12
  localize,
13
13
  useInjectable,
14
14
  } from '@opensumi/ide-core-browser';
15
+ import { formatLocalize } from '@opensumi/ide-core-common';
16
+ import { MergeConflictCommands } from '@opensumi/ide-core-common/lib/commands/git';
15
17
 
16
- import styles from '../editor.module.less';
18
+ import { useEditorDocumentModelRef } from '../hooks/useEditor';
19
+ import { useInMergeChanges } from '../hooks/useInMergeChanges';
20
+ import { DocumentMergeConflict, MergeConflictParser } from '../merge-conflict';
17
21
  import { ReactEditorComponent } from '../types';
18
22
 
23
+ import styles from './merge-editor.module.less';
24
+
19
25
  export const MergeEditorFloatComponents: ReactEditorComponent<{ uri: URI }> = ({ resource }) => {
20
26
  const aiNativeConfigService = useInjectable<AINativeConfigService>(AINativeConfigService);
21
27
  const commandService = useInjectable<CommandService>(CommandService);
22
28
  const commandRegistry = useInjectable<CommandRegistry>(CommandRegistry);
23
- const contextKeyService = useInjectable<IContextKeyService>(IContextKeyService);
29
+ const mergeConflictParser: MergeConflictParser = useInjectable(MergeConflictParser);
30
+
31
+ const editorModel = useEditorDocumentModelRef(resource.uri);
24
32
 
25
33
  const [isVisiable, setIsVisiable] = useState(false);
34
+ const [conflicts, setConflicts] = useState<DocumentMergeConflict[]>([]);
26
35
 
27
- const gitMergeChangesSet = new Set(['git.mergeChanges']);
36
+ const inMergeChanges = useInMergeChanges(resource.uri.toString());
28
37
 
29
38
  useEffect(() => {
30
- const run = () => {
31
- const mergeChanges = contextKeyService.getValue<Uri[]>('git.mergeChanges') || [];
32
- setIsVisiable(mergeChanges.some((value) => value.toString() === resource.uri.toString()));
33
- };
34
-
35
- const disposed = contextKeyService.onDidChangeContext(({ payload }) => {
36
- if (payload.affectsSome(gitMergeChangesSet)) {
37
- run();
38
- }
39
- });
40
- run();
41
- return () => disposed.dispose();
42
- }, [resource]);
39
+ const disposables = new DisposableStore();
40
+
41
+ if (editorModel) {
42
+ const { instance } = editorModel;
43
+ const run = () => {
44
+ const conflicts = mergeConflictParser.scanDocument(instance.getMonacoModel());
45
+ if (conflicts.length > 0) {
46
+ setIsVisiable(true);
47
+ setConflicts(conflicts);
48
+ } else {
49
+ setIsVisiable(false);
50
+ setConflicts([]);
51
+ }
52
+ };
53
+
54
+ disposables.add(
55
+ editorModel.instance.getMonacoModel().onDidChangeContent(() => {
56
+ run();
57
+ }),
58
+ );
59
+ run();
60
+ return () => {
61
+ disposables.dispose();
62
+ };
63
+ }
64
+ }, [editorModel]);
43
65
 
44
- const [isAiResolving, setIsAiResolving] = useState(false);
66
+ const [isAIResolving, setIsAIResolving] = useState(false);
45
67
  const handleOpenMergeEditor = useCallback(async () => {
46
68
  const { uri } = resource;
47
69
 
@@ -52,31 +74,35 @@ export const MergeEditorFloatComponents: ReactEditorComponent<{ uri: URI }> = ({
52
74
  });
53
75
  }, [resource]);
54
76
 
55
- const isSupportAiResolve = useCallback(
77
+ const isSupportAIResolve = useCallback(
56
78
  () => aiNativeConfigService.capabilities.supportsConflictResolve,
57
79
  [aiNativeConfigService],
58
80
  );
59
81
 
60
- const handlePrev = () => {
61
- commandService.tryExecuteCommand('merge-conflict.previous');
62
- };
82
+ const handlePrev = useCallback(() => {
83
+ commandService.tryExecuteCommand(MergeConflictCommands.Previous).then(() => {
84
+ // TODO: 编辑器向上滚动一行
85
+ });
86
+ }, []);
63
87
 
64
- const handleNext = () => {
65
- commandService.tryExecuteCommand('merge-conflict.next');
66
- };
88
+ const handleNext = useCallback(() => {
89
+ commandService.tryExecuteCommand(MergeConflictCommands.Next).then(() => {
90
+ // TODO: 编辑器向上滚动一行
91
+ });
92
+ }, []);
67
93
 
68
94
  const handleAIResolve = useCallback(async () => {
69
- setIsAiResolving(true);
70
- if (isAiResolving) {
71
- await commandService.executeCommand('merge-conflict.ai.all-accept-stop', resource.uri);
95
+ setIsAIResolving(true);
96
+ if (isAIResolving) {
97
+ await commandService.executeCommand(MERGE_CONFLICT_COMMANDS.AI_ALL_ACCEPT_STOP.id, resource.uri);
72
98
  } else {
73
- await commandService.executeCommand('merge-conflict.ai.all-accept', resource.uri);
99
+ await commandService.executeCommand(MERGE_CONFLICT_COMMANDS.AI_ALL_ACCEPT.id, resource.uri);
74
100
  }
75
- setIsAiResolving(false);
76
- }, [resource, isAiResolving]);
101
+ setIsAIResolving(false);
102
+ }, [resource, isAIResolving]);
77
103
 
78
104
  const handleReset = useCallback(() => {
79
- commandService.executeCommand('merge-conflict.ai.all-reset', resource.uri);
105
+ commandService.executeCommand(MERGE_CONFLICT_COMMANDS.ALL_RESET.id, resource.uri);
80
106
  }, [resource]);
81
107
 
82
108
  if (!isVisiable) {
@@ -85,50 +111,62 @@ export const MergeEditorFloatComponents: ReactEditorComponent<{ uri: URI }> = ({
85
111
 
86
112
  return (
87
113
  <div className={styles.merge_editor_float_container}>
88
- <div id='merge.editor.action.button.accept'>
89
- <Button className={styles.merge_conflict_bottom_btn} size='large' onClick={handlePrev}>
90
- <Icon icon={'left'} />
91
- <span>{localize('mergeEditor.conflict.prev')}</span>
92
- </Button>
93
- <Button className={styles.merge_conflict_bottom_btn} size='large' onClick={handleNext}>
94
- <span>{localize('mergeEditor.conflict.next')}</span>
95
- <Icon icon={'right'} />
96
- </Button>
114
+ <div className={styles.merge_editor_float_container_info}>
115
+ {formatLocalize('merge-conflicts.merge.conflict.remain', conflicts.length)}
97
116
  </div>
98
- <span className={styles.line_vertical}></span>
99
- <Button
100
- id='merge.editor.open.tradition'
101
- className={styles.merge_conflict_bottom_btn}
102
- size='large'
103
- onClick={handleOpenMergeEditor}
104
- >
105
- <Icon icon={'swap'} />
106
- <span>{localize('mergeEditor.open.3way')}</span>
107
- </Button>
108
- <Button id='merge.editor.rest' className={styles.merge_conflict_bottom_btn} size='large' onClick={handleReset}>
109
- <Icon icon={'discard'} />
110
- <span>{localize('mergeEditor.reset')}</span>
111
- </Button>
112
- {isSupportAiResolve() && (
117
+ <div className={styles.merge_editor_float_container_operation_bar}>
118
+ <div id='merge.editor.action.button.nav'>
119
+ <Button className={styles.merge_conflict_bottom_btn} size='default' onClick={handlePrev}>
120
+ <Icon icon={'left'} />
121
+ <span>{localize('mergeEditor.conflict.prev')}</span>
122
+ </Button>
123
+ <Button className={styles.merge_conflict_bottom_btn} size='default' onClick={handleNext}>
124
+ <span>{localize('mergeEditor.conflict.next')}</span>
125
+ <Icon icon={'right'} />
126
+ </Button>
127
+ </div>
128
+ <span className={styles.line_vertical}></span>
129
+ {inMergeChanges && (
130
+ <Button
131
+ id='merge.editor.open.tradition'
132
+ className={styles.merge_conflict_bottom_btn}
133
+ size='default'
134
+ onClick={handleOpenMergeEditor}
135
+ >
136
+ <Icon icon={'swap'} />
137
+ <span>{localize('mergeEditor.open.3way')}</span>
138
+ </Button>
139
+ )}
113
140
  <Button
114
- id='merge.editor.conflict.resolve.all'
115
- size='large'
116
- className={`${styles.merge_conflict_bottom_btn} ${styles.magic_btn}`}
117
- onClick={handleAIResolve}
141
+ id='merge.editor.rest'
142
+ className={styles.merge_conflict_bottom_btn}
143
+ size='default'
144
+ onClick={handleReset}
118
145
  >
119
- {isAiResolving ? (
120
- <>
121
- <Icon icon={'circle-pause'} />
122
- <span>{localize('mergeEditor.conflict.resolve.all.stop')}</span>
123
- </>
124
- ) : (
125
- <>
126
- <Icon icon={'magic-wand'} />
127
- <span>{localize('mergeEditor.conflict.resolve.all')}</span>
128
- </>
129
- )}
146
+ <Icon icon={'discard'} />
147
+ <span>{localize('mergeEditor.reset')}</span>
130
148
  </Button>
131
- )}
149
+ {isSupportAIResolve() && (
150
+ <Button
151
+ id='merge.editor.conflict.resolve.all'
152
+ size='default'
153
+ className={`${styles.merge_conflict_bottom_btn} ${styles.magic_btn}`}
154
+ onClick={handleAIResolve}
155
+ >
156
+ {isAIResolving ? (
157
+ <>
158
+ <Icon icon={'circle-pause'} />
159
+ <span>{localize('mergeEditor.conflict.ai.resolve.all.stop')}</span>
160
+ </>
161
+ ) : (
162
+ <>
163
+ <Icon icon={'magic-wand'} />
164
+ <span>{localize('mergeEditor.conflict.ai.resolve.all')}</span>
165
+ </>
166
+ )}
167
+ </Button>
168
+ )}
169
+ </div>
132
170
  </div>
133
171
  );
134
172
  };
@@ -0,0 +1,71 @@
1
+ .merge_editor_float_container {
2
+ display: flex;
3
+ flex-direction: column;
4
+ background: var(--kt-panelTab-activeBackground);
5
+ box-shadow: inset 1px 1px 3px 0px var(--kt-panelTab-border);
6
+ justify-content: space-between;
7
+ white-space: nowrap;
8
+ // minimap's z-index is 5
9
+ z-index: 6;
10
+ padding: 10px;
11
+
12
+ .merge_editor_float_container_info {
13
+ width: 100%;
14
+ display: flex;
15
+ padding-left: 20px;
16
+ }
17
+
18
+ .merge_editor_float_container_operation_bar {
19
+ width: 100%;
20
+ display: flex;
21
+ justify-content: flex-end;
22
+ white-space: nowrap;
23
+ padding-top: 4px;
24
+ padding-right: 20px;
25
+ }
26
+
27
+ .merge_conflict_bottom_btn {
28
+ border: 1px solid var(--kt-button-disableForeground);
29
+ border-radius: 8px;
30
+ padding: 5px 16px;
31
+ background: var(--editor-background);
32
+ color: var(--editor-foreground);
33
+ margin: 0 4px;
34
+ line-height: 22px;
35
+ justify-content: end;
36
+ white-space: nowrap;
37
+ cursor: pointer;
38
+ :global {
39
+ .kt-icon {
40
+ font-size: 12px;
41
+ }
42
+ }
43
+ :first-child {
44
+ margin-right: 8px;
45
+ }
46
+ }
47
+
48
+ .magic_btn {
49
+ background-image: radial-gradient(circle at -21% -22%, #19cfff, #8429ff);
50
+ border: none;
51
+ font-weight: 500;
52
+ span {
53
+ color: #fff;
54
+ }
55
+ :global {
56
+ .kt-icon {
57
+ color: #fff;
58
+ font-size: 12px;
59
+ margin-right: 8px;
60
+ }
61
+ }
62
+ }
63
+
64
+ .line_vertical {
65
+ background-color: var(--design-borderColor-common);
66
+ width: 1px;
67
+ min-width: 1px;
68
+ height: 24px;
69
+ margin: 4px;
70
+ }
71
+ }
@@ -22,6 +22,9 @@ export class MergeEditorResourceProvider extends WithEventBus implements IResour
22
22
  const resultEditorUri = new URI(output);
23
23
  const icon = this.labelService.getIcon(resultEditorUri);
24
24
  return {
25
+ // 如果设置为 true,再打开时没有找到对应的 provider 会报错
26
+ // TODO: 需要增加一个标记,说明这个资源要在某个插件加载后才能 revive
27
+ supportsRevive: false,
25
28
  name,
26
29
  icon,
27
30
  uri,
@@ -15,7 +15,6 @@ import React, {
15
15
 
16
16
  import { Scrollbars } from '@opensumi/ide-components';
17
17
  import {
18
- AppConfig,
19
18
  ConfigContext,
20
19
  Disposable,
21
20
  DisposableCollection,
@@ -32,6 +31,7 @@ import {
32
31
  useDesignStyles,
33
32
  } from '@opensumi/ide-core-browser';
34
33
  import { InlineMenuBar } from '@opensumi/ide-core-browser/lib/components/actions';
34
+ import { LayoutViewSizeConfig } from '@opensumi/ide-core-browser/lib/layout/constants';
35
35
  import { VIEW_CONTAINERS } from '@opensumi/ide-core-browser/lib/layout/view-id';
36
36
  import { IMenuRegistry, MenuId } from '@opensumi/ide-core-browser/lib/menu/next';
37
37
  import { useInjectable, useUpdateOnEventBusEvent } from '@opensumi/ide-core-browser/lib/react-hooks';
@@ -70,7 +70,7 @@ export const Tabs = ({ group }: ITabsProps) => {
70
70
  const preferenceService = useInjectable<PreferenceService>(PreferenceService);
71
71
  const menuRegistry = useInjectable<IMenuRegistry>(IMenuRegistry);
72
72
  const editorTabService = useInjectable<IEditorTabService>(IEditorTabService);
73
- const appConfig = useInjectable<AppConfig>(AppConfig);
73
+ const layoutViewSize = useInjectable<LayoutViewSizeConfig>(LayoutViewSizeConfig);
74
74
 
75
75
  const styles_tab_right = useDesignStyles(styles.tab_right, 'tab_right');
76
76
  const styles_close_tab = useDesignStyles(styles.close_tab, 'close_tab');
@@ -415,8 +415,8 @@ export const Tabs = ({ group }: ITabsProps) => {
415
415
  })}
416
416
  style={
417
417
  wrapMode && i === group.resources.length - 1
418
- ? { marginRight: lastMarginRight, height: appConfig.layoutViewSize!.editorTabsHeight }
419
- : { height: appConfig.layoutViewSize!.editorTabsHeight }
418
+ ? { marginRight: lastMarginRight, height: layoutViewSize.editorTabsHeight }
419
+ : { height: layoutViewSize.editorTabsHeight }
420
420
  }
421
421
  onContextMenu={(event) => {
422
422
  tabTitleMenuService.show(event.nativeEvent.x, event.nativeEvent.y, resource && resource.uri, group);
@@ -529,7 +529,8 @@ export const EditorActions = forwardRef<HTMLDivElement, IEditorActionsProps>(
529
529
 
530
530
  const editorActionRegistry = useInjectable<IEditorActionRegistry>(IEditorActionRegistry);
531
531
  const editorService: WorkbenchEditorServiceImpl = useInjectable(WorkbenchEditorService);
532
- const appConfig = useInjectable<AppConfig>(AppConfig);
532
+ const layoutViewSize = useInjectable<LayoutViewSizeConfig>(LayoutViewSizeConfig);
533
+
533
534
  const menu = editorActionRegistry.getMenu(group);
534
535
  const [hasFocus, setHasFocus] = useState<boolean>(editorService.currentEditorGroup === group);
535
536
  const [args, setArgs] = useState<[URI, IEditorGroup, MaybeNull<URI>] | undefined>(acquireArgs());
@@ -561,7 +562,7 @@ export const EditorActions = forwardRef<HTMLDivElement, IEditorActionsProps>(
561
562
  <div
562
563
  ref={ref}
563
564
  className={cls(styles_editor_actions, className)}
564
- style={{ height: appConfig.layoutViewSize!.editorTabsHeight }}
565
+ style={{ height: layoutViewSize.editorTabsHeight }}
565
566
  >
566
567
  <InlineMenuBar<URI, IEditorGroup, MaybeNull<URI>>
567
568
  menus={menu}
@@ -275,6 +275,14 @@ export interface IThemedCssStyle extends IDisposable {
275
275
  overviewRulerColor?: string | IThemeColor;
276
276
  }
277
277
 
278
+ export interface IThemedCssStyleCollection {
279
+ default: IThemedCssStyle;
280
+ light: IThemedCssStyle | null;
281
+ dark: IThemedCssStyle | null;
282
+
283
+ dispose(): void;
284
+ }
285
+
278
286
  export const IEditorDecorationCollectionService = Symbol('IEditorDecorationCollectionService');
279
287
 
280
288
  export class EditorSelectionChangeEvent extends BasicEvent<IEditorSelectionChangeEventPayload> {}
@@ -2061,7 +2061,7 @@ export class EditorGroup extends WithEventBus implements IGridEditorGroup {
2061
2061
  }
2062
2062
 
2063
2063
  /**
2064
- * 当前打开的resource
2064
+ * current opened resource
2065
2065
  */
2066
2066
  get currentResource(): MaybeNull<IResource> {
2067
2067
  return this._currentResource;
@@ -149,7 +149,7 @@ export enum EditorType {
149
149
  }
150
150
 
151
151
  /**
152
- * 一个IEditor代表了一个最小的编辑器单元,可以是CodeEditor中的一个,也可以是DiffEditor中的两个
152
+ * 一个IEditor代表了一个最小的编辑器单元,可以是 CodeEditor 中的一个,也可以是 DiffEditor 中的两个
153
153
  */
154
154
  export interface IEditor {
155
155
  /**
@@ -567,6 +567,8 @@ export interface IResourceOpenOptions {
567
567
 
568
568
  /**
569
569
  * @deprecated use focus instead
570
+ *
571
+ * An optional flag that when `true` will stop the editor from taking focus.
570
572
  */
571
573
  preserveFocus?: boolean;
572
574