solid-slider 1.3.18 → 1.3.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +145 -4
- package/dist/adaptiveHeight/index.common.js +2 -2
- package/dist/adaptiveHeight/index.common.js.map +1 -1
- package/dist/adaptiveHeight/index.module.js +2 -2
- package/dist/adaptiveHeight/index.module.js.map +1 -1
- package/dist/adaptiveWidth/index.common.js +2 -2
- package/dist/adaptiveWidth/index.common.js.map +1 -1
- package/dist/adaptiveWidth/index.module.js +2 -2
- package/dist/adaptiveWidth/index.module.js.map +1 -1
- package/dist/autoplay/index.common.js +7 -17
- package/dist/autoplay/index.common.js.map +1 -1
- package/dist/autoplay/index.module.js +7 -17
- package/dist/autoplay/index.module.js.map +1 -1
- package/dist/index/components.d.ts +65 -0
- package/dist/index/components.jsx +148 -1
- package/dist/index/index.common.js +273 -212
- package/dist/index/index.common.js.map +1 -1
- package/dist/index/index.module.js +274 -215
- package/dist/index/index.module.js.map +1 -1
- package/dist/slider.css +21 -0
- package/package.json +9 -8
- /package/dist/index/{primitive.js → primitive.jsx} +0 -0
|
@@ -1,100 +1,7 @@
|
|
|
1
|
-
import { createSignal, onMount, onCleanup, createEffect, on, createContext, useContext } from 'solid-js';
|
|
1
|
+
import { createSignal, onMount, onCleanup, createEffect, on, createContext, useContext, createMemo, Show, Index } from 'solid-js';
|
|
2
2
|
import { access } from '@solid-primitives/utils';
|
|
3
3
|
import KeenSlider from 'keen-slider';
|
|
4
|
-
import { createComponent, isServer, insert, effect, classList,
|
|
5
|
-
|
|
6
|
-
function ownKeys(object, enumerableOnly) {
|
|
7
|
-
var keys = Object.keys(object);
|
|
8
|
-
if (Object.getOwnPropertySymbols) {
|
|
9
|
-
var symbols = Object.getOwnPropertySymbols(object);
|
|
10
|
-
enumerableOnly && (symbols = symbols.filter(function (sym) {
|
|
11
|
-
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
12
|
-
})), keys.push.apply(keys, symbols);
|
|
13
|
-
}
|
|
14
|
-
return keys;
|
|
15
|
-
}
|
|
16
|
-
function _objectSpread2(target) {
|
|
17
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
18
|
-
var source = null != arguments[i] ? arguments[i] : {};
|
|
19
|
-
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
|
|
20
|
-
_defineProperty(target, key, source[key]);
|
|
21
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
|
|
22
|
-
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
return target;
|
|
26
|
-
}
|
|
27
|
-
function _defineProperty(obj, key, value) {
|
|
28
|
-
if (key in obj) {
|
|
29
|
-
Object.defineProperty(obj, key, {
|
|
30
|
-
value: value,
|
|
31
|
-
enumerable: true,
|
|
32
|
-
configurable: true,
|
|
33
|
-
writable: true
|
|
34
|
-
});
|
|
35
|
-
} else {
|
|
36
|
-
obj[key] = value;
|
|
37
|
-
}
|
|
38
|
-
return obj;
|
|
39
|
-
}
|
|
40
|
-
function _slicedToArray(arr, i) {
|
|
41
|
-
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
|
|
42
|
-
}
|
|
43
|
-
function _toConsumableArray(arr) {
|
|
44
|
-
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
|
45
|
-
}
|
|
46
|
-
function _arrayWithoutHoles(arr) {
|
|
47
|
-
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
|
|
48
|
-
}
|
|
49
|
-
function _arrayWithHoles(arr) {
|
|
50
|
-
if (Array.isArray(arr)) return arr;
|
|
51
|
-
}
|
|
52
|
-
function _iterableToArray(iter) {
|
|
53
|
-
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
54
|
-
}
|
|
55
|
-
function _iterableToArrayLimit(arr, i) {
|
|
56
|
-
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
57
|
-
if (_i == null) return;
|
|
58
|
-
var _arr = [];
|
|
59
|
-
var _n = true;
|
|
60
|
-
var _d = false;
|
|
61
|
-
var _s, _e;
|
|
62
|
-
try {
|
|
63
|
-
for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
|
|
64
|
-
_arr.push(_s.value);
|
|
65
|
-
if (i && _arr.length === i) break;
|
|
66
|
-
}
|
|
67
|
-
} catch (err) {
|
|
68
|
-
_d = true;
|
|
69
|
-
_e = err;
|
|
70
|
-
} finally {
|
|
71
|
-
try {
|
|
72
|
-
if (!_n && _i["return"] != null) _i["return"]();
|
|
73
|
-
} finally {
|
|
74
|
-
if (_d) throw _e;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return _arr;
|
|
78
|
-
}
|
|
79
|
-
function _unsupportedIterableToArray(o, minLen) {
|
|
80
|
-
if (!o) return;
|
|
81
|
-
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
82
|
-
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
83
|
-
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
84
|
-
if (n === "Map" || n === "Set") return Array.from(o);
|
|
85
|
-
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
86
|
-
}
|
|
87
|
-
function _arrayLikeToArray(arr, len) {
|
|
88
|
-
if (len == null || len > arr.length) len = arr.length;
|
|
89
|
-
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
90
|
-
return arr2;
|
|
91
|
-
}
|
|
92
|
-
function _nonIterableSpread() {
|
|
93
|
-
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
94
|
-
}
|
|
95
|
-
function _nonIterableRest() {
|
|
96
|
-
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
97
|
-
}
|
|
4
|
+
import { createComponent, isServer, template, insert, use, effect, className, classList, setAttribute, delegateEvents } from 'solid-js/web';
|
|
98
5
|
|
|
99
6
|
/**
|
|
100
7
|
* Creates a slider powered by KeenSlider.
|
|
@@ -117,82 +24,54 @@ function _nonIterableRest() {
|
|
|
117
24
|
* <div use:slider>...</div>
|
|
118
25
|
* ```
|
|
119
26
|
*/
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
var destroy = function destroy() {
|
|
135
|
-
return _slider3 && _slider3.destroy();
|
|
136
|
-
};
|
|
137
|
-
var getOptions = function getOptions() {
|
|
138
|
-
var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
139
|
-
return _objectSpread2(_objectSpread2({
|
|
140
|
-
selector: el.childNodes
|
|
141
|
-
}, opts()), overrides);
|
|
142
|
-
};
|
|
143
|
-
var update = function update() {
|
|
144
|
-
var _slider;
|
|
145
|
-
return (_slider = _slider3) === null || _slider === void 0 ? void 0 : _slider.update(getOptions());
|
|
146
|
-
};
|
|
27
|
+
const createSlider = (options, ...plugins) => {
|
|
28
|
+
let slider;
|
|
29
|
+
let el;
|
|
30
|
+
const opts = () => access(options);
|
|
31
|
+
const [current, setCurrent] = createSignal(opts()?.initial || 0);
|
|
32
|
+
const destroy = () => slider && slider.destroy();
|
|
33
|
+
const getOptions = (overrides = {}
|
|
34
|
+
// @ts-ignore
|
|
35
|
+
) => ({
|
|
36
|
+
selector: el.childNodes,
|
|
37
|
+
...opts(),
|
|
38
|
+
...overrides
|
|
39
|
+
});
|
|
40
|
+
const update = () => slider?.update(getOptions());
|
|
147
41
|
// Slider creation method and directive function
|
|
148
|
-
|
|
42
|
+
const create = newEl => {
|
|
149
43
|
el = newEl;
|
|
150
44
|
el.classList.add("keen-slider");
|
|
151
|
-
onMount(
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
return setCurrent(_slider3.track.details.rel);
|
|
155
|
-
});
|
|
45
|
+
onMount(() => {
|
|
46
|
+
slider = new KeenSlider(el, getOptions(), plugins);
|
|
47
|
+
slider.on("slideChanged", () => setCurrent(slider.track.details.rel));
|
|
156
48
|
});
|
|
157
49
|
onCleanup(destroy);
|
|
158
50
|
if (typeof options === "function") {
|
|
159
|
-
createEffect(on(
|
|
160
|
-
return options;
|
|
161
|
-
}, update));
|
|
51
|
+
createEffect(on(() => options, update));
|
|
162
52
|
}
|
|
163
53
|
};
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
var absolute = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
168
|
-
var easing = arguments.length > 3 ? arguments[3] : undefined;
|
|
169
|
-
(_slider2 = _slider3) === null || _slider2 === void 0 ? void 0 : _slider2.moveToIdx(id, absolute, {
|
|
170
|
-
duration: duration,
|
|
54
|
+
const moveTo = (id, duration = 250, absolute = false, easing) => {
|
|
55
|
+
slider?.moveToIdx(id, absolute, {
|
|
56
|
+
duration,
|
|
171
57
|
easing: easing
|
|
172
58
|
});
|
|
173
59
|
};
|
|
174
60
|
return [create, {
|
|
175
|
-
current
|
|
176
|
-
next:
|
|
177
|
-
|
|
178
|
-
},
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
return _slider3 ? _slider3.track.details : {};
|
|
184
|
-
},
|
|
185
|
-
slider: function slider() {
|
|
186
|
-
return _slider3;
|
|
187
|
-
},
|
|
188
|
-
moveTo: moveTo,
|
|
189
|
-
destroy: destroy,
|
|
190
|
-
update: update
|
|
61
|
+
current,
|
|
62
|
+
next: () => slider && slider.next(),
|
|
63
|
+
prev: () => slider && slider.prev(),
|
|
64
|
+
details: () => slider ? slider.track.details : {},
|
|
65
|
+
slider: () => slider,
|
|
66
|
+
moveTo,
|
|
67
|
+
destroy,
|
|
68
|
+
update
|
|
191
69
|
}];
|
|
192
70
|
};
|
|
193
71
|
|
|
194
|
-
const _tmpl$ = /*#__PURE__*/template(`<div class="keen-slider"
|
|
195
|
-
_tmpl$2 = /*#__PURE__*/template(`<button
|
|
72
|
+
const _tmpl$ = /*#__PURE__*/template(`<div class="keen-slider">`),
|
|
73
|
+
_tmpl$2 = /*#__PURE__*/template(`<button>`),
|
|
74
|
+
_tmpl$3 = /*#__PURE__*/template(`<div>`);
|
|
196
75
|
|
|
197
76
|
// The following is a hacky way of extracting SliderHelpers
|
|
198
77
|
|
|
@@ -200,7 +79,7 @@ function returnType(func) {
|
|
|
200
79
|
return {};
|
|
201
80
|
}
|
|
202
81
|
// Main context for the slider
|
|
203
|
-
|
|
82
|
+
const SliderContext = createContext(createSignal(null));
|
|
204
83
|
|
|
205
84
|
/**
|
|
206
85
|
* A helpful and simple Provider to wrap your Slider if controls such as SliderButton are used.
|
|
@@ -208,16 +87,14 @@ var SliderContext = createContext(createSignal(null));
|
|
|
208
87
|
* @param props {KeenSliderOptions} options - Accepts all KeenSlider options.
|
|
209
88
|
* @param props {KeenSLiderPlugin} plugins - A list of Solid Slider or Keen slider plugins.
|
|
210
89
|
*/
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
});
|
|
220
|
-
};
|
|
90
|
+
const SliderProvider = props => createComponent(SliderContext.Provider, {
|
|
91
|
+
get value() {
|
|
92
|
+
return createSignal(null);
|
|
93
|
+
},
|
|
94
|
+
get children() {
|
|
95
|
+
return props.children;
|
|
96
|
+
}
|
|
97
|
+
});
|
|
221
98
|
|
|
222
99
|
/**
|
|
223
100
|
* Main Slider component for specifying the Slider on the page.
|
|
@@ -225,41 +102,24 @@ var SliderProvider = function SliderProvider(props) {
|
|
|
225
102
|
* @param props {KeenSliderOptions} options - Accepts all KeenSlider options.
|
|
226
103
|
* @param props {KeenSLiderPlugin} plugins - A list of Solid Slider or Keen slider plugins.
|
|
227
104
|
*/
|
|
228
|
-
|
|
229
|
-
if (isServer) return
|
|
230
|
-
|
|
231
|
-
insert(_el$,
|
|
232
|
-
return props.children;
|
|
233
|
-
});
|
|
105
|
+
const Slider = props => {
|
|
106
|
+
if (isServer) return (() => {
|
|
107
|
+
const _el$ = _tmpl$();
|
|
108
|
+
insert(_el$, () => props.children);
|
|
234
109
|
return _el$;
|
|
235
|
-
}();
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
setHelpers = _useContext2[1];
|
|
239
|
-
var _createSlider = createSlider.apply(void 0, [props.options || {}].concat(_toConsumableArray(props.plugins || []))),
|
|
240
|
-
_createSlider2 = _slicedToArray(_createSlider, 2),
|
|
241
|
-
slider = _createSlider2[0],
|
|
242
|
-
helpers = _createSlider2[1];
|
|
110
|
+
})();
|
|
111
|
+
const [, setHelpers] = useContext(SliderContext);
|
|
112
|
+
const [slider, helpers] = createSlider(props.options || {}, ...(props.plugins || []));
|
|
243
113
|
setHelpers(helpers);
|
|
244
|
-
createEffect(on(
|
|
245
|
-
return access(props.children);
|
|
246
|
-
}, function () {
|
|
247
|
-
return queueMicrotask(function () {
|
|
248
|
-
return helpers.update();
|
|
249
|
-
});
|
|
250
|
-
}, {
|
|
114
|
+
createEffect(on(() => access(props.children), () => queueMicrotask(() => helpers.update()), {
|
|
251
115
|
defer: true
|
|
252
116
|
}));
|
|
253
|
-
return
|
|
254
|
-
|
|
255
|
-
slider
|
|
256
|
-
|
|
257
|
-
});
|
|
258
|
-
insert(_el$2, function () {
|
|
259
|
-
return props.children;
|
|
260
|
-
});
|
|
117
|
+
return (() => {
|
|
118
|
+
const _el$2 = _tmpl$();
|
|
119
|
+
use(slider, _el$2, () => true);
|
|
120
|
+
insert(_el$2, () => props.children);
|
|
261
121
|
return _el$2;
|
|
262
|
-
}();
|
|
122
|
+
})();
|
|
263
123
|
};
|
|
264
124
|
|
|
265
125
|
/**
|
|
@@ -270,27 +130,23 @@ var Slider = function Slider(props) {
|
|
|
270
130
|
* @param props {string} class - Class to override the button.
|
|
271
131
|
* @param props {object} classList - List of classes to override the button.
|
|
272
132
|
*/
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
var _helpers, _helpers2;
|
|
133
|
+
const SliderButton = props => {
|
|
134
|
+
const context = useContext(SliderContext);
|
|
135
|
+
const changeSlide = () => {
|
|
277
136
|
if (context == null) return;
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
props.next ? (_helpers = helpers()) === null || _helpers === void 0 ? void 0 : _helpers.next() : (_helpers2 = helpers()) === null || _helpers2 === void 0 ? void 0 : _helpers2.prev();
|
|
137
|
+
const [helpers] = context;
|
|
138
|
+
props.next ? helpers()?.next() : helpers()?.prev();
|
|
281
139
|
};
|
|
282
|
-
return
|
|
283
|
-
|
|
140
|
+
return (() => {
|
|
141
|
+
const _el$3 = _tmpl$2();
|
|
284
142
|
_el$3.$$click = changeSlide;
|
|
285
|
-
insert(_el$3,
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
var _v$ = props.disabled || false,
|
|
290
|
-
_v$2 = props["class"],
|
|
143
|
+
insert(_el$3, () => props.children);
|
|
144
|
+
effect(_p$ => {
|
|
145
|
+
const _v$ = props.disabled || false,
|
|
146
|
+
_v$2 = props.class,
|
|
291
147
|
_v$3 = props.classList;
|
|
292
148
|
_v$ !== _p$._v$ && (_el$3.disabled = _p$._v$ = _v$);
|
|
293
|
-
_v$2 !== _p$._v$2 && (_el$3
|
|
149
|
+
_v$2 !== _p$._v$2 && className(_el$3, _p$._v$2 = _v$2);
|
|
294
150
|
_p$._v$3 = classList(_el$3, _v$3, _p$._v$3);
|
|
295
151
|
return _p$;
|
|
296
152
|
}, {
|
|
@@ -299,9 +155,212 @@ var SliderButton = function SliderButton(props) {
|
|
|
299
155
|
_v$3: undefined
|
|
300
156
|
});
|
|
301
157
|
return _el$3;
|
|
302
|
-
}();
|
|
158
|
+
})();
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Navigation dots component for the slider.
|
|
163
|
+
* Displays a dot for each slide and highlights the current slide.
|
|
164
|
+
*
|
|
165
|
+
* @param props {string} class - Class to override the dots container.
|
|
166
|
+
* @param props {object} classList - List of classes to override the dots container.
|
|
167
|
+
* @param props {string} dotClass - Class to override individual dots.
|
|
168
|
+
* @param props {object} dotClassList - List of classes to override individual dots.
|
|
169
|
+
*
|
|
170
|
+
* @example
|
|
171
|
+
* ```tsx
|
|
172
|
+
* <SliderProvider>
|
|
173
|
+
* <Slider>
|
|
174
|
+
* <div class="keen-slider__slide">Slide 1</div>
|
|
175
|
+
* <div class="keen-slider__slide">Slide 2</div>
|
|
176
|
+
* </Slider>
|
|
177
|
+
* <SliderDots />
|
|
178
|
+
* </SliderProvider>
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
const SliderDots = props => {
|
|
182
|
+
const context = useContext(SliderContext);
|
|
183
|
+
const [slideCount, setSlideCount] = createSignal(0);
|
|
184
|
+
const handleDotClick = idx => {
|
|
185
|
+
if (context == null) return;
|
|
186
|
+
const [helpers] = context;
|
|
187
|
+
helpers()?.moveTo(idx);
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
// Update slide count when slider is created/updated
|
|
191
|
+
createEffect(() => {
|
|
192
|
+
if (!context) return;
|
|
193
|
+
const [helpers] = context;
|
|
194
|
+
const sliderInstance = helpers()?.slider();
|
|
195
|
+
if (sliderInstance) {
|
|
196
|
+
const updateCount = () => {
|
|
197
|
+
const details = helpers()?.details();
|
|
198
|
+
setSlideCount(details?.slides?.length || 0);
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
// Set initial count
|
|
202
|
+
updateCount();
|
|
203
|
+
|
|
204
|
+
// Listen for slider changes
|
|
205
|
+
sliderInstance.on("created", updateCount);
|
|
206
|
+
sliderInstance.on("updated", updateCount);
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
const slides = createMemo(() => Array.from({
|
|
210
|
+
length: slideCount()
|
|
211
|
+
}, (_, i) => i));
|
|
212
|
+
return createComponent(Show, {
|
|
213
|
+
when: context != null,
|
|
214
|
+
get children() {
|
|
215
|
+
const _el$4 = _tmpl$3();
|
|
216
|
+
insert(_el$4, createComponent(Index, {
|
|
217
|
+
get each() {
|
|
218
|
+
return slides();
|
|
219
|
+
},
|
|
220
|
+
children: idx => {
|
|
221
|
+
const [helpers] = context;
|
|
222
|
+
const isActive = () => helpers()?.current() === idx();
|
|
223
|
+
return (() => {
|
|
224
|
+
const _el$5 = _tmpl$2();
|
|
225
|
+
_el$5.$$click = () => handleDotClick(idx());
|
|
226
|
+
effect(_p$ => {
|
|
227
|
+
const _v$6 = props.dotClass || "keen-slider-dot",
|
|
228
|
+
_v$7 = {
|
|
229
|
+
...props.dotClassList,
|
|
230
|
+
active: isActive()
|
|
231
|
+
},
|
|
232
|
+
_v$8 = `Go to slide ${idx() + 1}`;
|
|
233
|
+
_v$6 !== _p$._v$6 && className(_el$5, _p$._v$6 = _v$6);
|
|
234
|
+
_p$._v$7 = classList(_el$5, _v$7, _p$._v$7);
|
|
235
|
+
_v$8 !== _p$._v$8 && setAttribute(_el$5, "aria-label", _p$._v$8 = _v$8);
|
|
236
|
+
return _p$;
|
|
237
|
+
}, {
|
|
238
|
+
_v$6: undefined,
|
|
239
|
+
_v$7: undefined,
|
|
240
|
+
_v$8: undefined
|
|
241
|
+
});
|
|
242
|
+
return _el$5;
|
|
243
|
+
})();
|
|
244
|
+
}
|
|
245
|
+
}));
|
|
246
|
+
effect(_p$ => {
|
|
247
|
+
const _v$4 = props.class || "keen-slider-dots",
|
|
248
|
+
_v$5 = props.classList;
|
|
249
|
+
_v$4 !== _p$._v$4 && className(_el$4, _p$._v$4 = _v$4);
|
|
250
|
+
_p$._v$5 = classList(_el$4, _v$5, _p$._v$5);
|
|
251
|
+
return _p$;
|
|
252
|
+
}, {
|
|
253
|
+
_v$4: undefined,
|
|
254
|
+
_v$5: undefined
|
|
255
|
+
});
|
|
256
|
+
return _el$4;
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Thumbnail navigation component for the slider.
|
|
263
|
+
* A second Slider that synchronizes with the main slider.
|
|
264
|
+
* User provides thumbnail slides as children.
|
|
265
|
+
*
|
|
266
|
+
* @param props {KeenSliderOptions} options - Options for the thumbnail slider.
|
|
267
|
+
* @param props {KeenSliderPlugin[]} plugins - Plugins for the thumbnail slider.
|
|
268
|
+
*
|
|
269
|
+
* @example
|
|
270
|
+
* ```tsx
|
|
271
|
+
* <SliderProvider>
|
|
272
|
+
* <Slider options={{ loop: true }}>
|
|
273
|
+
* <div class="keen-slider__slide">
|
|
274
|
+
* <img src="slide1.jpg" alt="Slide 1" />
|
|
275
|
+
* </div>
|
|
276
|
+
* <div class="keen-slider__slide">
|
|
277
|
+
* <img src="slide2.jpg" alt="Slide 2" />
|
|
278
|
+
* </div>
|
|
279
|
+
* </Slider>
|
|
280
|
+
* <SliderThumbnails options={{ slides: { perView: 4, spacing: 10 } }}>
|
|
281
|
+
* <div class="keen-slider__slide">
|
|
282
|
+
* <img src="thumb1.jpg" alt="Thumbnail 1" />
|
|
283
|
+
* </div>
|
|
284
|
+
* <div class="keen-slider__slide">
|
|
285
|
+
* <img src="thumb2.jpg" alt="Thumbnail 2" />
|
|
286
|
+
* </div>
|
|
287
|
+
* </SliderThumbnails>
|
|
288
|
+
* </SliderProvider>
|
|
289
|
+
* ```
|
|
290
|
+
*/
|
|
291
|
+
const SliderThumbnails = props => {
|
|
292
|
+
if (isServer) return (() => {
|
|
293
|
+
const _el$6 = _tmpl$3();
|
|
294
|
+
insert(_el$6, () => props.children);
|
|
295
|
+
return _el$6;
|
|
296
|
+
})();
|
|
297
|
+
const mainContext = useContext(SliderContext);
|
|
298
|
+
if (!mainContext) {
|
|
299
|
+
console.warn("SliderThumbnails must be used within a SliderProvider");
|
|
300
|
+
return (() => {
|
|
301
|
+
const _el$7 = _tmpl$3();
|
|
302
|
+
insert(_el$7, () => props.children);
|
|
303
|
+
return _el$7;
|
|
304
|
+
})();
|
|
305
|
+
}
|
|
306
|
+
const [mainHelpers] = mainContext;
|
|
307
|
+
|
|
308
|
+
// Create thumbnail slider with user options
|
|
309
|
+
const [thumbSlider, thumbHelpers] = createSlider(props.options || {}, ...(props.plugins || []));
|
|
310
|
+
|
|
311
|
+
// Update on children change (same as main Slider)
|
|
312
|
+
createEffect(on(() => access(props.children), () => queueMicrotask(() => thumbHelpers.update()), {
|
|
313
|
+
defer: true
|
|
314
|
+
}));
|
|
315
|
+
|
|
316
|
+
// Sync thumbnail slider with main slider
|
|
317
|
+
onMount(() => {
|
|
318
|
+
// Wait for next tick to ensure both sliders are mounted
|
|
319
|
+
queueMicrotask(() => {
|
|
320
|
+
const mainSliderInstance = mainHelpers()?.slider();
|
|
321
|
+
const thumbSliderInstance = thumbHelpers.slider();
|
|
322
|
+
if (mainSliderInstance && thumbSliderInstance) {
|
|
323
|
+
// Function to update active thumbnail
|
|
324
|
+
const activeClassName = props.activeClass || "active";
|
|
325
|
+
const updateActiveThumbnail = () => {
|
|
326
|
+
const mainCurrent = mainHelpers()?.current();
|
|
327
|
+
if (mainCurrent !== undefined) {
|
|
328
|
+
// Remove active class from all thumbnails
|
|
329
|
+
thumbSliderInstance.slides.forEach(slide => {
|
|
330
|
+
slide.classList.remove(activeClassName);
|
|
331
|
+
});
|
|
332
|
+
// Add active class to current thumbnail
|
|
333
|
+
if (thumbSliderInstance.slides[mainCurrent]) {
|
|
334
|
+
thumbSliderInstance.slides[mainCurrent].classList.add(activeClassName);
|
|
335
|
+
}
|
|
336
|
+
// Move thumbnail slider to show active thumbnail
|
|
337
|
+
thumbHelpers.moveTo(mainCurrent);
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
|
|
341
|
+
// Listen to main slider changes
|
|
342
|
+
mainSliderInstance.on("slideChanged", updateActiveThumbnail);
|
|
343
|
+
|
|
344
|
+
// Set initial active state
|
|
345
|
+
updateActiveThumbnail();
|
|
346
|
+
|
|
347
|
+
// Add click handlers to thumbnails
|
|
348
|
+
thumbSliderInstance.slides.forEach((slide, idx) => {
|
|
349
|
+
slide.addEventListener("click", () => {
|
|
350
|
+
mainHelpers()?.moveTo(idx);
|
|
351
|
+
});
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
});
|
|
356
|
+
return (() => {
|
|
357
|
+
const _el$8 = _tmpl$3();
|
|
358
|
+
use(thumbSlider, _el$8, () => true);
|
|
359
|
+
insert(_el$8, () => props.children);
|
|
360
|
+
return _el$8;
|
|
361
|
+
})();
|
|
303
362
|
};
|
|
304
363
|
delegateEvents(["click"]);
|
|
305
364
|
|
|
306
|
-
export { Slider, SliderButton, SliderContext, SliderProvider, createSlider, returnType };
|
|
365
|
+
export { Slider, SliderButton, SliderContext, SliderDots, SliderProvider, SliderThumbnails, createSlider, returnType };
|
|
307
366
|
//# sourceMappingURL=index.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.module.js","sources":["../../src/primitive.ts","../../src/components.tsx"],"sourcesContent":["import {\n on,\n onMount,\n createSignal,\n onCleanup,\n Accessor,\n createEffect,\n} from \"solid-js\";\nimport { access } from \"@solid-primitives/utils\";\nimport KeenSlider, {\n KeenSliderHooks,\n KeenSliderInstance,\n KeenSliderOptions,\n KeenSliderPlugin,\n TrackDetails,\n} from \"keen-slider\";\n\ndeclare module \"solid-js\" {\n namespace JSX {\n interface Directives {\n slider: {};\n }\n }\n}\n\nexport type SliderControls<O, P, H extends string> = [\n create: (el: HTMLElement) => void,\n helpers: {\n current: Accessor<number>;\n next: VoidFunction;\n prev: VoidFunction;\n moveTo: (\n id: number,\n duration?: number,\n absolute?: boolean,\n easing?: (t: number) => number,\n ) => void;\n details: () => TrackDetails;\n slider: () => KeenSliderInstance<O, P, H> | undefined;\n destroy: VoidFunction;\n update: VoidFunction;\n },\n];\n\n/**\n * Creates a slider powered by KeenSlider.\n *\n * @param {Object} options Values to initialize the slider with\n * @param {Array} plugins Extensions that enhance KeenSlider options\n * @returns {[create: Function, helpers: Object]} Returns mount and helper methods\n * @returns {Function} create Mounts the slider on provided element\n * @returns {Function} helpers.current Current slide number\n * @returns {Function} helpers.current Current slide number\n * @returns {Function} helpers.next Function to trigger the next slide\n * @returns {Function} helpers.prev Function to trigger the previous slide\n * @returns {Function<Object>} helpers.details Provides details about the current slider\n * @returns {Function} helpers.slider Returns the KeenSlider instance\n * @returns {Function} helpers.destroy Manual destroy function\n *\n * @example\n * ```ts\n * const [create, { prev, next }] = createSlider();\n * <div use:slider>...</div>\n * ```\n */\nexport const createSlider = <\n O = {},\n P = {},\n H extends string = KeenSliderHooks,\n>(\n options?: KeenSliderOptions<O, P, H> | Accessor<KeenSliderOptions<O, P, H>>,\n ...plugins: KeenSliderPlugin<O, P, H>[]\n): SliderControls<O, P, H> => {\n let slider: KeenSliderInstance<O, P, H> | undefined;\n let el: HTMLElement;\n const opts = () => access(options);\n const [current, setCurrent] = createSignal(opts()?.initial || 0);\n const destroy = () => slider && slider.destroy();\n const getOptions: Accessor<KeenSliderOptions<O, P, H> | undefined> = (\n overrides = {},\n // @ts-ignore\n ) => ({\n selector: el.childNodes,\n ...opts(),\n ...overrides,\n });\n const update = () => slider?.update(getOptions());\n // Slider creation method and directive function\n const create = (newEl: HTMLElement) => {\n el = newEl;\n el.classList.add(\"keen-slider\");\n onMount(() => {\n slider = new KeenSlider<O, P, H>(el, getOptions(), plugins);\n slider.on(\"slideChanged\", () => setCurrent(slider!.track.details.rel));\n });\n onCleanup(destroy);\n if (typeof options === \"function\") {\n createEffect(on(() => options, update));\n }\n };\n const moveTo = (\n id: number,\n duration = 250,\n absolute = false,\n easing?: (t: number) => number,\n ) => {\n slider?.moveToIdx(id, absolute, { duration, easing: easing });\n };\n return [\n create,\n {\n current,\n next: () => slider && slider.next(),\n prev: () => slider && slider.prev(),\n details: () => (slider ? slider.track.details : ({} as TrackDetails)),\n slider: () => slider,\n moveTo,\n destroy,\n update,\n },\n ];\n};\n","import {\n on,\n createContext,\n useContext,\n createSignal,\n FlowComponent,\n createEffect,\n} from \"solid-js\";\nimport { access } from \"@solid-primitives/utils\";\nimport { isServer } from \"solid-js/web\";\nimport { KeenSliderOptions, KeenSliderPlugin } from \"keen-slider\";\nimport { createSlider } from \"./primitive\";\n\n// The following is a hacky way of extracting SliderHelpers\ninterface Func<T> {\n ([...args]: any, args2?: any): T;\n}\nexport function returnType<T>(func: Func<T>) {\n return {} as T;\n}\nconst sliderValues = returnType(createSlider);\ntype SliderHelpers = (typeof sliderValues)[1];\n\n// Main context for the slider\nexport const SliderContext = createContext(\n createSignal<SliderHelpers | null>(null),\n);\n\n/**\n * A helpful and simple Provider to wrap your Slider if controls such as SliderButton are used.\n *\n * @param props {KeenSliderOptions} options - Accepts all KeenSlider options.\n * @param props {KeenSLiderPlugin} plugins - A list of Solid Slider or Keen slider plugins.\n */\nexport const SliderProvider: FlowComponent = (props) => (\n <SliderContext.Provider value={createSignal<SliderHelpers | null>(null)}>\n {props.children}\n </SliderContext.Provider>\n);\n\n/**\n * Main Slider component for specifying the Slider on the page.\n *\n * @param props {KeenSliderOptions} options - Accepts all KeenSlider options.\n * @param props {KeenSLiderPlugin} plugins - A list of Solid Slider or Keen slider plugins.\n */\nexport const Slider: FlowComponent<{\n options?: KeenSliderOptions;\n plugins?: KeenSliderPlugin[];\n}> = (props) => {\n if (isServer) return <div class=\"keen-slider\">{props.children}</div>;\n const [, setHelpers] = useContext(SliderContext);\n const [slider, helpers] = createSlider(\n props.options || {},\n ...(props.plugins || []),\n );\n setHelpers(helpers);\n createEffect(\n on(\n () => access(props.children),\n () => queueMicrotask(() => helpers.update()),\n { defer: true },\n ),\n );\n slider;\n return (\n <div use:slider class=\"keen-slider\">\n {props.children}\n </div>\n );\n};\n\n/**\n * Provides a helpful button with next/prev to pair with your slider.\n *\n * @param props {boolean} next - Specify if this should be a next button.\n * @param props {boolean} prev - Specify if this should be a prev button.\n * @param props {string} class - Class to override the button.\n * @param props {object} classList - List of classes to override the button.\n */\nexport const SliderButton: FlowComponent<{\n next?: boolean;\n prev?: boolean;\n disabled?: boolean;\n class?: string;\n classList?: { [k: string]: boolean | undefined };\n}> = (props) => {\n const context = useContext(SliderContext);\n const changeSlide = () => {\n if (context == null) return;\n const [helpers] = context;\n props.next ? helpers()?.next() : helpers()?.prev();\n };\n return (\n <button\n disabled={props.disabled || false}\n class={props.class}\n classList={props.classList}\n onClick={changeSlide}\n >\n {props.children}\n </button>\n );\n};\n"],"names":["createSlider","options","plugins","slider","el","opts","access","createSignal","initial","current","setCurrent","destroy","getOptions","overrides","_objectSpread","selector","childNodes","update","create","newEl","classList","add","onMount","KeenSlider","on","track","details","rel","onCleanup","createEffect","moveTo","id","duration","absolute","easing","moveToIdx","next","prev","returnType","func","SliderContext","createContext","SliderProvider","props","_$createComponent","children","Slider","isServer","_$insert","useContext","setHelpers","helpers","queueMicrotask","defer","SliderButton","context","changeSlide","_$effect","disabled","_$classList","_$delegateEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.module.js","sources":["../../src/primitive.tsx","../../src/components.tsx"],"sourcesContent":["import {\n on,\n onMount,\n createSignal,\n onCleanup,\n Accessor,\n createEffect,\n} from \"solid-js\";\nimport { access } from \"@solid-primitives/utils\";\nimport KeenSlider, {\n KeenSliderHooks,\n KeenSliderInstance,\n KeenSliderOptions,\n KeenSliderPlugin,\n TrackDetails,\n} from \"keen-slider\";\n\ndeclare module \"solid-js\" {\n namespace JSX {\n interface Directives {\n slider: {};\n }\n }\n}\n\nexport type SliderControls<O, P, H extends string> = [\n create: (el: HTMLElement) => void,\n helpers: {\n current: Accessor<number>;\n next: VoidFunction;\n prev: VoidFunction;\n moveTo: (\n id: number,\n duration?: number,\n absolute?: boolean,\n easing?: (t: number) => number,\n ) => void;\n details: () => TrackDetails;\n slider: () => KeenSliderInstance<O, P, H> | undefined;\n destroy: VoidFunction;\n update: VoidFunction;\n },\n];\n\n/**\n * Creates a slider powered by KeenSlider.\n *\n * @param {Object} options Values to initialize the slider with\n * @param {Array} plugins Extensions that enhance KeenSlider options\n * @returns {[create: Function, helpers: Object]} Returns mount and helper methods\n * @returns {Function} create Mounts the slider on provided element\n * @returns {Function} helpers.current Current slide number\n * @returns {Function} helpers.current Current slide number\n * @returns {Function} helpers.next Function to trigger the next slide\n * @returns {Function} helpers.prev Function to trigger the previous slide\n * @returns {Function<Object>} helpers.details Provides details about the current slider\n * @returns {Function} helpers.slider Returns the KeenSlider instance\n * @returns {Function} helpers.destroy Manual destroy function\n *\n * @example\n * ```ts\n * const [create, { prev, next }] = createSlider();\n * <div use:slider>...</div>\n * ```\n */\nexport const createSlider = <\n O = {},\n P = {},\n H extends string = KeenSliderHooks,\n>(\n options?: KeenSliderOptions<O, P, H> | Accessor<KeenSliderOptions<O, P, H>>,\n ...plugins: KeenSliderPlugin<O, P, H>[]\n): SliderControls<O, P, H> => {\n let slider: KeenSliderInstance<O, P, H> | undefined;\n let el: HTMLElement;\n const opts = () => access(options);\n const [current, setCurrent] = createSignal(opts()?.initial || 0);\n const destroy = () => slider && slider.destroy();\n const getOptions: Accessor<KeenSliderOptions<O, P, H> | undefined> = (\n overrides = {},\n // @ts-ignore\n ) => ({\n selector: el.childNodes,\n ...opts(),\n ...overrides,\n });\n const update = () => slider?.update(getOptions());\n // Slider creation method and directive function\n const create = (newEl: HTMLElement) => {\n el = newEl;\n el.classList.add(\"keen-slider\");\n onMount(() => {\n slider = new KeenSlider<O, P, H>(el, getOptions(), plugins);\n slider.on(\"slideChanged\", () => setCurrent(slider!.track.details.rel));\n });\n onCleanup(destroy);\n if (typeof options === \"function\") {\n createEffect(on(() => options, update));\n }\n };\n const moveTo = (\n id: number,\n duration = 250,\n absolute = false,\n easing?: (t: number) => number,\n ) => {\n slider?.moveToIdx(id, absolute, { duration, easing: easing });\n };\n return [\n create,\n {\n current,\n next: () => slider && slider.next(),\n prev: () => slider && slider.prev(),\n details: () => (slider ? slider.track.details : ({} as TrackDetails)),\n slider: () => slider,\n moveTo,\n destroy,\n update,\n },\n ];\n};\n","import {\n on,\n createContext,\n useContext,\n createSignal,\n FlowComponent,\n createEffect,\n For,\n Show,\n JSX,\n createMemo,\n Index,\n onMount,\n} from \"solid-js\";\nimport { access } from \"@solid-primitives/utils\";\nimport { isServer } from \"solid-js/web\";\nimport { KeenSliderOptions, KeenSliderPlugin } from \"keen-slider\";\nimport { createSlider } from \"./primitive\";\n\n// The following is a hacky way of extracting SliderHelpers\ninterface Func<T> {\n ([...args]: any, args2?: any): T;\n}\nexport function returnType<T>(func: Func<T>) {\n return {} as T;\n}\nconst sliderValues = returnType(createSlider);\ntype SliderHelpers = (typeof sliderValues)[1];\n\n// Main context for the slider\nexport const SliderContext = createContext(\n createSignal<SliderHelpers | null>(null),\n);\n\n/**\n * A helpful and simple Provider to wrap your Slider if controls such as SliderButton are used.\n *\n * @param props {KeenSliderOptions} options - Accepts all KeenSlider options.\n * @param props {KeenSLiderPlugin} plugins - A list of Solid Slider or Keen slider plugins.\n */\nexport const SliderProvider: FlowComponent = (props) => (\n <SliderContext.Provider value={createSignal<SliderHelpers | null>(null)}>\n {props.children}\n </SliderContext.Provider>\n);\n\n/**\n * Main Slider component for specifying the Slider on the page.\n *\n * @param props {KeenSliderOptions} options - Accepts all KeenSlider options.\n * @param props {KeenSLiderPlugin} plugins - A list of Solid Slider or Keen slider plugins.\n */\nexport const Slider: FlowComponent<{\n options?: KeenSliderOptions;\n plugins?: KeenSliderPlugin[];\n}> = (props) => {\n if (isServer) return <div class=\"keen-slider\">{props.children}</div>;\n const [, setHelpers] = useContext(SliderContext);\n const [slider, helpers] = createSlider(\n props.options || {},\n ...(props.plugins || []),\n );\n setHelpers(helpers);\n createEffect(\n on(\n () => access(props.children),\n () => queueMicrotask(() => helpers.update()),\n { defer: true },\n ),\n );\n slider;\n return (\n <div use:slider class=\"keen-slider\">\n {props.children}\n </div>\n );\n};\n\n/**\n * Provides a helpful button with next/prev to pair with your slider.\n *\n * @param props {boolean} next - Specify if this should be a next button.\n * @param props {boolean} prev - Specify if this should be a prev button.\n * @param props {string} class - Class to override the button.\n * @param props {object} classList - List of classes to override the button.\n */\nexport const SliderButton: FlowComponent<{\n next?: boolean;\n prev?: boolean;\n disabled?: boolean;\n class?: string;\n classList?: { [k: string]: boolean | undefined };\n}> = (props) => {\n const context = useContext(SliderContext);\n const changeSlide = () => {\n if (context == null) return;\n const [helpers] = context;\n props.next ? helpers()?.next() : helpers()?.prev();\n };\n return (\n <button\n disabled={props.disabled || false}\n class={props.class}\n classList={props.classList}\n onClick={changeSlide}\n >\n {props.children}\n </button>\n );\n};\n\n/**\n * Navigation dots component for the slider.\n * Displays a dot for each slide and highlights the current slide.\n *\n * @param props {string} class - Class to override the dots container.\n * @param props {object} classList - List of classes to override the dots container.\n * @param props {string} dotClass - Class to override individual dots.\n * @param props {object} dotClassList - List of classes to override individual dots.\n *\n * @example\n * ```tsx\n * <SliderProvider>\n * <Slider>\n * <div class=\"keen-slider__slide\">Slide 1</div>\n * <div class=\"keen-slider__slide\">Slide 2</div>\n * </Slider>\n * <SliderDots />\n * </SliderProvider>\n * ```\n */\nexport const SliderDots: FlowComponent<{\n class?: string;\n classList?: { [k: string]: boolean | undefined };\n dotClass?: string;\n dotClassList?: { [k: string]: boolean | undefined };\n}> = (props) => {\n const context = useContext(SliderContext);\n const [slideCount, setSlideCount] = createSignal(0);\n\n const handleDotClick = (idx: number) => {\n if (context == null) return;\n const [helpers] = context;\n helpers()?.moveTo(idx);\n };\n\n // Update slide count when slider is created/updated\n createEffect(() => {\n if (!context) return;\n const [helpers] = context;\n const sliderInstance = helpers()?.slider();\n\n if (sliderInstance) {\n const updateCount = () => {\n const details = helpers()?.details();\n setSlideCount(details?.slides?.length || 0);\n };\n\n // Set initial count\n updateCount();\n\n // Listen for slider changes\n sliderInstance.on(\"created\", updateCount);\n sliderInstance.on(\"updated\", updateCount);\n }\n });\n\n const slides = createMemo(() =>\n Array.from({ length: slideCount() }, (_, i) => i),\n );\n\n return (\n <Show when={context != null}>\n <div\n class={props.class || \"keen-slider-dots\"}\n classList={props.classList}\n >\n <Index each={slides()}>\n {(idx) => {\n const [helpers] = context!;\n const isActive = () => helpers()?.current() === idx();\n return (\n <button\n class={props.dotClass || \"keen-slider-dot\"}\n classList={{\n ...props.dotClassList,\n active: isActive(),\n }}\n onClick={() => handleDotClick(idx())}\n aria-label={`Go to slide ${idx() + 1}`}\n />\n );\n }}\n </Index>\n </div>\n </Show>\n );\n};\n\n/**\n * Thumbnail navigation component for the slider.\n * A second Slider that synchronizes with the main slider.\n * User provides thumbnail slides as children.\n *\n * @param props {KeenSliderOptions} options - Options for the thumbnail slider.\n * @param props {KeenSliderPlugin[]} plugins - Plugins for the thumbnail slider.\n *\n * @example\n * ```tsx\n * <SliderProvider>\n * <Slider options={{ loop: true }}>\n * <div class=\"keen-slider__slide\">\n * <img src=\"slide1.jpg\" alt=\"Slide 1\" />\n * </div>\n * <div class=\"keen-slider__slide\">\n * <img src=\"slide2.jpg\" alt=\"Slide 2\" />\n * </div>\n * </Slider>\n * <SliderThumbnails options={{ slides: { perView: 4, spacing: 10 } }}>\n * <div class=\"keen-slider__slide\">\n * <img src=\"thumb1.jpg\" alt=\"Thumbnail 1\" />\n * </div>\n * <div class=\"keen-slider__slide\">\n * <img src=\"thumb2.jpg\" alt=\"Thumbnail 2\" />\n * </div>\n * </SliderThumbnails>\n * </SliderProvider>\n * ```\n */\nexport const SliderThumbnails: FlowComponent<{\n options?: KeenSliderOptions;\n plugins?: KeenSliderPlugin[];\n activeClass?: string;\n}> = (props) => {\n if (isServer) return <div>{props.children}</div>;\n\n const mainContext = useContext(SliderContext);\n\n if (!mainContext) {\n console.warn(\"SliderThumbnails must be used within a SliderProvider\");\n return <div>{props.children}</div>;\n }\n\n const [mainHelpers] = mainContext;\n\n // Create thumbnail slider with user options\n const [thumbSlider, thumbHelpers] = createSlider(\n props.options || {},\n ...(props.plugins || []),\n );\n\n // Update on children change (same as main Slider)\n createEffect(\n on(\n () => access(props.children),\n () => queueMicrotask(() => thumbHelpers.update()),\n { defer: true },\n ),\n );\n\n // Sync thumbnail slider with main slider\n onMount(() => {\n // Wait for next tick to ensure both sliders are mounted\n queueMicrotask(() => {\n const mainSliderInstance = mainHelpers()?.slider();\n const thumbSliderInstance = thumbHelpers.slider();\n\n if (mainSliderInstance && thumbSliderInstance) {\n // Function to update active thumbnail\n const activeClassName = props.activeClass || \"active\";\n const updateActiveThumbnail = () => {\n const mainCurrent = mainHelpers()?.current();\n if (mainCurrent !== undefined) {\n // Remove active class from all thumbnails\n thumbSliderInstance.slides.forEach((slide) => {\n slide.classList.remove(activeClassName);\n });\n // Add active class to current thumbnail\n if (thumbSliderInstance.slides[mainCurrent]) {\n thumbSliderInstance.slides[mainCurrent].classList.add(\n activeClassName,\n );\n }\n // Move thumbnail slider to show active thumbnail\n thumbHelpers.moveTo(mainCurrent);\n }\n };\n\n // Listen to main slider changes\n mainSliderInstance.on(\"slideChanged\", updateActiveThumbnail);\n\n // Set initial active state\n updateActiveThumbnail();\n\n // Add click handlers to thumbnails\n thumbSliderInstance.slides.forEach((slide, idx) => {\n slide.addEventListener(\"click\", () => {\n mainHelpers()?.moveTo(idx);\n });\n });\n }\n });\n });\n\n // Prevent tree-shaking\n thumbSlider;\n\n return <div use:thumbSlider>{props.children}</div>;\n};\n"],"names":["createSlider","options","plugins","slider","el","opts","access","current","setCurrent","createSignal","initial","destroy","getOptions","overrides","selector","childNodes","update","create","newEl","classList","add","onMount","KeenSlider","on","track","details","rel","onCleanup","createEffect","moveTo","id","duration","absolute","easing","moveToIdx","next","prev","returnType","func","SliderContext","createContext","SliderProvider","props","_$createComponent","Provider","value","children","Slider","isServer","_el$","_tmpl$","_$insert","setHelpers","useContext","helpers","queueMicrotask","defer","_el$2","_$use","SliderButton","context","changeSlide","_el$3","_tmpl$2","$$click","_$effect","_p$","_v$","disabled","_v$2","class","_v$3","_$className","_$classList","undefined","SliderDots","slideCount","setSlideCount","handleDotClick","idx","sliderInstance","updateCount","slides","length","createMemo","Array","from","_","i","Show","when","_el$4","_tmpl$3","Index","each","isActive","_el$5","_v$6","dotClass","_v$7","dotClassList","active","_v$8","_$setAttribute","_v$4","_v$5","SliderThumbnails","_el$6","mainContext","console","warn","_el$7","mainHelpers","thumbSlider","thumbHelpers","mainSliderInstance","thumbSliderInstance","activeClassName","activeClass","updateActiveThumbnail","mainCurrent","forEach","slide","remove","addEventListener","_el$8","_$delegateEvents"],"mappings":"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"}
|