diff --git a/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorContrib.ts b/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorContrib.ts index 316d653e546ec..5c3d029153f83 100644 --- a/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorContrib.ts +++ b/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorContrib.ts @@ -134,12 +134,14 @@ class InputEditorDecorations extends Disposable { const viewModel = this.widget.viewModel; if (!viewModel) { + this.updateAriaPlaceholder(undefined); return; } if (!inputValue) { const mode = this.widget.input.currentModeObs.get(); const placeholder = mode.argumentHint?.get() ?? mode.description.get() ?? ''; + const displayPlaceholder = viewModel.inputPlaceholder || placeholder; const decoration: IDecorationOptions[] = [ { @@ -151,16 +153,19 @@ class InputEditorDecorations extends Disposable { }, renderOptions: { after: { - contentText: viewModel.inputPlaceholder || placeholder, + contentText: displayPlaceholder, color: this.getPlaceholderColor() } } } ]; + this.updateAriaPlaceholder(displayPlaceholder || undefined); this.widget.inputEditor.setDecorationsByType(decorationDescription, placeholderDecorationType, decoration); return; } + this.updateAriaPlaceholder(undefined); + const parsedRequest = this.widget.parsedInput.parts; let placeholderDecoration: IDecorationOptions[] | undefined; @@ -295,6 +300,19 @@ class InputEditorDecorations extends Disposable { this.widget.inputEditor.setDecorationsByType(decorationDescription, variableTextDecorationType, varDecorations); } + + private updateAriaPlaceholder(value: string | undefined): void { + // eslint-disable-next-line no-restricted-syntax + const nativeEditContext = this.widget.inputEditor.getDomNode()?.querySelector('.native-edit-context'); + if (!nativeEditContext) { + return; + } + if (value && value.trim().length) { + nativeEditContext.setAttribute('aria-placeholder', value); + } else { + nativeEditContext.removeAttribute('aria-placeholder'); + } + } } class InputEditorSlashCommandMode extends Disposable {