{"version":3,"file":"collapsible-controller-Br9r_f7k.js","sources":["../../../app/frontend/src/global/controllers/collapsible-controller.js"],"sourcesContent":["import { Controller } from '@hotwired/stimulus';\nimport { styles, getStyle } from '@yobbers/js/utils/dom';\nimport { gsap } from 'gsap';\n\nconst options = {\n ACTIVE_CLASS: '-is-active',\n DISABLED_CLASS: '-is-disabled',\n DURATION: 0.2,\n OPEN_STATE: 'open',\n CLOSED_STATE: 'closed',\n ARIA_EXPANDED: 'aria-expanded'\n};\n\nexport default class extends Controller {\n static targets = ['body'];\n static values = {\n saveStateId: String\n };\n\n initialize() {\n this.updateBodyDisplay();\n this.updateOpenState();\n }\n\n toggle(event) {\n if (this.isActive()) {\n this.updateAriaTag(event, options.CLOSED_STATE);\n this.close();\n return;\n }\n this.updateAriaTag(event, options.OPEN_STATE);\n this.open();\n }\n\n open(instant = false) {\n this.addActiveClass();\n this._animateIn(instant);\n this.updateSessionStorage(options.OPEN_STATE);\n }\n\n close(instant = false) {\n this.removeActiveClass();\n this._animateOut(instant);\n this.updateSessionStorage(options.CLOSED_STATE);\n }\n\n updateAriaTag(event, state) {\n const target = this.bodyTarget;\n if (!target.hasAttribute(options.ARIA_EXPANDED)) return;\n target.setAttribute(options.ARIA_EXPANDED, state);\n }\n\n updateBodyDisplay() {\n if (this.isActive()) {\n this.bodyTarget.style.display = 'block';\n }\n }\n\n updateOpenState() {\n if (this.saveStateIdValue && !this.isDisabled()) {\n const state = sessionStorage.getItem(this.saveStateIdValue);\n if (state === options.OPEN_STATE) this.open(true);\n if (state === options.CLOSED_STATE) this.close(true);\n }\n }\n\n updateSessionStorage(state) {\n if (this.saveStateIdValue) {\n sessionStorage.setItem(this.saveStateIdValue, state);\n }\n }\n\n isActive() {\n return this.element.classList.contains(options.ACTIVE_CLASS);\n }\n\n isDisabled() {\n return this.element.classList.contains(options.DISABLED_CLASS);\n }\n\n addActiveClass() {\n this.element.classList.add(options.ACTIVE_CLASS);\n }\n\n removeActiveClass() {\n this.element.classList.remove(options.ACTIVE_CLASS);\n }\n\n _animateIn(instant) {\n gsap.killTweensOf(this.bodyTarget);\n\n styles(this.bodyTarget, {\n display: 'block',\n overflow: 'hidden',\n height: 0,\n paddingTop: '',\n paddingBottom: ''\n });\n\n const pTop = getStyle(this.bodyTarget, 'padding-top');\n const pBottom = getStyle(this.bodyTarget, 'padding-bottom');\n const finalHeight = this.bodyTarget.scrollHeight;\n\n styles(this.bodyTarget, {\n paddingTop: 0,\n paddingBottom: 0\n });\n\n gsap.to(this.bodyTarget, {\n height: finalHeight,\n paddingTop: pTop,\n paddingBottom: pBottom,\n duration: instant ? 0 : options.DURATION + 0.05,\n opacity: [0, 1],\n ease: 'back.out(1.5)',\n onComplete: () => {\n styles(this.bodyTarget, {\n overflow: '',\n paddingTop: '',\n paddingBottom: '',\n height: ''\n });\n }\n });\n }\n\n _animateOut(instant) {\n gsap.killTweensOf(this.bodyTarget);\n\n this.bodyTarget.style.overflow = 'hidden';\n\n gsap.to(this.bodyTarget, {\n height: 0,\n paddingTop: 0,\n paddingBottom: 0,\n opacity: [1, 0],\n duration: instant ? 0 : options.DURATION,\n ease: 'power4.out',\n onComplete: (anim) => {\n styles(this.bodyTarget, {\n height: '',\n overflow: '',\n padding: '',\n display: 'none'\n });\n }\n });\n }\n}\n"],"names":["options","CollapsibleController","Controller","event","instant","state","target","gsap","styles","pTop","getStyle","pBottom","finalHeight","anim","__publicField"],"mappings":"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"}