@opensumi/ide-editor 2.21.13 → 2.22.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 (238) hide show
  1. package/lib/browser/breadcrumb/default.js.map +1 -1
  2. package/lib/browser/breadcrumb/document-symbol.js.map +1 -1
  3. package/lib/browser/breadcrumb/index.js.map +1 -1
  4. package/lib/browser/component.js.map +1 -1
  5. package/lib/browser/decoration-applier.js.map +1 -1
  6. package/lib/browser/diff/compare.js.map +1 -1
  7. package/lib/browser/diff/index.d.ts.map +1 -1
  8. package/lib/browser/diff/index.js +1 -1
  9. package/lib/browser/diff/index.js.map +1 -1
  10. package/lib/browser/doc-cache/empty-doc-cache.js.map +1 -1
  11. package/lib/browser/doc-cache/local-storage-cache.js.map +1 -1
  12. package/lib/browser/doc-model/editor-document-model-service.js +3 -3
  13. package/lib/browser/doc-model/editor-document-model-service.js.map +1 -1
  14. package/lib/browser/doc-model/editor-document-model.d.ts +8 -0
  15. package/lib/browser/doc-model/editor-document-model.d.ts.map +1 -1
  16. package/lib/browser/doc-model/editor-document-model.js +61 -11
  17. package/lib/browser/doc-model/editor-document-model.js.map +1 -1
  18. package/lib/browser/doc-model/editor-document-registry.js.map +1 -1
  19. package/lib/browser/doc-model/override.js.map +1 -1
  20. package/lib/browser/doc-model/save-task.js +1 -1
  21. package/lib/browser/doc-model/save-task.js.map +1 -1
  22. package/lib/browser/doc-model/saveParticipants.d.ts +7 -7
  23. package/lib/browser/doc-model/saveParticipants.d.ts.map +1 -1
  24. package/lib/browser/doc-model/saveParticipants.js +69 -38
  25. package/lib/browser/doc-model/saveParticipants.js.map +1 -1
  26. package/lib/browser/doc-model/types.d.ts +1 -1
  27. package/lib/browser/doc-model/types.d.ts.map +1 -1
  28. package/lib/browser/editor-collection.service.d.ts +8 -3
  29. package/lib/browser/editor-collection.service.d.ts.map +1 -1
  30. package/lib/browser/editor-collection.service.js +75 -66
  31. package/lib/browser/editor-collection.service.js.map +1 -1
  32. package/lib/browser/editor-opener.js.map +1 -1
  33. package/lib/browser/editor.contribution.d.ts.map +1 -1
  34. package/lib/browser/editor.contribution.js +31 -3
  35. package/lib/browser/editor.contribution.js.map +1 -1
  36. package/lib/browser/editor.decoration.service.d.ts +5 -6
  37. package/lib/browser/editor.decoration.service.d.ts.map +1 -1
  38. package/lib/browser/editor.decoration.service.js +9 -1
  39. package/lib/browser/editor.decoration.service.js.map +1 -1
  40. package/lib/browser/editor.override.js +2 -2
  41. package/lib/browser/editor.override.js.map +1 -1
  42. package/lib/browser/editor.status-bar.service.js.map +1 -1
  43. package/lib/browser/editor.view.d.ts.map +1 -1
  44. package/lib/browser/editor.view.js +20 -23
  45. package/lib/browser/editor.view.js.map +1 -1
  46. package/lib/browser/error.d.ts +1 -1
  47. package/lib/browser/error.d.ts.map +1 -1
  48. package/lib/browser/feature.js.map +1 -1
  49. package/lib/browser/format/format.service.js.map +1 -1
  50. package/lib/browser/format/formatterSelect.js.map +1 -1
  51. package/lib/browser/fs-resource/file-tree-set.js +6 -6
  52. package/lib/browser/fs-resource/file-tree-set.js.map +1 -1
  53. package/lib/browser/fs-resource/fs-editor-doc.js +1 -1
  54. package/lib/browser/fs-resource/fs-editor-doc.js.map +1 -1
  55. package/lib/browser/fs-resource/fs-resource.js.map +1 -1
  56. package/lib/browser/fs-resource/index.js.map +1 -1
  57. package/lib/browser/history/index.d.ts.map +1 -1
  58. package/lib/browser/history/index.js +2 -1
  59. package/lib/browser/history/index.js.map +1 -1
  60. package/lib/browser/index.d.ts.map +1 -1
  61. package/lib/browser/index.js +2 -0
  62. package/lib/browser/index.js.map +1 -1
  63. package/lib/browser/language/diagnostic-collection.d.ts +5 -5
  64. package/lib/browser/language/diagnostic-collection.d.ts.map +1 -1
  65. package/lib/browser/language/diagnostic-collection.js +1 -1
  66. package/lib/browser/language/diagnostic-collection.js.map +1 -1
  67. package/lib/browser/language/language-status.contribution.js.map +1 -1
  68. package/lib/browser/language/language-status.service.js.map +1 -1
  69. package/lib/browser/language/language.service.d.ts +4 -3
  70. package/lib/browser/language/language.service.d.ts.map +1 -1
  71. package/lib/browser/language/language.service.js +8 -2
  72. package/lib/browser/language/language.service.js.map +1 -1
  73. package/lib/browser/menu/editor.context.js +3 -3
  74. package/lib/browser/menu/editor.context.js.map +1 -1
  75. package/lib/browser/menu/editor.menu.d.ts +2 -2
  76. package/lib/browser/menu/editor.menu.d.ts.map +1 -1
  77. package/lib/browser/menu/editor.menu.js +6 -8
  78. package/lib/browser/menu/editor.menu.js.map +1 -1
  79. package/lib/browser/menu/open-type-menu.contribution.js +9 -9
  80. package/lib/browser/menu/open-type-menu.contribution.js.map +1 -1
  81. package/lib/browser/menu/title-context.menu.js.map +1 -1
  82. package/lib/browser/merge-editor/merge-editor.contribution.d.ts +8 -0
  83. package/lib/browser/merge-editor/merge-editor.contribution.d.ts.map +1 -0
  84. package/lib/browser/merge-editor/merge-editor.contribution.js +29 -0
  85. package/lib/browser/merge-editor/merge-editor.contribution.js.map +1 -0
  86. package/lib/browser/merge-editor/merge-editor.provider.d.ts +8 -0
  87. package/lib/browser/merge-editor/merge-editor.provider.d.ts.map +1 -0
  88. package/lib/browser/merge-editor/merge-editor.provider.js +44 -0
  89. package/lib/browser/merge-editor/merge-editor.provider.js.map +1 -0
  90. package/lib/browser/monaco-contrib/callHierarchy/callHierarchy.contribution.js.map +1 -1
  91. package/lib/browser/monaco-contrib/callHierarchy/callHierarchy.service.js +7 -7
  92. package/lib/browser/monaco-contrib/callHierarchy/callHierarchy.service.js.map +1 -1
  93. package/lib/browser/monaco-contrib/command/command.service.d.ts +1 -1
  94. package/lib/browser/monaco-contrib/command/command.service.d.ts.map +1 -1
  95. package/lib/browser/monaco-contrib/command/command.service.js.map +1 -1
  96. package/lib/browser/monaco-contrib/tokenizer/textmate-registry.js.map +1 -1
  97. package/lib/browser/monaco-contrib/tokenizer/textmate.service.d.ts +2 -1
  98. package/lib/browser/monaco-contrib/tokenizer/textmate.service.d.ts.map +1 -1
  99. package/lib/browser/monaco-contrib/tokenizer/textmate.service.js +5 -2
  100. package/lib/browser/monaco-contrib/tokenizer/textmate.service.js.map +1 -1
  101. package/lib/browser/monaco-contrib/typeHierarchy/typeHierarchy.contribution.js.map +1 -1
  102. package/lib/browser/monaco-contrib/typeHierarchy/typeHierarchy.service.js +7 -7
  103. package/lib/browser/monaco-contrib/typeHierarchy/typeHierarchy.service.js.map +1 -1
  104. package/lib/browser/navigation.module.less +1 -1
  105. package/lib/browser/navigation.view.d.ts.map +1 -1
  106. package/lib/browser/navigation.view.js +26 -15
  107. package/lib/browser/navigation.view.js.map +1 -1
  108. package/lib/browser/preference/contribution.js.map +1 -1
  109. package/lib/browser/preference/converter.d.ts +3 -3
  110. package/lib/browser/preference/converter.d.ts.map +1 -1
  111. package/lib/browser/preference/schema.d.ts +1 -1
  112. package/lib/browser/preference/schema.d.ts.map +1 -1
  113. package/lib/browser/preference/schema.js +8 -8
  114. package/lib/browser/preference/schema.js.map +1 -1
  115. package/lib/browser/quick-open/go-to-line.js.map +1 -1
  116. package/lib/browser/quick-open/workspace-symbol-quickopen.d.ts.map +1 -1
  117. package/lib/browser/quick-open/workspace-symbol-quickopen.js +2 -2
  118. package/lib/browser/quick-open/workspace-symbol-quickopen.js.map +1 -1
  119. package/lib/browser/resource.service.js.map +1 -1
  120. package/lib/browser/tab.view.d.ts +1 -1
  121. package/lib/browser/tab.view.d.ts.map +1 -1
  122. package/lib/browser/tab.view.js +2 -2
  123. package/lib/browser/tab.view.js.map +1 -1
  124. package/lib/browser/types.d.ts +5 -5
  125. package/lib/browser/types.d.ts.map +1 -1
  126. package/lib/browser/untitled-resource.js +1 -1
  127. package/lib/browser/untitled-resource.js.map +1 -1
  128. package/lib/browser/view/suggest-widget.js.map +1 -1
  129. package/lib/browser/workbench-editor.service.d.ts +17 -0
  130. package/lib/browser/workbench-editor.service.d.ts.map +1 -1
  131. package/lib/browser/workbench-editor.service.js +259 -176
  132. package/lib/browser/workbench-editor.service.js.map +1 -1
  133. package/lib/common/doc-cache.d.ts +2 -2
  134. package/lib/common/doc-cache.d.ts.map +1 -1
  135. package/lib/common/editor.d.ts +20 -6
  136. package/lib/common/editor.d.ts.map +1 -1
  137. package/lib/common/editor.js +12 -1
  138. package/lib/common/editor.js.map +1 -1
  139. package/lib/common/language.d.ts +18 -7
  140. package/lib/common/language.d.ts.map +1 -1
  141. package/lib/common/language.js +15 -7
  142. package/lib/common/language.js.map +1 -1
  143. package/lib/common/mocks/workbench-editor.service.js.map +1 -1
  144. package/lib/common/resource.d.ts +8 -2
  145. package/lib/common/resource.d.ts.map +1 -1
  146. package/lib/common/resource.js +1 -0
  147. package/lib/common/resource.js.map +1 -1
  148. package/package.json +17 -16
  149. package/src/browser/breadcrumb/default.ts +299 -0
  150. package/src/browser/breadcrumb/document-symbol.ts +187 -0
  151. package/src/browser/breadcrumb/index.ts +96 -0
  152. package/src/browser/component.ts +204 -0
  153. package/src/browser/decoration-applier.ts +256 -0
  154. package/src/browser/diff/compare.ts +99 -0
  155. package/src/browser/diff/index.ts +81 -0
  156. package/src/browser/doc-cache/empty-doc-cache.ts +26 -0
  157. package/src/browser/doc-cache/index.ts +2 -0
  158. package/src/browser/doc-cache/local-storage-cache.ts +67 -0
  159. package/src/browser/doc-model/editor-document-error.ts +10 -0
  160. package/src/browser/doc-model/editor-document-model-service.ts +346 -0
  161. package/src/browser/doc-model/editor-document-model.ts +690 -0
  162. package/src/browser/doc-model/editor-document-registry.ts +119 -0
  163. package/src/browser/doc-model/editor-is-fn.ts +9 -0
  164. package/src/browser/doc-model/main.ts +4 -0
  165. package/src/browser/doc-model/override.ts +49 -0
  166. package/src/browser/doc-model/save-task.ts +88 -0
  167. package/src/browser/doc-model/saveParticipants.ts +227 -0
  168. package/src/browser/doc-model/types.ts +350 -0
  169. package/src/browser/editor-collection.service.ts +790 -0
  170. package/src/browser/editor-opener.ts +44 -0
  171. package/src/browser/editor.contribution.ts +1438 -0
  172. package/src/browser/editor.decoration.service.ts +247 -0
  173. package/src/browser/editor.less +4 -0
  174. package/src/browser/editor.module.less +548 -0
  175. package/src/browser/editor.override.ts +133 -0
  176. package/src/browser/editor.status-bar.service.ts +116 -0
  177. package/src/browser/editor.view.tsx +623 -0
  178. package/src/browser/error.ts +21 -0
  179. package/src/browser/feature.ts +63 -0
  180. package/src/browser/format/format.service.ts +95 -0
  181. package/src/browser/format/formatterSelect.ts +82 -0
  182. package/src/browser/fs-resource/file-tree-set.ts +126 -0
  183. package/src/browser/fs-resource/fs-editor-doc.ts +213 -0
  184. package/src/browser/fs-resource/fs-resource.ts +247 -0
  185. package/src/browser/fs-resource/index.ts +27 -0
  186. package/src/browser/grid/grid.service.ts +288 -0
  187. package/src/browser/history/index.ts +228 -0
  188. package/src/browser/index.ts +236 -0
  189. package/src/browser/language/diagnostic-collection.ts +83 -0
  190. package/src/browser/language/language-status.contribution.ts +81 -0
  191. package/src/browser/language/language-status.service.ts +32 -0
  192. package/src/browser/language/language.service.ts +185 -0
  193. package/src/browser/menu/editor.context.ts +186 -0
  194. package/src/browser/menu/editor.menu.ts +45 -0
  195. package/src/browser/menu/open-type-menu.contribution.ts +90 -0
  196. package/src/browser/menu/title-context.menu.ts +54 -0
  197. package/src/browser/merge-editor/merge-editor.contribution.ts +25 -0
  198. package/src/browser/merge-editor/merge-editor.provider.ts +36 -0
  199. package/src/browser/monaco-contrib/callHierarchy/callHierarchy.contribution.ts +78 -0
  200. package/src/browser/monaco-contrib/callHierarchy/callHierarchy.service.ts +160 -0
  201. package/src/browser/monaco-contrib/command/command.service.ts +438 -0
  202. package/src/browser/monaco-contrib/index.ts +4 -0
  203. package/src/browser/monaco-contrib/tokenizer/textmate-registry.ts +107 -0
  204. package/src/browser/monaco-contrib/tokenizer/textmate-tokenizer.ts +104 -0
  205. package/src/browser/monaco-contrib/tokenizer/textmate.service.ts +925 -0
  206. package/src/browser/monaco-contrib/typeHierarchy/typeHierarchy.contribution.ts +78 -0
  207. package/src/browser/monaco-contrib/typeHierarchy/typeHierarchy.service.ts +154 -0
  208. package/src/browser/navigation.module.less +96 -0
  209. package/src/browser/navigation.view.tsx +254 -0
  210. package/src/browser/preference/contribution.ts +8 -0
  211. package/src/browser/preference/converter.ts +793 -0
  212. package/src/browser/preference/schema.ts +1896 -0
  213. package/src/browser/preference/util.ts +14 -0
  214. package/src/browser/quick-open/go-to-line.ts +164 -0
  215. package/src/browser/quick-open/workspace-symbol-quickopen.ts +276 -0
  216. package/src/browser/resource.service.ts +263 -0
  217. package/src/browser/tab.view.tsx +514 -0
  218. package/src/browser/types.ts +467 -0
  219. package/src/browser/untitled-resource.ts +223 -0
  220. package/src/browser/view/editor.react.tsx +82 -0
  221. package/src/browser/view/react-hook.tsx +7 -0
  222. package/src/browser/view/suggest-widget.ts +77 -0
  223. package/src/browser/view/topPadding.ts +18 -0
  224. package/src/browser/workbench-editor.service.ts +2291 -0
  225. package/src/common/doc-cache.ts +117 -0
  226. package/src/common/editor.ts +799 -0
  227. package/src/common/index.ts +6 -0
  228. package/src/common/language-status.ts +33 -0
  229. package/src/common/language.ts +206 -0
  230. package/src/common/mocks/workbench-editor.service.ts +52 -0
  231. package/src/common/resource.ts +147 -0
  232. package/src/common/utils.ts +10 -0
  233. package/src/index.ts +1 -0
  234. package/lib/browser/component/scroll/scroll.d.ts +0 -2
  235. package/lib/browser/component/scroll/scroll.d.ts.map +0 -1
  236. package/lib/browser/component/scroll/scroll.js +0 -5
  237. package/lib/browser/component/scroll/scroll.js.map +0 -1
  238. package/lib/browser/component/scroll/scroll.module.less +0 -86
@@ -0,0 +1,247 @@
1
+ import { Autowired, Injectable } from '@opensumi/di';
2
+ import { URI, IDisposable, Disposable, IEventBus } from '@opensumi/ide-core-browser';
3
+ import { IIconService, IThemeService } from '@opensumi/ide-theme';
4
+ import { ICSSStyleService } from '@opensumi/ide-theme/lib/common/style';
5
+ import * as monaco from '@opensumi/monaco-editor-core/esm/vs/editor/editor.api';
6
+
7
+ import { IThemeDecorationRenderOptions, IDecorationRenderOptions, IContentDecorationRenderOptions } from '../common';
8
+
9
+ import {
10
+ IEditorDecorationCollectionService,
11
+ IBrowserTextEditorDecorationType,
12
+ IDynamicModelDecorationProperty,
13
+ IThemedCssStyle,
14
+ IEditorDecorationProvider,
15
+ EditorDecorationProviderRegistrationEvent,
16
+ EditorDecorationChangeEvent,
17
+ EditorDecorationTypeRemovedEvent,
18
+ } from './types';
19
+
20
+ @Injectable()
21
+ export class EditorDecorationCollectionService implements IEditorDecorationCollectionService {
22
+ decorations: Map<string, IBrowserTextEditorDecorationType> = new Map();
23
+
24
+ @Autowired(ICSSStyleService)
25
+ private readonly cssManager: ICSSStyleService;
26
+
27
+ @Autowired(IThemeService)
28
+ private readonly themeService: IThemeService;
29
+
30
+ @Autowired(IIconService)
31
+ private readonly iconService: IIconService;
32
+
33
+ @Autowired(IEventBus)
34
+ private readonly eventBus: IEventBus;
35
+
36
+ private tempId = 0;
37
+
38
+ constructor() {}
39
+
40
+ getNextTempId() {
41
+ this.tempId++;
42
+ return 'temp-decoration-' + this.tempId;
43
+ }
44
+
45
+ decorationProviders: Map<string, IEditorDecorationProvider> = new Map();
46
+
47
+ createTextEditorDecorationType(options: IDecorationRenderOptions, key?: string): IBrowserTextEditorDecorationType {
48
+ if (!key) {
49
+ key = this.getNextTempId();
50
+ }
51
+ const property = this.resolveDecoration(key, options);
52
+ const type = {
53
+ key,
54
+ property,
55
+ dispose: () => {
56
+ if (key && this.decorations.has(key)) {
57
+ property.dispose();
58
+ this.decorations.delete(key!);
59
+ this.eventBus.fire(new EditorDecorationTypeRemovedEvent(key!));
60
+ }
61
+ },
62
+ };
63
+ this.decorations.set(key, type);
64
+ return type;
65
+ }
66
+
67
+ getTextEditorDecorationType(key) {
68
+ return this.decorations.get(key);
69
+ }
70
+
71
+ private resolveDecoration(key: string, options: IDecorationRenderOptions): IDynamicModelDecorationProperty {
72
+ const dec = {
73
+ default: this.addedThemeDecorationToCSSStyleSheet(key, options),
74
+ light: options.light ? this.addedThemeDecorationToCSSStyleSheet(key + '-light', options.light) : null,
75
+ dark: options.dark ? this.addedThemeDecorationToCSSStyleSheet(key + '-dark', options.dark) : null,
76
+ isWholeLine: options.isWholeLine || false,
77
+ overviewRulerLane: options.overviewRulerLane,
78
+ dispose: () => {
79
+ dec.default.dispose();
80
+ if (dec.light) {
81
+ dec.light.dispose();
82
+ }
83
+ if (dec.dark) {
84
+ dec.dark.dispose();
85
+ }
86
+ },
87
+ };
88
+
89
+ return dec;
90
+ }
91
+
92
+ private addedThemeDecorationToCSSStyleSheet(key, options: IThemeDecorationRenderOptions): IThemedCssStyle {
93
+ const className = key;
94
+ const inlineClassName = key + '-inline';
95
+ const disposer = new Disposable();
96
+ let afterContentClassName;
97
+ let beforeContentClassName;
98
+ let glyphMarginClassName;
99
+ const styles = this.resolveCSSStyle(options);
100
+
101
+ const inlineStyles = this.resolveInlineCSSStyle(options);
102
+ disposer.addDispose(this.cssManager.addClass(className, styles));
103
+ disposer.addDispose(this.cssManager.addClass(inlineClassName, inlineStyles));
104
+ if (options.after) {
105
+ const styles = this.resolveContentCSSStyle(options.after);
106
+ disposer.addDispose(this.cssManager.addClass(key + '-after::after', styles));
107
+ afterContentClassName = key + '-after';
108
+ // 最新版chrome 中 document.caretRangeFromRange 的行为有所改变
109
+ // 如果目标位置命中的是两个inline元素之间, 它会认为是前一个元素的内容。
110
+ // 在之前这个结果是属于公共父级
111
+ // 这个改变会使得monaco中hitTest返回错误的结果,导致点击decoration的空白区域时会错误选中文本
112
+ // 临时修复:
113
+ // 此处将before和after的父级span display强制设置为inline-block, 可以避免这个问题, 是否会带来其他风险未知
114
+ disposer.addDispose(this.cssManager.addClass(afterContentClassName, { display: 'inline-block' } as any));
115
+ }
116
+ if (options.before) {
117
+ const styles = this.resolveContentCSSStyle(options.before);
118
+ disposer.addDispose(this.cssManager.addClass(key + '-before::before', styles));
119
+ beforeContentClassName = key + '-before';
120
+ disposer.addDispose(this.cssManager.addClass(beforeContentClassName, { display: 'inline-block' } as any));
121
+ }
122
+ if (options.gutterIconPath) {
123
+ const glyphMarginStyle = this.resolveCSSStyle({
124
+ backgroundIconSize: options.gutterIconSize,
125
+ backgroundIcon: options.gutterIconPath.toString(),
126
+ });
127
+ glyphMarginClassName = key + '-glyphMargin';
128
+ disposer.addDispose(this.cssManager.addClass(glyphMarginClassName, glyphMarginStyle));
129
+ }
130
+
131
+ return {
132
+ className,
133
+ inlineClassName,
134
+ afterContentClassName,
135
+ beforeContentClassName,
136
+ glyphMarginClassName,
137
+ overviewRulerColor: options.overviewRulerColor,
138
+ dispose() {
139
+ return disposer.dispose();
140
+ },
141
+ };
142
+ }
143
+
144
+ private resolveCSSStyle(styles: IThemeDecorationRenderOptions): CSSStyleDeclaration {
145
+ const iconPath = styles.backgroundIcon?.startsWith('data:')
146
+ ? this.iconService.encodeBase64Path(decodeURIComponent(styles.backgroundIcon))
147
+ : styles.backgroundIcon;
148
+ return {
149
+ backgroundColor: this.themeService.getColorVar(styles.backgroundColor),
150
+ background: styles.backgroundIcon ? `url("${iconPath}") center center no-repeat` : undefined,
151
+ backgroundSize: styles.backgroundIconSize ? `${styles.backgroundIconSize}` : undefined,
152
+
153
+ outline: styles.outline,
154
+ outlineColor: styles.outlineColor,
155
+ outlineStyle: styles.outlineStyle,
156
+ outlineWidth: styles.outlineWidth,
157
+
158
+ border: styles.border,
159
+ borderColor: this.themeService.getColorVar(styles.borderColor),
160
+ borderRadius: styles.borderRadius,
161
+ borderSpacing: styles.borderSpacing,
162
+ borderStyle: styles.borderStyle,
163
+ borderWidth: styles.borderWidth,
164
+ } as CSSStyleDeclaration;
165
+ }
166
+
167
+ private resolveInlineCSSStyle(styles: IThemeDecorationRenderOptions): CSSStyleDeclaration {
168
+ return {
169
+ fontStyle: styles.fontStyle,
170
+ fontWeight: styles.fontWeight,
171
+ textDecoration: styles.textDecoration,
172
+ textUnderlinePosition: styles.textUnderlinePosition,
173
+ cursor: styles.cursor,
174
+ color: this.themeService.getColorVar(styles.color),
175
+ opacity: styles.opacity,
176
+ letterSpacing: styles.letterSpacing,
177
+ } as CSSStyleDeclaration;
178
+ }
179
+
180
+ private resolveContentCSSStyle(styles: IContentDecorationRenderOptions): CSSStyleDeclaration {
181
+ let content: string | undefined;
182
+ if (styles.contentText) {
183
+ content = `"${styles.contentText}"`;
184
+ } else if (styles.contentIconPath) {
185
+ content = `url('${URI.from(styles.contentIconPath).toString(true).replace(/'/g, '%27')}')`;
186
+ }
187
+ return {
188
+ display: 'block',
189
+ content,
190
+ border: styles.border,
191
+ borderColor: this.themeService.getColorVar(styles.borderColor),
192
+ fontStyle: styles.fontStyle,
193
+ fontWeight: styles.fontWeight,
194
+ textDecoration: styles.textDecoration,
195
+ color: this.themeService.getColorVar(styles.color),
196
+ backgroundColor: this.themeService.getColorVar(styles.backgroundColor),
197
+
198
+ margin: styles.margin,
199
+ width: styles.width,
200
+ height: styles.height,
201
+ } as CSSStyleDeclaration;
202
+ }
203
+
204
+ registerDecorationProvider(provider: IEditorDecorationProvider): IDisposable {
205
+ this.decorationProviders.set(provider.key, provider);
206
+ this.eventBus.fire(new EditorDecorationProviderRegistrationEvent(provider));
207
+ const disposer = provider.onDidDecorationChange((uri) => {
208
+ this.eventBus.fire(new EditorDecorationChangeEvent({ uri, key: provider.key }));
209
+ });
210
+ return {
211
+ dispose: () => {
212
+ if (this.decorationProviders.get(provider.key) === provider) {
213
+ this.decorationProviders.delete(provider.key);
214
+ this.eventBus.fire(new EditorDecorationTypeRemovedEvent(provider.key));
215
+ }
216
+ disposer.dispose();
217
+ },
218
+ };
219
+ }
220
+
221
+ async getDecorationFromProvider(
222
+ uri: URI,
223
+ key?: string,
224
+ ): Promise<{ [key: string]: monaco.editor.IModelDeltaDecoration[] }> {
225
+ const result = {};
226
+ let decorationProviders: IEditorDecorationProvider[] = [];
227
+ if (!key) {
228
+ decorationProviders = Array.from(this.decorationProviders.values());
229
+ } else {
230
+ if (this.decorationProviders.has(key)) {
231
+ decorationProviders.push(this.decorationProviders.get(key)!);
232
+ }
233
+ }
234
+ await Promise.all(
235
+ decorationProviders.map(async (provider) => {
236
+ if (provider.schemes && provider.schemes.indexOf(uri.scheme) === -1) {
237
+ return;
238
+ }
239
+ const decoration = await provider.provideEditorDecoration(uri);
240
+ if (decoration) {
241
+ result[provider.key] = decoration;
242
+ }
243
+ }),
244
+ );
245
+ return result;
246
+ }
247
+ }
@@ -0,0 +1,4 @@
1
+ .background-tab-icon {
2
+ width: 16px;
3
+ height: 16px;
4
+ }