scroll-system 1.1.0 → 1.2.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 +11 -10
- package/dist/components/ScrollLockedView.d.ts +1 -1
- package/dist/components/ScrollLockedView.d.ts.map +1 -1
- package/dist/hooks/useDragHandler.d.ts.map +1 -1
- package/dist/hooks/useTouchHandler.d.ts.map +1 -1
- package/dist/hooks/useWheelHandler.d.ts.map +1 -1
- package/dist/index.js +114 -6
- package/dist/index.mjs +114 -6
- package/dist/store/navigation.store.d.ts.map +1 -1
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -178,6 +178,7 @@ Smart container for long content. Automatically detects overflow and locks navig
|
|
|
178
178
|
| `className` | `string` | `""` | CSS classes |
|
|
179
179
|
| `scrollDirection` | `"vertical"` \| `"horizontal"` | `"vertical"` | Internal scroll direction |
|
|
180
180
|
| `scrollEndThreshold` | `number` | `0.99` | Progress threshold to unlock (0-1) |
|
|
181
|
+
| `scrollResetBehavior` | `ScrollResetBehavior` | `"direction-aware"` | How to reset scroll position on activation |
|
|
181
182
|
| `onScrollProgress` | `(progress: number) => void` | - | Called on internal scroll |
|
|
182
183
|
| `onActivate` | `() => void` | - | Called when view becomes active |
|
|
183
184
|
| `onDeactivate` | `() => void` | - | Called when view becomes inactive |
|
|
@@ -186,6 +187,12 @@ Smart container for long content. Automatically detects overflow and locks navig
|
|
|
186
187
|
| `onExitStart` | `() => void` | - | Called when exit transition starts |
|
|
187
188
|
| `onExitEnd` | `() => void` | - | Called when exit transition ends |
|
|
188
189
|
|
|
190
|
+
**`ScrollResetBehavior` options:**
|
|
191
|
+
- `"direction-aware"` (default): Resets to **start** when navigating down (from above), resets to **end** when navigating up (from below)
|
|
192
|
+
- `"always-start"`: Always reset to the beginning of the scroll
|
|
193
|
+
- `"always-end"`: Always reset to the end of the scroll
|
|
194
|
+
- `"preserve"`: Keep the current scroll position (no reset)
|
|
195
|
+
|
|
189
196
|
**Behavior:**
|
|
190
197
|
- If content fits viewport → Acts like `FullView`
|
|
191
198
|
- If content overflows → **LOCKS** navigation until user scrolls to bottom (99%)
|
|
@@ -529,17 +536,11 @@ Enable 1:1 native-feeling touch interactions:
|
|
|
529
536
|
|
|
530
537
|
## 📱 Mobile Optimization
|
|
531
538
|
|
|
532
|
-
|
|
539
|
+
The `ScrollContainer` **automatically applies** mobile-optimized styles when mounted:
|
|
540
|
+
- `overscroll-behavior: none` - Prevents pull-to-refresh
|
|
541
|
+
- `touch-action: pan-x pan-y` - Ensures proper touch handling
|
|
533
542
|
|
|
534
|
-
|
|
535
|
-
html, body {
|
|
536
|
-
position: fixed;
|
|
537
|
-
width: 100%;
|
|
538
|
-
height: 100%;
|
|
539
|
-
overflow: hidden;
|
|
540
|
-
overscroll-behavior-y: none; /* Prevents pull-to-refresh */
|
|
541
|
-
}
|
|
542
|
-
```
|
|
543
|
+
These styles are automatically removed when the component unmounts.
|
|
543
544
|
|
|
544
545
|
### Fullscreen API (Optional)
|
|
545
546
|
```tsx
|
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
* NO decide si bloquear o no.
|
|
7
7
|
*/
|
|
8
8
|
import type { ScrollLockedViewProps } from "../types";
|
|
9
|
-
export declare function ScrollLockedView({ id, children, className, scrollDirection, scrollEndThreshold, onScrollProgress, onActivate, onDeactivate, onEnterStart, onEnterEnd, onExitStart, onExitEnd, }: ScrollLockedViewProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export declare function ScrollLockedView({ id, children, className, scrollDirection, scrollEndThreshold, scrollResetBehavior, onScrollProgress, onActivate, onDeactivate, onEnterStart, onEnterEnd, onExitStart, onExitEnd, }: ScrollLockedViewProps): import("react/jsx-runtime").JSX.Element;
|
|
10
10
|
//# sourceMappingURL=ScrollLockedView.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollLockedView.d.ts","sourceRoot":"","sources":["../../components/ScrollLockedView.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"ScrollLockedView.d.ts","sourceRoot":"","sources":["../../components/ScrollLockedView.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,qBAAqB,EAAuB,MAAM,UAAU,CAAC;AAE3E,wBAAgB,gBAAgB,CAAC,EAC/B,EAAE,EACF,QAAQ,EACR,SAAc,EACd,eAA4B,EAC5B,kBAAyB,EACzB,mBAAuC,EACvC,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,GACV,EAAE,qBAAqB,2CAkGvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDragHandler.d.ts","sourceRoot":"","sources":["../../hooks/useDragHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB;IACpC,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uCAAuC;IACvC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAC1C,4DAA4D;IAC5D,SAAS,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC;CACzE;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,
|
|
1
|
+
{"version":3,"file":"useDragHandler.d.ts","sourceRoot":"","sources":["../../hooks/useDragHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB;IACpC,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uCAAuC;IACvC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAC1C,4DAA4D;IAC5D,SAAS,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC;CACzE;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,aA6KjE;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTouchHandler.d.ts","sourceRoot":"","sources":["../../hooks/useTouchHandler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,sBAAsB;IACrC,uDAAuD;IACvD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"useTouchHandler.d.ts","sourceRoot":"","sources":["../../hooks/useTouchHandler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,sBAAsB;IACrC,uDAAuD;IACvD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAqCD,wBAAgB,eAAe,CAAC,OAAO,GAAE,sBAA2B,QAoEnE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWheelHandler.d.ts","sourceRoot":"","sources":["../../hooks/useWheelHandler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,wBAAgB,eAAe,
|
|
1
|
+
{"version":3,"file":"useWheelHandler.d.ts","sourceRoot":"","sources":["../../hooks/useWheelHandler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,wBAAgB,eAAe,SA2F9B"}
|
package/dist/index.js
CHANGED
|
@@ -53,7 +53,9 @@ var initialState = {
|
|
|
53
53
|
isAutoScrolling: false,
|
|
54
54
|
isAutoScrollPaused: false,
|
|
55
55
|
// NEW: Infinite scroll
|
|
56
|
-
infiniteScrollEnabled: false
|
|
56
|
+
infiniteScrollEnabled: false,
|
|
57
|
+
// NEW: Last navigation direction
|
|
58
|
+
lastNavigationDirection: null
|
|
57
59
|
};
|
|
58
60
|
var lastNavigationTime = 0;
|
|
59
61
|
var useScrollStore = zustand.create()(
|
|
@@ -199,6 +201,7 @@ var useScrollStore = zustand.create()(
|
|
|
199
201
|
if (targetIndex < 0 || targetIndex >= state.totalViews) return;
|
|
200
202
|
if (targetIndex === state.activeIndex) return;
|
|
201
203
|
set((s) => {
|
|
204
|
+
const navigationDirection = targetIndex > s.activeIndex ? "down" : "up";
|
|
202
205
|
const newViews = s.views.map((v, idx) => {
|
|
203
206
|
const isAdjacent = Math.abs(idx - targetIndex) <= 1 || s.infiniteScrollEnabled && (targetIndex === 0 && idx === s.totalViews - 1 || targetIndex === s.totalViews - 1 && idx === 0);
|
|
204
207
|
return {
|
|
@@ -212,7 +215,8 @@ var useScrollStore = zustand.create()(
|
|
|
212
215
|
isTransitioning: true,
|
|
213
216
|
activeIndex: targetIndex,
|
|
214
217
|
activeId: newViews[targetIndex]?.id ?? null,
|
|
215
|
-
views: newViews
|
|
218
|
+
views: newViews,
|
|
219
|
+
lastNavigationDirection: navigationDirection
|
|
216
220
|
};
|
|
217
221
|
});
|
|
218
222
|
},
|
|
@@ -272,7 +276,9 @@ var selectCanNavigateNext = (state) => {
|
|
|
272
276
|
};
|
|
273
277
|
var selectCanNavigatePrevious = (state) => {
|
|
274
278
|
if (state.isTransitioning || state.isGlobalLocked) return false;
|
|
275
|
-
|
|
279
|
+
const activeView = state.views[state.activeIndex];
|
|
280
|
+
if (!activeView) return false;
|
|
281
|
+
if (state.infiniteScrollEnabled) return true;
|
|
276
282
|
return state.activeIndex > 0;
|
|
277
283
|
};
|
|
278
284
|
var selectGlobalProgress = (state) => state.globalProgress;
|
|
@@ -324,6 +330,24 @@ function useWheelHandler() {
|
|
|
324
330
|
return;
|
|
325
331
|
}
|
|
326
332
|
const normalized = normalizeWheel(event);
|
|
333
|
+
const activeView = state.views[state.activeIndex];
|
|
334
|
+
if (activeView?.capability === "internal") {
|
|
335
|
+
const scrollContainer = document.querySelector(
|
|
336
|
+
`[data-view-type="scroll-locked"][data-active="true"] > div`
|
|
337
|
+
);
|
|
338
|
+
if (scrollContainer) {
|
|
339
|
+
const { scrollTop, scrollHeight, clientHeight } = scrollContainer;
|
|
340
|
+
const maxScroll = scrollHeight - clientHeight;
|
|
341
|
+
const isScrollingDown = normalized.pixelY > 0;
|
|
342
|
+
const isScrollingUp = normalized.pixelY < 0;
|
|
343
|
+
const isAtBottom = scrollTop >= maxScroll - 1;
|
|
344
|
+
const isAtTop = scrollTop <= 1;
|
|
345
|
+
if (isScrollingDown && !isAtBottom || isScrollingUp && !isAtTop) {
|
|
346
|
+
scrollAccumulator.current = 0;
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
327
351
|
const delta = normalized.pixelY;
|
|
328
352
|
scrollAccumulator.current += delta;
|
|
329
353
|
const now = Date.now();
|
|
@@ -350,6 +374,28 @@ function useWheelHandler() {
|
|
|
350
374
|
return () => window.removeEventListener("wheel", handleWheel);
|
|
351
375
|
}, []);
|
|
352
376
|
}
|
|
377
|
+
function canNavigateFromScrollPosition(direction) {
|
|
378
|
+
const state = useScrollStore.getState();
|
|
379
|
+
const activeView = state.views[state.activeIndex];
|
|
380
|
+
if (activeView?.capability !== "internal") {
|
|
381
|
+
return true;
|
|
382
|
+
}
|
|
383
|
+
const scrollContainer = document.querySelector(
|
|
384
|
+
`[data-view-type="scroll-locked"][data-active="true"] > div`
|
|
385
|
+
);
|
|
386
|
+
if (!scrollContainer) {
|
|
387
|
+
return true;
|
|
388
|
+
}
|
|
389
|
+
const { scrollTop, scrollHeight, clientHeight } = scrollContainer;
|
|
390
|
+
const maxScroll = scrollHeight - clientHeight;
|
|
391
|
+
const isAtBottom = scrollTop >= maxScroll - 1;
|
|
392
|
+
const isAtTop = scrollTop <= 1;
|
|
393
|
+
if (direction === "down") {
|
|
394
|
+
return isAtBottom;
|
|
395
|
+
} else {
|
|
396
|
+
return isAtTop;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
353
399
|
function useTouchHandler(options = {}) {
|
|
354
400
|
const { enabled = true } = options;
|
|
355
401
|
const touchStart = react.useRef(null);
|
|
@@ -376,6 +422,10 @@ function useTouchHandler(options = {}) {
|
|
|
376
422
|
Math.abs(deltaY) > NAV_THRESHOLDS.TOUCH && // Threshold distancia
|
|
377
423
|
timeElapsed < 800) {
|
|
378
424
|
const direction = deltaY > 0 ? "down" : "up";
|
|
425
|
+
if (!canNavigateFromScrollPosition(direction)) {
|
|
426
|
+
touchStart.current = null;
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
379
429
|
const intention = {
|
|
380
430
|
type: "navigate",
|
|
381
431
|
direction,
|
|
@@ -584,10 +634,29 @@ function useDragHandler(options = {}) {
|
|
|
584
634
|
const store = useScrollStore.getState();
|
|
585
635
|
const atStart = store.activeIndex === 0;
|
|
586
636
|
const atEnd = store.activeIndex === store.totalViews - 1;
|
|
637
|
+
const activeView = store.views[store.activeIndex];
|
|
587
638
|
const exceedsThreshold = Math.abs(deltaY) > DRAG_THRESHOLD;
|
|
588
639
|
const hasVelocity = velocity > VELOCITY_THRESHOLD;
|
|
589
640
|
const direction = deltaY > 0 ? "down" : "up";
|
|
590
|
-
|
|
641
|
+
let canNavigateInternal = true;
|
|
642
|
+
if (activeView?.capability === "internal") {
|
|
643
|
+
const scrollContainer = document.querySelector(
|
|
644
|
+
`[data-view-type="scroll-locked"][data-active="true"] > div`
|
|
645
|
+
);
|
|
646
|
+
if (scrollContainer) {
|
|
647
|
+
const { scrollTop, scrollHeight, clientHeight } = scrollContainer;
|
|
648
|
+
const maxScroll = scrollHeight - clientHeight;
|
|
649
|
+
const isAtBottom = scrollTop >= maxScroll - 1;
|
|
650
|
+
const isAtTop = scrollTop <= 1;
|
|
651
|
+
if (direction === "down" && !isAtBottom) {
|
|
652
|
+
canNavigateInternal = false;
|
|
653
|
+
}
|
|
654
|
+
if (direction === "up" && !isAtTop) {
|
|
655
|
+
canNavigateInternal = false;
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
const canNavigate = canNavigateInternal && (direction === "down" && !atEnd || direction === "up" && !atStart);
|
|
591
660
|
const shouldNavigate = canNavigate && (exceedsThreshold || hasVelocity);
|
|
592
661
|
onDragEnd?.(shouldNavigate, direction);
|
|
593
662
|
if (shouldNavigate) {
|
|
@@ -1306,6 +1375,7 @@ function ScrollLockedView({
|
|
|
1306
1375
|
className = "",
|
|
1307
1376
|
scrollDirection = "vertical",
|
|
1308
1377
|
scrollEndThreshold = 0.99,
|
|
1378
|
+
scrollResetBehavior = "direction-aware",
|
|
1309
1379
|
onScrollProgress,
|
|
1310
1380
|
onActivate,
|
|
1311
1381
|
onDeactivate,
|
|
@@ -1319,7 +1389,8 @@ function ScrollLockedView({
|
|
|
1319
1389
|
id,
|
|
1320
1390
|
type: "scroll-locked",
|
|
1321
1391
|
scrollDirection,
|
|
1322
|
-
scrollEndThreshold
|
|
1392
|
+
scrollEndThreshold,
|
|
1393
|
+
scrollResetBehavior
|
|
1323
1394
|
},
|
|
1324
1395
|
onActivate,
|
|
1325
1396
|
onDeactivate,
|
|
@@ -1334,6 +1405,43 @@ function ScrollLockedView({
|
|
|
1334
1405
|
scrollDirection,
|
|
1335
1406
|
onScrollProgress
|
|
1336
1407
|
});
|
|
1408
|
+
const wasActive = react.useRef(isActive);
|
|
1409
|
+
const lastNavigationDirection = useScrollStore((s) => s.lastNavigationDirection);
|
|
1410
|
+
react.useEffect(() => {
|
|
1411
|
+
if (isActive && !wasActive.current && scrollRef.current) {
|
|
1412
|
+
const element = scrollRef.current;
|
|
1413
|
+
let targetPosition;
|
|
1414
|
+
switch (scrollResetBehavior) {
|
|
1415
|
+
case "always-start":
|
|
1416
|
+
targetPosition = 0;
|
|
1417
|
+
break;
|
|
1418
|
+
case "always-end":
|
|
1419
|
+
targetPosition = element.scrollHeight - element.clientHeight;
|
|
1420
|
+
break;
|
|
1421
|
+
case "preserve":
|
|
1422
|
+
targetPosition = -1;
|
|
1423
|
+
break;
|
|
1424
|
+
case "direction-aware":
|
|
1425
|
+
default:
|
|
1426
|
+
if (lastNavigationDirection === "down") {
|
|
1427
|
+
targetPosition = 0;
|
|
1428
|
+
} else if (lastNavigationDirection === "up") {
|
|
1429
|
+
targetPosition = element.scrollHeight - element.clientHeight;
|
|
1430
|
+
} else {
|
|
1431
|
+
targetPosition = 0;
|
|
1432
|
+
}
|
|
1433
|
+
break;
|
|
1434
|
+
}
|
|
1435
|
+
if (targetPosition >= 0) {
|
|
1436
|
+
if (scrollDirection === "vertical") {
|
|
1437
|
+
element.scrollTop = targetPosition;
|
|
1438
|
+
} else {
|
|
1439
|
+
element.scrollLeft = targetPosition;
|
|
1440
|
+
}
|
|
1441
|
+
}
|
|
1442
|
+
}
|
|
1443
|
+
wasActive.current = isActive;
|
|
1444
|
+
}, [isActive, lastNavigationDirection, scrollResetBehavior, scrollDirection]);
|
|
1337
1445
|
const scrollClasses = scrollDirection === "vertical" ? "overflow-y-auto overflow-x-hidden" : "overflow-x-auto overflow-y-hidden";
|
|
1338
1446
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1339
1447
|
"section",
|
|
@@ -1341,7 +1449,7 @@ function ScrollLockedView({
|
|
|
1341
1449
|
id,
|
|
1342
1450
|
className: `relative w-full h-screen ${className}`,
|
|
1343
1451
|
"data-view-type": "scroll-locked",
|
|
1344
|
-
"data-active": isActive,
|
|
1452
|
+
"data-active": isActive ? "true" : "false",
|
|
1345
1453
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1346
1454
|
"div",
|
|
1347
1455
|
{
|
package/dist/index.mjs
CHANGED
|
@@ -51,7 +51,9 @@ var initialState = {
|
|
|
51
51
|
isAutoScrolling: false,
|
|
52
52
|
isAutoScrollPaused: false,
|
|
53
53
|
// NEW: Infinite scroll
|
|
54
|
-
infiniteScrollEnabled: false
|
|
54
|
+
infiniteScrollEnabled: false,
|
|
55
|
+
// NEW: Last navigation direction
|
|
56
|
+
lastNavigationDirection: null
|
|
55
57
|
};
|
|
56
58
|
var lastNavigationTime = 0;
|
|
57
59
|
var useScrollStore = create()(
|
|
@@ -197,6 +199,7 @@ var useScrollStore = create()(
|
|
|
197
199
|
if (targetIndex < 0 || targetIndex >= state.totalViews) return;
|
|
198
200
|
if (targetIndex === state.activeIndex) return;
|
|
199
201
|
set((s) => {
|
|
202
|
+
const navigationDirection = targetIndex > s.activeIndex ? "down" : "up";
|
|
200
203
|
const newViews = s.views.map((v, idx) => {
|
|
201
204
|
const isAdjacent = Math.abs(idx - targetIndex) <= 1 || s.infiniteScrollEnabled && (targetIndex === 0 && idx === s.totalViews - 1 || targetIndex === s.totalViews - 1 && idx === 0);
|
|
202
205
|
return {
|
|
@@ -210,7 +213,8 @@ var useScrollStore = create()(
|
|
|
210
213
|
isTransitioning: true,
|
|
211
214
|
activeIndex: targetIndex,
|
|
212
215
|
activeId: newViews[targetIndex]?.id ?? null,
|
|
213
|
-
views: newViews
|
|
216
|
+
views: newViews,
|
|
217
|
+
lastNavigationDirection: navigationDirection
|
|
214
218
|
};
|
|
215
219
|
});
|
|
216
220
|
},
|
|
@@ -270,7 +274,9 @@ var selectCanNavigateNext = (state) => {
|
|
|
270
274
|
};
|
|
271
275
|
var selectCanNavigatePrevious = (state) => {
|
|
272
276
|
if (state.isTransitioning || state.isGlobalLocked) return false;
|
|
273
|
-
|
|
277
|
+
const activeView = state.views[state.activeIndex];
|
|
278
|
+
if (!activeView) return false;
|
|
279
|
+
if (state.infiniteScrollEnabled) return true;
|
|
274
280
|
return state.activeIndex > 0;
|
|
275
281
|
};
|
|
276
282
|
var selectGlobalProgress = (state) => state.globalProgress;
|
|
@@ -322,6 +328,24 @@ function useWheelHandler() {
|
|
|
322
328
|
return;
|
|
323
329
|
}
|
|
324
330
|
const normalized = normalizeWheel(event);
|
|
331
|
+
const activeView = state.views[state.activeIndex];
|
|
332
|
+
if (activeView?.capability === "internal") {
|
|
333
|
+
const scrollContainer = document.querySelector(
|
|
334
|
+
`[data-view-type="scroll-locked"][data-active="true"] > div`
|
|
335
|
+
);
|
|
336
|
+
if (scrollContainer) {
|
|
337
|
+
const { scrollTop, scrollHeight, clientHeight } = scrollContainer;
|
|
338
|
+
const maxScroll = scrollHeight - clientHeight;
|
|
339
|
+
const isScrollingDown = normalized.pixelY > 0;
|
|
340
|
+
const isScrollingUp = normalized.pixelY < 0;
|
|
341
|
+
const isAtBottom = scrollTop >= maxScroll - 1;
|
|
342
|
+
const isAtTop = scrollTop <= 1;
|
|
343
|
+
if (isScrollingDown && !isAtBottom || isScrollingUp && !isAtTop) {
|
|
344
|
+
scrollAccumulator.current = 0;
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
325
349
|
const delta = normalized.pixelY;
|
|
326
350
|
scrollAccumulator.current += delta;
|
|
327
351
|
const now = Date.now();
|
|
@@ -348,6 +372,28 @@ function useWheelHandler() {
|
|
|
348
372
|
return () => window.removeEventListener("wheel", handleWheel);
|
|
349
373
|
}, []);
|
|
350
374
|
}
|
|
375
|
+
function canNavigateFromScrollPosition(direction) {
|
|
376
|
+
const state = useScrollStore.getState();
|
|
377
|
+
const activeView = state.views[state.activeIndex];
|
|
378
|
+
if (activeView?.capability !== "internal") {
|
|
379
|
+
return true;
|
|
380
|
+
}
|
|
381
|
+
const scrollContainer = document.querySelector(
|
|
382
|
+
`[data-view-type="scroll-locked"][data-active="true"] > div`
|
|
383
|
+
);
|
|
384
|
+
if (!scrollContainer) {
|
|
385
|
+
return true;
|
|
386
|
+
}
|
|
387
|
+
const { scrollTop, scrollHeight, clientHeight } = scrollContainer;
|
|
388
|
+
const maxScroll = scrollHeight - clientHeight;
|
|
389
|
+
const isAtBottom = scrollTop >= maxScroll - 1;
|
|
390
|
+
const isAtTop = scrollTop <= 1;
|
|
391
|
+
if (direction === "down") {
|
|
392
|
+
return isAtBottom;
|
|
393
|
+
} else {
|
|
394
|
+
return isAtTop;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
351
397
|
function useTouchHandler(options = {}) {
|
|
352
398
|
const { enabled = true } = options;
|
|
353
399
|
const touchStart = useRef(null);
|
|
@@ -374,6 +420,10 @@ function useTouchHandler(options = {}) {
|
|
|
374
420
|
Math.abs(deltaY) > NAV_THRESHOLDS.TOUCH && // Threshold distancia
|
|
375
421
|
timeElapsed < 800) {
|
|
376
422
|
const direction = deltaY > 0 ? "down" : "up";
|
|
423
|
+
if (!canNavigateFromScrollPosition(direction)) {
|
|
424
|
+
touchStart.current = null;
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
377
427
|
const intention = {
|
|
378
428
|
type: "navigate",
|
|
379
429
|
direction,
|
|
@@ -582,10 +632,29 @@ function useDragHandler(options = {}) {
|
|
|
582
632
|
const store = useScrollStore.getState();
|
|
583
633
|
const atStart = store.activeIndex === 0;
|
|
584
634
|
const atEnd = store.activeIndex === store.totalViews - 1;
|
|
635
|
+
const activeView = store.views[store.activeIndex];
|
|
585
636
|
const exceedsThreshold = Math.abs(deltaY) > DRAG_THRESHOLD;
|
|
586
637
|
const hasVelocity = velocity > VELOCITY_THRESHOLD;
|
|
587
638
|
const direction = deltaY > 0 ? "down" : "up";
|
|
588
|
-
|
|
639
|
+
let canNavigateInternal = true;
|
|
640
|
+
if (activeView?.capability === "internal") {
|
|
641
|
+
const scrollContainer = document.querySelector(
|
|
642
|
+
`[data-view-type="scroll-locked"][data-active="true"] > div`
|
|
643
|
+
);
|
|
644
|
+
if (scrollContainer) {
|
|
645
|
+
const { scrollTop, scrollHeight, clientHeight } = scrollContainer;
|
|
646
|
+
const maxScroll = scrollHeight - clientHeight;
|
|
647
|
+
const isAtBottom = scrollTop >= maxScroll - 1;
|
|
648
|
+
const isAtTop = scrollTop <= 1;
|
|
649
|
+
if (direction === "down" && !isAtBottom) {
|
|
650
|
+
canNavigateInternal = false;
|
|
651
|
+
}
|
|
652
|
+
if (direction === "up" && !isAtTop) {
|
|
653
|
+
canNavigateInternal = false;
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
const canNavigate = canNavigateInternal && (direction === "down" && !atEnd || direction === "up" && !atStart);
|
|
589
658
|
const shouldNavigate = canNavigate && (exceedsThreshold || hasVelocity);
|
|
590
659
|
onDragEnd?.(shouldNavigate, direction);
|
|
591
660
|
if (shouldNavigate) {
|
|
@@ -1304,6 +1373,7 @@ function ScrollLockedView({
|
|
|
1304
1373
|
className = "",
|
|
1305
1374
|
scrollDirection = "vertical",
|
|
1306
1375
|
scrollEndThreshold = 0.99,
|
|
1376
|
+
scrollResetBehavior = "direction-aware",
|
|
1307
1377
|
onScrollProgress,
|
|
1308
1378
|
onActivate,
|
|
1309
1379
|
onDeactivate,
|
|
@@ -1317,7 +1387,8 @@ function ScrollLockedView({
|
|
|
1317
1387
|
id,
|
|
1318
1388
|
type: "scroll-locked",
|
|
1319
1389
|
scrollDirection,
|
|
1320
|
-
scrollEndThreshold
|
|
1390
|
+
scrollEndThreshold,
|
|
1391
|
+
scrollResetBehavior
|
|
1321
1392
|
},
|
|
1322
1393
|
onActivate,
|
|
1323
1394
|
onDeactivate,
|
|
@@ -1332,6 +1403,43 @@ function ScrollLockedView({
|
|
|
1332
1403
|
scrollDirection,
|
|
1333
1404
|
onScrollProgress
|
|
1334
1405
|
});
|
|
1406
|
+
const wasActive = useRef(isActive);
|
|
1407
|
+
const lastNavigationDirection = useScrollStore((s) => s.lastNavigationDirection);
|
|
1408
|
+
useEffect(() => {
|
|
1409
|
+
if (isActive && !wasActive.current && scrollRef.current) {
|
|
1410
|
+
const element = scrollRef.current;
|
|
1411
|
+
let targetPosition;
|
|
1412
|
+
switch (scrollResetBehavior) {
|
|
1413
|
+
case "always-start":
|
|
1414
|
+
targetPosition = 0;
|
|
1415
|
+
break;
|
|
1416
|
+
case "always-end":
|
|
1417
|
+
targetPosition = element.scrollHeight - element.clientHeight;
|
|
1418
|
+
break;
|
|
1419
|
+
case "preserve":
|
|
1420
|
+
targetPosition = -1;
|
|
1421
|
+
break;
|
|
1422
|
+
case "direction-aware":
|
|
1423
|
+
default:
|
|
1424
|
+
if (lastNavigationDirection === "down") {
|
|
1425
|
+
targetPosition = 0;
|
|
1426
|
+
} else if (lastNavigationDirection === "up") {
|
|
1427
|
+
targetPosition = element.scrollHeight - element.clientHeight;
|
|
1428
|
+
} else {
|
|
1429
|
+
targetPosition = 0;
|
|
1430
|
+
}
|
|
1431
|
+
break;
|
|
1432
|
+
}
|
|
1433
|
+
if (targetPosition >= 0) {
|
|
1434
|
+
if (scrollDirection === "vertical") {
|
|
1435
|
+
element.scrollTop = targetPosition;
|
|
1436
|
+
} else {
|
|
1437
|
+
element.scrollLeft = targetPosition;
|
|
1438
|
+
}
|
|
1439
|
+
}
|
|
1440
|
+
}
|
|
1441
|
+
wasActive.current = isActive;
|
|
1442
|
+
}, [isActive, lastNavigationDirection, scrollResetBehavior, scrollDirection]);
|
|
1335
1443
|
const scrollClasses = scrollDirection === "vertical" ? "overflow-y-auto overflow-x-hidden" : "overflow-x-auto overflow-y-hidden";
|
|
1336
1444
|
return /* @__PURE__ */ jsx(
|
|
1337
1445
|
"section",
|
|
@@ -1339,7 +1447,7 @@ function ScrollLockedView({
|
|
|
1339
1447
|
id,
|
|
1340
1448
|
className: `relative w-full h-screen ${className}`,
|
|
1341
1449
|
"data-view-type": "scroll-locked",
|
|
1342
|
-
"data-active": isActive,
|
|
1450
|
+
"data-active": isActive ? "true" : "false",
|
|
1343
1451
|
children: /* @__PURE__ */ jsx(
|
|
1344
1452
|
"div",
|
|
1345
1453
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.store.d.ts","sourceRoot":"","sources":["../../store/navigation.store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,iBAAiB,EAGjB,SAAS,EAKV,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"navigation.store.d.ts","sourceRoot":"","sources":["../../store/navigation.store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,iBAAiB,EAGjB,SAAS,EAKV,MAAM,UAAU,CAAC;AA+DlB,eAAO,MAAM,cAAc;;;;;;;;EAuR1B,CAAC;AAMF,eAAO,MAAM,gBAAgB,GAAI,OAAO,iBAAiB,cACzB,CAAC;AAEjC,eAAO,MAAM,wBAAwB,GAAI,OAAO,iBAAiB,WAClB,CAAC;AAEhD,eAAO,MAAM,qBAAqB,GAAI,OAAO,iBAAiB,YAM7D,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,OAAO,iBAAiB,YAQjE,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,OAAO,iBAAiB,WACvC,CAAC;AAEvB,eAAO,MAAM,qBAAqB,GAAI,OAAO,iBAAiB,YACV,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -166,6 +166,14 @@ export interface ScrollSystemAPI {
|
|
|
166
166
|
}
|
|
167
167
|
export type ViewType = "full" | "scroll-locked" | "controlled" | "nested";
|
|
168
168
|
export type ScrollDirection = "vertical" | "horizontal" | "none";
|
|
169
|
+
/**
|
|
170
|
+
* Behavior for resetting scroll position when view becomes active.
|
|
171
|
+
* - "direction-aware": (default) Reset to start when coming from above, end when coming from below
|
|
172
|
+
* - "always-start": Always reset to start
|
|
173
|
+
* - "always-end": Always reset to end
|
|
174
|
+
* - "preserve": Keep the current scroll position
|
|
175
|
+
*/
|
|
176
|
+
export type ScrollResetBehavior = "direction-aware" | "always-start" | "always-end" | "preserve";
|
|
169
177
|
export interface BaseViewConfig {
|
|
170
178
|
id: string;
|
|
171
179
|
type: ViewType;
|
|
@@ -181,6 +189,8 @@ export interface ScrollLockedViewConfig extends BaseViewConfig {
|
|
|
181
189
|
type: "scroll-locked";
|
|
182
190
|
scrollDirection: ScrollDirection;
|
|
183
191
|
scrollEndThreshold?: number;
|
|
192
|
+
/** Behavior for resetting scroll when view becomes active (default: "direction-aware") */
|
|
193
|
+
scrollResetBehavior?: ScrollResetBehavior;
|
|
184
194
|
}
|
|
185
195
|
export interface ControlledViewConfig extends BaseViewConfig {
|
|
186
196
|
type: "controlled";
|
|
@@ -224,6 +234,8 @@ export interface ScrollSystemState {
|
|
|
224
234
|
isAutoScrollPaused: boolean;
|
|
225
235
|
/** NEW: Infinite scroll enabled */
|
|
226
236
|
infiniteScrollEnabled: boolean;
|
|
237
|
+
/** NEW: Last navigation direction (for scroll reset behavior) */
|
|
238
|
+
lastNavigationDirection: "up" | "down" | null;
|
|
227
239
|
}
|
|
228
240
|
export interface ScrollSystemActions {
|
|
229
241
|
initialize: () => void;
|
|
@@ -269,6 +281,8 @@ export interface ScrollLockedViewProps extends BaseViewProps {
|
|
|
269
281
|
scrollDirection?: ScrollDirection;
|
|
270
282
|
scrollEndThreshold?: number;
|
|
271
283
|
onScrollProgress?: (progress: number) => void;
|
|
284
|
+
/** Behavior for resetting scroll when view becomes active (default: "direction-aware") */
|
|
285
|
+
scrollResetBehavior?: ScrollResetBehavior;
|
|
272
286
|
}
|
|
273
287
|
export interface ControlledViewProps extends BaseViewProps {
|
|
274
288
|
scrollDirection?: ScrollDirection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,UAAU,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAAC;AACtD,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;CACzD;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sDAAsD;IACtD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sDAAsD;IACtD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yDAAyD;IACzD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAMD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACnC,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAMD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAMD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,SAAS,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACtC,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC;IAC3B,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,OAAO,EAAE,OAAO,CAAC;IACjB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;CACjD;AAMD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yDAAyD;IACzD,SAAS,EAAE,YAAY,GAAG,UAAU,CAAC;IACrC,gDAAgD;IAChD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAMD,MAAM,WAAW,eAAe;IAE9B,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IAGvC,eAAe,EAAE,MAAM,MAAM,CAAC;IAC9B,WAAW,EAAE,MAAM,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,MAAM,CAAC;IACpC,QAAQ,EAAE,MAAM,OAAO,CAAC;IAGxB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IAGnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,QAAQ,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IAGnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;AAMD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,eAAe,GAAG,YAAY,GAAG,QAAQ,CAAC;AAE1E,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,GAAG,cAAc,GAAG,YAAY,GAAG,UAAU,CAAC;AAMjG,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,yCAAyC;IACzC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,IAAI,EAAE,eAAe,CAAC;IACtB,eAAe,EAAE,eAAe,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0FAA0F;IAC1F,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAED,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,IAAI,EAAE,YAAY,CAAC;IACnB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,IAAI,EAAE,QAAQ,CAAC;IACf,YAAY,EAAE,kBAAkB,CAAC;CAClC;AAED,MAAM,MAAM,UAAU,GAClB,cAAc,GACd,sBAAsB,GACtB,oBAAoB,GACpB,gBAAgB,CAAC;AAMrB,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC;IAEf,QAAQ,EAAE,OAAO,CAAC;IAClB,kCAAkC;IAClC,WAAW,EAAE,OAAO,CAAC;IAErB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,UAAU,EAAE,eAAe,CAAC;IAE5B,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;IAErC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,WAAW,CAAC;IAErB,MAAM,EAAE,UAAU,CAAC;IAEnB,8CAA8C;IAC9C,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAMD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IAEnB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IAEvB,4BAA4B;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,OAAO,CAAC;IAE5B,mCAAmC;IACnC,qBAAqB,EAAE,OAAO,CAAC;IAE/B,iEAAiE;IACjE,uBAAuB,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;CAC/C;AAMD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC3C,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAGrC,gBAAgB,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,OAAO,CAAC;IAGxD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IAG/C,iBAAiB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAG9D,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;IACxE,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAGzC,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,IAAI,CAAC;IAG1B,gBAAgB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,mBAAmB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAG/C,wBAAwB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAGrD,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAG3D,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAGzE,uBAAuB,EAAE,MAAM,IAAI,CAAC;CACrC;AAED,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;AAMxE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAG1B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IAEvB,wCAAwC;IACxC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CAC1D;AAED,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,0FAA0F;IAC1F,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,gDAAgD;AAChD,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,yDAAyD;IACzD,eAAe,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IAC5C,gDAAgD;IAChD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wCAAwC;IACxC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAG3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAGhC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAG5B,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IAGxC,gEAAgE;IAChE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAG/B,oDAAoD;IACpD,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAGxC,8CAA8C;IAC9C,aAAa,CAAC,EAAE,aAAa,CAAC;IAG9B,wCAAwC;IACxC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAG9B,6CAA6C;IAC7C,cAAc,CAAC,EAAE,OAAO,GAAG,oBAAoB,CAAC;IAGhD,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;CACnC"}
|
package/package.json
CHANGED