{"version":3,"file":"listing.js","names":[],"sources":["../../resources/modern-javascript/listing/filter-slider.js","../../resources/modern-javascript/entrypoint/listing.js"],"sourcesContent":["import { isTabletOrSmaller } from '../util/breakpoints';\n\nconst moveFeaturedItem = () => {\n    const productListing = document.querySelector('[data-product-listing-items]');\n    const featured = document.querySelector('[data-collection-feature]');\n    const isHidden = document.querySelector('[data-product-listing]')?.classList.contains('product-listing--hide-filters');\n\n    if (!featured) return;\n\n    const targetIndex = isHidden ? 7 : 4;\n    const reference = productListing.querySelector(`[data-stack-index=\"${targetIndex}\"]`);\n    if (!reference) return;\n\n    reference.insertAdjacentElement('afterend', featured);\n\n    // Clean and apply stack class\n    featured.classList.forEach(cls => {\n        if (/^stack--\\d$/.test(cls)) featured.classList.remove(cls);\n    });\n\n    const stackClass = `stack--${isHidden ? 4 : 3}`;\n    featured.setAttribute('data-aos', stackClass);\n    featured.classList.add(stackClass);\n};\n\nconst updateStackClasses = () => {\n    const productListing = document.querySelector('[data-product-listing]');\n    const isHidden = productListing.classList.contains('product-listing--hide-filters');\n    const groupSize = isHidden ? 4 : 3;\n\n    const wrappers = Array.from(productListing.querySelectorAll('[data-product-listing-items] > *'));\n    let visibleIndex = 0;\n    let firstCycle = true;\n\n    wrappers.forEach(wrapper => {\n        const isFeatured = wrapper.hasAttribute('data-collection-feature');\n        const item = isFeatured\n            ? wrapper\n            : wrapper.querySelector('.product-listing-item');\n\n        if (!item) return;\n        // Prevent animation on index 5 and 6 when switching to group size 4\n        const suppressAnimation = isHidden && [5, 6].includes(visibleIndex);\n        if (suppressAnimation && firstCycle) {\n            console.log('first cycle' + firstCycle);\n            item.removeAttribute('data-aos');\n            visibleIndex++;\n            return; // Skip assigning classes or triggering animation\n        }\n\n        const stackClass = `stack--${(visibleIndex % groupSize) + 1}`;\n        const skip = suppressAnimation || isFeatured;\n\n        // Clean stack classes\n        item.classList.forEach(cls => {\n            if (/^stack--\\d$/.test(cls)) item.classList.remove(cls);\n        });\n\n        // Only reset and animate if not skipped and not already animated\n        if (!skip && !item.classList.contains('aos-animate')) {\n            item.style.opacity = '';\n            item.style.transform = '';\n            item.classList.remove('aos-animate');\n        }\n\n        item.setAttribute('data-aos', stackClass);\n        item.classList.add(stackClass);\n\n        if (isFeatured) {\n            visibleIndex = 0;\n            firstCycle = false;\n        } else {\n            visibleIndex++;\n        }\n    });\n\n    if (typeof AOS !== 'undefined') AOS.refresh();\n};\n\nexport const initFilterSlider = () => {\n    if (isTabletOrSmaller()) return;\n\n    const resultBar = document.querySelector('[data-product-listing-result-bar]');\n    const itemsWrapper = document.querySelector('[data-product-listing-items]');\n    const pagination = document.querySelector('[data-product-listing-pagination]');\n    const productListing = document.querySelector('[data-product-listing]');\n    const slider = document.querySelector('[data-toggle-filters-menu]');\n\n    const toggleFade = (elements, remove, add) => {\n        elements.forEach(el => {\n            if (remove) el.classList.remove(remove);\n            if (add) el.classList.add(add);\n        });\n    };\n\n    slider.addEventListener('click', () => {\n        const elements = [resultBar, itemsWrapper, pagination];\n        toggleFade(elements, null, 'fade-out');\n\n        itemsWrapper.addEventListener('animationend', function handleFadeOut() {\n            productListing.classList.toggle('product-listing--hide-filters');\n\n            moveFeaturedItem();\n            updateStackClasses();\n\n            toggleFade(elements, 'fade-out', 'fade-in');\n\n            itemsWrapper.addEventListener('animationend', function handleFadeIn() {\n                toggleFade(elements, 'fade-in', '');\n                itemsWrapper.removeEventListener('animationend', handleFadeIn);\n            });\n\n            itemsWrapper.removeEventListener('animationend', handleFadeOut);\n        });\n    });\n\n    new ResizeObserver(() => {\n        if (isTabletOrSmaller()) {\n            productListing.classList.remove('product-listing--hide-filters');\n        }\n    }).observe(document.body);\n};\n","import { ListingFilters } from '../listing.js';\nimport { initFilterSlider } from '../listing/filter-slider.js'; \n\ndocument.addEventListener('DOMContentLoaded', () => {\n    const _ = new ListingFilters(\n        document.querySelector('[data-listing-async]'),\n    );\n    initFilterSlider();\n});\n"],"mappings":"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"}