import { observable } from 'mobx'; import { FC, WebCell, WebCellProps, attribute, component, observer, on, reaction } from 'web-cell'; import { CollapseProps, Collapse } from '../Layout/Collapse'; export const AccordionItem: FC> = ({ className = '', children, ...props }) => (
{children}
); export const AccordionHeader: FC> = ({ className = '', children, onClick, ...props }) => (

); export const AccordionBody: FC = ({ className = '', children, ...props }) => (
{children}
); export interface AccordionProps { flush?: boolean; alwaysOpen?: boolean; } export interface Accordion extends WebCell {} @component({ tagName: 'accordion-box', mode: 'open' }) @observer export class Accordion extends HTMLElement implements WebCell { @attribute @observable accessor flush = false; @attribute @observable accessor alwaysOpen = false; connectedCallback() { this.classList.add('accordion'); } @reaction(({ flush }) => flush) handleFlush(flush: boolean) { this.classList.toggle('accordion-flush', flush); } @on('click', '.accordion-header') handleClick( _, { nextElementSibling: currentCollapse }: HTMLHeadingElement ) { if (!this.alwaysOpen) for (const collapse of this.querySelectorAll( '.accordion-collapse' )) if (collapse !== currentCollapse) { collapse.classList.remove('show'); collapse.previousElementSibling.querySelector( 'button' ).ariaExpanded = 'false'; } currentCollapse.classList.toggle('show'); currentCollapse.previousElementSibling.querySelector( 'button' ).ariaExpanded = 'false'; } render() { return ; } }