@codingame/monaco-vscode-accessibility-service-override 4.5.2 → 5.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.
- package/accessibility.js +2 -2
- package/package.json +2 -2
- package/vscode/src/vs/platform/accessibilitySignal/browser/media/all.mp3.js +1 -1
- package/vscode/src/vs/workbench/contrib/accessibility/browser/accessibility.contribution.js +12 -4
- package/vscode/src/vs/workbench/contrib/accessibility/browser/audioCueConfiguration.js +231 -0
- package/vscode/src/vs/workbench/contrib/accessibilitySignals/browser/accessibilitySignal.contribution.js +13 -0
- package/vscode/src/vs/workbench/contrib/accessibilitySignals/browser/accessibilitySignalDebuggerContribution.js +52 -0
- package/vscode/src/vs/workbench/contrib/accessibilitySignals/browser/commands.js +152 -0
- package/vscode/src/vs/workbench/contrib/accessibilitySignals/browser/editorTextPropertySignalsContribution.js +244 -0
- package/vscode/src/vs/workbench/contrib/{accessibility → accessibilitySignals}/browser/openDiffEditorAnnouncement.js +1 -1
- package/vscode/src/vs/workbench/contrib/accessibilitySignals/browser/reloadableWorkbenchContribution.js +42 -0
- package/vscode/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.js +7 -0
- package/vscode/src/vs/workbench/contrib/speech/browser/speechAccessibilitySignal.js +22 -0
- package/vscode/src/vs/workbench/contrib/accessibility/browser/accessibleView.js +0 -809
- /package/assets/{chatResponsePending.mp3 → progress.mp3} +0 -0
- /package/vscode/src/vs/workbench/contrib/{accessibility → accessibilitySignals}/browser/saveAccessibilitySignal.js +0 -0
package/accessibility.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SyncDescriptor } from 'vscode/vscode/vs/platform/instantiation/common/descriptors';
|
|
2
|
-
import { AccessibleViewService } from '
|
|
2
|
+
import { AccessibleViewService } from 'vscode/vscode/vs/workbench/contrib/accessibility/browser/accessibleView';
|
|
3
3
|
import { AccessibilitySignalService } from 'vscode/vscode/vs/platform/accessibilitySignal/browser/accessibilitySignalService';
|
|
4
4
|
import audioAssets from './vscode/src/vs/platform/accessibilitySignal/browser/media/all.mp3.js';
|
|
5
5
|
import { IAccessibleViewService } from 'vscode/vscode/vs/workbench/contrib/accessibility/browser/accessibleView.service';
|
|
@@ -7,7 +7,7 @@ import { IAccessibilitySignalService } from 'vscode/vscode/vs/platform/accessibi
|
|
|
7
7
|
import { registerAssets } from 'vscode/assets';
|
|
8
8
|
import './vscode/src/vs/workbench/contrib/accessibility/browser/accessibility.contribution.js';
|
|
9
9
|
import './vscode/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.js';
|
|
10
|
-
import 'vscode/
|
|
10
|
+
import './vscode/src/vs/workbench/contrib/accessibilitySignals/browser/accessibilitySignal.contribution.js';
|
|
11
11
|
|
|
12
12
|
registerAssets(audioAssets);
|
|
13
13
|
function getServiceOverride() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codingame/monaco-vscode-accessibility-service-override",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"keywords": [],
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "CodinGame",
|
|
@@ -26,6 +26,6 @@
|
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"vscode": "npm:@codingame/monaco-vscode-api@
|
|
29
|
+
"vscode": "npm:@codingame/monaco-vscode-api@5.0.0"
|
|
30
30
|
}
|
|
31
31
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
var audioAssets = {
|
|
2
2
|
'vs/platform/accessibilitySignal/browser/media/break.mp3': new URL('../../../../../../../assets/break.mp3', import.meta.url).href,
|
|
3
3
|
'vs/platform/accessibilitySignal/browser/media/chatRequestSent.mp3': new URL('../../../../../../../assets/chatRequestSent.mp3', import.meta.url).href,
|
|
4
|
-
'vs/platform/accessibilitySignal/browser/media/chatResponsePending.mp3': new URL('../../../../../../../assets/chatResponsePending.mp3', import.meta.url).href,
|
|
5
4
|
'vs/platform/accessibilitySignal/browser/media/chatResponseReceived1.mp3': new URL('../../../../../../../assets/chatResponseReceived1.mp3', import.meta.url).href,
|
|
6
5
|
'vs/platform/accessibilitySignal/browser/media/chatResponseReceived2.mp3': new URL('../../../../../../../assets/chatResponseReceived2.mp3', import.meta.url).href,
|
|
7
6
|
'vs/platform/accessibilitySignal/browser/media/chatResponseReceived3.mp3': new URL('../../../../../../../assets/chatResponseReceived3.mp3', import.meta.url).href,
|
|
@@ -13,6 +12,7 @@ var audioAssets = {
|
|
|
13
12
|
'vs/platform/accessibilitySignal/browser/media/error.mp3': new URL('../../../../../../../assets/error.mp3', import.meta.url).href,
|
|
14
13
|
'vs/platform/accessibilitySignal/browser/media/foldedAreas.mp3': new URL('../../../../../../../assets/foldedAreas.mp3', import.meta.url).href,
|
|
15
14
|
'vs/platform/accessibilitySignal/browser/media/format.mp3': new URL('../../../../../../../assets/format.mp3', import.meta.url).href,
|
|
15
|
+
'vs/platform/accessibilitySignal/browser/media/progress.mp3': new URL('../../../../../../../assets/progress.mp3', import.meta.url).href,
|
|
16
16
|
'vs/platform/accessibilitySignal/browser/media/quickFixes.mp3': new URL('../../../../../../../assets/quickFixes.mp3', import.meta.url).href,
|
|
17
17
|
'vs/platform/accessibilitySignal/browser/media/save.mp3': new URL('../../../../../../../assets/save.mp3', import.meta.url).href,
|
|
18
18
|
'vs/platform/accessibilitySignal/browser/media/taskCompleted.mp3': new URL('../../../../../../../assets/taskCompleted.mp3', import.meta.url).href,
|
|
@@ -1,25 +1,33 @@
|
|
|
1
1
|
import { registerAccessibilityConfiguration, DynamicSpeechAccessibilityConfiguration } from 'vscode/vscode/vs/workbench/contrib/accessibility/browser/accessibilityConfiguration';
|
|
2
2
|
import { Extensions, registerWorkbenchContribution2 } from 'vscode/vscode/vs/workbench/common/contributions';
|
|
3
3
|
import { Registry } from 'vscode/vscode/vs/platform/registry/common/platform';
|
|
4
|
-
import '
|
|
4
|
+
import 'vscode/vscode/vs/workbench/contrib/accessibility/browser/accessibleView';
|
|
5
5
|
import 'vscode/vscode/vs/platform/instantiation/common/instantiation';
|
|
6
6
|
import { UnfocusedViewDimmingContribution } from './unfocusedViewDimmingContribution.js';
|
|
7
|
-
import { HoverAccessibleViewContribution, NotificationAccessibleViewContribution, InlineCompletionsAccessibleViewContribution } from 'vscode/vscode/vs/workbench/contrib/accessibility/browser/
|
|
7
|
+
import { HoverAccessibleViewContribution, NotificationAccessibleViewContribution, CommentAccessibleViewContribution, InlineCompletionsAccessibleViewContribution, ExtensionAccessibilityHelpDialogContribution } from 'vscode/vscode/vs/workbench/contrib/accessibility/browser/accessibleViewContributions';
|
|
8
8
|
import { AccessibilityStatus } from './accessibilityStatus.js';
|
|
9
9
|
import { EditorAccessibilityHelpContribution } from 'vscode/vscode/vs/workbench/contrib/accessibility/browser/editorAccessibilityHelp';
|
|
10
|
-
import { SaveAccessibilitySignalContribution } from '
|
|
10
|
+
import { SaveAccessibilitySignalContribution } from '../../accessibilitySignals/browser/saveAccessibilitySignal.js';
|
|
11
11
|
import { CommentsAccessibilityHelpContribution } from 'vscode/vscode/vs/workbench/contrib/comments/browser/commentsAccessibility';
|
|
12
|
-
import { DiffEditorActiveAnnouncementContribution } from '
|
|
12
|
+
import { DiffEditorActiveAnnouncementContribution } from '../../accessibilitySignals/browser/openDiffEditorAnnouncement.js';
|
|
13
|
+
import { SpeechAccessibilitySignalContribution } from '../../speech/browser/speechAccessibilitySignal.js';
|
|
14
|
+
import { registerAudioCueConfiguration } from './audioCueConfiguration.js';
|
|
15
|
+
import 'vscode/vscode/vs/base/common/lifecycle';
|
|
16
|
+
import 'vscode/vscode/vs/platform/contextkey/common/contextkey';
|
|
13
17
|
|
|
14
18
|
registerAccessibilityConfiguration();
|
|
19
|
+
registerAudioCueConfiguration();
|
|
15
20
|
const workbenchRegistry = ( Registry.as(Extensions.Workbench));
|
|
16
21
|
workbenchRegistry.registerWorkbenchContribution(EditorAccessibilityHelpContribution, 4 );
|
|
17
22
|
workbenchRegistry.registerWorkbenchContribution(CommentsAccessibilityHelpContribution, 4 );
|
|
18
23
|
workbenchRegistry.registerWorkbenchContribution(UnfocusedViewDimmingContribution, 3 );
|
|
19
24
|
workbenchRegistry.registerWorkbenchContribution(HoverAccessibleViewContribution, 4 );
|
|
20
25
|
workbenchRegistry.registerWorkbenchContribution(NotificationAccessibleViewContribution, 4 );
|
|
26
|
+
workbenchRegistry.registerWorkbenchContribution(CommentAccessibleViewContribution, 4 );
|
|
21
27
|
workbenchRegistry.registerWorkbenchContribution(InlineCompletionsAccessibleViewContribution, 4 );
|
|
22
28
|
registerWorkbenchContribution2(AccessibilityStatus.ID, AccessibilityStatus, 2 );
|
|
29
|
+
registerWorkbenchContribution2(ExtensionAccessibilityHelpDialogContribution.ID, ExtensionAccessibilityHelpDialogContribution, 2 );
|
|
23
30
|
registerWorkbenchContribution2(SaveAccessibilitySignalContribution.ID, SaveAccessibilitySignalContribution, 3 );
|
|
31
|
+
registerWorkbenchContribution2(SpeechAccessibilitySignalContribution.ID, SpeechAccessibilitySignalContribution, 3 );
|
|
24
32
|
registerWorkbenchContribution2(DiffEditorActiveAnnouncementContribution.ID, DiffEditorActiveAnnouncementContribution, 3 );
|
|
25
33
|
registerWorkbenchContribution2(DynamicSpeechAccessibilityConfiguration.ID, DynamicSpeechAccessibilityConfiguration, 3 );
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { localizeWithPath } from 'vscode/vscode/vs/nls';
|
|
2
|
+
import { Extensions } from 'vscode/vscode/vs/platform/configuration/common/configurationRegistry';
|
|
3
|
+
import { Registry } from 'vscode/vscode/vs/platform/registry/common/platform';
|
|
4
|
+
|
|
5
|
+
const _moduleId = "vs/workbench/contrib/accessibility/browser/audioCueConfiguration";
|
|
6
|
+
const audioCueFeatureBase = {
|
|
7
|
+
'type': 'string',
|
|
8
|
+
'enum': ['auto', 'on', 'off'],
|
|
9
|
+
'default': 'auto',
|
|
10
|
+
'enumDescriptions': [
|
|
11
|
+
( localizeWithPath(_moduleId, 0, "Enable audio cue when a screen reader is attached.")),
|
|
12
|
+
( localizeWithPath(_moduleId, 1, "Enable audio cue.")),
|
|
13
|
+
( localizeWithPath(_moduleId, 2, "Disable audio cue."))
|
|
14
|
+
],
|
|
15
|
+
tags: ['accessibility'],
|
|
16
|
+
};
|
|
17
|
+
const markdownDeprecationMessage = ( localizeWithPath(
|
|
18
|
+
_moduleId,
|
|
19
|
+
3,
|
|
20
|
+
"This setting is deprecated. Use `signals` settings instead."
|
|
21
|
+
));
|
|
22
|
+
const soundDeprecatedFeatureBase = {
|
|
23
|
+
...audioCueFeatureBase,
|
|
24
|
+
markdownDeprecationMessage
|
|
25
|
+
};
|
|
26
|
+
function registerAudioCueConfiguration() {
|
|
27
|
+
( (Registry.as(Extensions.Configuration))).registerConfiguration({
|
|
28
|
+
scope: 4 ,
|
|
29
|
+
'properties': {
|
|
30
|
+
'audioCues.enabled': {
|
|
31
|
+
markdownDeprecationMessage: 'Deprecated. Use the specific setting for each audio cue instead (`audioCues.*`).',
|
|
32
|
+
tags: ['accessibility']
|
|
33
|
+
},
|
|
34
|
+
'audioCues.volume': {
|
|
35
|
+
markdownDeprecationMessage: 'Deprecated. Use `accessibility.signals.sounds.volume` instead.',
|
|
36
|
+
tags: ['accessibility']
|
|
37
|
+
},
|
|
38
|
+
'audioCues.debouncePositionChanges': {
|
|
39
|
+
'description': ( localizeWithPath(_moduleId, 4, "Whether or not position changes should be debounced")),
|
|
40
|
+
'type': 'boolean',
|
|
41
|
+
'default': false,
|
|
42
|
+
tags: ['accessibility'],
|
|
43
|
+
'markdownDeprecationMessage': ( localizeWithPath(
|
|
44
|
+
_moduleId,
|
|
45
|
+
5,
|
|
46
|
+
'This setting is deprecated, instead use the `signals.debouncePositionChanges` setting.'
|
|
47
|
+
))
|
|
48
|
+
},
|
|
49
|
+
'audioCues.lineHasBreakpoint': {
|
|
50
|
+
'description': ( localizeWithPath(_moduleId, 6, "Plays a sound when the active line has a breakpoint.")),
|
|
51
|
+
...soundDeprecatedFeatureBase
|
|
52
|
+
},
|
|
53
|
+
'audioCues.lineHasInlineSuggestion': {
|
|
54
|
+
'description': ( localizeWithPath(
|
|
55
|
+
_moduleId,
|
|
56
|
+
7,
|
|
57
|
+
"Plays a sound when the active line has an inline suggestion."
|
|
58
|
+
)),
|
|
59
|
+
...soundDeprecatedFeatureBase
|
|
60
|
+
},
|
|
61
|
+
'audioCues.lineHasError': {
|
|
62
|
+
'description': ( localizeWithPath(_moduleId, 8, "Plays a sound when the active line has an error.")),
|
|
63
|
+
...soundDeprecatedFeatureBase,
|
|
64
|
+
},
|
|
65
|
+
'audioCues.lineHasFoldedArea': {
|
|
66
|
+
'description': ( localizeWithPath(
|
|
67
|
+
_moduleId,
|
|
68
|
+
9,
|
|
69
|
+
"Plays a sound when the active line has a folded area that can be unfolded."
|
|
70
|
+
)),
|
|
71
|
+
...soundDeprecatedFeatureBase,
|
|
72
|
+
},
|
|
73
|
+
'audioCues.lineHasWarning': {
|
|
74
|
+
'description': ( localizeWithPath(_moduleId, 10, "Plays a sound when the active line has a warning.")),
|
|
75
|
+
...soundDeprecatedFeatureBase,
|
|
76
|
+
default: 'off',
|
|
77
|
+
},
|
|
78
|
+
'audioCues.onDebugBreak': {
|
|
79
|
+
'description': ( localizeWithPath(_moduleId, 11, "Plays a sound when the debugger stopped on a breakpoint.")),
|
|
80
|
+
...soundDeprecatedFeatureBase,
|
|
81
|
+
},
|
|
82
|
+
'audioCues.noInlayHints': {
|
|
83
|
+
'description': ( localizeWithPath(
|
|
84
|
+
_moduleId,
|
|
85
|
+
12,
|
|
86
|
+
"Plays a sound when trying to read a line with inlay hints that has no inlay hints."
|
|
87
|
+
)),
|
|
88
|
+
...soundDeprecatedFeatureBase,
|
|
89
|
+
},
|
|
90
|
+
'audioCues.taskCompleted': {
|
|
91
|
+
'description': ( localizeWithPath(_moduleId, 13, "Plays a sound when a task is completed.")),
|
|
92
|
+
...soundDeprecatedFeatureBase,
|
|
93
|
+
},
|
|
94
|
+
'audioCues.taskFailed': {
|
|
95
|
+
'description': ( localizeWithPath(_moduleId, 14, "Plays a sound when a task fails (non-zero exit code).")),
|
|
96
|
+
...soundDeprecatedFeatureBase,
|
|
97
|
+
},
|
|
98
|
+
'audioCues.terminalCommandFailed': {
|
|
99
|
+
'description': ( localizeWithPath(
|
|
100
|
+
_moduleId,
|
|
101
|
+
15,
|
|
102
|
+
"Plays a sound when a terminal command fails (non-zero exit code)."
|
|
103
|
+
)),
|
|
104
|
+
...soundDeprecatedFeatureBase,
|
|
105
|
+
},
|
|
106
|
+
'audioCues.terminalQuickFix': {
|
|
107
|
+
'description': ( localizeWithPath(_moduleId, 16, "Plays a sound when terminal Quick Fixes are available.")),
|
|
108
|
+
...soundDeprecatedFeatureBase,
|
|
109
|
+
},
|
|
110
|
+
'audioCues.terminalBell': {
|
|
111
|
+
'description': ( localizeWithPath(_moduleId, 17, "Plays a sound when the terminal bell is ringing.")),
|
|
112
|
+
...soundDeprecatedFeatureBase,
|
|
113
|
+
default: 'on'
|
|
114
|
+
},
|
|
115
|
+
'audioCues.diffLineInserted': {
|
|
116
|
+
'description': ( localizeWithPath(
|
|
117
|
+
_moduleId,
|
|
118
|
+
18,
|
|
119
|
+
"Plays a sound when the focus moves to an inserted line in Accessible Diff Viewer mode or to the next/previous change."
|
|
120
|
+
)),
|
|
121
|
+
...soundDeprecatedFeatureBase,
|
|
122
|
+
},
|
|
123
|
+
'audioCues.diffLineDeleted': {
|
|
124
|
+
'description': ( localizeWithPath(
|
|
125
|
+
_moduleId,
|
|
126
|
+
19,
|
|
127
|
+
"Plays a sound when the focus moves to a deleted line in Accessible Diff Viewer mode or to the next/previous change."
|
|
128
|
+
)),
|
|
129
|
+
...soundDeprecatedFeatureBase,
|
|
130
|
+
},
|
|
131
|
+
'audioCues.diffLineModified': {
|
|
132
|
+
'description': ( localizeWithPath(
|
|
133
|
+
_moduleId,
|
|
134
|
+
20,
|
|
135
|
+
"Plays a sound when the focus moves to a modified line in Accessible Diff Viewer mode or to the next/previous change."
|
|
136
|
+
)),
|
|
137
|
+
...soundDeprecatedFeatureBase,
|
|
138
|
+
},
|
|
139
|
+
'audioCues.notebookCellCompleted': {
|
|
140
|
+
'description': ( localizeWithPath(
|
|
141
|
+
_moduleId,
|
|
142
|
+
21,
|
|
143
|
+
"Plays a sound when a notebook cell execution is successfully completed."
|
|
144
|
+
)),
|
|
145
|
+
...soundDeprecatedFeatureBase,
|
|
146
|
+
},
|
|
147
|
+
'audioCues.notebookCellFailed': {
|
|
148
|
+
'description': ( localizeWithPath(_moduleId, 22, "Plays a sound when a notebook cell execution fails.")),
|
|
149
|
+
...soundDeprecatedFeatureBase,
|
|
150
|
+
},
|
|
151
|
+
'audioCues.chatRequestSent': {
|
|
152
|
+
'description': ( localizeWithPath(_moduleId, 23, "Plays a sound when a chat request is made.")),
|
|
153
|
+
...soundDeprecatedFeatureBase,
|
|
154
|
+
default: 'off'
|
|
155
|
+
},
|
|
156
|
+
'audioCues.chatResponsePending': {
|
|
157
|
+
'description': ( localizeWithPath(_moduleId, 24, "Plays a sound on loop while the response is pending.")),
|
|
158
|
+
...soundDeprecatedFeatureBase,
|
|
159
|
+
default: 'auto'
|
|
160
|
+
},
|
|
161
|
+
'audioCues.chatResponseReceived': {
|
|
162
|
+
'description': ( localizeWithPath(
|
|
163
|
+
_moduleId,
|
|
164
|
+
25,
|
|
165
|
+
"Plays a sound on loop while the response has been received."
|
|
166
|
+
)),
|
|
167
|
+
...soundDeprecatedFeatureBase,
|
|
168
|
+
default: 'off'
|
|
169
|
+
},
|
|
170
|
+
'audioCues.clear': {
|
|
171
|
+
'description': ( localizeWithPath(
|
|
172
|
+
_moduleId,
|
|
173
|
+
26,
|
|
174
|
+
"Plays a sound when a feature is cleared (for example, the terminal, Debug Console, or Output channel). When this is disabled, an ARIA alert will announce 'Cleared'."
|
|
175
|
+
)),
|
|
176
|
+
...soundDeprecatedFeatureBase,
|
|
177
|
+
default: 'off'
|
|
178
|
+
},
|
|
179
|
+
'audioCues.save': {
|
|
180
|
+
'markdownDescription': ( localizeWithPath(
|
|
181
|
+
_moduleId,
|
|
182
|
+
27,
|
|
183
|
+
"Plays a sound when a file is saved. Also see {0}",
|
|
184
|
+
'`#accessibility.alert.save#`'
|
|
185
|
+
)),
|
|
186
|
+
'type': 'string',
|
|
187
|
+
'enum': ['userGesture', 'always', 'never'],
|
|
188
|
+
'default': 'never',
|
|
189
|
+
'enumDescriptions': [
|
|
190
|
+
( localizeWithPath(_moduleId, 28, "Plays the audio cue when a user explicitly saves a file.")),
|
|
191
|
+
( localizeWithPath(
|
|
192
|
+
_moduleId,
|
|
193
|
+
29,
|
|
194
|
+
"Plays the audio cue whenever a file is saved, including auto save."
|
|
195
|
+
)),
|
|
196
|
+
( localizeWithPath(_moduleId, 30, "Never plays the audio cue."))
|
|
197
|
+
],
|
|
198
|
+
tags: ['accessibility'],
|
|
199
|
+
markdownDeprecationMessage
|
|
200
|
+
},
|
|
201
|
+
'audioCues.format': {
|
|
202
|
+
'markdownDescription': ( localizeWithPath(
|
|
203
|
+
_moduleId,
|
|
204
|
+
31,
|
|
205
|
+
"Plays a sound when a file or notebook is formatted. Also see {0}",
|
|
206
|
+
'`#accessibility.alert.format#`'
|
|
207
|
+
)),
|
|
208
|
+
'type': 'string',
|
|
209
|
+
'enum': ['userGesture', 'always', 'never'],
|
|
210
|
+
'default': 'never',
|
|
211
|
+
'enumDescriptions': [
|
|
212
|
+
( localizeWithPath(
|
|
213
|
+
_moduleId,
|
|
214
|
+
32,
|
|
215
|
+
"Plays the audio cue when a user explicitly formats a file."
|
|
216
|
+
)),
|
|
217
|
+
( localizeWithPath(
|
|
218
|
+
_moduleId,
|
|
219
|
+
33,
|
|
220
|
+
"Plays the audio cue whenever a file is formatted, including if it is set to format on save, type, or, paste, or run of a cell."
|
|
221
|
+
)),
|
|
222
|
+
( localizeWithPath(_moduleId, 34, "Never plays the audio cue."))
|
|
223
|
+
],
|
|
224
|
+
tags: ['accessibility'],
|
|
225
|
+
markdownDeprecationMessage
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export { audioCueFeatureBase, registerAudioCueConfiguration };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import 'vscode/vscode/vs/platform/accessibilitySignal/browser/accessibilitySignalService';
|
|
2
|
+
import 'vscode/vscode/vs/platform/instantiation/common/instantiation';
|
|
3
|
+
import { registerAction2 } from 'vscode/vscode/vs/platform/actions/common/actions';
|
|
4
|
+
import { registerWorkbenchContribution2 } from 'vscode/vscode/vs/workbench/common/contributions';
|
|
5
|
+
import { AccessibilitySignalLineDebuggerContribution } from './accessibilitySignalDebuggerContribution.js';
|
|
6
|
+
import { ShowSignalSoundHelp, ShowAccessibilityAnnouncementHelp } from './commands.js';
|
|
7
|
+
import { EditorTextPropertySignalsContribution } from './editorTextPropertySignalsContribution.js';
|
|
8
|
+
import { wrapInReloadableClass } from './reloadableWorkbenchContribution.js';
|
|
9
|
+
|
|
10
|
+
registerWorkbenchContribution2('EditorTextPropertySignalsContribution', wrapInReloadableClass(() => EditorTextPropertySignalsContribution), 3 );
|
|
11
|
+
registerWorkbenchContribution2('AccessibilitySignalLineDebuggerContribution', AccessibilitySignalLineDebuggerContribution, 3 );
|
|
12
|
+
registerAction2(ShowSignalSoundHelp);
|
|
13
|
+
registerAction2(ShowAccessibilityAnnouncementHelp);
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { __decorate, __param } from 'vscode/external/tslib/tslib.es6.js';
|
|
2
|
+
import { Disposable, toDisposable } from 'vscode/vscode/vs/base/common/lifecycle';
|
|
3
|
+
import 'vscode/vscode/vs/base/common/arrays';
|
|
4
|
+
import 'vscode/vscode/vs/base/common/observableInternal/derived';
|
|
5
|
+
import { autorunWithStore } from 'vscode/vscode/vs/base/common/observableInternal/autorun';
|
|
6
|
+
import { observableFromEvent } from 'vscode/vscode/vs/base/common/observableInternal/utils';
|
|
7
|
+
import 'vscode/vscode/vs/base/common/cancellation';
|
|
8
|
+
import { AccessibilitySignal } from 'vscode/vscode/vs/platform/accessibilitySignal/browser/accessibilitySignalService';
|
|
9
|
+
import { IAccessibilitySignalService } from 'vscode/vscode/vs/platform/accessibilitySignal/browser/accessibilitySignalService.service';
|
|
10
|
+
import { IDebugService } from 'vscode/vscode/vs/workbench/contrib/debug/common/debug.service';
|
|
11
|
+
|
|
12
|
+
let AccessibilitySignalLineDebuggerContribution = class AccessibilitySignalLineDebuggerContribution extends Disposable {
|
|
13
|
+
constructor(debugService, accessibilitySignalService) {
|
|
14
|
+
super();
|
|
15
|
+
this.accessibilitySignalService = accessibilitySignalService;
|
|
16
|
+
const isEnabled = observableFromEvent(accessibilitySignalService.onSoundEnabledChanged(AccessibilitySignal.onDebugBreak), () => accessibilitySignalService.isSoundEnabled(AccessibilitySignal.onDebugBreak));
|
|
17
|
+
this._register(autorunWithStore((reader, store) => {
|
|
18
|
+
if (!isEnabled.read(reader)) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const sessionDisposables = ( new Map());
|
|
22
|
+
store.add(toDisposable(() => {
|
|
23
|
+
sessionDisposables.forEach(d => d.dispose());
|
|
24
|
+
sessionDisposables.clear();
|
|
25
|
+
}));
|
|
26
|
+
store.add(debugService.onDidNewSession((session) => sessionDisposables.set(session, this.handleSession(session))));
|
|
27
|
+
store.add(debugService.onDidEndSession(({ session }) => {
|
|
28
|
+
sessionDisposables.get(session)?.dispose();
|
|
29
|
+
sessionDisposables.delete(session);
|
|
30
|
+
}));
|
|
31
|
+
debugService
|
|
32
|
+
.getModel()
|
|
33
|
+
.getSessions()
|
|
34
|
+
.forEach((session) => sessionDisposables.set(session, this.handleSession(session)));
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
handleSession(session) {
|
|
38
|
+
return session.onDidChangeState(e => {
|
|
39
|
+
const stoppedDetails = session.getStoppedDetails();
|
|
40
|
+
const BREAKPOINT_STOP_REASON = 'breakpoint';
|
|
41
|
+
if (stoppedDetails && stoppedDetails.reason === BREAKPOINT_STOP_REASON) {
|
|
42
|
+
this.accessibilitySignalService.playSignal(AccessibilitySignal.onDebugBreak);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
AccessibilitySignalLineDebuggerContribution = ( __decorate([
|
|
48
|
+
( __param(0, IDebugService)),
|
|
49
|
+
( __param(1, IAccessibilitySignalService))
|
|
50
|
+
], AccessibilitySignalLineDebuggerContribution));
|
|
51
|
+
|
|
52
|
+
export { AccessibilitySignalLineDebuggerContribution };
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { Codicon } from 'vscode/vscode/vs/base/common/codicons';
|
|
2
|
+
import { ThemeIcon } from 'vscode/vscode/vs/base/common/themables';
|
|
3
|
+
import { localize2WithPath, localizeWithPath } from 'vscode/vscode/vs/nls';
|
|
4
|
+
import { IAccessibilityService } from 'vscode/vscode/vs/platform/accessibility/common/accessibility.service';
|
|
5
|
+
import { Action2 } from 'vscode/vscode/vs/platform/actions/common/actions';
|
|
6
|
+
import { AccessibilitySignal, AcknowledgeDocCommentsToken } from 'vscode/vscode/vs/platform/accessibilitySignal/browser/accessibilitySignalService';
|
|
7
|
+
import { IAccessibilitySignalService } from 'vscode/vscode/vs/platform/accessibilitySignal/browser/accessibilitySignalService.service';
|
|
8
|
+
import { IConfigurationService } from 'vscode/vscode/vs/platform/configuration/common/configuration.service';
|
|
9
|
+
import { IQuickInputService } from 'vscode/vscode/vs/platform/quickinput/common/quickInput.service';
|
|
10
|
+
import { IPreferencesService } from 'vscode/vscode/vs/workbench/services/preferences/common/preferences.service';
|
|
11
|
+
|
|
12
|
+
const _moduleId = "vs/workbench/contrib/accessibilitySignals/browser/commands";
|
|
13
|
+
class ShowSignalSoundHelp extends Action2 {
|
|
14
|
+
static { this.ID = 'signals.sounds.help'; }
|
|
15
|
+
constructor() {
|
|
16
|
+
super({
|
|
17
|
+
id: ShowSignalSoundHelp.ID,
|
|
18
|
+
title: ( localize2WithPath(_moduleId, 0, "Help: List Signal Sounds")),
|
|
19
|
+
f1: true,
|
|
20
|
+
metadata: {
|
|
21
|
+
description: ( localizeWithPath(
|
|
22
|
+
_moduleId,
|
|
23
|
+
1,
|
|
24
|
+
"List all accessibility sounds, noises, or audio cues and configure their settings"
|
|
25
|
+
))
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
async run(accessor) {
|
|
30
|
+
const accessibilitySignalService = accessor.get(IAccessibilitySignalService);
|
|
31
|
+
const quickInputService = accessor.get(IQuickInputService);
|
|
32
|
+
const configurationService = accessor.get(IConfigurationService);
|
|
33
|
+
const accessibilityService = accessor.get(IAccessibilityService);
|
|
34
|
+
const preferencesService = accessor.get(IPreferencesService);
|
|
35
|
+
const userGestureSignals = [AccessibilitySignal.save, AccessibilitySignal.format];
|
|
36
|
+
const items = ( (AccessibilitySignal.allAccessibilitySignals.map((signal, idx) => ({
|
|
37
|
+
label: userGestureSignals.includes(signal) ? `${signal.name} (${configurationService.getValue(signal.settingsKey + '.sound')})` : signal.name,
|
|
38
|
+
signal,
|
|
39
|
+
buttons: userGestureSignals.includes(signal) ? [{
|
|
40
|
+
iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
|
|
41
|
+
tooltip: ( localizeWithPath(_moduleId, 2, 'Configure Sound')),
|
|
42
|
+
alwaysVisible: true
|
|
43
|
+
}] : []
|
|
44
|
+
})))).sort((a, b) => a.label.localeCompare(b.label));
|
|
45
|
+
const qp = quickInputService.createQuickPick();
|
|
46
|
+
qp.items = items;
|
|
47
|
+
qp.selectedItems = items.filter(i => accessibilitySignalService.isSoundEnabled(i.signal) || userGestureSignals.includes(i.signal) && configurationService.getValue(i.signal.settingsKey + '.sound') !== 'never');
|
|
48
|
+
qp.onDidAccept(() => {
|
|
49
|
+
const enabledSounds = ( (qp.selectedItems.map(i => i.signal)));
|
|
50
|
+
const disabledSounds = ( (qp.items.map(i => i.signal))).filter(i => !enabledSounds.includes(i));
|
|
51
|
+
for (const signal of enabledSounds) {
|
|
52
|
+
let { sound, announcement } = configurationService.getValue(signal.settingsKey);
|
|
53
|
+
sound = userGestureSignals.includes(signal) ? 'userGesture' : accessibilityService.isScreenReaderOptimized() ? 'auto' : 'on';
|
|
54
|
+
if (announcement) {
|
|
55
|
+
configurationService.updateValue(signal.settingsKey, { sound, announcement });
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
configurationService.updateValue(signal.settingsKey, { sound });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
for (const signal of disabledSounds) {
|
|
62
|
+
const announcement = configurationService.getValue(signal.settingsKey + '.announcement');
|
|
63
|
+
const sound = getDisabledSettingValue(userGestureSignals.includes(signal), accessibilityService.isScreenReaderOptimized());
|
|
64
|
+
const value = announcement ? { sound, announcement } : { sound };
|
|
65
|
+
configurationService.updateValue(signal.settingsKey, value);
|
|
66
|
+
}
|
|
67
|
+
qp.hide();
|
|
68
|
+
});
|
|
69
|
+
qp.onDidTriggerItemButton(e => {
|
|
70
|
+
preferencesService.openUserSettings({ jsonEditor: true, revealSetting: { key: e.item.signal.settingsKey, edit: true } });
|
|
71
|
+
});
|
|
72
|
+
qp.onDidChangeActive(() => {
|
|
73
|
+
accessibilitySignalService.playSound(qp.activeItems[0].signal.sound.getSound(true), true, AcknowledgeDocCommentsToken);
|
|
74
|
+
});
|
|
75
|
+
qp.placeholder = ( localizeWithPath(_moduleId, 3, 'Select a sound to play and configure'));
|
|
76
|
+
qp.canSelectMany = true;
|
|
77
|
+
await qp.show();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function getDisabledSettingValue(isUserGestureSignal, isScreenReaderOptimized) {
|
|
81
|
+
return isScreenReaderOptimized ? (isUserGestureSignal ? 'never' : 'off') : (isUserGestureSignal ? 'never' : 'auto');
|
|
82
|
+
}
|
|
83
|
+
class ShowAccessibilityAnnouncementHelp extends Action2 {
|
|
84
|
+
static { this.ID = 'accessibility.announcement.help'; }
|
|
85
|
+
constructor() {
|
|
86
|
+
super({
|
|
87
|
+
id: ShowAccessibilityAnnouncementHelp.ID,
|
|
88
|
+
title: ( localize2WithPath(_moduleId, 4, "Help: List Signal Announcements")),
|
|
89
|
+
f1: true,
|
|
90
|
+
metadata: {
|
|
91
|
+
description: ( localizeWithPath(
|
|
92
|
+
_moduleId,
|
|
93
|
+
5,
|
|
94
|
+
"List all accessibility announcements, alerts, braille messages, and configure their settings"
|
|
95
|
+
))
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
async run(accessor) {
|
|
100
|
+
const accessibilitySignalService = accessor.get(IAccessibilitySignalService);
|
|
101
|
+
const quickInputService = accessor.get(IQuickInputService);
|
|
102
|
+
const configurationService = accessor.get(IConfigurationService);
|
|
103
|
+
const accessibilityService = accessor.get(IAccessibilityService);
|
|
104
|
+
const preferencesService = accessor.get(IPreferencesService);
|
|
105
|
+
const userGestureSignals = [AccessibilitySignal.save, AccessibilitySignal.format];
|
|
106
|
+
const items = ( (AccessibilitySignal.allAccessibilitySignals.filter(c => !!c.legacyAnnouncementSettingsKey).map((signal, idx) => ({
|
|
107
|
+
label: userGestureSignals.includes(signal) ? `${signal.name} (${configurationService.getValue(signal.settingsKey + '.announcement')})` : signal.name,
|
|
108
|
+
signal,
|
|
109
|
+
buttons: userGestureSignals.includes(signal) ? [{
|
|
110
|
+
iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
|
|
111
|
+
tooltip: ( localizeWithPath(_moduleId, 6, 'Configure Announcement')),
|
|
112
|
+
alwaysVisible: true,
|
|
113
|
+
}] : []
|
|
114
|
+
})))).sort((a, b) => a.label.localeCompare(b.label));
|
|
115
|
+
const qp = quickInputService.createQuickPick();
|
|
116
|
+
qp.items = items;
|
|
117
|
+
qp.selectedItems = items.filter(i => accessibilitySignalService.isAnnouncementEnabled(i.signal) || userGestureSignals.includes(i.signal) && configurationService.getValue(i.signal.settingsKey + '.announcement') !== 'never');
|
|
118
|
+
const screenReaderOptimized = accessibilityService.isScreenReaderOptimized();
|
|
119
|
+
qp.onDidAccept(() => {
|
|
120
|
+
if (!screenReaderOptimized) {
|
|
121
|
+
qp.hide();
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const enabledAnnouncements = ( (qp.selectedItems.map(i => i.signal)));
|
|
125
|
+
const disabledAnnouncements = AccessibilitySignal.allAccessibilitySignals.filter(cue => !!cue.legacyAnnouncementSettingsKey && !enabledAnnouncements.includes(cue));
|
|
126
|
+
for (const signal of enabledAnnouncements) {
|
|
127
|
+
let { sound, announcement } = configurationService.getValue(signal.settingsKey);
|
|
128
|
+
announcement = userGestureSignals.includes(signal) ? 'userGesture' : signal.announcementMessage && accessibilityService.isScreenReaderOptimized() ? 'auto' : undefined;
|
|
129
|
+
configurationService.updateValue(signal.settingsKey, { sound, announcement });
|
|
130
|
+
}
|
|
131
|
+
for (const signal of disabledAnnouncements) {
|
|
132
|
+
const announcement = getDisabledSettingValue(userGestureSignals.includes(signal), true);
|
|
133
|
+
const sound = configurationService.getValue(signal.settingsKey + '.sound');
|
|
134
|
+
const value = announcement ? { sound, announcement } : { sound };
|
|
135
|
+
configurationService.updateValue(signal.settingsKey, value);
|
|
136
|
+
}
|
|
137
|
+
qp.hide();
|
|
138
|
+
});
|
|
139
|
+
qp.onDidTriggerItemButton(e => {
|
|
140
|
+
preferencesService.openUserSettings({ jsonEditor: true, revealSetting: { key: e.item.signal.settingsKey, edit: true } });
|
|
141
|
+
});
|
|
142
|
+
qp.placeholder = screenReaderOptimized ? ( localizeWithPath(_moduleId, 7, 'Select an announcement to configure')) : ( localizeWithPath(
|
|
143
|
+
_moduleId,
|
|
144
|
+
8,
|
|
145
|
+
'Screen reader is not active, announcements are disabled by default.'
|
|
146
|
+
));
|
|
147
|
+
qp.canSelectMany = true;
|
|
148
|
+
await qp.show();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export { ShowAccessibilityAnnouncementHelp, ShowSignalSoundHelp };
|