@material/web
Version:
Material web components
53 lines • 1.55 kB
JavaScript
/**
* @license
* Copyright 2023 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { ARIA_PROPERTIES, ariaPropertyToAttribute } from './aria.js';
/**
* Sets up a `ReactiveElement` constructor to enable updates when delegating
* aria attributes. Elements may bind `this.aria*` properties to `aria-*`
* attributes in their render functions.
*
* This function will:
* - Call `requestUpdate()` when an aria attribute changes.
* - Add `role="presentation"` to the host.
*
* NOTE: The following features are not currently supported:
* - Delegating IDREF attributes (ex: `aria-labelledby`, `aria-controls`)
* - Delegating the `role` attribute
*
* @example
* class XButton extends LitElement {
* static {
* requestUpdateOnAriaChange(XButton);
* }
*
* protected override render() {
* return html`
* <button aria-label=${this.ariaLabel || nothing}>
* <slot></slot>
* </button>
* `;
* }
* }
*
* @param ctor The `ReactiveElement` constructor to patch.
*/
export function requestUpdateOnAriaChange(ctor) {
for (const ariaProperty of ARIA_PROPERTIES) {
ctor.createProperty(ariaProperty, {
attribute: ariaPropertyToAttribute(ariaProperty),
reflect: true,
});
}
ctor.addInitializer((element) => {
const controller = {
hostConnected() {
element.setAttribute('role', 'presentation');
},
};
element.addController(controller);
});
}
//# sourceMappingURL=delegate.js.map