@daouypkgs/react-slick 0.0.256

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.
@@ -0,0 +1,623 @@
1
+ import { useDaouyCanvasContext } from '@daouy/host';
2
+ import registerComponent from '@daouy/host/registerComponent';
3
+ import React, { forwardRef, useRef, useEffect, useState } from 'react';
4
+ import Slider from 'react-slick';
5
+
6
+ function _extends() {
7
+ return _extends = Object.assign ? Object.assign.bind() : function (n) {
8
+ for (var e = 1; e < arguments.length; e++) {
9
+ var t = arguments[e];
10
+ for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
11
+ }
12
+ return n;
13
+ }, _extends.apply(null, arguments);
14
+ }
15
+ function _objectWithoutPropertiesLoose(r, e) {
16
+ if (null == r) return {};
17
+ var t = {};
18
+ for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
19
+ if (-1 !== e.indexOf(n)) continue;
20
+ t[n] = r[n];
21
+ }
22
+ return t;
23
+ }
24
+
25
+ var _excluded = ["initialSlide", "arrowColor", "className", "sliderScopeClassName", "autoplay"];
26
+ var sliderHelpers = {
27
+ states: {
28
+ currentSlide: {
29
+ onChangeArgsToValue: function onChangeArgsToValue(_, newIndex) {
30
+ return newIndex;
31
+ },
32
+ onMutate: function onMutate(stateValue, $ref) {
33
+ $ref.slickGoTo(stateValue);
34
+ }
35
+ }
36
+ }
37
+ };
38
+ function useDebounce(value, delay) {
39
+ var _useState = useState(value),
40
+ debouncedValue = _useState[0],
41
+ setDebouncedValue = _useState[1];
42
+ useEffect(function () {
43
+ var timer = setTimeout(function () {
44
+ return setDebouncedValue(value);
45
+ }, delay || 500);
46
+ return function () {
47
+ clearTimeout(timer);
48
+ };
49
+ }, [value, delay]);
50
+ return debouncedValue;
51
+ }
52
+ var SliderWrapper = /*#__PURE__*/forwardRef(function SliderWrapper_(props, userRef) {
53
+ var initialSlide = props.initialSlide,
54
+ arrowColor = props.arrowColor,
55
+ className = props.className,
56
+ sliderScopeClassName = props.sliderScopeClassName,
57
+ autoplay = props.autoplay,
58
+ rest = _objectWithoutPropertiesLoose(props, _excluded);
59
+ // "data-daouy-canvas-envs" prop only exists in studio canvas
60
+ var inCanvas = !!useDaouyCanvasContext();
61
+ var slider = useRef(null);
62
+ var debouncedInitialSlide = useDebounce(initialSlide);
63
+ useEffect(function () {
64
+ if (debouncedInitialSlide !== undefined) {
65
+ var _slider$current;
66
+ (_slider$current = slider.current) == null || _slider$current.slickGoTo(debouncedInitialSlide);
67
+ }
68
+ }, [debouncedInitialSlide, inCanvas]);
69
+ React.useImperativeHandle(userRef, function () {
70
+ return {
71
+ slickGoTo: function slickGoTo(index, dontAnimate) {
72
+ if (slider.current) {
73
+ var slickGoTo = slider.current.slickGoTo;
74
+ slickGoTo(index, dontAnimate);
75
+ }
76
+ },
77
+ slickNext: function slickNext() {
78
+ if (slider.current) {
79
+ var slickNext = slider.current.slickNext;
80
+ slickNext();
81
+ }
82
+ },
83
+ slickPause: function slickPause() {
84
+ if (slider.current) {
85
+ var slickPause = slider.current.slickPause;
86
+ slickPause();
87
+ }
88
+ },
89
+ slickPlay: function slickPlay() {
90
+ if (slider.current) {
91
+ var slickPlay = slider.current.slickPlay;
92
+ slickPlay();
93
+ }
94
+ },
95
+ slickPrev: function slickPrev() {
96
+ if (slider.current) {
97
+ var slickPrev = slider.current.slickPrev;
98
+ slickPrev();
99
+ }
100
+ }
101
+ };
102
+ }, []);
103
+ var css = "\n ." + sliderScopeClassName + " .slick-arrow:before {\n color: " + (arrowColor != null ? arrowColor : "black") + ";\n }\n ." + sliderScopeClassName + " .slick-slide img:only-child,\n ." + sliderScopeClassName + " .slick-slide .__wab_img-wrapper:only-child {\n " + "\n " + "\n display: inline-block;\n vertical-align: top;\n }\n ";
104
+ return React.createElement(React.Fragment, null, React.createElement(Slider, Object.assign({
105
+ className: className + " " + sliderScopeClassName,
106
+ ref: slider,
107
+ // We don't want to turn on autoplay while editing in canvas, because this
108
+ // leads to a state update for current slide, which ends up re-rendering
109
+ // the entire artboard.
110
+ autoplay: autoplay && !inCanvas ? autoplay : undefined
111
+ }, rest)), React.createElement("style", {
112
+ dangerouslySetInnerHTML: {
113
+ __html: css
114
+ }
115
+ }));
116
+ });
117
+ function registerSlider(loader) {
118
+ function getSlideInfo(_ref) {
119
+ var _ref$rows = _ref.rows,
120
+ rows = _ref$rows === void 0 ? 1 : _ref$rows,
121
+ _ref$slidesPerRow = _ref.slidesPerRow,
122
+ slidesPerRow = _ref$slidesPerRow === void 0 ? 1 : _ref$slidesPerRow,
123
+ _ref$initialSlide = _ref.initialSlide,
124
+ initialSlide = _ref$initialSlide === void 0 ? 0 : _ref$initialSlide,
125
+ children = _ref.children;
126
+ var slidesCnt = Array.isArray(children) ? children.length : 1;
127
+ var slidesPerDot = rows * slidesPerRow;
128
+ var dotCount = Math.ceil(slidesCnt / slidesPerDot);
129
+ var currentDotIndex = initialSlide >= dotCount ? dotCount - 1 : initialSlide;
130
+ return {
131
+ currentDotIndex: currentDotIndex,
132
+ slidesPerDot: slidesPerDot,
133
+ dotCount: dotCount,
134
+ totalSlides: slidesCnt
135
+ };
136
+ }
137
+ function CurrentSlideDropdown(_ref2) {
138
+ var componentProps = _ref2.componentProps,
139
+ studioOps = _ref2.studioOps;
140
+ var _getSlideInfo = getSlideInfo(componentProps),
141
+ dotCount = _getSlideInfo.dotCount,
142
+ currentDotIndex = _getSlideInfo.currentDotIndex;
143
+ var options = Array.from({
144
+ length: dotCount
145
+ }, function (_, i) {
146
+ return i;
147
+ }).map(function (i) {
148
+ return React.createElement("option", {
149
+ key: i,
150
+ value: i.toString()
151
+ }, "Slide ", i);
152
+ });
153
+ var handleChange = function handleChange(e) {
154
+ studioOps.updateStates({
155
+ currentSlide: Number(e.target.value)
156
+ });
157
+ };
158
+ return React.createElement("div", {
159
+ style: {
160
+ width: "100%",
161
+ display: "flex",
162
+ flexDirection: "row",
163
+ gap: "10px",
164
+ justifyContent: "space-between"
165
+ }
166
+ }, React.createElement("div", null, "Current slide:"), React.createElement("select", {
167
+ defaultValue: currentDotIndex.toString(),
168
+ style: {
169
+ width: "100%"
170
+ },
171
+ onChange: handleChange,
172
+ value: currentDotIndex.toString()
173
+ }, options));
174
+ }
175
+ function NavigateSlides(_ref3) {
176
+ var componentProps = _ref3.componentProps,
177
+ studioOps = _ref3.studioOps;
178
+ var _getSlideInfo2 = getSlideInfo(componentProps),
179
+ dotCount = _getSlideInfo2.dotCount,
180
+ currentDotIndex = _getSlideInfo2.currentDotIndex;
181
+ var btnStyles = {
182
+ width: "100%",
183
+ backgroundColor: "#f3f3f2",
184
+ borderRadius: 6
185
+ };
186
+ return React.createElement("div", {
187
+ style: {
188
+ width: "100%",
189
+ display: "flex",
190
+ flexDirection: "row",
191
+ gap: "10px",
192
+ justifyContent: "space-between"
193
+ }
194
+ }, React.createElement("button", {
195
+ style: btnStyles,
196
+ onClick: function onClick() {
197
+ var prevSlide = currentDotIndex === 0 ? dotCount - 1 : (currentDotIndex - 1) % dotCount;
198
+ studioOps.updateStates({
199
+ currentSlide: prevSlide
200
+ });
201
+ }
202
+ }, "Prev slide"), React.createElement("button", {
203
+ style: btnStyles,
204
+ onClick: function onClick() {
205
+ var nextSlide = (currentDotIndex + 1) % dotCount;
206
+ studioOps.updateStates({
207
+ currentSlide: nextSlide
208
+ });
209
+ }
210
+ }, "Next slide"));
211
+ }
212
+ function OutlineMessage() {
213
+ return React.createElement("div", null, "* To re-arrange slides, use the Outline panel");
214
+ }
215
+ var sliderMeta = {
216
+ name: "hostless-slider",
217
+ displayName: "Slider Carousel",
218
+ importName: "SliderWrapper",
219
+ importPath: "@daouypkgs/react-slick",
220
+ description: "[See tutorial video](https://www.youtube.com/watch?v=GMgXLbNHX8c)",
221
+ actions: [{
222
+ type: "custom-action",
223
+ control: CurrentSlideDropdown
224
+ }, {
225
+ type: "custom-action",
226
+ control: NavigateSlides
227
+ }, {
228
+ type: "button-action",
229
+ label: "Append new slide",
230
+ onClick: function onClick(_ref4) {
231
+ var componentProps = _ref4.componentProps,
232
+ studioOps = _ref4.studioOps;
233
+ var _getSlideInfo3 = getSlideInfo(componentProps),
234
+ dotCount = _getSlideInfo3.dotCount,
235
+ slidesPerDot = _getSlideInfo3.slidesPerDot,
236
+ totalSlides = _getSlideInfo3.totalSlides;
237
+ var currentSlide = totalSlides % slidesPerDot ? dotCount - 1 : dotCount;
238
+ studioOps.appendToSlot({
239
+ type: "img",
240
+ src: "",
241
+ styles: {
242
+ maxWidth: "100%"
243
+ }
244
+ }, "children");
245
+ studioOps.updateStates({
246
+ currentSlide: currentSlide
247
+ });
248
+ }
249
+ }, {
250
+ type: "button-action",
251
+ label: "Delete current slide",
252
+ hidden: function hidden(ps) {
253
+ var _ps$children;
254
+ return ((_ps$children = ps.children) == null || (_ps$children = _ps$children.type) == null ? void 0 : _ps$children.name) === "CanvasSlotPlaceholder";
255
+ },
256
+ onClick: function onClick(_ref5) {
257
+ var componentProps = _ref5.componentProps,
258
+ studioOps = _ref5.studioOps;
259
+ var _getSlideInfo4 = getSlideInfo(componentProps),
260
+ currentDotIndex = _getSlideInfo4.currentDotIndex,
261
+ dotCount = _getSlideInfo4.dotCount,
262
+ slidesPerDot = _getSlideInfo4.slidesPerDot,
263
+ totalSlides = _getSlideInfo4.totalSlides;
264
+ studioOps.removeFromSlotAt(currentDotIndex * slidesPerDot, "children");
265
+ var newPos = currentDotIndex;
266
+ if (dotCount === 1) {
267
+ // not the only dot
268
+ newPos = 0;
269
+ } else if (currentDotIndex !== dotCount - 1) {
270
+ // not the last dot
271
+ if (slidesPerDot === 1) {
272
+ newPos = currentDotIndex - 1;
273
+ } else {
274
+ newPos = currentDotIndex;
275
+ }
276
+ } else {
277
+ // the last dot
278
+ newPos = totalSlides % slidesPerDot === 1 ? currentDotIndex - 1 : currentDotIndex;
279
+ }
280
+ studioOps.updateStates({
281
+ currentSlide: newPos
282
+ });
283
+ }
284
+ }, {
285
+ type: "custom-action",
286
+ control: OutlineMessage
287
+ }],
288
+ refActions: {
289
+ slickGoTo: {
290
+ displayName: "Jump to slide",
291
+ argTypes: [{
292
+ name: "index",
293
+ displayName: "Slide index",
294
+ type: "number"
295
+ }, {
296
+ name: "dontAnimate",
297
+ displayName: "Animate?",
298
+ type: "boolean"
299
+ }]
300
+ },
301
+ slickNext: {
302
+ displayName: "Go to Next slide",
303
+ argTypes: []
304
+ },
305
+ slickPause: {
306
+ displayName: "Pause",
307
+ argTypes: []
308
+ },
309
+ slickPlay: {
310
+ displayName: "Play",
311
+ argTypes: []
312
+ },
313
+ slickPrev: {
314
+ displayName: "Go to Previous slide",
315
+ argTypes: []
316
+ }
317
+ },
318
+ props: {
319
+ children: {
320
+ type: "slot",
321
+ defaultValue: [0, 1, 2].map(function (i) {
322
+ return {
323
+ type: "vbox",
324
+ children: {
325
+ type: "img",
326
+ src: "https://static1.quocuy.cloud/components/react-slick/slide" + (i + 1) + ".png",
327
+ styles: {
328
+ maxWidth: "100%"
329
+ }
330
+ }
331
+ };
332
+ })
333
+ },
334
+ accessibility: {
335
+ advanced: true,
336
+ displayName: "Accessibility",
337
+ type: "boolean",
338
+ description: "Enables tabbing and arrow key navigation",
339
+ defaultValueHint: true
340
+ },
341
+ adaptiveHeight: {
342
+ advanced: true,
343
+ displayName: "Adaptive Height",
344
+ type: "boolean",
345
+ description: "Adjust the slide's height automatically",
346
+ defaultValueHint: false
347
+ },
348
+ arrows: {
349
+ displayName: "Arrows",
350
+ type: "boolean",
351
+ description: "Show next/prev arrows",
352
+ defaultValueHint: true
353
+ },
354
+ sliderScopeClassName: {
355
+ type: "styleScopeClass",
356
+ scopeName: "slider"
357
+ },
358
+ arrowColor: {
359
+ type: "color",
360
+ description: "Color of next/prev arrow buttons",
361
+ defaultValueHint: "#000000",
362
+ hidden: function hidden(ps) {
363
+ return ps.arrows === undefined ? false : !ps.arrows;
364
+ }
365
+ },
366
+ autoplay: {
367
+ displayName: "Auto Play",
368
+ type: "boolean",
369
+ description: "Automatically start scrolling; does not take effect while in the editor, but you can see it in live preview.",
370
+ defaultValueHint: false
371
+ },
372
+ autoplaySpeed: {
373
+ displayName: "Auto Play Speed",
374
+ type: "number",
375
+ description: "Delay between each auto scroll, in milliseconds",
376
+ defaultValueHint: 3000,
377
+ hidden: function hidden(props) {
378
+ return !props.autoplay;
379
+ }
380
+ },
381
+ centerMode: {
382
+ displayName: "Center Mode",
383
+ type: "boolean",
384
+ description: "Enables centered view with partial prev/next slides. Use with odd numbered slidesToShow counts",
385
+ defaultValueHint: false
386
+ },
387
+ centerPadding: {
388
+ displayName: "Center Padding",
389
+ type: "string",
390
+ description: "Side padding when in center mode (px or %)",
391
+ defaultValueHint: "50px",
392
+ hidden: function hidden(props) {
393
+ return !props.centerMode;
394
+ }
395
+ },
396
+ dots: {
397
+ displayName: "Dots",
398
+ type: "boolean",
399
+ description: "Show dots for each slide",
400
+ defaultValueHint: false
401
+ },
402
+ draggable: {
403
+ advanced: true,
404
+ displayName: "Draggable",
405
+ type: "boolean",
406
+ description: "Enables mouse dragging on desktop",
407
+ defaultValueHint: true
408
+ },
409
+ cssEase: {
410
+ advanced: true,
411
+ displayName: "Easing",
412
+ type: "string",
413
+ description: "Easing method for transition",
414
+ defaultValueHint: "linear"
415
+ },
416
+ /** Deprecated, this was apparently never working:
417
+ * https://github.com/akiran/react-slick/issues/363 */
418
+ easing: {
419
+ hidden: function hidden() {
420
+ return true;
421
+ },
422
+ advanced: true,
423
+ displayName: "Easing",
424
+ type: "string",
425
+ description: "Easing method for transition",
426
+ defaultValueHint: "linear"
427
+ },
428
+ fade: {
429
+ advanced: true,
430
+ displayName: "Fade",
431
+ type: "boolean",
432
+ description: "Cross-fade between slides",
433
+ defaultValueHint: false
434
+ },
435
+ focusOnSelect: {
436
+ advanced: true,
437
+ displayName: "Focus On Select",
438
+ type: "boolean",
439
+ description: "Go to slide on click",
440
+ defaultValueHint: false
441
+ },
442
+ infinite: {
443
+ displayName: "Infinite",
444
+ type: "boolean",
445
+ description: "Infinitely wrap around contents",
446
+ defaultValueHint: true
447
+ },
448
+ initialSlide: {
449
+ displayName: "Initial Slide",
450
+ type: "number",
451
+ description: "Index of the first visible slide (first is 0), accounting for multiple slides per view if applicable.",
452
+ defaultValueHint: 0,
453
+ defaultValue: 0
454
+ },
455
+ lazyLoad: {
456
+ advanced: true,
457
+ displayName: "Lazy Load",
458
+ type: "choice",
459
+ options: ["ondemand", "progressive"],
460
+ description: "Load images or render components on demand or progressively"
461
+ },
462
+ pauseOnDotsHover: {
463
+ displayName: "Pause On Dots Hover",
464
+ type: "boolean",
465
+ description: "Prevents autoplay while hovering on dots",
466
+ defaultValueHint: false
467
+ },
468
+ pauseOnFocus: {
469
+ displayName: "Pause On Focus",
470
+ type: "boolean",
471
+ description: "Prevents autoplay while focused on slides",
472
+ defaultValueHint: false
473
+ },
474
+ pauseOnHover: {
475
+ displayName: "Pause On Hover",
476
+ type: "boolean",
477
+ description: "Prevents autoplay while hovering on track",
478
+ defaultValueHint: true
479
+ },
480
+ rows: {
481
+ displayName: "Rows",
482
+ type: "number",
483
+ description: "Number of rows per slide (enables grid mode)",
484
+ defaultValueHint: 1
485
+ },
486
+ rtl: {
487
+ advanced: true,
488
+ displayName: "Reverse",
489
+ type: "boolean",
490
+ description: "Reverses the slide order",
491
+ defaultValueHint: false
492
+ },
493
+ // Looks like the `slide` prop is not being used to set the container tag:
494
+ // https://github.com/akiran/react-slick/issues/1318
495
+ // https://github.com/akiran/react-slick/pull/1885
496
+ // https://stackoverflow.com/questions/51492535/wrap-react-slick-li-slides-inside-ul
497
+ //
498
+ // slide: {
499
+ // displayName: "Slide Tag",
500
+ // type: "string",
501
+ // description: 'Slide container element type',
502
+ // defaultValueHint: "div",
503
+ // },
504
+ slidesPerRow: {
505
+ displayName: "Slides Per Row",
506
+ type: "number",
507
+ description: "Number of slides to display in grid mode, this is useful with rows option",
508
+ defaultValueHint: 1
509
+ },
510
+ slidesToScroll: {
511
+ advanced: true,
512
+ displayName: "Slides To Scroll",
513
+ type: "number",
514
+ description: "Number of slides to scroll at once",
515
+ defaultValueHint: 1
516
+ },
517
+ slidesToShow: {
518
+ advanced: true,
519
+ displayName: "Slides To Show",
520
+ type: "number",
521
+ description: "Number of slides to show in one frame",
522
+ defaultValueHint: 1
523
+ },
524
+ speed: {
525
+ advanced: true,
526
+ displayName: "Speed",
527
+ type: "number",
528
+ description: "Transition speed in milliseconds",
529
+ defaultValueHint: 500
530
+ },
531
+ swipe: {
532
+ advanced: true,
533
+ displayName: "Swipe",
534
+ type: "boolean",
535
+ description: "Enable swiping to change slides",
536
+ defaultValueHint: true
537
+ },
538
+ swipeToSlide: {
539
+ advanced: true,
540
+ displayName: "Swipe To Slide",
541
+ type: "boolean",
542
+ description: "Enable drag/swipe irrespective of 'slidesToScroll'",
543
+ defaultValueHint: false
544
+ },
545
+ touchMove: {
546
+ advanced: true,
547
+ displayName: "Touch Move",
548
+ type: "boolean",
549
+ description: "Enable slide moving on touch",
550
+ defaultValueHint: true
551
+ },
552
+ touchThreshold: {
553
+ advanced: true,
554
+ displayName: "Touch Threshold",
555
+ type: "number",
556
+ description: "Swipe distance threshold in pixels",
557
+ defaultValueHint: 5
558
+ },
559
+ useCSS: {
560
+ advanced: true,
561
+ displayName: "Use CSS",
562
+ type: "boolean",
563
+ description: "Enable/Disable CSS Transitions",
564
+ defaultValueHint: true
565
+ },
566
+ useTransform: {
567
+ advanced: true,
568
+ displayName: "Use Transform",
569
+ type: "boolean",
570
+ description: "Enable/Disable CSS Transforms",
571
+ defaultValueHint: true
572
+ },
573
+ variableWidth: {
574
+ advanced: true,
575
+ displayName: "Variable Width",
576
+ type: "boolean",
577
+ description: "Variable width slides",
578
+ defaultValueHint: false
579
+ },
580
+ vertical: {
581
+ advanced: true,
582
+ displayName: "Vertical",
583
+ type: "boolean",
584
+ description: "Vertical slide mode",
585
+ defaultValueHint: false
586
+ },
587
+ beforeChange: {
588
+ type: "eventHandler",
589
+ advanced: true,
590
+ argTypes: [{
591
+ name: "currentSlide",
592
+ type: "number"
593
+ }]
594
+ }
595
+ },
596
+ states: {
597
+ currentSlide: _extends({
598
+ type: "writable",
599
+ valueProp: "initialSlide",
600
+ onChangeProp: "beforeChange",
601
+ variableType: "number"
602
+ }, sliderHelpers.states.currentSlide)
603
+ },
604
+ componentHelpers: {
605
+ helpers: sliderHelpers,
606
+ importName: "sliderHelpers",
607
+ importPath: "@daouypkgs/react-slick"
608
+ },
609
+ defaultStyles: {
610
+ width: "stretch",
611
+ maxWidth: "100%",
612
+ flexDirection: "column"
613
+ }
614
+ };
615
+ if (loader) {
616
+ loader.registerComponent(SliderWrapper, sliderMeta);
617
+ } else {
618
+ registerComponent(SliderWrapper, sliderMeta);
619
+ }
620
+ }
621
+
622
+ export { SliderWrapper, registerSlider, sliderHelpers };
623
+ //# sourceMappingURL=react-slick.esm.js.map