{"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":""}