bunnyquery 1.8.15 → 1.8.16
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/bunnyquery.js +40 -11
- package/dist/engine.cjs +28 -10
- package/dist/engine.cjs.map +1 -1
- package/dist/engine.d.mts +11 -0
- package/dist/engine.d.ts +11 -0
- package/dist/engine.mjs +28 -10
- package/dist/engine.mjs.map +1 -1
- package/package.json +1 -1
- package/src/engine/scroll_anchor.ts +50 -12
package/dist/engine.d.mts
CHANGED
|
@@ -1961,6 +1961,17 @@ interface ScrollAnchor {
|
|
|
1961
1961
|
settleReturn: () => boolean;
|
|
1962
1962
|
/** A return is armed: its position, not the host's, decides scrollTop. */
|
|
1963
1963
|
isReturning: () => boolean;
|
|
1964
|
+
/**
|
|
1965
|
+
* The reader is driving. Retire any armed return, at once.
|
|
1966
|
+
*
|
|
1967
|
+
* Call from the raw gesture handlers (wheel, touchstart, touchmove, keydown),
|
|
1968
|
+
* which fire synchronously on a real user action and never for a programmatic
|
|
1969
|
+
* scroll. Waiting for the scroll EVENT is not good enough: a background refresh
|
|
1970
|
+
* can settle in between, and a settle with a return still armed puts the reader
|
|
1971
|
+
* back where they were before they left, which lands as "I touched the scroll
|
|
1972
|
+
* and it threw me somewhere else".
|
|
1973
|
+
*/
|
|
1974
|
+
release: () => void;
|
|
1964
1975
|
/** Pin to the bottom, instantly, recording the write. The ONLY way to pin. */
|
|
1965
1976
|
pinBottom: () => void;
|
|
1966
1977
|
/** The box is not being painted (hidden tab). Shared so hosts agree. */
|
package/dist/engine.d.ts
CHANGED
|
@@ -1961,6 +1961,17 @@ interface ScrollAnchor {
|
|
|
1961
1961
|
settleReturn: () => boolean;
|
|
1962
1962
|
/** A return is armed: its position, not the host's, decides scrollTop. */
|
|
1963
1963
|
isReturning: () => boolean;
|
|
1964
|
+
/**
|
|
1965
|
+
* The reader is driving. Retire any armed return, at once.
|
|
1966
|
+
*
|
|
1967
|
+
* Call from the raw gesture handlers (wheel, touchstart, touchmove, keydown),
|
|
1968
|
+
* which fire synchronously on a real user action and never for a programmatic
|
|
1969
|
+
* scroll. Waiting for the scroll EVENT is not good enough: a background refresh
|
|
1970
|
+
* can settle in between, and a settle with a return still armed puts the reader
|
|
1971
|
+
* back where they were before they left, which lands as "I touched the scroll
|
|
1972
|
+
* and it threw me somewhere else".
|
|
1973
|
+
*/
|
|
1974
|
+
release: () => void;
|
|
1964
1975
|
/** Pin to the bottom, instantly, recording the write. The ONLY way to pin. */
|
|
1965
1976
|
pinBottom: () => void;
|
|
1966
1977
|
/** The box is not being painted (hidden tab). Shared so hosts agree. */
|
package/dist/engine.mjs
CHANGED
|
@@ -2580,6 +2580,7 @@ var ROW_KEY_ATTR = "data-row-key";
|
|
|
2580
2580
|
var ROW_POS_ATTR = "data-row-pos";
|
|
2581
2581
|
var MAX_ALTS = 2;
|
|
2582
2582
|
var ALT_SCAN_LIMIT = 64;
|
|
2583
|
+
var MAX_RETURN_SETTLES = 3;
|
|
2583
2584
|
var UNKNOWN_ROW_POS = "\0?";
|
|
2584
2585
|
function createScrollAnchor(options) {
|
|
2585
2586
|
var held = null;
|
|
@@ -2667,6 +2668,7 @@ function createScrollAnchor(options) {
|
|
|
2667
2668
|
var parked = null;
|
|
2668
2669
|
var parkedStuck = false;
|
|
2669
2670
|
var returning = false;
|
|
2671
|
+
var returnBudget = 0;
|
|
2670
2672
|
var wroteTop = -1;
|
|
2671
2673
|
var restoreExact = true;
|
|
2672
2674
|
var restorePinned = false;
|
|
@@ -2762,17 +2764,13 @@ function createScrollAnchor(options) {
|
|
|
2762
2764
|
}
|
|
2763
2765
|
function remember() {
|
|
2764
2766
|
var b0 = options.getBox();
|
|
2765
|
-
if (returning && b0 && b0.scrollTop !== wroteTop)
|
|
2766
|
-
parked = null;
|
|
2767
|
-
parkedStuck = false;
|
|
2768
|
-
returning = false;
|
|
2769
|
-
}
|
|
2767
|
+
if (returning && b0 && b0.scrollTop !== wroteTop) release();
|
|
2770
2768
|
if (frozen()) return;
|
|
2771
2769
|
held = capture();
|
|
2772
2770
|
}
|
|
2773
2771
|
function hold() {
|
|
2774
2772
|
if (frozen()) return;
|
|
2775
|
-
if (sawFrozen
|
|
2773
|
+
if (sawFrozen) {
|
|
2776
2774
|
settleReturn();
|
|
2777
2775
|
return;
|
|
2778
2776
|
}
|
|
@@ -2815,6 +2813,13 @@ function createScrollAnchor(options) {
|
|
|
2815
2813
|
parked = capture();
|
|
2816
2814
|
parkedStuck = !!options.isStuck();
|
|
2817
2815
|
returning = true;
|
|
2816
|
+
returnBudget = MAX_RETURN_SETTLES;
|
|
2817
|
+
}
|
|
2818
|
+
function release() {
|
|
2819
|
+
parked = null;
|
|
2820
|
+
parkedStuck = false;
|
|
2821
|
+
returning = false;
|
|
2822
|
+
returnBudget = 0;
|
|
2818
2823
|
}
|
|
2819
2824
|
function pinBottom() {
|
|
2820
2825
|
var box = options.getBox();
|
|
@@ -2824,7 +2829,16 @@ function createScrollAnchor(options) {
|
|
|
2824
2829
|
}
|
|
2825
2830
|
function settleReturn() {
|
|
2826
2831
|
if (frozen()) return false;
|
|
2832
|
+
var wasFrozen = sawFrozen;
|
|
2827
2833
|
sawFrozen = false;
|
|
2834
|
+
if (!returning && !wasFrozen) return false;
|
|
2835
|
+
if (returning) {
|
|
2836
|
+
if (returnBudget <= 0) {
|
|
2837
|
+
release();
|
|
2838
|
+
return false;
|
|
2839
|
+
}
|
|
2840
|
+
returnBudget--;
|
|
2841
|
+
}
|
|
2828
2842
|
if (parkedStuck) {
|
|
2829
2843
|
pinBottom();
|
|
2830
2844
|
return true;
|
|
@@ -2834,7 +2848,12 @@ function createScrollAnchor(options) {
|
|
|
2834
2848
|
restorePinned = false;
|
|
2835
2849
|
restore(target, true);
|
|
2836
2850
|
parked = !restorePinned || !restoreExact ? target : null;
|
|
2837
|
-
returning = !!parked;
|
|
2851
|
+
returning = !!parked && returnBudget > 0;
|
|
2852
|
+
if (!returning) {
|
|
2853
|
+
parked = null;
|
|
2854
|
+
parkedStuck = false;
|
|
2855
|
+
returnBudget = 0;
|
|
2856
|
+
}
|
|
2838
2857
|
return false;
|
|
2839
2858
|
}
|
|
2840
2859
|
function isReturning() {
|
|
@@ -2860,9 +2879,7 @@ function createScrollAnchor(options) {
|
|
|
2860
2879
|
}
|
|
2861
2880
|
function forget() {
|
|
2862
2881
|
held = null;
|
|
2863
|
-
|
|
2864
|
-
parkedStuck = false;
|
|
2865
|
-
returning = false;
|
|
2882
|
+
release();
|
|
2866
2883
|
}
|
|
2867
2884
|
return {
|
|
2868
2885
|
capture,
|
|
@@ -2873,6 +2890,7 @@ function createScrollAnchor(options) {
|
|
|
2873
2890
|
park,
|
|
2874
2891
|
settleReturn,
|
|
2875
2892
|
isReturning,
|
|
2893
|
+
release,
|
|
2876
2894
|
pinBottom,
|
|
2877
2895
|
isFrozen: frozen,
|
|
2878
2896
|
thaw,
|