const smButton = document.createElement('template') smButton.innerHTML = `
`; customElements.define('sm-button', class extends HTMLElement { constructor() { super() this.attachShadow({ mode: 'open' }).append(smButton.content.cloneNode(true)) } static get observedAttributes() { return ['disabled']; } get disabled() { return this.hasAttribute('disabled') } set disabled(value) { if (value) { this.setAttribute('disabled', '') }else { this.removeAttribute('disabled') } } connectedCallback() { if (!this.hasAttribute('disabled')) { this.setAttribute('tabindex', '0') } this.setAttribute('role', 'button') } attributeChangedCallback(name, oldVal, newVal) { if (name === 'disabled') { this.removeAttribute('tabindex') this.setAttribute('aria-disabled', 'true') } else { this.setAttribute('tabindex', '0') this.setAttribute('aria-disabled', 'false') } } })