@codingame/monaco-vscode-update-service-override 30.0.1 → 31.0.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 (23) hide show
  1. package/package.json +2 -2
  2. package/vscode/src/vs/platform/update/common/update.config.contribution.js +23 -46
  3. package/vscode/src/vs/workbench/contrib/markdown/browser/markdownSettingRenderer.js +14 -14
  4. package/vscode/src/vs/workbench/contrib/update/browser/media/postUpdateWidget.css +68 -0
  5. package/vscode/src/vs/workbench/contrib/update/browser/media/updateTitleBarEntry.css +2 -20
  6. package/vscode/src/vs/workbench/contrib/update/browser/media/updateTooltip.css +32 -26
  7. package/vscode/src/vs/workbench/contrib/update/browser/postUpdateWidget.d.ts +35 -0
  8. package/vscode/src/vs/workbench/contrib/update/browser/postUpdateWidget.js +219 -0
  9. package/vscode/src/vs/workbench/contrib/update/browser/releaseNotesEditor.d.ts +1 -7
  10. package/vscode/src/vs/workbench/contrib/update/browser/releaseNotesEditor.js +5 -177
  11. package/vscode/src/vs/workbench/contrib/update/browser/update.contribution.js +44 -17
  12. package/vscode/src/vs/workbench/contrib/update/browser/update.d.ts +1 -17
  13. package/vscode/src/vs/workbench/contrib/update/browser/update.js +40 -279
  14. package/vscode/src/vs/workbench/contrib/update/browser/updateTitleBarEntry.d.ts +5 -7
  15. package/vscode/src/vs/workbench/contrib/update/browser/updateTitleBarEntry.js +83 -78
  16. package/vscode/src/vs/workbench/contrib/update/browser/updateTooltip.d.ts +6 -12
  17. package/vscode/src/vs/workbench/contrib/update/browser/updateTooltip.js +83 -125
  18. package/vscode/src/vs/workbench/contrib/update/common/updateInfoParser.d.ts +42 -0
  19. package/vscode/src/vs/workbench/contrib/update/common/updateInfoParser.js +74 -0
  20. package/vscode/src/vs/workbench/contrib/update/common/updateUtils.js +9 -21
  21. package/vscode/src/vs/workbench/contrib/update/browser/media/updateStatusBarEntry.css +0 -9
  22. package/vscode/src/vs/workbench/contrib/update/browser/updateStatusBarEntry.d.ts +0 -22
  23. package/vscode/src/vs/workbench/contrib/update/browser/updateStatusBarEntry.js +0 -140
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codingame/monaco-vscode-update-service-override",
3
- "version": "30.0.1",
3
+ "version": "31.0.0",
4
4
  "private": false,
5
5
  "description": "VSCode public API plugged on the monaco editor - update service-override",
6
6
  "keywords": [],
@@ -15,7 +15,7 @@
15
15
  },
16
16
  "type": "module",
17
17
  "dependencies": {
18
- "@codingame/monaco-vscode-api": "30.0.1"
18
+ "@codingame/monaco-vscode-api": "31.0.0"
19
19
  },
20
20
  "main": "index.js",
21
21
  "module": "index.js",
@@ -3,14 +3,13 @@ import { isWindows, isWeb } from '@codingame/monaco-vscode-api/vscode/vs/base/co
3
3
  import { PolicyCategory } from '@codingame/monaco-vscode-api/vscode/vs/base/common/policy';
4
4
  import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
5
5
  import { Extensions, ConfigurationScope } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configurationRegistry';
6
- import product from '@codingame/monaco-vscode-api/vscode/vs/platform/product/common/product';
7
6
  import { Registry } from '@codingame/monaco-vscode-api/vscode/vs/platform/registry/common/platform';
8
7
 
9
8
  const configurationRegistry = ( Registry.as(Extensions.Configuration));
10
9
  configurationRegistry.registerConfiguration({
11
10
  id: "update",
12
11
  order: 15,
13
- title: ( localize(2490, "Update")),
12
+ title: ( localize(2493, "Update")),
14
13
  type: "object",
15
14
  properties: {
16
15
  "update.mode": {
@@ -19,18 +18,18 @@ configurationRegistry.registerConfiguration({
19
18
  default: "default",
20
19
  scope: ConfigurationScope.APPLICATION,
21
20
  description: ( localize(
22
- 2491,
21
+ 2494,
23
22
  "Configure whether you receive automatic updates. Requires a restart after change. The updates are fetched from a Microsoft online service."
24
23
  )),
25
24
  tags: ["usesOnlineServices"],
26
- enumDescriptions: [( localize(2492, "Disable updates.")), ( localize(
27
- 2493,
25
+ enumDescriptions: [( localize(2495, "Disable updates.")), ( localize(
26
+ 2496,
28
27
  "Disable automatic background update checks. Updates will be available if you manually check for updates."
29
28
  )), ( localize(
30
- 2494,
29
+ 2497,
31
30
  "Check for updates only on startup. Disable automatic background update checks."
32
31
  )), ( localize(
33
- 2495,
32
+ 2498,
34
33
  "Enable automatic update checks. Code will check for updates automatically and periodically."
35
34
  ))],
36
35
  policy: {
@@ -41,29 +40,29 @@ configurationRegistry.registerConfiguration({
41
40
  description: {
42
41
  key: "updateMode",
43
42
  value: ( localize(
44
- 2491,
43
+ 2494,
45
44
  "Configure whether you receive automatic updates. Requires a restart after change. The updates are fetched from a Microsoft online service."
46
45
  ))
47
46
  },
48
47
  enumDescriptions: [{
49
48
  key: "none",
50
- value: ( localize(2492, "Disable updates."))
49
+ value: ( localize(2495, "Disable updates."))
51
50
  }, {
52
51
  key: "manual",
53
52
  value: ( localize(
54
- 2493,
53
+ 2496,
55
54
  "Disable automatic background update checks. Updates will be available if you manually check for updates."
56
55
  ))
57
56
  }, {
58
57
  key: "start",
59
58
  value: ( localize(
60
- 2494,
59
+ 2497,
61
60
  "Check for updates only on startup. Disable automatic background update checks."
62
61
  ))
63
62
  }, {
64
63
  key: "default",
65
64
  value: ( localize(
66
- 2495,
65
+ 2498,
67
66
  "Enable automatic update checks. Code will check for updates automatically and periodically."
68
67
  ))
69
68
  }]
@@ -75,11 +74,11 @@ configurationRegistry.registerConfiguration({
75
74
  default: "default",
76
75
  scope: ConfigurationScope.APPLICATION,
77
76
  description: ( localize(
78
- 2491,
77
+ 2494,
79
78
  "Configure whether you receive automatic updates. Requires a restart after change. The updates are fetched from a Microsoft online service."
80
79
  )),
81
80
  deprecationMessage: ( localize(
82
- 2496,
81
+ 2499,
83
82
  "This setting is deprecated, please use '{0}' instead.",
84
83
  "update.mode"
85
84
  ))
@@ -88,9 +87,9 @@ configurationRegistry.registerConfiguration({
88
87
  type: "boolean",
89
88
  default: true,
90
89
  scope: ConfigurationScope.APPLICATION,
91
- title: ( localize(2497, "Enable Background Updates")),
90
+ title: ( localize(2500, "Enable Background Updates")),
92
91
  description: ( localize(
93
- 2498,
92
+ 2501,
94
93
  "Enable to download and install new VS Code versions in the background."
95
94
  )),
96
95
  included: isWindows && !isWeb
@@ -100,42 +99,20 @@ configurationRegistry.registerConfiguration({
100
99
  default: true,
101
100
  scope: ConfigurationScope.APPLICATION,
102
101
  description: ( localize(
103
- 2499,
102
+ 2502,
104
103
  "Show Release Notes after an update. The Release Notes are fetched from a Microsoft online service."
105
104
  )),
106
105
  tags: ["usesOnlineServices"]
107
106
  },
108
- "update.statusBar": {
109
- type: "string",
110
- enum: ["hidden", "actionable", "detailed"],
111
- default: "detailed",
107
+ "update.showPostInstallInfo": {
108
+ type: "boolean",
109
+ default: true,
112
110
  scope: ConfigurationScope.APPLICATION,
113
- description: ( localize(2500, "Controls the visibility of the update status bar entry.")),
114
- enumDescriptions: [( localize(2501, "The status bar entry is never shown.")), ( localize(
115
- 2502,
116
- "The status bar entry is shown when an action is required (e.g., download, install, or restart)."
117
- )), ( localize(
111
+ description: ( localize(
118
112
  2503,
119
- "The status bar entry is shown for all update states including progress."
120
- ))]
121
- },
122
- "update.titleBar": {
123
- type: "string",
124
- enum: ["none", "actionable", "detailed", "always"],
125
- default: product.quality !== "stable" ? "actionable" : "none",
126
- scope: ConfigurationScope.APPLICATION,
127
- tags: ["experimental"],
128
- experiment: {
129
- mode: "startup"
130
- },
131
- description: ( localize(2504, "Controls the experimental update title bar entry.")),
132
- enumDescriptions: [( localize(2505, "The title bar entry is never shown.")), ( localize(
133
- 2506,
134
- "The title bar entry is shown when an action is required (e.g., download, install, or restart)."
135
- )), ( localize(
136
- 2507,
137
- "The title bar entry is shown for progress and actionable update states, but not for idle or disabled states."
138
- )), ( localize(2508, "The title bar entry is shown for all update states."))]
113
+ "Show update information tooltip in the title bar after a new version is installed."
114
+ )),
115
+ included: false
139
116
  }
140
117
  }
141
118
  });
@@ -123,11 +123,11 @@ let SimpleSettingRenderer = class SimpleSettingRenderer {
123
123
  }
124
124
  viewInSettingsMessage(settingId, alreadyDisplayed) {
125
125
  if (alreadyDisplayed) {
126
- return localize(10238, "View in Settings");
126
+ return localize(10368, "View in Settings");
127
127
  } else {
128
128
  const displayName = settingKeyToDisplayFormat(settingId);
129
129
  return localize(
130
- 10239,
130
+ 10369,
131
131
  "View \"{0}: {1}\" in Settings",
132
132
  displayName.category,
133
133
  displayName.label
@@ -137,7 +137,7 @@ let SimpleSettingRenderer = class SimpleSettingRenderer {
137
137
  restorePreviousSettingMessage(settingId) {
138
138
  const displayName = settingKeyToDisplayFormat(settingId);
139
139
  return localize(
140
- 10240,
140
+ 10370,
141
141
  "Restore value of \"{0}: {1}\"",
142
142
  displayName.category,
143
143
  displayName.label
@@ -152,14 +152,14 @@ let SimpleSettingRenderer = class SimpleSettingRenderer {
152
152
  if (this.isAlreadySet(setting, booleanValue)) {
153
153
  if (booleanValue) {
154
154
  return localize(
155
- 10241,
155
+ 10371,
156
156
  "\"{0}: {1}\" is already enabled",
157
157
  displayName.category,
158
158
  displayName.label
159
159
  );
160
160
  } else {
161
161
  return localize(
162
- 10242,
162
+ 10372,
163
163
  "\"{0}: {1}\" is already disabled",
164
164
  displayName.category,
165
165
  displayName.label
@@ -167,16 +167,16 @@ let SimpleSettingRenderer = class SimpleSettingRenderer {
167
167
  }
168
168
  }
169
169
  if (booleanValue) {
170
- return localize(10243, "Enable \"{0}: {1}\"", displayName.category, displayName.label);
170
+ return localize(10373, "Enable \"{0}: {1}\"", displayName.category, displayName.label);
171
171
  } else {
172
- return localize(10244, "Disable \"{0}: {1}\"", displayName.category, displayName.label);
172
+ return localize(10374, "Disable \"{0}: {1}\"", displayName.category, displayName.label);
173
173
  }
174
174
  }
175
175
  stringSettingMessage(setting, stringValue) {
176
176
  const displayName = settingKeyToDisplayFormat(setting.key);
177
177
  if (this.isAlreadySet(setting, stringValue)) {
178
178
  return localize(
179
- 10245,
179
+ 10375,
180
180
  "\"{0}: {1}\" is already set to \"{2}\"",
181
181
  displayName.category,
182
182
  displayName.label,
@@ -184,7 +184,7 @@ let SimpleSettingRenderer = class SimpleSettingRenderer {
184
184
  );
185
185
  }
186
186
  return localize(
187
- 10246,
187
+ 10376,
188
188
  "Set \"{0}: {1}\" to \"{2}\"",
189
189
  displayName.category,
190
190
  displayName.label,
@@ -195,7 +195,7 @@ let SimpleSettingRenderer = class SimpleSettingRenderer {
195
195
  const displayName = settingKeyToDisplayFormat(setting.key);
196
196
  if (this.isAlreadySet(setting, numberValue)) {
197
197
  return localize(
198
- 10247,
198
+ 10377,
199
199
  "\"{0}: {1}\" is already set to {2}",
200
200
  displayName.category,
201
201
  displayName.label,
@@ -203,7 +203,7 @@ let SimpleSettingRenderer = class SimpleSettingRenderer {
203
203
  );
204
204
  }
205
205
  return localize(
206
- 10248,
206
+ 10378,
207
207
  "Set \"{0}: {1}\" to {2}",
208
208
  displayName.category,
209
209
  displayName.label,
@@ -212,7 +212,7 @@ let SimpleSettingRenderer = class SimpleSettingRenderer {
212
212
  }
213
213
  renderSetting(setting, newValue) {
214
214
  const href = this.settingToUriString(setting.key, newValue);
215
- const title = ( localize(10249, "View or change setting"));
215
+ const title = ( localize(10379, "View or change setting"));
216
216
  return `<code tabindex="0"><a href="${href}" class="codesetting" title="${title}" aria-role="button"><svg width="14" height="14" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><path d="M9.1 4.4L8.6 2H7.4l-.5 2.4-.7.3-2-1.3-.9.8 1.3 2-.2.7-2.4.5v1.2l2.4.5.3.8-1.3 2 .8.8 2-1.3.8.3.4 2.3h1.2l.5-2.4.8-.3 2 1.3.8-.8-1.3-2 .3-.8 2.3-.4V7.4l-2.4-.5-.3-.8 1.3-2-.8-.8-2 1.3-.7-.2zM9.4 1l.5 2.4L12 2.1l2 2-1.4 2.1 2.4.4v2.8l-2.4.5L14 12l-2 2-2.1-1.4-.5 2.4H6.6l-.5-2.4L4 13.9l-2-2 1.4-2.1L1 9.4V6.6l2.4-.5L2.1 4l2-2 2.1 1.4.4-2.4h2.8zm.6 7c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zM8 9c.6 0 1-.4 1-1s-.4-1-1-1-1 .4-1 1 .4 1 1 1z"/></svg>
217
217
  <span class="separator"></span>
218
218
  <span class="setting-name">${setting.key}</span>
@@ -290,8 +290,8 @@ let SimpleSettingRenderer = class SimpleSettingRenderer {
290
290
  class: undefined,
291
291
  enabled: true,
292
292
  id: "copySettingId",
293
- tooltip: ( localize(10250, "Copy Setting ID")),
294
- label: ( localize(10250, "Copy Setting ID")),
293
+ tooltip: ( localize(10380, "Copy Setting ID")),
294
+ label: ( localize(10380, "Copy Setting ID")),
295
295
  run: () => {
296
296
  this._clipboardService.writeText(settingId);
297
297
  }
@@ -0,0 +1,68 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License. See License.txt in the project root for license information.
4
+ *--------------------------------------------------------------------------------------------*/
5
+
6
+ .post-update-widget {
7
+ display: flex;
8
+ flex-direction: column;
9
+ gap: 12px;
10
+ padding: 6px 6px;
11
+ min-width: 300px;
12
+ max-width: 550px;
13
+ color: var(--vscode-descriptionForeground);
14
+ font-size: var(--vscode-bodyFontSize-small);
15
+ }
16
+
17
+ /* Header */
18
+ .post-update-widget .header {
19
+ display: flex;
20
+ justify-content: space-between;
21
+ align-items: center;
22
+ }
23
+
24
+ .post-update-widget .header .title {
25
+ font-weight: 600;
26
+ font-size: var(--vscode-bodyFontSize);
27
+ color: var(--vscode-foreground);
28
+ }
29
+
30
+ /* Button bar */
31
+ .post-update-widget .button-bar {
32
+ display: flex;
33
+ justify-content: flex-end;
34
+ align-items: center;
35
+ gap: 8px;
36
+ }
37
+
38
+ .post-update-widget .button-bar button {
39
+ padding: 4px 12px;
40
+ border-radius: var(--vscode-cornerRadius-small);
41
+ font-size: var(--vscode-bodyFontSize-small);
42
+ cursor: pointer;
43
+ white-space: nowrap;
44
+ }
45
+
46
+ .post-update-widget .update-button-secondary {
47
+ background-color: var(--vscode-button-secondaryBackground);
48
+ color: var(--vscode-button-secondaryForeground);
49
+ border: 1px solid var(--vscode-button-border, transparent);
50
+ }
51
+
52
+ .post-update-widget .update-button-secondary:hover {
53
+ background-color: var(--vscode-button-secondaryHoverBackground);
54
+ }
55
+
56
+ .post-update-widget .update-button-leading-secondary {
57
+ margin-right: auto;
58
+ }
59
+
60
+ .post-update-widget .update-button-primary {
61
+ background-color: var(--vscode-button-background);
62
+ color: var(--vscode-button-foreground);
63
+ border: 1px solid var(--vscode-button-border, transparent);
64
+ }
65
+
66
+ .post-update-widget .update-button-primary:hover {
67
+ background-color: var(--vscode-button-hoverBackground);
68
+ }
@@ -8,8 +8,9 @@
8
8
  align-items: center;
9
9
  border-radius: var(--vscode-cornerRadius-medium);
10
10
  white-space: nowrap;
11
- padding: 0px 12px;
11
+ padding: 0px 8px;
12
12
  height: 22px;
13
+ box-sizing: border-box;
13
14
  background-color: transparent;
14
15
  border: 1px solid transparent;
15
16
  }
@@ -80,21 +81,6 @@
80
81
  transition: background 0.3s ease;
81
82
  }
82
83
 
83
- /* Bounce animation — macOS dock-style bounce when prominent state appears */
84
- .monaco-action-bar .update-indicator.prominent {
85
- animation: update-indicator-bounce 0.6s ease;
86
- }
87
-
88
- @keyframes update-indicator-bounce {
89
- 0% { transform: translateY(0); }
90
- 20% { transform: translateY(-6px); }
91
- 40% { transform: translateY(0); }
92
- 55% { transform: translateY(-3px); }
93
- 70% { transform: translateY(0); }
94
- 85% { transform: translateY(-1px); }
95
- 100% { transform: translateY(0); }
96
- }
97
-
98
84
  /* Reduced motion */
99
85
  .monaco-workbench.monaco-reduce-motion .update-indicator.progress-indefinite .indicator-label::after {
100
86
  animation: none;
@@ -103,7 +89,3 @@
103
89
  .monaco-workbench.monaco-reduce-motion .update-indicator.progress-percent .indicator-label::after {
104
90
  transition: none;
105
91
  }
106
-
107
- .monaco-workbench.monaco-reduce-motion .update-indicator.prominent {
108
- animation: none;
109
- }
@@ -78,14 +78,40 @@
78
78
  color: var(--vscode-foreground);
79
79
  }
80
80
 
81
- .update-tooltip .release-notes-link {
82
- color: var(--vscode-textLink-foreground);
83
- text-decoration: none;
81
+ /* Button bar */
82
+ .update-tooltip .button-bar {
83
+ display: flex;
84
+ justify-content: flex-end;
85
+ align-items: center;
86
+ gap: 8px;
87
+ }
88
+
89
+ .update-tooltip .button-bar button {
90
+ padding: 4px 12px;
91
+ border-radius: var(--vscode-cornerRadius-small);
92
+ font-size: var(--vscode-bodyFontSize-small);
93
+ cursor: pointer;
94
+ white-space: nowrap;
95
+ }
96
+
97
+ .update-tooltip .release-notes-button {
98
+ background-color: var(--vscode-button-secondaryBackground);
99
+ color: var(--vscode-button-secondaryForeground);
100
+ border: 1px solid var(--vscode-button-border, transparent);
84
101
  }
85
102
 
86
- .update-tooltip .release-notes-link:hover {
87
- color: var(--vscode-textLink-activeForeground);
88
- text-decoration: underline;
103
+ .update-tooltip .release-notes-button:hover {
104
+ background-color: var(--vscode-button-secondaryHoverBackground);
105
+ }
106
+
107
+ .update-tooltip .action-button {
108
+ background-color: var(--vscode-button-background);
109
+ color: var(--vscode-button-foreground);
110
+ border: 1px solid var(--vscode-button-border, transparent);
111
+ }
112
+
113
+ .update-tooltip .action-button:hover {
114
+ background-color: var(--vscode-button-hoverBackground);
89
115
  }
90
116
 
91
117
  /* Progress bar */
@@ -137,23 +163,3 @@
137
163
  .update-tooltip .state-message-icon.codicon.codicon-error {
138
164
  color: var(--vscode-editorError-foreground);
139
165
  }
140
-
141
- /* Markdown */
142
- .update-tooltip .update-markdown {
143
- background: var(--vscode-editor-background);
144
- border-radius: var(--vscode-cornerRadius-large);
145
- padding: 12px;
146
- }
147
-
148
- .update-tooltip .update-markdown p {
149
- margin-bottom: 16px;
150
- }
151
-
152
- .update-tooltip .update-markdown p:last-child {
153
- margin-bottom: 0;
154
- }
155
-
156
- .update-tooltip .update-markdown .codicon[class*='codicon-'] {
157
- font-size: 16px;
158
- vertical-align: text-top;
159
- }
@@ -0,0 +1,35 @@
1
+ import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
2
+ import { ICommandService } from "@codingame/monaco-vscode-api/vscode/vs/platform/commands/common/commands.service";
3
+ import { IConfigurationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service";
4
+ import { IHoverService } from "@codingame/monaco-vscode-api/vscode/vs/platform/hover/browser/hover.service";
5
+ import { ILayoutService } from "@codingame/monaco-vscode-api/vscode/vs/platform/layout/browser/layoutService.service";
6
+ import { IMarkdownRendererService } from "@codingame/monaco-vscode-api/vscode/vs/platform/markdown/browser/markdownRenderer.service";
7
+ import { IOpenerService } from "@codingame/monaco-vscode-api/vscode/vs/platform/opener/common/opener.service";
8
+ import { IProductService } from "@codingame/monaco-vscode-api/vscode/vs/platform/product/common/productService.service";
9
+ import { IRequestService } from "@codingame/monaco-vscode-api/vscode/vs/platform/request/common/request.service";
10
+ import { IStorageService } from "@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage.service";
11
+ import { ITelemetryService } from "@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service";
12
+ import { IWorkbenchContribution } from "@codingame/monaco-vscode-api/vscode/vs/workbench/common/contributions";
13
+ import { IHostService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/host/browser/host.service";
14
+ /**
15
+ * Displays post-update call-to-action widget after a version change is detected.
16
+ */
17
+ export declare class PostUpdateWidgetContribution extends Disposable implements IWorkbenchContribution {
18
+ private readonly commandService;
19
+ private readonly configurationService;
20
+ private readonly hostService;
21
+ private readonly hoverService;
22
+ private readonly layoutService;
23
+ private readonly markdownRendererService;
24
+ private readonly openerService;
25
+ private readonly productService;
26
+ private readonly requestService;
27
+ private readonly storageService;
28
+ private readonly telemetryService;
29
+ constructor(commandService: ICommandService, configurationService: IConfigurationService, hostService: IHostService, hoverService: IHoverService, layoutService: ILayoutService, markdownRendererService: IMarkdownRendererService, openerService: IOpenerService, productService: IProductService, requestService: IRequestService, storageService: IStorageService, telemetryService: ITelemetryService);
30
+ private tryShowOnStartup;
31
+ private showUpdateInfo;
32
+ private getUpdateInfo;
33
+ private buildContent;
34
+ private detectVersionChange;
35
+ }