@postnord/web-components
Version:
PostNord Web Components
43 lines (39 loc) • 2.07 kB
JavaScript
/*!
* Built with Stencil
* By PostNord.
*/
import { t as transformTag, r as registerInstance, g as getElement, f as forceUpdate, h, a as Host } from './index-XKg-ydzH.js';
const pnAccordionCss = () => `${transformTag("pn-accordion")}{position:relative;background-color:#ffffff;display:flex;align-items:stretch;flex-direction:column;gap:0.25em}${transformTag("pn-accordion")}[data-transparent]{background-color:transparent}${transformTag("pn-accordion")}>${transformTag("pn-accordion-row")}+${transformTag("pn-accordion-row")}:after{content:"";position:absolute;top:-0.125em;left:0.25em;width:calc(100% - 0.5em);height:0;border-top:0.0625em solid #d3cecb}`;
const PnAccordion = class {
constructor(hostRef) {
registerInstance(this, hostRef);
}
mo;
closeEvent = new CustomEvent('rowstate', { detail: false });
get hostElement() { return getElement(this); }
/** Only allow a single row to be open at once. @since v7.8.0 */
single = false;
/** Optional prop that removes the default white background on the accordion row. @since v7.10.0 */
transparent = false;
connectedCallback() {
this.mo = new MutationObserver(() => forceUpdate(this.hostElement));
this.mo.observe(this.hostElement, { childList: true, subtree: true });
}
disconnectedCallback() {
this.mo.disconnect();
}
handleSingleRow({ detail }) {
if (!this.single)
return;
const rowName = transformTag('pn-accordion-row');
const element = detail.element;
const activeRow = element.closest(rowName);
const rows = Array.from(this.hostElement.querySelectorAll(rowName));
rows.forEach(row => !row.isSameNode(activeRow) && row.dispatchEvent(this.closeEvent));
}
render() {
return (h(Host, { key: 'e6a1b3b18e0b6f366191f7b25154349e8fb3f81d', class: "pn-accordion", "data-transparent": this.transparent }, h("slot", { key: '4bdd61aafbb42520ed3af9e50045376104bee491' })));
}
};
PnAccordion.style = pnAccordionCss();
export { PnAccordion as pn_accordion };