1 | import { template as _$template } from "solid-js/web";
|
2 | import { setAttribute as _$setAttribute } from "solid-js/web";
|
3 | import { effect as _$effect } from "solid-js/web";
|
4 | import { insert as _$insert } from "solid-js/web";
|
5 | import { mergeProps as _$mergeProps } from "solid-js/web";
|
6 | import { createComponent as _$createComponent } from "solid-js/web";
|
7 | import { memo as _$memo } from "solid-js/web";
|
8 |
|
9 | const _tmpl$ = _$template(`<div class="swiper-zoom-container"></div>`, 2);
|
10 |
|
11 | import { createEffect, createSignal, onCleanup, splitProps } from 'solid-js';
|
12 | import { Dynamic } from 'solid-js/web';
|
13 | import { SwiperSlideContext } from './context.js';
|
14 | import { uniqueClasses } from '../components-shared/utils.js';
|
15 |
|
16 | const SwiperSlide = props => {
|
17 | const [local, rest] = splitProps(props, ['children', 'class', 'ref', 'swiper', 'tag', 'virtualIndex', 'zoom']);
|
18 | const [slideClasses, setSlideClasses] = createSignal('swiper-slide');
|
19 | let ref = null;
|
20 |
|
21 | function updateClasses(_s, el, classNames) {
|
22 | if (el === ref) {
|
23 | setSlideClasses(classNames);
|
24 | }
|
25 | }
|
26 |
|
27 | createEffect(() => {
|
28 | if (!ref || !local.swiper) {
|
29 | return;
|
30 | }
|
31 |
|
32 | if (local.swiper.destroyed) {
|
33 | if (slideClasses() !== 'swiper-slide') {
|
34 | setSlideClasses('swiper-slide');
|
35 | }
|
36 |
|
37 | return;
|
38 | }
|
39 |
|
40 | local.swiper.on('_slideClass', updateClasses);
|
41 |
|
42 | onCleanup(() => {
|
43 | if (!local.swiper) return;
|
44 | local.swiper.off('_slideClass', updateClasses);
|
45 | });
|
46 | });
|
47 | createEffect(() => {
|
48 | if (local.swiper && ref && !local.swiper.destroyed) {
|
49 | setSlideClasses(local.swiper.getSlideClasses(ref));
|
50 | }
|
51 | });
|
52 |
|
53 | const slideData = () => ({
|
54 | isActive: slideClasses().indexOf('swiper-slide-active') >= 0 || slideClasses().indexOf('swiper-slide-duplicate-active') >= 0,
|
55 | isVisible: slideClasses().indexOf('swiper-slide-visible') >= 0,
|
56 | isDuplicate: slideClasses().indexOf('swiper-slide-duplicate') >= 0,
|
57 | isPrev: slideClasses().indexOf('swiper-slide-prev') >= 0 || slideClasses().indexOf('swiper-slide-duplicate-prev') >= 0,
|
58 | isNext: slideClasses().indexOf('swiper-slide-next') >= 0 || slideClasses().indexOf('swiper-slide-duplicate-next') >= 0
|
59 | });
|
60 |
|
61 | const renderChildren = () => {
|
62 | return typeof local.children === 'function' ? local.children(slideData()) : local.children;
|
63 | };
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 | return _$createComponent(Dynamic, _$mergeProps({
|
70 | get component() {
|
71 | return local.tag || 'div';
|
72 | },
|
73 |
|
74 | ref: el => {
|
75 | ref = el;
|
76 |
|
77 | if (typeof local.ref === 'function') {
|
78 | local.ref(el);
|
79 | } else {
|
80 | local.ref = el;
|
81 | }
|
82 | },
|
83 |
|
84 | get ["class"]() {
|
85 | return uniqueClasses(`${slideClasses()}${local.class ? ` ${local.class}` : ''}`);
|
86 | },
|
87 |
|
88 | get ["data-swiper-slide-index"]() {
|
89 | return local.virtualIndex;
|
90 | }
|
91 |
|
92 | }, rest, {
|
93 | get children() {
|
94 | return _$createComponent(SwiperSlideContext.Provider, {
|
95 | get value() {
|
96 | return slideData();
|
97 | },
|
98 |
|
99 | get children() {
|
100 | return _$memo(() => !!local.zoom, true)() ? (() => {
|
101 | const _el$ = _tmpl$.cloneNode(true);
|
102 |
|
103 | _$insert(_el$, renderChildren);
|
104 |
|
105 | _$effect(() => _$setAttribute(_el$, "data-swiper-zoom", typeof local.zoom === 'number' ? local.zoom : undefined));
|
106 |
|
107 | return _el$;
|
108 | })() : renderChildren();
|
109 | }
|
110 |
|
111 | });
|
112 | }
|
113 |
|
114 | }));
|
115 | };
|
116 |
|
117 | export { SwiperSlide }; |
\ | No newline at end of file |