diff --git a/src/vs/platform/actionWidget/browser/actionList.ts b/src/vs/platform/actionWidget/browser/actionList.ts index 2ffd94bf18d..069d3dd85bf 100644 --- a/src/vs/platform/actionWidget/browser/actionList.ts +++ b/src/vs/platform/actionWidget/browser/actionList.ts @@ -252,6 +252,14 @@ class ActionItemRenderer implements IListRenderer, IAction dom.setVisibility(!element.hideIcon, data.icon); + // Set aria-expanded for section toggle items + if (element.isSectionToggle) { + const expanded = element.group?.icon === Codicon.chevronDown; + data.container.setAttribute('aria-expanded', String(expanded)); + } else { + data.container.removeAttribute('aria-expanded'); + } + // Apply optional className - clean up previous to avoid stale classes // from virtualized row reuse if (data.previousClassName) { @@ -1109,8 +1117,12 @@ export class ActionListWidget extends Disposable { } const element = e.elements[0]; - if (element.isSectionToggle) { + if (element.isSectionToggle && element.section) { this._list.setSelection([]); + const section = element.section; + queueMicrotask(() => { + this._toggleSection(section); + }); return; } // Don't select when clicking the toolbar or submenu indicator @@ -1444,11 +1456,6 @@ export class ActionListWidget extends Disposable { } private onListClick(e: IListMouseEvent>): void { - if (e.element && e.element.isSectionToggle && e.element.section) { - const section = e.element.section; - queueMicrotask(() => this._toggleSection(section)); - return; - } if (e.element && this.focusCondition(e.element)) { this._list.setFocus([]); } diff --git a/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.ts b/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.ts index 415ba99cdce..242f98e8dd3 100644 --- a/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.ts +++ b/src/vs/workbench/contrib/chat/browser/widget/input/chatModelPicker.ts @@ -447,9 +447,15 @@ export function buildModelPickerItems( export function getModelPickerAccessibilityProvider() { return { isChecked(element: IActionListItem) { + if (element.isSectionToggle) { + return undefined; + } return element.kind === ActionListItemKind.Action ? !!element?.item?.checked : undefined; }, getRole: (element: IActionListItem) => { + if (element.isSectionToggle) { + return 'menuitem'; + } switch (element.kind) { case ActionListItemKind.Action: return 'menuitemradio'; case ActionListItemKind.Separator: return 'separator';