UNPKG

stem-core

Version:

Frontend and core-library framework

48 lines (39 loc) 1.5 kB
import {CollapsibleStyle} from "./Style"; function CollapsibleMixin(BaseClass, CollapsibleClass = CollapsibleStyle) { class CollapsibleElement extends BaseClass { getDefaultOptions() { return { collapsed: true, }; } static collapsibleStyleSheet = new CollapsibleClass(); getCollapsibleStyleSheet() { return this.options.collapsibleStyleSheet || this.constructor.collapsibleStyleSheet; } expand(panel) { this.options.collapsed = false; this.dispatch("expand"); const collapsibleStyle = this.getCollapsibleStyleSheet(); panel.addClass(collapsibleStyle.collapsing); panel.removeClass("hidden"); setTimeout(() => { panel.removeClass(collapsibleStyle.collapsed); }, 100); } collapse(panel) { this.options.collapsed = true; this.dispatch("collapse"); const collapsibleStyle = this.getCollapsibleStyleSheet(); panel.addClass(collapsibleStyle.collapsing); panel.addClass(collapsibleStyle.collapsed); let transitionEndFunction = () => { if (this.options.collapsed) { panel.addClass("hidden"); } }; panel.addNodeListener("transitionend", transitionEndFunction); } } return CollapsibleElement; } export {CollapsibleMixin};