solid-slider 1.3.19 → 1.3.21
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 +152 -5
- 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/autoplay.d.ts +7 -7
- package/dist/autoplay/autoplay.jsx +7 -7
- package/dist/autoplay/index.common.js +14 -24
- package/dist/autoplay/index.common.js.map +1 -1
- package/dist/autoplay/index.module.js +14 -24
- package/dist/autoplay/index.module.js.map +1 -1
- package/dist/index/components.d.ts +74 -9
- package/dist/index/components.jsx +156 -9
- package/dist/index/index.common.js +291 -230
- package/dist/index/index.common.js.map +1 -1
- package/dist/index/index.module.js +292 -233
- package/dist/index/index.module.js.map +1 -1
- package/dist/index/primitive.d.ts +11 -11
- package/dist/index/{primitive.js → primitive.jsx} +18 -16
- package/dist/slider.css +21 -0
- package/package.json +11 -11
|
@@ -1,115 +1,21 @@
|
|
|
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.
|
|
101
8
|
*
|
|
102
|
-
* @param
|
|
103
|
-
* @param
|
|
104
|
-
* @returns
|
|
105
|
-
* @returns
|
|
106
|
-
* @returns
|
|
107
|
-
* @returns
|
|
108
|
-
* @returns
|
|
109
|
-
* @returns
|
|
110
|
-
* @returns
|
|
111
|
-
* @returns
|
|
112
|
-
* @returns {Function} helpers.destroy Manual destroy function
|
|
9
|
+
* @param options - Values to initialize the slider with
|
|
10
|
+
* @param plugins - Extensions that enhance KeenSlider options
|
|
11
|
+
* @returns Returns mount and helper methods
|
|
12
|
+
* @returns create - Mounts the slider on provided element
|
|
13
|
+
* @returns helpers.current - Current slide number
|
|
14
|
+
* @returns helpers.next - Function to trigger the next slide
|
|
15
|
+
* @returns helpers.prev - Function to trigger the previous slide
|
|
16
|
+
* @returns helpers.details - Provides details about the current slider
|
|
17
|
+
* @returns helpers.slider - Returns the KeenSlider instance
|
|
18
|
+
* @returns helpers.destroy - Manual destroy function
|
|
113
19
|
*
|
|
114
20
|
* @example
|
|
115
21
|
* ```ts
|
|
@@ -117,82 +23,55 @@ function _nonIterableRest() {
|
|
|
117
23
|
* <div use:slider>...</div>
|
|
118
24
|
* ```
|
|
119
25
|
*/
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
return
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
setCurrent = _createSignal2[1];
|
|
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());
|
|
26
|
+
const createSlider = (options, ...plugins) => {
|
|
27
|
+
let slider;
|
|
28
|
+
let el;
|
|
29
|
+
const opts = () => access(options);
|
|
30
|
+
const [current, setCurrent] = createSignal(opts()?.initial || 0);
|
|
31
|
+
const destroy = () => slider && slider.destroy();
|
|
32
|
+
const getOptions = (overrides = {}) => {
|
|
33
|
+
const baseOpts = opts();
|
|
34
|
+
return {
|
|
35
|
+
selector: el.childNodes,
|
|
36
|
+
...(baseOpts || {}),
|
|
37
|
+
...overrides
|
|
38
|
+
};
|
|
146
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,97 +79,74 @@ 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.
|
|
207
86
|
*
|
|
208
|
-
* @param props
|
|
209
|
-
* @param props
|
|
87
|
+
* @param props.options - Accepts all KeenSlider options.
|
|
88
|
+
* @param props.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.
|
|
224
101
|
*
|
|
225
|
-
* @param props
|
|
226
|
-
* @param props
|
|
102
|
+
* @param props.options - Accepts all KeenSlider options.
|
|
103
|
+
* @param props.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
|
/**
|
|
266
126
|
* Provides a helpful button with next/prev to pair with your slider.
|
|
267
127
|
*
|
|
268
|
-
* @param props
|
|
269
|
-
* @param props
|
|
270
|
-
* @param props
|
|
271
|
-
* @param props
|
|
128
|
+
* @param props.next - Specify if this should be a next button.
|
|
129
|
+
* @param props.prev - Specify if this should be a prev button.
|
|
130
|
+
* @param props.class - Class to override the button.
|
|
131
|
+
* @param props.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.class - Class to override the dots container.
|
|
166
|
+
* @param props.classList - List of classes to override the dots container.
|
|
167
|
+
* @param props.dotClass - Class to override individual dots.
|
|
168
|
+
* @param props.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.options - Options for the thumbnail slider.
|
|
267
|
+
* @param props.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
|