@multiplatform.one/components 7.77.2 → 7.78.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/dist/cjs/Lightbox/MediaControl.cjs +2 -6
- package/dist/cjs/Lightbox/MediaControl.native.js +2 -8
- package/dist/cjs/Lightbox/MediaControl.native.js.map +1 -1
- package/dist/cjs/appShell/TabHost.native.js +1 -0
- package/dist/cjs/appShell/TabHost.native.js.map +1 -1
- package/dist/cjs/componentColors.cjs +1 -1
- package/dist/cjs/componentColors.native.js +1 -1
- package/dist/cjs/layouts/page.cjs +0 -4
- package/dist/cjs/layouts/page.native.js +0 -4
- package/dist/cjs/layouts/page.native.js.map +1 -1
- package/dist/cjs/views/ImageGrid.cjs +9 -12
- package/dist/cjs/views/ImageGrid.native.js +9 -16
- package/dist/cjs/views/ImageGrid.native.js.map +1 -1
- package/dist/cjs/views/usePageFlowLoadMore.cjs +83 -0
- package/dist/cjs/views/usePageFlowLoadMore.native.js +93 -0
- package/dist/cjs/views/usePageFlowLoadMore.native.js.map +1 -0
- package/dist/esm/Lightbox/MediaControl.mjs +3 -7
- package/dist/esm/Lightbox/MediaControl.mjs.map +1 -1
- package/dist/esm/Lightbox/MediaControl.native.js +3 -9
- package/dist/esm/Lightbox/MediaControl.native.js.map +1 -1
- package/dist/esm/appShell/TabHost.native.js +1 -0
- package/dist/esm/appShell/TabHost.native.js.map +1 -1
- package/dist/esm/componentColors.mjs +1 -1
- package/dist/esm/componentColors.native.js +1 -1
- package/dist/esm/layouts/page.mjs +0 -4
- package/dist/esm/layouts/page.mjs.map +1 -1
- package/dist/esm/layouts/page.native.js +0 -4
- package/dist/esm/layouts/page.native.js.map +1 -1
- package/dist/esm/views/ImageGrid.mjs +10 -13
- package/dist/esm/views/ImageGrid.mjs.map +1 -1
- package/dist/esm/views/ImageGrid.native.js +10 -17
- package/dist/esm/views/ImageGrid.native.js.map +1 -1
- package/dist/esm/views/usePageFlowLoadMore.mjs +57 -0
- package/dist/esm/views/usePageFlowLoadMore.mjs.map +1 -0
- package/dist/esm/views/usePageFlowLoadMore.native.js +64 -0
- package/dist/esm/views/usePageFlowLoadMore.native.js.map +1 -0
- package/dist/jsx/Lightbox/MediaControl.mjs +3 -7
- package/dist/jsx/Lightbox/MediaControl.mjs.map +1 -1
- package/dist/jsx/Lightbox/MediaControl.native.js +2 -8
- package/dist/jsx/Lightbox/MediaControl.native.js.map +1 -1
- package/dist/jsx/appShell/TabHost.native.js +1 -0
- package/dist/jsx/appShell/TabHost.native.js.map +1 -1
- package/dist/jsx/componentColors.mjs +1 -1
- package/dist/jsx/componentColors.native.js +1 -1
- package/dist/jsx/layouts/page.mjs +0 -4
- package/dist/jsx/layouts/page.mjs.map +1 -1
- package/dist/jsx/layouts/page.native.js +0 -4
- package/dist/jsx/layouts/page.native.js.map +1 -1
- package/dist/jsx/views/ImageGrid.mjs +10 -13
- package/dist/jsx/views/ImageGrid.mjs.map +1 -1
- package/dist/jsx/views/ImageGrid.native.js +9 -16
- package/dist/jsx/views/ImageGrid.native.js.map +1 -1
- package/dist/jsx/views/usePageFlowLoadMore.mjs +57 -0
- package/dist/jsx/views/usePageFlowLoadMore.mjs.map +1 -0
- package/dist/jsx/views/usePageFlowLoadMore.native.js +93 -0
- package/dist/jsx/views/usePageFlowLoadMore.native.js.map +1 -0
- package/package.json +9 -9
- package/src/Lightbox/Lightbox.spec.tsx +1 -1
- package/src/Lightbox/MediaControl.tsx +6 -14
- package/src/appShell/TabHost.native.spec.tsx +21 -1
- package/src/appShell/TabHost.native.tsx +8 -0
- package/src/componentColors.ts +1 -1
- package/src/layouts/page.tsx +1 -8
- package/src/layouts/pageChrome.phone.spec.tsx +14 -0
- package/src/views/ImageGrid.native-press.spec.tsx +172 -0
- package/src/views/ImageGrid.tsx +11 -17
- package/src/views/usePageFlowLoadMore.ts +79 -0
- package/types/Lightbox/MediaControl.d.ts +2 -4
- package/types/Lightbox/MediaControl.d.ts.map +1 -1
- package/types/appShell/TabHost.native.d.ts +1 -0
- package/types/appShell/TabHost.native.d.ts.map +1 -1
- package/types/componentColors.d.ts +1 -1
- package/types/layouts/page.d.ts.map +1 -1
- package/types/views/ImageGrid.d.ts.map +1 -1
- package/types/views/usePageFlowLoadMore.d.ts +26 -0
- package/types/views/usePageFlowLoadMore.d.ts.map +1 -0
package/src/views/ImageGrid.tsx
CHANGED
|
@@ -19,8 +19,9 @@ import {
|
|
|
19
19
|
} from "@multiplatform.one/theme";
|
|
20
20
|
import { useHotkey } from "@tanstack/react-hotkeys";
|
|
21
21
|
import type { RegisterableHotkey } from "@tanstack/react-hotkeys";
|
|
22
|
-
import React, { useCallback,
|
|
22
|
+
import React, { useCallback, useId, useRef, useState } from "react";
|
|
23
23
|
import { useTranslation } from "../shared/i18n";
|
|
24
|
+
import { usePageFlowLoadMore } from "./usePageFlowLoadMore";
|
|
24
25
|
// useWindowDimensions from tamagui, NOT react-native: importing react-native
|
|
25
26
|
// here pulls react-native-web's CJS inline-style-prefixer into the SSR module
|
|
26
27
|
// graph, which the SSR runner evaluates as ESM ("exports is not defined").
|
|
@@ -429,21 +430,14 @@ export function ImageGrid<T>({
|
|
|
429
430
|
hotkeyOpts,
|
|
430
431
|
);
|
|
431
432
|
|
|
432
|
-
// Page-flow mode (no explicit height):
|
|
433
|
-
//
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
if (!el) return;
|
|
441
|
-
const observer = new IntersectionObserver((entries) => {
|
|
442
|
-
if (entries.some((entry) => entry.isIntersecting)) onLoadMore();
|
|
443
|
-
});
|
|
444
|
-
observer.observe(el);
|
|
445
|
-
return () => observer.disconnect();
|
|
446
|
-
}, [height, onLoadMore, hasMore, isLoading]);
|
|
433
|
+
// Page-flow mode (no explicit height): load the next page when the bottom
|
|
434
|
+
// sentinel enters the window, on the web and on native (FZ-8659).
|
|
435
|
+
usePageFlowLoadMore({
|
|
436
|
+
sentinelRef,
|
|
437
|
+
enabled: height === undefined && hasMore && !isLoading,
|
|
438
|
+
onLoadMore,
|
|
439
|
+
rearmKey: items.length,
|
|
440
|
+
});
|
|
447
441
|
|
|
448
442
|
// Error wins over empty (DG-ST-01); initial load renders the grid twin.
|
|
449
443
|
const hasError = resolveAsyncStatus({ error }) === "error";
|
|
@@ -533,7 +527,7 @@ export function ImageGrid<T>({
|
|
|
533
527
|
<Spinner size="small" />
|
|
534
528
|
</YStack>
|
|
535
529
|
)}
|
|
536
|
-
<View ref={sentinelRef as any} height={1} />
|
|
530
|
+
<View ref={sentinelRef as any} height={1} testID="image-grid-sentinel" />
|
|
537
531
|
</View>
|
|
538
532
|
);
|
|
539
533
|
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { type RefObject, useEffect, useRef } from "react";
|
|
2
|
+
import { isWeb, useWindowDimensions } from "tamagui";
|
|
3
|
+
|
|
4
|
+
/** How often native re-measures the sentinel while another page can load. */
|
|
5
|
+
export const PAGE_FLOW_POLL_MS = 250;
|
|
6
|
+
|
|
7
|
+
type WindowRect = (x: number, y: number, width: number, height: number) => void;
|
|
8
|
+
|
|
9
|
+
interface MeasurableNode {
|
|
10
|
+
measureInWindow?: (callback: WindowRect) => void;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface PageFlowLoadMoreOptions {
|
|
14
|
+
/** A 1px view after the last row. */
|
|
15
|
+
sentinelRef: RefObject<unknown>;
|
|
16
|
+
/** False while a page is in flight, when nothing remains, or when the caller owns the scroll. */
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
onLoadMore?: () => void;
|
|
19
|
+
/** Re-arms the trigger when it changes (the rendered item count), so short pages keep loading. */
|
|
20
|
+
rearmKey: number;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Infinite load for a list that flows with its host's scroll (FZ-8659).
|
|
25
|
+
*
|
|
26
|
+
* The list never sees that scroll: on a phone the screen's ScrollView owns
|
|
27
|
+
* it. Web watches the sentinel with an IntersectionObserver. React Native has
|
|
28
|
+
* none, so native measures the sentinel in window coordinates on a short
|
|
29
|
+
* interval and fires when it crosses into the window, the same edge the
|
|
30
|
+
* observer reports. Both fire once per crossing: the observer by its own
|
|
31
|
+
* transitions, native by latching until the sentinel leaves again. `enabled`
|
|
32
|
+
* going false (a page in flight) and `rearmKey` changing (a page landed)
|
|
33
|
+
* start a fresh watch on both.
|
|
34
|
+
*/
|
|
35
|
+
export function usePageFlowLoadMore({
|
|
36
|
+
sentinelRef,
|
|
37
|
+
enabled,
|
|
38
|
+
onLoadMore,
|
|
39
|
+
rearmKey,
|
|
40
|
+
}: PageFlowLoadMoreOptions): void {
|
|
41
|
+
const onLoadMoreRef = useRef(onLoadMore);
|
|
42
|
+
onLoadMoreRef.current = onLoadMore;
|
|
43
|
+
const { width, height } = useWindowDimensions();
|
|
44
|
+
const windowRef = useRef({ width, height });
|
|
45
|
+
windowRef.current = { width, height };
|
|
46
|
+
const live = enabled && Boolean(onLoadMore);
|
|
47
|
+
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
if (!live) return;
|
|
50
|
+
if (isWeb) {
|
|
51
|
+
if (typeof IntersectionObserver === "undefined") return;
|
|
52
|
+
const el = sentinelRef.current as Element | null;
|
|
53
|
+
if (!el) return;
|
|
54
|
+
const observer = new IntersectionObserver((entries) => {
|
|
55
|
+
if (entries.some((entry) => entry.isIntersecting)) onLoadMoreRef.current?.();
|
|
56
|
+
});
|
|
57
|
+
observer.observe(el);
|
|
58
|
+
return () => observer.disconnect();
|
|
59
|
+
}
|
|
60
|
+
let active = true;
|
|
61
|
+
let inside = false;
|
|
62
|
+
const timer = setInterval(() => {
|
|
63
|
+
const node = sentinelRef.current as MeasurableNode | null;
|
|
64
|
+
if (typeof node?.measureInWindow !== "function") return;
|
|
65
|
+
node.measureInWindow((x, y, w, h) => {
|
|
66
|
+
// An unmeasured view reports all zeros; width 0 means not laid out.
|
|
67
|
+
if (!active || w <= 0) return;
|
|
68
|
+
const win = windowRef.current;
|
|
69
|
+
const now = y <= win.height && y + h >= 0 && x < win.width && x + w > 0;
|
|
70
|
+
if (now && !inside) onLoadMoreRef.current?.();
|
|
71
|
+
inside = now;
|
|
72
|
+
});
|
|
73
|
+
}, PAGE_FLOW_POLL_MS);
|
|
74
|
+
return () => {
|
|
75
|
+
active = false;
|
|
76
|
+
clearInterval(timer);
|
|
77
|
+
};
|
|
78
|
+
}, [live, rearmKey, sentinelRef]);
|
|
79
|
+
}
|
|
@@ -3,10 +3,8 @@ import { Button } from "../Button";
|
|
|
3
3
|
type MediaControlProps = Pick<ComponentProps<typeof Button>, "icon" | "aria-label" | "onPress" | "disabled">;
|
|
4
4
|
/**
|
|
5
5
|
* An icon-only control floating over a photo (LC-176 ICON-BUTTON, over-media
|
|
6
|
-
* case): a bare glyph on a round plate
|
|
7
|
-
*
|
|
8
|
-
* backdrop blur (LC-206). Swaps for the shared IconButton's over-media
|
|
9
|
-
* variant once FZ-8020 lands.
|
|
6
|
+
* case): a bare glyph on a flat round plate, so it stays legible on any frame.
|
|
7
|
+
* The plate is a fill and nothing else; it does not pretend to be glass.
|
|
10
8
|
*/
|
|
11
9
|
export declare function MediaControl(props: MediaControlProps): import("react/jsx-runtime").JSX.Element;
|
|
12
10
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../src/Lightbox/MediaControl.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"MediaControl.d.ts","sourceRoot":"","sources":["../../src/Lightbox/MediaControl.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,KAAK,iBAAiB,GAAG,IAAI,CAC3B,cAAc,CAAC,OAAO,MAAM,CAAC,EAC7B,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,UAAU,CAC/C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,2CAmBpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabHost.native.d.ts","sourceRoot":"","sources":["../../src/appShell/TabHost.native.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TabHost.native.d.ts","sourceRoot":"","sources":["../../src/appShell/TabHost.native.tsx"],"names":[],"mappings":"AAuBA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAA+B,MAAM,OAAO,CAAC;AAIxF,OAAO,EAAE,KAAK,UAAU,EAAqB,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAE7D,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,yEAAyE;AACzE,eAAO,MAAM,oBAAoB,2CAA4C,CAAC;AAE9E,sEAAsE;AACtE,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,KAAK,QAAQ,GAAG;IAAE,GAAG,EAAE;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAE5D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,aAAa,CAAC;QAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;QACrB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,yBAAyB,CAAC,EAAE,MAAM,CAAC;QACnC,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,sCAAsC,CAAC,EAAE,OAAO,CAAC;QACjD,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE;YAAE,WAAW,EAAE;gBAAE,MAAM,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,KAAK,IAAI,CAAC;KAC5E,CAAC,CAAC;IACH,MAAM,EAAE,aAAa,CAAC;QACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,IAAI,CAAC,EAAE,QAAQ,CAAC;QAChB,YAAY,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,4BAA4B,CAAC,EAAE,MAAM,CAAC;QACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,gDAAgD,CAAC,EAAE,OAAO,CAAC;KAC5D,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACxC,OAAO,EAAE,MAAM;QAAE,IAAI,CAAC,EAAE,UAAU,CAAA;KAAE,CAAC;CACtC;AAOD,yFAAyF;AACzF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAS3F;AASD,qEAAqE;AACrE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,OAAO,CAE1E;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,SAAS,EACT,UAAU,EACV,QAAQ,GACT,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,2CAkDrC;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,2CAI1C"}
|
|
@@ -108,7 +108,7 @@ export declare const componentColors: {
|
|
|
108
108
|
/** Debug indicator color */
|
|
109
109
|
readonly debug: "$color9";
|
|
110
110
|
/**
|
|
111
|
-
* The round
|
|
111
|
+
* The flat round plate under an icon control floating over a photo
|
|
112
112
|
* (LC-176). The fill sits steps above the viewer's dark ground so the
|
|
113
113
|
* plate reads on black as well as on a bright frame (FZ-8009 r2).
|
|
114
114
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/layouts/page.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAeL,KAAK,cAAc,EAEpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAA2B,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAErF,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,KAAK,EAAE,eAAe,IAAI,sBAAsB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAkCnG,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAe5B;;;GAGG;AACH,eAAO,MAAM,iBAAiB,MAAuB,CAAC;AAEtD,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,mDAAmD;IACnD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;IACtB,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gEAAgE;IAChE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gEAAgE;IAChE,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,2CAGxC;AAmFD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,2CAe7D;AAgJD,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,kEAAkE;IAClE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC;;;OAGG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,MAAM,EACN,OAAO,EACP,OAAO,EACP,GAAG,EACH,OAAc,EACd,YAAgB,EAChB,UAAU,EACV,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/layouts/page.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageGrid.d.ts","sourceRoot":"","sources":["../../src/views/ImageGrid.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAY,KAAK,YAAY,EAAe,MAAM,aAAa,CAAC;AAGvE,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,YAAY,EAOlB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,
|
|
1
|
+
{"version":3,"file":"ImageGrid.d.ts","sourceRoot":"","sources":["../../src/views/ImageGrid.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type RefObject } from "react";
|
|
2
|
+
/** How often native re-measures the sentinel while another page can load. */
|
|
3
|
+
export declare const PAGE_FLOW_POLL_MS = 250;
|
|
4
|
+
export interface PageFlowLoadMoreOptions {
|
|
5
|
+
/** A 1px view after the last row. */
|
|
6
|
+
sentinelRef: RefObject<unknown>;
|
|
7
|
+
/** False while a page is in flight, when nothing remains, or when the caller owns the scroll. */
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
onLoadMore?: () => void;
|
|
10
|
+
/** Re-arms the trigger when it changes (the rendered item count), so short pages keep loading. */
|
|
11
|
+
rearmKey: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Infinite load for a list that flows with its host's scroll (FZ-8659).
|
|
15
|
+
*
|
|
16
|
+
* The list never sees that scroll: on a phone the screen's ScrollView owns
|
|
17
|
+
* it. Web watches the sentinel with an IntersectionObserver. React Native has
|
|
18
|
+
* none, so native measures the sentinel in window coordinates on a short
|
|
19
|
+
* interval and fires when it crosses into the window, the same edge the
|
|
20
|
+
* observer reports. Both fire once per crossing: the observer by its own
|
|
21
|
+
* transitions, native by latching until the sentinel leaves again. `enabled`
|
|
22
|
+
* going false (a page in flight) and `rearmKey` changing (a page landed)
|
|
23
|
+
* start a fresh watch on both.
|
|
24
|
+
*/
|
|
25
|
+
export declare function usePageFlowLoadMore({ sentinelRef, enabled, onLoadMore, rearmKey, }: PageFlowLoadMoreOptions): void;
|
|
26
|
+
//# sourceMappingURL=usePageFlowLoadMore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePageFlowLoadMore.d.ts","sourceRoot":"","sources":["../../src/views/usePageFlowLoadMore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,OAAO,CAAC;AAG1D,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAQrC,MAAM,WAAW,uBAAuB;IACtC,qCAAqC;IACrC,WAAW,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAChC,iGAAiG;IACjG,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,kGAAkG;IAClG,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,WAAW,EACX,OAAO,EACP,UAAU,EACV,QAAQ,GACT,EAAE,uBAAuB,GAAG,IAAI,CAuChC"}
|