{"version":3,"file":"expandable-block.js","sources":["../../../../src/assets/scripts/expandable-block.entry.js"],"sourcesContent":["window.arjoListExpanderJs = window.arjoListExpanderJs || {\n isInitialized: false,\n active: function (radio, expandableBlock) {\n radio.disabled = false;\n expandableBlock.removeAttribute('data-disabled');\n },\n deactive: function (radio, expandableBlock) {\n radio.disabled = true;\n expandableBlock.setAttribute('data-disabled', '');\n },\n resetHoveringEffect: function (expandableBlock) {\n expandableBlock.classList.remove('hovering');\n expandableBlock.style.setProperty('--sign-duration', `0.25s`);\n },\n changed: function (expandableBlock, radio) {\n const isChecked = radio.checked;\n const instruction = expandableBlock.querySelector('.arjo-m-button-expander__instruction');\n if (instruction) {\n const instructionText = instruction.getAttribute(isChecked ? 'data-collapse-text' : 'data-expand-text');\n instruction.textContent = instructionText;\n }\n\n const target = radio.id;\n if (!target) {\n return;\n }\n\n radio.addEventListener('active', () => this.active(radio, expandableBlock));\n\n radio.addEventListener('deactive', () => this.deactive(radio, expandableBlock));\n\n const targetElement = document.querySelector(`[data-expander=\"${target}\"]`);\n if (!targetElement) {\n return;\n }\n\n if (targetElement) {\n targetElement.style.removeProperty('display');\n targetElement.style.removeProperty('max-height');\n }\n\n const customEvent = new Event(isChecked ? 'expand' : 'collapse');\n targetElement.dispatchEvent(customEvent);\n\n if (isChecked) {\n targetElement.setAttribute('data-expand', '');\n } else {\n const label = expandableBlock.querySelector('.arjo-m-button-expander__label');\n const labelOriginalOffset = label.getBoundingClientRect().top;\n targetElement.removeAttribute('data-expand');\n\n const promise = new Promise((resolve) => {\n resolve();\n });\n promise.then(() => {\n var doc = document.documentElement;\n const windowScrollTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n const deltaOffset = windowScrollTop - labelOriginalOffset + label.getBoundingClientRect().top;\n window.scrollTo({ top: deltaOffset, behavior: 'instant' });\n });\n }\n\n this.resetHoveringEffect(expandableBlock);\n },\n expandOnHover: function (label, expandableBlock, radio) {\n let hoverTimeoutId = null;\n const hoverDelay = expandableBlock.dataset.hoverDelay;\n\n if (!hoverDelay) return;\n\n label?.addEventListener('mouseenter', () => {\n if (!radio.checked) {\n expandableBlock.classList.add('hovering');\n expandableBlock.style.setProperty('--sign-duration', `${hoverDelay}ms`);\n\n hoverTimeoutId = setTimeout(() => {\n radio.checked = true;\n this.changed(expandableBlock, radio);\n }, +hoverDelay);\n }\n });\n\n label?.addEventListener('mouseleave', () => {\n this.resetHoveringEffect(expandableBlock);\n window.clearTimeout(hoverTimeoutId);\n });\n },\n getContentTrueHeight: function (target) {\n const styles = window.getComputedStyle(target);\n const isHeightMode = target.dataset.expanderHeightMode;\n\n const originalWebkitBoxOrient = styles.webkitBoxOrient;\n const originalWebkitLineClamp = styles.webkitLineClamp;\n const originMaxHeight = styles.maxHeight;\n\n if (isHeightMode) {\n target.style.maxHeight = '100%';\n } else {\n target.style.display = 'block';\n target.style.webkitBoxOrient = 'unset';\n target.style.webkitLineClamp = 'unset';\n }\n\n const trueHeight = target.clientHeight;\n\n if (isHeightMode) {\n target.style.maxHeight = originMaxHeight;\n } else {\n target.style.display = '-webkit-box';\n target.style.webkitBoxOrient = originalWebkitBoxOrient;\n target.style.webkitLineClamp = originalWebkitLineClamp;\n }\n\n return trueHeight;\n },\n checkButtonAvailable: function (expandableBlock, radio) {\n const hideFromShortContent = expandableBlock.dataset.hideFromShortContent;\n if (!radio.id || !hideFromShortContent) return;\n\n const target = document.querySelector(`[data-expander=\"${radio.id}\"]`);\n\n if (!target) return;\n\n const trueHeight = this.getContentTrueHeight(target);\n if (trueHeight <= target.clientHeight) {\n this.deactive(radio, expandableBlock);\n }\n },\n observeBlockVisible: function (expandableBlock) {\n const hideFromShortContent = expandableBlock.dataset.hideFromShortContent;\n\n if (!hideFromShortContent) return;\n const callback = (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n const target = entry.target;\n if (target.dataset.visibleChecked === 'true') return;\n\n const radio = target.querySelector('.arjo-m-button-expander__input');\n\n if (!radio) return;\n\n target.dataset.visibleChecked = 'true';\n this.checkButtonAvailable(target, radio);\n }\n });\n };\n\n const observer = new IntersectionObserver(callback);\n\n observer.observe(expandableBlock);\n },\n init: function () {\n if (this.isInitialized) {\n return;\n }\n\n this.isInitialized = true;\n\n const expandableBlocks = document.querySelectorAll('.arjo-m-button-expander:not([data-excluded])');\n\n [].forEach.call(expandableBlocks, (expandableBlock) => {\n const radio = expandableBlock.querySelector('.arjo-m-button-expander__input');\n const label = expandableBlock.querySelector('.arjo-m-button-expander__label');\n\n if (!radio) {\n return;\n }\n\n this.expandOnHover(label, expandableBlock, radio);\n radio.addEventListener('change', () => {\n this.resetHoveringEffect(expandableBlock);\n this.changed(expandableBlock, radio);\n });\n\n this.observeBlockVisible(expandableBlock, radio);\n });\n },\n};\n\nwindow.addEventListener('load', window.arjoListExpanderJs.init.bind(window.arjoListExpanderJs));\n"],"names":["radio","expandableBlock","isChecked","instruction","instructionText","target","targetElement","customEvent","label","labelOriginalOffset","resolve","doc","deltaOffset","hoverTimeoutId","hoverDelay","styles","isHeightMode","originalWebkitBoxOrient","originalWebkitLineClamp","originMaxHeight","trueHeight","hideFromShortContent","callback","entries","entry","expandableBlocks"],"mappings":"AAAA,OAAO,mBAAqB,OAAO,oBAAsB,CACvD,cAAe,GACf,OAAQ,SAAUA,EAAOC,EAAiB,CACxCD,EAAM,SAAW,GACjBC,EAAgB,gBAAgB,eAAe,CAChD,EACD,SAAU,SAAUD,EAAOC,EAAiB,CAC1CD,EAAM,SAAW,GACjBC,EAAgB,aAAa,gBAAiB,EAAE,CACjD,EACD,oBAAqB,SAAUA,EAAiB,CAC9CA,EAAgB,UAAU,OAAO,UAAU,EAC3CA,EAAgB,MAAM,YAAY,kBAAmB,OAAO,CAC7D,EACD,QAAS,SAAUA,EAAiBD,EAAO,CACzC,MAAME,EAAYF,EAAM,QAClBG,EAAcF,EAAgB,cAAc,sCAAsC,EACxF,GAAIE,EAAa,CACf,MAAMC,EAAkBD,EAAY,aAAaD,EAAY,qBAAuB,kBAAkB,EACtGC,EAAY,YAAcC,CAC3B,CAED,MAAMC,EAASL,EAAM,GACrB,GAAI,CAACK,EACH,OAGFL,EAAM,iBAAiB,SAAU,IAAM,KAAK,OAAOA,EAAOC,CAAe,CAAC,EAE1ED,EAAM,iBAAiB,WAAY,IAAM,KAAK,SAASA,EAAOC,CAAe,CAAC,EAE9E,MAAMK,EAAgB,SAAS,cAAc,mBAAmBD,CAAM,IAAI,EAC1E,GAAI,CAACC,EACH,OAGEA,IACFA,EAAc,MAAM,eAAe,SAAS,EAC5CA,EAAc,MAAM,eAAe,YAAY,GAGjD,MAAMC,EAAc,IAAI,MAAML,EAAY,SAAW,UAAU,EAG/D,GAFAI,EAAc,cAAcC,CAAW,EAEnCL,EACFI,EAAc,aAAa,cAAe,EAAE,MACvC,CACL,MAAME,EAAQP,EAAgB,cAAc,gCAAgC,EACtEQ,EAAsBD,EAAM,sBAAqB,EAAG,IAC1DF,EAAc,gBAAgB,aAAa,EAE3B,IAAI,QAASI,GAAY,CACvCA,GACR,CAAO,EACO,KAAK,IAAM,CACjB,IAAIC,EAAM,SAAS,gBAEnB,MAAMC,GADmB,OAAO,aAAeD,EAAI,YAAcA,EAAI,WAAa,GAC5CF,EAAsBD,EAAM,sBAAuB,EAAC,IAC1F,OAAO,SAAS,CAAE,IAAKI,EAAa,SAAU,SAAS,CAAE,CACjE,CAAO,CACF,CAED,KAAK,oBAAoBX,CAAe,CACzC,EACD,cAAe,SAAUO,EAAOP,EAAiBD,EAAO,CACtD,IAAIa,EAAiB,KACrB,MAAMC,EAAab,EAAgB,QAAQ,WAEtCa,IAELN,GAAA,MAAAA,EAAO,iBAAiB,aAAc,IAAM,CACrCR,EAAM,UACTC,EAAgB,UAAU,IAAI,UAAU,EACxCA,EAAgB,MAAM,YAAY,kBAAmB,GAAGa,CAAU,IAAI,EAEtED,EAAiB,WAAW,IAAM,CAChCb,EAAM,QAAU,GAChB,KAAK,QAAQC,EAAiBD,CAAK,CAC7C,EAAW,CAACc,CAAU,EAEtB,GAEIN,GAAA,MAAAA,EAAO,iBAAiB,aAAc,IAAM,CAC1C,KAAK,oBAAoBP,CAAe,EACxC,OAAO,aAAaY,CAAc,CACxC,GACG,EACD,qBAAsB,SAAUR,EAAQ,CACtC,MAAMU,EAAS,OAAO,iBAAiBV,CAAM,EACvCW,EAAeX,EAAO,QAAQ,mBAE9BY,EAA0BF,EAAO,gBACjCG,EAA0BH,EAAO,gBACjCI,EAAkBJ,EAAO,UAE3BC,EACFX,EAAO,MAAM,UAAY,QAEzBA,EAAO,MAAM,QAAU,QACvBA,EAAO,MAAM,gBAAkB,QAC/BA,EAAO,MAAM,gBAAkB,SAGjC,MAAMe,EAAaf,EAAO,aAE1B,OAAIW,EACFX,EAAO,MAAM,UAAYc,GAEzBd,EAAO,MAAM,QAAU,cACvBA,EAAO,MAAM,gBAAkBY,EAC/BZ,EAAO,MAAM,gBAAkBa,GAG1BE,CACR,EACD,qBAAsB,SAAUnB,EAAiBD,EAAO,CACtD,MAAMqB,EAAuBpB,EAAgB,QAAQ,qBACrD,GAAI,CAACD,EAAM,IAAM,CAACqB,EAAsB,OAExC,MAAMhB,EAAS,SAAS,cAAc,mBAAmBL,EAAM,EAAE,IAAI,EAErE,GAAI,CAACK,EAAQ,OAEM,KAAK,qBAAqBA,CAAM,GACjCA,EAAO,cACvB,KAAK,SAASL,EAAOC,CAAe,CAEvC,EACD,oBAAqB,SAAUA,EAAiB,CAG9C,GAAI,CAFyBA,EAAgB,QAAQ,qBAE1B,OAC3B,MAAMqB,EAAYC,GAAY,CAC5BA,EAAQ,QAASC,GAAU,CACzB,GAAIA,EAAM,eAAgB,CACxB,MAAMnB,EAASmB,EAAM,OACrB,GAAInB,EAAO,QAAQ,iBAAmB,OAAQ,OAE9C,MAAML,EAAQK,EAAO,cAAc,gCAAgC,EAEnE,GAAI,CAACL,EAAO,OAEZK,EAAO,QAAQ,eAAiB,OAChC,KAAK,qBAAqBA,EAAQL,CAAK,CACxC,CACT,CAAO,CACP,EAEqB,IAAI,qBAAqBsB,CAAQ,EAEzC,QAAQrB,CAAe,CACjC,EACD,KAAM,UAAY,CAChB,GAAI,KAAK,cACP,OAGF,KAAK,cAAgB,GAErB,MAAMwB,EAAmB,SAAS,iBAAiB,8CAA8C,EAEjG,CAAA,EAAG,QAAQ,KAAKA,EAAmBxB,GAAoB,CACrD,MAAMD,EAAQC,EAAgB,cAAc,gCAAgC,EACtEO,EAAQP,EAAgB,cAAc,gCAAgC,EAEvED,IAIL,KAAK,cAAcQ,EAAOP,EAAiBD,CAAK,EAChDA,EAAM,iBAAiB,SAAU,IAAM,CACrC,KAAK,oBAAoBC,CAAe,EACxC,KAAK,QAAQA,EAAiBD,CAAK,CAC3C,CAAO,EAED,KAAK,oBAAoBC,EAAiBD,CAAK,EACrD,CAAK,CACF,CACH,EAEA,OAAO,iBAAiB,OAAQ,OAAO,mBAAmB,KAAK,KAAK,OAAO,kBAAkB,CAAC"}