morphing-scroll 2.2.21 → 2.4.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 +170 -76
- package/cjs/index.js +1 -1
- package/esm/index.js +1 -1
- package/package.json +1 -1
- package/types/morphScroll.d.ts +23 -4
package/README.md
CHANGED
|
@@ -73,7 +73,8 @@ Start using the `MorphScroll` component by defining the required `size` prop. Fo
|
|
|
73
73
|
##### **GENERAL SETTINGS**:
|
|
74
74
|
|
|
75
75
|
<details><summary><b><code>className</code></b>: <em>Additional classes.</em></summary><br /><ul><div>
|
|
76
|
-
<b>Type:</b
|
|
76
|
+
<b>Type:</b><br />
|
|
77
|
+
string<br />
|
|
77
78
|
<br />
|
|
78
79
|
<b>Description:</b> <em><br />
|
|
79
80
|
This parameter allows you to add additional classes to the component.</em><br />
|
|
@@ -91,7 +92,8 @@ This parameter allows you to add additional classes to the component.</em><br />
|
|
|
91
92
|
<h2></h2>
|
|
92
93
|
|
|
93
94
|
<details><summary><b><code>children</code></b>: <em>Custom user content.</em></summary><br /><ul><div>
|
|
94
|
-
<b>Type:</b
|
|
95
|
+
<b>Type:</b><br />
|
|
96
|
+
React.ReactNode<br />
|
|
95
97
|
<br />
|
|
96
98
|
<b>Description:</b> <em><br />
|
|
97
99
|
This is where you can pass your list elements.<br />
|
|
@@ -111,9 +113,11 @@ Additionally, <code>MorphScroll</code> handles a passed <mark>null</mark> value
|
|
|
111
113
|
##### **SCROLL SETTINGS**:
|
|
112
114
|
|
|
113
115
|
<details><summary><b><code>type</code></b>: <em>Type of progress element.</em></summary><br /><ul><div>
|
|
114
|
-
<b>Type:</b
|
|
116
|
+
<b>Type:</b><br />
|
|
117
|
+
"scroll" | "slider" | "sliderMenu"<br />
|
|
115
118
|
<br />
|
|
116
|
-
<b>Default:</b
|
|
119
|
+
<b>Default:</b><br />
|
|
120
|
+
"scroll"<br />
|
|
117
121
|
<br />
|
|
118
122
|
<b>Description:</b> <em><br />
|
|
119
123
|
This parameter defines how the provided <code>progressElement</code> behaves within <code>progressTrigger</code> and how you interact with it.<br />
|
|
@@ -139,9 +143,11 @@ This parameter defines how the provided <code>progressElement</code> behaves wit
|
|
|
139
143
|
<h2></h2>
|
|
140
144
|
|
|
141
145
|
<details><summary><b><code>direction</code></b>: <em>Scrolling direction.</em></summary><br /><ul><div>
|
|
142
|
-
<b>Type:</b
|
|
146
|
+
<b>Type:</b><br />
|
|
147
|
+
"x" | "y" | "hybrid"<br />
|
|
143
148
|
<br />
|
|
144
|
-
<b>Default:</b
|
|
149
|
+
<b>Default:</b><br />
|
|
150
|
+
"y"<br />
|
|
145
151
|
<br />
|
|
146
152
|
<b>Description:</b> <em><br />
|
|
147
153
|
This parameter changes the scroll or slider type direction based on the provided value.<br />
|
|
@@ -162,13 +168,17 @@ You can set the value to horizontal, vertical or hybrid positions to customize t
|
|
|
162
168
|
<h2></h2>
|
|
163
169
|
|
|
164
170
|
<details><summary><b><code>scrollPosition</code></b>: <em>Scroll position and additional options.</em></summary><br /><ul><div>
|
|
165
|
-
<b>Type:</b
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
171
|
+
<b>Type:</b><br />
|
|
172
|
+
{<br />
|
|
173
|
+
<ul>
|
|
174
|
+
value: number | "end" | (number | "end")[];<br />
|
|
175
|
+
duration?: number;<br />
|
|
176
|
+
updater?: boolean;<br />
|
|
177
|
+
</ul>
|
|
169
178
|
}<br />
|
|
170
179
|
<br />
|
|
171
|
-
<b>Default:</b
|
|
180
|
+
<b>Default:</b><br />
|
|
181
|
+
{ duration: 200; updater: false }<br />
|
|
172
182
|
<br />
|
|
173
183
|
<b>Description:</b> <em><br />
|
|
174
184
|
This parameter allows you to set custom scroll values.<br />
|
|
@@ -204,7 +214,8 @@ This property is a helper for the <code>value</code> property. When setting the
|
|
|
204
214
|
<h2></h2>
|
|
205
215
|
|
|
206
216
|
<details><summary><b><code>onScrollValue</code></b>: <em>Callback for scroll value.</em></summary><br /><ul><div>
|
|
207
|
-
<b>Type:</b
|
|
217
|
+
<b>Type:</b><br />
|
|
218
|
+
( left: number, top: number ) => void<br />
|
|
208
219
|
<br />
|
|
209
220
|
<b>Description:</b> <em><br />
|
|
210
221
|
This parameter accepts a callback function that is triggered on every scroll event. The callback receives the current scroll top and left position as a number. The return value of the callback can be used to determine custom behavior based on the scroll value.</em><br />
|
|
@@ -226,7 +237,8 @@ This parameter accepts a callback function that is triggered on every scroll eve
|
|
|
226
237
|
<h2></h2>
|
|
227
238
|
|
|
228
239
|
<details><summary><b><code>isScrolling</code></b>: <em>Callback function for scroll status.</em></summary><br /><ul><div>
|
|
229
|
-
<b>Type:</b
|
|
240
|
+
<b>Type:</b><br />
|
|
241
|
+
( motion: boolean ) => void<br />
|
|
230
242
|
<br />
|
|
231
243
|
<b>Description:</b> <em><br />
|
|
232
244
|
This parameter accepts a callback function that is triggered whenever the scroll status changes. The callback receives a boolean value, where <code>true</code> indicates that scrolling is in progress, and <code>false</code> indicates that scrolling has stopped. This can be useful for triggering additional actions, such as pausing animations or loading indicators based on the scroll state.</em><br />
|
|
@@ -251,7 +263,8 @@ This parameter accepts a callback function that is triggered whenever the scroll
|
|
|
251
263
|
##### **VISUAL SETTINGS**:
|
|
252
264
|
|
|
253
265
|
<details><summary><b><code>size</code> REQUIRED</b>: <em>[width, height] dimension of <b>MorphScroll</b>.</em></summary><br /><ul><div>
|
|
254
|
-
<b>Type:</b><br />
|
|
266
|
+
<b>Type:</b><br />
|
|
267
|
+
number | number[] | "auto"<br />
|
|
255
268
|
<br />
|
|
256
269
|
<b>Description:</b> <em><br />
|
|
257
270
|
This parameter sets the width and height of the <code>MorphScroll</code>.<br />
|
|
@@ -279,7 +292,8 @@ This parameter sets the width and height of the <code>MorphScroll</code>.<br />
|
|
|
279
292
|
number | "size" | "firstChild" | "none"<br />
|
|
280
293
|
| (number | "size" | "firstChild" | "none")[]<br />
|
|
281
294
|
<br />
|
|
282
|
-
<b>Default:</b
|
|
295
|
+
<b>Default:</b><br />
|
|
296
|
+
If you don't provide any value, the default value will be taken from <code>size</code><br />
|
|
283
297
|
<br />
|
|
284
298
|
<b>Description:</b> <em><br />
|
|
285
299
|
This parameter defines the [width, height] of cells for each of your objects.<br />
|
|
@@ -320,7 +334,8 @@ This can be useful if you want to change the size of objects in your list dynami
|
|
|
320
334
|
<h2></h2>
|
|
321
335
|
|
|
322
336
|
<details><summary><b><code>crossCount</code></b>: <em>Number of cells in each direction.</em></summary><br /><ul><div>
|
|
323
|
-
<b>Type:</b
|
|
337
|
+
<b>Type:</b><br />
|
|
338
|
+
number<br />
|
|
324
339
|
<br />
|
|
325
340
|
<b>Description:</b> <em><br />
|
|
326
341
|
This parameter defines the number of <b>columns</b> (<code>direction="y"</code>, <code>direction="hybrid"</code> + <code>elementsDirection="column"</code>) or <b>rows</b> (<code>direction="x"</code>, <code>direction="hybrid"</code> + <code>elementsDirection="row"</code>).<br />
|
|
@@ -346,7 +361,8 @@ This parameter defines the number of <b>columns</b> (<code>direction="y"</code>,
|
|
|
346
361
|
<h2></h2>
|
|
347
362
|
|
|
348
363
|
<details><summary><b><code>gap</code></b>: <em>Gap between cells.</em></summary><br /><ul><div>
|
|
349
|
-
<b>Type:</b
|
|
364
|
+
<b>Type:</b><br />
|
|
365
|
+
number | number[]<br />
|
|
350
366
|
<br />
|
|
351
367
|
<b>Description:</b> <em><br />
|
|
352
368
|
This parameter allows you to set spacing in pixels between list items for rows and columns.<br />
|
|
@@ -369,7 +385,8 @@ It can be 1 number or an array of 2 numbers.</em><br />
|
|
|
369
385
|
<h2></h2>
|
|
370
386
|
|
|
371
387
|
<details><summary><b><code>wrapperMargin</code></b>: <em>Margin for the <b>.ms-objects-wrapper</b>.</em></summary><br /><ul><div>
|
|
372
|
-
<b>Type:</b
|
|
388
|
+
<b>Type:</b><br />
|
|
389
|
+
number | number[]<br />
|
|
373
390
|
<br />
|
|
374
391
|
<b>Description:</b> <em><br />
|
|
375
392
|
This parameter defines the spacing between the list items and their wrapper, effectively increasing the width or height of the scrollable area.<br />
|
|
@@ -392,7 +409,9 @@ Can be 1 number or an array of 2 or 4 numbers in pixels.</em><br />
|
|
|
392
409
|
<h2></h2>
|
|
393
410
|
|
|
394
411
|
<details><summary><b><code>wrapperMinSize</code></b>: <em>Minimum height or width of the <b>.ms-objects-wrapper</b>.</em></summary><br /><ul><div>
|
|
395
|
-
<b>Type:</b
|
|
412
|
+
<b>Type:</b><br />
|
|
413
|
+
number | "full" | (number | "full")[]<br />
|
|
414
|
+
<br />
|
|
396
415
|
<b>Description:</b> <em><br />
|
|
397
416
|
This parameter defines the minimum height or width of the <b>.ms-objects-wrapper</b>, to which CSS properties like <code>min-height</code> or <code>min-width</code> will be applied.<br />
|
|
398
417
|
<br />
|
|
@@ -439,7 +458,8 @@ Use 1 value to align one or both axes, or an array of 2 values to align both axe
|
|
|
439
458
|
<h2></h2>
|
|
440
459
|
|
|
441
460
|
<details><summary><b><code>elementsAlign</code></b>: <em>Aligns the objects inside <code>MorphScroll</code>.</em></summary><br /><ul><div>
|
|
442
|
-
<b>Type:</b
|
|
461
|
+
<b>Type:</b><br />
|
|
462
|
+
"start" | "center" | "end"<br />
|
|
443
463
|
<br />
|
|
444
464
|
<b>Example:</b>
|
|
445
465
|
|
|
@@ -456,9 +476,11 @@ Use 1 value to align one or both axes, or an array of 2 values to align both axe
|
|
|
456
476
|
<h2></h2>
|
|
457
477
|
|
|
458
478
|
<details><summary><b><code>elementsDirection</code></b>: <em>Direction of the provided elements.</em></summary><br /><ul><div>
|
|
459
|
-
<b>Type:</b
|
|
479
|
+
<b>Type:</b><br />
|
|
480
|
+
"row" | "column"<br />
|
|
460
481
|
<br />
|
|
461
|
-
<b>Default:</b
|
|
482
|
+
<b>Default:</b><br />
|
|
483
|
+
"row"<br />
|
|
462
484
|
<br />
|
|
463
485
|
<b>Description:</b> <em><br />
|
|
464
486
|
This parameter changes the order of the provided elements based on the provided value.</em><br />
|
|
@@ -478,19 +500,21 @@ This parameter changes the order of the provided elements based on the provided
|
|
|
478
500
|
<h2></h2>
|
|
479
501
|
|
|
480
502
|
<details><summary><b><code>edgeGradient</code></b>: <em>Gradient overlay at the edges of the scroll area.</em></summary><br /><ul><div>
|
|
481
|
-
<b>Type:</b
|
|
503
|
+
<b>Type:</b><br />
|
|
504
|
+
boolean | { color?: string; size?: number }<br />
|
|
482
505
|
<br />
|
|
483
|
-
<b>Default:</b
|
|
506
|
+
<b>Default:</b><br />
|
|
507
|
+
{ size: 40 }<br />
|
|
484
508
|
<br />
|
|
485
509
|
<b>Description:</b> <em><br />
|
|
486
510
|
This parameter creates two edge elements responsible for darkening the edges of the scroll when it overflows.<br />
|
|
487
511
|
<br />
|
|
488
|
-
<code>color</code
|
|
512
|
+
<code>color</code>:<br />
|
|
489
513
|
The property accepts any valid color format.
|
|
490
514
|
If you provide it, the library will generate a gradient transitioning from the custom color to transparent.
|
|
491
515
|
If you provide just <mark>true</mark>, the edge elements will have no color, allowing for custom styling via CSS classes.<br />
|
|
492
516
|
<br />
|
|
493
|
-
<code>size</code
|
|
517
|
+
<code>size</code>:<br />
|
|
494
518
|
The property changes the height for horizontal and width for vertical <b>.ms-edge</b>.</em><br />
|
|
495
519
|
<br />
|
|
496
520
|
<b>Example:</b>
|
|
@@ -513,39 +537,52 @@ The property changes the height for horizontal and width for vertical <b>.ms-edg
|
|
|
513
537
|
##### **PROGRESSBAR**:
|
|
514
538
|
|
|
515
539
|
<details><summary><b><code>progressTrigger</code></b>: <em>Triggers for the scroll progress.</em></summary><br /><ul><div>
|
|
516
|
-
<b>Type:</b
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
540
|
+
<b>Type:</b><br />
|
|
541
|
+
{<br />
|
|
542
|
+
<ul>
|
|
543
|
+
wheel?: boolean | { changeDirection?: boolean; changeDirectionKey?: string };<br />
|
|
544
|
+
content?: boolean;<br />
|
|
545
|
+
progressElement?: boolean | React.ReactNode | React.ReactNode[];<br />
|
|
546
|
+
arrows?: boolean | { size?: number; element?: React.ReactNode };<br />
|
|
547
|
+
</ul>
|
|
521
548
|
}<br />
|
|
522
549
|
<br />
|
|
523
|
-
<b>Default:</b
|
|
550
|
+
<b>Default:</b><br />
|
|
551
|
+
{ wheel: true }<br />
|
|
524
552
|
<br />
|
|
525
553
|
<b>Description:</b> <em><br />
|
|
526
554
|
This is one of the most important properties, allowing you to define how users interact with the progress bar and customize its appearance.<br />
|
|
527
555
|
<br />
|
|
528
|
-
<code>wheel</code
|
|
529
|
-
|
|
556
|
+
<code>wheel</code>:<br />
|
|
557
|
+
Determines whether the progress bar responds to mouse wheel scrolling.<br />
|
|
558
|
+
If you use <code>direction="hybrid"</code>, you can use:
|
|
559
|
+
<ul>
|
|
560
|
+
<li><code>changeDirection</code>: allows switching the scroll direction with the mouse wheel.</li>
|
|
561
|
+
<li><code>changeDirectionKey</code>: enables switching the scroll direction by pressing a specific key (default: <mark>"KeyX"</mark>).<br />
|
|
562
|
+
To disable this behavior, pass an empty string.<br />
|
|
563
|
+
<a href="https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_code_values">more about keys</a></li>
|
|
564
|
+
</ul>
|
|
530
565
|
<br />
|
|
531
|
-
<code>content</code
|
|
566
|
+
<code>content</code>:<br />
|
|
532
567
|
This parameter enables interaction by clicking and dragging anywhere within the scrollable content to move it.<br />
|
|
533
568
|
<br />
|
|
534
|
-
<code>progressElement</code
|
|
569
|
+
<code>progressElement</code>:<br />
|
|
535
570
|
This parameter determines how the scroll progress is managed.<br />
|
|
536
571
|
<br />
|
|
537
572
|
<ul>
|
|
538
|
-
<li>When using <code>type="scroll"</code>, you can provide a custom scroll element. If it's not ready yet, simply set <mark>true</mark> instead — this will fall back to the browser’s default scrollbar.</li
|
|
539
|
-
<li>When using <code>type="slider"</code>, a <b>.ms-slider</b> element is automatically generated. It contains multiple <b>ms-slider-element</b> elements that visually represent the scroll progress. One of them will always have the <code>active</code> class depending on the current position.</li
|
|
573
|
+
<li>When using <code>type="scroll"</code>, you can provide a custom scroll element. If it's not ready yet, simply set <mark>true</mark> instead — this will fall back to the browser’s default scrollbar.</li><br />
|
|
574
|
+
<li>When using <code>type="slider"</code>, a <b>.ms-slider</b> element is automatically generated. It contains multiple <b>ms-slider-element</b> elements that visually represent the scroll progress. One of them will always have the <code>active</code> class depending on the current position.</li><br />
|
|
540
575
|
<li>When using <code>type="sliderMenu"</code>, everything is the same as with <mark>"slider"</mark> but you can pass an array of custom buttons to <code>progressElement</code>. These buttons act as a navigation menu, allowing users to jump to specific sections.</li>
|
|
541
576
|
</ul>
|
|
542
577
|
<br />
|
|
543
|
-
<code>arrows</code
|
|
578
|
+
<code>arrows</code>:<br />
|
|
544
579
|
This parameter allows you to add custom arrows to the progress bar. You can either specify a <code>size</code> for the arrows and provide a custom element.<br />
|
|
545
580
|
<br />
|
|
546
581
|
✦ Note:<br />
|
|
547
|
-
<
|
|
548
|
-
<
|
|
582
|
+
<ul>
|
|
583
|
+
<li><code>progressTrigger</code> can only create or provide elements, but you must make the design for them yourself.</li>
|
|
584
|
+
<li>The Library scroll element in browser automatically receives <code>:focus</code> when you start scrolling with the mouse wheel.</li>
|
|
585
|
+
</ul></em><br />
|
|
549
586
|
<b>Example:</b>
|
|
550
587
|
|
|
551
588
|
```tsx
|
|
@@ -564,10 +601,12 @@ This parameter allows you to add custom arrows to the progress bar. You can eith
|
|
|
564
601
|
|
|
565
602
|
<h2></h2>
|
|
566
603
|
|
|
567
|
-
<details><summary><b><code>progressReverse</code></b>: <em>Reverse
|
|
568
|
-
<b>Type:</b
|
|
604
|
+
<details><summary><b><code>progressReverse</code></b>: <em>Reverse your progress bar position.</em></summary><br /><ul><div>
|
|
605
|
+
<b>Type:</b><br />
|
|
606
|
+
boolean | boolean[]<br />
|
|
569
607
|
<br />
|
|
570
|
-
<b>Default:</b
|
|
608
|
+
<b>Default:</b><br />
|
|
609
|
+
false<br />
|
|
571
610
|
<br />
|
|
572
611
|
<b>Description:</b> <em><br />
|
|
573
612
|
This parameter changes the position of the progress bar based on the direction property.<br />
|
|
@@ -592,10 +631,12 @@ This parameter changes the position of the progress bar based on the direction p
|
|
|
592
631
|
|
|
593
632
|
<h2></h2>
|
|
594
633
|
|
|
595
|
-
<details><summary><b><code>scrollBarOnHover</code></b>: <em>
|
|
596
|
-
<b>Type:</b
|
|
634
|
+
<details><summary><b><code>scrollBarOnHover</code></b>: <em>Progress bar hover visibility.</em></summary><br /><ul><div>
|
|
635
|
+
<b>Type:</b><br />
|
|
636
|
+
boolean<br />
|
|
597
637
|
<br />
|
|
598
|
-
<b>Default:</b
|
|
638
|
+
<b>Default:</b><br />
|
|
639
|
+
false<br />
|
|
599
640
|
<br />
|
|
600
641
|
<b>Description:</b> <em><br />
|
|
601
642
|
This parameter controls the visibility of the progress bar regardless of the <code>type</code> value.<br />
|
|
@@ -615,14 +656,42 @@ When you use it, the <b>"hover"</b> class is applied to the <b>.ms-bar</b> when
|
|
|
615
656
|
|
|
616
657
|
<h2></h2>
|
|
617
658
|
|
|
659
|
+
<details><summary><b><code>scrollBarEdge</code></b>: <em>Scroll bar margin at its edges.</em></summary><br /><ul><div>
|
|
660
|
+
<b>Type:</b><br />
|
|
661
|
+
number | number[]<br />
|
|
662
|
+
<br />
|
|
663
|
+
<b>Description:</b> <em><br />
|
|
664
|
+
Defines the margin (in pixels) applied to the edges of the scroll bar, effectively reducing its size.<br />
|
|
665
|
+
If you use <code>direction="hybrid"</code>, you can also pass an array of numbers to control each bar individually.<br />
|
|
666
|
+
<br />
|
|
667
|
+
✦ Note:<br />
|
|
668
|
+
This parameter is only used when <code>type="scroll"</code> is set.</em><br />
|
|
669
|
+
<br />
|
|
670
|
+
<b>Example:</b>
|
|
671
|
+
|
|
672
|
+
```tsx
|
|
673
|
+
<MorphScroll {...props} scrollBarEdge={10}>
|
|
674
|
+
{children}
|
|
675
|
+
</MorphScroll>
|
|
676
|
+
```
|
|
677
|
+
|
|
678
|
+

|
|
679
|
+
|
|
680
|
+
</div></ul></details>
|
|
681
|
+
|
|
682
|
+
<h2></h2>
|
|
683
|
+
|
|
618
684
|
##### **OPTIMIZATIONS**:
|
|
619
685
|
|
|
620
686
|
<details><summary><b><code>render</code></b>: <em>Rendering strategy for performance optimization.</em></summary><br /><ul><div>
|
|
621
|
-
<b>Type:</b
|
|
687
|
+
<b>Type:</b><br />
|
|
688
|
+
{<br />
|
|
689
|
+
<ul>
|
|
622
690
|
type: "lazy" | "virtual";<br />
|
|
623
691
|
rootMargin?: number | number[];<br />
|
|
624
692
|
stopLoadOnScroll?: boolean;<br />
|
|
625
|
-
|
|
693
|
+
</ul>
|
|
694
|
+
}<br />
|
|
626
695
|
<br />
|
|
627
696
|
<b>Description:</b> <em><br />
|
|
628
697
|
This parameter adds a gradual rendering of the content as it enters the viewport.<br />
|
|
@@ -658,28 +727,33 @@ This property controls whether to stop loading content when scrolling.<br />
|
|
|
658
727
|
<h2></h2>
|
|
659
728
|
|
|
660
729
|
<details><summary><b><code>emptyElements</code></b>: <em>Handling of empty scroll elements.</em></summary><br /><ul><div>
|
|
661
|
-
<b>Type:</b
|
|
662
|
-
|
|
663
|
-
|
|
730
|
+
<b>Type:</b><br />
|
|
731
|
+
{<br />
|
|
732
|
+
<ul>
|
|
733
|
+
mode: "clear" | "fallback" | { fallback: React.ReactNode };<br />
|
|
734
|
+
clickTrigger?: { selector: string; delay?: number };<br />
|
|
735
|
+
</ul>
|
|
664
736
|
}<br />
|
|
665
737
|
<br />
|
|
666
738
|
<b>Description:</b> <em><br />
|
|
667
739
|
This option will allow you to delete or replace empty list items during the first rendering, or to start this process by clicking.<br />
|
|
668
740
|
<br />
|
|
669
|
-
<code>mode</code
|
|
741
|
+
<code>mode</code>:<br />
|
|
670
742
|
<ul>
|
|
671
743
|
<li><mark>"clear"</mark> – automatically removes empty elements.</li>
|
|
672
744
|
<li><mark>"fallback"</mark> – replaces empty elements with the value from the <code>fallback</code> props.</li>
|
|
673
745
|
<li><mark>{ fallback: React.ReactNode }</mark> – if you need a different element than in <code>fallback</code> to replace empty elements, you can use this option.</li>
|
|
674
746
|
</ul>
|
|
675
747
|
<br />
|
|
676
|
-
<code>clickTrigger</code
|
|
748
|
+
<code>clickTrigger</code>:<br />
|
|
677
749
|
In case if elements are removed via a click action, use this option. It accepts an object with a <code>selector</code> ( such as a delete button’s class ) and <code>delay</code> ( in <b>ms</b> ) to wait before removing the elements.<br />
|
|
678
750
|
<br />
|
|
679
751
|
✦ Note:<br />
|
|
680
752
|
<ul>
|
|
681
|
-
<li>The cleanup
|
|
682
|
-
<li>If you
|
|
753
|
+
<li>The cleanup runs on the initial render, when the number of elements changes, on scroll, and on click if you use <code>clickTrigger</code>.</li>
|
|
754
|
+
<li>If you use <code>clickTrigger</code>:<br />
|
|
755
|
+
- consider increasing <code>delay</code>, since the cleanup may run before removal.<br />
|
|
756
|
+
- the wrapper <code>ms-object-box</code> also gets the <code>remove</code> class, which you can use e.g. for fade-out animations.</li>
|
|
683
757
|
</ul></em>
|
|
684
758
|
<br />
|
|
685
759
|
<b>Example:</b>
|
|
@@ -703,9 +777,11 @@ In case if elements are removed via a click action, use this option. It accepts
|
|
|
703
777
|
<h2></h2>
|
|
704
778
|
|
|
705
779
|
<details><summary><b><code>suspending</code></b>: <em>Adds React Suspense.</em></summary><br /><ul><div>
|
|
706
|
-
<b>Type:</b
|
|
780
|
+
<b>Type:</b><br />
|
|
781
|
+
boolean<br />
|
|
707
782
|
<br />
|
|
708
|
-
<b>Default:</b
|
|
783
|
+
<b>Default:</b><br />
|
|
784
|
+
false<br />
|
|
709
785
|
<br />
|
|
710
786
|
<b>Description:</b> <em><br />
|
|
711
787
|
This parameter adds React Suspense to the MorphScroll component for asynchronous rendering.</em><br />
|
|
@@ -723,7 +799,8 @@ This parameter adds React Suspense to the MorphScroll component for asynchronous
|
|
|
723
799
|
<h2></h2>
|
|
724
800
|
|
|
725
801
|
<details><summary><b><code>fallback</code></b>: <em>Fallback element.</em></summary><br /><ul><div>
|
|
726
|
-
<b>Type:</b
|
|
802
|
+
<b>Type:</b><br />
|
|
803
|
+
React.ReactNode<br />
|
|
727
804
|
<br />
|
|
728
805
|
<b>Description:</b> <em><br />
|
|
729
806
|
This parameter sets the fallback element to display during loading or placeholder.<br />
|
|
@@ -757,7 +834,8 @@ It will be used when:
|
|
|
757
834
|
<ul><div>
|
|
758
835
|
|
|
759
836
|
<details><summary><b><code>className</code></b>: <em>Additional classes.</em></summary><br /><ul><div>
|
|
760
|
-
<b>Type:</b
|
|
837
|
+
<b>Type:</b><br />
|
|
838
|
+
string<br />
|
|
761
839
|
<br />
|
|
762
840
|
<b>Description:</b> <em><br />
|
|
763
841
|
This parameter allows you to add additional classes to the component.</em><br />
|
|
@@ -773,7 +851,8 @@ This parameter allows you to add additional classes to the component.</em><br />
|
|
|
773
851
|
<h2></h2>
|
|
774
852
|
|
|
775
853
|
<details><summary><b><code>children</code></b>: <em>Custom user content.</em></summary><br /><ul><div>
|
|
776
|
-
<b>Type:</b
|
|
854
|
+
<b>Type:</b><br />
|
|
855
|
+
React.ReactNode<br />
|
|
777
856
|
<br />
|
|
778
857
|
<b>Description:</b> <em><br />
|
|
779
858
|
This parameter allows you to add custom content to the component.</em><br />
|
|
@@ -789,7 +868,8 @@ This parameter allows you to add custom content to the component.</em><br />
|
|
|
789
868
|
<h2></h2>
|
|
790
869
|
|
|
791
870
|
<details><summary><b><code>style</code></b>: <em>Applies inline styles to the container.</em></summary><br /><ul><div>
|
|
792
|
-
<b>Type:</b
|
|
871
|
+
<b>Type:</b><br />
|
|
872
|
+
React.CSSProperties<br />
|
|
793
873
|
<br />
|
|
794
874
|
<b>Example:</b>
|
|
795
875
|
|
|
@@ -802,9 +882,11 @@ This parameter allows you to add custom content to the component.</em><br />
|
|
|
802
882
|
<h2></h2>
|
|
803
883
|
|
|
804
884
|
<details><summary><b><code>measure</code></b>: <em>Defines the measurement strategy.</em></summary><br /><ul><div>
|
|
805
|
-
<b>Type:</b
|
|
885
|
+
<b>Type:</b><br />
|
|
886
|
+
"inner" | "outer" | "all"<br />
|
|
806
887
|
<br />
|
|
807
|
-
<b>Default:</b
|
|
888
|
+
<b>Default:</b><br />
|
|
889
|
+
"inner"<br />
|
|
808
890
|
<br />
|
|
809
891
|
<b>Description:</b><br />
|
|
810
892
|
<em>This prop determines what is being measured by automatically applying inline styles that affect width and height.<br />
|
|
@@ -829,7 +911,8 @@ Be cautious when overriding styles via the <code>style</code> prop, as it may in
|
|
|
829
911
|
<h2></h2>
|
|
830
912
|
|
|
831
913
|
<details><summary><b><code>onResize</code></b>: <em>Callback triggered on size changes.</em></summary><br /><ul><div>
|
|
832
|
-
<b>Type:</b
|
|
914
|
+
<b>Type:</b><br />
|
|
915
|
+
(rect: Partial<DOMRectReadOnly>) => void<br />
|
|
833
916
|
<br />
|
|
834
917
|
<b>Description:</b><br />
|
|
835
918
|
<em>A callback function that is triggered whenever the observed element's dimensions change.<br />
|
|
@@ -868,7 +951,8 @@ The function receives an object containing the updated size properties.</em><br
|
|
|
868
951
|
<ul><div>
|
|
869
952
|
|
|
870
953
|
<details><summary><b><code>className</code></b>: <em>Additional classes.</em></summary><br /><ul><div>
|
|
871
|
-
<b>Type:</b
|
|
954
|
+
<b>Type:</b><br />
|
|
955
|
+
string<br />
|
|
872
956
|
<br />
|
|
873
957
|
<b>Description:</b> <em><br />
|
|
874
958
|
This parameter allows you to add additional classes to the component.</em><br />
|
|
@@ -884,7 +968,8 @@ This parameter allows you to add additional classes to the component.</em><br />
|
|
|
884
968
|
<h2></h2>
|
|
885
969
|
|
|
886
970
|
<details><summary><b><code>children</code></b>: <em>Custom user content.</em></summary><br /><ul><div>
|
|
887
|
-
<b>Type:</b
|
|
971
|
+
<b>Type:</b><br />
|
|
972
|
+
React.ReactNode<br />
|
|
888
973
|
<br />
|
|
889
974
|
<b>Example:</b>
|
|
890
975
|
|
|
@@ -897,7 +982,8 @@ This parameter allows you to add additional classes to the component.</em><br />
|
|
|
897
982
|
<h2></h2>
|
|
898
983
|
|
|
899
984
|
<details><summary><b><code>style</code></b>: <em>Applies inline styles to the container.</em></summary><br /><ul><div>
|
|
900
|
-
<b>Type:</b
|
|
985
|
+
<b>Type:</b><br />
|
|
986
|
+
React.CSSProperties<br />
|
|
901
987
|
<br />
|
|
902
988
|
<b>Example:</b>
|
|
903
989
|
|
|
@@ -912,9 +998,11 @@ This parameter allows you to add additional classes to the component.</em><br />
|
|
|
912
998
|
<h2></h2>
|
|
913
999
|
|
|
914
1000
|
<details><summary><b><code>root</code></b>: <em>Defines the observation area.</em></summary><br /><ul><div>
|
|
915
|
-
<b>Type:</b
|
|
1001
|
+
<b>Type:</b><br />
|
|
1002
|
+
Element | null<br />
|
|
916
1003
|
<br />
|
|
917
|
-
<b>Default:</b
|
|
1004
|
+
<b>Default:</b><br />
|
|
1005
|
+
null (window)<br />
|
|
918
1006
|
<br />
|
|
919
1007
|
<b>Description:</b> <em><br />
|
|
920
1008
|
Specifies the element that serves as the bounding box for the intersection observation.
|
|
@@ -933,7 +1021,8 @@ If provided, it must be an ancestor of the observed element.</em><br />
|
|
|
933
1021
|
<h2></h2>
|
|
934
1022
|
|
|
935
1023
|
<details><summary><b><code>rootMargin</code></b>: <em>Sets the margin around the root element.</em></summary><br /><ul><div>
|
|
936
|
-
<b>Type:</b
|
|
1024
|
+
<b>Type:</b><br />
|
|
1025
|
+
number | number[]<br />
|
|
937
1026
|
<br />
|
|
938
1027
|
<b>Description:</b> <em><br />
|
|
939
1028
|
Defines an offset around the root element, expanding or shrinking the observed area.<br />
|
|
@@ -952,9 +1041,11 @@ It can be a single number or an array of 2 <b>[ top-bottom, left-right ]</b> or
|
|
|
952
1041
|
<h2></h2>
|
|
953
1042
|
|
|
954
1043
|
<details><summary><b><code>threshold</code></b>: <em>Defines when the callback <code>onIntersection</code> and content visibility should be triggered.</em></summary><br /><ul><div>
|
|
955
|
-
<b>Type:</b
|
|
1044
|
+
<b>Type:</b><br />
|
|
1045
|
+
number | number[]<br />
|
|
956
1046
|
<br />
|
|
957
|
-
<b>Default:</b
|
|
1047
|
+
<b>Default:</b><br />
|
|
1048
|
+
0<br />
|
|
958
1049
|
<br />
|
|
959
1050
|
<b>Description:</b> <em><br />
|
|
960
1051
|
Specifies at what percentage of the observed element’s visibility the callback should be executed.<br />
|
|
@@ -976,9 +1067,11 @@ Specifies at what percentage of the observed element’s visibility the callback
|
|
|
976
1067
|
<h2></h2>
|
|
977
1068
|
|
|
978
1069
|
<details><summary><b><code>visibleContent</code></b>: <em>Makes all elements always visible.</em></summary><br /><ul><div>
|
|
979
|
-
<b>Type:</b
|
|
1070
|
+
<b>Type:</b><br />
|
|
1071
|
+
boolean<br />
|
|
980
1072
|
<br />
|
|
981
|
-
<b>Default:</b
|
|
1073
|
+
<b>Default:</b><br />
|
|
1074
|
+
false<br />
|
|
982
1075
|
<br />
|
|
983
1076
|
<b>Description:</b> <em><br />
|
|
984
1077
|
If set to <mark>true</mark>, the tracked elements will always be visible, regardless of their actual intersection status.<br />
|
|
@@ -995,7 +1088,8 @@ This is useful for testing purposes or when using the <code>onIntersection</code
|
|
|
995
1088
|
<h2></h2>
|
|
996
1089
|
|
|
997
1090
|
<details><summary><b><code>onIntersection</code></b>: <em>Callback function triggered when the element becomes visible.</em></summary><br /><ul><div>
|
|
998
|
-
<b>Type:</b
|
|
1091
|
+
<b>Type:</b><br />
|
|
1092
|
+
(entry: IntersectionObserverEntry) => void<br />
|
|
999
1093
|
<br />
|
|
1000
1094
|
<b>Description:</b> <em><br />
|
|
1001
1095
|
A callback function that is called when the observed element enters or leaves the viewport or the area defined by the <code>root</code> property. This can be used to load new list items for <code>MorphScroll</code>.<br />
|
package/cjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");const t=(e,t=!1,r)=>{let n=[];if(n=Array.isArray(e)?2===e.length?[e[1],e[0],e[1],e[0]]:[...e]:[e,e,e,e],t&&(n=[n[1],n[0],n[3],n[2]]),r){const e=[];for(let t=0;r>t;t++)e.push(n[t%4]);n=e}return n},r=({className:r,children:n,style:o,root:l,threshold:s,rootMargin:i,visibleContent:c=!1,onIntersection:a})=>{const[u,d]=e.useState(!1),m=e.useRef(null),p=e.useMemo((()=>{if(!i)return"";const e=t(i);return`${e[0]}px ${e[1]}px ${e[2]}px ${e[3]}px`}),[i]),f=e.useCallback((([e])=>{d(e.isIntersecting),a&&a({time:e.time,rootBounds:e.rootBounds,boundingClientRect:e.boundingClientRect,intersectionRect:e.intersectionRect,isIntersecting:e.isIntersecting,intersectionRatio:e.intersectionRatio,target:e.target})}),[a]);return e.useEffect((()=>{const e=new IntersectionObserver(f,{root:l,threshold:s,rootMargin:p});return m.current&&e.observe(m.current),()=>{e.disconnect()}}),[f,l,s,p]),e.createElement("div",{"intersection-tracker":"",className:r,ref:m,style:o},c||u?n:null)};r.displayName="IntersectionTracker";const n=({className:t,children:r,style:n,measure:o="inner",onResize:l})=>{const s=e.useRef(null);e.useEffect((()=>{const e=s.current;if(!e)return;const t=new ResizeObserver((e=>{for(const t of e)l&&l(t.contentRect)}));return t.observe(e),()=>{t.unobserve(e),t.disconnect()}}),[o,l]);const i={width:"max-content",height:"max-content"},c={inner:Object.assign({},i),outer:Object.assign({},{width:"100%",height:"100%"}),all:Object.assign({minWidth:"100%",minHeight:"100%"},i)};return e.createElement("div",{"resize-tracker":"",className:t,ref:s,style:Object.assign(Object.assign({willChange:"width, height"},c[o]),n)},r)};function o(t,r){const n=e.useMemo((()=>function(e,t){let r=null,n=null;const o=(...o)=>{"requestFrame"===t?(null!==n&&cancelAnimationFrame(n),n=requestAnimationFrame((()=>{e(...o),n=null}))):(null!==r&&clearTimeout(r),r=setTimeout((()=>{e(...o),r=null}),t))};return o.cancel=()=>{null!==r&&(clearTimeout(r),r=null),null!==n&&(cancelAnimationFrame(n),n=null)},o}(t,r)),[r,t]);return e.useEffect((()=>()=>{n.cancel()}),[n]),n}n.displayName="ResizeTracker";let l=1;const s=({type:t,direction:r,progressReverse:n,size:o,progressTrigger:l,scrollBarOnHover:s,scrollBarEvent:i,thumbSize:c,thumbSpace:a,objLengthPerSize:u,sliderCheckLocal:d,duration:m})=>{const p="sliderMenu"!==t?{onMouseDown:i,onTouchStart:i}:{},f=e.useMemo((()=>{if("scroll"===t||!r)return;const n=["hybrid","y"].includes(r)?"y":"x",s="x"===n?o[0]:o[1];return Array.from({length:u},((r,o)=>e.createElement("div",{key:o,className:"ms-slider-element",style:Object.assign({},"sliderMenu"===t&&{cursor:"pointer"}),onClick:"sliderMenu"===t?()=>{i(s*o,n,m,d)}:void 0},Array.isArray(null==l?void 0:l.progressElement)?l.progressElement[o]:null==l?void 0:l.progressElement)))}),[u,r,o,t,i,null==l?void 0:l.progressElement]);return e.createElement(e.Fragment,null,"scroll"===t?e.createElement("div",{className:"ms-bar",style:Object.assign(Object.assign(Object.assign({position:"absolute",width:"fit-content"},"x"===r?Object.assign({transformOrigin:"left top",height:o[0]+"px"},n?{top:0,transform:"rotate(-90deg) translateX(-100%)"}:{transform:"rotate(-90deg)"}):Object.assign({top:0,height:"100%"},n?{left:0}:{right:0})),0!=!(null==l?void 0:l.progressElement)&&{pointerEvents:"none"}),s&&{opacity:0,transition:"opacity 0.1s ease-in-out"})},e.createElement("div",Object.assign({className:"ms-thumb","data-direction":["hybrid","y"].includes(r)?"y":r},p,{style:Object.assign(Object.assign({height:c+"px",willChange:"transform, height",transform:`translateY(${a}px)`},(null==l?void 0:l.progressElement)&&{cursor:"grab"}),{transition:"height 0.05s ease-in-out"})}),null==l?void 0:l.progressElement)):u>1&&(null==l?void 0:l.progressElement)&&e.createElement("div",Object.assign({className:"ms-slider","data-direction":["hybrid","y"].includes(r)?"y":r},p,{style:Object.assign(Object.assign(Object.assign({position:"absolute",display:"flex"},"slider"===t&&{cursor:"grab"}),s&&{opacity:0,transition:"opacity 0.1s ease-in-out"}),"x"===r?Object.assign({transformOrigin:"left top",left:"50%",transform:"translateX(-50%)"},n?{top:0}:{bottom:0}):Object.assign({flexDirection:"column",top:"50%",transform:"translateY(-50%)"},n?{left:0}:{right:0}))}),f))};s.displayName="ScrollBar";var i=e.memo(s);const c=({edgeGradient:t,visibility:r,edgeType:n})=>{if(!t)return null;const o=Object.assign(Object.assign(Object.assign(Object.assign({position:"absolute",pointerEvents:"none",transition:"opacity 0.1s ease-in-out"},t.color&&{background:t.color&&`linear-gradient(${"right"===n||"left"===n?"90deg, ":""}${t.color}, transparent)`}),"right"===n||"left"===n?{height:"100%",width:t.size+"px",top:0}:{width:"100%",height:t.size+"px",left:0}),n?{[n]:0}:{}),"right"===n?{transform:"scaleX(-1)"}:"bottom"===n?{transform:"scaleY(-1)"}:{});return e.createElement("div",{className:"ms-edge"+(n?" "+n:""),style:Object.assign(Object.assign({},o),{opacity:r?1:0})})};c.displayName="Edge";var a=e.memo(c);const u=({activity:t,arrows:r,arrowType:n,handleArrow:o,size:l})=>{const s=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({position:"absolute",display:"flex",justifyContent:"center",alignItems:"center",cursor:"pointer",width:r.size+"px"},n?{[n]:0}:{}),"top"===n&&{transform:"rotate(-90deg) translateX(-100%)",transformOrigin:"left top"}),"bottom"===n&&{transform:"rotate(90deg) translateX(-100%)",transformOrigin:"left bottom"}),"left"===n&&{transform:"scaleX(-1)"}),["top","bottom"].includes(n)?{height:l+"px"}:{height:"100%",top:0});return e.createElement("div",{className:`ms-arrow-box ${n}${t?" active":""}`,style:Object.assign({},s),onClick:()=>o(n)},r.element)};u.displayName="Arrow";var d=e.memo(u);function m(e,t){return e>t?Math.floor(e/t):1}function p(e,t=0,r=1/0){return Math.max(t,Math.min(Math.round(e),r))}const f=(e,t,r)=>{if(!t)return;const n=t.querySelectorAll("."+("scroll"===e?"ms-thumb":"ms-slider"));n.length>0&&(r.current=n)},h=e=>e?"start"===e?"flex-start":"center"===e?"center":"flex-end":void 0;function g(e,t,r=0,n=0){return o=>{var l,s,i,c;const a={width:(null!==(l=o.width)&&void 0!==l?l:0)-r,height:(null!==(s=o.height)&&void 0!==s?s:0)-n};(null===(i=e.current)||void 0===i?void 0:i.width)===a.width&&(null===(c=e.current)||void 0===c?void 0:c.height)===a.height||(e.current=a,t())}}function v(t){const r=[],n=t=>{if(null===t||"number"==typeof t||"boolean"==typeof t||"bigint"==typeof t)r.push(t+"");else if("string"==typeof t)r.push(t);else if("function"==typeof t)r.push("<function>");else if(e.isValidElement(t))r.push("<react-node>");else if(Array.isArray(t))t.forEach(n);else if("object"==typeof t){const e=Object.entries(t).sort((([e],[t])=>e.localeCompare(t)));for(const[,t]of e)n(t)}else void 0===t&&r.push("<undefined>")};return n(t),r.join("/")}function y(e){var t,r,n;const o={x:"touches"in e.mouseEvent?e.mouseEvent.touches[0].clientX:e.mouseEvent.clientX,y:"touches"in e.mouseEvent?e.mouseEvent.touches[0].clientY:e.mouseEvent.clientY,leftover:null!==(r=null===(t=e.prevCoordsRef.current)||void 0===t?void 0:t.leftover)&&void 0!==r?r:0},l=null!==(n=e.prevCoordsRef.current)&&void 0!==n?n:o,s={x:o.x-l.x,y:o.y-l.y};e.prevCoordsRef.current=o;const i=t=>{if(!e.scrollElementRef||!e.objectsWrapperRef)return;let r=0;const n="x"===t?"movementX"in e.mouseEvent?e.mouseEvent.movementX:s.x:"movementY"in e.mouseEvent?e.mouseEvent.movementY:s.y,o=e.scrollElementRef;if("thumb"===e.clicked){const s=e.objectsWrapperRef,i=getComputedStyle(s),c="x"===t?o.clientWidth:o.clientHeight,a="x"===t?s.clientWidth+parseFloat(i.marginLeft)+parseFloat(i.marginRight):s.clientHeight+parseFloat(i.marginTop)+parseFloat(i.marginBottom),u=c-e.thumbSize,d=a-c;if(0>=u||0>=d)return;const m=n*(d/u)+l.leftover,p=Math.trunc(m),f=m-p;e.prevCoordsRef.current.leftover=f,r=p}else r=-n;"x"===t?(o.scrollLeft+=r,e.scrollStateRef.targetScrollX=o.scrollLeft):(o.scrollTop+=r,e.scrollStateRef.targetScrollY=o.scrollTop)},c=t=>{const r=e.objectsWrapperRef;if(!r)return;const n="slider"===e.type&&"wrapp"===e.clicked?-1:1,o=s[t]*n,l="x"===t?e.sizeLocal[0]:e.sizeLocal[1],i="x"===t?r.offsetWidth:r.offsetHeight,c="x"===t?e.scrollElementRef.scrollLeft:e.scrollElementRef.scrollTop;e.numForSliderRef.current+=Math.abs(o),e.numForSliderRef.current>6&&!e.isScrollingRef.current&&(o>0&&i>c+l?e.smoothScroll(c+l,t,e.duration):0>o&&c>0&&e.smoothScroll(c-l,t,e.duration),e.numForSliderRef.current=0)},a=t=>{"thumb"===e.clicked?i(t):"wrapp"===e.clicked?"slider"===e.type?c(t):i(t):"slider"===e.clicked&&c(t)};"hybrid"===e.direction?"wrapp"===e.clicked?(a("x"),a("y")):e.axisFromAtr&&a(e.axisFromAtr):a(e.direction||"y")}function b(e){if(e.controller.abort(),document.body.style.removeProperty("cursor"),["thumb","slider"].includes(e.clicked)&&e.mouseOnEl(e.scrollBar),"wrapp"===e.clicked&&e.mouseOnEl(e.objectsWrapperRef),e.clickedObject.current="none",e.scrollBarOnHover){let t=e.mouseEvent.target,r=!1;for(;t&&t!==document.body;){if(t===e.scrollContentRef){r=!0;break}t=t.parentNode}r||e.mouseOnRefHandle(e.mouseEvent)}e.prevCoordsRef.current=null,e.triggerUpdate()}const x=e=>{e&&("grab"===e.style.cursor?(e.style.cursor="grabbing",e.classList.add("active")):"grabbing"===e.style.cursor&&(e.style.cursor="grab",e.classList.remove("active")))},E="wrap-id",j=new Map,O=(e,t,r)=>{w(e);const n=setTimeout((()=>{t(),j.delete(e)}),r);j.set(e,n)},w=e=>{const t=j.get(e);t&&(clearTimeout(t),j.delete(e))},R=({type:r="scroll",className:s,size:c,objectsSize:u,direction:w="y",gap:R,wrapperMargin:S,wrapperMinSize:M,progressReverse:k=!1,progressTrigger:T={wheel:!0},scrollBarOnHover:z=!1,suspending:A=!1,fallback:C,scrollPosition:L,edgeGradient:F,children:N,onScrollValue:I,elementsAlign:$,elementsDirection:W="row",wrapperAlign:X,isScrolling:B,render:H,emptyElements:Y,crossCount:q})=>{var P,D,V,_,K,G,U;const J=o((()=>{Mt()}),40),Q=o((()=>{gt()}),34),Z=function(){const t=e.useRef(null);return null===t.current&&(t.current=""+l++),t.current}();if(!c)throw Error(`Prop "size" is not provided\nMorphScroll〈♦${Z}〉`);Object.keys(T).length;const[ee,te]=e.useState(0),re=()=>{te((e=>"number"==typeof e&&1e3>e?e+1:0))},ne=e.useRef(null),oe=e.useRef(null),le=e.useRef(null),se=e.useRef(null),ie=e.useRef([]),ce=e.useRef(null),ae=e.useRef("none"),ue=e.useRef({loaded:[],empty:[]}),de=e.useRef({targetScrollY:0,targetScrollX:0,animating:!1,animationFrameId:0}),me=e.useRef(!1),pe=e.useRef(0),fe=e.useRef(null);function he(){return e.useRef({width:0,height:0})}const ge=he(),ve=he(),ye=he(),[be,xe,Ee,je,Oe,we,Re,Se]=function(...e){return e.map(v)}(null==L?void 0:L.value,H,c,u,Y,M,X,R),Me=e.useMemo((()=>{var e,t;return{value:"number"==typeof(null==L?void 0:L.value)||"string"==typeof(null==L?void 0:L.value)?[L.value,L.value]:null!==(e=null==L?void 0:L.value)&&void 0!==e?e:[null],duration:null!==(t=null==L?void 0:L.duration)&&void 0!==t?t:200}}),[be,null==L?void 0:L.duration]),ke={color:null,size:40},Te=e.useMemo((()=>"object"==typeof F?Object.assign(Object.assign({},ke),F):ke),[F]),ze=e.useMemo((()=>Object.assign(Object.assign({},ke),"object"==typeof T.arrows?T.arrows:{})),[T.arrows]),Ae=e.useCallback((t=>{if(null==t)return[];if(e.isValidElement(t)){const r=t;return r.type===e.Fragment?e.Children.toArray(r.props.children).flatMap(Ae):[r]}return[t]}),[]),Ce=e.useMemo((()=>e.Children.toArray(N).flatMap(Ae).map((t=>e.isValidElement(t)&&t.key?t.key+"":null)).filter((e=>null!==e)).filter((e=>{var t;return"clear"!==(null==Y?void 0:Y.mode)||!(null===(t=ue.current.empty)||void 0===t?void 0:t.includes(e))}))),[N,Oe,null===(P=ue.current.empty)||void 0===P?void 0:P.join()]),[Le,Fe,Ne,Ie]=S?t(S):[0,0,0,0],$e=Le+Ne,We=Ie+Fe,[Xe,Be]=e.useMemo((()=>{var e,t;return"number"==typeof R?[R,R]:Array.isArray(R)?[null!==(e=R[1])&&void 0!==e?e:0,null!==(t=R[0])&&void 0!==t?t:0]:[0,0]}),[R]),He=e.useMemo((()=>t((null==H?void 0:H.rootMargin)||0,"x"===w)),[xe,w]),[Ye,qe]=He?[He[2],He[0]]:[0,0],Pe=e.useMemo((()=>{const[e,t]=Array.isArray(c)?c:"number"==typeof c?[c,c]:[ge.current.width,ge.current.height];if(!T.arrows||!ze.size)return[e,t,e,t];const r=2*ze.size;let n=e,o=t;return"x"===w?n=e-r:"y"===w?o=t-r:"hybrid"===w&&(n=e-r,o=t-r),[n,o,e,t]}),[Ee,ze.size,ge.current]),De="x"===w?Pe[0]:Pe[1],Ve=e.useMemo((()=>u?Array.isArray(u)?u:t(u,!0,2):[null,null]),[je]),_e=e.useMemo((()=>{const e=(e,t)=>"number"==typeof e?e:"firstChild"===e?t:0;return[e(Ve[0]&&"none"!==Ve[0]&&"size"!==Ve[0]?Ve[0]:"y"===w&&"none"!==Ve[0]||"size"===Ve[0]?Pe[0]:0,ye.current.width),e(Ve[1]&&"none"!==Ve[1]&&"size"!==Ve[1]?Ve[1]:"x"===w&&"none"!==Ve[1]||"size"===Ve[1]?Pe[1]:0,ye.current.height)]}),[je,Ee,ye.current,Pe.join()]),Ke=e.useMemo((()=>{const e="x"===w,t="row"===W,r="column"===W,n=e?Pe[1]:Pe[0],o=e?_e[1]+Be:_e[0]+Xe,l="hybrid"===w?o*(Ce.length+1)-o:n,s=Math.floor(l/o)||1,i=q&&s>=q?"hybrid"===w?Math.ceil(s/q):q:s,c=i>1&&i<Ce.length?Math.ceil(Ce.length/i):i>Ce.length?1:Ce.length,a=q&&q<Ce.length,u=e=>Number.isFinite(e)&&e>0?e:1;if("hybrid"===w){const e=a?t?q:i:t?Ce.length:1,n=a?r?q:i:r?Ce.length:1;return[u(e),u(n)]}return[u(i),u(c)]}),[Ce.length,w,_e.join(),Pe.join(),Xe,We,$e,q]),Ge=e.useMemo((()=>{const e=Ke[0]?Ke[0]*Be-Be:0,t="x"===w?Ke[1]:Ke[0];return _e[0]?(_e[0]+Be)*t-Be:(null==H?void 0:H.type)?ye.current.width+e:ve.current.width}),[_e[0],Ke.join(),Be,ve.current.width,ye.current,xe]),Ue=e.useMemo((()=>{const e=1>Ke[1]?1:Ke[0]*Xe-Xe;return _e[1]?"x"===w?(_e[1]+Xe)*Ke[0]-Xe:(_e[1]+Xe)*Ke[1]-Xe:(null==H?void 0:H.type)?ye.current.height+e:ve.current.height}),[_e[1],Ke.join(),Xe,ve.current.height,ye.current,xe]),Je=e.useMemo((()=>Ue+$e),[Ue,$e]),Qe=e.useMemo((()=>Ge+We),[Ge,We]),Ze="x"===w?Qe:Je,et="x"===w?(null===(D=le.current)||void 0===D?void 0:D.scrollLeft)||0:(null===(V=le.current)||void 0===V?void 0:V.scrollTop)||0,tt=et>1&&!0,rt=Ze>Math.round(et+De);let nt=!1,ot=!1;"hybrid"===w&&(nt=((null===(_=le.current)||void 0===_?void 0:_.scrollLeft)||0)>1&&!0,ot=Math.round(((null===(K=le.current)||void 0===K?void 0:K.scrollLeft)||0)+Pe[0])<Qe);const lt=e.useMemo((()=>{if(!T.progressElement||!Ze)return 0;const e=Math.round(De/Ze*De);return!Number.isFinite(e)||0>e?0:e}),[De,Ze,T.progressElement]),st=e.useMemo((()=>{if(!T.progressElement)return 0;const e=Math.round(Pe[0]/Qe*Pe[0]);return!Number.isFinite(e)||0>e?0:e}),[Pe[0],Qe,T.progressElement]),it=e.useMemo((()=>De?Ze-De:Ze),[Ze,De]),ct=e.useMemo((()=>Pe[0]?Qe-Pe[0]:Qe),[Qe,Pe[0]]),at=e.useCallback((()=>{if(!(null==H?void 0:H.type)||1>=Ke[0])return[];const e=Array.from({length:Ce.length},((e,t)=>t)),t=Array.from({length:Ke[0]},(()=>[])),r="x"===w&&"column"===W||"x"!==w&&"row"===W;return e.forEach((e=>{const n=r?e%Ke[0]:Math.floor(e/Ke[1]);t[n]&&t[n].push(e)})),t}),[Ce.length,Ke.join(),xe,W,w]),ut=e.useMemo((()=>{if(!(null==H?void 0:H.type))return[{elementTop:0,elementBottom:0,left:0,right:0}];let e=[],t=0;if($){const r=Array.from({length:Ce.length},((e,t)=>t)),n=Math.abs(Math.floor(Ce.length/Ke[0])*Ke[0]-Ce.length);e=n?r.slice(-n):[],"center"===$?t=(_e[0]+Be)*(Ke[0]-n)/2:"end"===$&&(t=(_e[0]+Be)*(Ke[0]-n))}return Ce.map(((r,n)=>{const o=function(e,t){for(let r=0;r<t.length;r++){const n=t[r].indexOf(e);if(-1!==n)return["x"===w?n:r,["hybrid","y"].includes(w)?n:r]}return[0,0]}(n,at()),l=e.length>0&&e.includes(n)?t:0,s=function(e){const t="x"===w?l:0;return e>0?t+(_e[1]+Xe)*e:t}(Ke[0]>1||["hybrid","x"].includes(w)?o[1]:n),i=_e[1]?s+_e[1]:s,c=function(e){const t="x"===w?0:l;return e>0?t+(_e[0]+Be)*e:t}(1===Ke[0]&&"x"===w?n:o[0]);return{elementTop:s,elementBottom:i,left:c,right:c+_e[0]}}))}),[N,_e.join(),R,xe,Ke[0],W]),dt=e.useMemo((()=>(null==Pe?void 0:Pe.length)&&X?function(e,t,r,n){const[o,l="start"]="string"==typeof e?[e,e]:e,s={display:"flex"};return t[0]>r&&(s.justifyContent=h(o)),t[1]>n&&(s.alignItems=h(l)),s}(X,Pe,Qe,Je):{}),[X,Pe.join(),Je,Qe]),mt=e.useMemo((()=>[m(Qe,Pe[0]),m(Je,Pe[1])]),[Qe,Je,Pe.join()]),pt=e.useMemo((()=>"x"===w?mt[0]:mt[1]),[w,mt[0],mt[1]]),ft=e.useCallback((e=>{if(!z)return;const t=()=>((e,t,r,n)=>{e&&e.querySelectorAll(".ms-bar").forEach(((e,t)=>{const o=e;["mouseleave","mouseup","touchend"].includes(r.type)?(o.style.opacity="0",o.classList.remove("hover"),o.classList.add("leave"),n(`mouseOnRef${t}-anim`,(()=>o.classList.remove("leave")),200)):(o.style.opacity="1",o.classList.add("hover"))}))})(oe.current,0,e,O);"mouseleave"===e.type?!["thumb","slider","wrapp"].includes(ae.current)&&t():t()}),[z,r,ae.current,oe.current]),ht=e.useCallback((e=>{le.current&&(({arrowType:e,scrollElement:t,wrapSize:r,scrollSize:n,smoothScroll:o,duration:l})=>{const s=r[0],i=r[1],c=t.scrollTop,a=t.scrollLeft,u=["top","bottom"].includes(e)?i:s,d=(e,t)=>o(p(e,0,u),t,l);"top"===e&&c>0?d(c-n[1],"y"):"left"===e&&a>0&&d(a-n[0],"x"),"bottom"===e&&c+n[1]!==i?d(c+n[1],"y"):"right"===e&&a+n[0]!==s&&d(a+n[0],"x")})({arrowType:e,scrollElement:le.current,wrapSize:[Qe,Je],scrollSize:Pe,smoothScroll:Ot,duration:Me.duration})}),[le.current,Pe.join(),Qe,Je,Me.duration]),gt=e.useCallback((()=>{f(r,ne.current,ie);const e=le.current;oe.current&&e&&0!==ie.current.length&&((e,t,r,n)=>{!function(){var o,l,s,i;const c=null!==(l=null===(o=t[0])||void 0===o?void 0:o.querySelectorAll(".ms-slider-element"))&&void 0!==l?l:[],a=null!==(i=null===(s=t[1])||void 0===s?void 0:s.querySelectorAll(".ms-slider-element"))&&void 0!==i?i:[];function u(e,t,r,n){const o="x"===n?r.scrollLeft:r.scrollTop;e.forEach(((e,r)=>{const l="x"===n?t[0]:t[1];o>=l*r&&l*(r+1)>o?e.classList.add("active"):e.classList.remove("active")}))}c.length>0&&u(c,r,e,n),a.length>0&&u(a,r,e,"x")}()})(e,ie.current,Pe,w)}),[Pe.join(),w,le,oe,ie,r]),vt=e.useCallback((()=>{const e=le.current;e&&(null==I||I(e.scrollLeft,e.scrollTop),me.current=!0,null==B||B(!0),O("handleScroll-anim",(()=>{me.current=!1,null==B||B(!1),(null==H?void 0:H.type)?re():J()}),200),"slider"===r&&Q(),(null==H?void 0:H.type)||J(),re())}),[w,I,B,xe,r,Q]),yt=p(et/it*(De-lt),0,De-lt),bt=p(((null===(G=le.current)||void 0===G?void 0:G.scrollLeft)||0)/ct*(Pe[0]-Pe[0]/Qe*Pe[0]),0,Pe[0]-st),xt=o(g(ge,re),40),Et=o(g(ve,re,We,$e),40),jt=o(g(ye,re),40),Ot=e.useCallback(((e,t,r,n)=>{const o=le.current;return o?function(e,t,r,n,o){let l;if(!t&&!n)return null;const s=performance.now(),i=t.scrollTop,c=t.scrollLeft,a=u=>{const d=Math.min((u-s)/r,1);"y"===e?t.scrollTop=i+(n-i)*d:"x"===e&&(t.scrollLeft=c+(n-c)*d),1>d?l=requestAnimationFrame(a):null==o||o()};return l=requestAnimationFrame(a),()=>cancelAnimationFrame(l)}(t,o,r,e,n):null}),[le]),wt=e.useCallback(((e,t="mousedown",n)=>{const o=e||("scroll"===r?"thumb":"slider");if("wrapp"===e&&!T.content||["thumb","slider"].includes(o)&&!T.progressElement)return;f(r,ne.current,ie);let l=null;n&&(l=n.getAttribute("data-direction")),function(e){const t=new AbortController,{signal:r}=t;e.clickedObject.current=e.clicked,e.triggerUpdate(),"mousedown"===e.eventType?(["thumb","slider"].includes(e.clicked)&&e.mouseOnEl(e.scrollBar),"wrapp"===e.clicked&&e.mouseOnEl(e.objectsWrapperRef),document.addEventListener("mousemove",(t=>y(Object.assign(Object.assign({},e),{mouseEvent:t}))),{signal:r}),document.addEventListener("mouseup",(r=>b(Object.assign(Object.assign({},e),{mouseEvent:r,controller:t}))),{signal:r})):"touchstart"===e.eventType&&(document.addEventListener("touchmove",(t=>{t.preventDefault(),y(Object.assign(Object.assign({},e),{mouseEvent:t}))}),{signal:r,passive:!1}),document.addEventListener("touchend",(r=>b(Object.assign(Object.assign({},e),{mouseEvent:r,controller:t}))),{signal:r})),document.body.style.cursor="grabbing"}({eventType:t,scrollElementRef:le.current,objectsWrapperRef:se.current,scrollBar:n||null,clickedObject:ae,scrollContentRef:oe.current,scrollStateRef:de.current,type:r,scrollBarOnHover:z,mouseOnEl:x,mouseOnRefHandle:ft,triggerUpdate:re,direction:w,smoothScroll:Ot,sizeLocal:[Pe[0],Pe[1]],clicked:o,numForSliderRef:pe,isScrollingRef:me,prevCoordsRef:fe,thumbSize:"x"===l?st:lt,axisFromAtr:l,duration:Me.duration})}),[r,T.content,T.progressElement,Pe.join(),lt,st,Me.duration]),Rt=e.useCallback((e=>{wt(null,e.type,e.target)}),[wt]),St=e.useCallback((()=>{wt("wrapp")}),[wt]),Mt=e.useCallback((()=>{ne.current&&((e,t,r,n)=>{const{allIds:o,emptyKeysRaw:l}=(()=>{const t=[],r=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:e=>e instanceof Element&&e.hasAttribute(E)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});let o=n.nextNode();for(;o;){const e=o,l=e.getAttribute(E);l&&(t.push(l),0===e.children.length&&r.push(l)),o=n.nextNode()}return{allIds:t,emptyKeysRaw:r}})(),s=new Set(t.current.loaded);o.forEach((e=>s.add(e)));let i=null;if(t.current.empty){const e=new Set(t.current.empty);l.forEach((t=>e.add(t))),i=Array.from(e)}t.current={loaded:"lazy"===n?Array.from(s):o.map((e=>e)),empty:i},r()})(ne.current,ue,re,null==H?void 0:H.type)}),[xe]),kt=e.useCallback((e=>{(null==Y?void 0:Y.clickTrigger)&&((e,t,r,n)=>{e.target.closest(r.selector)&&t("emptyKeys-anim",(()=>{n()}),r.delay||0)})(e,O,Y.clickTrigger,Mt)}),[Oe]),Tt=e.useCallback(((e,t,r)=>{if(ce.current){if(ce.current!==Ce[0])return void(ce.current=Ce[0])}else ce.current=Ce[0];const n=Ot(t,e,Me.duration);n&&r.push(n)}),[Ce[0],Me.duration]),zt=e.useMemo((()=>{const e=Object.assign(Object.assign(Object.assign(Object.assign({margin:S?`${Le}px ${Fe}px ${Ne}px ${Ie}px`:"",height:Ve[1]&&"none"!==Ve[1]?Ue+"px":"fit-content",width:Ve[0]&&"none"!==Ve[0]?Ge+"px":"fit-content"},T.content&&{cursor:"grab"}),R&&!(null==H?void 0:H.type)&&{gap:`${Xe}px ${Be}px`}),M&&function(e,t,r,n,o){const l=(e,t)=>"full"===e?("x"===t?r[0]:r[1])-("x"===t?n:o):e;if("hybrid"!==t&&!Array.isArray(e)){const r=l(e,t)+"px";return"x"===t?{minWidth:r}:{minHeight:r}}let s,i;return Array.isArray(e)?[s,i]=e:s=i=e,{minWidth:l(s,"x")+"px",minHeight:l(i,"y")+"px"}}(M,w,Pe,We,$e)),X&&{flexShrink:0});if(null==H?void 0:H.type)return Object.assign(Object.assign({},e),{position:"relative"});const t=Ve[1]?"wrap":void 0,r=1===Ke[0]?"y"===w?"column":"row":W;return Object.assign(Object.assign({},e),{display:"flex",flexDirection:r,flexWrap:t,justifyContent:h($)})}),[S,[Le,Fe,Ne,Ie,We,$e].join(),Ve[1],Ue,Ge,T.content,Se,[Xe,Be].join(),null==H?void 0:H.type,we,w,Pe.join(),Re,Ke[0],W,$]);e.useEffect((()=>{(Y||(null==H?void 0:H.type))&&(Y||null===ue.current.empty||(ue.current.empty=null),J())}),[Oe,null==H?void 0:H.type,xe,me.current,Ce.length]),e.useEffect((()=>(((null==H?void 0:H.type)||B)&&(B&&B(!1),re()),gt(),()=>{de.current.animationFrameId&&cancelAnimationFrame(de.current.animationFrameId),(()=>{for(const e of j.values())clearTimeout(e);j.clear()})()})),[]),e.useEffect((()=>{const e=le.current;if(!e)return;const t=T.wheel?t=>function(e,t,r,n){e.preventDefault(),r.animating||(r.targetScrollX=t.scrollLeft,r.targetScrollY=t.scrollTop),"x"===n?r.targetScrollX=p(r.targetScrollX+e.deltaY,0,t.scrollWidth-t.clientWidth+2):r.targetScrollY=p(r.targetScrollY+e.deltaY,0,t.scrollHeight-t.clientHeight+2),r.animating||(r.animating=!0,r.animationFrameId=requestAnimationFrame((function e(){let o=0;"x"===n?(t.scrollLeft+=.4*(r.targetScrollX-t.scrollLeft),o=Math.abs(t.scrollLeft-r.targetScrollX)):(t.scrollTop+=.4*(r.targetScrollY-t.scrollTop),o=Math.abs(t.scrollTop-r.targetScrollY)),o>2.5?r.animationFrameId=requestAnimationFrame(e):(r.animating=!1,null!==r.animationFrameId&&(cancelAnimationFrame(r.animationFrameId),r.animationFrameId=null))})))}(t,e,de.current,w):e=>e.preventDefault();return e.addEventListener("wheel",t,{passive:!1}),()=>{e.removeEventListener("wheel",t)}}),[w,T.wheel]),e.useEffect((()=>{if(!Me.value)return;const e=[];return("hybrid"===w?["x","y"]:[w]).forEach((t=>{const r="x"===t?0:1;"end"===Me.value[r]&&Tt(t,"x"===t?ct:it,e)})),()=>{e.forEach((e=>e()))}}),[Me.value.join(),be,it,ct,Qe,Je]),e.useEffect((()=>{if(!Me.value)return;const e=[];return("hybrid"===w?["x","y"]:[w]).forEach((t=>{const r="x"===t?0:1;"number"==typeof Me.value[r]&&Tt(t,Me.value[r],e)})),()=>{e.forEach((e=>e()))}}),[be,null==L?void 0:L.updater]);const At=e.useCallback(((t,r,n,o)=>{var l;const s=Object.assign({width:_e[0]?_e[0]+"px":void 0,height:_e[1]?_e[1]+"px":void 0},(null==H?void 0:H.type)&&Object.assign({position:"absolute",top:r+"px",left:n+"px"},!_e[0]&&1===Ke[0]&&{transform:"translateX(-50%)"})),i=A?e.createElement(e.Suspense,{fallback:C},o):o,c=(null===(l=null==Y?void 0:Y.clickTrigger)||void 0===l?void 0:l.selector)&&kt;return e.createElement("div",Object.assign({key:t},H||Y?{[E]:""+t}:{},{className:"ms-object-box",style:s,onClick:c}),i)}),[A,!!C,_e.join(),le.current,xe,Oe,Ke[0]]),Ct=e.createElement("div",{className:"ms-objects-wrapper",ref:se,onMouseDown:St,style:zt},Ce.map(((t,r)=>{var o,l,s;const i=e.Children.toArray(N).find((r=>e.isValidElement(r)&&r.key===t)),c=(null==H?void 0:H.stopLoadOnScroll)&&me.current&&!ue.current.loaded.includes(""+t)?C:(null===(o=ue.current.empty)||void 0===o?void 0:o.includes(t))?"object"==typeof(null==Y?void 0:Y.mode)?Y.mode.fallback:C:i,a="number"==typeof Ve[0]&&"number"==typeof Ve[1]||"firstChild"!==Ve[0]&&"firstChild"!==Ve[1]||0!==r?c:e.createElement(n,{onResize:jt},c);if(!(null==H?void 0:H.type))return At(t,0,0,a);{const{elementTop:e,elementBottom:n,left:o,right:i}=ut[r],c="x"===w?Ye:qe,u=De+c>("x"===w?o:e)-et&&("x"===w?i:n)-et>0-c,d="hybrid"!==w||Pe[0]+Ye>o-((null===(l=le.current)||void 0===l?void 0:l.scrollLeft)||0)&&i-((null===(s=le.current)||void 0===s?void 0:s.scrollLeft)||0)>0-Ye;if(u&&d)return At(t,e,o,a)}}))),Lt=[{positionType:"x"===w?"left":"top",visibility:tt},{positionType:"x"===w?"right":"bottom",visibility:rt},..."hybrid"===w?[{positionType:"left",visibility:nt},{positionType:"right",visibility:ot}]:[]],Ft=e.createElement("div",{"morph-scroll":`〈♦${Z}〉`,className:s,ref:ne,style:{width:Pe[2]+"px",height:Pe[3]+"px"}},e.createElement("div",{className:"ms-content",ref:oe,onMouseEnter:ft,onMouseLeave:ft,onTouchStart:ft,onTouchEnd:ft,style:Object.assign({position:"relative",width:Pe[0]+"px",height:Pe[1]+"px"},T.arrows&&ze.size&&("x"===w?{left:ze.size+"px"}:"y"===w?{top:ze.size+"px"}:{top:ze.size+"px",left:ze.size+"px"}))},e.createElement("div",{className:"ms-element",ref:le,onScroll:vt,style:Object.assign(Object.assign(Object.assign({width:"100%",height:"100%"},dt),{overflow:null!==(U={x:Qe>Pe[0]?"scroll hidden":"hidden",y:Je>Pe[1]?"hidden scroll":"hidden",hybrid:`${Qe>Pe[0]?"scroll":"hidden"} ${Je>Pe[1]?"scroll":"hidden"}`,hide:"hidden"}[T.wheel||T.content?w:"hide"])&&void 0!==U?U:"hidden"}),"scroll"!==r||"boolean"!=typeof T.progressElement||!1===T.progressElement?{scrollbarWidth:"none"}:{})},_e[0]&&_e[1]?Ct:e.createElement(n,{onResize:Et,style:Object.assign({},dt)},Ct)),F&&Lt.map((({positionType:t,visibility:r})=>e.createElement(a,{key:"edge-"+t,edgeGradient:Te,visibility:r,edgeType:t}))),T.progressElement&&!0!==T.progressElement&&[{shouldRender:Ze>lt,direction:w,thumbSize:lt,thumbSpace:yt,objLengthPerSize:pt,progressReverseIndex:0},{shouldRender:"hybrid"===w&&Qe>st,direction:"x",thumbSize:st,thumbSpace:bt,objLengthPerSize:mt[0],progressReverseIndex:1}].filter((({shouldRender:e})=>e)).map((t=>e.createElement(i,{key:t.direction,type:r,direction:t.direction,progressReverse:"boolean"==typeof k?k:k[t.progressReverseIndex],size:Pe,progressTrigger:T,scrollBarOnHover:z,scrollBarEvent:"sliderMenu"===r?Ot:Rt,thumbSize:t.thumbSize,thumbSpace:t.thumbSpace,objLengthPerSize:t.objLengthPerSize,sliderCheckLocal:gt,duration:Me.duration})))),T.arrows&&Lt.map((({positionType:t,visibility:r})=>e.createElement(d,{key:"arrow-"+t,activity:r,arrows:ze,arrowType:t,handleArrow:ht,size:"hybrid"===w?Pe[0]+2*ze.size:Pe[0]}))));return"auto"===c?e.createElement(n,{measure:"outer",onResize:xt},Ft):Ft};R.displayName="MorphScroll";const S={MorphScroll:R,ResizeTracker:n,IntersectionTracker:r};exports.IntersectionTracker=r,exports.MorphScroll=R,exports.ResizeTracker=n,exports.default=S;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");const t=(e,t=!1,r)=>{let n=[];if(n=Array.isArray(e)?2===e.length?[e[1],e[0],e[1],e[0]]:[...e]:[e,e,e,e],t&&(n=[n[1],n[0],n[3],n[2]]),r){const e=[];for(let t=0;r>t;t++)e.push(n[t%4]);n=e}return n},r=({className:r,children:n,style:o,root:l,threshold:s,rootMargin:i,visibleContent:c=!1,onIntersection:a})=>{const[u,d]=e.useState(!1),m=e.useRef(null),p=e.useMemo((()=>{if(!i)return"";const e=t(i);return`${e[0]}px ${e[1]}px ${e[2]}px ${e[3]}px`}),[i]),h=e.useCallback((([e])=>{d(e.isIntersecting),a&&a({time:e.time,rootBounds:e.rootBounds,boundingClientRect:e.boundingClientRect,intersectionRect:e.intersectionRect,isIntersecting:e.isIntersecting,intersectionRatio:e.intersectionRatio,target:e.target})}),[a]);return e.useEffect((()=>{const e=new IntersectionObserver(h,{root:l,threshold:s,rootMargin:p});return m.current&&e.observe(m.current),()=>{e.disconnect()}}),[h,l,s,p]),e.createElement("div",{"intersection-tracker":"",className:r,ref:m,style:o},c||u?n:null)};r.displayName="IntersectionTracker";const n=({className:t,children:r,style:n,measure:o="inner",onResize:l})=>{const s=e.useRef(null);e.useEffect((()=>{const e=s.current;if(!e)return;const t=new ResizeObserver((e=>{for(const t of e)l&&l(t.contentRect)}));return t.observe(e),()=>{t.unobserve(e),t.disconnect()}}),[o,l]);const i={width:"max-content",height:"max-content"},c={inner:Object.assign({},i),outer:Object.assign({},{width:"100%",height:"100%"}),all:Object.assign({minWidth:"100%",minHeight:"100%"},i)};return e.createElement("div",{"resize-tracker":"",className:t,ref:s,style:Object.assign(Object.assign({willChange:"width, height"},c[o]),n)},r)};n.displayName="ResizeTracker";let o=1;const l=({type:t,direction:r,progressReverse:n,size:o,progressTrigger:l,scrollBarOnHover:s,scrollBarEvent:i,thumbSize:c,thumbSpace:a,objLengthPerSize:u,sliderCheckLocal:d,duration:m})=>{const p="sliderMenu"!==t?{onMouseDown:i,onTouchStart:i}:{},h=e.useMemo((()=>{if("scroll"===t||!r)return;const n=["hybrid","y"].includes(r)?"y":"x",s="x"===n?o[0]:o[1];return Array.from({length:u},((r,o)=>e.createElement("div",{key:o,className:"ms-slider-element",style:Object.assign({},"sliderMenu"===t&&{cursor:"pointer"}),onClick:"sliderMenu"===t?()=>{i(s*o,n,m,d)}:void 0},Array.isArray(null==l?void 0:l.progressElement)?l.progressElement[o]:null==l?void 0:l.progressElement)))}),[u,r,o,t,i,null==l?void 0:l.progressElement,m,d]);return e.createElement(e.Fragment,null,"scroll"===t?e.createElement("div",{className:"ms-bar",style:Object.assign(Object.assign(Object.assign({position:"absolute",width:"fit-content"},"x"===r?Object.assign({transformOrigin:"left top",height:o[0]+"px",left:"50%"},n?{top:0,transform:"rotate(-90deg) translate(-100%, -50%)"}:{transform:"rotate(-90deg) translateY(-50%)"}):Object.assign({top:"50%",transform:"translateY(-50%)",height:o[1]+"px"},n?{left:0}:{right:0})),0!=!(null==l?void 0:l.progressElement)&&{pointerEvents:"none"}),s&&{opacity:0,transition:"opacity 0.1s ease-in-out"})},e.createElement("div",Object.assign({className:"ms-thumb","data-direction":["hybrid","y"].includes(r)?"y":r},p,{style:Object.assign(Object.assign({height:c+"px",willChange:"transform, height",transform:`translateY(${a}px)`},(null==l?void 0:l.progressElement)&&{cursor:"grab"}),{transition:"height 0.05s ease-in-out"})}),null==l?void 0:l.progressElement)):u>1&&(null==l?void 0:l.progressElement)&&e.createElement("div",Object.assign({className:"ms-slider","data-direction":["hybrid","y"].includes(r)?"y":r},p,{style:Object.assign(Object.assign(Object.assign({position:"absolute",display:"flex"},"slider"===t&&{cursor:"grab"}),s&&{opacity:0,transition:"opacity 0.1s ease-in-out"}),"x"===r?Object.assign({transformOrigin:"left top",left:"50%",transform:"translateX(-50%)"},n?{top:0}:{bottom:0}):Object.assign({flexDirection:"column",top:"50%",transform:"translateY(-50%)"},n?{left:0}:{right:0}))}),h))};l.displayName="ScrollBar";var s=e.memo(l);const i=({edgeGradient:t,visibility:r,edgeType:n})=>{if(!t)return null;const o=Object.assign(Object.assign(Object.assign(Object.assign({position:"absolute",pointerEvents:"none",transition:"opacity 0.1s ease-in-out"},t.color&&{background:t.color&&`linear-gradient(${"right"===n||"left"===n?"90deg, ":""}${t.color}, transparent)`}),"right"===n||"left"===n?{height:"100%",width:t.size+"px",top:0}:{width:"100%",height:t.size+"px",left:0}),n?{[n]:0}:{}),"right"===n?{transform:"scaleX(-1)"}:"bottom"===n?{transform:"scaleY(-1)"}:{});return e.createElement("div",{className:"ms-edge"+(n?" "+n:""),style:Object.assign(Object.assign({},o),{opacity:r?1:0})})};i.displayName="Edge";var c=e.memo(i);const a=({activity:t,arrows:r,arrowType:n,handleArrow:o,size:l})=>{const s=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({position:"absolute",display:"flex",justifyContent:"center",alignItems:"center",cursor:"pointer",width:r.size+"px"},n?{[n]:0}:{}),"top"===n&&{transform:"rotate(-90deg) translateX(-100%)",transformOrigin:"left top"}),"bottom"===n&&{transform:"rotate(90deg) translateX(-100%)",transformOrigin:"left bottom"}),"left"===n&&{transform:"scaleX(-1)"}),["top","bottom"].includes(n)?{height:l+"px"}:{height:"100%",top:0});return e.createElement("div",{className:`ms-arrow-box ${n}${t?" active":""}`,style:Object.assign({},s),onClick:()=>o(n)},r.element)};a.displayName="Arrow";var u=e.memo(a);function d(e,t){return e>t?Math.floor(e/t):1}function m(e,t=0,r=1/0){return Math.max(t,Math.min(Math.round(e),r))}const p=(e,t,r)=>{if(!t)return;const n=t.querySelectorAll("."+("scroll"===e?"ms-thumb":"ms-slider"));n.length>0&&(r.current=n)},h=e=>e?"start"===e?"flex-start":"center"===e?"center":"flex-end":void 0;function f(e,t,r=0,n=0){return o=>{var l,s,i,c;const a={width:(null!==(l=o.width)&&void 0!==l?l:0)-r,height:(null!==(s=o.height)&&void 0!==s?s:0)-n};(null===(i=e.current)||void 0===i?void 0:i.width)===a.width&&(null===(c=e.current)||void 0===c?void 0:c.height)===a.height||(e.current=a,t())}}function g(t){const r=[],n=t=>{if(null===t||"number"==typeof t||"boolean"==typeof t||"bigint"==typeof t)r.push(t+"");else if("string"==typeof t)r.push(t);else if("function"==typeof t)r.push("<function>");else if(e.isValidElement(t))r.push("<react-node>");else if(Array.isArray(t))t.forEach(n);else if("object"==typeof t){const e=Object.entries(t).sort((([e],[t])=>e.localeCompare(t)));for(const[,t]of e)n(t)}else void 0===t&&r.push("<undefined>")};return n(t),r.join("/")}function y(e){var t,r,n;const o={x:"touches"in e.mouseEvent?e.mouseEvent.touches[0].clientX:e.mouseEvent.clientX,y:"touches"in e.mouseEvent?e.mouseEvent.touches[0].clientY:e.mouseEvent.clientY,leftover:null!==(r=null===(t=e.prevCoordsRef.current)||void 0===t?void 0:t.leftover)&&void 0!==r?r:0},l=null!==(n=e.prevCoordsRef.current)&&void 0!==n?n:o,s={x:o.x-l.x,y:o.y-l.y};e.prevCoordsRef.current=o;const i=t=>{if(!e.scrollElementRef||!e.objectsWrapperRef)return;let r=0;const n="x"===t?"movementX"in e.mouseEvent?e.mouseEvent.movementX:s.x:"movementY"in e.mouseEvent?e.mouseEvent.movementY:s.y,o=e.scrollElementRef;if("thumb"===e.clicked){const s=e.objectsWrapperRef,i=getComputedStyle(s),c="x"===t?o.clientWidth:o.clientHeight,a="x"===t?o.clientWidth-e.scrollBarEdge[0]:o.clientHeight-e.scrollBarEdge[1],u="x"===t?s.clientWidth+parseFloat(i.marginLeft)+parseFloat(i.marginRight):s.clientHeight+parseFloat(i.marginTop)+parseFloat(i.marginBottom),d=a-e.thumbSize,m=u-c;if(0>=d||0>=m)return;const p=n*(m/d)+l.leftover,h=Math.trunc(p),f=p-h;e.prevCoordsRef.current.leftover=f,r=h}else r=-n;"x"===t?(o.scrollLeft+=r,e.scrollStateRef.targetScrollX=o.scrollLeft):(o.scrollTop+=r,e.scrollStateRef.targetScrollY=o.scrollTop)},c=t=>{const r=e.objectsWrapperRef;if(!r)return;const n="slider"===e.type&&"wrapp"===e.clicked?-1:1,o=s[t]*n,l="x"===t?e.sizeLocal[0]:e.sizeLocal[1],i="x"===t?r.offsetWidth:r.offsetHeight,c="x"===t?e.scrollElementRef.scrollLeft:e.scrollElementRef.scrollTop;e.numForSliderRef.current+=Math.abs(o),e.numForSliderRef.current>6&&!e.isScrollingRef.current&&(o>0&&i>c+l?e.smoothScroll(c+l,t,e.duration):0>o&&c>0&&e.smoothScroll(c-l,t,e.duration),e.numForSliderRef.current=0)},a=t=>{"thumb"===e.clicked?i(t):"wrapp"===e.clicked?"slider"===e.type?c(t):i(t):"slider"===e.clicked&&c(t)};"hybrid"===e.direction?"wrapp"===e.clicked?(a("x"),a("y")):e.axisFromAtr&&a(e.axisFromAtr):a(e.direction||"y")}function b(e){if(e.controller.abort(),document.body.style.removeProperty("cursor"),["thumb","slider"].includes(e.clicked)&&e.mouseOnEl(e.scrollBar),"wrapp"===e.clicked&&e.mouseOnEl(e.objectsWrapperRef),e.clickedObject.current="none",e.scrollBarOnHover){let t=e.mouseEvent.target,r=!1;for(;t&&t!==document.body;){if(t===e.scrollContentRef){r=!0;break}t=t.parentNode}r||e.mouseOnRefHandle(e.mouseEvent)}e.prevCoordsRef.current=null,e.triggerUpdate()}let v=0;const x={timeout:{tasks:[],timer:null},requestFrame:{tasks:[],rafId:null}},E={timeout:{scheduleNext(){const{tasks:e}=x.timeout;if(null!==x.timeout.timer&&(clearTimeout(x.timeout.timer),x.timeout.timer=null),0===e.length)return;const t=e[0],r=performance.now(),n=Math.max(0,t.runAt-r);x.timeout.timer=window.setTimeout((()=>{const t=performance.now(),r=[];for(;e.length&&e[0].runAt<=t;)r.push(e.shift());r.forEach((e=>e.callback())),E.timeout.scheduleNext()}),n)},clearAll(){null!==x.timeout.timer&&(clearTimeout(x.timeout.timer),x.timeout.timer=null),x.timeout.tasks=[]}},requestFrame:{scheduleNext(){const{tasks:e}=x.requestFrame;if(null!==x.requestFrame.rafId)return;if(0===e.length)return;const t=()=>{x.requestFrame.rafId=null;const r=performance.now(),n=[];for(;e.length&&e[0].runAt<=r;)n.push(e.shift());n.forEach((e=>e.callback())),e.length>0&&(x.requestFrame.rafId=requestAnimationFrame(t))};x.requestFrame.rafId=requestAnimationFrame(t)},clearAll(){null!==x.requestFrame.rafId&&(cancelAnimationFrame(x.requestFrame.rafId),x.requestFrame.rafId=null),x.requestFrame.tasks=[]}}},j=(e,t,r)=>{const n="task_"+v++,o="string"==typeof t?"requestFrame":"timeout";x[o].tasks=x[o].tasks.filter((e=>e.id!==n));const l="requestFrame"===o?performance.now():performance.now()+t,s={id:n,callback:e,runAt:l};let i=x[o].tasks.length;for(;i>0&&x[o].tasks[i-1].runAt>s.runAt;)i--;return x[o].tasks.splice(i,0,s),E[o].scheduleNext(),n},w=e=>{e&&("grab"===e.style.cursor?(e.style.cursor="grabbing",e.classList.add("active")):"grabbing"===e.style.cursor&&(e.style.cursor="grab",e.classList.remove("active")))},O="wrap-id",k=({className:r,children:l,type:i="scroll",direction:a="y",scrollPosition:v,onScrollValue:x,isScrolling:k,size:S,objectsSize:R,crossCount:M,gap:A,wrapperMargin:T,wrapperMinSize:z,wrapperAlign:C,elementsAlign:F,elementsDirection:L="row",edgeGradient:N,progressTrigger:I={wheel:!0},progressReverse:q=!1,scrollBarOnHover:B=!1,scrollBarEdge:$,render:W,emptyElements:X,suspending:Y=!1,fallback:H})=>{var P,D,K,_,V,U;const G=function(){const t=e.useRef(null);return null===t.current&&(t.current=""+o++),t.current}();if(!S)throw Error(`Prop "size" is not provided\nMorphScroll〈♦${G}〉`);Object.keys(I).length;const[J,Q]=e.useState(0),Z=()=>{Q((e=>"number"==typeof e&&1e3>e?e+1:0))},ee=e.useRef(null),te=e.useRef(null),re=e.useRef(null),ne=e.useRef(null),oe=e.useRef([]),le=e.useRef(null),se=e.useRef("none"),ie=e.useRef({loaded:[],empty:[]}),ce=e.useRef({targetScrollY:0,targetScrollX:0,animating:!1,animationFrameId:0}),ae=e.useRef(!1),ue=e.useRef(0),de=e.useRef(null),me=e.useRef(!1);function pe(){return e.useRef({width:0,height:0})}const he=pe(),fe=pe(),ge=pe(),[ye,be,ve,xe,Ee,je,we,Oe,ke,Se,Re]=function(...e){return e.map(g)}(null==v?void 0:v.value,W,S,R,X,z,C,A,I,ie.current.empty,$),Me=e.useMemo((()=>{var e,t;return{value:"number"==typeof(null==v?void 0:v.value)||"string"==typeof(null==v?void 0:v.value)?[v.value,v.value]:null!==(e=null==v?void 0:v.value)&&void 0!==e?e:[null],duration:null!==(t=null==v?void 0:v.duration)&&void 0!==t?t:200}}),[ye,null==v?void 0:v.duration]),Ae={color:null,size:40},Te=e.useMemo((()=>"object"==typeof N?Object.assign(Object.assign({},Ae),N):Ae),[N]),ze=e.useMemo((()=>Object.assign(Object.assign({},Ae),"object"==typeof I.arrows?I.arrows:{})),[ke]),Ce=e.useCallback((t=>{if(null==t)return[];if(e.isValidElement(t)){const r=t;return r.type===e.Fragment?e.Children.toArray(r.props.children).flatMap(Ce):[r]}return[t]}),[]),Fe=e.useMemo((()=>e.Children.toArray(l).flatMap(Ce).map((t=>e.isValidElement(t)&&t.key?t.key+"":null)).filter((e=>null!==e)).filter((e=>{var t;return"clear"!==(null==X?void 0:X.mode)||!(null===(t=ie.current.empty)||void 0===t?void 0:t.includes(e))}))),[l,Ce,Ee,Se]),[Le,Ne,Ie,qe]=T?t(T):[0,0,0,0],Be=Le+Ie,$e=qe+Ne,[We,Xe]=e.useMemo((()=>{var e,t;return"number"==typeof A?[A,A]:Array.isArray(A)?[null!==(e=A[1])&&void 0!==e?e:0,null!==(t=A[0])&&void 0!==t?t:0]:[0,0]}),[A]),Ye=e.useMemo((()=>t((null==W?void 0:W.rootMargin)||0,"x"===a)),[be,a]),[He,Pe]=Ye?[Ye[2],Ye[0]]:[0,0],De=e.useMemo((()=>{const[e,t]=Array.isArray(S)?S:"number"==typeof S?[S,S]:[he.current.width,he.current.height];if(!I.arrows||!ze.size)return[e,t,e,t];const r=2*ze.size;let n=e,o=t;return"x"===a?n=e-r:"y"===a?o=t-r:"hybrid"===a&&(n=e-r,o=t-r),[n,o,e,t]}),[ve,ke,a,ze.size,he.current.height,he.current.width]),Ke="x"===a?De[0]:De[1],_e=e.useMemo((()=>{let e;if("number"==typeof $){const t=2*$;e=[t,t]}else e=Array.isArray($)?[$[0]?2*$[0]:0,$[1]?2*$[1]:$[0]?2*$[0]:0]:[0,0];return e}),[Re]),Ve=e.useMemo((()=>[De[0]-_e[0],De[1]-_e[1]]),[_e.join(),De[0],De[1]]),Ue="x"===a?Ve[0]:Ve[1],Ge=e.useMemo((()=>R?Array.isArray(R)?R:t(R,!0,2):[null,null]),[xe]),Je=e.useMemo((()=>{const e=(e,t)=>"number"==typeof e?e:"firstChild"===e?t:0;return[e(Ge[0]&&"none"!==Ge[0]&&"size"!==Ge[0]?Ge[0]:"y"===a&&"none"!==Ge[0]||"size"===Ge[0]?De[0]:0,ge.current.width),e(Ge[1]&&"none"!==Ge[1]&&"size"!==Ge[1]?Ge[1]:"x"===a&&"none"!==Ge[1]||"size"===Ge[1]?De[1]:0,ge.current.height)]}),[Ge.join(),a,ge.current.width,ge.current.height,De.join()]),Qe=e.useMemo((()=>{const e="x"===a,t="row"===L,r="column"===L,n=e?De[1]:De[0],o=e?Je[1]+Xe:Je[0]+We,l="hybrid"===a?o*(Fe.length+1)-o:n,s=Math.floor(l/o)||1,i=M&&s>=M?"hybrid"===a?Math.ceil(s/M):M:s,c=i>1&&i<Fe.length?Math.ceil(Fe.length/i):i>Fe.length?1:Fe.length,u=M&&M<Fe.length,d=e=>Number.isFinite(e)&&e>0?e:1;if("hybrid"===a){const e=u?t?M:i:t?Fe.length:1,n=u?r?M:i:r?Fe.length:1;return[d(e),d(n)]}return[d(i),d(c)]}),[L,Xe,We,Je.join(),Fe.length,a,De.join(),M]),Ze=e.useMemo((()=>{const e=Qe[0]?Qe[0]*Xe-Xe:0,t="x"===a?Qe[1]:Qe[0];return Je[0]?(Je[0]+Xe)*t-Xe:(null==W?void 0:W.type)?ge.current.width+e:fe.current.width}),[a,Je[0],Qe.join(),Xe,fe.current.width,ge.current.width,null==W?void 0:W.type]),et=e.useMemo((()=>{const e=1>Qe[1]?1:Qe[0]*We-We;return Je[1]?"x"===a?(Je[1]+We)*Qe[0]-We:(Je[1]+We)*Qe[1]-We:(null==W?void 0:W.type)?ge.current.height+e:fe.current.height}),[a,Je[1],Qe.join(),We,fe.current.height,ge.current.height,null==W?void 0:W.type]),tt=e.useMemo((()=>et+Be),[et,Be]),rt=e.useMemo((()=>Ze+$e),[Ze,$e]),nt="x"===a?rt:tt,ot="x"===a?(null===(P=re.current)||void 0===P?void 0:P.scrollLeft)||0:(null===(D=re.current)||void 0===D?void 0:D.scrollTop)||0,lt=ot>1&&!0,st=nt>Math.round(ot+Ke);let it=!1,ct=!1;"hybrid"===a&&(it=((null===(K=re.current)||void 0===K?void 0:K.scrollLeft)||0)>1&&!0,ct=Math.round(((null===(_=re.current)||void 0===_?void 0:_.scrollLeft)||0)+De[0])<rt);const at=e.useMemo((()=>{if(!I.progressElement||!nt)return 0;const e=Math.round(Ue/nt*Ue);return!Number.isFinite(e)||0>e?0:e}),[Ue,nt,I.progressElement]),ut=e.useMemo((()=>{if(!I.progressElement)return 0;const e=Math.round(Ve[0]/rt*Ve[0]);return!Number.isFinite(e)||0>e?0:e}),[Ve[0],rt,I.progressElement]),dt=e.useMemo((()=>Ke?nt-Ke:nt),[nt,Ke]),mt=e.useMemo((()=>De[0]?rt-De[0]:rt),[rt,De[0]]),pt=e.useCallback((()=>{if(!(null==W?void 0:W.type)||1>=Qe[0])return[];const e=Array.from({length:Fe.length},((e,t)=>t)),t=Array.from({length:Qe[0]},(()=>[])),r="x"===a&&"column"===L||"x"!==a&&"row"===L;return e.forEach((e=>{const n=r?e%Qe[0]:Math.floor(e/Qe[1]);t[n]&&t[n].push(e)})),t}),[Fe.length,Qe.join(),null==W?void 0:W.type,L,a]),ht=e.useMemo((()=>{if(!(null==W?void 0:W.type))return[{elementTop:0,elementBottom:0,left:0,right:0}];let e=[],t=0;if(F){const r=Array.from({length:Fe.length},((e,t)=>t)),n=Math.abs(Math.floor(Fe.length/Qe[0])*Qe[0]-Fe.length);e=n?r.slice(-n):[],"center"===F?t=(Je[0]+Xe)*(Qe[0]-n)/2:"end"===F&&(t=(Je[0]+Xe)*(Qe[0]-n))}return Fe.map(((r,n)=>{const o=function(e,t){for(let r=0;r<t.length;r++){const n=t[r].indexOf(e);if(-1!==n)return["x"===a?n:r,["hybrid","y"].includes(a)?n:r]}return[0,0]}(n,pt()),l=e.length>0&&e.includes(n)?t:0,s=function(e){const t="x"===a?l:0;return e>0?t+(Je[1]+We)*e:t}(Qe[0]>1||["hybrid","x"].includes(a)?o[1]:n),i=Je[1]?s+Je[1]:s,c=function(e){const t="x"===a?0:l;return e>0?t+(Je[0]+Xe)*e:t}(1===Qe[0]&&"x"===a?n:o[0]);return{elementTop:s,elementBottom:i,left:c,right:c+Je[0]}}))}),[a,Qe[0],Je.join(),We,Xe,null==W?void 0:W.type,L,F,pt,Fe.join()]),ft=e.useMemo((()=>(null==De?void 0:De.length)&&C?function(e,t,r,n){const[o,l="start"]="string"==typeof e?[e,e]:e,s={display:"flex"};return t[0]>r&&(s.justifyContent=h(o)),t[1]>n&&(s.alignItems=h(l)),s}(C,De,rt,tt):{}),[C,De.join(),tt,rt]),gt=e.useMemo((()=>[d(rt,De[0]),d(tt,De[1])]),[rt,tt,De.join()]),yt=e.useMemo((()=>"x"===a?gt[0]:gt[1]),[a,gt[0],gt[1]]),bt=e.useCallback(f(he,Z),[he.current.height,he.current.width]),vt=e.useCallback(f(fe,Z,$e,Be),[fe.current.height,fe.current.width,$e,Be]),xt=e.useCallback(f(ge,Z),[ge.current.height,ge.current.width]),Et=e.useCallback(((e,t,r,n)=>{const o=re.current;return o?function(e,t,r,n,o){let l;if(!t&&!n)return null;const s=performance.now(),i=t.scrollTop,c=t.scrollLeft,a=u=>{const d=Math.min((u-s)/r,1);"y"===e?t.scrollTop=i+(n-i)*d:"x"===e&&(t.scrollLeft=c+(n-c)*d),1>d?l=requestAnimationFrame(a):null==o||o()};return l=requestAnimationFrame(a),()=>cancelAnimationFrame(l)}(t,o,r,e,n):null}),[]),jt=e.useCallback(((e,t,r)=>{if(le.current){if(le.current!==Fe[0])return void(le.current=Fe[0])}else le.current=Fe[0];const n=Et(t,e,Me.duration);n&&r.push(n)}),[Fe[0],Me.duration,Et]),wt=e.useMemo((()=>{const e=Object.assign(Object.assign(Object.assign(Object.assign({margin:T?`${Le}px ${Ne}px ${Ie}px ${qe}px`:"",height:Ge[1]&&"none"!==Ge[1]?et+"px":"fit-content",width:Ge[0]&&"none"!==Ge[0]?Ze+"px":"fit-content"},I.content&&{cursor:"grab"}),A&&!(null==W?void 0:W.type)&&{gap:`${We}px ${Xe}px`}),z&&function(e,t,r,n,o){const l=(e,t)=>"full"===e?("x"===t?r[0]:r[1])-("x"===t?n:o):e;if("hybrid"!==t&&!Array.isArray(e)){const r=l(e,t)+"px";return"x"===t?{minWidth:r}:{minHeight:r}}let s,i;return Array.isArray(e)?[s,i]=e:s=i=e,{minWidth:l(s,"x")+"px",minHeight:l(i,"y")+"px"}}(z,a,De,$e,Be)),C&&{flexShrink:0});if(null==W?void 0:W.type)return Object.assign(Object.assign({},e),{position:"relative"});const t=Ge[1]?"wrap":void 0,r=1===Qe[0]?"y"===a?"column":"row":L;return Object.assign(Object.assign({},e),{display:"flex",flexDirection:r,flexWrap:t,justifyContent:h(F)})}),[T,we,je,[Le,Ne,Ie,qe,$e,Be,We,Xe].join(),De.join(),Oe,Ge[1],et,Ze,I.content,Oe,null==W?void 0:W.type,a,Qe[0],L,F]),Ot=e.useCallback((e=>{if(!B)return;const t=()=>((e,t,r)=>{e&&e.querySelectorAll(".ms-bar").forEach(((e,t)=>{const n=e;["mouseleave","mouseup","touchend"].includes(r.type)?(n.style.opacity="0",n.classList.remove("hover"),n.classList.add("leave"),j((()=>n.classList.remove("leave")),200)):(n.style.opacity="1",n.classList.add("hover"))}))})(te.current,0,e);"mouseleave"===e.type?!["thumb","slider","wrapp"].includes(se.current)&&t():t()}),[B]),kt=e.useCallback(((e,t="mousedown",r)=>{const n=e||("scroll"===i?"thumb":"slider");if("wrapp"===e&&!I.content||["thumb","slider"].includes(n)&&!I.progressElement)return;p(i,ee.current,oe);let o=null;r&&(o=r.getAttribute("data-direction")),function(e){const t=new AbortController,{signal:r}=t;e.clickedObject.current=e.clicked,e.triggerUpdate(),"mousedown"===e.eventType?(["thumb","slider"].includes(e.clicked)&&e.mouseOnEl(e.scrollBar),"wrapp"===e.clicked&&e.mouseOnEl(e.objectsWrapperRef),document.addEventListener("mousemove",(t=>y(Object.assign(Object.assign({},e),{mouseEvent:t}))),{signal:r}),document.addEventListener("mouseup",(r=>b(Object.assign(Object.assign({},e),{mouseEvent:r,controller:t}))),{signal:r})):"touchstart"===e.eventType&&(document.addEventListener("touchmove",(t=>{t.preventDefault(),y(Object.assign(Object.assign({},e),{mouseEvent:t}))}),{signal:r,passive:!1}),document.addEventListener("touchend",(r=>b(Object.assign(Object.assign({},e),{mouseEvent:r,controller:t}))),{signal:r})),document.body.style.cursor="grabbing"}({eventType:t,scrollElementRef:re.current,objectsWrapperRef:ne.current,scrollBar:r||null,clickedObject:se,scrollContentRef:te.current,scrollStateRef:ce.current,type:i,scrollBarOnHover:B,mouseOnEl:w,mouseOnRefHandle:Ot,triggerUpdate:Z,direction:a,smoothScroll:Et,sizeLocal:[De[0],De[1]],clicked:n,numForSliderRef:ue,isScrollingRef:ae,prevCoordsRef:de,thumbSize:"x"===o?ut:at,axisFromAtr:o,duration:Me.duration,scrollBarEdge:_e})}),[a,i,I.content,I.progressElement,De.join(),at,ut,Me.duration,Et,Ot,B,_e.join()]),St=e.useCallback((e=>{kt(null,e.type,e.target)}),[kt]),Rt=e.useCallback((()=>{kt("wrapp")}),[kt]),Mt=e.useCallback((e=>{re.current&&(({arrowType:e,scrollElement:t,wrapSize:r,scrollSize:n,smoothScroll:o,duration:l})=>{const s=r[0],i=r[1],c=t.scrollTop,a=t.scrollLeft,u=["top","bottom"].includes(e)?i:s,d=(e,t)=>o(m(e,0,u),t,l);"top"===e&&c>0?d(c-n[1],"y"):"left"===e&&a>0&&d(a-n[0],"x"),"bottom"===e&&c+n[1]!==i?d(c+n[1],"y"):"right"===e&&a+n[0]!==s&&d(a+n[0],"x")})({arrowType:e,scrollElement:re.current,wrapSize:[rt,tt],scrollSize:De,smoothScroll:Et,duration:Me.duration})}),[De.join(),rt,tt,Me.duration,Et]),At=e.useCallback((()=>{p(i,ee.current,oe);const e=re.current;te.current&&e&&0!==oe.current.length&&((e,t,r,n)=>{!function(){var o,l,s,i;const c=null!==(l=null===(o=t[0])||void 0===o?void 0:o.querySelectorAll(".ms-slider-element"))&&void 0!==l?l:[],a=null!==(i=null===(s=t[1])||void 0===s?void 0:s.querySelectorAll(".ms-slider-element"))&&void 0!==i?i:[];function u(e,t,r,n){const o="x"===n?r.scrollLeft:r.scrollTop;e.forEach(((e,r)=>{const l="x"===n?t[0]:t[1];o>=l*r&&l*(r+1)>o?e.classList.add("active"):e.classList.remove("active")}))}c.length>0&&u(c,r,e,n),a.length>0&&u(a,r,e,"x")}()})(e,oe.current,De,a)}),[De.join(),a,re,te,i]),Tt=e.useCallback((()=>{ee.current&&((e,t,r,n)=>{const{allIds:o,emptyKeysRaw:l}=(()=>{const t=[],r=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:e=>e instanceof Element&&e.hasAttribute(O)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});let o=n.nextNode();for(;o;){const e=o,l=e.getAttribute(O);l&&(t.push(l),0===e.children.length&&r.push(l)),o=n.nextNode()}return{allIds:t,emptyKeysRaw:r}})(),s=new Set(t.current.loaded);o.forEach((e=>s.add(e)));let i=null;if(t.current.empty){const e=new Set(t.current.empty);l.forEach((t=>e.add(t))),i=Array.from(e)}t.current={loaded:"lazy"===n?Array.from(s):o.map((e=>e)),empty:i},r()})(ee.current,ie,Z,null==W?void 0:W.type)}),[be]),zt=e.useCallback((e=>{(null==X?void 0:X.clickTrigger)&&((e,t,r)=>{const n=e.target;if(!n.closest(t.selector))return;const o=n.closest(`[${O}]`);o&&o.classList.add("remove"),j((()=>{o&&o.classList.remove("remove"),r()}),t.delay||0)})(e,X.clickTrigger,Tt)}),[Ee,Tt]),Ct=e.useCallback((()=>{const e=re.current;e&&(null==x||x(e.scrollLeft,e.scrollTop),ae.current=!0,null==k||k(!0),j((()=>{ae.current=!1,null==k||k(!1),Tt()}),200),"slider"===i&&j((()=>At()),33),Z())}),[x,k,i,At,Tt]),Ft=m(ot/dt*(Ue-at),0,Ue-at),Lt=m(((null===(V=re.current)||void 0===V?void 0:V.scrollLeft)||0)/mt*(Ve[0]-Ve[0]/rt*Ve[0]),0,Ve[0]-ut),Nt=e.useCallback((e=>{const t="object"==typeof I.wheel&&"string"==typeof I.wheel.changeDirectionKey?I.wheel.changeDirectionKey:"KeyX";e.code!==t||"hybrid"!==a||me.current||(e.stopPropagation(),me.current=!0,Z())}),[a,JSON.stringify(I.wheel)]),It=e.useCallback((e=>{me.current&&(e.stopPropagation(),me.current=!1,Z())}),[]);e.useEffect((()=>{(X||(null==W?void 0:W.type))&&(X||null===ie.current.empty||(ie.current.empty=null),Tt())}),[Ee,null==W?void 0:W.type,Tt]),e.useEffect((()=>{const e=ce.current.animationFrameId;return((null==W?void 0:W.type)||k)&&k&&(k(!1),Z()),At(),()=>{e&&cancelAnimationFrame(e),["timeout"].forEach((e=>E[e].clearAll()))}}),[]),e.useEffect((()=>{const e=re.current;if(!e)return;const t=e=>e.preventDefault(),r="hybrid"===a&&"object"==typeof I.wheel&&I.wheel.changeDirection?"x":a,n="hybrid"===a&&et+Be<=De[1]||me.current?["hybrid","y"].includes(r)?"x":"y":r,o=I.wheel?e=>{t(e),function(e,t,r){const n=e.target.closest(".ms-element");n.matches(":focus")||n.focus(),t.animating||(t.targetScrollX=n.scrollLeft,t.targetScrollY=n.scrollTop),"x"===r?t.targetScrollX=m(t.targetScrollX+e.deltaY,0,n.scrollWidth-n.clientWidth+2):t.targetScrollY=m(t.targetScrollY+e.deltaY,0,n.scrollHeight-n.clientHeight+2),t.animating||(t.animating=!0,t.animationFrameId=requestAnimationFrame((function e(){let o=0;"x"===r?(n.scrollLeft+=.4*(t.targetScrollX-n.scrollLeft),o=Math.abs(n.scrollLeft-t.targetScrollX)):(n.scrollTop+=.4*(t.targetScrollY-n.scrollTop),o=Math.abs(n.scrollTop-t.targetScrollY)),o>2.5?t.animationFrameId=requestAnimationFrame(e):(t.animating=!1,null!==t.animationFrameId&&(cancelAnimationFrame(t.animationFrameId),t.animationFrameId=null))})))}(e,ce.current,n)}:t;return e.addEventListener("wheel",o,{passive:!1}),()=>{e.removeEventListener("wheel",o)}}),[a,JSON.stringify(I.wheel),et,De[1],Be,me.current]),e.useEffect((()=>{if(!Me.value)return;const e=[];return("hybrid"===a?["x","y"]:[a]).forEach((t=>{const r="x"===t?0:1;"end"===Me.value[r]&&jt(t,"x"===t?mt:dt,e)})),()=>{e.forEach((e=>e()))}}),[a,Me.value.join(),ye,dt,mt,rt,tt]),e.useEffect((()=>{if(!Me.value)return;const e=[];return("hybrid"===a?["x","y"]:[a]).forEach((t=>{const r="x"===t?0:1;"number"==typeof Me.value[r]&&jt(t,Me.value[r],e)})),()=>{e.forEach((e=>e()))}}),[ye,null==v?void 0:v.updater,a,jt,Me.value.join()]);const qt=e.useCallback(((t,r,n,o)=>{var l;const s=Object.assign({width:Je[0]?Je[0]+"px":void 0,height:Je[1]?Je[1]+"px":void 0},(null==W?void 0:W.type)&&Object.assign({position:"absolute",top:r+"px",left:n+"px"},!Je[0]&&1===Qe[0]&&{transform:"translateX(-50%)"})),i=Y?e.createElement(e.Suspense,{fallback:H},o):o,c=(null===(l=null==X?void 0:X.clickTrigger)||void 0===l?void 0:l.selector)&&zt;return e.createElement("div",Object.assign({key:t},W||X?{[O]:""+t}:{},{className:"ms-object-box",style:s,onClick:c}),i)}),[Y,!!H,Je.join(),be,Ee,Qe[0],zt]),Bt=e.createElement("div",{className:"ms-objects-wrapper",ref:ne,onMouseDown:Rt,style:wt},Fe.map(((t,r)=>{var o,s,i;const c=e.Children.toArray(l).find((r=>e.isValidElement(r)&&r.key===t)),u=(null==W?void 0:W.stopLoadOnScroll)&&ae.current&&!ie.current.loaded.includes(""+t)?H:(null===(o=ie.current.empty)||void 0===o?void 0:o.includes(t))?"object"==typeof(null==X?void 0:X.mode)?X.mode.fallback:H:c,d="number"==typeof Ge[0]&&"number"==typeof Ge[1]||"firstChild"!==Ge[0]&&"firstChild"!==Ge[1]||0!==r?u:e.createElement(n,{onResize:xt},u);if(!(null==W?void 0:W.type))return qt(t,0,0,d);{const{elementTop:e,elementBottom:n,left:o,right:l}=ht[r],c="x"===a?He:Pe,u=Ke+c>("x"===a?o:e)-ot&&("x"===a?l:n)-ot>0-c,m="hybrid"!==a||De[0]+He>o-((null===(s=re.current)||void 0===s?void 0:s.scrollLeft)||0)&&l-((null===(i=re.current)||void 0===i?void 0:i.scrollLeft)||0)>0-He;if(u&&m)return qt(t,e,o,d)}}))),$t=[{positionType:"x"===a?"left":"top",visibility:lt},{positionType:"x"===a?"right":"bottom",visibility:st},..."hybrid"===a?[{positionType:"left",visibility:it},{positionType:"right",visibility:ct}]:[]],Wt=e.createElement("div",{"morph-scroll":`〈♦${G}〉`,className:r,ref:ee,style:{width:De[2]+"px",height:De[3]+"px"}},e.createElement("div",{className:"ms-content",ref:te,onMouseEnter:Ot,onMouseLeave:Ot,onTouchStart:Ot,onTouchEnd:Ot,style:Object.assign({position:"relative",width:De[0]+"px",height:De[1]+"px"},I.arrows&&ze.size&&("x"===a?{left:ze.size+"px"}:"y"===a?{top:ze.size+"px"}:{top:ze.size+"px",left:ze.size+"px"}))},e.createElement("div",{className:"ms-element",ref:re,onScroll:Ct,onKeyDown:Nt,onKeyUp:It,style:Object.assign(Object.assign(Object.assign({width:"100%",height:"100%",outline:"none"},ft),{overflow:null!==(U={x:rt>De[0]?"scroll hidden":"hidden",y:tt>De[1]?"hidden scroll":"hidden",hybrid:`${rt>De[0]?"scroll":"hidden"} ${tt>De[1]?"scroll":"hidden"}`,hide:"hidden"}[I.wheel||I.content?a:"hide"])&&void 0!==U?U:"hidden"}),"scroll"!==i||"boolean"!=typeof I.progressElement||!1===I.progressElement?{scrollbarWidth:"none"}:{})},Je[0]&&Je[1]?Bt:e.createElement(n,{onResize:vt,style:Object.assign({},ft)},Bt)),N&&$t.map((({positionType:t,visibility:r})=>e.createElement(c,{key:"edge-"+t,edgeGradient:Te,visibility:r,edgeType:t}))),I.progressElement&&!0!==I.progressElement&&[{shouldRender:nt>at,direction:a,thumbSize:at,thumbSpace:Ft,objLengthPerSize:yt,progressReverseIndex:0},{shouldRender:"hybrid"===a&&rt>ut,direction:"x",thumbSize:ut,thumbSpace:Lt,objLengthPerSize:gt[0],progressReverseIndex:1}].filter((({shouldRender:e})=>e)).map((t=>e.createElement(s,{key:t.direction,type:i,direction:t.direction,progressReverse:"boolean"==typeof q?q:q[t.progressReverseIndex],size:Ve,progressTrigger:I,scrollBarOnHover:B,scrollBarEvent:"sliderMenu"===i?Et:St,thumbSize:t.thumbSize,thumbSpace:t.thumbSpace,objLengthPerSize:t.objLengthPerSize,sliderCheckLocal:At,duration:Me.duration})))),I.arrows&&$t.map((({positionType:t,visibility:r})=>e.createElement(u,{key:"arrow-"+t,activity:r,arrows:ze,arrowType:t,handleArrow:Mt,size:"hybrid"===a?De[0]+2*ze.size:De[0]}))));return"auto"===S?e.createElement(n,{measure:"outer",onResize:bt},Wt):Wt};k.displayName="MorphScroll";const S={MorphScroll:k,ResizeTracker:n,IntersectionTracker:r};exports.IntersectionTracker=r,exports.MorphScroll=k,exports.ResizeTracker=n,exports.default=S;
|
package/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import e,{useMemo as t,useEffect as r,useRef as n}from"react";const o=(e,t=!1,r)=>{let n=[];if(n=Array.isArray(e)?2===e.length?[e[1],e[0],e[1],e[0]]:[...e]:[e,e,e,e],t&&(n=[n[1],n[0],n[3],n[2]]),r){const e=[];for(let t=0;r>t;t++)e.push(n[t%4]);n=e}return n},l=({className:t,children:r,style:n,root:l,threshold:s,rootMargin:i,visibleContent:c=!1,onIntersection:a})=>{const[u,d]=e.useState(!1),m=e.useRef(null),p=e.useMemo((()=>{if(!i)return"";const e=o(i);return`${e[0]}px ${e[1]}px ${e[2]}px ${e[3]}px`}),[i]),f=e.useCallback((([e])=>{d(e.isIntersecting),a&&a({time:e.time,rootBounds:e.rootBounds,boundingClientRect:e.boundingClientRect,intersectionRect:e.intersectionRect,isIntersecting:e.isIntersecting,intersectionRatio:e.intersectionRatio,target:e.target})}),[a]);return e.useEffect((()=>{const e=new IntersectionObserver(f,{root:l,threshold:s,rootMargin:p});return m.current&&e.observe(m.current),()=>{e.disconnect()}}),[f,l,s,p]),e.createElement("div",{"intersection-tracker":"",className:t,ref:m,style:n},c||u?r:null)};l.displayName="IntersectionTracker";const s=({className:t,children:r,style:n,measure:o="inner",onResize:l})=>{const s=e.useRef(null);e.useEffect((()=>{const e=s.current;if(!e)return;const t=new ResizeObserver((e=>{for(const t of e)l&&l(t.contentRect)}));return t.observe(e),()=>{t.unobserve(e),t.disconnect()}}),[o,l]);const i={width:"max-content",height:"max-content"},c={inner:Object.assign({},i),outer:Object.assign({},{width:"100%",height:"100%"}),all:Object.assign({minWidth:"100%",minHeight:"100%"},i)};return e.createElement("div",{"resize-tracker":"",className:t,ref:s,style:Object.assign(Object.assign({willChange:"width, height"},c[o]),n)},r)};function i(e,n){const o=t((()=>function(e,t){let r=null,n=null;const o=(...o)=>{"requestFrame"===t?(null!==n&&cancelAnimationFrame(n),n=requestAnimationFrame((()=>{e(...o),n=null}))):(null!==r&&clearTimeout(r),r=setTimeout((()=>{e(...o),r=null}),t))};return o.cancel=()=>{null!==r&&(clearTimeout(r),r=null),null!==n&&(cancelAnimationFrame(n),n=null)},o}(e,n)),[n,e]);return r((()=>()=>{o.cancel()}),[o]),o}s.displayName="ResizeTracker";let c=1;const a=({type:t,direction:r,progressReverse:n,size:o,progressTrigger:l,scrollBarOnHover:s,scrollBarEvent:i,thumbSize:c,thumbSpace:a,objLengthPerSize:u,sliderCheckLocal:d,duration:m})=>{const p="sliderMenu"!==t?{onMouseDown:i,onTouchStart:i}:{},f=e.useMemo((()=>{if("scroll"===t||!r)return;const n=["hybrid","y"].includes(r)?"y":"x",s="x"===n?o[0]:o[1];return Array.from({length:u},((r,o)=>e.createElement("div",{key:o,className:"ms-slider-element",style:Object.assign({},"sliderMenu"===t&&{cursor:"pointer"}),onClick:"sliderMenu"===t?()=>{i(s*o,n,m,d)}:void 0},Array.isArray(null==l?void 0:l.progressElement)?l.progressElement[o]:null==l?void 0:l.progressElement)))}),[u,r,o,t,i,null==l?void 0:l.progressElement]);return e.createElement(e.Fragment,null,"scroll"===t?e.createElement("div",{className:"ms-bar",style:Object.assign(Object.assign(Object.assign({position:"absolute",width:"fit-content"},"x"===r?Object.assign({transformOrigin:"left top",height:o[0]+"px"},n?{top:0,transform:"rotate(-90deg) translateX(-100%)"}:{transform:"rotate(-90deg)"}):Object.assign({top:0,height:"100%"},n?{left:0}:{right:0})),0!=!(null==l?void 0:l.progressElement)&&{pointerEvents:"none"}),s&&{opacity:0,transition:"opacity 0.1s ease-in-out"})},e.createElement("div",Object.assign({className:"ms-thumb","data-direction":["hybrid","y"].includes(r)?"y":r},p,{style:Object.assign(Object.assign({height:c+"px",willChange:"transform, height",transform:`translateY(${a}px)`},(null==l?void 0:l.progressElement)&&{cursor:"grab"}),{transition:"height 0.05s ease-in-out"})}),null==l?void 0:l.progressElement)):u>1&&(null==l?void 0:l.progressElement)&&e.createElement("div",Object.assign({className:"ms-slider","data-direction":["hybrid","y"].includes(r)?"y":r},p,{style:Object.assign(Object.assign(Object.assign({position:"absolute",display:"flex"},"slider"===t&&{cursor:"grab"}),s&&{opacity:0,transition:"opacity 0.1s ease-in-out"}),"x"===r?Object.assign({transformOrigin:"left top",left:"50%",transform:"translateX(-50%)"},n?{top:0}:{bottom:0}):Object.assign({flexDirection:"column",top:"50%",transform:"translateY(-50%)"},n?{left:0}:{right:0}))}),f))};a.displayName="ScrollBar";var u=e.memo(a);const d=({edgeGradient:t,visibility:r,edgeType:n})=>{if(!t)return null;const o=Object.assign(Object.assign(Object.assign(Object.assign({position:"absolute",pointerEvents:"none",transition:"opacity 0.1s ease-in-out"},t.color&&{background:t.color&&`linear-gradient(${"right"===n||"left"===n?"90deg, ":""}${t.color}, transparent)`}),"right"===n||"left"===n?{height:"100%",width:t.size+"px",top:0}:{width:"100%",height:t.size+"px",left:0}),n?{[n]:0}:{}),"right"===n?{transform:"scaleX(-1)"}:"bottom"===n?{transform:"scaleY(-1)"}:{});return e.createElement("div",{className:"ms-edge"+(n?" "+n:""),style:Object.assign(Object.assign({},o),{opacity:r?1:0})})};d.displayName="Edge";var m=e.memo(d);const p=({activity:t,arrows:r,arrowType:n,handleArrow:o,size:l})=>{const s=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({position:"absolute",display:"flex",justifyContent:"center",alignItems:"center",cursor:"pointer",width:r.size+"px"},n?{[n]:0}:{}),"top"===n&&{transform:"rotate(-90deg) translateX(-100%)",transformOrigin:"left top"}),"bottom"===n&&{transform:"rotate(90deg) translateX(-100%)",transformOrigin:"left bottom"}),"left"===n&&{transform:"scaleX(-1)"}),["top","bottom"].includes(n)?{height:l+"px"}:{height:"100%",top:0});return e.createElement("div",{className:`ms-arrow-box ${n}${t?" active":""}`,style:Object.assign({},s),onClick:()=>o(n)},r.element)};p.displayName="Arrow";var f=e.memo(p);function h(e,t){return e>t?Math.floor(e/t):1}function g(e,t=0,r=1/0){return Math.max(t,Math.min(Math.round(e),r))}const v=(e,t,r)=>{if(!t)return;const n=t.querySelectorAll("."+("scroll"===e?"ms-thumb":"ms-slider"));n.length>0&&(r.current=n)},y=e=>e?"start"===e?"flex-start":"center"===e?"center":"flex-end":void 0;function b(e,t,r=0,n=0){return o=>{var l,s,i,c;const a={width:(null!==(l=o.width)&&void 0!==l?l:0)-r,height:(null!==(s=o.height)&&void 0!==s?s:0)-n};(null===(i=e.current)||void 0===i?void 0:i.width)===a.width&&(null===(c=e.current)||void 0===c?void 0:c.height)===a.height||(e.current=a,t())}}function x(t){const r=[],n=t=>{if(null===t||"number"==typeof t||"boolean"==typeof t||"bigint"==typeof t)r.push(t+"");else if("string"==typeof t)r.push(t);else if("function"==typeof t)r.push("<function>");else if(e.isValidElement(t))r.push("<react-node>");else if(Array.isArray(t))t.forEach(n);else if("object"==typeof t){const e=Object.entries(t).sort((([e],[t])=>e.localeCompare(t)));for(const[,t]of e)n(t)}else void 0===t&&r.push("<undefined>")};return n(t),r.join("/")}function E(e){var t,r,n;const o={x:"touches"in e.mouseEvent?e.mouseEvent.touches[0].clientX:e.mouseEvent.clientX,y:"touches"in e.mouseEvent?e.mouseEvent.touches[0].clientY:e.mouseEvent.clientY,leftover:null!==(r=null===(t=e.prevCoordsRef.current)||void 0===t?void 0:t.leftover)&&void 0!==r?r:0},l=null!==(n=e.prevCoordsRef.current)&&void 0!==n?n:o,s={x:o.x-l.x,y:o.y-l.y};e.prevCoordsRef.current=o;const i=t=>{if(!e.scrollElementRef||!e.objectsWrapperRef)return;let r=0;const n="x"===t?"movementX"in e.mouseEvent?e.mouseEvent.movementX:s.x:"movementY"in e.mouseEvent?e.mouseEvent.movementY:s.y,o=e.scrollElementRef;if("thumb"===e.clicked){const s=e.objectsWrapperRef,i=getComputedStyle(s),c="x"===t?o.clientWidth:o.clientHeight,a="x"===t?s.clientWidth+parseFloat(i.marginLeft)+parseFloat(i.marginRight):s.clientHeight+parseFloat(i.marginTop)+parseFloat(i.marginBottom),u=c-e.thumbSize,d=a-c;if(0>=u||0>=d)return;const m=n*(d/u)+l.leftover,p=Math.trunc(m),f=m-p;e.prevCoordsRef.current.leftover=f,r=p}else r=-n;"x"===t?(o.scrollLeft+=r,e.scrollStateRef.targetScrollX=o.scrollLeft):(o.scrollTop+=r,e.scrollStateRef.targetScrollY=o.scrollTop)},c=t=>{const r=e.objectsWrapperRef;if(!r)return;const n="slider"===e.type&&"wrapp"===e.clicked?-1:1,o=s[t]*n,l="x"===t?e.sizeLocal[0]:e.sizeLocal[1],i="x"===t?r.offsetWidth:r.offsetHeight,c="x"===t?e.scrollElementRef.scrollLeft:e.scrollElementRef.scrollTop;e.numForSliderRef.current+=Math.abs(o),e.numForSliderRef.current>6&&!e.isScrollingRef.current&&(o>0&&i>c+l?e.smoothScroll(c+l,t,e.duration):0>o&&c>0&&e.smoothScroll(c-l,t,e.duration),e.numForSliderRef.current=0)},a=t=>{"thumb"===e.clicked?i(t):"wrapp"===e.clicked?"slider"===e.type?c(t):i(t):"slider"===e.clicked&&c(t)};"hybrid"===e.direction?"wrapp"===e.clicked?(a("x"),a("y")):e.axisFromAtr&&a(e.axisFromAtr):a(e.direction||"y")}function j(e){if(e.controller.abort(),document.body.style.removeProperty("cursor"),["thumb","slider"].includes(e.clicked)&&e.mouseOnEl(e.scrollBar),"wrapp"===e.clicked&&e.mouseOnEl(e.objectsWrapperRef),e.clickedObject.current="none",e.scrollBarOnHover){let t=e.mouseEvent.target,r=!1;for(;t&&t!==document.body;){if(t===e.scrollContentRef){r=!0;break}t=t.parentNode}r||e.mouseOnRefHandle(e.mouseEvent)}e.prevCoordsRef.current=null,e.triggerUpdate()}const O=e=>{e&&("grab"===e.style.cursor?(e.style.cursor="grabbing",e.classList.add("active")):"grabbing"===e.style.cursor&&(e.style.cursor="grab",e.classList.remove("active")))},w="wrap-id",S=new Map,R=(e,t,r)=>{M(e);const n=setTimeout((()=>{t(),S.delete(e)}),r);S.set(e,n)},M=e=>{const t=S.get(e);t&&(clearTimeout(t),S.delete(e))},k=({type:t="scroll",className:r,size:l,objectsSize:a,direction:d="y",gap:p,wrapperMargin:M,wrapperMinSize:k,progressReverse:T=!1,progressTrigger:z={wheel:!0},scrollBarOnHover:A=!1,suspending:C=!1,fallback:L,scrollPosition:F,edgeGradient:N,children:I,onScrollValue:$,elementsAlign:W,elementsDirection:X="row",wrapperAlign:B,isScrolling:H,render:Y,emptyElements:q,crossCount:P})=>{var D,V,K,G,U,_,J;const Q=i((()=>{kt()}),40),Z=i((()=>{vt()}),34),ee=function(){const e=n(null);return null===e.current&&(e.current=""+c++),e.current}();if(!l)throw Error(`Prop "size" is not provided\nMorphScroll〈♦${ee}〉`);Object.keys(z).length;const[te,re]=e.useState(0),ne=()=>{re((e=>"number"==typeof e&&1e3>e?e+1:0))},oe=e.useRef(null),le=e.useRef(null),se=e.useRef(null),ie=e.useRef(null),ce=e.useRef([]),ae=e.useRef(null),ue=e.useRef("none"),de=e.useRef({loaded:[],empty:[]}),me=e.useRef({targetScrollY:0,targetScrollX:0,animating:!1,animationFrameId:0}),pe=e.useRef(!1),fe=e.useRef(0),he=e.useRef(null);function ge(){return e.useRef({width:0,height:0})}const ve=ge(),ye=ge(),be=ge(),[xe,Ee,je,Oe,we,Se,Re,Me]=function(...e){return e.map(x)}(null==F?void 0:F.value,Y,l,a,q,k,B,p),ke=e.useMemo((()=>{var e,t;return{value:"number"==typeof(null==F?void 0:F.value)||"string"==typeof(null==F?void 0:F.value)?[F.value,F.value]:null!==(e=null==F?void 0:F.value)&&void 0!==e?e:[null],duration:null!==(t=null==F?void 0:F.duration)&&void 0!==t?t:200}}),[xe,null==F?void 0:F.duration]),Te={color:null,size:40},ze=e.useMemo((()=>"object"==typeof N?Object.assign(Object.assign({},Te),N):Te),[N]),Ae=e.useMemo((()=>Object.assign(Object.assign({},Te),"object"==typeof z.arrows?z.arrows:{})),[z.arrows]),Ce=e.useCallback((t=>{if(null==t)return[];if(e.isValidElement(t)){const r=t;return r.type===e.Fragment?e.Children.toArray(r.props.children).flatMap(Ce):[r]}return[t]}),[]),Le=e.useMemo((()=>e.Children.toArray(I).flatMap(Ce).map((t=>e.isValidElement(t)&&t.key?t.key+"":null)).filter((e=>null!==e)).filter((e=>{var t;return"clear"!==(null==q?void 0:q.mode)||!(null===(t=de.current.empty)||void 0===t?void 0:t.includes(e))}))),[I,we,null===(D=de.current.empty)||void 0===D?void 0:D.join()]),[Fe,Ne,Ie,$e]=M?o(M):[0,0,0,0],We=Fe+Ie,Xe=$e+Ne,[Be,He]=e.useMemo((()=>{var e,t;return"number"==typeof p?[p,p]:Array.isArray(p)?[null!==(e=p[1])&&void 0!==e?e:0,null!==(t=p[0])&&void 0!==t?t:0]:[0,0]}),[p]),Ye=e.useMemo((()=>o((null==Y?void 0:Y.rootMargin)||0,"x"===d)),[Ee,d]),[qe,Pe]=Ye?[Ye[2],Ye[0]]:[0,0],De=e.useMemo((()=>{const[e,t]=Array.isArray(l)?l:"number"==typeof l?[l,l]:[ve.current.width,ve.current.height];if(!z.arrows||!Ae.size)return[e,t,e,t];const r=2*Ae.size;let n=e,o=t;return"x"===d?n=e-r:"y"===d?o=t-r:"hybrid"===d&&(n=e-r,o=t-r),[n,o,e,t]}),[je,Ae.size,ve.current]),Ve="x"===d?De[0]:De[1],Ke=e.useMemo((()=>a?Array.isArray(a)?a:o(a,!0,2):[null,null]),[Oe]),Ge=e.useMemo((()=>{const e=(e,t)=>"number"==typeof e?e:"firstChild"===e?t:0;return[e(Ke[0]&&"none"!==Ke[0]&&"size"!==Ke[0]?Ke[0]:"y"===d&&"none"!==Ke[0]||"size"===Ke[0]?De[0]:0,be.current.width),e(Ke[1]&&"none"!==Ke[1]&&"size"!==Ke[1]?Ke[1]:"x"===d&&"none"!==Ke[1]||"size"===Ke[1]?De[1]:0,be.current.height)]}),[Oe,je,be.current,De.join()]),Ue=e.useMemo((()=>{const e="x"===d,t="row"===X,r="column"===X,n=e?De[1]:De[0],o=e?Ge[1]+He:Ge[0]+Be,l="hybrid"===d?o*(Le.length+1)-o:n,s=Math.floor(l/o)||1,i=P&&s>=P?"hybrid"===d?Math.ceil(s/P):P:s,c=i>1&&i<Le.length?Math.ceil(Le.length/i):i>Le.length?1:Le.length,a=P&&P<Le.length,u=e=>Number.isFinite(e)&&e>0?e:1;if("hybrid"===d){const e=a?t?P:i:t?Le.length:1,n=a?r?P:i:r?Le.length:1;return[u(e),u(n)]}return[u(i),u(c)]}),[Le.length,d,Ge.join(),De.join(),Be,Xe,We,P]),_e=e.useMemo((()=>{const e=Ue[0]?Ue[0]*He-He:0,t="x"===d?Ue[1]:Ue[0];return Ge[0]?(Ge[0]+He)*t-He:(null==Y?void 0:Y.type)?be.current.width+e:ye.current.width}),[Ge[0],Ue.join(),He,ye.current.width,be.current,Ee]),Je=e.useMemo((()=>{const e=1>Ue[1]?1:Ue[0]*Be-Be;return Ge[1]?"x"===d?(Ge[1]+Be)*Ue[0]-Be:(Ge[1]+Be)*Ue[1]-Be:(null==Y?void 0:Y.type)?be.current.height+e:ye.current.height}),[Ge[1],Ue.join(),Be,ye.current.height,be.current,Ee]),Qe=e.useMemo((()=>Je+We),[Je,We]),Ze=e.useMemo((()=>_e+Xe),[_e,Xe]),et="x"===d?Ze:Qe,tt="x"===d?(null===(V=se.current)||void 0===V?void 0:V.scrollLeft)||0:(null===(K=se.current)||void 0===K?void 0:K.scrollTop)||0,rt=tt>1&&!0,nt=et>Math.round(tt+Ve);let ot=!1,lt=!1;"hybrid"===d&&(ot=((null===(G=se.current)||void 0===G?void 0:G.scrollLeft)||0)>1&&!0,lt=Math.round(((null===(U=se.current)||void 0===U?void 0:U.scrollLeft)||0)+De[0])<Ze);const st=e.useMemo((()=>{if(!z.progressElement||!et)return 0;const e=Math.round(Ve/et*Ve);return!Number.isFinite(e)||0>e?0:e}),[Ve,et,z.progressElement]),it=e.useMemo((()=>{if(!z.progressElement)return 0;const e=Math.round(De[0]/Ze*De[0]);return!Number.isFinite(e)||0>e?0:e}),[De[0],Ze,z.progressElement]),ct=e.useMemo((()=>Ve?et-Ve:et),[et,Ve]),at=e.useMemo((()=>De[0]?Ze-De[0]:Ze),[Ze,De[0]]),ut=e.useCallback((()=>{if(!(null==Y?void 0:Y.type)||1>=Ue[0])return[];const e=Array.from({length:Le.length},((e,t)=>t)),t=Array.from({length:Ue[0]},(()=>[])),r="x"===d&&"column"===X||"x"!==d&&"row"===X;return e.forEach((e=>{const n=r?e%Ue[0]:Math.floor(e/Ue[1]);t[n]&&t[n].push(e)})),t}),[Le.length,Ue.join(),Ee,X,d]),dt=e.useMemo((()=>{if(!(null==Y?void 0:Y.type))return[{elementTop:0,elementBottom:0,left:0,right:0}];let e=[],t=0;if(W){const r=Array.from({length:Le.length},((e,t)=>t)),n=Math.abs(Math.floor(Le.length/Ue[0])*Ue[0]-Le.length);e=n?r.slice(-n):[],"center"===W?t=(Ge[0]+He)*(Ue[0]-n)/2:"end"===W&&(t=(Ge[0]+He)*(Ue[0]-n))}return Le.map(((r,n)=>{const o=function(e,t){for(let r=0;r<t.length;r++){const n=t[r].indexOf(e);if(-1!==n)return["x"===d?n:r,["hybrid","y"].includes(d)?n:r]}return[0,0]}(n,ut()),l=e.length>0&&e.includes(n)?t:0,s=function(e){const t="x"===d?l:0;return e>0?t+(Ge[1]+Be)*e:t}(Ue[0]>1||["hybrid","x"].includes(d)?o[1]:n),i=Ge[1]?s+Ge[1]:s,c=function(e){const t="x"===d?0:l;return e>0?t+(Ge[0]+He)*e:t}(1===Ue[0]&&"x"===d?n:o[0]);return{elementTop:s,elementBottom:i,left:c,right:c+Ge[0]}}))}),[I,Ge.join(),p,Ee,Ue[0],X]),mt=e.useMemo((()=>(null==De?void 0:De.length)&&B?function(e,t,r,n){const[o,l="start"]="string"==typeof e?[e,e]:e,s={display:"flex"};return t[0]>r&&(s.justifyContent=y(o)),t[1]>n&&(s.alignItems=y(l)),s}(B,De,Ze,Qe):{}),[B,De.join(),Qe,Ze]),pt=e.useMemo((()=>[h(Ze,De[0]),h(Qe,De[1])]),[Ze,Qe,De.join()]),ft=e.useMemo((()=>"x"===d?pt[0]:pt[1]),[d,pt[0],pt[1]]),ht=e.useCallback((e=>{if(!A)return;const t=()=>((e,t,r,n)=>{e&&e.querySelectorAll(".ms-bar").forEach(((e,t)=>{const o=e;["mouseleave","mouseup","touchend"].includes(r.type)?(o.style.opacity="0",o.classList.remove("hover"),o.classList.add("leave"),n(`mouseOnRef${t}-anim`,(()=>o.classList.remove("leave")),200)):(o.style.opacity="1",o.classList.add("hover"))}))})(le.current,0,e,R);"mouseleave"===e.type?!["thumb","slider","wrapp"].includes(ue.current)&&t():t()}),[A,t,ue.current,le.current]),gt=e.useCallback((e=>{se.current&&(({arrowType:e,scrollElement:t,wrapSize:r,scrollSize:n,smoothScroll:o,duration:l})=>{const s=r[0],i=r[1],c=t.scrollTop,a=t.scrollLeft,u=["top","bottom"].includes(e)?i:s,d=(e,t)=>o(g(e,0,u),t,l);"top"===e&&c>0?d(c-n[1],"y"):"left"===e&&a>0&&d(a-n[0],"x"),"bottom"===e&&c+n[1]!==i?d(c+n[1],"y"):"right"===e&&a+n[0]!==s&&d(a+n[0],"x")})({arrowType:e,scrollElement:se.current,wrapSize:[Ze,Qe],scrollSize:De,smoothScroll:wt,duration:ke.duration})}),[se.current,De.join(),Ze,Qe,ke.duration]),vt=e.useCallback((()=>{v(t,oe.current,ce);const e=se.current;le.current&&e&&0!==ce.current.length&&((e,t,r,n)=>{!function(){var o,l,s,i;const c=null!==(l=null===(o=t[0])||void 0===o?void 0:o.querySelectorAll(".ms-slider-element"))&&void 0!==l?l:[],a=null!==(i=null===(s=t[1])||void 0===s?void 0:s.querySelectorAll(".ms-slider-element"))&&void 0!==i?i:[];function u(e,t,r,n){const o="x"===n?r.scrollLeft:r.scrollTop;e.forEach(((e,r)=>{const l="x"===n?t[0]:t[1];o>=l*r&&l*(r+1)>o?e.classList.add("active"):e.classList.remove("active")}))}c.length>0&&u(c,r,e,n),a.length>0&&u(a,r,e,"x")}()})(e,ce.current,De,d)}),[De.join(),d,se,le,ce,t]),yt=e.useCallback((()=>{const e=se.current;e&&(null==$||$(e.scrollLeft,e.scrollTop),pe.current=!0,null==H||H(!0),R("handleScroll-anim",(()=>{pe.current=!1,null==H||H(!1),(null==Y?void 0:Y.type)?ne():Q()}),200),"slider"===t&&Z(),(null==Y?void 0:Y.type)||Q(),ne())}),[d,$,H,Ee,t,Z]),bt=g(tt/ct*(Ve-st),0,Ve-st),xt=g(((null===(_=se.current)||void 0===_?void 0:_.scrollLeft)||0)/at*(De[0]-De[0]/Ze*De[0]),0,De[0]-it),Et=i(b(ve,ne),40),jt=i(b(ye,ne,Xe,We),40),Ot=i(b(be,ne),40),wt=e.useCallback(((e,t,r,n)=>{const o=se.current;return o?function(e,t,r,n,o){let l;if(!t&&!n)return null;const s=performance.now(),i=t.scrollTop,c=t.scrollLeft,a=u=>{const d=Math.min((u-s)/r,1);"y"===e?t.scrollTop=i+(n-i)*d:"x"===e&&(t.scrollLeft=c+(n-c)*d),1>d?l=requestAnimationFrame(a):null==o||o()};return l=requestAnimationFrame(a),()=>cancelAnimationFrame(l)}(t,o,r,e,n):null}),[se]),St=e.useCallback(((e,r="mousedown",n)=>{const o=e||("scroll"===t?"thumb":"slider");if("wrapp"===e&&!z.content||["thumb","slider"].includes(o)&&!z.progressElement)return;v(t,oe.current,ce);let l=null;n&&(l=n.getAttribute("data-direction")),function(e){const t=new AbortController,{signal:r}=t;e.clickedObject.current=e.clicked,e.triggerUpdate(),"mousedown"===e.eventType?(["thumb","slider"].includes(e.clicked)&&e.mouseOnEl(e.scrollBar),"wrapp"===e.clicked&&e.mouseOnEl(e.objectsWrapperRef),document.addEventListener("mousemove",(t=>E(Object.assign(Object.assign({},e),{mouseEvent:t}))),{signal:r}),document.addEventListener("mouseup",(r=>j(Object.assign(Object.assign({},e),{mouseEvent:r,controller:t}))),{signal:r})):"touchstart"===e.eventType&&(document.addEventListener("touchmove",(t=>{t.preventDefault(),E(Object.assign(Object.assign({},e),{mouseEvent:t}))}),{signal:r,passive:!1}),document.addEventListener("touchend",(r=>j(Object.assign(Object.assign({},e),{mouseEvent:r,controller:t}))),{signal:r})),document.body.style.cursor="grabbing"}({eventType:r,scrollElementRef:se.current,objectsWrapperRef:ie.current,scrollBar:n||null,clickedObject:ue,scrollContentRef:le.current,scrollStateRef:me.current,type:t,scrollBarOnHover:A,mouseOnEl:O,mouseOnRefHandle:ht,triggerUpdate:ne,direction:d,smoothScroll:wt,sizeLocal:[De[0],De[1]],clicked:o,numForSliderRef:fe,isScrollingRef:pe,prevCoordsRef:he,thumbSize:"x"===l?it:st,axisFromAtr:l,duration:ke.duration})}),[t,z.content,z.progressElement,De.join(),st,it,ke.duration]),Rt=e.useCallback((e=>{St(null,e.type,e.target)}),[St]),Mt=e.useCallback((()=>{St("wrapp")}),[St]),kt=e.useCallback((()=>{oe.current&&((e,t,r,n)=>{const{allIds:o,emptyKeysRaw:l}=(()=>{const t=[],r=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:e=>e instanceof Element&&e.hasAttribute(w)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});let o=n.nextNode();for(;o;){const e=o,l=e.getAttribute(w);l&&(t.push(l),0===e.children.length&&r.push(l)),o=n.nextNode()}return{allIds:t,emptyKeysRaw:r}})(),s=new Set(t.current.loaded);o.forEach((e=>s.add(e)));let i=null;if(t.current.empty){const e=new Set(t.current.empty);l.forEach((t=>e.add(t))),i=Array.from(e)}t.current={loaded:"lazy"===n?Array.from(s):o.map((e=>e)),empty:i},r()})(oe.current,de,ne,null==Y?void 0:Y.type)}),[Ee]),Tt=e.useCallback((e=>{(null==q?void 0:q.clickTrigger)&&((e,t,r,n)=>{e.target.closest(r.selector)&&t("emptyKeys-anim",(()=>{n()}),r.delay||0)})(e,R,q.clickTrigger,kt)}),[we]),zt=e.useCallback(((e,t,r)=>{if(ae.current){if(ae.current!==Le[0])return void(ae.current=Le[0])}else ae.current=Le[0];const n=wt(t,e,ke.duration);n&&r.push(n)}),[Le[0],ke.duration]),At=e.useMemo((()=>{const e=Object.assign(Object.assign(Object.assign(Object.assign({margin:M?`${Fe}px ${Ne}px ${Ie}px ${$e}px`:"",height:Ke[1]&&"none"!==Ke[1]?Je+"px":"fit-content",width:Ke[0]&&"none"!==Ke[0]?_e+"px":"fit-content"},z.content&&{cursor:"grab"}),p&&!(null==Y?void 0:Y.type)&&{gap:`${Be}px ${He}px`}),k&&function(e,t,r,n,o){const l=(e,t)=>"full"===e?("x"===t?r[0]:r[1])-("x"===t?n:o):e;if("hybrid"!==t&&!Array.isArray(e)){const r=l(e,t)+"px";return"x"===t?{minWidth:r}:{minHeight:r}}let s,i;return Array.isArray(e)?[s,i]=e:s=i=e,{minWidth:l(s,"x")+"px",minHeight:l(i,"y")+"px"}}(k,d,De,Xe,We)),B&&{flexShrink:0});if(null==Y?void 0:Y.type)return Object.assign(Object.assign({},e),{position:"relative"});const t=Ke[1]?"wrap":void 0,r=1===Ue[0]?"y"===d?"column":"row":X;return Object.assign(Object.assign({},e),{display:"flex",flexDirection:r,flexWrap:t,justifyContent:y(W)})}),[M,[Fe,Ne,Ie,$e,Xe,We].join(),Ke[1],Je,_e,z.content,Me,[Be,He].join(),null==Y?void 0:Y.type,Se,d,De.join(),Re,Ue[0],X,W]);e.useEffect((()=>{(q||(null==Y?void 0:Y.type))&&(q||null===de.current.empty||(de.current.empty=null),Q())}),[we,null==Y?void 0:Y.type,Ee,pe.current,Le.length]),e.useEffect((()=>(((null==Y?void 0:Y.type)||H)&&(H&&H(!1),ne()),vt(),()=>{me.current.animationFrameId&&cancelAnimationFrame(me.current.animationFrameId),(()=>{for(const e of S.values())clearTimeout(e);S.clear()})()})),[]),e.useEffect((()=>{const e=se.current;if(!e)return;const t=z.wheel?t=>function(e,t,r,n){e.preventDefault(),r.animating||(r.targetScrollX=t.scrollLeft,r.targetScrollY=t.scrollTop),"x"===n?r.targetScrollX=g(r.targetScrollX+e.deltaY,0,t.scrollWidth-t.clientWidth+2):r.targetScrollY=g(r.targetScrollY+e.deltaY,0,t.scrollHeight-t.clientHeight+2),r.animating||(r.animating=!0,r.animationFrameId=requestAnimationFrame((function e(){let o=0;"x"===n?(t.scrollLeft+=.4*(r.targetScrollX-t.scrollLeft),o=Math.abs(t.scrollLeft-r.targetScrollX)):(t.scrollTop+=.4*(r.targetScrollY-t.scrollTop),o=Math.abs(t.scrollTop-r.targetScrollY)),o>2.5?r.animationFrameId=requestAnimationFrame(e):(r.animating=!1,null!==r.animationFrameId&&(cancelAnimationFrame(r.animationFrameId),r.animationFrameId=null))})))}(t,e,me.current,d):e=>e.preventDefault();return e.addEventListener("wheel",t,{passive:!1}),()=>{e.removeEventListener("wheel",t)}}),[d,z.wheel]),e.useEffect((()=>{if(!ke.value)return;const e=[];return("hybrid"===d?["x","y"]:[d]).forEach((t=>{const r="x"===t?0:1;"end"===ke.value[r]&&zt(t,"x"===t?at:ct,e)})),()=>{e.forEach((e=>e()))}}),[ke.value.join(),xe,ct,at,Ze,Qe]),e.useEffect((()=>{if(!ke.value)return;const e=[];return("hybrid"===d?["x","y"]:[d]).forEach((t=>{const r="x"===t?0:1;"number"==typeof ke.value[r]&&zt(t,ke.value[r],e)})),()=>{e.forEach((e=>e()))}}),[xe,null==F?void 0:F.updater]);const Ct=e.useCallback(((t,r,n,o)=>{var l;const s=Object.assign({width:Ge[0]?Ge[0]+"px":void 0,height:Ge[1]?Ge[1]+"px":void 0},(null==Y?void 0:Y.type)&&Object.assign({position:"absolute",top:r+"px",left:n+"px"},!Ge[0]&&1===Ue[0]&&{transform:"translateX(-50%)"})),i=C?e.createElement(e.Suspense,{fallback:L},o):o,c=(null===(l=null==q?void 0:q.clickTrigger)||void 0===l?void 0:l.selector)&&Tt;return e.createElement("div",Object.assign({key:t},Y||q?{[w]:""+t}:{},{className:"ms-object-box",style:s,onClick:c}),i)}),[C,!!L,Ge.join(),se.current,Ee,we,Ue[0]]),Lt=e.createElement("div",{className:"ms-objects-wrapper",ref:ie,onMouseDown:Mt,style:At},Le.map(((t,r)=>{var n,o,l;const i=e.Children.toArray(I).find((r=>e.isValidElement(r)&&r.key===t)),c=(null==Y?void 0:Y.stopLoadOnScroll)&&pe.current&&!de.current.loaded.includes(""+t)?L:(null===(n=de.current.empty)||void 0===n?void 0:n.includes(t))?"object"==typeof(null==q?void 0:q.mode)?q.mode.fallback:L:i,a="number"==typeof Ke[0]&&"number"==typeof Ke[1]||"firstChild"!==Ke[0]&&"firstChild"!==Ke[1]||0!==r?c:e.createElement(s,{onResize:Ot},c);if(!(null==Y?void 0:Y.type))return Ct(t,0,0,a);{const{elementTop:e,elementBottom:n,left:s,right:i}=dt[r],c="x"===d?qe:Pe,u=Ve+c>("x"===d?s:e)-tt&&("x"===d?i:n)-tt>0-c,m="hybrid"!==d||De[0]+qe>s-((null===(o=se.current)||void 0===o?void 0:o.scrollLeft)||0)&&i-((null===(l=se.current)||void 0===l?void 0:l.scrollLeft)||0)>0-qe;if(u&&m)return Ct(t,e,s,a)}}))),Ft=[{positionType:"x"===d?"left":"top",visibility:rt},{positionType:"x"===d?"right":"bottom",visibility:nt},..."hybrid"===d?[{positionType:"left",visibility:ot},{positionType:"right",visibility:lt}]:[]],Nt=e.createElement("div",{"morph-scroll":`〈♦${ee}〉`,className:r,ref:oe,style:{width:De[2]+"px",height:De[3]+"px"}},e.createElement("div",{className:"ms-content",ref:le,onMouseEnter:ht,onMouseLeave:ht,onTouchStart:ht,onTouchEnd:ht,style:Object.assign({position:"relative",width:De[0]+"px",height:De[1]+"px"},z.arrows&&Ae.size&&("x"===d?{left:Ae.size+"px"}:"y"===d?{top:Ae.size+"px"}:{top:Ae.size+"px",left:Ae.size+"px"}))},e.createElement("div",{className:"ms-element",ref:se,onScroll:yt,style:Object.assign(Object.assign(Object.assign({width:"100%",height:"100%"},mt),{overflow:null!==(J={x:Ze>De[0]?"scroll hidden":"hidden",y:Qe>De[1]?"hidden scroll":"hidden",hybrid:`${Ze>De[0]?"scroll":"hidden"} ${Qe>De[1]?"scroll":"hidden"}`,hide:"hidden"}[z.wheel||z.content?d:"hide"])&&void 0!==J?J:"hidden"}),"scroll"!==t||"boolean"!=typeof z.progressElement||!1===z.progressElement?{scrollbarWidth:"none"}:{})},Ge[0]&&Ge[1]?Lt:e.createElement(s,{onResize:jt,style:Object.assign({},mt)},Lt)),N&&Ft.map((({positionType:t,visibility:r})=>e.createElement(m,{key:"edge-"+t,edgeGradient:ze,visibility:r,edgeType:t}))),z.progressElement&&!0!==z.progressElement&&[{shouldRender:et>st,direction:d,thumbSize:st,thumbSpace:bt,objLengthPerSize:ft,progressReverseIndex:0},{shouldRender:"hybrid"===d&&Ze>it,direction:"x",thumbSize:it,thumbSpace:xt,objLengthPerSize:pt[0],progressReverseIndex:1}].filter((({shouldRender:e})=>e)).map((r=>e.createElement(u,{key:r.direction,type:t,direction:r.direction,progressReverse:"boolean"==typeof T?T:T[r.progressReverseIndex],size:De,progressTrigger:z,scrollBarOnHover:A,scrollBarEvent:"sliderMenu"===t?wt:Rt,thumbSize:r.thumbSize,thumbSpace:r.thumbSpace,objLengthPerSize:r.objLengthPerSize,sliderCheckLocal:vt,duration:ke.duration})))),z.arrows&&Ft.map((({positionType:t,visibility:r})=>e.createElement(f,{key:"arrow-"+t,activity:r,arrows:Ae,arrowType:t,handleArrow:gt,size:"hybrid"===d?De[0]+2*Ae.size:De[0]}))));return"auto"===l?e.createElement(s,{measure:"outer",onResize:Et},Nt):Nt};k.displayName="MorphScroll";const T={MorphScroll:k,ResizeTracker:s,IntersectionTracker:l};export{l as IntersectionTracker,k as MorphScroll,s as ResizeTracker,T as default};
|
|
1
|
+
import e,{useRef as t}from"react";const r=(e,t=!1,r)=>{let n=[];if(n=Array.isArray(e)?2===e.length?[e[1],e[0],e[1],e[0]]:[...e]:[e,e,e,e],t&&(n=[n[1],n[0],n[3],n[2]]),r){const e=[];for(let t=0;r>t;t++)e.push(n[t%4]);n=e}return n},n=({className:t,children:n,style:o,root:l,threshold:s,rootMargin:i,visibleContent:c=!1,onIntersection:a})=>{const[u,d]=e.useState(!1),m=e.useRef(null),h=e.useMemo((()=>{if(!i)return"";const e=r(i);return`${e[0]}px ${e[1]}px ${e[2]}px ${e[3]}px`}),[i]),p=e.useCallback((([e])=>{d(e.isIntersecting),a&&a({time:e.time,rootBounds:e.rootBounds,boundingClientRect:e.boundingClientRect,intersectionRect:e.intersectionRect,isIntersecting:e.isIntersecting,intersectionRatio:e.intersectionRatio,target:e.target})}),[a]);return e.useEffect((()=>{const e=new IntersectionObserver(p,{root:l,threshold:s,rootMargin:h});return m.current&&e.observe(m.current),()=>{e.disconnect()}}),[p,l,s,h]),e.createElement("div",{"intersection-tracker":"",className:t,ref:m,style:o},c||u?n:null)};n.displayName="IntersectionTracker";const o=({className:t,children:r,style:n,measure:o="inner",onResize:l})=>{const s=e.useRef(null);e.useEffect((()=>{const e=s.current;if(!e)return;const t=new ResizeObserver((e=>{for(const t of e)l&&l(t.contentRect)}));return t.observe(e),()=>{t.unobserve(e),t.disconnect()}}),[o,l]);const i={width:"max-content",height:"max-content"},c={inner:Object.assign({},i),outer:Object.assign({},{width:"100%",height:"100%"}),all:Object.assign({minWidth:"100%",minHeight:"100%"},i)};return e.createElement("div",{"resize-tracker":"",className:t,ref:s,style:Object.assign(Object.assign({willChange:"width, height"},c[o]),n)},r)};o.displayName="ResizeTracker";let l=1;const s=({type:t,direction:r,progressReverse:n,size:o,progressTrigger:l,scrollBarOnHover:s,scrollBarEvent:i,thumbSize:c,thumbSpace:a,objLengthPerSize:u,sliderCheckLocal:d,duration:m})=>{const h="sliderMenu"!==t?{onMouseDown:i,onTouchStart:i}:{},p=e.useMemo((()=>{if("scroll"===t||!r)return;const n=["hybrid","y"].includes(r)?"y":"x",s="x"===n?o[0]:o[1];return Array.from({length:u},((r,o)=>e.createElement("div",{key:o,className:"ms-slider-element",style:Object.assign({},"sliderMenu"===t&&{cursor:"pointer"}),onClick:"sliderMenu"===t?()=>{i(s*o,n,m,d)}:void 0},Array.isArray(null==l?void 0:l.progressElement)?l.progressElement[o]:null==l?void 0:l.progressElement)))}),[u,r,o,t,i,null==l?void 0:l.progressElement,m,d]);return e.createElement(e.Fragment,null,"scroll"===t?e.createElement("div",{className:"ms-bar",style:Object.assign(Object.assign(Object.assign({position:"absolute",width:"fit-content"},"x"===r?Object.assign({transformOrigin:"left top",height:o[0]+"px",left:"50%"},n?{top:0,transform:"rotate(-90deg) translate(-100%, -50%)"}:{transform:"rotate(-90deg) translateY(-50%)"}):Object.assign({top:"50%",transform:"translateY(-50%)",height:o[1]+"px"},n?{left:0}:{right:0})),0!=!(null==l?void 0:l.progressElement)&&{pointerEvents:"none"}),s&&{opacity:0,transition:"opacity 0.1s ease-in-out"})},e.createElement("div",Object.assign({className:"ms-thumb","data-direction":["hybrid","y"].includes(r)?"y":r},h,{style:Object.assign(Object.assign({height:c+"px",willChange:"transform, height",transform:`translateY(${a}px)`},(null==l?void 0:l.progressElement)&&{cursor:"grab"}),{transition:"height 0.05s ease-in-out"})}),null==l?void 0:l.progressElement)):u>1&&(null==l?void 0:l.progressElement)&&e.createElement("div",Object.assign({className:"ms-slider","data-direction":["hybrid","y"].includes(r)?"y":r},h,{style:Object.assign(Object.assign(Object.assign({position:"absolute",display:"flex"},"slider"===t&&{cursor:"grab"}),s&&{opacity:0,transition:"opacity 0.1s ease-in-out"}),"x"===r?Object.assign({transformOrigin:"left top",left:"50%",transform:"translateX(-50%)"},n?{top:0}:{bottom:0}):Object.assign({flexDirection:"column",top:"50%",transform:"translateY(-50%)"},n?{left:0}:{right:0}))}),p))};s.displayName="ScrollBar";var i=e.memo(s);const c=({edgeGradient:t,visibility:r,edgeType:n})=>{if(!t)return null;const o=Object.assign(Object.assign(Object.assign(Object.assign({position:"absolute",pointerEvents:"none",transition:"opacity 0.1s ease-in-out"},t.color&&{background:t.color&&`linear-gradient(${"right"===n||"left"===n?"90deg, ":""}${t.color}, transparent)`}),"right"===n||"left"===n?{height:"100%",width:t.size+"px",top:0}:{width:"100%",height:t.size+"px",left:0}),n?{[n]:0}:{}),"right"===n?{transform:"scaleX(-1)"}:"bottom"===n?{transform:"scaleY(-1)"}:{});return e.createElement("div",{className:"ms-edge"+(n?" "+n:""),style:Object.assign(Object.assign({},o),{opacity:r?1:0})})};c.displayName="Edge";var a=e.memo(c);const u=({activity:t,arrows:r,arrowType:n,handleArrow:o,size:l})=>{const s=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({position:"absolute",display:"flex",justifyContent:"center",alignItems:"center",cursor:"pointer",width:r.size+"px"},n?{[n]:0}:{}),"top"===n&&{transform:"rotate(-90deg) translateX(-100%)",transformOrigin:"left top"}),"bottom"===n&&{transform:"rotate(90deg) translateX(-100%)",transformOrigin:"left bottom"}),"left"===n&&{transform:"scaleX(-1)"}),["top","bottom"].includes(n)?{height:l+"px"}:{height:"100%",top:0});return e.createElement("div",{className:`ms-arrow-box ${n}${t?" active":""}`,style:Object.assign({},s),onClick:()=>o(n)},r.element)};u.displayName="Arrow";var d=e.memo(u);function m(e,t){return e>t?Math.floor(e/t):1}function h(e,t=0,r=1/0){return Math.max(t,Math.min(Math.round(e),r))}const p=(e,t,r)=>{if(!t)return;const n=t.querySelectorAll("."+("scroll"===e?"ms-thumb":"ms-slider"));n.length>0&&(r.current=n)},f=e=>e?"start"===e?"flex-start":"center"===e?"center":"flex-end":void 0;function g(e,t,r=0,n=0){return o=>{var l,s,i,c;const a={width:(null!==(l=o.width)&&void 0!==l?l:0)-r,height:(null!==(s=o.height)&&void 0!==s?s:0)-n};(null===(i=e.current)||void 0===i?void 0:i.width)===a.width&&(null===(c=e.current)||void 0===c?void 0:c.height)===a.height||(e.current=a,t())}}function y(t){const r=[],n=t=>{if(null===t||"number"==typeof t||"boolean"==typeof t||"bigint"==typeof t)r.push(t+"");else if("string"==typeof t)r.push(t);else if("function"==typeof t)r.push("<function>");else if(e.isValidElement(t))r.push("<react-node>");else if(Array.isArray(t))t.forEach(n);else if("object"==typeof t){const e=Object.entries(t).sort((([e],[t])=>e.localeCompare(t)));for(const[,t]of e)n(t)}else void 0===t&&r.push("<undefined>")};return n(t),r.join("/")}function b(e){var t,r,n;const o={x:"touches"in e.mouseEvent?e.mouseEvent.touches[0].clientX:e.mouseEvent.clientX,y:"touches"in e.mouseEvent?e.mouseEvent.touches[0].clientY:e.mouseEvent.clientY,leftover:null!==(r=null===(t=e.prevCoordsRef.current)||void 0===t?void 0:t.leftover)&&void 0!==r?r:0},l=null!==(n=e.prevCoordsRef.current)&&void 0!==n?n:o,s={x:o.x-l.x,y:o.y-l.y};e.prevCoordsRef.current=o;const i=t=>{if(!e.scrollElementRef||!e.objectsWrapperRef)return;let r=0;const n="x"===t?"movementX"in e.mouseEvent?e.mouseEvent.movementX:s.x:"movementY"in e.mouseEvent?e.mouseEvent.movementY:s.y,o=e.scrollElementRef;if("thumb"===e.clicked){const s=e.objectsWrapperRef,i=getComputedStyle(s),c="x"===t?o.clientWidth:o.clientHeight,a="x"===t?o.clientWidth-e.scrollBarEdge[0]:o.clientHeight-e.scrollBarEdge[1],u="x"===t?s.clientWidth+parseFloat(i.marginLeft)+parseFloat(i.marginRight):s.clientHeight+parseFloat(i.marginTop)+parseFloat(i.marginBottom),d=a-e.thumbSize,m=u-c;if(0>=d||0>=m)return;const h=n*(m/d)+l.leftover,p=Math.trunc(h),f=h-p;e.prevCoordsRef.current.leftover=f,r=p}else r=-n;"x"===t?(o.scrollLeft+=r,e.scrollStateRef.targetScrollX=o.scrollLeft):(o.scrollTop+=r,e.scrollStateRef.targetScrollY=o.scrollTop)},c=t=>{const r=e.objectsWrapperRef;if(!r)return;const n="slider"===e.type&&"wrapp"===e.clicked?-1:1,o=s[t]*n,l="x"===t?e.sizeLocal[0]:e.sizeLocal[1],i="x"===t?r.offsetWidth:r.offsetHeight,c="x"===t?e.scrollElementRef.scrollLeft:e.scrollElementRef.scrollTop;e.numForSliderRef.current+=Math.abs(o),e.numForSliderRef.current>6&&!e.isScrollingRef.current&&(o>0&&i>c+l?e.smoothScroll(c+l,t,e.duration):0>o&&c>0&&e.smoothScroll(c-l,t,e.duration),e.numForSliderRef.current=0)},a=t=>{"thumb"===e.clicked?i(t):"wrapp"===e.clicked?"slider"===e.type?c(t):i(t):"slider"===e.clicked&&c(t)};"hybrid"===e.direction?"wrapp"===e.clicked?(a("x"),a("y")):e.axisFromAtr&&a(e.axisFromAtr):a(e.direction||"y")}function v(e){if(e.controller.abort(),document.body.style.removeProperty("cursor"),["thumb","slider"].includes(e.clicked)&&e.mouseOnEl(e.scrollBar),"wrapp"===e.clicked&&e.mouseOnEl(e.objectsWrapperRef),e.clickedObject.current="none",e.scrollBarOnHover){let t=e.mouseEvent.target,r=!1;for(;t&&t!==document.body;){if(t===e.scrollContentRef){r=!0;break}t=t.parentNode}r||e.mouseOnRefHandle(e.mouseEvent)}e.prevCoordsRef.current=null,e.triggerUpdate()}let x=0;const E={timeout:{tasks:[],timer:null},requestFrame:{tasks:[],rafId:null}},j={timeout:{scheduleNext(){const{tasks:e}=E.timeout;if(null!==E.timeout.timer&&(clearTimeout(E.timeout.timer),E.timeout.timer=null),0===e.length)return;const t=e[0],r=performance.now(),n=Math.max(0,t.runAt-r);E.timeout.timer=window.setTimeout((()=>{const t=performance.now(),r=[];for(;e.length&&e[0].runAt<=t;)r.push(e.shift());r.forEach((e=>e.callback())),j.timeout.scheduleNext()}),n)},clearAll(){null!==E.timeout.timer&&(clearTimeout(E.timeout.timer),E.timeout.timer=null),E.timeout.tasks=[]}},requestFrame:{scheduleNext(){const{tasks:e}=E.requestFrame;if(null!==E.requestFrame.rafId)return;if(0===e.length)return;const t=()=>{E.requestFrame.rafId=null;const r=performance.now(),n=[];for(;e.length&&e[0].runAt<=r;)n.push(e.shift());n.forEach((e=>e.callback())),e.length>0&&(E.requestFrame.rafId=requestAnimationFrame(t))};E.requestFrame.rafId=requestAnimationFrame(t)},clearAll(){null!==E.requestFrame.rafId&&(cancelAnimationFrame(E.requestFrame.rafId),E.requestFrame.rafId=null),E.requestFrame.tasks=[]}}},w=(e,t,r)=>{const n="task_"+x++,o="string"==typeof t?"requestFrame":"timeout";E[o].tasks=E[o].tasks.filter((e=>e.id!==n));const l="requestFrame"===o?performance.now():performance.now()+t,s={id:n,callback:e,runAt:l};let i=E[o].tasks.length;for(;i>0&&E[o].tasks[i-1].runAt>s.runAt;)i--;return E[o].tasks.splice(i,0,s),j[o].scheduleNext(),n},O=e=>{e&&("grab"===e.style.cursor?(e.style.cursor="grabbing",e.classList.add("active")):"grabbing"===e.style.cursor&&(e.style.cursor="grab",e.classList.remove("active")))},k="wrap-id",S=({className:n,children:s,type:c="scroll",direction:u="y",scrollPosition:x,onScrollValue:E,isScrolling:S,size:R,objectsSize:M,crossCount:A,gap:z,wrapperMargin:C,wrapperMinSize:T,wrapperAlign:F,elementsAlign:L,elementsDirection:N="row",edgeGradient:I,progressTrigger:q={wheel:!0},progressReverse:B=!1,scrollBarOnHover:$=!1,scrollBarEdge:W,render:X,emptyElements:Y,suspending:H=!1,fallback:P})=>{var D,K,V,U,_,G;const J=function(){const e=t(null);return null===e.current&&(e.current=""+l++),e.current}();if(!R)throw Error(`Prop "size" is not provided\nMorphScroll〈♦${J}〉`);Object.keys(q).length;const[Q,Z]=e.useState(0),ee=()=>{Z((e=>"number"==typeof e&&1e3>e?e+1:0))},te=e.useRef(null),re=e.useRef(null),ne=e.useRef(null),oe=e.useRef(null),le=e.useRef([]),se=e.useRef(null),ie=e.useRef("none"),ce=e.useRef({loaded:[],empty:[]}),ae=e.useRef({targetScrollY:0,targetScrollX:0,animating:!1,animationFrameId:0}),ue=e.useRef(!1),de=e.useRef(0),me=e.useRef(null),he=e.useRef(!1);function pe(){return e.useRef({width:0,height:0})}const fe=pe(),ge=pe(),ye=pe(),[be,ve,xe,Ee,je,we,Oe,ke,Se,Re,Me]=function(...e){return e.map(y)}(null==x?void 0:x.value,X,R,M,Y,T,F,z,q,ce.current.empty,W),Ae=e.useMemo((()=>{var e,t;return{value:"number"==typeof(null==x?void 0:x.value)||"string"==typeof(null==x?void 0:x.value)?[x.value,x.value]:null!==(e=null==x?void 0:x.value)&&void 0!==e?e:[null],duration:null!==(t=null==x?void 0:x.duration)&&void 0!==t?t:200}}),[be,null==x?void 0:x.duration]),ze={color:null,size:40},Ce=e.useMemo((()=>"object"==typeof I?Object.assign(Object.assign({},ze),I):ze),[I]),Te=e.useMemo((()=>Object.assign(Object.assign({},ze),"object"==typeof q.arrows?q.arrows:{})),[Se]),Fe=e.useCallback((t=>{if(null==t)return[];if(e.isValidElement(t)){const r=t;return r.type===e.Fragment?e.Children.toArray(r.props.children).flatMap(Fe):[r]}return[t]}),[]),Le=e.useMemo((()=>e.Children.toArray(s).flatMap(Fe).map((t=>e.isValidElement(t)&&t.key?t.key+"":null)).filter((e=>null!==e)).filter((e=>{var t;return"clear"!==(null==Y?void 0:Y.mode)||!(null===(t=ce.current.empty)||void 0===t?void 0:t.includes(e))}))),[s,Fe,je,Re]),[Ne,Ie,qe,Be]=C?r(C):[0,0,0,0],$e=Ne+qe,We=Be+Ie,[Xe,Ye]=e.useMemo((()=>{var e,t;return"number"==typeof z?[z,z]:Array.isArray(z)?[null!==(e=z[1])&&void 0!==e?e:0,null!==(t=z[0])&&void 0!==t?t:0]:[0,0]}),[z]),He=e.useMemo((()=>r((null==X?void 0:X.rootMargin)||0,"x"===u)),[ve,u]),[Pe,De]=He?[He[2],He[0]]:[0,0],Ke=e.useMemo((()=>{const[e,t]=Array.isArray(R)?R:"number"==typeof R?[R,R]:[fe.current.width,fe.current.height];if(!q.arrows||!Te.size)return[e,t,e,t];const r=2*Te.size;let n=e,o=t;return"x"===u?n=e-r:"y"===u?o=t-r:"hybrid"===u&&(n=e-r,o=t-r),[n,o,e,t]}),[xe,Se,u,Te.size,fe.current.height,fe.current.width]),Ve="x"===u?Ke[0]:Ke[1],Ue=e.useMemo((()=>{let e;if("number"==typeof W){const t=2*W;e=[t,t]}else e=Array.isArray(W)?[W[0]?2*W[0]:0,W[1]?2*W[1]:W[0]?2*W[0]:0]:[0,0];return e}),[Me]),_e=e.useMemo((()=>[Ke[0]-Ue[0],Ke[1]-Ue[1]]),[Ue.join(),Ke[0],Ke[1]]),Ge="x"===u?_e[0]:_e[1],Je=e.useMemo((()=>M?Array.isArray(M)?M:r(M,!0,2):[null,null]),[Ee]),Qe=e.useMemo((()=>{const e=(e,t)=>"number"==typeof e?e:"firstChild"===e?t:0;return[e(Je[0]&&"none"!==Je[0]&&"size"!==Je[0]?Je[0]:"y"===u&&"none"!==Je[0]||"size"===Je[0]?Ke[0]:0,ye.current.width),e(Je[1]&&"none"!==Je[1]&&"size"!==Je[1]?Je[1]:"x"===u&&"none"!==Je[1]||"size"===Je[1]?Ke[1]:0,ye.current.height)]}),[Je.join(),u,ye.current.width,ye.current.height,Ke.join()]),Ze=e.useMemo((()=>{const e="x"===u,t="row"===N,r="column"===N,n=e?Ke[1]:Ke[0],o=e?Qe[1]+Ye:Qe[0]+Xe,l="hybrid"===u?o*(Le.length+1)-o:n,s=Math.floor(l/o)||1,i=A&&s>=A?"hybrid"===u?Math.ceil(s/A):A:s,c=i>1&&i<Le.length?Math.ceil(Le.length/i):i>Le.length?1:Le.length,a=A&&A<Le.length,d=e=>Number.isFinite(e)&&e>0?e:1;if("hybrid"===u){const e=a?t?A:i:t?Le.length:1,n=a?r?A:i:r?Le.length:1;return[d(e),d(n)]}return[d(i),d(c)]}),[N,Ye,Xe,Qe.join(),Le.length,u,Ke.join(),A]),et=e.useMemo((()=>{const e=Ze[0]?Ze[0]*Ye-Ye:0,t="x"===u?Ze[1]:Ze[0];return Qe[0]?(Qe[0]+Ye)*t-Ye:(null==X?void 0:X.type)?ye.current.width+e:ge.current.width}),[u,Qe[0],Ze.join(),Ye,ge.current.width,ye.current.width,null==X?void 0:X.type]),tt=e.useMemo((()=>{const e=1>Ze[1]?1:Ze[0]*Xe-Xe;return Qe[1]?"x"===u?(Qe[1]+Xe)*Ze[0]-Xe:(Qe[1]+Xe)*Ze[1]-Xe:(null==X?void 0:X.type)?ye.current.height+e:ge.current.height}),[u,Qe[1],Ze.join(),Xe,ge.current.height,ye.current.height,null==X?void 0:X.type]),rt=e.useMemo((()=>tt+$e),[tt,$e]),nt=e.useMemo((()=>et+We),[et,We]),ot="x"===u?nt:rt,lt="x"===u?(null===(D=ne.current)||void 0===D?void 0:D.scrollLeft)||0:(null===(K=ne.current)||void 0===K?void 0:K.scrollTop)||0,st=lt>1&&!0,it=ot>Math.round(lt+Ve);let ct=!1,at=!1;"hybrid"===u&&(ct=((null===(V=ne.current)||void 0===V?void 0:V.scrollLeft)||0)>1&&!0,at=Math.round(((null===(U=ne.current)||void 0===U?void 0:U.scrollLeft)||0)+Ke[0])<nt);const ut=e.useMemo((()=>{if(!q.progressElement||!ot)return 0;const e=Math.round(Ge/ot*Ge);return!Number.isFinite(e)||0>e?0:e}),[Ge,ot,q.progressElement]),dt=e.useMemo((()=>{if(!q.progressElement)return 0;const e=Math.round(_e[0]/nt*_e[0]);return!Number.isFinite(e)||0>e?0:e}),[_e[0],nt,q.progressElement]),mt=e.useMemo((()=>Ve?ot-Ve:ot),[ot,Ve]),ht=e.useMemo((()=>Ke[0]?nt-Ke[0]:nt),[nt,Ke[0]]),pt=e.useCallback((()=>{if(!(null==X?void 0:X.type)||1>=Ze[0])return[];const e=Array.from({length:Le.length},((e,t)=>t)),t=Array.from({length:Ze[0]},(()=>[])),r="x"===u&&"column"===N||"x"!==u&&"row"===N;return e.forEach((e=>{const n=r?e%Ze[0]:Math.floor(e/Ze[1]);t[n]&&t[n].push(e)})),t}),[Le.length,Ze.join(),null==X?void 0:X.type,N,u]),ft=e.useMemo((()=>{if(!(null==X?void 0:X.type))return[{elementTop:0,elementBottom:0,left:0,right:0}];let e=[],t=0;if(L){const r=Array.from({length:Le.length},((e,t)=>t)),n=Math.abs(Math.floor(Le.length/Ze[0])*Ze[0]-Le.length);e=n?r.slice(-n):[],"center"===L?t=(Qe[0]+Ye)*(Ze[0]-n)/2:"end"===L&&(t=(Qe[0]+Ye)*(Ze[0]-n))}return Le.map(((r,n)=>{const o=function(e,t){for(let r=0;r<t.length;r++){const n=t[r].indexOf(e);if(-1!==n)return["x"===u?n:r,["hybrid","y"].includes(u)?n:r]}return[0,0]}(n,pt()),l=e.length>0&&e.includes(n)?t:0,s=function(e){const t="x"===u?l:0;return e>0?t+(Qe[1]+Xe)*e:t}(Ze[0]>1||["hybrid","x"].includes(u)?o[1]:n),i=Qe[1]?s+Qe[1]:s,c=function(e){const t="x"===u?0:l;return e>0?t+(Qe[0]+Ye)*e:t}(1===Ze[0]&&"x"===u?n:o[0]);return{elementTop:s,elementBottom:i,left:c,right:c+Qe[0]}}))}),[u,Ze[0],Qe.join(),Xe,Ye,null==X?void 0:X.type,N,L,pt,Le.join()]),gt=e.useMemo((()=>(null==Ke?void 0:Ke.length)&&F?function(e,t,r,n){const[o,l="start"]="string"==typeof e?[e,e]:e,s={display:"flex"};return t[0]>r&&(s.justifyContent=f(o)),t[1]>n&&(s.alignItems=f(l)),s}(F,Ke,nt,rt):{}),[F,Ke.join(),rt,nt]),yt=e.useMemo((()=>[m(nt,Ke[0]),m(rt,Ke[1])]),[nt,rt,Ke.join()]),bt=e.useMemo((()=>"x"===u?yt[0]:yt[1]),[u,yt[0],yt[1]]),vt=e.useCallback(g(fe,ee),[fe.current.height,fe.current.width]),xt=e.useCallback(g(ge,ee,We,$e),[ge.current.height,ge.current.width,We,$e]),Et=e.useCallback(g(ye,ee),[ye.current.height,ye.current.width]),jt=e.useCallback(((e,t,r,n)=>{const o=ne.current;return o?function(e,t,r,n,o){let l;if(!t&&!n)return null;const s=performance.now(),i=t.scrollTop,c=t.scrollLeft,a=u=>{const d=Math.min((u-s)/r,1);"y"===e?t.scrollTop=i+(n-i)*d:"x"===e&&(t.scrollLeft=c+(n-c)*d),1>d?l=requestAnimationFrame(a):null==o||o()};return l=requestAnimationFrame(a),()=>cancelAnimationFrame(l)}(t,o,r,e,n):null}),[]),wt=e.useCallback(((e,t,r)=>{if(se.current){if(se.current!==Le[0])return void(se.current=Le[0])}else se.current=Le[0];const n=jt(t,e,Ae.duration);n&&r.push(n)}),[Le[0],Ae.duration,jt]),Ot=e.useMemo((()=>{const e=Object.assign(Object.assign(Object.assign(Object.assign({margin:C?`${Ne}px ${Ie}px ${qe}px ${Be}px`:"",height:Je[1]&&"none"!==Je[1]?tt+"px":"fit-content",width:Je[0]&&"none"!==Je[0]?et+"px":"fit-content"},q.content&&{cursor:"grab"}),z&&!(null==X?void 0:X.type)&&{gap:`${Xe}px ${Ye}px`}),T&&function(e,t,r,n,o){const l=(e,t)=>"full"===e?("x"===t?r[0]:r[1])-("x"===t?n:o):e;if("hybrid"!==t&&!Array.isArray(e)){const r=l(e,t)+"px";return"x"===t?{minWidth:r}:{minHeight:r}}let s,i;return Array.isArray(e)?[s,i]=e:s=i=e,{minWidth:l(s,"x")+"px",minHeight:l(i,"y")+"px"}}(T,u,Ke,We,$e)),F&&{flexShrink:0});if(null==X?void 0:X.type)return Object.assign(Object.assign({},e),{position:"relative"});const t=Je[1]?"wrap":void 0,r=1===Ze[0]?"y"===u?"column":"row":N;return Object.assign(Object.assign({},e),{display:"flex",flexDirection:r,flexWrap:t,justifyContent:f(L)})}),[C,Oe,we,[Ne,Ie,qe,Be,We,$e,Xe,Ye].join(),Ke.join(),ke,Je[1],tt,et,q.content,ke,null==X?void 0:X.type,u,Ze[0],N,L]),kt=e.useCallback((e=>{if(!$)return;const t=()=>((e,t,r)=>{e&&e.querySelectorAll(".ms-bar").forEach(((e,t)=>{const n=e;["mouseleave","mouseup","touchend"].includes(r.type)?(n.style.opacity="0",n.classList.remove("hover"),n.classList.add("leave"),w((()=>n.classList.remove("leave")),200)):(n.style.opacity="1",n.classList.add("hover"))}))})(re.current,0,e);"mouseleave"===e.type?!["thumb","slider","wrapp"].includes(ie.current)&&t():t()}),[$]),St=e.useCallback(((e,t="mousedown",r)=>{const n=e||("scroll"===c?"thumb":"slider");if("wrapp"===e&&!q.content||["thumb","slider"].includes(n)&&!q.progressElement)return;p(c,te.current,le);let o=null;r&&(o=r.getAttribute("data-direction")),function(e){const t=new AbortController,{signal:r}=t;e.clickedObject.current=e.clicked,e.triggerUpdate(),"mousedown"===e.eventType?(["thumb","slider"].includes(e.clicked)&&e.mouseOnEl(e.scrollBar),"wrapp"===e.clicked&&e.mouseOnEl(e.objectsWrapperRef),document.addEventListener("mousemove",(t=>b(Object.assign(Object.assign({},e),{mouseEvent:t}))),{signal:r}),document.addEventListener("mouseup",(r=>v(Object.assign(Object.assign({},e),{mouseEvent:r,controller:t}))),{signal:r})):"touchstart"===e.eventType&&(document.addEventListener("touchmove",(t=>{t.preventDefault(),b(Object.assign(Object.assign({},e),{mouseEvent:t}))}),{signal:r,passive:!1}),document.addEventListener("touchend",(r=>v(Object.assign(Object.assign({},e),{mouseEvent:r,controller:t}))),{signal:r})),document.body.style.cursor="grabbing"}({eventType:t,scrollElementRef:ne.current,objectsWrapperRef:oe.current,scrollBar:r||null,clickedObject:ie,scrollContentRef:re.current,scrollStateRef:ae.current,type:c,scrollBarOnHover:$,mouseOnEl:O,mouseOnRefHandle:kt,triggerUpdate:ee,direction:u,smoothScroll:jt,sizeLocal:[Ke[0],Ke[1]],clicked:n,numForSliderRef:de,isScrollingRef:ue,prevCoordsRef:me,thumbSize:"x"===o?dt:ut,axisFromAtr:o,duration:Ae.duration,scrollBarEdge:Ue})}),[u,c,q.content,q.progressElement,Ke.join(),ut,dt,Ae.duration,jt,kt,$,Ue.join()]),Rt=e.useCallback((e=>{St(null,e.type,e.target)}),[St]),Mt=e.useCallback((()=>{St("wrapp")}),[St]),At=e.useCallback((e=>{ne.current&&(({arrowType:e,scrollElement:t,wrapSize:r,scrollSize:n,smoothScroll:o,duration:l})=>{const s=r[0],i=r[1],c=t.scrollTop,a=t.scrollLeft,u=["top","bottom"].includes(e)?i:s,d=(e,t)=>o(h(e,0,u),t,l);"top"===e&&c>0?d(c-n[1],"y"):"left"===e&&a>0&&d(a-n[0],"x"),"bottom"===e&&c+n[1]!==i?d(c+n[1],"y"):"right"===e&&a+n[0]!==s&&d(a+n[0],"x")})({arrowType:e,scrollElement:ne.current,wrapSize:[nt,rt],scrollSize:Ke,smoothScroll:jt,duration:Ae.duration})}),[Ke.join(),nt,rt,Ae.duration,jt]),zt=e.useCallback((()=>{p(c,te.current,le);const e=ne.current;re.current&&e&&0!==le.current.length&&((e,t,r,n)=>{!function(){var o,l,s,i;const c=null!==(l=null===(o=t[0])||void 0===o?void 0:o.querySelectorAll(".ms-slider-element"))&&void 0!==l?l:[],a=null!==(i=null===(s=t[1])||void 0===s?void 0:s.querySelectorAll(".ms-slider-element"))&&void 0!==i?i:[];function u(e,t,r,n){const o="x"===n?r.scrollLeft:r.scrollTop;e.forEach(((e,r)=>{const l="x"===n?t[0]:t[1];o>=l*r&&l*(r+1)>o?e.classList.add("active"):e.classList.remove("active")}))}c.length>0&&u(c,r,e,n),a.length>0&&u(a,r,e,"x")}()})(e,le.current,Ke,u)}),[Ke.join(),u,ne,re,c]),Ct=e.useCallback((()=>{te.current&&((e,t,r,n)=>{const{allIds:o,emptyKeysRaw:l}=(()=>{const t=[],r=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:e=>e instanceof Element&&e.hasAttribute(k)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});let o=n.nextNode();for(;o;){const e=o,l=e.getAttribute(k);l&&(t.push(l),0===e.children.length&&r.push(l)),o=n.nextNode()}return{allIds:t,emptyKeysRaw:r}})(),s=new Set(t.current.loaded);o.forEach((e=>s.add(e)));let i=null;if(t.current.empty){const e=new Set(t.current.empty);l.forEach((t=>e.add(t))),i=Array.from(e)}t.current={loaded:"lazy"===n?Array.from(s):o.map((e=>e)),empty:i},r()})(te.current,ce,ee,null==X?void 0:X.type)}),[ve]),Tt=e.useCallback((e=>{(null==Y?void 0:Y.clickTrigger)&&((e,t,r)=>{const n=e.target;if(!n.closest(t.selector))return;const o=n.closest(`[${k}]`);o&&o.classList.add("remove"),w((()=>{o&&o.classList.remove("remove"),r()}),t.delay||0)})(e,Y.clickTrigger,Ct)}),[je,Ct]),Ft=e.useCallback((()=>{const e=ne.current;e&&(null==E||E(e.scrollLeft,e.scrollTop),ue.current=!0,null==S||S(!0),w((()=>{ue.current=!1,null==S||S(!1),Ct()}),200),"slider"===c&&w((()=>zt()),33),ee())}),[E,S,c,zt,Ct]),Lt=h(lt/mt*(Ge-ut),0,Ge-ut),Nt=h(((null===(_=ne.current)||void 0===_?void 0:_.scrollLeft)||0)/ht*(_e[0]-_e[0]/nt*_e[0]),0,_e[0]-dt),It=e.useCallback((e=>{const t="object"==typeof q.wheel&&"string"==typeof q.wheel.changeDirectionKey?q.wheel.changeDirectionKey:"KeyX";e.code!==t||"hybrid"!==u||he.current||(e.stopPropagation(),he.current=!0,ee())}),[u,JSON.stringify(q.wheel)]),qt=e.useCallback((e=>{he.current&&(e.stopPropagation(),he.current=!1,ee())}),[]);e.useEffect((()=>{(Y||(null==X?void 0:X.type))&&(Y||null===ce.current.empty||(ce.current.empty=null),Ct())}),[je,null==X?void 0:X.type,Ct]),e.useEffect((()=>{const e=ae.current.animationFrameId;return((null==X?void 0:X.type)||S)&&S&&(S(!1),ee()),zt(),()=>{e&&cancelAnimationFrame(e),["timeout"].forEach((e=>j[e].clearAll()))}}),[]),e.useEffect((()=>{const e=ne.current;if(!e)return;const t=e=>e.preventDefault(),r="hybrid"===u&&"object"==typeof q.wheel&&q.wheel.changeDirection?"x":u,n="hybrid"===u&&tt+$e<=Ke[1]||he.current?["hybrid","y"].includes(r)?"x":"y":r,o=q.wheel?e=>{t(e),function(e,t,r){const n=e.target.closest(".ms-element");n.matches(":focus")||n.focus(),t.animating||(t.targetScrollX=n.scrollLeft,t.targetScrollY=n.scrollTop),"x"===r?t.targetScrollX=h(t.targetScrollX+e.deltaY,0,n.scrollWidth-n.clientWidth+2):t.targetScrollY=h(t.targetScrollY+e.deltaY,0,n.scrollHeight-n.clientHeight+2),t.animating||(t.animating=!0,t.animationFrameId=requestAnimationFrame((function e(){let o=0;"x"===r?(n.scrollLeft+=.4*(t.targetScrollX-n.scrollLeft),o=Math.abs(n.scrollLeft-t.targetScrollX)):(n.scrollTop+=.4*(t.targetScrollY-n.scrollTop),o=Math.abs(n.scrollTop-t.targetScrollY)),o>2.5?t.animationFrameId=requestAnimationFrame(e):(t.animating=!1,null!==t.animationFrameId&&(cancelAnimationFrame(t.animationFrameId),t.animationFrameId=null))})))}(e,ae.current,n)}:t;return e.addEventListener("wheel",o,{passive:!1}),()=>{e.removeEventListener("wheel",o)}}),[u,JSON.stringify(q.wheel),tt,Ke[1],$e,he.current]),e.useEffect((()=>{if(!Ae.value)return;const e=[];return("hybrid"===u?["x","y"]:[u]).forEach((t=>{const r="x"===t?0:1;"end"===Ae.value[r]&&wt(t,"x"===t?ht:mt,e)})),()=>{e.forEach((e=>e()))}}),[u,Ae.value.join(),be,mt,ht,nt,rt]),e.useEffect((()=>{if(!Ae.value)return;const e=[];return("hybrid"===u?["x","y"]:[u]).forEach((t=>{const r="x"===t?0:1;"number"==typeof Ae.value[r]&&wt(t,Ae.value[r],e)})),()=>{e.forEach((e=>e()))}}),[be,null==x?void 0:x.updater,u,wt,Ae.value.join()]);const Bt=e.useCallback(((t,r,n,o)=>{var l;const s=Object.assign({width:Qe[0]?Qe[0]+"px":void 0,height:Qe[1]?Qe[1]+"px":void 0},(null==X?void 0:X.type)&&Object.assign({position:"absolute",top:r+"px",left:n+"px"},!Qe[0]&&1===Ze[0]&&{transform:"translateX(-50%)"})),i=H?e.createElement(e.Suspense,{fallback:P},o):o,c=(null===(l=null==Y?void 0:Y.clickTrigger)||void 0===l?void 0:l.selector)&&Tt;return e.createElement("div",Object.assign({key:t},X||Y?{[k]:""+t}:{},{className:"ms-object-box",style:s,onClick:c}),i)}),[H,!!P,Qe.join(),ve,je,Ze[0],Tt]),$t=e.createElement("div",{className:"ms-objects-wrapper",ref:oe,onMouseDown:Mt,style:Ot},Le.map(((t,r)=>{var n,l,i;const c=e.Children.toArray(s).find((r=>e.isValidElement(r)&&r.key===t)),a=(null==X?void 0:X.stopLoadOnScroll)&&ue.current&&!ce.current.loaded.includes(""+t)?P:(null===(n=ce.current.empty)||void 0===n?void 0:n.includes(t))?"object"==typeof(null==Y?void 0:Y.mode)?Y.mode.fallback:P:c,d="number"==typeof Je[0]&&"number"==typeof Je[1]||"firstChild"!==Je[0]&&"firstChild"!==Je[1]||0!==r?a:e.createElement(o,{onResize:Et},a);if(!(null==X?void 0:X.type))return Bt(t,0,0,d);{const{elementTop:e,elementBottom:n,left:o,right:s}=ft[r],c="x"===u?Pe:De,a=Ve+c>("x"===u?o:e)-lt&&("x"===u?s:n)-lt>0-c,m="hybrid"!==u||Ke[0]+Pe>o-((null===(l=ne.current)||void 0===l?void 0:l.scrollLeft)||0)&&s-((null===(i=ne.current)||void 0===i?void 0:i.scrollLeft)||0)>0-Pe;if(a&&m)return Bt(t,e,o,d)}}))),Wt=[{positionType:"x"===u?"left":"top",visibility:st},{positionType:"x"===u?"right":"bottom",visibility:it},..."hybrid"===u?[{positionType:"left",visibility:ct},{positionType:"right",visibility:at}]:[]],Xt=e.createElement("div",{"morph-scroll":`〈♦${J}〉`,className:n,ref:te,style:{width:Ke[2]+"px",height:Ke[3]+"px"}},e.createElement("div",{className:"ms-content",ref:re,onMouseEnter:kt,onMouseLeave:kt,onTouchStart:kt,onTouchEnd:kt,style:Object.assign({position:"relative",width:Ke[0]+"px",height:Ke[1]+"px"},q.arrows&&Te.size&&("x"===u?{left:Te.size+"px"}:"y"===u?{top:Te.size+"px"}:{top:Te.size+"px",left:Te.size+"px"}))},e.createElement("div",{className:"ms-element",ref:ne,onScroll:Ft,onKeyDown:It,onKeyUp:qt,style:Object.assign(Object.assign(Object.assign({width:"100%",height:"100%",outline:"none"},gt),{overflow:null!==(G={x:nt>Ke[0]?"scroll hidden":"hidden",y:rt>Ke[1]?"hidden scroll":"hidden",hybrid:`${nt>Ke[0]?"scroll":"hidden"} ${rt>Ke[1]?"scroll":"hidden"}`,hide:"hidden"}[q.wheel||q.content?u:"hide"])&&void 0!==G?G:"hidden"}),"scroll"!==c||"boolean"!=typeof q.progressElement||!1===q.progressElement?{scrollbarWidth:"none"}:{})},Qe[0]&&Qe[1]?$t:e.createElement(o,{onResize:xt,style:Object.assign({},gt)},$t)),I&&Wt.map((({positionType:t,visibility:r})=>e.createElement(a,{key:"edge-"+t,edgeGradient:Ce,visibility:r,edgeType:t}))),q.progressElement&&!0!==q.progressElement&&[{shouldRender:ot>ut,direction:u,thumbSize:ut,thumbSpace:Lt,objLengthPerSize:bt,progressReverseIndex:0},{shouldRender:"hybrid"===u&&nt>dt,direction:"x",thumbSize:dt,thumbSpace:Nt,objLengthPerSize:yt[0],progressReverseIndex:1}].filter((({shouldRender:e})=>e)).map((t=>e.createElement(i,{key:t.direction,type:c,direction:t.direction,progressReverse:"boolean"==typeof B?B:B[t.progressReverseIndex],size:_e,progressTrigger:q,scrollBarOnHover:$,scrollBarEvent:"sliderMenu"===c?jt:Rt,thumbSize:t.thumbSize,thumbSpace:t.thumbSpace,objLengthPerSize:t.objLengthPerSize,sliderCheckLocal:zt,duration:Ae.duration})))),q.arrows&&Wt.map((({positionType:t,visibility:r})=>e.createElement(d,{key:"arrow-"+t,activity:r,arrows:Te,arrowType:t,handleArrow:At,size:"hybrid"===u?Ke[0]+2*Te.size:Ke[0]}))));return"auto"===R?e.createElement(o,{measure:"outer",onResize:vt},Xt):Xt};S.displayName="MorphScroll";const R={MorphScroll:S,ResizeTracker:o,IntersectionTracker:n};export{n as IntersectionTracker,S as MorphScroll,o as ResizeTracker,R as default};
|
package/package.json
CHANGED
package/types/morphScroll.d.ts
CHANGED
|
@@ -316,7 +316,6 @@ type MorphScrollT = {
|
|
|
316
316
|
* @note
|
|
317
317
|
* - *`progressElement` can be thumb or slider, use props `type`*
|
|
318
318
|
* - *If `progressElement` is true and `type` is "scroll", the default browser scroll element will be used*
|
|
319
|
-
* - *`arrows` can be designed with their className or you can provide a custom element*
|
|
320
319
|
*
|
|
321
320
|
* @example
|
|
322
321
|
* ```tsx
|
|
@@ -328,14 +327,16 @@ type MorphScrollT = {
|
|
|
328
327
|
* ```
|
|
329
328
|
*/
|
|
330
329
|
progressTrigger: {
|
|
331
|
-
wheel?:
|
|
330
|
+
wheel?:
|
|
331
|
+
| boolean
|
|
332
|
+
| { changeDirection?: boolean; changeDirectionKey?: string };
|
|
332
333
|
content?: boolean;
|
|
333
334
|
progressElement?: boolean | React.ReactNode;
|
|
334
335
|
arrows?: boolean | { size?: number; element?: React.ReactNode };
|
|
335
336
|
};
|
|
336
337
|
/**---
|
|
337
338
|
* 
|
|
338
|
-
* Reverse
|
|
339
|
+
* Reverse your progress bar position.
|
|
339
340
|
* ___
|
|
340
341
|
* @default false
|
|
341
342
|
*
|
|
@@ -354,7 +355,7 @@ type MorphScrollT = {
|
|
|
354
355
|
progressReverse?: boolean | boolean[];
|
|
355
356
|
/**---
|
|
356
357
|
* 
|
|
357
|
-
*
|
|
358
|
+
* Progress bar hover visibility.
|
|
358
359
|
* ___
|
|
359
360
|
* @default false
|
|
360
361
|
*
|
|
@@ -368,6 +369,24 @@ type MorphScrollT = {
|
|
|
368
369
|
* ```
|
|
369
370
|
*/
|
|
370
371
|
scrollBarOnHover?: boolean;
|
|
372
|
+
/**---
|
|
373
|
+
* 
|
|
374
|
+
* Scroll bar margin at its edges.
|
|
375
|
+
* ___
|
|
376
|
+
* @note
|
|
377
|
+
* - *Used when: `type="scroll"`*
|
|
378
|
+
* - *When `direction="hybrid"` you can set an array of values*
|
|
379
|
+
*
|
|
380
|
+
* @example
|
|
381
|
+
* ```tsx
|
|
382
|
+
* <MorphScroll {...props}
|
|
383
|
+
* scrollBarEdge={10}
|
|
384
|
+
* >
|
|
385
|
+
* {children}
|
|
386
|
+
* </MorphScroll>
|
|
387
|
+
* ```
|
|
388
|
+
*/
|
|
389
|
+
scrollBarEdge?: number | number[];
|
|
371
390
|
|
|
372
391
|
// Optimization
|
|
373
392
|
/**---
|