import { html } from 'lit';
import { property } from 'lit/decorators.js';
import { classMap } from 'lit/directives/class-map.js';
import { BootstrapElement, defineElement } from '@bootstrap-wc/core';
/**
* `` — container for `` children.
* Enforces single-open behavior unless `always-open` is set.
*/
export class BsAccordion extends BootstrapElement {
@property({ type: Boolean }) flush = false;
@property({ type: Boolean, attribute: 'always-open' }) alwaysOpen = false;
override connectedCallback() {
super.connectedCallback();
this.addEventListener('bs-accordion-item-toggle', this._onItemToggle as EventListener);
}
private _onItemToggle = (ev: CustomEvent) => {
if (this.alwaysOpen) return;
const source = ev.target as HTMLElement;
if (!(ev.detail as { open?: boolean })?.open) return;
this.querySelectorAll('bs-accordion-item').forEach((item) => {
if (item !== source) item.removeAttribute('open');
});
};
override render() {
const classes = classMap({ accordion: true, 'accordion-flush': this.flush });
return html`
`;
}
}
defineElement('bs-accordion', BsAccordion);
declare global {
interface HTMLElementTagNameMap {
'bs-accordion': BsAccordion;
}
}