package.src.vaadin-button-mixin.js Maven / Gradle / Ivy
/**
* @license
* Copyright (c) 2017 - 2024 Vaadin Ltd.
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
*/
import { ActiveMixin } from '@vaadin/a11y-base/src/active-mixin.js';
import { FocusMixin } from '@vaadin/a11y-base/src/focus-mixin.js';
import { TabindexMixin } from '@vaadin/a11y-base/src/tabindex-mixin.js';
/**
* A mixin providing common button functionality.
*
* @polymerMixin
* @mixes ActiveMixin
* @mixes FocusMixin
* @mixes TabindexMixin
*/
export const ButtonMixin = (superClass) =>
class ButtonMixinClass extends ActiveMixin(TabindexMixin(FocusMixin(superClass))) {
static get properties() {
return {
/**
* Indicates whether the element can be focused and where it participates in sequential keyboard navigation.
*
* @override
* @protected
*/
tabindex: {
type: Number,
value: 0,
reflectToAttribute: true,
},
};
}
/**
* By default, `Space` is the only possible activation key for a focusable HTML element.
* Nonetheless, the button is an exception as it can be also activated by pressing `Enter`.
* See the "Keyboard Support" section in https://www.w3.org/TR/wai-aria-practices/examples/button/button.html.
*
* @protected
* @override
*/
get _activeKeys() {
return ['Enter', ' '];
}
/** @protected */
ready() {
super.ready();
// By default, if the user hasn't provided a custom role,
// the role attribute is set to "button".
if (!this.hasAttribute('role')) {
this.setAttribute('role', 'button');
}
}
/**
* Since the button component is designed on the base of the `[role=button]` attribute,
* and doesn't have a native