scroll-system 1.1.1 → 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/index.js +96 -6
- package/dist/index.mjs +96 -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"}
|
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;
|
|
@@ -368,6 +374,28 @@ function useWheelHandler() {
|
|
|
368
374
|
return () => window.removeEventListener("wheel", handleWheel);
|
|
369
375
|
}, []);
|
|
370
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
|
+
}
|
|
371
399
|
function useTouchHandler(options = {}) {
|
|
372
400
|
const { enabled = true } = options;
|
|
373
401
|
const touchStart = react.useRef(null);
|
|
@@ -394,6 +422,10 @@ function useTouchHandler(options = {}) {
|
|
|
394
422
|
Math.abs(deltaY) > NAV_THRESHOLDS.TOUCH && // Threshold distancia
|
|
395
423
|
timeElapsed < 800) {
|
|
396
424
|
const direction = deltaY > 0 ? "down" : "up";
|
|
425
|
+
if (!canNavigateFromScrollPosition(direction)) {
|
|
426
|
+
touchStart.current = null;
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
397
429
|
const intention = {
|
|
398
430
|
type: "navigate",
|
|
399
431
|
direction,
|
|
@@ -602,10 +634,29 @@ function useDragHandler(options = {}) {
|
|
|
602
634
|
const store = useScrollStore.getState();
|
|
603
635
|
const atStart = store.activeIndex === 0;
|
|
604
636
|
const atEnd = store.activeIndex === store.totalViews - 1;
|
|
637
|
+
const activeView = store.views[store.activeIndex];
|
|
605
638
|
const exceedsThreshold = Math.abs(deltaY) > DRAG_THRESHOLD;
|
|
606
639
|
const hasVelocity = velocity > VELOCITY_THRESHOLD;
|
|
607
640
|
const direction = deltaY > 0 ? "down" : "up";
|
|
608
|
-
|
|
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);
|
|
609
660
|
const shouldNavigate = canNavigate && (exceedsThreshold || hasVelocity);
|
|
610
661
|
onDragEnd?.(shouldNavigate, direction);
|
|
611
662
|
if (shouldNavigate) {
|
|
@@ -1324,6 +1375,7 @@ function ScrollLockedView({
|
|
|
1324
1375
|
className = "",
|
|
1325
1376
|
scrollDirection = "vertical",
|
|
1326
1377
|
scrollEndThreshold = 0.99,
|
|
1378
|
+
scrollResetBehavior = "direction-aware",
|
|
1327
1379
|
onScrollProgress,
|
|
1328
1380
|
onActivate,
|
|
1329
1381
|
onDeactivate,
|
|
@@ -1337,7 +1389,8 @@ function ScrollLockedView({
|
|
|
1337
1389
|
id,
|
|
1338
1390
|
type: "scroll-locked",
|
|
1339
1391
|
scrollDirection,
|
|
1340
|
-
scrollEndThreshold
|
|
1392
|
+
scrollEndThreshold,
|
|
1393
|
+
scrollResetBehavior
|
|
1341
1394
|
},
|
|
1342
1395
|
onActivate,
|
|
1343
1396
|
onDeactivate,
|
|
@@ -1352,6 +1405,43 @@ function ScrollLockedView({
|
|
|
1352
1405
|
scrollDirection,
|
|
1353
1406
|
onScrollProgress
|
|
1354
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]);
|
|
1355
1445
|
const scrollClasses = scrollDirection === "vertical" ? "overflow-y-auto overflow-x-hidden" : "overflow-x-auto overflow-y-hidden";
|
|
1356
1446
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1357
1447
|
"section",
|
|
@@ -1359,7 +1449,7 @@ function ScrollLockedView({
|
|
|
1359
1449
|
id,
|
|
1360
1450
|
className: `relative w-full h-screen ${className}`,
|
|
1361
1451
|
"data-view-type": "scroll-locked",
|
|
1362
|
-
"data-active": isActive,
|
|
1452
|
+
"data-active": isActive ? "true" : "false",
|
|
1363
1453
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1364
1454
|
"div",
|
|
1365
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;
|
|
@@ -366,6 +372,28 @@ function useWheelHandler() {
|
|
|
366
372
|
return () => window.removeEventListener("wheel", handleWheel);
|
|
367
373
|
}, []);
|
|
368
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
|
+
}
|
|
369
397
|
function useTouchHandler(options = {}) {
|
|
370
398
|
const { enabled = true } = options;
|
|
371
399
|
const touchStart = useRef(null);
|
|
@@ -392,6 +420,10 @@ function useTouchHandler(options = {}) {
|
|
|
392
420
|
Math.abs(deltaY) > NAV_THRESHOLDS.TOUCH && // Threshold distancia
|
|
393
421
|
timeElapsed < 800) {
|
|
394
422
|
const direction = deltaY > 0 ? "down" : "up";
|
|
423
|
+
if (!canNavigateFromScrollPosition(direction)) {
|
|
424
|
+
touchStart.current = null;
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
395
427
|
const intention = {
|
|
396
428
|
type: "navigate",
|
|
397
429
|
direction,
|
|
@@ -600,10 +632,29 @@ function useDragHandler(options = {}) {
|
|
|
600
632
|
const store = useScrollStore.getState();
|
|
601
633
|
const atStart = store.activeIndex === 0;
|
|
602
634
|
const atEnd = store.activeIndex === store.totalViews - 1;
|
|
635
|
+
const activeView = store.views[store.activeIndex];
|
|
603
636
|
const exceedsThreshold = Math.abs(deltaY) > DRAG_THRESHOLD;
|
|
604
637
|
const hasVelocity = velocity > VELOCITY_THRESHOLD;
|
|
605
638
|
const direction = deltaY > 0 ? "down" : "up";
|
|
606
|
-
|
|
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);
|
|
607
658
|
const shouldNavigate = canNavigate && (exceedsThreshold || hasVelocity);
|
|
608
659
|
onDragEnd?.(shouldNavigate, direction);
|
|
609
660
|
if (shouldNavigate) {
|
|
@@ -1322,6 +1373,7 @@ function ScrollLockedView({
|
|
|
1322
1373
|
className = "",
|
|
1323
1374
|
scrollDirection = "vertical",
|
|
1324
1375
|
scrollEndThreshold = 0.99,
|
|
1376
|
+
scrollResetBehavior = "direction-aware",
|
|
1325
1377
|
onScrollProgress,
|
|
1326
1378
|
onActivate,
|
|
1327
1379
|
onDeactivate,
|
|
@@ -1335,7 +1387,8 @@ function ScrollLockedView({
|
|
|
1335
1387
|
id,
|
|
1336
1388
|
type: "scroll-locked",
|
|
1337
1389
|
scrollDirection,
|
|
1338
|
-
scrollEndThreshold
|
|
1390
|
+
scrollEndThreshold,
|
|
1391
|
+
scrollResetBehavior
|
|
1339
1392
|
},
|
|
1340
1393
|
onActivate,
|
|
1341
1394
|
onDeactivate,
|
|
@@ -1350,6 +1403,43 @@ function ScrollLockedView({
|
|
|
1350
1403
|
scrollDirection,
|
|
1351
1404
|
onScrollProgress
|
|
1352
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]);
|
|
1353
1443
|
const scrollClasses = scrollDirection === "vertical" ? "overflow-y-auto overflow-x-hidden" : "overflow-x-auto overflow-y-hidden";
|
|
1354
1444
|
return /* @__PURE__ */ jsx(
|
|
1355
1445
|
"section",
|
|
@@ -1357,7 +1447,7 @@ function ScrollLockedView({
|
|
|
1357
1447
|
id,
|
|
1358
1448
|
className: `relative w-full h-screen ${className}`,
|
|
1359
1449
|
"data-view-type": "scroll-locked",
|
|
1360
|
-
"data-active": isActive,
|
|
1450
|
+
"data-active": isActive ? "true" : "false",
|
|
1361
1451
|
children: /* @__PURE__ */ jsx(
|
|
1362
1452
|
"div",
|
|
1363
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":"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"}
|
package/package.json
CHANGED