/** @ts-check */ class AccordionContent extends HTMLElement { constructor() { super(); this.gridElement = document.createElement('div'); } get content() { return this.gridElement; } connectedCallback() { // create a div that'll animate the collapsing this.gridElement.append(...Array.from(this.childNodes)); this.gridElement.classList.add('accordion-animation-content'); this.innerHTML = ''; this.append(this.gridElement); } } class AccordionHeader extends HTMLElement { constructor() { super(); console.log('contructor?'); this.btn = document.createElement('button'); } get html() { return this.btn.innerHTML; } set html(val) { this.btn.innerHTML = val; } get text() { return this.btn.innerText; } set text(val) { this.btn.innerText = val; } get parentBox() { return this.parentElement; } connectedCallback() { const childNodes = Array.from(this.childNodes); this.innerHTML = ''; this.btn.append(...childNodes); this.append(this.btn); this.btn.addEventListener('click', this._btnClicked.bind(this)); } _btnClicked() { this.parentBox?.toggle(); } } class AccordionBox extends HTMLElement { constructor() { super(); } get collapsed() { return this.hasAttribute('collapsed'); } set collapsed(val) { if (val) { this.setAttribute('collapsed', ''); } else { this.removeAttribute('collapsed'); } } toggle() { this.collapsed = !this.collapsed; } } class Accordion extends HTMLElement { constructor() { super(); } } window.customElements.define('main-accordion', Accordion); window.customElements.define('accordion-box', AccordionBox); window.customElements.define('accordion-header', AccordionHeader); window.customElements.define('accordion-content', AccordionContent); // Export types for use in index.js const module = {}; module.exports = { AccordionBox, Accordion, AccordionContent, AccordionHeader, };