28 lines
641 B
TypeScript
28 lines
641 B
TypeScript
import Swiper from 'swiper';
|
|
import { Autoplay, Thumbs } from 'swiper/modules';
|
|
import 'swiper/swiper-bundle.css';
|
|
import type { CSSSelector, SwiperOptions } from 'swiper/types';
|
|
|
|
export function swiper(node: CSSSelector | HTMLElement, options = {}) {
|
|
let swiperInstance: Swiper;
|
|
$effect(() => {
|
|
swiperInstance = new Swiper(node, {
|
|
modules: [Autoplay, Thumbs],
|
|
...options
|
|
});
|
|
|
|
return () => {
|
|
swiperInstance.destroy();
|
|
};
|
|
});
|
|
return {
|
|
update(newOptions: SwiperOptions | undefined) {
|
|
swiperInstance.destroy();
|
|
swiperInstance = new Swiper(node, {
|
|
modules: [Autoplay, Thumbs],
|
|
...newOptions
|
|
});
|
|
}
|
|
};
|
|
}
|