function dynamicSlider(className, options = {}) { const el = document.querySelector("." + className); if (!el) return; const slides = el.querySelectorAll(".splide__slide").length; // 🎯 Default config (clean + predictable) const defaults = { perPage: 3, perMove: 1, gap: "2em", type: "loop", // 'loop' | 'slide' | 'fade' direction: "ltr", arrows: true, pagination: false, autoplay: false, interval: 4000, speed: 600, pauseOnHover: true, pauseOnFocus: true, drag: true, focus: 0, autoScroll: false, breakpoints: { 991: { perPage: 2, gap: "3vw" }, 767: { perPage: 1, gap: "3vw" }, 479: { perPage: 1, gap: "3vw" }, }, }; // 🔀 Merge user options const params = { ...defaults, ...options }; // 🧠 Smart logic layer if (slides <= 1) { Object.assign(params, { perPage: 1, arrows: false, pagination: false, autoplay: false, drag: false, type: "slide", speed: 0, }); // Optional: skip mount entirely // return; } // 🚫 Disable loop if not enough slides if (slides <= params.perPage) { params.type = "slide"; params.arrows = false; } // ⚡ AutoScroll handling if (params.autoScroll) { params.type = "loop"; params.autoScroll = { speed: params.autoScrollSpeed || 1, pauseOnHover: true, pauseOnFocus: false, }; } // 🧩 Mount with or without extension const splide = new Splide(el, params); if (params.autoScroll && window.splide && window.splide.Extensions) { splide.mount(window.splide.Extensions); } else { splide.mount(); } return splide; }