lenis 1.1.2 → 1.1.3-dev.0
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 +0 -3
- package/dist/animate.d.ts +8 -8
- package/dist/dimensions.d.ts +5 -5
- package/dist/lenis-snap.js +0 -26
- package/dist/lenis-snap.js.map +1 -1
- package/dist/lenis.d.ts +29 -33
- package/dist/lenis.js +59 -114
- package/dist/lenis.js.map +1 -1
- package/dist/lenis.min.js +1 -1
- package/dist/lenis.min.js.map +1 -1
- package/dist/lenis.mjs +1 -1
- package/dist/lenis.mjs.map +1 -1
- package/dist/virtual-scroll.d.ts +7 -7
- package/package.json +1 -1
package/dist/lenis.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Lenis = factory());
|
|
5
5
|
})(this, (function () { 'use strict';
|
|
6
6
|
|
|
7
|
-
var version = "1.1.
|
|
7
|
+
var version = "1.1.3-dev.0";
|
|
8
8
|
|
|
9
9
|
// Clamp a value between a minimum and maximum value
|
|
10
10
|
function clamp(min, input, max) {
|
|
@@ -35,19 +35,23 @@
|
|
|
35
35
|
|
|
36
36
|
let completed = false;
|
|
37
37
|
|
|
38
|
-
if (this.
|
|
39
|
-
this.value = damp(this.value, this.to, this.lerp * 60, deltaTime);
|
|
40
|
-
if (Math.round(this.value) === this.to) {
|
|
41
|
-
this.value = this.to;
|
|
42
|
-
completed = true;
|
|
43
|
-
}
|
|
44
|
-
} else {
|
|
38
|
+
if (this.duration && this.easing) {
|
|
45
39
|
this.currentTime += deltaTime;
|
|
46
40
|
const linearProgress = clamp(0, this.currentTime / this.duration, 1);
|
|
47
41
|
|
|
48
42
|
completed = linearProgress >= 1;
|
|
49
43
|
const easedProgress = completed ? 1 : this.easing(linearProgress);
|
|
50
44
|
this.value = this.from + (this.to - this.from) * easedProgress;
|
|
45
|
+
} else if (this.lerp) {
|
|
46
|
+
this.value = damp(this.value, this.to, this.lerp * 60, deltaTime);
|
|
47
|
+
if (Math.round(this.value) === this.to) {
|
|
48
|
+
this.value = this.to;
|
|
49
|
+
completed = true;
|
|
50
|
+
}
|
|
51
|
+
} else {
|
|
52
|
+
// If no easing or lerp, just jump to the end value
|
|
53
|
+
this.value = this.to;
|
|
54
|
+
completed = true;
|
|
51
55
|
}
|
|
52
56
|
|
|
53
57
|
if (completed) {
|
|
@@ -65,11 +69,7 @@
|
|
|
65
69
|
|
|
66
70
|
// Set up the animation from a starting value to an ending value
|
|
67
71
|
// with optional parameters for lerping, duration, easing, and onUpdate callback
|
|
68
|
-
fromTo(
|
|
69
|
-
from,
|
|
70
|
-
to,
|
|
71
|
-
{ lerp = 0.1, duration = 1, easing = (t) => t, onStart, onUpdate }
|
|
72
|
-
) {
|
|
72
|
+
fromTo(from, to, { lerp, duration, easing, onStart, onUpdate }) {
|
|
73
73
|
this.from = this.value = from;
|
|
74
74
|
this.to = to;
|
|
75
75
|
this.lerp = lerp;
|
|
@@ -324,35 +324,17 @@
|
|
|
324
324
|
}
|
|
325
325
|
|
|
326
326
|
class Lenis {
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
easing = (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)), lerp = !duration && 0.1, infinite = false, orientation = 'vertical', // vertical, horizontal
|
|
334
|
-
gestureOrientation = 'vertical', // vertical, horizontal, both
|
|
335
|
-
touchMultiplier = 1, wheelMultiplier = 1, autoResize = true, prevent = false, __experimental__naiveDimensions = false, } = {}) {
|
|
336
|
-
// __isSmooth: boolean = false // true if scroll should be animated
|
|
337
|
-
this.__isScrolling = false; // true when scroll is animating
|
|
338
|
-
this.__isStopped = false; // true if user should not be able to scroll - enable/disable programmatically
|
|
339
|
-
this.__isLocked = false; // same as isStopped but enabled/disabled when scroll reaches target
|
|
340
|
-
this.onVirtualScroll = ({ deltaX, deltaY, event }) => {
|
|
341
|
-
// keep zoom feature
|
|
327
|
+
constructor({ wrapper = window, content = document.documentElement, wheelEventsTarget = wrapper, eventsTarget = wheelEventsTarget, smoothWheel = true, syncTouch = false, syncTouchLerp = 0.075, touchInertiaMultiplier = 35, duration, easing = (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)), lerp = 0.1, infinite = false, orientation = 'vertical', gestureOrientation = 'vertical', touchMultiplier = 1, wheelMultiplier = 1, autoResize = true, prevent = false, __experimental__naiveDimensions = false, } = {}) {
|
|
328
|
+
this.__isScrolling = false;
|
|
329
|
+
this.__isStopped = false;
|
|
330
|
+
this.__isLocked = false;
|
|
331
|
+
this.direction = 0;
|
|
332
|
+
this.onVirtualScroll = ({ deltaX, deltaY, event, }) => {
|
|
342
333
|
if (event.ctrlKey)
|
|
343
334
|
return;
|
|
344
335
|
const isTouch = event.type.includes('touch');
|
|
345
336
|
const isWheel = event.type.includes('wheel');
|
|
346
337
|
this.isTouching = event.type === 'touchstart' || event.type === 'touchmove';
|
|
347
|
-
// if (event.type === 'touchend') {
|
|
348
|
-
// console.log('touchend', this.scroll)
|
|
349
|
-
// // this.lastVelocity = this.velocity
|
|
350
|
-
// // this.velocity = 0
|
|
351
|
-
// // this.isScrolling = false
|
|
352
|
-
// this.emit({ type: 'touchend' })
|
|
353
|
-
// // alert('touchend')
|
|
354
|
-
// return
|
|
355
|
-
// }
|
|
356
338
|
const isTapToStop = this.options.syncTouch &&
|
|
357
339
|
isTouch &&
|
|
358
340
|
event.type === 'touchstart' &&
|
|
@@ -362,35 +344,28 @@
|
|
|
362
344
|
this.reset();
|
|
363
345
|
return;
|
|
364
346
|
}
|
|
365
|
-
const isClick = deltaX === 0 && deltaY === 0;
|
|
366
|
-
// const isPullToRefresh =
|
|
367
|
-
// this.options.gestureOrientation === 'vertical' &&
|
|
368
|
-
// this.scroll === 0 &&
|
|
369
|
-
// !this.options.infinite &&
|
|
370
|
-
// deltaY <= 5 // touch pull to refresh, not reliable yet
|
|
347
|
+
const isClick = deltaX === 0 && deltaY === 0;
|
|
371
348
|
const isUnknownGesture = (this.options.gestureOrientation === 'vertical' && deltaY === 0) ||
|
|
372
349
|
(this.options.gestureOrientation === 'horizontal' && deltaX === 0);
|
|
373
350
|
if (isClick || isUnknownGesture) {
|
|
374
|
-
// console.log('prevent')
|
|
375
351
|
return;
|
|
376
352
|
}
|
|
377
|
-
// catch if scrolling on nested scroll elements
|
|
378
353
|
let composedPath = event.composedPath();
|
|
379
|
-
composedPath = composedPath.slice(0, composedPath.indexOf(this.rootElement));
|
|
354
|
+
composedPath = composedPath.slice(0, composedPath.indexOf(this.rootElement));
|
|
380
355
|
const prevent = this.options.prevent;
|
|
381
356
|
if (!!composedPath.find((node) => {
|
|
382
357
|
var _a, _b, _c, _d, _e;
|
|
383
|
-
return
|
|
384
|
-
((
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
))
|
|
358
|
+
return node instanceof Element &&
|
|
359
|
+
((typeof prevent === 'function' ? prevent === null || prevent === void 0 ? void 0 : prevent(node) : prevent) ||
|
|
360
|
+
((_a = node.hasAttribute) === null || _a === void 0 ? void 0 : _a.call(node, 'data-lenis-prevent')) ||
|
|
361
|
+
(isTouch && ((_b = node.hasAttribute) === null || _b === void 0 ? void 0 : _b.call(node, 'data-lenis-prevent-touch'))) ||
|
|
362
|
+
(isWheel && ((_c = node.hasAttribute) === null || _c === void 0 ? void 0 : _c.call(node, 'data-lenis-prevent-wheel'))) ||
|
|
363
|
+
(((_d = node.classList) === null || _d === void 0 ? void 0 : _d.contains('lenis')) &&
|
|
364
|
+
!((_e = node.classList) === null || _e === void 0 ? void 0 : _e.contains('lenis-stopped'))));
|
|
365
|
+
}))
|
|
391
366
|
return;
|
|
392
367
|
if (this.isStopped || this.isLocked) {
|
|
393
|
-
event.preventDefault();
|
|
368
|
+
event.preventDefault();
|
|
394
369
|
return;
|
|
395
370
|
}
|
|
396
371
|
const isSmooth = (this.options.syncTouch && isTouch) ||
|
|
@@ -437,8 +412,6 @@
|
|
|
437
412
|
this.lastVelocity = this.velocity;
|
|
438
413
|
this.velocity = this.animatedScroll - lastScroll;
|
|
439
414
|
this.direction = Math.sign(this.animatedScroll - lastScroll);
|
|
440
|
-
// this.isSmooth = false
|
|
441
|
-
// this.isScrolling = this.hasScrolled ? 'native' : false
|
|
442
415
|
this.isScrolling = 'native';
|
|
443
416
|
this.emit();
|
|
444
417
|
if (this.velocity !== 0) {
|
|
@@ -449,13 +422,12 @@
|
|
|
449
422
|
this.emit();
|
|
450
423
|
}, 400);
|
|
451
424
|
}
|
|
452
|
-
// this.hasScrolled = true
|
|
453
|
-
// }, 50)
|
|
454
425
|
}
|
|
455
426
|
};
|
|
456
427
|
window.lenisVersion = version;
|
|
457
|
-
|
|
458
|
-
|
|
428
|
+
if (!wrapper ||
|
|
429
|
+
wrapper === document.documentElement ||
|
|
430
|
+
wrapper === document.body) {
|
|
459
431
|
wrapper = window;
|
|
460
432
|
}
|
|
461
433
|
this.options = {
|
|
@@ -482,16 +454,12 @@
|
|
|
482
454
|
this.animate = new Animate();
|
|
483
455
|
this.emitter = new Emitter();
|
|
484
456
|
this.dimensions = new Dimensions({ wrapper, content, autoResize });
|
|
485
|
-
// this.toggleClassName('lenis', true)
|
|
486
457
|
this.updateClassName();
|
|
487
458
|
this.userData = {};
|
|
488
459
|
this.time = 0;
|
|
489
460
|
this.velocity = this.lastVelocity = 0;
|
|
490
461
|
this.isLocked = false;
|
|
491
462
|
this.isStopped = false;
|
|
492
|
-
// this.hasScrolled = false
|
|
493
|
-
// this.isSmooth = syncTouch || smoothWheel
|
|
494
|
-
// this.isSmooth = false
|
|
495
463
|
this.isScrolling = false;
|
|
496
464
|
this.targetScroll = this.animatedScroll = this.actualScroll;
|
|
497
465
|
this.options.wrapper.addEventListener('scroll', this.onNativeScroll, false);
|
|
@@ -507,12 +475,6 @@
|
|
|
507
475
|
this.virtualScroll.destroy();
|
|
508
476
|
this.dimensions.destroy();
|
|
509
477
|
this.cleanUpClassName();
|
|
510
|
-
// this.rootElement.className = ''
|
|
511
|
-
// this.toggleClassName('lenis', false)
|
|
512
|
-
// this.toggleClassName('lenis-smooth', false)
|
|
513
|
-
// this.toggleClassName('lenis-scrolling', false)
|
|
514
|
-
// this.toggleClassName('lenis-stopped', false)
|
|
515
|
-
// this.toggleClassName('lenis-locked', false)
|
|
516
478
|
}
|
|
517
479
|
on(event, callback) {
|
|
518
480
|
return this.emitter.on(event, callback);
|
|
@@ -521,7 +483,6 @@
|
|
|
521
483
|
return this.emitter.off(event, callback);
|
|
522
484
|
}
|
|
523
485
|
setScroll(scroll) {
|
|
524
|
-
// apply scroll value immediately
|
|
525
486
|
if (this.isHorizontal) {
|
|
526
487
|
this.rootElement.scrollLeft = scroll;
|
|
527
488
|
}
|
|
@@ -532,10 +493,8 @@
|
|
|
532
493
|
resize() {
|
|
533
494
|
this.dimensions.resize();
|
|
534
495
|
}
|
|
535
|
-
emit(
|
|
536
|
-
this.userData = userData;
|
|
496
|
+
emit() {
|
|
537
497
|
this.emitter.emit('scroll', this);
|
|
538
|
-
this.userData = {};
|
|
539
498
|
}
|
|
540
499
|
reset() {
|
|
541
500
|
this.isLocked = false;
|
|
@@ -562,32 +521,28 @@
|
|
|
562
521
|
this.time = time;
|
|
563
522
|
this.animate.advance(deltaTime * 0.001);
|
|
564
523
|
}
|
|
565
|
-
scrollTo(target, { offset = 0, immediate = false, lock = false, duration = this.options.duration, easing = this.options.easing, lerp =
|
|
566
|
-
programmatic = true, // called from outside of the class
|
|
567
|
-
userData = {}, } = {}) {
|
|
524
|
+
scrollTo(target, { offset = 0, immediate = false, lock = false, duration = this.options.duration, easing = this.options.easing, lerp = this.options.lerp, onStart, onComplete, force = false, programmatic = true, userData = {}, } = {}) {
|
|
568
525
|
if ((this.isStopped || this.isLocked) && !force)
|
|
569
526
|
return;
|
|
570
|
-
|
|
571
|
-
|
|
527
|
+
if (typeof target === 'string' &&
|
|
528
|
+
['top', 'left', 'start'].includes(target)) {
|
|
572
529
|
target = 0;
|
|
573
530
|
}
|
|
574
|
-
else if (
|
|
531
|
+
else if (typeof target === 'string' &&
|
|
532
|
+
['bottom', 'right', 'end'].includes(target)) {
|
|
575
533
|
target = this.limit;
|
|
576
534
|
}
|
|
577
535
|
else {
|
|
578
536
|
let node;
|
|
579
537
|
if (typeof target === 'string') {
|
|
580
|
-
// CSS selector
|
|
581
538
|
node = document.querySelector(target);
|
|
582
539
|
}
|
|
583
|
-
else if (target === null || target === void 0 ? void 0 : target.nodeType) {
|
|
584
|
-
// Node element
|
|
540
|
+
else if (target instanceof HTMLElement && (target === null || target === void 0 ? void 0 : target.nodeType)) {
|
|
585
541
|
node = target;
|
|
586
542
|
}
|
|
587
543
|
if (node) {
|
|
588
544
|
if (this.options.wrapper !== window) {
|
|
589
|
-
|
|
590
|
-
const wrapperRect = this.options.wrapper.getBoundingClientRect();
|
|
545
|
+
const wrapperRect = this.rootElement.getBoundingClientRect();
|
|
591
546
|
offset -= this.isHorizontal ? wrapperRect.left : wrapperRect.top;
|
|
592
547
|
}
|
|
593
548
|
const rect = node.getBoundingClientRect();
|
|
@@ -607,15 +562,19 @@
|
|
|
607
562
|
else {
|
|
608
563
|
target = clamp(0, target, this.limit);
|
|
609
564
|
}
|
|
565
|
+
if (target === this.targetScroll)
|
|
566
|
+
return;
|
|
567
|
+
this.userData = userData;
|
|
610
568
|
if (immediate) {
|
|
611
569
|
this.animatedScroll = this.targetScroll = target;
|
|
612
570
|
this.setScroll(this.scroll);
|
|
613
571
|
this.reset();
|
|
572
|
+
this.preventNextNativeScrollEvent();
|
|
573
|
+
this.emit();
|
|
614
574
|
onComplete === null || onComplete === void 0 ? void 0 : onComplete(this);
|
|
575
|
+
this.userData = {};
|
|
615
576
|
return;
|
|
616
577
|
}
|
|
617
|
-
if (target === this.targetScroll)
|
|
618
|
-
return;
|
|
619
578
|
if (!programmatic) {
|
|
620
579
|
this.targetScroll = target;
|
|
621
580
|
}
|
|
@@ -624,7 +583,6 @@
|
|
|
624
583
|
easing,
|
|
625
584
|
lerp,
|
|
626
585
|
onStart: () => {
|
|
627
|
-
// started
|
|
628
586
|
if (lock)
|
|
629
587
|
this.isLocked = true;
|
|
630
588
|
this.isScrolling = 'smooth';
|
|
@@ -632,35 +590,36 @@
|
|
|
632
590
|
},
|
|
633
591
|
onUpdate: (value, completed) => {
|
|
634
592
|
this.isScrolling = 'smooth';
|
|
635
|
-
// updated
|
|
636
593
|
this.lastVelocity = this.velocity;
|
|
637
594
|
this.velocity = value - this.animatedScroll;
|
|
638
595
|
this.direction = Math.sign(this.velocity);
|
|
639
596
|
this.animatedScroll = value;
|
|
640
597
|
this.setScroll(this.scroll);
|
|
641
598
|
if (programmatic) {
|
|
642
|
-
// wheel during programmatic should stop it
|
|
643
599
|
this.targetScroll = value;
|
|
644
600
|
}
|
|
645
601
|
if (!completed)
|
|
646
|
-
this.emit(
|
|
602
|
+
this.emit();
|
|
647
603
|
if (completed) {
|
|
648
604
|
this.reset();
|
|
649
|
-
this.emit(
|
|
605
|
+
this.emit();
|
|
650
606
|
onComplete === null || onComplete === void 0 ? void 0 : onComplete(this);
|
|
651
|
-
|
|
652
|
-
this.
|
|
653
|
-
// requestAnimationFrame(() => {
|
|
654
|
-
// delete this.__preventNextNativeScrollEvent
|
|
655
|
-
// })
|
|
607
|
+
this.userData = {};
|
|
608
|
+
this.preventNextNativeScrollEvent();
|
|
656
609
|
}
|
|
657
610
|
},
|
|
658
611
|
});
|
|
659
612
|
}
|
|
613
|
+
preventNextNativeScrollEvent() {
|
|
614
|
+
this.__preventNextNativeScrollEvent = true;
|
|
615
|
+
requestAnimationFrame(() => {
|
|
616
|
+
delete this.__preventNextNativeScrollEvent;
|
|
617
|
+
});
|
|
618
|
+
}
|
|
660
619
|
get rootElement() {
|
|
661
|
-
return this.options.wrapper === window
|
|
620
|
+
return (this.options.wrapper === window
|
|
662
621
|
? document.documentElement
|
|
663
|
-
: this.options.wrapper;
|
|
622
|
+
: this.options.wrapper);
|
|
664
623
|
}
|
|
665
624
|
get limit() {
|
|
666
625
|
if (this.options.__experimental__naiveDimensions) {
|
|
@@ -679,7 +638,6 @@
|
|
|
679
638
|
return this.options.orientation === 'horizontal';
|
|
680
639
|
}
|
|
681
640
|
get actualScroll() {
|
|
682
|
-
// value browser takes into account
|
|
683
641
|
return this.isHorizontal
|
|
684
642
|
? this.rootElement.scrollLeft
|
|
685
643
|
: this.rootElement.scrollTop;
|
|
@@ -690,18 +648,8 @@
|
|
|
690
648
|
: this.animatedScroll;
|
|
691
649
|
}
|
|
692
650
|
get progress() {
|
|
693
|
-
// avoid progress to be NaN
|
|
694
651
|
return this.limit === 0 ? 1 : this.scroll / this.limit;
|
|
695
652
|
}
|
|
696
|
-
// get isSmooth() {
|
|
697
|
-
// return this.__isSmooth
|
|
698
|
-
// }
|
|
699
|
-
// private set isSmooth(value: boolean) {
|
|
700
|
-
// if (this.__isSmooth !== value) {
|
|
701
|
-
// this.__isSmooth = value
|
|
702
|
-
// this.updateClassName()
|
|
703
|
-
// }
|
|
704
|
-
// }
|
|
705
653
|
get isScrolling() {
|
|
706
654
|
return this.__isScrolling;
|
|
707
655
|
}
|
|
@@ -742,15 +690,12 @@
|
|
|
742
690
|
className += ' lenis-scrolling';
|
|
743
691
|
if (this.isScrolling === 'smooth')
|
|
744
692
|
className += ' lenis-smooth';
|
|
745
|
-
// if (this.isScrolling === 'native') className += ' lenis-native'
|
|
746
|
-
// if (this.isSmooth) className += ' lenis-smooth'
|
|
747
693
|
return className;
|
|
748
694
|
}
|
|
749
695
|
updateClassName() {
|
|
750
696
|
this.cleanUpClassName();
|
|
751
697
|
this.rootElement.className =
|
|
752
698
|
`${this.rootElement.className} ${this.className}`.trim();
|
|
753
|
-
// this.emitter.emit('className change', this)
|
|
754
699
|
}
|
|
755
700
|
cleanUpClassName() {
|
|
756
701
|
this.rootElement.className = this.rootElement.className
|
package/dist/lenis.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lenis.js","sources":["../src/maths.js","../src/animate.js","../src/debounce.js","../src/dimensions.js","../src/emitter.js","../src/virtual-scroll.js","../src/index.ts"],"sourcesContent":["// Clamp a value between a minimum and maximum value\r\nexport function clamp(min, input, max) {\r\n return Math.max(min, Math.min(input, max))\r\n}\r\n\r\n// Truncate a floating-point number to a specified number of decimal places\r\nexport function truncate(value, decimals = 0) {\r\n return parseFloat(value.toFixed(decimals))\r\n}\r\n\r\n// Linearly interpolate between two values using an amount (0 <= t <= 1)\r\nexport function lerp(x, y, t) {\r\n return (1 - t) * x + t * y\r\n}\r\n\r\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\r\nexport function damp(x, y, lambda, dt) {\r\n return lerp(x, y, 1 - Math.exp(-lambda * dt))\r\n}\r\n\r\n// Calculate the modulo of the dividend and divisor while keeping the result within the same sign as the divisor\r\n// https://anguscroll.com/just/just-modulo\r\nexport function modulo(n, d) {\r\n return ((n % d) + d) % d\r\n}\r\n","import { clamp, damp } from './maths'\r\n\r\n// Animate class to handle value animations with lerping or easing\r\nexport class Animate {\r\n // Advance the animation by the given delta time\r\n advance(deltaTime) {\r\n if (!this.isRunning) return\r\n\r\n let completed = false\r\n\r\n if (this.lerp) {\r\n this.value = damp(this.value, this.to, this.lerp * 60, deltaTime)\r\n if (Math.round(this.value) === this.to) {\r\n this.value = this.to\r\n completed = true\r\n }\r\n } else {\r\n this.currentTime += deltaTime\r\n const linearProgress = clamp(0, this.currentTime / this.duration, 1)\r\n\r\n completed = linearProgress >= 1\r\n const easedProgress = completed ? 1 : this.easing(linearProgress)\r\n this.value = this.from + (this.to - this.from) * easedProgress\r\n }\r\n\r\n if (completed) {\r\n this.stop()\r\n }\r\n\r\n // Call the onUpdate callback with the current value and completed status\r\n this.onUpdate?.(this.value, completed)\r\n }\r\n\r\n // Stop the animation\r\n stop() {\r\n this.isRunning = false\r\n }\r\n\r\n // Set up the animation from a starting value to an ending value\r\n // with optional parameters for lerping, duration, easing, and onUpdate callback\r\n fromTo(\r\n from,\r\n to,\r\n { lerp = 0.1, duration = 1, easing = (t) => t, onStart, onUpdate }\r\n ) {\r\n this.from = this.value = from\r\n this.to = to\r\n this.lerp = lerp\r\n this.duration = duration\r\n this.easing = easing\r\n this.currentTime = 0\r\n this.isRunning = true\r\n\r\n onStart?.()\r\n this.onUpdate = onUpdate\r\n }\r\n}\r\n","export function debounce(callback, delay) {\r\n let timer\r\n return function () {\r\n let args = arguments\r\n let context = this\r\n clearTimeout(timer)\r\n timer = setTimeout(function () {\r\n callback.apply(context, args)\r\n }, delay)\r\n }\r\n}\r\n","import { debounce } from './debounce'\r\n\r\nexport class Dimensions {\r\n constructor({\r\n wrapper,\r\n content,\r\n autoResize = true,\r\n debounce: debounceValue = 250,\r\n } = {}) {\r\n this.wrapper = wrapper\r\n this.content = content\r\n\r\n if (autoResize) {\r\n this.debouncedResize = debounce(this.resize, debounceValue)\r\n\r\n if (this.wrapper === window) {\r\n window.addEventListener('resize', this.debouncedResize, false)\r\n } else {\r\n this.wrapperResizeObserver = new ResizeObserver(this.debouncedResize)\r\n this.wrapperResizeObserver.observe(this.wrapper)\r\n }\r\n\r\n this.contentResizeObserver = new ResizeObserver(this.debouncedResize)\r\n this.contentResizeObserver.observe(this.content)\r\n }\r\n\r\n this.resize()\r\n }\r\n\r\n destroy() {\r\n this.wrapperResizeObserver?.disconnect()\r\n this.contentResizeObserver?.disconnect()\r\n window.removeEventListener('resize', this.debouncedResize, false)\r\n }\r\n\r\n resize = () => {\r\n this.onWrapperResize()\r\n this.onContentResize()\r\n }\r\n\r\n onWrapperResize = () => {\r\n if (this.wrapper === window) {\r\n this.width = window.innerWidth\r\n this.height = window.innerHeight\r\n } else {\r\n this.width = this.wrapper.clientWidth\r\n this.height = this.wrapper.clientHeight\r\n }\r\n }\r\n\r\n onContentResize = () => {\r\n if (this.wrapper === window) {\r\n this.scrollHeight = this.content.scrollHeight\r\n this.scrollWidth = this.content.scrollWidth\r\n } else {\r\n this.scrollHeight = this.wrapper.scrollHeight\r\n this.scrollWidth = this.wrapper.scrollWidth\r\n }\r\n }\r\n\r\n get limit() {\r\n return {\r\n x: this.scrollWidth - this.width,\r\n y: this.scrollHeight - this.height,\r\n }\r\n }\r\n}\r\n","export class Emitter {\r\n constructor() {\r\n this.events = {}\r\n }\r\n\r\n emit(event, ...args) {\r\n let callbacks = this.events[event] || []\r\n for (let i = 0, length = callbacks.length; i < length; i++) {\r\n callbacks[i](...args)\r\n }\r\n }\r\n\r\n on(event, cb) {\r\n // Add the callback to the event's callback list, or create a new list with the callback\r\n this.events[event]?.push(cb) || (this.events[event] = [cb])\r\n\r\n // Return an unsubscribe function\r\n return () => {\r\n this.events[event] = this.events[event]?.filter((i) => cb !== i)\r\n }\r\n }\r\n\r\n off(event, callback) {\r\n this.events[event] = this.events[event]?.filter((i) => callback !== i)\r\n }\r\n\r\n destroy() {\r\n this.events = {}\r\n }\r\n}\r\n","import { Emitter } from './emitter'\r\n\r\nconst LINE_HEIGHT = 100 / 6\r\n\r\nexport class VirtualScroll {\r\n constructor(element, { wheelMultiplier = 1, touchMultiplier = 1 }) {\r\n this.element = element\r\n this.wheelMultiplier = wheelMultiplier\r\n this.touchMultiplier = touchMultiplier\r\n\r\n this.touchStart = {\r\n x: null,\r\n y: null,\r\n }\r\n\r\n this.emitter = new Emitter()\r\n window.addEventListener('resize', this.onWindowResize, false)\r\n this.onWindowResize()\r\n\r\n this.element.addEventListener('wheel', this.onWheel, { passive: false })\r\n this.element.addEventListener('touchstart', this.onTouchStart, {\r\n passive: false,\r\n })\r\n this.element.addEventListener('touchmove', this.onTouchMove, {\r\n passive: false,\r\n })\r\n this.element.addEventListener('touchend', this.onTouchEnd, {\r\n passive: false,\r\n })\r\n }\r\n\r\n // Add an event listener for the given event and callback\r\n on(event, callback) {\r\n return this.emitter.on(event, callback)\r\n }\r\n\r\n // Remove all event listeners and clean up\r\n destroy() {\r\n this.emitter.destroy()\r\n\r\n window.removeEventListener('resize', this.onWindowResize, false)\r\n\r\n this.element.removeEventListener('wheel', this.onWheel, {\r\n passive: false,\r\n })\r\n this.element.removeEventListener('touchstart', this.onTouchStart, {\r\n passive: false,\r\n })\r\n this.element.removeEventListener('touchmove', this.onTouchMove, {\r\n passive: false,\r\n })\r\n this.element.removeEventListener('touchend', this.onTouchEnd, {\r\n passive: false,\r\n })\r\n }\r\n\r\n // Event handler for 'touchstart' event\r\n onTouchStart = (event) => {\r\n const { clientX, clientY } = event.targetTouches\r\n ? event.targetTouches[0]\r\n : event\r\n\r\n this.touchStart.x = clientX\r\n this.touchStart.y = clientY\r\n\r\n this.lastDelta = {\r\n x: 0,\r\n y: 0,\r\n }\r\n\r\n this.emitter.emit('scroll', {\r\n deltaX: 0,\r\n deltaY: 0,\r\n event,\r\n })\r\n }\r\n\r\n // Event handler for 'touchmove' event\r\n onTouchMove = (event) => {\r\n const { clientX, clientY } = event.targetTouches\r\n ? event.targetTouches[0]\r\n : event\r\n\r\n const deltaX = -(clientX - this.touchStart.x) * this.touchMultiplier\r\n const deltaY = -(clientY - this.touchStart.y) * this.touchMultiplier\r\n\r\n this.touchStart.x = clientX\r\n this.touchStart.y = clientY\r\n\r\n this.lastDelta = {\r\n x: deltaX,\r\n y: deltaY,\r\n }\r\n\r\n this.emitter.emit('scroll', {\r\n deltaX,\r\n deltaY,\r\n event,\r\n })\r\n }\r\n\r\n onTouchEnd = (event) => {\r\n this.emitter.emit('scroll', {\r\n deltaX: this.lastDelta.x,\r\n deltaY: this.lastDelta.y,\r\n event,\r\n })\r\n }\r\n\r\n // Event handler for 'wheel' event\r\n onWheel = (event) => {\r\n let { deltaX, deltaY, deltaMode } = event\r\n\r\n const multiplierX =\r\n deltaMode === 1 ? LINE_HEIGHT : deltaMode === 2 ? this.windowWidth : 1\r\n const multiplierY =\r\n deltaMode === 1 ? LINE_HEIGHT : deltaMode === 2 ? this.windowHeight : 1\r\n\r\n deltaX *= multiplierX\r\n deltaY *= multiplierY\r\n\r\n deltaX *= this.wheelMultiplier\r\n deltaY *= this.wheelMultiplier\r\n\r\n this.emitter.emit('scroll', { deltaX, deltaY, event })\r\n }\r\n\r\n onWindowResize = () => {\r\n this.windowWidth = window.innerWidth\r\n this.windowHeight = window.innerHeight\r\n }\r\n}\r\n","import { version } from '../../../package.json'\r\nimport { Animate } from './animate'\r\nimport { Dimensions } from './dimensions'\r\nimport { Emitter } from './emitter'\r\nimport { clamp, modulo } from './maths'\r\nimport { VirtualScroll } from './virtual-scroll'\r\n\r\n// Technical explanation\r\n// - listen to 'wheel' events\r\n// - prevent 'wheel' event to prevent scroll\r\n// - normalize wheel delta\r\n// - add delta to targetScroll\r\n// - animate scroll to targetScroll (smooth context)\r\n// - if animation is not running, listen to 'scroll' events (native context)\r\n\r\ntype EasingFunction = (t: number) => number\r\ntype Orientation = 'vertical' | 'horizontal'\r\ntype GestureOrientation = 'vertical' | 'horizontal' | 'both'\r\n\r\nexport type LenisOptions = {\r\n wrapper?: Window | HTMLElement\r\n content?: HTMLElement\r\n wheelEventsTarget?: Window | HTMLElement\r\n eventsTarget?: Window | HTMLElement\r\n smoothWheel?: boolean\r\n syncTouch?: boolean\r\n syncTouchLerp?: number\r\n touchInertiaMultiplier?: number\r\n duration?: number\r\n easing?: EasingFunction\r\n lerp?: number\r\n infinite?: boolean\r\n orientation?: Orientation\r\n gestureOrientation?: GestureOrientation\r\n touchMultiplier?: number\r\n wheelMultiplier?: number\r\n autoResize?: boolean\r\n prevent?: boolean | ((node: Element) => boolean)\r\n __experimental__naiveDimensions?: boolean\r\n}\r\n\r\nexport default class Lenis {\r\n // __isSmooth: boolean = false // true if scroll should be animated\r\n __isScrolling: boolean | 'native' | 'smooth' = false // true when scroll is animating\r\n __isStopped: boolean = false // true if user should not be able to scroll - enable/disable programmatically\r\n __isLocked: boolean = false // same as isStopped but enabled/disabled when scroll reaches target\r\n\r\n time: number\r\n userData: object\r\n lastVelocity: number\r\n velocity: number\r\n direction: 1 | -1 | undefined\r\n options: LenisOptions\r\n targetScroll: number\r\n animatedScroll: number\r\n // animate: Animate\r\n // emitter: Emitter\r\n // dimensions: Dimensions\r\n // virtualScroll: VirtualScroll\r\n\r\n constructor({\r\n wrapper = window,\r\n content = document.documentElement,\r\n wheelEventsTarget = wrapper, // deprecated\r\n eventsTarget = wheelEventsTarget,\r\n smoothWheel = true,\r\n syncTouch = false,\r\n syncTouchLerp = 0.075,\r\n touchInertiaMultiplier = 35,\r\n duration, // in seconds\r\n easing = (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)),\r\n lerp = !duration && 0.1,\r\n infinite = false,\r\n orientation = 'vertical', // vertical, horizontal\r\n gestureOrientation = 'vertical', // vertical, horizontal, both\r\n touchMultiplier = 1,\r\n wheelMultiplier = 1,\r\n autoResize = true,\r\n prevent = false,\r\n __experimental__naiveDimensions = false,\r\n }: LenisOptions = {}) {\r\n window.lenisVersion = version\r\n\r\n // if wrapper is html or body, fallback to window\r\n if (wrapper === document.documentElement || wrapper === document.body) {\r\n wrapper = window\r\n }\r\n\r\n this.options = {\r\n wrapper,\r\n content,\r\n wheelEventsTarget,\r\n eventsTarget,\r\n smoothWheel,\r\n syncTouch,\r\n syncTouchLerp,\r\n touchInertiaMultiplier,\r\n duration,\r\n easing,\r\n lerp,\r\n infinite,\r\n gestureOrientation,\r\n orientation,\r\n touchMultiplier,\r\n wheelMultiplier,\r\n autoResize,\r\n prevent,\r\n __experimental__naiveDimensions,\r\n }\r\n\r\n this.animate = new Animate()\r\n this.emitter = new Emitter()\r\n this.dimensions = new Dimensions({ wrapper, content, autoResize })\r\n // this.toggleClassName('lenis', true)\r\n this.updateClassName()\r\n\r\n this.userData = {}\r\n this.time = 0\r\n this.velocity = this.lastVelocity = 0\r\n this.isLocked = false\r\n this.isStopped = false\r\n // this.hasScrolled = false\r\n // this.isSmooth = syncTouch || smoothWheel\r\n // this.isSmooth = false\r\n this.isScrolling = false\r\n this.targetScroll = this.animatedScroll = this.actualScroll\r\n\r\n this.options.wrapper.addEventListener('scroll', this.onNativeScroll, false)\r\n\r\n this.virtualScroll = new VirtualScroll(eventsTarget, {\r\n touchMultiplier,\r\n wheelMultiplier,\r\n })\r\n this.virtualScroll.on('scroll', this.onVirtualScroll)\r\n }\r\n\r\n destroy() {\r\n this.emitter.destroy()\r\n\r\n this.options.wrapper.removeEventListener(\r\n 'scroll',\r\n this.onNativeScroll,\r\n false\r\n )\r\n\r\n this.virtualScroll.destroy()\r\n this.dimensions.destroy()\r\n\r\n this.cleanUpClassName()\r\n\r\n // this.rootElement.className = ''\r\n\r\n // this.toggleClassName('lenis', false)\r\n // this.toggleClassName('lenis-smooth', false)\r\n // this.toggleClassName('lenis-scrolling', false)\r\n // this.toggleClassName('lenis-stopped', false)\r\n // this.toggleClassName('lenis-locked', false)\r\n }\r\n\r\n on(event: string, callback: Function) {\r\n return this.emitter.on(event, callback)\r\n }\r\n\r\n off(event: string, callback: Function) {\r\n return this.emitter.off(event, callback)\r\n }\r\n\r\n private setScroll(scroll) {\r\n // apply scroll value immediately\r\n if (this.isHorizontal) {\r\n this.rootElement.scrollLeft = scroll\r\n } else {\r\n this.rootElement.scrollTop = scroll\r\n }\r\n }\r\n\r\n private onVirtualScroll = ({ deltaX, deltaY, event }) => {\r\n // keep zoom feature\r\n if (event.ctrlKey) return\r\n\r\n const isTouch = event.type.includes('touch')\r\n const isWheel = event.type.includes('wheel')\r\n\r\n this.isTouching = event.type === 'touchstart' || event.type === 'touchmove'\r\n // if (event.type === 'touchend') {\r\n // console.log('touchend', this.scroll)\r\n // // this.lastVelocity = this.velocity\r\n // // this.velocity = 0\r\n // // this.isScrolling = false\r\n // this.emit({ type: 'touchend' })\r\n // // alert('touchend')\r\n // return\r\n // }\r\n\r\n const isTapToStop =\r\n this.options.syncTouch &&\r\n isTouch &&\r\n event.type === 'touchstart' &&\r\n !this.isStopped &&\r\n !this.isLocked\r\n\r\n if (isTapToStop) {\r\n this.reset()\r\n return\r\n }\r\n\r\n const isClick = deltaX === 0 && deltaY === 0 // click event\r\n\r\n // const isPullToRefresh =\r\n // this.options.gestureOrientation === 'vertical' &&\r\n // this.scroll === 0 &&\r\n // !this.options.infinite &&\r\n // deltaY <= 5 // touch pull to refresh, not reliable yet\r\n\r\n const isUnknownGesture =\r\n (this.options.gestureOrientation === 'vertical' && deltaY === 0) ||\r\n (this.options.gestureOrientation === 'horizontal' && deltaX === 0)\r\n\r\n if (isClick || isUnknownGesture) {\r\n // console.log('prevent')\r\n return\r\n }\r\n\r\n // catch if scrolling on nested scroll elements\r\n let composedPath = event.composedPath()\r\n composedPath = composedPath.slice(0, composedPath.indexOf(this.rootElement)) // remove parents elements\r\n\r\n const prevent = this.options.prevent\r\n\r\n if (\r\n !!composedPath.find(\r\n (node) =>\r\n (typeof prevent === 'function' ? prevent?.(node) : prevent) ||\r\n node.hasAttribute?.('data-lenis-prevent') ||\r\n (isTouch && node.hasAttribute?.('data-lenis-prevent-touch')) ||\r\n (isWheel && node.hasAttribute?.('data-lenis-prevent-wheel')) ||\r\n (node.classList?.contains('lenis') &&\r\n !node.classList?.contains('lenis-stopped')) // nested lenis instance\r\n )\r\n )\r\n return\r\n\r\n if (this.isStopped || this.isLocked) {\r\n event.preventDefault() // this will stop forwarding the event to the parent, this is problematic\r\n return\r\n }\r\n\r\n const isSmooth =\r\n (this.options.syncTouch && isTouch) ||\r\n (this.options.smoothWheel && isWheel)\r\n\r\n if (!isSmooth) {\r\n this.isScrolling = 'native'\r\n this.animate.stop()\r\n return\r\n }\r\n\r\n event.preventDefault()\r\n\r\n let delta = deltaY\r\n if (this.options.gestureOrientation === 'both') {\r\n delta = Math.abs(deltaY) > Math.abs(deltaX) ? deltaY : deltaX\r\n } else if (this.options.gestureOrientation === 'horizontal') {\r\n delta = deltaX\r\n }\r\n\r\n const syncTouch = isTouch && this.options.syncTouch\r\n const isTouchEnd = isTouch && event.type === 'touchend'\r\n\r\n const hasTouchInertia = isTouchEnd && Math.abs(delta) > 5\r\n\r\n if (hasTouchInertia) {\r\n delta = this.velocity * this.options.touchInertiaMultiplier\r\n }\r\n\r\n this.scrollTo(this.targetScroll + delta, {\r\n programmatic: false,\r\n ...(syncTouch\r\n ? {\r\n lerp: hasTouchInertia ? this.options.syncTouchLerp : 1,\r\n }\r\n : {\r\n lerp: this.options.lerp,\r\n duration: this.options.duration,\r\n easing: this.options.easing,\r\n }),\r\n })\r\n }\r\n\r\n resize() {\r\n this.dimensions.resize()\r\n }\r\n\r\n private emit({ userData = {} } = {}) {\r\n this.userData = userData\r\n this.emitter.emit('scroll', this)\r\n this.userData = {}\r\n }\r\n\r\n private onNativeScroll = () => {\r\n clearTimeout(this.__resetVelocityTimeout)\r\n delete this.__resetVelocityTimeout\r\n\r\n if (this.__preventNextNativeScrollEvent) {\r\n delete this.__preventNextNativeScrollEvent\r\n return\r\n }\r\n\r\n if (this.isScrolling === false || this.isScrolling === 'native') {\r\n const lastScroll = this.animatedScroll\r\n this.animatedScroll = this.targetScroll = this.actualScroll\r\n this.lastVelocity = this.velocity\r\n this.velocity = this.animatedScroll - lastScroll\r\n this.direction = Math.sign(this.animatedScroll - lastScroll)\r\n // this.isSmooth = false\r\n // this.isScrolling = this.hasScrolled ? 'native' : false\r\n this.isScrolling = 'native'\r\n this.emit()\r\n\r\n if (this.velocity !== 0) {\r\n this.__resetVelocityTimeout = setTimeout(() => {\r\n this.lastVelocity = this.velocity\r\n this.velocity = 0\r\n this.isScrolling = false\r\n this.emit()\r\n }, 400)\r\n }\r\n\r\n // this.hasScrolled = true\r\n // }, 50)\r\n }\r\n }\r\n\r\n private reset() {\r\n this.isLocked = false\r\n this.isScrolling = false\r\n this.animatedScroll = this.targetScroll = this.actualScroll\r\n this.lastVelocity = this.velocity = 0\r\n this.animate.stop()\r\n }\r\n\r\n start() {\r\n if (!this.isStopped) return\r\n this.isStopped = false\r\n\r\n this.reset()\r\n }\r\n\r\n stop() {\r\n if (this.isStopped) return\r\n this.isStopped = true\r\n this.animate.stop()\r\n\r\n this.reset()\r\n }\r\n\r\n raf(time: number) {\r\n const deltaTime = time - (this.time || time)\r\n this.time = time\r\n\r\n this.animate.advance(deltaTime * 0.001)\r\n }\r\n\r\n scrollTo(\r\n target: number | string | HTMLElement,\r\n {\r\n offset = 0,\r\n immediate = false,\r\n lock = false,\r\n duration = this.options.duration,\r\n easing = this.options.easing,\r\n lerp = !duration && this.options.lerp,\r\n onStart,\r\n onComplete,\r\n force = false, // scroll even if stopped\r\n programmatic = true, // called from outside of the class\r\n userData = {},\r\n }: {\r\n offset?: number\r\n immediate?: boolean\r\n lock?: boolean\r\n duration?: number\r\n easing?: EasingFunction\r\n lerp?: number\r\n onStart?: (lenis: Lenis) => void\r\n onComplete?: (lenis: Lenis) => void\r\n force?: boolean\r\n programmatic?: boolean\r\n userData?: object\r\n } = {}\r\n ) {\r\n if ((this.isStopped || this.isLocked) && !force) return\r\n\r\n // keywords\r\n if (['top', 'left', 'start'].includes(target)) {\r\n target = 0\r\n } else if (['bottom', 'right', 'end'].includes(target)) {\r\n target = this.limit\r\n } else {\r\n let node\r\n\r\n if (typeof target === 'string') {\r\n // CSS selector\r\n node = document.querySelector(target)\r\n } else if (target?.nodeType) {\r\n // Node element\r\n node = target\r\n }\r\n\r\n if (node) {\r\n if (this.options.wrapper !== window) {\r\n // nested scroll offset correction\r\n const wrapperRect = this.options.wrapper.getBoundingClientRect()\r\n offset -= this.isHorizontal ? wrapperRect.left : wrapperRect.top\r\n }\r\n\r\n const rect = node.getBoundingClientRect()\r\n\r\n target =\r\n (this.isHorizontal ? rect.left : rect.top) + this.animatedScroll\r\n }\r\n }\r\n\r\n if (typeof target !== 'number') return\r\n\r\n target += offset\r\n target = Math.round(target)\r\n\r\n if (this.options.infinite) {\r\n if (programmatic) {\r\n this.targetScroll = this.animatedScroll = this.scroll\r\n }\r\n } else {\r\n target = clamp(0, target, this.limit)\r\n }\r\n\r\n if (immediate) {\r\n this.animatedScroll = this.targetScroll = target\r\n this.setScroll(this.scroll)\r\n this.reset()\r\n onComplete?.(this)\r\n return\r\n }\r\n\r\n if (target === this.targetScroll) return\r\n\r\n if (!programmatic) {\r\n this.targetScroll = target\r\n }\r\n\r\n this.animate.fromTo(this.animatedScroll, target, {\r\n duration,\r\n easing,\r\n lerp,\r\n onStart: () => {\r\n // started\r\n if (lock) this.isLocked = true\r\n this.isScrolling = 'smooth'\r\n onStart?.(this)\r\n },\r\n onUpdate: (value: number, completed: boolean) => {\r\n this.isScrolling = 'smooth'\r\n\r\n // updated\r\n this.lastVelocity = this.velocity\r\n this.velocity = value - this.animatedScroll\r\n this.direction = Math.sign(this.velocity)\r\n\r\n this.animatedScroll = value\r\n this.setScroll(this.scroll)\r\n\r\n if (programmatic) {\r\n // wheel during programmatic should stop it\r\n this.targetScroll = value\r\n }\r\n\r\n if (!completed) this.emit({ userData })\r\n\r\n if (completed) {\r\n this.reset()\r\n this.emit({ userData })\r\n onComplete?.(this)\r\n\r\n // avoid emitting event twice\r\n this.__preventNextNativeScrollEvent = true\r\n // requestAnimationFrame(() => {\r\n // delete this.__preventNextNativeScrollEvent\r\n // })\r\n }\r\n },\r\n })\r\n }\r\n\r\n get rootElement() {\r\n return this.options.wrapper === window\r\n ? document.documentElement\r\n : this.options.wrapper\r\n }\r\n\r\n get limit() {\r\n if (this.options.__experimental__naiveDimensions) {\r\n if (this.isHorizontal) {\r\n return this.rootElement.scrollWidth - this.rootElement.clientWidth\r\n } else {\r\n return this.rootElement.scrollHeight - this.rootElement.clientHeight\r\n }\r\n } else {\r\n return this.dimensions.limit[this.isHorizontal ? 'x' : 'y']\r\n }\r\n }\r\n\r\n get isHorizontal() {\r\n return this.options.orientation === 'horizontal'\r\n }\r\n\r\n get actualScroll(): number {\r\n // value browser takes into account\r\n return this.isHorizontal\r\n ? this.rootElement.scrollLeft\r\n : this.rootElement.scrollTop\r\n }\r\n\r\n get scroll(): number {\r\n return this.options.infinite\r\n ? modulo(this.animatedScroll, this.limit)\r\n : this.animatedScroll\r\n }\r\n\r\n get progress(): number {\r\n // avoid progress to be NaN\r\n return this.limit === 0 ? 1 : this.scroll / this.limit\r\n }\r\n\r\n // get isSmooth() {\r\n // return this.__isSmooth\r\n // }\r\n\r\n // private set isSmooth(value: boolean) {\r\n // if (this.__isSmooth !== value) {\r\n // this.__isSmooth = value\r\n // this.updateClassName()\r\n // }\r\n // }\r\n\r\n get isScrolling() {\r\n return this.__isScrolling\r\n }\r\n\r\n private set isScrolling(value: boolean) {\r\n if (this.__isScrolling !== value) {\r\n this.__isScrolling = value\r\n this.updateClassName()\r\n }\r\n }\r\n\r\n get isStopped() {\r\n return this.__isStopped\r\n }\r\n\r\n private set isStopped(value: boolean) {\r\n if (this.__isStopped !== value) {\r\n this.__isStopped = value\r\n this.updateClassName()\r\n }\r\n }\r\n\r\n get isLocked() {\r\n return this.__isLocked\r\n }\r\n\r\n private set isLocked(value: boolean) {\r\n if (this.__isLocked !== value) {\r\n this.__isLocked = value\r\n this.updateClassName()\r\n }\r\n }\r\n\r\n get isSmooth() {\r\n return this.isScrolling === 'smooth'\r\n }\r\n\r\n get className() {\r\n let className = 'lenis'\r\n if (this.isStopped) className += ' lenis-stopped'\r\n if (this.isLocked) className += ' lenis-locked'\r\n if (this.isScrolling) className += ' lenis-scrolling'\r\n if (this.isScrolling === 'smooth') className += ' lenis-smooth'\r\n // if (this.isScrolling === 'native') className += ' lenis-native'\r\n // if (this.isSmooth) className += ' lenis-smooth'\r\n return className\r\n }\r\n\r\n private updateClassName() {\r\n this.cleanUpClassName()\r\n\r\n this.rootElement.className =\r\n `${this.rootElement.className} ${this.className}`.trim()\r\n // this.emitter.emit('className change', this)\r\n }\r\n\r\n private cleanUpClassName() {\r\n this.rootElement.className = this.rootElement.className\r\n .replace(/lenis(-\\w+)?/g, '')\r\n .trim()\r\n }\r\n\r\n // private toggleClassName(name: string, value: boolean) {\r\n // // this.rootElement.classList.toggle(name, value)\r\n // this.rootElement.className = this.className\r\n // this.emitter.emit('className change', this)\r\n // }\r\n}\r\n"],"names":[],"mappings":";;;;;;;;EAAA;EACO,SAAS,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;EACvC,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EAC5C,CAAC;AAMD;EACA;EACO,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;EAC9B,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;EAC5B,CAAC;AACD;EACA;EACO,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;EACvC,EAAE,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;EAC/C,CAAC;AACD;EACA;EACA;EACO,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;EAC7B,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;EAC1B;;ECtBA;EACO,MAAM,OAAO,CAAC;EACrB;EACA,EAAE,OAAO,CAAC,SAAS,EAAE;EACrB,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM;AAC/B;EACA,IAAI,IAAI,SAAS,GAAG,MAAK;AACzB;EACA,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;EACnB,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,SAAS,EAAC;EACvE,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE,EAAE;EAC9C,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAE;EAC5B,QAAQ,SAAS,GAAG,KAAI;EACxB,OAAO;EACP,KAAK,MAAM;EACX,MAAM,IAAI,CAAC,WAAW,IAAI,UAAS;EACnC,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAC;AAC1E;EACA,MAAM,SAAS,GAAG,cAAc,IAAI,EAAC;EACrC,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,EAAC;EACvE,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,cAAa;EACpE,KAAK;AACL;EACA,IAAI,IAAI,SAAS,EAAE;EACnB,MAAM,IAAI,CAAC,IAAI,GAAE;EACjB,KAAK;AACL;EACA;EACA,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,EAAC;EAC1C,GAAG;AACH;EACA;EACA,EAAE,IAAI,GAAG;EACT,IAAI,IAAI,CAAC,SAAS,GAAG,MAAK;EAC1B,GAAG;AACH;EACA;EACA;EACA,EAAE,MAAM;EACR,IAAI,IAAI;EACR,IAAI,EAAE;EACN,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,QAAQ,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE;EACtE,IAAI;EACJ,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,KAAI;EACjC,IAAI,IAAI,CAAC,EAAE,GAAG,GAAE;EAChB,IAAI,IAAI,CAAC,IAAI,GAAG,KAAI;EACpB,IAAI,IAAI,CAAC,QAAQ,GAAG,SAAQ;EAC5B,IAAI,IAAI,CAAC,MAAM,GAAG,OAAM;EACxB,IAAI,IAAI,CAAC,WAAW,GAAG,EAAC;EACxB,IAAI,IAAI,CAAC,SAAS,GAAG,KAAI;AACzB;EACA,IAAI,OAAO,KAAI;EACf,IAAI,IAAI,CAAC,QAAQ,GAAG,SAAQ;EAC5B,GAAG;EACH;;ECxDO,SAAS,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE;EAC1C,EAAE,IAAI,MAAK;EACX,EAAE,OAAO,YAAY;EACrB,IAAI,IAAI,IAAI,GAAG,UAAS;EACxB,IAAI,IAAI,OAAO,GAAG,KAAI;EACtB,IAAI,YAAY,CAAC,KAAK,EAAC;EACvB,IAAI,KAAK,GAAG,UAAU,CAAC,YAAY;EACnC,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAC;EACnC,KAAK,EAAE,KAAK,EAAC;EACb,GAAG;EACH;;ECRO,MAAM,UAAU,CAAC;EACxB,EAAE,WAAW,CAAC;EACd,IAAI,OAAO;EACX,IAAI,OAAO;EACX,IAAI,UAAU,GAAG,IAAI;EACrB,IAAI,QAAQ,EAAE,aAAa,GAAG,GAAG;EACjC,GAAG,GAAG,EAAE,EAAE;EACV,IAAI,IAAI,CAAC,OAAO,GAAG,QAAO;EAC1B,IAAI,IAAI,CAAC,OAAO,GAAG,QAAO;AAC1B;EACA,IAAI,IAAI,UAAU,EAAE;EACpB,MAAM,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,EAAC;AACjE;EACA,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE;EACnC,QAAQ,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAC;EACtE,OAAO,MAAM;EACb,QAAQ,IAAI,CAAC,qBAAqB,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,eAAe,EAAC;EAC7E,QAAQ,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAC;EACxD,OAAO;AACP;EACA,MAAM,IAAI,CAAC,qBAAqB,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,eAAe,EAAC;EAC3E,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAC;EACtD,KAAK;AACL;EACA,IAAI,IAAI,CAAC,MAAM,GAAE;EACjB,GAAG;AACH;EACA,EAAE,OAAO,GAAG;EACZ,IAAI,IAAI,CAAC,qBAAqB,EAAE,UAAU,GAAE;EAC5C,IAAI,IAAI,CAAC,qBAAqB,EAAE,UAAU,GAAE;EAC5C,IAAI,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAC;EACrE,GAAG;AACH;EACA,EAAE,MAAM,GAAG,MAAM;EACjB,IAAI,IAAI,CAAC,eAAe,GAAE;EAC1B,IAAI,IAAI,CAAC,eAAe,GAAE;EAC1B,GAAG;AACH;EACA,EAAE,eAAe,GAAG,MAAM;EAC1B,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE;EACjC,MAAM,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,WAAU;EACpC,MAAM,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,YAAW;EACtC,KAAK,MAAM;EACX,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,YAAW;EAC3C,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,aAAY;EAC7C,KAAK;EACL,GAAG;AACH;EACA,EAAE,eAAe,GAAG,MAAM;EAC1B,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE;EACjC,MAAM,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAY;EACnD,MAAM,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,YAAW;EACjD,KAAK,MAAM;EACX,MAAM,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAY;EACnD,MAAM,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,YAAW;EACjD,KAAK;EACL,GAAG;AACH;EACA,EAAE,IAAI,KAAK,GAAG;EACd,IAAI,OAAO;EACX,MAAM,CAAC,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK;EACtC,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM;EACxC,KAAK;EACL,GAAG;EACH;;EClEO,MAAM,OAAO,CAAC;EACrB,EAAE,WAAW,GAAG;EAChB,IAAI,IAAI,CAAC,MAAM,GAAG,GAAE;EACpB,GAAG;AACH;EACA,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE;EACvB,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAE;EAC5C,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;EAChE,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAC;EAC3B,KAAK;EACL,GAAG;AACH;EACA,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE;EAChB;EACA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAC;AAC/D;EACA;EACA,IAAI,OAAO,MAAM;EACjB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAC;EACtE,KAAK;EACL,GAAG;AACH;EACA,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE;EACvB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,KAAK,CAAC,EAAC;EAC1E,GAAG;AACH;EACA,EAAE,OAAO,GAAG;EACZ,IAAI,IAAI,CAAC,MAAM,GAAG,GAAE;EACpB,GAAG;EACH;;EC3BA,MAAM,WAAW,GAAG,GAAG,GAAG,EAAC;AAC3B;EACO,MAAM,aAAa,CAAC;EAC3B,EAAE,WAAW,CAAC,OAAO,EAAE,EAAE,eAAe,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC,EAAE,EAAE;EACrE,IAAI,IAAI,CAAC,OAAO,GAAG,QAAO;EAC1B,IAAI,IAAI,CAAC,eAAe,GAAG,gBAAe;EAC1C,IAAI,IAAI,CAAC,eAAe,GAAG,gBAAe;AAC1C;EACA,IAAI,IAAI,CAAC,UAAU,GAAG;EACtB,MAAM,CAAC,EAAE,IAAI;EACb,MAAM,CAAC,EAAE,IAAI;EACb,MAAK;AACL;EACA,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,GAAE;EAChC,IAAI,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,EAAC;EACjE,IAAI,IAAI,CAAC,cAAc,GAAE;AACzB;EACA,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAC;EAC5E,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;EACnE,MAAM,OAAO,EAAE,KAAK;EACpB,KAAK,EAAC;EACN,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;EACjE,MAAM,OAAO,EAAE,KAAK;EACpB,KAAK,EAAC;EACN,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;EAC/D,MAAM,OAAO,EAAE,KAAK;EACpB,KAAK,EAAC;EACN,GAAG;AACH;EACA;EACA,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE;EACtB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC;EAC3C,GAAG;AACH;EACA;EACA,EAAE,OAAO,GAAG;EACZ,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,GAAE;AAC1B;EACA,IAAI,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,EAAC;AACpE;EACA,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;EAC5D,MAAM,OAAO,EAAE,KAAK;EACpB,KAAK,EAAC;EACN,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;EACtE,MAAM,OAAO,EAAE,KAAK;EACpB,KAAK,EAAC;EACN,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;EACpE,MAAM,OAAO,EAAE,KAAK;EACpB,KAAK,EAAC;EACN,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;EAClE,MAAM,OAAO,EAAE,KAAK;EACpB,KAAK,EAAC;EACN,GAAG;AACH;EACA;EACA,EAAE,YAAY,GAAG,CAAC,KAAK,KAAK;EAC5B,IAAI,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,aAAa;EACpD,QAAQ,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;EAC9B,QAAQ,MAAK;AACb;EACA,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,QAAO;EAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,QAAO;AAC/B;EACA,IAAI,IAAI,CAAC,SAAS,GAAG;EACrB,MAAM,CAAC,EAAE,CAAC;EACV,MAAM,CAAC,EAAE,CAAC;EACV,MAAK;AACL;EACA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;EAChC,MAAM,MAAM,EAAE,CAAC;EACf,MAAM,MAAM,EAAE,CAAC;EACf,MAAM,KAAK;EACX,KAAK,EAAC;EACN,GAAG;AACH;EACA;EACA,EAAE,WAAW,GAAG,CAAC,KAAK,KAAK;EAC3B,IAAI,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,aAAa;EACpD,QAAQ,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;EAC9B,QAAQ,MAAK;AACb;EACA,IAAI,MAAM,MAAM,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAe;EACxE,IAAI,MAAM,MAAM,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAe;AACxE;EACA,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,QAAO;EAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,QAAO;AAC/B;EACA,IAAI,IAAI,CAAC,SAAS,GAAG;EACrB,MAAM,CAAC,EAAE,MAAM;EACf,MAAM,CAAC,EAAE,MAAM;EACf,MAAK;AACL;EACA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;EAChC,MAAM,MAAM;EACZ,MAAM,MAAM;EACZ,MAAM,KAAK;EACX,KAAK,EAAC;EACN,GAAG;AACH;EACA,EAAE,UAAU,GAAG,CAAC,KAAK,KAAK;EAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;EAChC,MAAM,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;EAC9B,MAAM,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;EAC9B,MAAM,KAAK;EACX,KAAK,EAAC;EACN,GAAG;AACH;EACA;EACA,EAAE,OAAO,GAAG,CAAC,KAAK,KAAK;EACvB,IAAI,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAK;AAC7C;EACA,IAAI,MAAM,WAAW;EACrB,MAAM,SAAS,KAAK,CAAC,GAAG,WAAW,GAAG,SAAS,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,EAAC;EAC5E,IAAI,MAAM,WAAW;EACrB,MAAM,SAAS,KAAK,CAAC,GAAG,WAAW,GAAG,SAAS,KAAK,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,EAAC;AAC7E;EACA,IAAI,MAAM,IAAI,YAAW;EACzB,IAAI,MAAM,IAAI,YAAW;AACzB;EACA,IAAI,MAAM,IAAI,IAAI,CAAC,gBAAe;EAClC,IAAI,MAAM,IAAI,IAAI,CAAC,gBAAe;AAClC;EACA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAC;EAC1D,GAAG;AACH;EACA,EAAE,cAAc,GAAG,MAAM;EACzB,IAAI,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAU;EACxC,IAAI,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAW;EAC1C,GAAG;EACH;;EC1Fc,MAAO,KAAK,CAAA;;;;;EAmBxB,IAAA,WAAA,CAAY,EACV,OAAO,GAAG,MAAM,EAChB,OAAO,GAAG,QAAQ,CAAC,eAAe,EAClC,iBAAiB,GAAG,OAAO;MAC3B,YAAY,GAAG,iBAAiB,EAChC,WAAW,GAAG,IAAI,EAClB,SAAS,GAAG,KAAK,EACjB,aAAa,GAAG,KAAK,EACrB,sBAAsB,GAAG,EAAE,EAC3B,QAAQ;EACR,IAAA,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EACzD,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,EACvB,QAAQ,GAAG,KAAK,EAChB,WAAW,GAAG,UAAU;MACxB,kBAAkB,GAAG,UAAU;EAC/B,IAAA,eAAe,GAAG,CAAC,EACnB,eAAe,GAAG,CAAC,EACnB,UAAU,GAAG,IAAI,EACjB,OAAO,GAAG,KAAK,EACf,+BAA+B,GAAG,KAAK,MACvB,EAAE,EAAA;;EArCpB,QAAA,IAAA,CAAA,aAAa,GAAkC,KAAK,CAAA;EACpD,QAAA,IAAA,CAAA,WAAW,GAAY,KAAK,CAAA;EAC5B,QAAA,IAAA,CAAA,UAAU,GAAY,KAAK,CAAA;UAmInB,IAAe,CAAA,eAAA,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAI;;cAEtD,IAAI,KAAK,CAAC,OAAO;kBAAE,OAAM;cAEzB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;cAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;EAE5C,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAA;;;;;;;;;;EAW3E,YAAA,MAAM,WAAW,GACf,IAAI,CAAC,OAAO,CAAC,SAAS;kBACtB,OAAO;kBACP,KAAK,CAAC,IAAI,KAAK,YAAY;kBAC3B,CAAC,IAAI,CAAC,SAAS;kBACf,CAAC,IAAI,CAAC,QAAQ,CAAA;cAEhB,IAAI,WAAW,EAAE;kBACf,IAAI,CAAC,KAAK,EAAE,CAAA;kBACZ,OAAM;eACP;cAED,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,CAAA;;;;;;EAQ5C,YAAA,MAAM,gBAAgB,GACpB,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,UAAU,IAAI,MAAM,KAAK,CAAC;EAC/D,iBAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,YAAY,IAAI,MAAM,KAAK,CAAC,CAAC,CAAA;EAEpE,YAAA,IAAI,OAAO,IAAI,gBAAgB,EAAE;;kBAE/B,OAAM;eACP;;EAGD,YAAA,IAAI,YAAY,GAAG,KAAK,CAAC,YAAY,EAAE,CAAA;EACvC,YAAA,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAA;EAE5E,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA;cAEpC,IACE,CAAC,CAAC,YAAY,CAAC,IAAI,CACjB,CAAC,IAAI,KAAI;;kBACP,OAAA,CAAC,OAAO,OAAO,KAAK,UAAU,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAG,IAAI,CAAC,GAAG,OAAO;EAC1D,qBAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,EAAA,oBAAoB,CAAC,CAAA;uBACxC,OAAO,KAAI,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,EAAA,0BAA0B,CAAC,CAAA,CAAC;uBAC3D,OAAO,KAAI,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,EAAA,0BAA0B,CAAC,CAAA,CAAC;uBAC3D,CAAA,MAAA,IAAI,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,CAAC,OAAO,CAAC;EAChC,wBAAA,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,eAAe,CAAC,CAAA,CAAC,CAAA;EAAA,aAAA;EAChD,aAAA;kBAED,OAAM;cAER,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;EACnC,gBAAA,KAAK,CAAC,cAAc,EAAE,CAAA;kBACtB,OAAM;eACP;cAED,MAAM,QAAQ,GACZ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO;mBACjC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,CAAA;cAEvC,IAAI,CAAC,QAAQ,EAAE;EACb,gBAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAA;EAC3B,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;kBACnB,OAAM;eACP;cAED,KAAK,CAAC,cAAc,EAAE,CAAA;cAEtB,IAAI,KAAK,GAAG,MAAM,CAAA;cAClB,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,MAAM,EAAE;kBAC9C,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,CAAA;eAC9D;mBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,YAAY,EAAE;kBAC3D,KAAK,GAAG,MAAM,CAAA;eACf;cAED,MAAM,SAAS,GAAG,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAA;cACnD,MAAM,UAAU,GAAG,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAA;EAEvD,YAAA,MAAM,eAAe,GAAG,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;cAEzD,IAAI,eAAe,EAAE;kBACnB,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAA;eAC5D;EAED,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,GAAG,KAAK,EAAA,MAAA,CAAA,MAAA,CAAA,EACrC,YAAY,EAAE,KAAK,EAAA,GACf,SAAS;EACX,kBAAE;EACE,oBAAA,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC;EACvD,iBAAA;EACH,kBAAE;EACE,oBAAA,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;EACvB,oBAAA,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;EAC/B,oBAAA,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;EAC5B,iBAAA,GACL,CAAA;EACJ,SAAC,CAAA;UAYO,IAAc,CAAA,cAAA,GAAG,MAAK;EAC5B,YAAA,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;cACzC,OAAO,IAAI,CAAC,sBAAsB,CAAA;EAElC,YAAA,IAAI,IAAI,CAAC,8BAA8B,EAAE;kBACvC,OAAO,IAAI,CAAC,8BAA8B,CAAA;kBAC1C,OAAM;eACP;EAED,YAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE;EAC/D,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAA;kBACtC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;EAC3D,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAA;kBACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,GAAG,UAAU,CAAA;EAChD,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,CAAA;;;EAG5D,gBAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAA;kBAC3B,IAAI,CAAC,IAAI,EAAE,CAAA;EAEX,gBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE;EACvB,oBAAA,IAAI,CAAC,sBAAsB,GAAG,UAAU,CAAC,MAAK;EAC5C,wBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAA;EACjC,wBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;EACjB,wBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;0BACxB,IAAI,CAAC,IAAI,EAAE,CAAA;uBACZ,EAAE,GAAG,CAAC,CAAA;mBACR;;;eAIF;EACH,SAAC,CAAA;EA1PC,QAAA,MAAM,CAAC,YAAY,GAAG,OAAO,CAAA;;EAG7B,QAAA,IAAI,OAAO,KAAK,QAAQ,CAAC,eAAe,IAAI,OAAO,KAAK,QAAQ,CAAC,IAAI,EAAE;cACrE,OAAO,GAAG,MAAM,CAAA;WACjB;UAED,IAAI,CAAC,OAAO,GAAG;cACb,OAAO;cACP,OAAO;cACP,iBAAiB;cACjB,YAAY;cACZ,WAAW;cACX,SAAS;cACT,aAAa;cACb,sBAAsB;cACtB,QAAQ;cACR,MAAM;cACN,IAAI;cACJ,QAAQ;cACR,kBAAkB;cAClB,WAAW;cACX,eAAe;cACf,eAAe;cACf,UAAU;cACV,OAAO;cACP,+BAA+B;WAChC,CAAA;EAED,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;EAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;EAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAA;;UAElE,IAAI,CAAC,eAAe,EAAE,CAAA;EAEtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;EAClB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;UACb,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;EACrC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;EACrB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;;;;EAItB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;UACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAA;EAE3D,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;EAE3E,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,YAAY,EAAE;cACnD,eAAe;cACf,eAAe;EAChB,SAAA,CAAC,CAAA;UACF,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;OACtD;MAED,OAAO,GAAA;EACL,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;EAEtB,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CACtC,QAAQ,EACR,IAAI,CAAC,cAAc,EACnB,KAAK,CACN,CAAA;EAED,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAA;EAC5B,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAA;UAEzB,IAAI,CAAC,gBAAgB,EAAE,CAAA;;;;;;;OASxB;MAED,EAAE,CAAC,KAAa,EAAE,QAAkB,EAAA;UAClC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;OACxC;MAED,GAAG,CAAC,KAAa,EAAE,QAAkB,EAAA;UACnC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;OACzC;EAEO,IAAA,SAAS,CAAC,MAAM,EAAA;;EAEtB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;EACrB,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,MAAM,CAAA;WACrC;eAAM;EACL,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,MAAM,CAAA;WACpC;OACF;MAmHD,MAAM,GAAA;EACJ,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAA;OACzB;EAEO,IAAA,IAAI,CAAC,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,EAAE,EAAA;EACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;UACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;EACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;OACnB;MAoCO,KAAK,GAAA;EACX,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;EACrB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;UACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;UAC3D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;EACrC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;OACpB;MAED,KAAK,GAAA;UACH,IAAI,CAAC,IAAI,CAAC,SAAS;cAAE,OAAM;EAC3B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;UAEtB,IAAI,CAAC,KAAK,EAAE,CAAA;OACb;MAED,IAAI,GAAA;UACF,IAAI,IAAI,CAAC,SAAS;cAAE,OAAM;EAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;EACrB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;UAEnB,IAAI,CAAC,KAAK,EAAE,CAAA;OACb;EAED,IAAA,GAAG,CAAC,IAAY,EAAA;UACd,MAAM,SAAS,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;EAC5C,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;UAEhB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,CAAA;OACxC;MAED,QAAQ,CACN,MAAqC,EACrC,EACE,MAAM,GAAG,CAAC,EACV,SAAS,GAAG,KAAK,EACjB,IAAI,GAAG,KAAK,EACZ,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAChC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAC5B,IAAI,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EACrC,OAAO,EACP,UAAU,EACV,KAAK,GAAG,KAAK;MACb,YAAY,GAAG,IAAI;MACnB,QAAQ,GAAG,EAAE,GAAA,GAaX,EAAE,EAAA;UAEN,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,KAAK;cAAE,OAAM;;EAGvD,QAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;cAC7C,MAAM,GAAG,CAAC,CAAA;WACX;EAAM,aAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;EACtD,YAAA,MAAM,GAAG,IAAI,CAAC,KAAK,CAAA;WACpB;eAAM;EACL,YAAA,IAAI,IAAI,CAAA;EAER,YAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;;EAE9B,gBAAA,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;eACtC;mBAAM,IAAI,MAAM,aAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,QAAQ,EAAE;;kBAE3B,IAAI,GAAG,MAAM,CAAA;eACd;cAED,IAAI,IAAI,EAAE;kBACR,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,MAAM,EAAE;;sBAEnC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAA;EAChE,oBAAA,MAAM,IAAI,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,GAAG,CAAA;mBACjE;EAED,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAA;kBAEzC,MAAM;sBACJ,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc,CAAA;eACnE;WACF;UAED,IAAI,OAAO,MAAM,KAAK,QAAQ;cAAE,OAAM;UAEtC,MAAM,IAAI,MAAM,CAAA;EAChB,QAAA,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;EAE3B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;cACzB,IAAI,YAAY,EAAE;kBAChB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAA;eACtD;WACF;eAAM;cACL,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;WACtC;UAED,IAAI,SAAS,EAAE;cACb,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,GAAG,MAAM,CAAA;EAChD,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;cAC3B,IAAI,CAAC,KAAK,EAAE,CAAA;EACZ,YAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAG,IAAI,CAAC,CAAA;cAClB,OAAM;WACP;EAED,QAAA,IAAI,MAAM,KAAK,IAAI,CAAC,YAAY;cAAE,OAAM;UAExC,IAAI,CAAC,YAAY,EAAE;EACjB,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAA;WAC3B;UAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE;cAC/C,QAAQ;cACR,MAAM;cACN,IAAI;cACJ,OAAO,EAAE,MAAK;;EAEZ,gBAAA,IAAI,IAAI;EAAE,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;EAC9B,gBAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAA;EAC3B,gBAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAG,IAAI,CAAC,CAAA;eAChB;EACD,YAAA,QAAQ,EAAE,CAAC,KAAa,EAAE,SAAkB,KAAI;EAC9C,gBAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAA;;EAG3B,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAA;kBACjC,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,cAAc,CAAA;kBAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;EAEzC,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAA;EAC3B,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;kBAE3B,IAAI,YAAY,EAAE;;EAEhB,oBAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;mBAC1B;EAED,gBAAA,IAAI,CAAC,SAAS;EAAE,oBAAA,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;kBAEvC,IAAI,SAAS,EAAE;sBACb,IAAI,CAAC,KAAK,EAAE,CAAA;EACZ,oBAAA,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;EACvB,oBAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAG,IAAI,CAAC,CAAA;;EAGlB,oBAAA,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAA;;;;mBAI3C;eACF;EACF,SAAA,CAAC,CAAA;OACH;EAED,IAAA,IAAI,WAAW,GAAA;EACb,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,MAAM;gBAClC,QAAQ,CAAC,eAAe;EAC1B,cAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA;OACzB;EAED,IAAA,IAAI,KAAK,GAAA;EACP,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,+BAA+B,EAAE;EAChD,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;kBACrB,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAA;eACnE;mBAAM;kBACL,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAA;eACrE;WACF;eAAM;EACL,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,GAAG,GAAG,GAAG,CAAC,CAAA;WAC5D;OACF;EAED,IAAA,IAAI,YAAY,GAAA;EACd,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,YAAY,CAAA;OACjD;EAED,IAAA,IAAI,YAAY,GAAA;;UAEd,OAAO,IAAI,CAAC,YAAY;EACtB,cAAE,IAAI,CAAC,WAAW,CAAC,UAAU;EAC7B,cAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAA;OAC/B;EAED,IAAA,IAAI,MAAM,GAAA;EACR,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ;gBACxB,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC;EACzC,cAAE,IAAI,CAAC,cAAc,CAAA;OACxB;EAED,IAAA,IAAI,QAAQ,GAAA;;EAEV,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAA;OACvD;;;;;;;;;;EAaD,IAAA,IAAI,WAAW,GAAA;UACb,OAAO,IAAI,CAAC,aAAa,CAAA;OAC1B;MAED,IAAY,WAAW,CAAC,KAAc,EAAA;EACpC,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE;EAChC,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;cAC1B,IAAI,CAAC,eAAe,EAAE,CAAA;WACvB;OACF;EAED,IAAA,IAAI,SAAS,GAAA;UACX,OAAO,IAAI,CAAC,WAAW,CAAA;OACxB;MAED,IAAY,SAAS,CAAC,KAAc,EAAA;EAClC,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;EAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;cACxB,IAAI,CAAC,eAAe,EAAE,CAAA;WACvB;OACF;EAED,IAAA,IAAI,QAAQ,GAAA;UACV,OAAO,IAAI,CAAC,UAAU,CAAA;OACvB;MAED,IAAY,QAAQ,CAAC,KAAc,EAAA;EACjC,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE;EAC7B,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;cACvB,IAAI,CAAC,eAAe,EAAE,CAAA;WACvB;OACF;EAED,IAAA,IAAI,QAAQ,GAAA;EACV,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,CAAA;OACrC;EAED,IAAA,IAAI,SAAS,GAAA;UACX,IAAI,SAAS,GAAG,OAAO,CAAA;UACvB,IAAI,IAAI,CAAC,SAAS;cAAE,SAAS,IAAI,gBAAgB,CAAA;UACjD,IAAI,IAAI,CAAC,QAAQ;cAAE,SAAS,IAAI,eAAe,CAAA;UAC/C,IAAI,IAAI,CAAC,WAAW;cAAE,SAAS,IAAI,kBAAkB,CAAA;EACrD,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ;cAAE,SAAS,IAAI,eAAe,CAAA;;;EAG/D,QAAA,OAAO,SAAS,CAAA;OACjB;MAEO,eAAe,GAAA;UACrB,IAAI,CAAC,gBAAgB,EAAE,CAAA;UAEvB,IAAI,CAAC,WAAW,CAAC,SAAS;EACxB,YAAA,CAAA,EAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAA,CAAE,CAAC,IAAI,EAAE,CAAA;;OAE3D;MAEO,gBAAgB,GAAA;UACtB,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS;EACpD,aAAA,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;EAC5B,aAAA,IAAI,EAAE,CAAA;OACV;EAOF;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"lenis.js","sources":["../src/maths.js","../src/animate.js","../src/debounce.js","../src/dimensions.js","../src/emitter.js","../src/virtual-scroll.js","../src/index.ts"],"sourcesContent":["// Clamp a value between a minimum and maximum value\r\nexport function clamp(min, input, max) {\r\n return Math.max(min, Math.min(input, max))\r\n}\r\n\r\n// Truncate a floating-point number to a specified number of decimal places\r\nexport function truncate(value, decimals = 0) {\r\n return parseFloat(value.toFixed(decimals))\r\n}\r\n\r\n// Linearly interpolate between two values using an amount (0 <= t <= 1)\r\nexport function lerp(x, y, t) {\r\n return (1 - t) * x + t * y\r\n}\r\n\r\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\r\nexport function damp(x, y, lambda, dt) {\r\n return lerp(x, y, 1 - Math.exp(-lambda * dt))\r\n}\r\n\r\n// Calculate the modulo of the dividend and divisor while keeping the result within the same sign as the divisor\r\n// https://anguscroll.com/just/just-modulo\r\nexport function modulo(n, d) {\r\n return ((n % d) + d) % d\r\n}\r\n","import { clamp, damp } from './maths'\r\n\r\n// Animate class to handle value animations with lerping or easing\r\nexport class Animate {\r\n // Advance the animation by the given delta time\r\n advance(deltaTime) {\r\n if (!this.isRunning) return\r\n\r\n let completed = false\r\n\r\n if (this.duration && this.easing) {\r\n this.currentTime += deltaTime\r\n const linearProgress = clamp(0, this.currentTime / this.duration, 1)\r\n\r\n completed = linearProgress >= 1\r\n const easedProgress = completed ? 1 : this.easing(linearProgress)\r\n this.value = this.from + (this.to - this.from) * easedProgress\r\n } else if (this.lerp) {\r\n this.value = damp(this.value, this.to, this.lerp * 60, deltaTime)\r\n if (Math.round(this.value) === this.to) {\r\n this.value = this.to\r\n completed = true\r\n }\r\n } else {\r\n // If no easing or lerp, just jump to the end value\r\n this.value = this.to\r\n completed = true\r\n }\r\n\r\n if (completed) {\r\n this.stop()\r\n }\r\n\r\n // Call the onUpdate callback with the current value and completed status\r\n this.onUpdate?.(this.value, completed)\r\n }\r\n\r\n // Stop the animation\r\n stop() {\r\n this.isRunning = false\r\n }\r\n\r\n // Set up the animation from a starting value to an ending value\r\n // with optional parameters for lerping, duration, easing, and onUpdate callback\r\n fromTo(from, to, { lerp, duration, easing, onStart, onUpdate }) {\r\n this.from = this.value = from\r\n this.to = to\r\n this.lerp = lerp\r\n this.duration = duration\r\n this.easing = easing\r\n this.currentTime = 0\r\n this.isRunning = true\r\n\r\n onStart?.()\r\n this.onUpdate = onUpdate\r\n }\r\n}\r\n","export function debounce(callback, delay) {\r\n let timer\r\n return function () {\r\n let args = arguments\r\n let context = this\r\n clearTimeout(timer)\r\n timer = setTimeout(function () {\r\n callback.apply(context, args)\r\n }, delay)\r\n }\r\n}\r\n","import { debounce } from './debounce'\r\n\r\nexport class Dimensions {\r\n constructor({\r\n wrapper,\r\n content,\r\n autoResize = true,\r\n debounce: debounceValue = 250,\r\n } = {}) {\r\n this.wrapper = wrapper\r\n this.content = content\r\n\r\n if (autoResize) {\r\n this.debouncedResize = debounce(this.resize, debounceValue)\r\n\r\n if (this.wrapper === window) {\r\n window.addEventListener('resize', this.debouncedResize, false)\r\n } else {\r\n this.wrapperResizeObserver = new ResizeObserver(this.debouncedResize)\r\n this.wrapperResizeObserver.observe(this.wrapper)\r\n }\r\n\r\n this.contentResizeObserver = new ResizeObserver(this.debouncedResize)\r\n this.contentResizeObserver.observe(this.content)\r\n }\r\n\r\n this.resize()\r\n }\r\n\r\n destroy() {\r\n this.wrapperResizeObserver?.disconnect()\r\n this.contentResizeObserver?.disconnect()\r\n window.removeEventListener('resize', this.debouncedResize, false)\r\n }\r\n\r\n resize = () => {\r\n this.onWrapperResize()\r\n this.onContentResize()\r\n }\r\n\r\n onWrapperResize = () => {\r\n if (this.wrapper === window) {\r\n this.width = window.innerWidth\r\n this.height = window.innerHeight\r\n } else {\r\n this.width = this.wrapper.clientWidth\r\n this.height = this.wrapper.clientHeight\r\n }\r\n }\r\n\r\n onContentResize = () => {\r\n if (this.wrapper === window) {\r\n this.scrollHeight = this.content.scrollHeight\r\n this.scrollWidth = this.content.scrollWidth\r\n } else {\r\n this.scrollHeight = this.wrapper.scrollHeight\r\n this.scrollWidth = this.wrapper.scrollWidth\r\n }\r\n }\r\n\r\n get limit() {\r\n return {\r\n x: this.scrollWidth - this.width,\r\n y: this.scrollHeight - this.height,\r\n }\r\n }\r\n}\r\n","export class Emitter {\r\n constructor() {\r\n this.events = {}\r\n }\r\n\r\n emit(event, ...args) {\r\n let callbacks = this.events[event] || []\r\n for (let i = 0, length = callbacks.length; i < length; i++) {\r\n callbacks[i](...args)\r\n }\r\n }\r\n\r\n on(event, cb) {\r\n // Add the callback to the event's callback list, or create a new list with the callback\r\n this.events[event]?.push(cb) || (this.events[event] = [cb])\r\n\r\n // Return an unsubscribe function\r\n return () => {\r\n this.events[event] = this.events[event]?.filter((i) => cb !== i)\r\n }\r\n }\r\n\r\n off(event, callback) {\r\n this.events[event] = this.events[event]?.filter((i) => callback !== i)\r\n }\r\n\r\n destroy() {\r\n this.events = {}\r\n }\r\n}\r\n","import { Emitter } from './emitter'\r\n\r\nconst LINE_HEIGHT = 100 / 6\r\n\r\nexport class VirtualScroll {\r\n constructor(element, { wheelMultiplier = 1, touchMultiplier = 1 }) {\r\n this.element = element\r\n this.wheelMultiplier = wheelMultiplier\r\n this.touchMultiplier = touchMultiplier\r\n\r\n this.touchStart = {\r\n x: null,\r\n y: null,\r\n }\r\n\r\n this.emitter = new Emitter()\r\n window.addEventListener('resize', this.onWindowResize, false)\r\n this.onWindowResize()\r\n\r\n this.element.addEventListener('wheel', this.onWheel, { passive: false })\r\n this.element.addEventListener('touchstart', this.onTouchStart, {\r\n passive: false,\r\n })\r\n this.element.addEventListener('touchmove', this.onTouchMove, {\r\n passive: false,\r\n })\r\n this.element.addEventListener('touchend', this.onTouchEnd, {\r\n passive: false,\r\n })\r\n }\r\n\r\n // Add an event listener for the given event and callback\r\n on(event, callback) {\r\n return this.emitter.on(event, callback)\r\n }\r\n\r\n // Remove all event listeners and clean up\r\n destroy() {\r\n this.emitter.destroy()\r\n\r\n window.removeEventListener('resize', this.onWindowResize, false)\r\n\r\n this.element.removeEventListener('wheel', this.onWheel, {\r\n passive: false,\r\n })\r\n this.element.removeEventListener('touchstart', this.onTouchStart, {\r\n passive: false,\r\n })\r\n this.element.removeEventListener('touchmove', this.onTouchMove, {\r\n passive: false,\r\n })\r\n this.element.removeEventListener('touchend', this.onTouchEnd, {\r\n passive: false,\r\n })\r\n }\r\n\r\n // Event handler for 'touchstart' event\r\n onTouchStart = (event) => {\r\n const { clientX, clientY } = event.targetTouches\r\n ? event.targetTouches[0]\r\n : event\r\n\r\n this.touchStart.x = clientX\r\n this.touchStart.y = clientY\r\n\r\n this.lastDelta = {\r\n x: 0,\r\n y: 0,\r\n }\r\n\r\n this.emitter.emit('scroll', {\r\n deltaX: 0,\r\n deltaY: 0,\r\n event,\r\n })\r\n }\r\n\r\n // Event handler for 'touchmove' event\r\n onTouchMove = (event) => {\r\n const { clientX, clientY } = event.targetTouches\r\n ? event.targetTouches[0]\r\n : event\r\n\r\n const deltaX = -(clientX - this.touchStart.x) * this.touchMultiplier\r\n const deltaY = -(clientY - this.touchStart.y) * this.touchMultiplier\r\n\r\n this.touchStart.x = clientX\r\n this.touchStart.y = clientY\r\n\r\n this.lastDelta = {\r\n x: deltaX,\r\n y: deltaY,\r\n }\r\n\r\n this.emitter.emit('scroll', {\r\n deltaX,\r\n deltaY,\r\n event,\r\n })\r\n }\r\n\r\n onTouchEnd = (event) => {\r\n this.emitter.emit('scroll', {\r\n deltaX: this.lastDelta.x,\r\n deltaY: this.lastDelta.y,\r\n event,\r\n })\r\n }\r\n\r\n // Event handler for 'wheel' event\r\n onWheel = (event) => {\r\n let { deltaX, deltaY, deltaMode } = event\r\n\r\n const multiplierX =\r\n deltaMode === 1 ? LINE_HEIGHT : deltaMode === 2 ? this.windowWidth : 1\r\n const multiplierY =\r\n deltaMode === 1 ? LINE_HEIGHT : deltaMode === 2 ? this.windowHeight : 1\r\n\r\n deltaX *= multiplierX\r\n deltaY *= multiplierY\r\n\r\n deltaX *= this.wheelMultiplier\r\n deltaY *= this.wheelMultiplier\r\n\r\n this.emitter.emit('scroll', { deltaX, deltaY, event })\r\n }\r\n\r\n onWindowResize = () => {\r\n this.windowWidth = window.innerWidth\r\n this.windowHeight = window.innerHeight\r\n }\r\n}\r\n","import { version } from '../../../package.json'\r\nimport { Animate } from './animate'\r\nimport { Dimensions } from './dimensions'\r\nimport { Emitter } from './emitter'\r\nimport { clamp, modulo } from './maths'\r\nimport { VirtualScroll } from './virtual-scroll'\r\n\r\n// Technical explanation\r\n// - listen to 'wheel' events\r\n// - prevent 'wheel' event to prevent scroll\r\n// - normalize wheel delta\r\n// - add delta to targetScroll\r\n// - animate scroll to targetScroll (smooth context)\r\n// - if animation is not running, listen to 'scroll' events (native context)\r\n\r\ntype EasingFunction = (t: number) => number\r\ntype Orientation = 'vertical' | 'horizontal'\r\ntype GestureOrientation = 'vertical' | 'horizontal' | 'both'\r\ntype Scrolling = boolean | 'native' | 'smooth'\r\n\r\nexport type LenisOptions = Partial<{\r\n wrapper: Window | HTMLElement\r\n content: HTMLElement\r\n wheelEventsTarget: Window | HTMLElement\r\n eventsTarget: Window | HTMLElement\r\n smoothWheel: boolean\r\n syncTouch: boolean\r\n syncTouchLerp: number\r\n touchInertiaMultiplier: number\r\n duration: number\r\n easing: EasingFunction\r\n lerp: number\r\n infinite: boolean\r\n orientation: Orientation\r\n gestureOrientation: GestureOrientation\r\n touchMultiplier: number\r\n wheelMultiplier: number\r\n autoResize: boolean\r\n prevent: boolean | ((node: Element) => boolean)\r\n __experimental__naiveDimensions: boolean\r\n}>\r\n\r\nexport default class Lenis {\r\n // __isSmooth: boolean = false // true if scroll should be animated\r\n __isScrolling: Scrolling = false // true when scroll is animating\r\n __isStopped: boolean = false // true if user should not be able to scroll - enable/disable programmatically\r\n __isLocked: boolean = false // same as isStopped but enabled/disabled when scroll reaches target\r\n\r\n time: number\r\n userData: object\r\n lastVelocity: number\r\n velocity: number\r\n direction: 1 | -1 | 0 = 0\r\n options: LenisOptions\r\n targetScroll: number\r\n animatedScroll: number\r\n // animate: Animate\r\n // emitter: Emitter\r\n // dimensions: Dimensions\r\n // virtualScroll: VirtualScroll\r\n\r\n constructor({\r\n wrapper = window,\r\n content = document.documentElement,\r\n wheelEventsTarget = wrapper, // deprecated\r\n eventsTarget = wheelEventsTarget,\r\n smoothWheel = true,\r\n syncTouch = false,\r\n syncTouchLerp = 0.075,\r\n touchInertiaMultiplier = 35,\r\n duration, // in seconds\r\n easing = (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)),\r\n lerp = 0.1,\r\n infinite = false,\r\n orientation = 'vertical', // vertical, horizontal\r\n gestureOrientation = 'vertical', // vertical, horizontal, both\r\n touchMultiplier = 1,\r\n wheelMultiplier = 1,\r\n autoResize = true,\r\n prevent = false,\r\n __experimental__naiveDimensions = false,\r\n }: LenisOptions = {}) {\r\n // @ts-expect-error\r\n window.lenisVersion = version\r\n\r\n // if wrapper is html or body, fallback to window\r\n if (\r\n !wrapper ||\r\n wrapper === document.documentElement ||\r\n wrapper === document.body\r\n ) {\r\n wrapper = window\r\n }\r\n\r\n this.options = {\r\n wrapper,\r\n content,\r\n wheelEventsTarget,\r\n eventsTarget,\r\n smoothWheel,\r\n syncTouch,\r\n syncTouchLerp,\r\n touchInertiaMultiplier,\r\n duration,\r\n easing,\r\n lerp,\r\n infinite,\r\n gestureOrientation,\r\n orientation,\r\n touchMultiplier,\r\n wheelMultiplier,\r\n autoResize,\r\n prevent,\r\n __experimental__naiveDimensions,\r\n }\r\n\r\n this.animate = new Animate()\r\n this.emitter = new Emitter()\r\n this.dimensions = new Dimensions({ wrapper, content, autoResize })\r\n // this.toggleClassName('lenis', true)\r\n this.updateClassName()\r\n\r\n this.userData = {}\r\n this.time = 0\r\n this.velocity = this.lastVelocity = 0\r\n this.isLocked = false\r\n this.isStopped = false\r\n // this.hasScrolled = false\r\n // this.isSmooth = syncTouch || smoothWheel\r\n // this.isSmooth = false\r\n this.isScrolling = false\r\n this.targetScroll = this.animatedScroll = this.actualScroll\r\n\r\n this.options.wrapper.addEventListener('scroll', this.onNativeScroll, false)\r\n\r\n this.virtualScroll = new VirtualScroll(eventsTarget, {\r\n touchMultiplier,\r\n wheelMultiplier,\r\n })\r\n this.virtualScroll.on('scroll', this.onVirtualScroll)\r\n }\r\n\r\n destroy() {\r\n this.emitter.destroy()\r\n\r\n this.options.wrapper.removeEventListener(\r\n 'scroll',\r\n this.onNativeScroll,\r\n false\r\n )\r\n\r\n this.virtualScroll.destroy()\r\n this.dimensions.destroy()\r\n\r\n this.cleanUpClassName()\r\n\r\n // this.rootElement.className = ''\r\n\r\n // this.toggleClassName('lenis', false)\r\n // this.toggleClassName('lenis-smooth', false)\r\n // this.toggleClassName('lenis-scrolling', false)\r\n // this.toggleClassName('lenis-stopped', false)\r\n // this.toggleClassName('lenis-locked', false)\r\n }\r\n\r\n on(event: string, callback: Function) {\r\n return this.emitter.on(event, callback)\r\n }\r\n\r\n off(event: string, callback: Function) {\r\n return this.emitter.off(event, callback)\r\n }\r\n\r\n private setScroll(scroll: number) {\r\n // apply scroll value immediately\r\n if (this.isHorizontal) {\r\n this.rootElement.scrollLeft = scroll\r\n } else {\r\n this.rootElement.scrollTop = scroll\r\n }\r\n }\r\n\r\n private onVirtualScroll = ({\r\n deltaX,\r\n deltaY,\r\n event,\r\n }: {\r\n deltaX: number\r\n deltaY: number\r\n event: WheelEvent | TouchEvent\r\n }) => {\r\n // keep zoom feature\r\n if (event.ctrlKey) return\r\n\r\n const isTouch = event.type.includes('touch')\r\n const isWheel = event.type.includes('wheel')\r\n\r\n this.isTouching = event.type === 'touchstart' || event.type === 'touchmove'\r\n // if (event.type === 'touchend') {\r\n // console.log('touchend', this.scroll)\r\n // // this.lastVelocity = this.velocity\r\n // // this.velocity = 0\r\n // // this.isScrolling = false\r\n // this.emit({ type: 'touchend' })\r\n // // alert('touchend')\r\n // return\r\n // }\r\n\r\n const isTapToStop =\r\n this.options.syncTouch &&\r\n isTouch &&\r\n event.type === 'touchstart' &&\r\n !this.isStopped &&\r\n !this.isLocked\r\n\r\n if (isTapToStop) {\r\n this.reset()\r\n return\r\n }\r\n\r\n const isClick = deltaX === 0 && deltaY === 0 // click event\r\n\r\n // const isPullToRefresh =\r\n // this.options.gestureOrientation === 'vertical' &&\r\n // this.scroll === 0 &&\r\n // !this.options.infinite &&\r\n // deltaY <= 5 // touch pull to refresh, not reliable yet\r\n\r\n const isUnknownGesture =\r\n (this.options.gestureOrientation === 'vertical' && deltaY === 0) ||\r\n (this.options.gestureOrientation === 'horizontal' && deltaX === 0)\r\n\r\n if (isClick || isUnknownGesture) {\r\n // console.log('prevent')\r\n return\r\n }\r\n\r\n // catch if scrolling on nested scroll elements\r\n let composedPath = event.composedPath()\r\n composedPath = composedPath.slice(0, composedPath.indexOf(this.rootElement)) // remove parents elements\r\n\r\n const prevent = this.options.prevent\r\n\r\n if (\r\n !!composedPath.find(\r\n (node) =>\r\n node instanceof Element &&\r\n ((typeof prevent === 'function' ? prevent?.(node) : prevent) ||\r\n node.hasAttribute?.('data-lenis-prevent') ||\r\n (isTouch && node.hasAttribute?.('data-lenis-prevent-touch')) ||\r\n (isWheel && node.hasAttribute?.('data-lenis-prevent-wheel')) ||\r\n (node.classList?.contains('lenis') &&\r\n !node.classList?.contains('lenis-stopped'))) // nested lenis instance\r\n )\r\n )\r\n return\r\n\r\n if (this.isStopped || this.isLocked) {\r\n event.preventDefault() // this will stop forwarding the event to the parent, this is problematic\r\n return\r\n }\r\n\r\n const isSmooth =\r\n (this.options.syncTouch && isTouch) ||\r\n (this.options.smoothWheel && isWheel)\r\n\r\n if (!isSmooth) {\r\n this.isScrolling = 'native'\r\n this.animate.stop()\r\n return\r\n }\r\n\r\n event.preventDefault()\r\n\r\n let delta = deltaY\r\n if (this.options.gestureOrientation === 'both') {\r\n delta = Math.abs(deltaY) > Math.abs(deltaX) ? deltaY : deltaX\r\n } else if (this.options.gestureOrientation === 'horizontal') {\r\n delta = deltaX\r\n }\r\n\r\n const syncTouch = isTouch && this.options.syncTouch\r\n const isTouchEnd = isTouch && event.type === 'touchend'\r\n\r\n const hasTouchInertia = isTouchEnd && Math.abs(delta) > 5\r\n\r\n if (hasTouchInertia) {\r\n delta = this.velocity * this.options.touchInertiaMultiplier\r\n }\r\n\r\n this.scrollTo(this.targetScroll + delta, {\r\n programmatic: false,\r\n ...(syncTouch\r\n ? {\r\n lerp: hasTouchInertia ? this.options.syncTouchLerp : 1,\r\n }\r\n : {\r\n lerp: this.options.lerp,\r\n duration: this.options.duration,\r\n easing: this.options.easing,\r\n }),\r\n })\r\n }\r\n\r\n resize() {\r\n this.dimensions.resize()\r\n }\r\n\r\n private emit() {\r\n this.emitter.emit('scroll', this)\r\n }\r\n\r\n private onNativeScroll = () => {\r\n clearTimeout(this.__resetVelocityTimeout)\r\n delete this.__resetVelocityTimeout\r\n\r\n if (this.__preventNextNativeScrollEvent) {\r\n delete this.__preventNextNativeScrollEvent\r\n return\r\n }\r\n\r\n if (this.isScrolling === false || this.isScrolling === 'native') {\r\n const lastScroll = this.animatedScroll\r\n this.animatedScroll = this.targetScroll = this.actualScroll\r\n this.lastVelocity = this.velocity\r\n this.velocity = this.animatedScroll - lastScroll\r\n this.direction = Math.sign(\r\n this.animatedScroll - lastScroll\r\n ) as Lenis['direction']\r\n // this.isSmooth = false\r\n this.isScrolling = 'native'\r\n this.emit()\r\n\r\n if (this.velocity !== 0) {\r\n this.__resetVelocityTimeout = setTimeout(() => {\r\n this.lastVelocity = this.velocity\r\n this.velocity = 0\r\n this.isScrolling = false\r\n this.emit()\r\n }, 400)\r\n }\r\n\r\n // this.hasScrolled = true\r\n // }, 50)\r\n }\r\n }\r\n\r\n private reset() {\r\n this.isLocked = false\r\n this.isScrolling = false\r\n this.animatedScroll = this.targetScroll = this.actualScroll\r\n this.lastVelocity = this.velocity = 0\r\n this.animate.stop()\r\n }\r\n\r\n start() {\r\n if (!this.isStopped) return\r\n this.isStopped = false\r\n\r\n this.reset()\r\n }\r\n\r\n stop() {\r\n if (this.isStopped) return\r\n this.isStopped = true\r\n this.animate.stop()\r\n\r\n this.reset()\r\n }\r\n\r\n raf(time: number) {\r\n const deltaTime = time - (this.time || time)\r\n this.time = time\r\n\r\n this.animate.advance(deltaTime * 0.001)\r\n }\r\n\r\n scrollTo(\r\n target: number | string | HTMLElement,\r\n {\r\n offset = 0,\r\n immediate = false,\r\n lock = false,\r\n duration = this.options.duration,\r\n easing = this.options.easing,\r\n lerp = this.options.lerp,\r\n onStart,\r\n onComplete,\r\n force = false, // scroll even if stopped\r\n programmatic = true, // called from outside of the class\r\n userData = {},\r\n }: {\r\n offset?: number\r\n immediate?: boolean\r\n lock?: boolean\r\n duration?: number\r\n easing?: EasingFunction\r\n lerp?: number\r\n onStart?: (lenis: Lenis) => void\r\n onComplete?: (lenis: Lenis) => void\r\n force?: boolean\r\n programmatic?: boolean\r\n userData?: object\r\n } = {}\r\n ) {\r\n if ((this.isStopped || this.isLocked) && !force) return\r\n\r\n // keywords\r\n if (\r\n typeof target === 'string' &&\r\n ['top', 'left', 'start'].includes(target)\r\n ) {\r\n target = 0\r\n } else if (\r\n typeof target === 'string' &&\r\n ['bottom', 'right', 'end'].includes(target)\r\n ) {\r\n target = this.limit\r\n } else {\r\n let node\r\n\r\n if (typeof target === 'string') {\r\n // CSS selector\r\n node = document.querySelector(target)\r\n } else if (target instanceof HTMLElement && target?.nodeType) {\r\n // Node element\r\n node = target\r\n }\r\n\r\n if (node) {\r\n if (this.options.wrapper !== window) {\r\n // nested scroll offset correction\r\n const wrapperRect = this.rootElement.getBoundingClientRect()\r\n offset -= this.isHorizontal ? wrapperRect.left : wrapperRect.top\r\n }\r\n\r\n const rect = node.getBoundingClientRect()\r\n\r\n target =\r\n (this.isHorizontal ? rect.left : rect.top) + this.animatedScroll\r\n }\r\n }\r\n\r\n if (typeof target !== 'number') return\r\n\r\n target += offset\r\n target = Math.round(target)\r\n\r\n if (this.options.infinite) {\r\n if (programmatic) {\r\n this.targetScroll = this.animatedScroll = this.scroll\r\n }\r\n } else {\r\n target = clamp(0, target, this.limit)\r\n }\r\n\r\n if (target === this.targetScroll) return\r\n\r\n this.userData = userData\r\n\r\n if (immediate) {\r\n this.animatedScroll = this.targetScroll = target\r\n this.setScroll(this.scroll)\r\n this.reset()\r\n this.preventNextNativeScrollEvent()\r\n this.emit()\r\n onComplete?.(this)\r\n this.userData = {}\r\n return\r\n }\r\n\r\n if (!programmatic) {\r\n this.targetScroll = target\r\n }\r\n\r\n this.animate.fromTo(this.animatedScroll, target, {\r\n duration,\r\n easing,\r\n lerp,\r\n onStart: () => {\r\n // started\r\n if (lock) this.isLocked = true\r\n this.isScrolling = 'smooth'\r\n onStart?.(this)\r\n },\r\n onUpdate: (value: number, completed: boolean) => {\r\n this.isScrolling = 'smooth'\r\n\r\n // updated\r\n this.lastVelocity = this.velocity\r\n this.velocity = value - this.animatedScroll\r\n this.direction = Math.sign(this.velocity) as Lenis['direction']\r\n\r\n this.animatedScroll = value\r\n this.setScroll(this.scroll)\r\n\r\n if (programmatic) {\r\n // wheel during programmatic should stop it\r\n this.targetScroll = value\r\n }\r\n\r\n if (!completed) this.emit()\r\n\r\n if (completed) {\r\n this.reset()\r\n this.emit()\r\n onComplete?.(this)\r\n this.userData = {}\r\n\r\n // avoid emitting event twice\r\n this.preventNextNativeScrollEvent()\r\n }\r\n },\r\n })\r\n }\r\n\r\n private preventNextNativeScrollEvent() {\r\n this.__preventNextNativeScrollEvent = true\r\n\r\n requestAnimationFrame(() => {\r\n delete this.__preventNextNativeScrollEvent\r\n })\r\n }\r\n\r\n get rootElement() {\r\n return (\r\n this.options.wrapper === window\r\n ? document.documentElement\r\n : this.options.wrapper\r\n ) as HTMLElement\r\n }\r\n\r\n get limit() {\r\n if (this.options.__experimental__naiveDimensions) {\r\n if (this.isHorizontal) {\r\n return this.rootElement.scrollWidth - this.rootElement.clientWidth\r\n } else {\r\n return this.rootElement.scrollHeight - this.rootElement.clientHeight\r\n }\r\n } else {\r\n return this.dimensions.limit[this.isHorizontal ? 'x' : 'y']\r\n }\r\n }\r\n\r\n get isHorizontal() {\r\n return this.options.orientation === 'horizontal'\r\n }\r\n\r\n get actualScroll(): number {\r\n // value browser takes into account\r\n return this.isHorizontal\r\n ? this.rootElement.scrollLeft\r\n : this.rootElement.scrollTop\r\n }\r\n\r\n get scroll(): number {\r\n return this.options.infinite\r\n ? modulo(this.animatedScroll, this.limit)\r\n : this.animatedScroll\r\n }\r\n\r\n get progress(): number {\r\n // avoid progress to be NaN\r\n return this.limit === 0 ? 1 : this.scroll / this.limit\r\n }\r\n\r\n // get isSmooth() {\r\n // return this.__isSmooth\r\n // }\r\n\r\n // private set isSmooth(value: boolean) {\r\n // if (this.__isSmooth !== value) {\r\n // this.__isSmooth = value\r\n // this.updateClassName()\r\n // }\r\n // }\r\n\r\n get isScrolling() {\r\n return this.__isScrolling\r\n }\r\n\r\n private set isScrolling(value: Scrolling) {\r\n if (this.__isScrolling !== value) {\r\n this.__isScrolling = value\r\n this.updateClassName()\r\n }\r\n }\r\n\r\n get isStopped() {\r\n return this.__isStopped\r\n }\r\n\r\n private set isStopped(value: boolean) {\r\n if (this.__isStopped !== value) {\r\n this.__isStopped = value\r\n this.updateClassName()\r\n }\r\n }\r\n\r\n get isLocked() {\r\n return this.__isLocked\r\n }\r\n\r\n private set isLocked(value: boolean) {\r\n if (this.__isLocked !== value) {\r\n this.__isLocked = value\r\n this.updateClassName()\r\n }\r\n }\r\n\r\n get isSmooth() {\r\n return this.isScrolling === 'smooth'\r\n }\r\n\r\n get className() {\r\n let className = 'lenis'\r\n if (this.isStopped) className += ' lenis-stopped'\r\n if (this.isLocked) className += ' lenis-locked'\r\n if (this.isScrolling) className += ' lenis-scrolling'\r\n if (this.isScrolling === 'smooth') className += ' lenis-smooth'\r\n // if (this.isScrolling === 'native') className += ' lenis-native'\r\n // if (this.isSmooth) className += ' lenis-smooth'\r\n return className\r\n }\r\n\r\n private updateClassName() {\r\n this.cleanUpClassName()\r\n\r\n this.rootElement.className =\r\n `${this.rootElement.className} ${this.className}`.trim()\r\n }\r\n\r\n private cleanUpClassName() {\r\n this.rootElement.className = this.rootElement.className\r\n .replace(/lenis(-\\w+)?/g, '')\r\n .trim()\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
|