From b35ba4d673772f67e85b3324708cf483fe0bf4ae Mon Sep 17 00:00:00 2001 From: Steve Repsher Date: Wed, 25 May 2022 10:05:43 -0400 Subject: [PATCH] Add aria-haspopup to button menus (#12758) Co-authored-by: Zack Barett --- src/components/ha-button-menu.ts | 29 +++++++++++++++-------------- src/components/ha-icon-button.ts | 14 ++++++++++---- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/src/components/ha-button-menu.ts b/src/components/ha-button-menu.ts index 22b2538102..6cf18acac6 100644 --- a/src/components/ha-button-menu.ts +++ b/src/components/ha-button-menu.ts @@ -2,12 +2,7 @@ import type { Button } from "@material/mwc-button"; import "@material/mwc-menu"; import type { Corner, Menu, MenuCorner } from "@material/mwc-menu"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; -import { - customElement, - property, - query, - queryAssignedElements, -} from "lit/decorators"; +import { customElement, property, query } from "lit/decorators"; import { FOCUS_TARGET } from "../dialogs/make-dialog-manager"; import type { HaIconButton } from "./ha-icon-button"; @@ -33,12 +28,6 @@ export class HaButtonMenu extends LitElement { @query("mwc-menu", true) private _menu?: Menu; - @queryAssignedElements({ - slot: "trigger", - selector: "ha-icon-button, mwc-button", - }) - private _triggerButton!: Array; - public get items() { return this._menu?.items; } @@ -51,14 +40,14 @@ export class HaButtonMenu extends LitElement { if (this._menu?.open) { this._menu.focusItemAtIndex(0); } else { - this._triggerButton[0]?.focus(); + this._triggerButton?.focus(); } } protected render(): TemplateResult { return html`
- +
element gets the attribute + @property({ type: String, attribute: "aria-haspopup" }) + override ariaHasPopup!: IconButton["ariaHasPopup"]; @property({ type: Boolean }) hideTitle = false; @@ -28,11 +34,11 @@ export class HaIconButton extends LitElement { }; protected render(): TemplateResult { - // Note: `ariaLabel` required despite the `mwc-icon-button` docs saying `label` should be enough return html` ${this.path