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.
@@ -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, delegateEvents, template } from 'solid-js/web';
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
- var createSlider = function createSlider(options) {
121
- var _opts;
122
- for (var _len = arguments.length, plugins = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
123
- plugins[_key - 1] = arguments[_key];
124
- }
125
- var _slider3;
126
- var el;
127
- var opts = function opts() {
128
- return access(options);
129
- };
130
- var _createSignal = createSignal(((_opts = opts()) === null || _opts === void 0 ? void 0 : _opts.initial) || 0),
131
- _createSignal2 = _slicedToArray(_createSignal, 2),
132
- current = _createSignal2[0],
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());
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
- var create = function create(newEl) {
42
+ const create = newEl => {
149
43
  el = newEl;
150
44
  el.classList.add("keen-slider");
151
- onMount(function () {
152
- _slider3 = new KeenSlider(el, getOptions(), plugins);
153
- _slider3.on("slideChanged", function () {
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(function () {
160
- return options;
161
- }, update));
51
+ createEffect(on(() => options, update));
162
52
  }
163
53
  };
164
- var moveTo = function moveTo(id) {
165
- var _slider2;
166
- var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 250;
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: current,
176
- next: function next() {
177
- return _slider3 && _slider3.next();
178
- },
179
- prev: function prev() {
180
- return _slider3 && _slider3.prev();
181
- },
182
- details: function details() {
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"></div>`, 2),
195
- _tmpl$2 = /*#__PURE__*/template(`<button></button>`, 2);
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
- var SliderContext = createContext(createSignal(null));
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
- var SliderProvider = function SliderProvider(props) {
212
- return createComponent(SliderContext.Provider, {
213
- get value() {
214
- return createSignal(null);
215
- },
216
- get children() {
217
- return props.children;
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
- var Slider = function Slider(props) {
229
- if (isServer) return function () {
230
- var _el$ = _tmpl$.cloneNode(true);
231
- insert(_el$, function () {
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
- var _useContext = useContext(SliderContext),
237
- _useContext2 = _slicedToArray(_useContext, 2),
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(function () {
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 function () {
254
- var _el$2 = _tmpl$.cloneNode(true);
255
- slider(_el$2, function () {
256
- return true;
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
- var SliderButton = function SliderButton(props) {
274
- var context = useContext(SliderContext);
275
- var changeSlide = function changeSlide() {
276
- var _helpers, _helpers2;
133
+ const SliderButton = props => {
134
+ const context = useContext(SliderContext);
135
+ const changeSlide = () => {
277
136
  if (context == null) return;
278
- var _context = _slicedToArray(context, 1),
279
- helpers = _context[0];
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 function () {
283
- var _el$3 = _tmpl$2.cloneNode(true);
140
+ return (() => {
141
+ const _el$3 = _tmpl$2();
284
142
  _el$3.$$click = changeSlide;
285
- insert(_el$3, function () {
286
- return props.children;
287
- });
288
- effect(function (_p$) {
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.className = _p$._v$2 = _v$2);
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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"}