(()=> {
'use strict';
const initialise=(carousel)=> {
if(carousel.dataset.pnCarouselReady==='true') return;
const viewport=carousel.querySelector('[data-pn-carousel-viewport]');
const previous=carousel.querySelector('[data-pn-carousel-previous]');
const next=carousel.querySelector('[data-pn-carousel-next]');
if(!viewport||!previous||!next) return;
carousel.dataset.pnCarouselReady='true';
const step=()=> {
const slide=viewport.querySelector('.pn-suite-property-carousel__slide');
if(!slide) return viewport.clientWidth;
const styles=window.getComputedStyle(viewport);
return slide.getBoundingClientRect().width + (parseFloat(styles.columnGap||styles.gap)||0);
};
const updateControls=()=> {
const maximum=Math.max(0, viewport.scrollWidth - viewport.clientWidth);
previous.disabled=viewport.scrollLeft <=2;
next.disabled=viewport.scrollLeft >=maximum - 2;
};
const move=(direction)=> {
viewport.scrollBy({
left: step() * direction,
behavior: window.matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto':'smooth',
});
};
previous.addEventListener('click', ()=> move(-1));
next.addEventListener('click', ()=> move(1));
viewport.addEventListener('scroll', updateControls, { passive: true });
window.addEventListener('resize', updateControls, { passive: true });
updateControls();
};
const initialiseAll=(root=document)=> {
if(root instanceof Element&&root.matches('[data-pn-property-carousel]')){
initialise(root);
}
root.querySelectorAll('[data-pn-property-carousel]').forEach(initialise);
};
const observeDynamicCarousels=()=> {
if(!('MutationObserver' in window)) return;
const observer=new MutationObserver((mutations)=> {
mutations.forEach((mutation)=> {
mutation.addedNodes.forEach((node)=> {
if(node instanceof Element) initialiseAll(node);
});
});
});
observer.observe(document.documentElement, { childList: true, subtree: true });
};
if(document.readyState==='loading'){
document.addEventListener('DOMContentLoaded', ()=> {
initialiseAll();
observeDynamicCarousels();
});
}else{
initialiseAll();
observeDynamicCarousels();
}
document.addEventListener('elementor/popup/show', ()=> initialiseAll());
})();