@v-c/slick 0.0.1

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/dist/Slider.js ADDED
@@ -0,0 +1,447 @@
1
+ import default_props_default from "./default-props.js";
2
+ import { canUseDOM, filterSettings } from "./utils/innerSliderUtils.js";
3
+ import InnerSlider_default from "./InnerSlider.js";
4
+ import { cloneVNode, createVNode, defineComponent, isVNode, mergeProps, onBeforeUnmount, onMounted, shallowRef } from "vue";
5
+ import { filterEmpty } from "@v-c/util/dist/props-util";
6
+ import { toArray } from "@v-c/util/dist/Children/toArray";
7
+ function _isSlot(s) {
8
+ return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
9
+ }
10
+ function toMediaQuery(query) {
11
+ const parts = [];
12
+ if (typeof query.minWidth === "number") parts.push(`(min-width: ${query.minWidth}px)`);
13
+ if (typeof query.maxWidth === "number") parts.push(`(max-width: ${query.maxWidth}px)`);
14
+ return parts.join(" and ");
15
+ }
16
+ var Slider_default = /* @__PURE__ */ defineComponent((props, { slots, expose }) => {
17
+ const breakpoint = shallowRef(null);
18
+ const innerSliderRef = shallowRef(null);
19
+ const responsiveMediaHandlers = [];
20
+ const media = (query, handler) => {
21
+ if (!canUseDOM()) return;
22
+ const mql = window.matchMedia(query);
23
+ const listener = (e) => {
24
+ if (e.matches) handler();
25
+ };
26
+ if (mql.addEventListener) mql.addEventListener("change", listener);
27
+ else mql.addListener(listener);
28
+ responsiveMediaHandlers.push({
29
+ mql,
30
+ listener
31
+ });
32
+ };
33
+ onMounted(() => {
34
+ if (props.responsive) {
35
+ const breakpoints = props.responsive.map((breakpt) => breakpt.breakpoint);
36
+ breakpoints.sort((x, y) => x - y);
37
+ breakpoints.forEach((value, index) => {
38
+ let bQuery = "";
39
+ if (index === 0) bQuery = toMediaQuery({
40
+ minWidth: 0,
41
+ maxWidth: value
42
+ });
43
+ else bQuery = toMediaQuery({
44
+ minWidth: breakpoints[index - 1] + 1,
45
+ maxWidth: value
46
+ });
47
+ canUseDOM() && media(bQuery, () => {
48
+ breakpoint.value = value;
49
+ });
50
+ });
51
+ const query = toMediaQuery({ minWidth: breakpoints.slice(-1)[0] });
52
+ canUseDOM() && media(query, () => {
53
+ breakpoint.value = null;
54
+ });
55
+ }
56
+ });
57
+ onBeforeUnmount(() => {
58
+ responsiveMediaHandlers.forEach((obj) => {
59
+ if (obj.mql.removeEventListener) obj.mql.removeEventListener("change", obj.listener);
60
+ else obj.mql.removeListener(obj.listener);
61
+ });
62
+ });
63
+ const slickPrev = () => innerSliderRef.value?.slickPrev();
64
+ const slickNext = () => innerSliderRef.value?.slickNext();
65
+ const slickGoTo = (slide, dontAnimate = false) => innerSliderRef.value?.slickGoTo(slide, dontAnimate);
66
+ const slickPause = () => innerSliderRef.value?.pause("paused");
67
+ const slickPlay = () => innerSliderRef.value?.autoPlay("play");
68
+ expose({
69
+ innerSlider: innerSliderRef,
70
+ slickPrev,
71
+ slickNext,
72
+ slickGoTo,
73
+ slickPause,
74
+ slickPlay
75
+ });
76
+ return () => {
77
+ let settings;
78
+ if (breakpoint.value && props.responsive) {
79
+ const newProps = props.responsive.filter((resp) => resp.breakpoint === breakpoint.value);
80
+ settings = newProps[0].settings === "unslick" ? "unslick" : {
81
+ ...default_props_default,
82
+ ...props,
83
+ ...newProps[0].settings
84
+ };
85
+ } else settings = {
86
+ ...default_props_default,
87
+ ...props
88
+ };
89
+ if (settings.centerMode) {
90
+ if (settings.slidesToScroll > 1 && process.env.NODE_ENV !== "production") console.warn(`slidesToScroll should be equal to 1 in centerMode, you are using ${settings.slidesToScroll}`);
91
+ settings.slidesToScroll = 1;
92
+ }
93
+ if (settings.fade) {
94
+ if (settings.slidesToShow > 1 && process.env.NODE_ENV !== "production") console.warn(`slidesToShow should be equal to 1 when fade is true, you're using ${settings.slidesToShow}`);
95
+ if (settings.slidesToScroll > 1 && process.env.NODE_ENV !== "production") console.warn(`slidesToScroll should be equal to 1 when fade is true, you're using ${settings.slidesToScroll}`);
96
+ settings.slidesToShow = 1;
97
+ settings.slidesToScroll = 1;
98
+ }
99
+ let children = filterEmpty(toArray(slots.default?.() ?? []));
100
+ children = children.filter((child) => {
101
+ if (typeof child === "string") return !!child.trim();
102
+ return !!child;
103
+ });
104
+ if (settings.variableWidth && (settings.rows > 1 || settings.slidesPerRow > 1)) {
105
+ console.warn("variableWidth is not supported in case of rows > 1 or slidesPerRow > 1");
106
+ settings.variableWidth = false;
107
+ }
108
+ const newChildren = [];
109
+ let currentWidth = null;
110
+ const rows = settings.rows || 1;
111
+ const slidesPerRow = settings.slidesPerRow || 1;
112
+ for (let i = 0; i < children.length; i += rows * slidesPerRow) {
113
+ const newSlide = [];
114
+ for (let j = i; j < i + rows * slidesPerRow; j += slidesPerRow) {
115
+ const row = [];
116
+ for (let k = j; k < j + slidesPerRow; k += 1) {
117
+ if (k >= children.length) break;
118
+ const rawChild = children[k];
119
+ const child = isVNode(rawChild) ? rawChild : createVNode("div", null, [rawChild]);
120
+ if (settings.variableWidth && child.props?.style) currentWidth = child.props.style.width;
121
+ row.push(cloneVNode(child, {
122
+ key: 100 * i + 10 * j + k,
123
+ tabindex: -1,
124
+ style: {
125
+ width: `${100 / slidesPerRow}%`,
126
+ display: "inline-block"
127
+ }
128
+ }));
129
+ }
130
+ newSlide.push(createVNode("div", { "key": 10 * i + j }, [row]));
131
+ }
132
+ if (settings.variableWidth) newChildren.push(createVNode("div", {
133
+ "key": i,
134
+ "style": { width: currentWidth }
135
+ }, [newSlide]));
136
+ else newChildren.push(createVNode("div", { "key": i }, [newSlide]));
137
+ }
138
+ if (settings === "unslick") {
139
+ const className = `regular slider ${props.className || ""}`;
140
+ return createVNode("div", { "class": className }, [children]);
141
+ } else if (newChildren.length <= settings.slidesToShow) settings.unslick = true;
142
+ return createVNode(InnerSlider_default, mergeProps({
143
+ "ref": innerSliderRef,
144
+ "style": props.style
145
+ }, filterSettings(settings)), _isSlot(newChildren) ? newChildren : { default: () => [newChildren] });
146
+ };
147
+ }, { props: {
148
+ accessibility: {
149
+ type: Boolean,
150
+ required: false,
151
+ default: void 0
152
+ },
153
+ adaptiveHeight: {
154
+ type: Boolean,
155
+ required: false,
156
+ default: void 0
157
+ },
158
+ afterChange: {
159
+ type: [Function, null],
160
+ required: false,
161
+ default: void 0
162
+ },
163
+ appendDots: {
164
+ type: Function,
165
+ required: false,
166
+ default: void 0
167
+ },
168
+ arrows: {
169
+ type: Boolean,
170
+ required: false,
171
+ default: void 0
172
+ },
173
+ autoplay: {
174
+ type: Boolean,
175
+ required: false,
176
+ default: void 0
177
+ },
178
+ autoplaySpeed: {
179
+ type: Number,
180
+ required: false,
181
+ default: void 0
182
+ },
183
+ beforeChange: {
184
+ type: [Function, null],
185
+ required: false,
186
+ default: void 0
187
+ },
188
+ centerMode: {
189
+ type: Boolean,
190
+ required: false,
191
+ default: void 0
192
+ },
193
+ centerPadding: {
194
+ type: String,
195
+ required: false,
196
+ default: void 0
197
+ },
198
+ className: {
199
+ type: String,
200
+ required: false,
201
+ default: void 0
202
+ },
203
+ cssEase: {
204
+ type: String,
205
+ required: false,
206
+ default: void 0
207
+ },
208
+ customPaging: {
209
+ type: Function,
210
+ required: false,
211
+ default: void 0
212
+ },
213
+ dots: {
214
+ type: Boolean,
215
+ required: false,
216
+ default: void 0
217
+ },
218
+ dotsClass: {
219
+ type: String,
220
+ required: false,
221
+ default: void 0
222
+ },
223
+ draggable: {
224
+ type: Boolean,
225
+ required: false,
226
+ default: void 0
227
+ },
228
+ easing: {
229
+ type: String,
230
+ required: false,
231
+ default: void 0
232
+ },
233
+ edgeFriction: {
234
+ type: Number,
235
+ required: false,
236
+ default: void 0
237
+ },
238
+ fade: {
239
+ type: Boolean,
240
+ required: false,
241
+ default: void 0
242
+ },
243
+ focusOnSelect: {
244
+ type: Boolean,
245
+ required: false,
246
+ default: void 0
247
+ },
248
+ infinite: {
249
+ type: Boolean,
250
+ required: false,
251
+ default: void 0
252
+ },
253
+ initialSlide: {
254
+ type: Number,
255
+ required: false,
256
+ default: void 0
257
+ },
258
+ lazyLoad: {
259
+ type: [
260
+ String,
261
+ Boolean,
262
+ null
263
+ ],
264
+ required: false,
265
+ default: void 0
266
+ },
267
+ nextArrow: {
268
+ type: [
269
+ Object,
270
+ String,
271
+ Number,
272
+ Boolean,
273
+ null,
274
+ Array
275
+ ],
276
+ required: false,
277
+ default: void 0
278
+ },
279
+ onEdge: {
280
+ type: [Function, null],
281
+ required: false,
282
+ default: void 0
283
+ },
284
+ onInit: {
285
+ type: [Function, null],
286
+ required: false,
287
+ default: void 0
288
+ },
289
+ onLazyLoad: {
290
+ type: [Function, null],
291
+ required: false,
292
+ default: void 0
293
+ },
294
+ onLazyLoadError: {
295
+ type: [Function, null],
296
+ required: false,
297
+ default: void 0
298
+ },
299
+ onReInit: {
300
+ type: [Function, null],
301
+ required: false,
302
+ default: void 0
303
+ },
304
+ onSwipe: {
305
+ type: [Function, null],
306
+ required: false,
307
+ default: void 0
308
+ },
309
+ pauseOnDotsHover: {
310
+ type: Boolean,
311
+ required: false,
312
+ default: void 0
313
+ },
314
+ pauseOnFocus: {
315
+ type: Boolean,
316
+ required: false,
317
+ default: void 0
318
+ },
319
+ pauseOnHover: {
320
+ type: Boolean,
321
+ required: false,
322
+ default: void 0
323
+ },
324
+ prevArrow: {
325
+ type: [
326
+ Object,
327
+ String,
328
+ Number,
329
+ Boolean,
330
+ null,
331
+ Array
332
+ ],
333
+ required: false,
334
+ default: void 0
335
+ },
336
+ responsive: {
337
+ type: [Array, null],
338
+ required: false,
339
+ default: void 0
340
+ },
341
+ rows: {
342
+ type: Number,
343
+ required: false,
344
+ default: void 0
345
+ },
346
+ rtl: {
347
+ type: Boolean,
348
+ required: false,
349
+ default: void 0
350
+ },
351
+ slide: {
352
+ type: String,
353
+ required: false,
354
+ default: void 0
355
+ },
356
+ slidesPerRow: {
357
+ type: Number,
358
+ required: false,
359
+ default: void 0
360
+ },
361
+ slidesToScroll: {
362
+ type: Number,
363
+ required: false,
364
+ default: void 0
365
+ },
366
+ slidesToShow: {
367
+ type: Number,
368
+ required: false,
369
+ default: void 0
370
+ },
371
+ speed: {
372
+ type: Number,
373
+ required: false,
374
+ default: void 0
375
+ },
376
+ swipe: {
377
+ type: Boolean,
378
+ required: false,
379
+ default: void 0
380
+ },
381
+ swipeEvent: {
382
+ type: [Function, null],
383
+ required: false,
384
+ default: void 0
385
+ },
386
+ swipeToSlide: {
387
+ type: Boolean,
388
+ required: false,
389
+ default: void 0
390
+ },
391
+ touchMove: {
392
+ type: Boolean,
393
+ required: false,
394
+ default: void 0
395
+ },
396
+ touchThreshold: {
397
+ type: Number,
398
+ required: false,
399
+ default: void 0
400
+ },
401
+ useCSS: {
402
+ type: Boolean,
403
+ required: false,
404
+ default: void 0
405
+ },
406
+ useTransform: {
407
+ type: Boolean,
408
+ required: false,
409
+ default: void 0
410
+ },
411
+ variableWidth: {
412
+ type: Boolean,
413
+ required: false,
414
+ default: void 0
415
+ },
416
+ vertical: {
417
+ type: Boolean,
418
+ required: false,
419
+ default: void 0
420
+ },
421
+ verticalSwiping: {
422
+ type: Boolean,
423
+ required: false,
424
+ default: void 0
425
+ },
426
+ waitForAnimate: {
427
+ type: Boolean,
428
+ required: false,
429
+ default: void 0
430
+ },
431
+ asNavFor: {
432
+ type: [Object, null],
433
+ required: false,
434
+ default: void 0
435
+ },
436
+ unslick: {
437
+ type: Boolean,
438
+ required: false,
439
+ default: void 0
440
+ },
441
+ style: {
442
+ type: Object,
443
+ required: false,
444
+ default: void 0
445
+ }
446
+ } });
447
+ export { Slider_default as default };