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