{"version":3,"file":"js/9388.471814321b55d035.js","mappings":"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","sources":["webpack://@sazka/web/./js/app/shared/design-system/content/_ds-accordion.ts","webpack://@sazka/web/../../libs/utils/composables/use-accordion.ts","webpack://@sazka/web/../../libs/utils/document-ready.ts"],"sourcesContent":["import { documentReady } from \"@sazka/utils/document-ready\";\r\nimport { useAccordion } from \"@sazka/utils/composables/use-accordion\";\r\n\r\ndocumentReady(() => {\r\n    const accordions = document.querySelectorAll(\".ds-accordion-item\");\r\n    const { init } = useAccordion();\r\n\r\n    init(accordions);\r\n\r\n    if (environment.isEditMode) {\r\n        const obs = new MutationObserver((mutations) => {\r\n            mutations.forEach((mutation) => {\r\n                mutation.addedNodes.forEach((x) => {\r\n                    const addedEl = x as HTMLElement;\r\n                    if (addedEl.classList?.contains(\"ds-accordion-item\")) {\r\n                        init([addedEl] as any);\r\n                    }\r\n\r\n                    const childEls = addedEl?.querySelectorAll(\".ds-accordion-item\");\r\n                    if (childEls?.length) {\r\n                        init(childEls);\r\n                    }\r\n                });\r\n            });\r\n        });\r\n\r\n        obs.observe(document.body, {\r\n            attributes: false,\r\n            childList: true,\r\n            subtree: true,\r\n        });\r\n    }\r\n});\r\n","import { Ref } from \"vue\";\r\nimport { useGsap, CustomEaseNames, CustomEaseDurations } from \"../gsap-register\";\r\n\r\nconst isOpenClass = \"is-open\";\r\nconst { gsap } = useGsap();\r\n\r\nexport interface AccordionConfig {\r\n    headerClassName?: string;\r\n    bodyClassName?: string;\r\n    openOnlyOne?: boolean;\r\n    withScrollIntoView?: Ref<boolean>;\r\n}\r\n\r\nexport function useAccordion({\r\n    headerClassName = \"ds-accordion-item__header\",\r\n    bodyClassName = \"ds-accordion-item__body\",\r\n    openOnlyOne = true,\r\n    withScrollIntoView,\r\n}: AccordionConfig = {}) {\r\n    // https://codepen.io/dusanralic/pen/PoqGKLM\r\n    const headerSelector = `.${headerClassName}`;\r\n    const bodySelector = `.${bodyClassName}`;\r\n    const accordionElements = [];\r\n    let destroyController: AbortController = null;\r\n\r\n    const openAccordion = async (accordionElement: Element, withAnimation = true) => {\r\n        accordionElement.classList.add(isOpenClass);\r\n        accordionElement.querySelector<HTMLButtonElement>(headerSelector).setAttribute(\"aria-expanded\", \"true\");\r\n\r\n        if (withScrollIntoView?.value) {\r\n            accordionElement.scrollIntoView({ behavior: \"smooth\" });\r\n        }\r\n\r\n        const bodyElement = accordionElement.querySelector<HTMLElement>(bodySelector);\r\n        if (withAnimation) {\r\n            await gsap.fromTo(\r\n                bodyElement,\r\n                {\r\n                    height: 0,\r\n                },\r\n                {\r\n                    height: bodyElement.scrollHeight,\r\n                    duration: CustomEaseDurations.MOTION_DURATION_250,\r\n                    ease: CustomEaseNames.MOTION_EASE_IN_OUT,\r\n                }\r\n            );\r\n        }\r\n\r\n        gsap.set(bodyElement, { height: \"auto\" });\r\n    };\r\n\r\n    const closeAccordion = async (accordionElement: Element, withAnimation = true) => {\r\n        accordionElement.classList.remove(isOpenClass);\r\n        accordionElement.querySelector<HTMLButtonElement>(headerSelector).setAttribute(\"aria-expanded\", \"false\");\r\n\r\n        const bodyElement = accordionElement.querySelector<HTMLElement>(bodySelector);\r\n\r\n        if (!bodyElement) return;\r\n\r\n        if (withAnimation) {\r\n            await gsap.to(bodyElement, {\r\n                height: 0,\r\n                duration: CustomEaseDurations.MOTION_DURATION_250,\r\n                ease: CustomEaseNames.MOTION_EASE_IN_OUT,\r\n            });\r\n        }\r\n\r\n        gsap.set(bodyElement, { height: null });\r\n    };\r\n\r\n    const onKeyDown = (event: KeyboardEvent, headerElement: HTMLElement, allHeaders: HTMLElement[]) => {\r\n        const currentIndex = allHeaders.indexOf(headerElement);\r\n\r\n        switch (event.key) {\r\n            case \"ArrowDown\":\r\n                event.preventDefault();\r\n                const nextIndex = (currentIndex + 1) % allHeaders.length;\r\n                allHeaders[nextIndex].focus();\r\n                break;\r\n\r\n            case \"ArrowUp\":\r\n                event.preventDefault();\r\n                const prevIndex = (currentIndex - 1 + allHeaders.length) % allHeaders.length;\r\n                allHeaders[prevIndex].focus();\r\n                break;\r\n\r\n            case \"Home\":\r\n                event.preventDefault();\r\n                allHeaders[0].focus();\r\n                break;\r\n\r\n            case \"End\":\r\n                event.preventDefault();\r\n                allHeaders[allHeaders.length - 1].focus();\r\n                break;\r\n\r\n            case \"Enter\":\r\n                event.preventDefault();\r\n                headerElement.click(); // Trigger click handler to open/close accordion\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n    };\r\n\r\n    const isOpen = (accordionElement: Element) => accordionElement.classList.contains(isOpenClass);\r\n\r\n    const toggleAccordion = (accordionItemElement: Element, withAnimation = true) => {\r\n        if (isOpen(accordionItemElement)) {\r\n            closeAccordion(accordionItemElement, withAnimation);\r\n        } else {\r\n            if (openOnlyOne) {\r\n                accordionElements\r\n                    .filter((accordion) => isOpen(accordion))\r\n                    .forEach((accordion) => {\r\n                        closeAccordion(accordion, withAnimation);\r\n                    });\r\n            }\r\n\r\n            openAccordion(accordionItemElement, withAnimation);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Opens the accordion at the given index\r\n     *\r\n     * If the accordion is already open, nothing happens\r\n     */\r\n    const openAccordionAtIndex = (index: number, withAnimation = true) => {\r\n        const accordionElement = accordionElements[index];\r\n        if (isOpen(accordionElement)) return;\r\n        toggleAccordion(accordionElement, withAnimation);\r\n    };\r\n\r\n    /**\r\n     * Closes the accordion at the given index\r\n     *\r\n     * If the accordion is already closed, nothing happens\r\n     */\r\n    const closeAccordionAtIndex = (index: number, withAnimation = true) => {\r\n        const accordionElement = accordionElements[index];\r\n        if (!isOpen(accordionElement)) return;\r\n        toggleAccordion(accordionElement, withAnimation);\r\n    };\r\n\r\n    /**\r\n     * Toggles the accordion at the given index\r\n     */\r\n    const toggleAccordionAtIndex = (index: number, withAnimation = true) => {\r\n        const accordionElement = accordionElements[index];\r\n        toggleAccordion(accordionElement, withAnimation);\r\n    };\r\n\r\n    const initAccordionItemElement = (accordionItemElement: Element, allHeaders: HTMLElement[]) => {\r\n        const headerElement = accordionItemElement.querySelector<HTMLElement>(headerSelector);\r\n\r\n        if (isOpen(accordionItemElement)) {\r\n            openAccordion(accordionItemElement, false);\r\n        }\r\n\r\n        headerElement.addEventListener(\"click\", () => toggleAccordion(accordionItemElement), {\r\n            signal: destroyController.signal,\r\n        });\r\n\r\n        headerElement.addEventListener(\"keydown\", (event) => onKeyDown(event, headerElement, allHeaders), {\r\n            signal: destroyController.signal,\r\n        });\r\n    };\r\n\r\n    const destroy = () => {\r\n        destroyController?.abort();\r\n\r\n        accordionElements.length = 0;\r\n    };\r\n\r\n    /**\r\n     * Initializes the accordion with the given list of accordion elements\r\n     *\r\n     * If the accordion has already been initialized, it will be destroyed and reinitialized\r\n     *\r\n     * @returns A function to destroy the accordion events\r\n     */\r\n    const init = (accordionElementList: NodeListOf<Element>) => {\r\n        if (!accordionElementList.length) return;\r\n\r\n        if (destroyController) {\r\n            destroy();\r\n        }\r\n\r\n        destroyController = new AbortController();\r\n        accordionElements.push(...accordionElementList);\r\n        const allHeaders: HTMLElement[] = [\r\n            ...accordionElements.map((accordionItemElement) => accordionItemElement.querySelector(headerSelector)),\r\n        ];\r\n\r\n        accordionElements.forEach((accordionItemElement) => {\r\n            initAccordionItemElement(accordionItemElement, allHeaders);\r\n        });\r\n\r\n        return destroy;\r\n    };\r\n\r\n    return {\r\n        init,\r\n        openAccordionAtIndex,\r\n        closeAccordionAtIndex,\r\n        toggleAccordionAtIndex,\r\n    };\r\n}\r\n","/**\r\n * Vanila JS variant to jQuery $(() => {}).\r\n * @param {callback} callback\r\n * @example - documentReady(() => {}).\r\n * This function is binding to document.ready\r\n * */\r\nexport function documentReady(callback: () => void) {\r\n    if (document.readyState !== \"loading\") {\r\n        return callback();\r\n    } else {\r\n        document.addEventListener(\"DOMContentLoaded\", callback);\r\n    }\r\n}\r\n"],"names":["documentReady","accordions","document","querySelectorAll","init","useAccordion","environment","isEditMode","obs","MutationObserver","mutations","forEach","mutation","addedNodes","x","_addedEl$classList","addedEl","classList","contains","childEls","length","observe","body","attributes","childList","subtree","isOpenClass","gsap","useGsap","headerClassName","bodyClassName","openOnlyOne","withScrollIntoView","headerSelector","bodySelector","accordionElements","destroyController","openAccordion","async","accordionElement","withAnimation","add","querySelector","setAttribute","value","scrollIntoView","behavior","bodyElement","fromTo","height","scrollHeight","duration","CustomEaseDurations","MOTION_DURATION_250","ease","CustomEaseNames","MOTION_EASE_IN_OUT","set","closeAccordion","remove","to","onKeyDown","event","headerElement","allHeaders","currentIndex","indexOf","key","preventDefault","nextIndex","focus","prevIndex","click","isOpen","toggleAccordion","accordionItemElement","filter","accordion","openAccordionAtIndex","index","closeAccordionAtIndex","toggleAccordionAtIndex","initAccordionItemElement","addEventListener","signal","destroy","_destroyController","abort","accordionElementList","AbortController","push","map","callback","readyState"],"sourceRoot":""}