@codingame/monaco-vscode-accessibility-service-override 37.2.0 → 37.3.1

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/index.js CHANGED
@@ -13,6 +13,7 @@ import { AccessibilityService } from '@codingame/monaco-vscode-api/vscode/vs/pla
13
13
  import { registerAssets } from '@codingame/monaco-vscode-api/assets';
14
14
  import './vscode/src/vs/workbench/contrib/accessibility/browser/accessibility.contribution.js';
15
15
  import './vscode/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.js';
16
+ import './vscode/src/vs/workbench/contrib/codeEditor/browser/editorFindAccessibilityHelp.js';
16
17
  import './vscode/src/vs/workbench/contrib/accessibilitySignals/browser/accessibilitySignal.contribution.js';
17
18
 
18
19
  registerAssets(audioAssets);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codingame/monaco-vscode-accessibility-service-override",
3
- "version": "37.2.0",
3
+ "version": "37.3.1",
4
4
  "private": false,
5
5
  "description": "VSCode public API plugged on the monaco editor - accessibility service-override",
6
6
  "keywords": [],
@@ -15,7 +15,7 @@
15
15
  },
16
16
  "type": "module",
17
17
  "dependencies": {
18
- "@codingame/monaco-vscode-api": "37.2.0",
18
+ "@codingame/monaco-vscode-api": "37.3.1",
19
19
  "marked": "14.0.0"
20
20
  },
21
21
  "main": "index.js",
@@ -53,21 +53,21 @@ let AccessibilityStatus = class AccessibilityStatus extends Disposable {
53
53
  }
54
54
  showScreenReaderNotification() {
55
55
  this.screenReaderNotification = this.notificationService.prompt(Severity.Info, ( localize(
56
- 5056,
56
+ 7028,
57
57
  "Screen reader usage detected. Do you want to enable {0} to optimize the editor for screen reader usage?",
58
58
  "editor.accessibilitySupport"
59
59
  )), [{
60
- label: ( localize(5057, "Yes")),
60
+ label: ( localize(7029, "Yes")),
61
61
  run: () => {
62
62
  this.configurationService.updateValue("editor.accessibilitySupport", "on", ConfigurationTarget.USER);
63
63
  }
64
64
  }, {
65
- label: ( localize(5058, "No")),
65
+ label: ( localize(7030, "No")),
66
66
  run: () => {
67
67
  this.configurationService.updateValue("editor.accessibilitySupport", "off", ConfigurationTarget.USER);
68
68
  }
69
69
  }, {
70
- label: ( localize(5059, "Learn More")),
70
+ label: ( localize(7031, "Learn More")),
71
71
  run: () => {
72
72
  this.openerService.open("https://code.visualstudio.com/docs/editor/accessibility#_screen-readers");
73
73
  }
@@ -80,9 +80,9 @@ let AccessibilityStatus = class AccessibilityStatus extends Disposable {
80
80
  updateScreenReaderModeElement(visible) {
81
81
  if (visible) {
82
82
  if (!this.screenReaderModeElement.value) {
83
- const text = ( localize(5060, "Screen Reader Optimized"));
83
+ const text = ( localize(7032, "Screen Reader Optimized"));
84
84
  this.screenReaderModeElement.value = this.statusbarService.addEntry({
85
- name: ( localize(5061, "Screen Reader Mode")),
85
+ name: ( localize(7033, "Screen Reader Mode")),
86
86
  text,
87
87
  ariaLabel: text,
88
88
  command: "showEditorScreenReaderNotification",
@@ -18,7 +18,7 @@ import { IOpenerService } from "@codingame/monaco-vscode-api/vscode/vs/platform/
18
18
  import { IQuickInputService } from "@codingame/monaco-vscode-api/vscode/vs/platform/quickinput/common/quickInput.service";
19
19
  import { IStorageService } from "@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage.service";
20
20
  import { IChatCodeBlockContextProviderService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chat.service";
21
- import { ICodeBlockActionContext } from "@codingame/monaco-vscode-katex-common/vscode/vs/workbench/contrib/chat/browser/widget/chatContentParts/codeBlockPart";
21
+ import { ICodeBlockActionContext } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/widget/chatContentParts/codeBlockPart";
22
22
  import { AccessibilityVerbositySettingId } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/accessibility/browser/accessibilityConfiguration";
23
23
  export type AccesibleViewContentProvider = AccessibleContentProvider | ExtensionContentProvider;
24
24
  export declare class AccessibleView extends Disposable {
@@ -474,8 +474,8 @@ let AccessibleView = class AccessibleView extends Disposable {
474
474
  const disposables = this._register(( new DisposableStore()));
475
475
  const quickPick = disposables.add(this._quickInputService.createQuickPick());
476
476
  quickPick.items = items;
477
- quickPick.title = ( localize(5062, "Configure keybindings"));
478
- quickPick.placeholder = ( localize(5063, "Select a command ID to configure a keybinding for it"));
477
+ quickPick.title = ( localize(7034, "Configure keybindings"));
478
+ quickPick.placeholder = ( localize(7035, "Select a command ID to configure a keybinding for it"));
479
479
  quickPick.show();
480
480
  disposables.add(quickPick.onDidAccept(async () => {
481
481
  const item = quickPick.selectedItems[0];
@@ -510,7 +510,7 @@ let AccessibleView = class AccessibleView extends Disposable {
510
510
  break;
511
511
  }
512
512
  firstListItem = `- ${firstItem.text}`;
513
- label = ( token.items.map(i => i.text)).join(", ");
513
+ label = token.items.map(i => i.text).join(", ");
514
514
  break;
515
515
  }
516
516
  }
@@ -518,8 +518,8 @@ let AccessibleView = class AccessibleView extends Disposable {
518
518
  if (label) {
519
519
  symbols.push({
520
520
  markdownToParse: label,
521
- label: ( localize(5064, "({0}) {1}", token.type, label)),
522
- ariaLabel: ( localize(5065, "({0}) {1}", token.type, label)),
521
+ label: ( localize(7036, "({0}) {1}", token.type, label)),
522
+ ariaLabel: ( localize(7037, "({0}) {1}", token.type, label)),
523
523
  firstListItem
524
524
  });
525
525
  firstListItem = undefined;
@@ -559,7 +559,7 @@ let AccessibleView = class AccessibleView extends Disposable {
559
559
  }
560
560
  this._configurationService.updateValue(this._currentProvider?.verbositySettingKey, false);
561
561
  alert(( localize(
562
- 5066,
562
+ 7038,
563
563
  "{0} accessibility verbosity is now disabled",
564
564
  this._currentProvider.verbositySettingKey
565
565
  )));
@@ -654,16 +654,16 @@ let AccessibleView = class AccessibleView extends Disposable {
654
654
  const hasActions = this._accessibleViewSupportsNavigation.get() || this._accessibleViewVerbosityEnabled.get() || this._accessibleViewGoToSymbolSupported.get() || provider.actions?.length;
655
655
  if (verbose && !showAccessibleViewHelp && hasActions) {
656
656
  actionsHint = provider.options.position ? ( localize(
657
- 5067,
657
+ 7039,
658
658
  "Explore actions such as disabling this hint (Shift+Tab), use Escape to exit this dialog."
659
- )) : ( localize(5068, "Explore actions such as disabling this hint (Shift+Tab)."));
659
+ )) : ( localize(7040, "Explore actions such as disabling this hint (Shift+Tab)."));
660
660
  }
661
- let ariaLabel = provider.options.type === AccessibleViewType.Help ? ( localize(5069, "Accessibility Help")) : ( localize(5070, "Accessible View"));
661
+ let ariaLabel = provider.options.type === AccessibleViewType.Help ? ( localize(7041, "Accessibility Help")) : ( localize(7042, "Accessible View"));
662
662
  this._title.textContent = ariaLabel;
663
663
  if (actionsHint && provider.options.type === AccessibleViewType.View) {
664
- ariaLabel = ( localize(5071, "Accessible View, {0}", actionsHint));
664
+ ariaLabel = ( localize(7043, "Accessible View, {0}", actionsHint));
665
665
  } else if (actionsHint) {
666
- ariaLabel = ( localize(5072, "Accessibility Help, {0}", actionsHint));
666
+ ariaLabel = ( localize(7044, "Accessibility Help, {0}", actionsHint));
667
667
  }
668
668
  if (isWindows && widgetIsFocused) {
669
669
  ariaLabel = "";
@@ -767,7 +767,7 @@ let AccessibleView = class AccessibleView extends Disposable {
767
767
  return disposableStore;
768
768
  }
769
769
  _updateToolbar(providedActions, type) {
770
- this._toolbar.setAriaLabel(type === AccessibleViewType.Help ? ( localize(5073, "Accessibility Help")) : ( localize(5074, "Accessible View")));
770
+ this._toolbar.setAriaLabel(type === AccessibleViewType.Help ? ( localize(7045, "Accessibility Help")) : ( localize(7046, "Accessible View")));
771
771
  const toolbarMenu = this._menuService.createMenu(MenuId.AccessibleView, this._contextKeyService);
772
772
  this._toolbarMenu.value = toolbarMenu;
773
773
  const menuActions = getFlatActionBarActions(toolbarMenu.getActions({}));
@@ -864,9 +864,9 @@ let AccessibleView = class AccessibleView extends Disposable {
864
864
  _accessibleViewHelpDialogContent(providerHasSymbols) {
865
865
  const navigationHint = this._navigationHint();
866
866
  const goToSymbolHint = this._goToSymbolHint(providerHasSymbols);
867
- const toolbarHint = ( localize(5075, "Navigate to the toolbar (Shift+Tab)."));
867
+ const toolbarHint = ( localize(7047, "Navigate to the toolbar (Shift+Tab)."));
868
868
  const chatHints = this._getChatHints();
869
- let hint = ( localize(5076, "In the accessible view, you can:\n"));
869
+ let hint = ( localize(7048, "In the accessible view, you can:\n"));
870
870
  if (navigationHint) {
871
871
  hint += " - " + navigationHint + "\n";
872
872
  }
@@ -886,22 +886,22 @@ let AccessibleView = class AccessibleView extends Disposable {
886
886
  return;
887
887
  }
888
888
  return [( localize(
889
- 5077,
889
+ 7049,
890
890
  " - Insert the code block at the cursor{0}.",
891
891
  "<keybinding:workbench.action.chat.insertCodeBlock>"
892
892
  )), ( localize(
893
- 5078,
893
+ 7050,
894
894
  " - Insert the code block into a new file{0}.",
895
895
  "<keybinding:workbench.action.chat.insertIntoNewFile>"
896
896
  )), ( localize(
897
- 5079,
897
+ 7051,
898
898
  " - Run the code block in the terminal{0}.\n",
899
899
  "<keybinding:workbench.action.chat.runInTerminal>"
900
900
  ))].join("\n");
901
901
  }
902
902
  _navigationHint() {
903
903
  return localize(
904
- 5080,
904
+ 7052,
905
905
  "Show the next item{0} or previous item{1}.",
906
906
  `<keybinding:${AccessibilityCommandId.ShowNext}>`,
907
907
  `<keybinding:${AccessibilityCommandId.ShowPrevious}>`
@@ -910,7 +910,7 @@ let AccessibleView = class AccessibleView extends Disposable {
910
910
  _disableVerbosityHint(provider) {
911
911
  if (provider.options.type === AccessibleViewType.Help && this._verbosityEnabled()) {
912
912
  return localize(
913
- 5081,
913
+ 7053,
914
914
  "\nDisable accessibility verbosity for this feature{0}.",
915
915
  `<keybinding:${AccessibilityCommandId.DisableVerbosityHint}>`
916
916
  );
@@ -922,7 +922,7 @@ let AccessibleView = class AccessibleView extends Disposable {
922
922
  return;
923
923
  }
924
924
  return localize(
925
- 5082,
925
+ 7054,
926
926
  "Go to a symbol{0}.",
927
927
  `<keybinding:${AccessibilityCommandId.GoToSymbol}>`
928
928
  );
@@ -931,7 +931,7 @@ let AccessibleView = class AccessibleView extends Disposable {
931
931
  const configureKb = this._keybindingService.lookupKeybinding(AccessibilityCommandId.AccessibilityHelpConfigureKeybindings)?.getAriaLabel();
932
932
  const keybindingToConfigureQuickPick = configureKb ? "(" + configureKb + ")" : "by assigning a keybinding to the command Accessibility Help Configure Unassigned Keybindings.";
933
933
  return localize(
934
- 5083,
934
+ 7055,
935
935
  "\nConfigure keybindings for commands that lack them {0}.",
936
936
  keybindingToConfigureQuickPick
937
937
  );
@@ -940,7 +940,7 @@ let AccessibleView = class AccessibleView extends Disposable {
940
940
  const configureKb = this._keybindingService.lookupKeybinding(AccessibilityCommandId.AccessibilityHelpConfigureAssignedKeybindings)?.getAriaLabel();
941
941
  const keybindingToConfigureQuickPick = configureKb ? "(" + configureKb + ")" : "by assigning a keybinding to the command Accessibility Help Configure Assigned Keybindings.";
942
942
  return localize(
943
- 5084,
943
+ 7056,
944
944
  "\nConfigure keybindings for commands that already have assignments {0}.",
945
945
  keybindingToConfigureQuickPick
946
946
  );
@@ -959,11 +959,11 @@ let AccessibleView = class AccessibleView extends Disposable {
959
959
  return screenReaderModeHint;
960
960
  }
961
961
  _exitDialogHint(provider) {
962
- return this._verbosityEnabled() && !provider.options.position ? ( localize(5085, "\nExit this dialog (Escape).")) : "";
962
+ return this._verbosityEnabled() && !provider.options.position ? ( localize(7057, "\nExit this dialog (Escape).")) : "";
963
963
  }
964
964
  _readMoreHint(provider) {
965
965
  return provider.options.readMoreUrl ? ( localize(
966
- 5086,
966
+ 7058,
967
967
  "\nOpen a browser window with more information related to accessibility{0}.",
968
968
  `<keybinding:${AccessibilityCommandId.AccessibilityHelpOpenHelpLink}>`
969
969
  )) : "";
@@ -1008,10 +1008,10 @@ let AccessibleViewService = class AccessibleViewService extends Disposable {
1008
1008
  const keybinding = this._keybindingService.lookupKeybinding(AccessibilityCommandId.OpenAccessibleView)?.getAriaLabel();
1009
1009
  let hint = null;
1010
1010
  if (keybinding) {
1011
- hint = ( localize(5087, "Inspect this in the accessible view with {0}", keybinding));
1011
+ hint = ( localize(7059, "Inspect this in the accessible view with {0}", keybinding));
1012
1012
  } else {
1013
1013
  hint = ( localize(
1014
- 5088,
1014
+ 7060,
1015
1015
  "Inspect this in the accessible view via the command Open Accessible View which is currently not triggerable via keybinding."
1016
1016
  ));
1017
1017
  }
@@ -1049,8 +1049,8 @@ let AccessibleViewSymbolQuickPick = class AccessibleViewSymbolQuickPick {
1049
1049
  show(provider) {
1050
1050
  const disposables = ( new DisposableStore());
1051
1051
  const quickPick = disposables.add(this._quickInputService.createQuickPick());
1052
- quickPick.placeholder = ( localize(5089, "Type to search symbols"));
1053
- quickPick.title = ( localize(5090, "Go to Symbol Accessible View"));
1052
+ quickPick.placeholder = ( localize(7061, "Type to search symbols"));
1053
+ quickPick.title = ( localize(7062, "Go to Symbol Accessible View"));
1054
1054
  const picks = [];
1055
1055
  const symbols = this._accessibleView.getSymbols();
1056
1056
  if (!symbols) {
@@ -18,11 +18,11 @@ class ShowSignalSoundHelp extends Action2 {
18
18
  constructor() {
19
19
  super({
20
20
  id: ShowSignalSoundHelp.ID,
21
- title: ( localize2(5103, "Help: List Signal Sounds")),
21
+ title: ( localize2(7075, "Help: List Signal Sounds")),
22
22
  f1: true,
23
23
  metadata: {
24
24
  description: ( localize(
25
- 5104,
25
+ 7076,
26
26
  "List all accessibility sounds, noises, or audio cues and configure their settings"
27
27
  ))
28
28
  }
@@ -35,15 +35,15 @@ class ShowSignalSoundHelp extends Action2 {
35
35
  const accessibilityService = accessor.get(IAccessibilityService);
36
36
  const preferencesService = accessor.get(IPreferencesService);
37
37
  const userGestureSignals = [AccessibilitySignal.save, AccessibilitySignal.format];
38
- const items = ( AccessibilitySignal.allAccessibilitySignals.map((signal, idx) => ({
38
+ const items = AccessibilitySignal.allAccessibilitySignals.map((signal, idx) => ({
39
39
  label: userGestureSignals.includes(signal) ? `${signal.name} (${configurationService.getValue(signal.settingsKey + ".sound")})` : signal.name,
40
40
  signal,
41
41
  buttons: userGestureSignals.includes(signal) ? [{
42
42
  iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
43
- tooltip: ( localize(5105, "Configure Sound")),
43
+ tooltip: ( localize(7077, "Configure Sound")),
44
44
  alwaysVisible: true
45
45
  }] : []
46
- }))).sort((a, b) => a.label.localeCompare(b.label));
46
+ })).sort((a, b) => a.label.localeCompare(b.label));
47
47
  const disposables = ( new DisposableStore());
48
48
  const qp = disposables.add(quickInputService.createQuickPick());
49
49
  qp.items = items;
@@ -51,8 +51,8 @@ class ShowSignalSoundHelp extends Action2 {
51
51
  i => accessibilitySignalService.isSoundEnabled(i.signal) || userGestureSignals.includes(i.signal) && configurationService.getValue(i.signal.settingsKey + ".sound") !== "never"
52
52
  );
53
53
  disposables.add(qp.onDidAccept(() => {
54
- const enabledSounds = ( qp.selectedItems.map(i => i.signal));
55
- const disabledSounds = ( qp.items.map(i => i.signal)).filter(i => !enabledSounds.includes(i));
54
+ const enabledSounds = qp.selectedItems.map(i => i.signal);
55
+ const disabledSounds = qp.items.map(i => i.signal).filter(i => !enabledSounds.includes(i));
56
56
  for (const signal of enabledSounds) {
57
57
  let {
58
58
  sound,
@@ -103,7 +103,7 @@ class ShowSignalSoundHelp extends Action2 {
103
103
  );
104
104
  }));
105
105
  disposables.add(qp.onDidHide(() => disposables.dispose()));
106
- qp.placeholder = ( localize(5106, "Select a sound to play and configure"));
106
+ qp.placeholder = ( localize(7078, "Select a sound to play and configure"));
107
107
  qp.canSelectMany = true;
108
108
  await qp.show();
109
109
  }
@@ -118,11 +118,11 @@ class ShowAccessibilityAnnouncementHelp extends Action2 {
118
118
  constructor() {
119
119
  super({
120
120
  id: ShowAccessibilityAnnouncementHelp.ID,
121
- title: ( localize2(5107, "Help: List Signal Announcements")),
121
+ title: ( localize2(7079, "Help: List Signal Announcements")),
122
122
  f1: true,
123
123
  metadata: {
124
124
  description: ( localize(
125
- 5108,
125
+ 7080,
126
126
  "List all accessibility announcements, alerts, braille messages, and configure their settings"
127
127
  ))
128
128
  }
@@ -135,15 +135,15 @@ class ShowAccessibilityAnnouncementHelp extends Action2 {
135
135
  const accessibilityService = accessor.get(IAccessibilityService);
136
136
  const preferencesService = accessor.get(IPreferencesService);
137
137
  const userGestureSignals = [AccessibilitySignal.save, AccessibilitySignal.format];
138
- const items = ( AccessibilitySignal.allAccessibilitySignals.filter(c => !!c.legacyAnnouncementSettingsKey).map((signal, idx) => ({
138
+ const items = AccessibilitySignal.allAccessibilitySignals.filter(c => !!c.legacyAnnouncementSettingsKey).map((signal, idx) => ({
139
139
  label: userGestureSignals.includes(signal) ? `${signal.name} (${configurationService.getValue(signal.settingsKey + ".announcement")})` : signal.name,
140
140
  signal,
141
141
  buttons: userGestureSignals.includes(signal) ? [{
142
142
  iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
143
- tooltip: ( localize(5109, "Configure Announcement")),
143
+ tooltip: ( localize(7081, "Configure Announcement")),
144
144
  alwaysVisible: true
145
145
  }] : []
146
- }))).sort((a, b) => a.label.localeCompare(b.label));
146
+ })).sort((a, b) => a.label.localeCompare(b.label));
147
147
  const disposables = ( new DisposableStore());
148
148
  const qp = disposables.add(quickInputService.createQuickPick());
149
149
  qp.items = items;
@@ -156,7 +156,7 @@ class ShowAccessibilityAnnouncementHelp extends Action2 {
156
156
  qp.hide();
157
157
  return;
158
158
  }
159
- const enabledAnnouncements = ( qp.selectedItems.map(i => i.signal));
159
+ const enabledAnnouncements = qp.selectedItems.map(i => i.signal);
160
160
  const disabledAnnouncements = AccessibilitySignal.allAccessibilitySignals.filter(
161
161
  cue => !!cue.legacyAnnouncementSettingsKey && !enabledAnnouncements.includes(cue)
162
162
  );
@@ -194,8 +194,8 @@ class ShowAccessibilityAnnouncementHelp extends Action2 {
194
194
  });
195
195
  }));
196
196
  disposables.add(qp.onDidHide(() => disposables.dispose()));
197
- qp.placeholder = screenReaderOptimized ? ( localize(5110, "Select an announcement to configure")) : ( localize(
198
- 5111,
197
+ qp.placeholder = screenReaderOptimized ? ( localize(7082, "Select an announcement to configure")) : ( localize(
198
+ 7083,
199
199
  "Screen reader is not active, announcements are disabled by default."
200
200
  ));
201
201
  qp.canSelectMany = true;
@@ -63,10 +63,10 @@ let EditorTextPropertySignalsContribution = class EditorTextPropertySignalsContr
63
63
  let lastLine = -1;
64
64
  const ignoredLineSignalsForCurrentLine = ( new Set());
65
65
  const timeouts = store.add(( new DisposableStore()));
66
- const propertySources = ( this._textProperties.map(p => ({
66
+ const propertySources = this._textProperties.map(p => ({
67
67
  source: p.createSource(editor, editorModel),
68
68
  property: p
69
- })));
69
+ }));
70
70
  const didType = wasEventTriggeredRecently(editor.onDidChangeModelContent, 100, store);
71
71
  store.add(editor.onDidChangeCursorPosition(args => {
72
72
  timeouts.clear();
@@ -41,7 +41,7 @@ let DiffEditorActiveAnnouncementContribution = class DiffEditorActiveAnnouncemen
41
41
  }
42
42
  this._onDidActiveEditorChangeListener = this._register(this._editorService.onDidActiveEditorChange(() => {
43
43
  if (isDiffEditor(this._editorService.activeTextEditorControl)) {
44
- this._accessibilityService.alert(( localize(5112, "Diff editor")));
44
+ this._accessibilityService.alert(( localize(7084, "Diff editor")));
45
45
  }
46
46
  }));
47
47
  }
@@ -17,15 +17,15 @@ import { CursorColumns } from '@codingame/monaco-vscode-api/vscode/vs/editor/com
17
17
  import { EditorContextKeys } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/editorContextKeys';
18
18
  import { ContextKeyExpr } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey';
19
19
 
20
- registerCss(accessibility);
20
+ registerCss(accessibility, 1);
21
21
  class ToggleScreenReaderMode extends Action2 {
22
22
  constructor() {
23
23
  super({
24
24
  id: "editor.action.toggleScreenReaderAccessibilityMode",
25
- title: ( localize2(10976, "Toggle Screen Reader Accessibility Mode")),
25
+ title: ( localize2(12975, "Toggle Screen Reader Accessibility Mode")),
26
26
  metadata: {
27
27
  description: ( localize2(
28
- 10977,
28
+ 12976,
29
29
  "Toggles an optimized mode for usage with screen readers, braille devices, and other assistive technologies."
30
30
  ))
31
31
  },
@@ -62,11 +62,11 @@ class AnnounceCursorPosition extends Action2 {
62
62
  constructor() {
63
63
  super({
64
64
  id: "editor.action.announceCursorPosition",
65
- title: ( localize2(10978, "Announce Cursor Position")),
65
+ title: ( localize2(12977, "Announce Cursor Position")),
66
66
  f1: true,
67
67
  metadata: {
68
68
  description: ( localize2(
69
- 10979,
69
+ 12978,
70
70
  "Announce the current cursor position (line and column) via screen reader."
71
71
  ))
72
72
  },
@@ -91,7 +91,7 @@ class AnnounceCursorPosition extends Action2 {
91
91
  const tabSize = model.getOptions().tabSize;
92
92
  const lineContent = model.getLineContent(position.lineNumber);
93
93
  const visibleColumn = CursorColumns.visibleColumnFromColumn(lineContent, position.column, tabSize) + 1;
94
- alert(( localize(10980, "Line {0}, Column {1}", position.lineNumber, visibleColumn)));
94
+ alert(( localize(12979, "Line {0}, Column {1}", position.lineNumber, visibleColumn)));
95
95
  }
96
96
  }
97
97
  registerAction2(AnnounceCursorPosition);
@@ -0,0 +1,75 @@
1
+ import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
2
+ import { CommonFindController } from "@codingame/monaco-vscode-api/vscode/vs/editor/contrib/find/browser/findController";
3
+ import { AccessibleViewProviderId, AccessibleViewType, IAccessibleViewContentProvider, IAccessibleViewOptions } from "@codingame/monaco-vscode-api/vscode/vs/platform/accessibility/browser/accessibleView";
4
+ import { IAccessibleViewImplementation } from "@codingame/monaco-vscode-api/vscode/vs/platform/accessibility/browser/accessibleViewRegistry";
5
+ import { ServicesAccessor } from "@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation";
6
+ import { AccessibilityVerbositySettingId } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/accessibility/browser/accessibilityConfiguration";
7
+ /**
8
+ * Accessible view implementation for Find and Replace help in the code editor.
9
+ * Provides comprehensive accessibility support for the Find dialog, including:
10
+ * - Search status information (current term, match count, position)
11
+ * - Navigation instructions for keyboard control
12
+ * - Focus behavior explanation
13
+ * - Available settings and options
14
+ * - Platform-specific guidance
15
+ *
16
+ * Activated via Alt+F1 when any element in the Find widget is focused.
17
+ */
18
+ export declare class EditorFindAccessibilityHelp implements IAccessibleViewImplementation {
19
+ readonly priority = 105;
20
+ readonly name = "editor-find";
21
+ readonly when: import("@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey").RawContextKey<boolean>;
22
+ readonly type = AccessibleViewType.Help;
23
+ /**
24
+ * Creates an accessible view content provider for the active code editor's Find/Replace dialog.
25
+ * @param accessor Service accessor for retrieving the code editor service
26
+ * @returns The provider instance, or undefined if no active editor or find controller is found
27
+ */
28
+ getProvider(accessor: ServicesAccessor): EditorFindAccessibilityHelpProvider | undefined;
29
+ }
30
+ /**
31
+ * Content provider for the Find and Replace accessibility help.
32
+ * Generates localized, context-aware help information based on the current Find state.
33
+ *
34
+ * The implementation:
35
+ * - Adapts content based on whether Replace mode is active
36
+ * - Provides current search status (term, match count, position)
37
+ * - Explains focus behavior (how focus moves between Find input, Replace input, and editor)
38
+ * - Lists keyboard navigation shortcuts for different contexts
39
+ * - Documents available Find and Replace options
40
+ * - References relevant settings that affect Find behavior
41
+ * - Includes platform-specific guidance where applicable
42
+ */
43
+ declare class EditorFindAccessibilityHelpProvider extends Disposable implements IAccessibleViewContentProvider {
44
+ private readonly _findController;
45
+ readonly id = AccessibleViewProviderId.EditorFindHelp;
46
+ readonly verbositySettingKey = AccessibilityVerbositySettingId.Find;
47
+ readonly options: IAccessibleViewOptions;
48
+ constructor(_findController: CommonFindController);
49
+ /**
50
+ * Returns focus to the last focused element in the Find widget when the accessibility help is closed.
51
+ * This handles focus restoration for any element (inputs, checkboxes, buttons) not just the text inputs.
52
+ */
53
+ onClose(): void;
54
+ /**
55
+ * Generates the complete accessibility help content for Find and Replace.
56
+ * The content structure varies based on whether Replace mode is visible:
57
+ *
58
+ * Replace Mode Content:
59
+ * - Header identifying the dialog
60
+ * - Context explaining what the dialog does
61
+ * - Current search and replace status
62
+ * - Focus behavior explanation
63
+ * - Keyboard shortcuts for Find, Replace, and Editor contexts
64
+ * - Find and Replace options explanation
65
+ * - Configurable settings documentation
66
+ * - Platform-specific settings (macOS)
67
+ *
68
+ * Find-Only Mode Content:
69
+ * - Similar structure but without Replace-specific sections
70
+ *
71
+ * @returns The complete help text as a newline-joined string for audio announcement
72
+ */
73
+ provideContent(): string;
74
+ }
75
+ export {};
@@ -0,0 +1,442 @@
1
+
2
+ import { Disposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
3
+ import { isMacintosh } from '@codingame/monaco-vscode-api/vscode/vs/base/common/platform';
4
+ import { ICodeEditorService } from '@codingame/monaco-vscode-api/vscode/vs/editor/browser/services/codeEditorService.service';
5
+ import { CommonFindController } from '@codingame/monaco-vscode-api/vscode/vs/editor/contrib/find/browser/findController';
6
+ import { CONTEXT_FIND_WIDGET_FOCUSED } from '@codingame/monaco-vscode-api/vscode/vs/editor/contrib/find/browser/findModel';
7
+ import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
8
+ import { AccessibleViewType, AccessibleViewProviderId } from '@codingame/monaco-vscode-api/vscode/vs/platform/accessibility/browser/accessibleView';
9
+ import { AccessibleViewRegistry } from '@codingame/monaco-vscode-api/vscode/vs/platform/accessibility/browser/accessibleViewRegistry';
10
+ import { AccessibilityVerbositySettingId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/accessibility/browser/accessibilityConfiguration';
11
+
12
+ class EditorFindAccessibilityHelp {
13
+ constructor() {
14
+ this.priority = 105;
15
+ this.name = "editor-find";
16
+ this.when = CONTEXT_FIND_WIDGET_FOCUSED;
17
+ this.type = AccessibleViewType.Help;
18
+ }
19
+ getProvider(accessor) {
20
+ const codeEditorService = accessor.get(ICodeEditorService);
21
+ const codeEditor = codeEditorService.getActiveCodeEditor() || codeEditorService.getFocusedCodeEditor();
22
+ if (!codeEditor) {
23
+ return;
24
+ }
25
+ const findController = CommonFindController.get(codeEditor);
26
+ if (!findController) {
27
+ return;
28
+ }
29
+ return ( new EditorFindAccessibilityHelpProvider(findController));
30
+ }
31
+ }
32
+ class EditorFindAccessibilityHelpProvider extends Disposable {
33
+ constructor(_findController) {
34
+ super();
35
+ this._findController = _findController;
36
+ this.id = AccessibleViewProviderId.EditorFindHelp;
37
+ this.verbositySettingKey = AccessibilityVerbositySettingId.Find;
38
+ this.options = {
39
+ type: AccessibleViewType.Help
40
+ };
41
+ }
42
+ onClose() {
43
+ this._findController.focusLastElement();
44
+ }
45
+ provideContent() {
46
+ const state = this._findController.getState();
47
+ const isReplaceVisible = state.isReplaceRevealed;
48
+ const searchString = state.searchString;
49
+ const matchCount = state.matchesCount;
50
+ const matchPosition = state.matchesPosition;
51
+ const content = [];
52
+ if (isReplaceVisible) {
53
+ content.push(( localize(12994, "Accessibility Help: Editor Find and Replace")));
54
+ content.push(( localize(
55
+ 12995,
56
+ "You are in the Find and Replace dialog for the active editor. This dialog lets you locate text and replace it. The editor is a separate surface that shows each match and the surrounding context."
57
+ )));
58
+ content.push("");
59
+ content.push(( localize(12996, "Current Search Status:")));
60
+ if (searchString) {
61
+ content.push(( localize(12997, "You are searching for: \"{0}\".", searchString)));
62
+ if (matchCount !== undefined && matchPosition !== undefined) {
63
+ if (matchCount === 0) {
64
+ content.push(( localize(
65
+ 12998,
66
+ "No matches found in the current file. Try adjusting your search text or the options below."
67
+ )));
68
+ } else {
69
+ content.push(( localize(12999, "Match {0} of {1}.", matchPosition, matchCount)));
70
+ }
71
+ }
72
+ } else {
73
+ content.push(( localize(
74
+ 13000,
75
+ "No search text entered yet. Start typing to find matches in the editor."
76
+ )));
77
+ }
78
+ const replaceString = state.replaceString;
79
+ if (replaceString) {
80
+ content.push(( localize(13001, "Replacement text: \"{0}\".", replaceString)));
81
+ } else {
82
+ content.push(( localize(
83
+ 13002,
84
+ "No replacement text entered yet. Press Tab to move to the Replace input and type your replacement."
85
+ )));
86
+ }
87
+ content.push("");
88
+ content.push(( localize(13003, "Inside the Find and Replace Dialog (What It Does):")));
89
+ content.push(( localize(
90
+ 13004,
91
+ "While you are in either input, your focus stays in that input. You can type, edit, or navigate matches without leaving. When you navigate to a match from the Find input, the editor updates in the background, but your focus remains in the dialog. Tab moves you from Find to Replace and back."
92
+ )));
93
+ content.push("");
94
+ content.push(( localize(13005, "What You Hear Each Time You Move to a Match:")));
95
+ content.push(( localize(13006, "Each navigation step gives you a complete spoken update:")));
96
+ content.push(( localize(
97
+ 13007,
98
+ "1) The full line that contains the match is read first, so you get immediate context."
99
+ )));
100
+ content.push(( localize(
101
+ 13008,
102
+ "2) Your position among the matches is announced, so you know how far you are through the results."
103
+ )));
104
+ content.push(( localize(
105
+ 13009,
106
+ "3) The exact line and column are announced, so you know precisely where the match is in the file."
107
+ )));
108
+ content.push("");
109
+ content.push(( localize(13010, "Focus Behavior (Important):")));
110
+ content.push(( localize(
111
+ 13011,
112
+ "When you navigate from inside the Find dialog, the editor updates while your focus stays in the input. This is intentional, so you can keep adjusting your search without losing your place."
113
+ )));
114
+ content.push(( localize(
115
+ 13012,
116
+ "When you replace from the Replace input, the match is replaced and focus moves to the next match. If you have replaced all matches, the dialog remains open."
117
+ )));
118
+ content.push(( localize(
119
+ 13013,
120
+ "If you want to move focus into the editor to edit text, press Escape to close the dialog. Focus returns to the editor at the last replacement location."
121
+ )));
122
+ content.push("");
123
+ content.push(( localize(13014, "Keyboard Navigation Summary:")));
124
+ content.push("");
125
+ content.push(( localize(13015, "While focused IN the Find input:")));
126
+ content.push(( localize(13016, "- Enter: Move to the next match while staying in Find.")));
127
+ content.push(( localize(13017, "- Shift+Enter: Move to the previous match while staying in Find.")));
128
+ content.push(( localize(13018, "- Tab: Move between Find and Replace inputs.")));
129
+ content.push("");
130
+ content.push(( localize(13019, "While focused IN the Replace input:")));
131
+ content.push(( localize(13020, "- Enter: Replace the current match and move to the next.")));
132
+ content.push(( localize(
133
+ 13021,
134
+ "- {0}: Replace only the current match.",
135
+ "<keybinding:editor.action.replaceOne>"
136
+ )));
137
+ content.push(( localize(
138
+ 13022,
139
+ "- {0}: Replace all matches at once.",
140
+ "<keybinding:editor.action.replaceAll>"
141
+ )));
142
+ content.push("");
143
+ content.push(( localize(13023, "While focused IN the editor (not the Find input):")));
144
+ content.push(( localize(
145
+ 13024,
146
+ "- {0}: Move to the next match.",
147
+ "<keybinding:editor.action.nextMatchFindAction>"
148
+ )));
149
+ content.push(( localize(
150
+ 13025,
151
+ "- {0}: Move to the previous match.",
152
+ "<keybinding:editor.action.previousMatchFindAction>"
153
+ )));
154
+ content.push("");
155
+ content.push(( localize(
156
+ 13026,
157
+ "Note: Don't press Enter or Shift+Enter when focused in the editor - these will insert line breaks instead of navigating."
158
+ )));
159
+ content.push("");
160
+ content.push(( localize(13027, "Find and Replace Options in the Dialog:")));
161
+ content.push(( localize(13028, "- Match Case: Only exact case matches are included.")));
162
+ content.push(( localize(13029, "- Whole Word: Only full words are matched.")));
163
+ content.push(( localize(13030, "- Regular Expression: Use pattern matching for advanced searches.")));
164
+ content.push(( localize(13031, "- Find in Selection: Limit matches to the current selection.")));
165
+ content.push(( localize(
166
+ 13032,
167
+ "- Preserve Case: When replacing, maintains the case of the original match."
168
+ )));
169
+ content.push("");
170
+ content.push(( localize(
171
+ 13033,
172
+ "Settings You Can Adjust ({0} opens Settings):",
173
+ "<keybinding:workbench.action.openSettings>"
174
+ )));
175
+ content.push(( localize(
176
+ 13034,
177
+ "These settings affect how Find and Replace behave or how matches are highlighted."
178
+ )));
179
+ content.push(( localize(
180
+ 13035,
181
+ "- `accessibility.verbosity.find`: Controls whether the Find and Replace inputs announce the Accessibility Help hint."
182
+ )));
183
+ content.push(( localize(13036, "- `editor.find.findOnType`: Runs Find as you type.")));
184
+ content.push(( localize(
185
+ 13037,
186
+ "- `editor.find.cursorMoveOnType`: Moves the cursor to the best match while you type."
187
+ )));
188
+ content.push(( localize(
189
+ 13038,
190
+ "- `editor.find.seedSearchStringFromSelection`: Controls when selection text is used to seed Find."
191
+ )));
192
+ content.push(( localize(
193
+ 13039,
194
+ "- `editor.find.autoFindInSelection`: Automatically enables Find in Selection based on selection type."
195
+ )));
196
+ content.push(( localize(
197
+ 13040,
198
+ "- `editor.find.loop`: Wraps search at the beginning or end of the file."
199
+ )));
200
+ content.push(( localize(
201
+ 13041,
202
+ "- `editor.find.addExtraSpaceOnTop`: Adds extra scroll space so matches are not hidden behind the Find and Replace dialog."
203
+ )));
204
+ content.push(( localize(
205
+ 13042,
206
+ "- `editor.find.history`: Controls whether Find search history is stored."
207
+ )));
208
+ content.push(( localize(
209
+ 13043,
210
+ "- `editor.find.replaceHistory`: Controls whether Replace history is stored."
211
+ )));
212
+ content.push(( localize(
213
+ 13044,
214
+ "- `editor.occurrencesHighlight`: Highlights other occurrences of the current symbol."
215
+ )));
216
+ content.push(( localize(
217
+ 13045,
218
+ "- `editor.occurrencesHighlightDelay`: Controls how soon occurrences are highlighted."
219
+ )));
220
+ content.push(( localize(
221
+ 13046,
222
+ "- `editor.selectionHighlight`: Highlights other matches of the current selection."
223
+ )));
224
+ content.push(( localize(
225
+ 13047,
226
+ "- `editor.selectionHighlightMaxLength`: Limits selection highlight length."
227
+ )));
228
+ content.push(( localize(
229
+ 13048,
230
+ "- `editor.selectionHighlightMultiline`: Controls whether multi-line selections are highlighted."
231
+ )));
232
+ if (isMacintosh) {
233
+ content.push("");
234
+ content.push(( localize(13049, "Platform-Specific Setting (macOS only):")));
235
+ content.push(( localize(
236
+ 13050,
237
+ "- `editor.find.globalFindClipboard`: Uses the shared macOS Find clipboard when available."
238
+ )));
239
+ }
240
+ content.push("");
241
+ content.push(( localize(13051, "Closing:")));
242
+ content.push(( localize(
243
+ 13052,
244
+ "Press Escape to close Find and Replace. Focus returns to the editor at the last replacement location, and your search and replace history is preserved."
245
+ )));
246
+ } else {
247
+ content.push(( localize(13053, "Accessibility Help: Editor Find")));
248
+ content.push(( localize(
249
+ 13054,
250
+ "You are in the Find dialog for the active editor. This dialog is where you type what you want to locate. The editor is a separate surface that shows each match and its surrounding context."
251
+ )));
252
+ content.push("");
253
+ content.push(( localize(13055, "Current Search Status:")));
254
+ if (searchString) {
255
+ content.push(( localize(13056, "You are searching for: \"{0}\".", searchString)));
256
+ if (matchCount !== undefined && matchPosition !== undefined) {
257
+ if (matchCount === 0) {
258
+ content.push(( localize(
259
+ 13057,
260
+ "No matches found in the current file. Try adjusting your search text or the options below."
261
+ )));
262
+ } else {
263
+ content.push(( localize(13058, "Match {0} of {1}.", matchPosition, matchCount)));
264
+ }
265
+ }
266
+ } else {
267
+ content.push(( localize(
268
+ 13059,
269
+ "No search text entered yet. Start typing to find matches in the editor."
270
+ )));
271
+ }
272
+ content.push("");
273
+ content.push(( localize(13060, "Inside the Find Dialog (What It Does):")));
274
+ content.push(( localize(
275
+ 13061,
276
+ "While you are in the Find dialog, your focus stays in the input. You can keep typing, edit your search text, or move through matches without leaving the dialog. When you navigate to a match from here, the editor updates in the background, but your focus remains in the Find dialog."
277
+ )));
278
+ content.push("");
279
+ content.push(( localize(13062, "What You Hear Each Time You Move to a Match:")));
280
+ content.push(( localize(
281
+ 13063,
282
+ "Each navigation step gives you a complete spoken update so you always know where you are. The order is consistent:"
283
+ )));
284
+ content.push(( localize(
285
+ 13064,
286
+ "1) The full line that contains the match is read first, so you get immediate context."
287
+ )));
288
+ content.push(( localize(
289
+ 13065,
290
+ "2) Your position among the matches is announced, so you know how far you are through the results."
291
+ )));
292
+ content.push(( localize(
293
+ 13066,
294
+ "3) The exact line and column are announced, so you know precisely where the match is in the file."
295
+ )));
296
+ content.push(( localize(13067, "This sequence happens every time you move forward or backward.")));
297
+ content.push("");
298
+ content.push(( localize(13068, "Outside the Find Dialog (Inside the Editor):")));
299
+ content.push(( localize(
300
+ 13069,
301
+ "When you are focused in the editor instead of the Find dialog, you can still navigate matches."
302
+ )));
303
+ content.push(( localize(
304
+ 13070,
305
+ "- Press {0} to move to the next match.",
306
+ "<keybinding:editor.action.nextMatchFindAction>"
307
+ )));
308
+ content.push(( localize(
309
+ 13071,
310
+ "- Press {0} to move to the previous match.",
311
+ "<keybinding:editor.action.previousMatchFindAction>"
312
+ )));
313
+ content.push(( localize(
314
+ 13072,
315
+ "You hear the same three-step sequence: full line, match position, then line and column."
316
+ )));
317
+ content.push("");
318
+ content.push(( localize(13073, "Focus Behavior (Important):")));
319
+ content.push(( localize(
320
+ 13074,
321
+ "When you navigate from inside the Find dialog, the editor updates while your focus stays in the input. This is intentional, so you can keep adjusting your search without losing your place."
322
+ )));
323
+ content.push(( localize(
324
+ 13075,
325
+ "If you want to move focus into the editor to edit text or inspect surrounding code, press Escape to close Find. Focus returns to the editor at the most recent match."
326
+ )));
327
+ content.push("");
328
+ content.push(( localize(13076, "Keyboard Navigation Summary:")));
329
+ content.push("");
330
+ content.push(( localize(13077, "While focused IN the Find input:")));
331
+ content.push(( localize(13078, "- Enter: Move to the next match while staying in the Find dialog.")));
332
+ content.push(( localize(
333
+ 13079,
334
+ "- Shift+Enter: Move to the previous match while staying in the Find dialog."
335
+ )));
336
+ content.push("");
337
+ content.push(( localize(13080, "While focused IN the editor (not the Find input):")));
338
+ content.push(( localize(
339
+ 13081,
340
+ "- {0}: Move to the next match.",
341
+ "<keybinding:editor.action.nextMatchFindAction>"
342
+ )));
343
+ content.push(( localize(
344
+ 13082,
345
+ "- {0}: Move to the previous match.",
346
+ "<keybinding:editor.action.previousMatchFindAction>"
347
+ )));
348
+ content.push("");
349
+ content.push(( localize(
350
+ 13083,
351
+ "Note: Don't press Enter or Shift+Enter when focused in the editor - these will insert line breaks instead of navigating."
352
+ )));
353
+ content.push("");
354
+ content.push(( localize(13084, "Find Options in the Dialog:")));
355
+ content.push(( localize(13085, "- Match Case: Only exact case matches are included.")));
356
+ content.push(( localize(13086, "- Whole Word: Only full words are matched.")));
357
+ content.push(( localize(13087, "- Regular Expression: Use pattern matching for advanced searches.")));
358
+ content.push(( localize(13088, "- Find in Selection: Limit matches to the current selection.")));
359
+ content.push("");
360
+ content.push(( localize(
361
+ 13089,
362
+ "Settings You Can Adjust ({0} opens Settings):",
363
+ "<keybinding:workbench.action.openSettings>"
364
+ )));
365
+ content.push(( localize(
366
+ 13090,
367
+ "These settings affect how Find behaves or how matches are highlighted."
368
+ )));
369
+ content.push(( localize(
370
+ 13091,
371
+ "- `accessibility.verbosity.find`: Controls whether the Find input announces the Accessibility Help hint."
372
+ )));
373
+ content.push(( localize(13092, "- `editor.find.findOnType`: Runs Find as you type.")));
374
+ content.push(( localize(
375
+ 13093,
376
+ "- `editor.find.cursorMoveOnType`: Moves the cursor to the best match while you type."
377
+ )));
378
+ content.push(( localize(
379
+ 13094,
380
+ "- `editor.find.seedSearchStringFromSelection`: Controls when selection text is used to seed Find."
381
+ )));
382
+ content.push(( localize(
383
+ 13095,
384
+ "- `editor.find.autoFindInSelection`: Automatically enables Find in Selection based on selection type."
385
+ )));
386
+ content.push(( localize(
387
+ 13096,
388
+ "- `editor.find.loop`: Wraps search at the beginning or end of the file."
389
+ )));
390
+ content.push(( localize(
391
+ 13097,
392
+ "- `editor.find.closeOnResult`: Closes the Find dialog after an explicit find navigation command lands on a match."
393
+ )));
394
+ content.push(( localize(
395
+ 13098,
396
+ "- `editor.find.addExtraSpaceOnTop`: Adds extra scroll space so matches are not hidden behind the Find dialog."
397
+ )));
398
+ content.push(( localize(
399
+ 13099,
400
+ "- `editor.find.history`: Controls whether Find search history is stored."
401
+ )));
402
+ content.push(( localize(
403
+ 13100,
404
+ "- `editor.occurrencesHighlight`: Highlights other occurrences of the current symbol."
405
+ )));
406
+ content.push(( localize(
407
+ 13101,
408
+ "- `editor.occurrencesHighlightDelay`: Controls how soon occurrences are highlighted."
409
+ )));
410
+ content.push(( localize(
411
+ 13102,
412
+ "- `editor.selectionHighlight`: Highlights other matches of the current selection."
413
+ )));
414
+ content.push(( localize(
415
+ 13103,
416
+ "- `editor.selectionHighlightMaxLength`: Limits selection highlight length."
417
+ )));
418
+ content.push(( localize(
419
+ 13104,
420
+ "- `editor.selectionHighlightMultiline`: Controls whether multi-line selections are highlighted."
421
+ )));
422
+ if (isMacintosh) {
423
+ content.push("");
424
+ content.push(( localize(13105, "Platform-Specific Setting (macOS only):")));
425
+ content.push(( localize(
426
+ 13106,
427
+ "- `editor.find.globalFindClipboard`: Uses the shared macOS Find clipboard when available."
428
+ )));
429
+ }
430
+ content.push("");
431
+ content.push(( localize(13107, "Closing:")));
432
+ content.push(( localize(
433
+ 13108,
434
+ "Press Escape to close Find. Focus returns to the editor at the most recent match, and your search history is preserved."
435
+ )));
436
+ }
437
+ return content.join("\n");
438
+ }
439
+ }
440
+ AccessibleViewRegistry.register(( new EditorFindAccessibilityHelp()));
441
+
442
+ export { EditorFindAccessibilityHelp };