const smCopy = document.createElement('template');
smCopy.innerHTML = `
`;
customElements.define('sm-copy',
class extends HTMLElement {
constructor() {
super();
this.attachShadow({
mode: 'open'
}).append(smCopy.content.cloneNode(true));
this.copyContent = this.shadowRoot.querySelector('.copy-content');
this.copyButton = this.shadowRoot.querySelector('.copy-button');
this.copy = this.copy.bind(this);
}
static get observedAttributes() {
return ['value'];
}
set value(val) {
this.setAttribute('value', val);
}
get value() {
return this.getAttribute('value');
}
fireEvent() {
this.dispatchEvent(
new CustomEvent('copy', {
composed: true,
bubbles: true,
cancelable: true,
})
);
}
copy() {
navigator.clipboard.writeText(this.copyContent.textContent)
.then(res => this.fireEvent())
.catch(err => console.error(err));
}
connectedCallback() {
this.copyButton.addEventListener('click', this.copy);
}
attributeChangedCallback(name, oldValue, newValue) {
if (name === 'value') {
this.copyContent.textContent = newValue;
}
}
disconnectedCallback() {
this.copyButton.removeEventListener('click', this.copy);
}
});