@oxyhq/bloom 0.78.0 → 0.79.1
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 +3 -3
- package/lib/commonjs/provider/index.js +11 -7
- package/lib/commonjs/provider/index.js.map +1 -1
- package/lib/commonjs/scroll/context.js +96 -0
- package/lib/commonjs/scroll/context.js.map +1 -0
- package/lib/commonjs/scroll/expo-router/index.js +133 -0
- package/lib/commonjs/scroll/expo-router/index.js.map +1 -0
- package/lib/commonjs/scroll/index.js +85 -21
- package/lib/commonjs/scroll/index.js.map +1 -1
- package/lib/commonjs/scroll/index.web.js +184 -118
- package/lib/commonjs/scroll/index.web.js.map +1 -1
- package/lib/commonjs/scroll/scrollable.native.js +58 -0
- package/lib/commonjs/scroll/scrollable.native.js.map +1 -0
- package/lib/commonjs/scroll/store.js +47 -25
- package/lib/commonjs/scroll/store.js.map +1 -1
- package/lib/commonjs/theme/color-policy.js +11 -9
- package/lib/commonjs/theme/color-policy.js.map +1 -1
- package/lib/module/provider/index.js +10 -6
- package/lib/module/provider/index.js.map +1 -1
- package/lib/module/scroll/context.js +90 -0
- package/lib/module/scroll/context.js.map +1 -0
- package/lib/module/scroll/expo-router/index.js +128 -0
- package/lib/module/scroll/expo-router/index.js.map +1 -0
- package/lib/module/scroll/index.js +80 -21
- package/lib/module/scroll/index.js.map +1 -1
- package/lib/module/scroll/index.web.js +181 -119
- package/lib/module/scroll/index.web.js.map +1 -1
- package/lib/module/scroll/scrollable.native.js +54 -0
- package/lib/module/scroll/scrollable.native.js.map +1 -0
- package/lib/module/scroll/store.js +47 -25
- package/lib/module/scroll/store.js.map +1 -1
- package/lib/module/theme/color-policy.js +11 -9
- package/lib/module/theme/color-policy.js.map +1 -1
- package/lib/typescript/commonjs/provider/index.d.ts +7 -5
- package/lib/typescript/commonjs/provider/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/scroll/context.d.ts +14 -0
- package/lib/typescript/commonjs/scroll/context.d.ts.map +1 -0
- package/lib/typescript/commonjs/scroll/expo-router/index.d.ts +7 -0
- package/lib/typescript/commonjs/scroll/expo-router/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/scroll/index.d.ts +14 -23
- package/lib/typescript/commonjs/scroll/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/scroll/index.web.d.ts +17 -19
- package/lib/typescript/commonjs/scroll/index.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/scroll/scrollable.native.d.ts +23 -0
- package/lib/typescript/commonjs/scroll/scrollable.native.d.ts.map +1 -0
- package/lib/typescript/commonjs/scroll/store.d.ts +41 -22
- package/lib/typescript/commonjs/scroll/store.d.ts.map +1 -1
- package/lib/typescript/commonjs/scroll/types.d.ts +82 -12
- package/lib/typescript/commonjs/scroll/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/color-policy.d.ts.map +1 -1
- package/lib/typescript/module/provider/index.d.ts +7 -5
- package/lib/typescript/module/provider/index.d.ts.map +1 -1
- package/lib/typescript/module/scroll/context.d.ts +14 -0
- package/lib/typescript/module/scroll/context.d.ts.map +1 -0
- package/lib/typescript/module/scroll/expo-router/index.d.ts +7 -0
- package/lib/typescript/module/scroll/expo-router/index.d.ts.map +1 -0
- package/lib/typescript/module/scroll/index.d.ts +14 -23
- package/lib/typescript/module/scroll/index.d.ts.map +1 -1
- package/lib/typescript/module/scroll/index.web.d.ts +17 -19
- package/lib/typescript/module/scroll/index.web.d.ts.map +1 -1
- package/lib/typescript/module/scroll/scrollable.native.d.ts +23 -0
- package/lib/typescript/module/scroll/scrollable.native.d.ts.map +1 -0
- package/lib/typescript/module/scroll/store.d.ts +41 -22
- package/lib/typescript/module/scroll/store.d.ts.map +1 -1
- package/lib/typescript/module/scroll/types.d.ts +82 -12
- package/lib/typescript/module/scroll/types.d.ts.map +1 -1
- package/lib/typescript/module/theme/color-policy.d.ts.map +1 -1
- package/package.json +15 -1
- package/src/__tests__/BloomProvider.web.test.tsx +8 -15
- package/src/__tests__/optional-peer-imports.test.ts +2 -2
- package/src/__tests__/scroll-expo-router-adapter.test.tsx +164 -0
- package/src/__tests__/scroll-native.test.tsx +465 -0
- package/src/__tests__/scroll-store.test.ts +41 -17
- package/src/__tests__/scroll-web.test.tsx +547 -111
- package/src/provider/index.tsx +10 -7
- package/src/scroll/context.tsx +107 -0
- package/src/scroll/expo-router/index.ts +140 -0
- package/src/scroll/index.ts +92 -25
- package/src/scroll/index.web.tsx +219 -162
- package/src/scroll/scrollable.native.ts +64 -0
- package/src/scroll/store.ts +47 -25
- package/src/scroll/types.ts +82 -12
- package/src/theme/__tests__/__fixtures__/golden-resolved-tokens.json +27 -27
- package/src/theme/__tests__/__snapshots__/visual-gallery.test.tsx.snap +55 -55
- package/src/theme/__tests__/policy-legibility.test.ts +21 -1
- package/src/theme/color-policy.ts +13 -9
- package/lib/commonjs/provider/scroll-provider.js +0 -13
- package/lib/commonjs/provider/scroll-provider.js.map +0 -1
- package/lib/commonjs/provider/scroll-provider.web.js +0 -13
- package/lib/commonjs/provider/scroll-provider.web.js.map +0 -1
- package/lib/module/provider/scroll-provider.js +0 -16
- package/lib/module/provider/scroll-provider.js.map +0 -1
- package/lib/module/provider/scroll-provider.web.js +0 -5
- package/lib/module/provider/scroll-provider.web.js.map +0 -1
- package/lib/typescript/commonjs/provider/scroll-provider.d.ts +0 -14
- package/lib/typescript/commonjs/provider/scroll-provider.d.ts.map +0 -1
- package/lib/typescript/commonjs/provider/scroll-provider.web.d.ts +0 -3
- package/lib/typescript/commonjs/provider/scroll-provider.web.d.ts.map +0 -1
- package/lib/typescript/module/provider/scroll-provider.d.ts +0 -14
- package/lib/typescript/module/provider/scroll-provider.d.ts.map +0 -1
- package/lib/typescript/module/provider/scroll-provider.web.d.ts +0 -3
- package/lib/typescript/module/provider/scroll-provider.web.d.ts.map +0 -1
- package/src/__tests__/scroll-native.test.ts +0 -25
- package/src/provider/scroll-provider.ts +0 -13
- package/src/provider/scroll-provider.web.ts +0 -2
|
@@ -212,15 +212,17 @@ function vividHueNear(hue) {
|
|
|
212
212
|
* why 11 of the 13 presets carry white and exactly the two light ones do not.
|
|
213
213
|
*/
|
|
214
214
|
function whiteLabelTone(palette, seedTone, isDark) {
|
|
215
|
-
//
|
|
216
|
-
//
|
|
217
|
-
//
|
|
218
|
-
//
|
|
219
|
-
//
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
215
|
+
// LIGHT: every fill comes down, no exemption. On a near-white page a bright
|
|
216
|
+
// colour has nothing to read against — a lime at its own tone 90 is a pale
|
|
217
|
+
// smear there, indistinguishable from the same colour in dark, which is not a
|
|
218
|
+
// theme at all. Coming down is what makes faircoin a deep green in light and a
|
|
219
|
+
// bright lime in dark.
|
|
220
|
+
if (!isDark) return LIGHT_FILL_TONE;
|
|
221
|
+
// DARK: the budget applies. Most brands come down to where white fits, but a
|
|
222
|
+
// seed that is already light cannot without ceasing to be itself, so it keeps
|
|
223
|
+
// its own tone and takes a black label. That is the eleven-and-two pattern.
|
|
224
|
+
const candidate = Math.max(DARK_FILL_TONE, seedTone - TONE_BUDGET);
|
|
225
|
+
return contrastOf(palette.tone(candidate), true) >= AA ? candidate : Math.max(seedTone, DARK_SEED_FLOOR);
|
|
224
226
|
}
|
|
225
227
|
|
|
226
228
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_index","require","_hct","_tonalPalette","_colorUtils","STATUS_SEEDS","exports","success","error","warning","info","AA","rgb","argb","redFromArgb","greenFromArgb","blueFromArgb","rgba","alpha","contrastOf","onWhite","channel","v","c","Math","pow","luminance","foregroundFor","noLegibleForeground","LIGHT_FILL_TONE","DARK_FILL_TONE","TONE_BUDGET","DARK_SEED_FLOOR","DARK_ACCENT_FLOOR","ACCENT_CHROMA","TEXT_TONE","light","dark","TEXT_CHROMA","SUBTLE_SOURCE_TONE","SUBTLE_ALPHA","SPLIT_ROTATIONS","VIVID_SNAP_WINDOW","VIVID_SNAP_MIN_GAIN","MIN_ACCENT_SEPARATION","DESTRUCTIVE_PROXIMITY","hueDistance","a","b","d","abs","min","peakTone","hue","palette","TonalPalette","fromHueAndChroma","bestTone","bestChroma","tone","chroma","Hct","fromInt","peakChroma","vividHueNear","baseChroma","bestHue","delta","candidate","whiteLabelTone","seedTone","isDark","max","accentTone","peak","fillPair","startTone","fill","foreground","accentHues","seedHue","firstRotation","secondRotation","geometricA","geometricB","geometricStandout","quiet","snapped","standout","errorHue","argbFromHex","secondary","tertiary","buildPolicyTokens","seedHex","roles","pinned","seed","brandPalette","primary","tokens","surfaceContainer","surfaceContainerLowest","surfaceContainerHigh","onSurfaceVariant","hues","role","pin","undefined","fillPalette","textPalette","vividPalette","pair","i","hex","Object","entries","status"],"sourceRoot":"../../../src","sources":["theme/color-policy.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_index","require","_hct","_tonalPalette","_colorUtils","STATUS_SEEDS","exports","success","error","warning","info","AA","rgb","argb","redFromArgb","greenFromArgb","blueFromArgb","rgba","alpha","contrastOf","onWhite","channel","v","c","Math","pow","luminance","foregroundFor","noLegibleForeground","LIGHT_FILL_TONE","DARK_FILL_TONE","TONE_BUDGET","DARK_SEED_FLOOR","DARK_ACCENT_FLOOR","ACCENT_CHROMA","TEXT_TONE","light","dark","TEXT_CHROMA","SUBTLE_SOURCE_TONE","SUBTLE_ALPHA","SPLIT_ROTATIONS","VIVID_SNAP_WINDOW","VIVID_SNAP_MIN_GAIN","MIN_ACCENT_SEPARATION","DESTRUCTIVE_PROXIMITY","hueDistance","a","b","d","abs","min","peakTone","hue","palette","TonalPalette","fromHueAndChroma","bestTone","bestChroma","tone","chroma","Hct","fromInt","peakChroma","vividHueNear","baseChroma","bestHue","delta","candidate","whiteLabelTone","seedTone","isDark","max","accentTone","peak","fillPair","startTone","fill","foreground","accentHues","seedHue","firstRotation","secondRotation","geometricA","geometricB","geometricStandout","quiet","snapped","standout","errorHue","argbFromHex","secondary","tertiary","buildPolicyTokens","seedHex","roles","pinned","seed","brandPalette","primary","tokens","surfaceContainer","surfaceContainerLowest","surfaceContainerHigh","onSurfaceVariant","hues","role","pin","undefined","fillPalette","textPalette","vividPalette","pair","i","hex","Object","entries","status"],"sourceRoot":"../../../src","sources":["theme/color-policy.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -20,11 +20,13 @@
|
|
|
20
20
|
* Nesting extra contexts costs nothing at runtime — the win is that scope is no
|
|
21
21
|
* longer a per-app decision.
|
|
22
22
|
*
|
|
23
|
-
* EXPO/EXPO-ROUTER APPS ONLY
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
23
|
+
* EXPO/EXPO-ROUTER APPS ONLY, and now for one narrow reason: it binds the
|
|
24
|
+
* scroll store to the expo-router ADAPTER, which is the only module in the
|
|
25
|
+
* scroll primitive that imports `expo-router`. The scroll core itself is
|
|
26
|
+
* router-agnostic, so a Vite/SPA consumer can mount
|
|
27
|
+
* `<ScrollRestorationProvider adapter={...}>` from `@oxyhq/bloom/scroll` with
|
|
28
|
+
* an adapter for its own router — alongside `BloomThemeProvider` and whatever
|
|
29
|
+
* else it needs — rather than going without.
|
|
28
30
|
*
|
|
29
31
|
* NOT included, on purpose — these are OUTLETS, not state, and their placement
|
|
30
32
|
* in the tree is a real app decision (z-order, safe areas, and mounting a
|
|
@@ -37,7 +39,8 @@ import { ImageResolverProvider } from "../image-resolver/index.js";
|
|
|
37
39
|
import { BloomHapticsProvider } from "../hooks/useHaptics.js";
|
|
38
40
|
import { TabBarMinimizeProvider } from "../tab-bar/minimize-context.js";
|
|
39
41
|
import { BloomThemeProvider } from "../theme/index.js";
|
|
40
|
-
import { ScrollRestorationProvider } from
|
|
42
|
+
import { ScrollRestorationProvider } from "../scroll/context.js";
|
|
43
|
+
import { expoRouterScrollAdapter } from "../scroll/expo-router/index.js";
|
|
41
44
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
42
45
|
export function BloomProvider({
|
|
43
46
|
children,
|
|
@@ -54,6 +57,7 @@ export function BloomProvider({
|
|
|
54
57
|
children: /*#__PURE__*/_jsx(BloomThemeProvider, {
|
|
55
58
|
...themeProps,
|
|
56
59
|
children: /*#__PURE__*/_jsx(ScrollRestorationProvider, {
|
|
60
|
+
adapter: expoRouterScrollAdapter,
|
|
57
61
|
children: /*#__PURE__*/_jsx(BloomHapticsProvider, {
|
|
58
62
|
enabled: haptics,
|
|
59
63
|
children: /*#__PURE__*/_jsx(TabBarMinimizeProvider, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ImageResolverProvider","BloomHapticsProvider","TabBarMinimizeProvider","BloomThemeProvider","ScrollRestorationProvider","jsx","_jsx","BloomProvider","children","imageResolver","haptics","themeProps","value","enabled","displayName"],"sourceRoot":"../../../src","sources":["provider/index.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,qBAAqB,QAA4B,4BAAmB;AAC7E,SAASC,oBAAoB,QAAQ,wBAAqB;AAC1D,SAASC,sBAAsB,QAAQ,gCAA6B;AACpE,SAASC,kBAAkB,QAAsC,mBAAU;AAC3E,SAASC,yBAAyB,QAAQ,
|
|
1
|
+
{"version":3,"names":["ImageResolverProvider","BloomHapticsProvider","TabBarMinimizeProvider","BloomThemeProvider","ScrollRestorationProvider","expoRouterScrollAdapter","jsx","_jsx","BloomProvider","children","imageResolver","haptics","themeProps","value","adapter","enabled","displayName"],"sourceRoot":"../../../src","sources":["provider/index.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,qBAAqB,QAA4B,4BAAmB;AAC7E,SAASC,oBAAoB,QAAQ,wBAAqB;AAC1D,SAASC,sBAAsB,QAAQ,gCAA6B;AACpE,SAASC,kBAAkB,QAAsC,mBAAU;AAC3E,SAASC,yBAAyB,QAAQ,sBAAmB;AAC7D,SAASC,uBAAuB,QAAQ,gCAAuB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAchE,OAAO,SAASC,aAAaA,CAAC;EAC5BC,QAAQ;EACRC,aAAa;EACbC,OAAO,GAAG,IAAI;EACd,GAAGC;AACe,CAAC,EAAE;EACrB;IAAA;IACE;IACA;IACAL,IAAA,CAACP,qBAAqB;MAACa,KAAK,EAAEH,aAAa,IAAI,IAAK;MAAAD,QAAA,eAClDF,IAAA,CAACJ,kBAAkB;QAAA,GAAKS,UAAU;QAAAH,QAAA,eAChCF,IAAA,CAACH,yBAAyB;UAACU,OAAO,EAAET,uBAAwB;UAAAI,QAAA,eAC1DF,IAAA,CAACN,oBAAoB;YAACc,OAAO,EAAEJ,OAAQ;YAAAF,QAAA,eACrCF,IAAA,CAACL,sBAAsB;cAAAO,QAAA,EAAEA;YAAQ,CAAyB;UAAC,CACvC;QAAC,CACE;MAAC,CACV;IAAC,CACA;EAAC;AAE5B;AAEAD,aAAa,CAACQ,WAAW,GAAG,eAAe","ignoreList":[]}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The provider and context both platform barrels share.
|
|
5
|
+
*
|
|
6
|
+
* Nothing here is platform-specific: the provider holds an offset store and the
|
|
7
|
+
* router adapter, and that composition is identical on web and native. Keeping
|
|
8
|
+
* it in one module also guarantees ONE context identity — a provider mounted
|
|
9
|
+
* from the native barrel and a hook imported from the web barrel would
|
|
10
|
+
* otherwise read two different contexts and the hook would throw.
|
|
11
|
+
*/
|
|
12
|
+
import { createContext, useContext, useEffect, useMemo } from 'react';
|
|
13
|
+
import { ScrollOffsetStore } from "./store.js";
|
|
14
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
15
|
+
const ScrollRestorationContext = /*#__PURE__*/createContext(null);
|
|
16
|
+
ScrollRestorationContext.displayName = 'BloomScrollRestorationContext';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Holds the offset map and the router binding for the subtree. One provider
|
|
20
|
+
* near the app root is enough; the store lives as long as the provider, so
|
|
21
|
+
* offsets survive navigating away and back (including browser Back/Forward).
|
|
22
|
+
*/
|
|
23
|
+
export function ScrollRestorationProvider({
|
|
24
|
+
children,
|
|
25
|
+
adapter
|
|
26
|
+
}) {
|
|
27
|
+
const store = useMemo(() => new ScrollOffsetStore(), []);
|
|
28
|
+
const value = useMemo(() => ({
|
|
29
|
+
store,
|
|
30
|
+
adapter
|
|
31
|
+
}), [store, adapter]);
|
|
32
|
+
useManualBrowserScrollRestoration();
|
|
33
|
+
return /*#__PURE__*/_jsx(ScrollRestorationContext.Provider, {
|
|
34
|
+
value: value,
|
|
35
|
+
children: children
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
export function useScrollRestorationContext() {
|
|
39
|
+
const value = useContext(ScrollRestorationContext);
|
|
40
|
+
if (value === null) {
|
|
41
|
+
throw new Error('useScrollRestoration must be used within a <ScrollRestorationProvider>.');
|
|
42
|
+
}
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Take over scroll restoration from the browser for as long as this provider is
|
|
48
|
+
* mounted, and hand it back both on unmount and on `pagehide`.
|
|
49
|
+
*
|
|
50
|
+
* The browser's default `'auto'` restoration fights our restore on
|
|
51
|
+
* Back/Forward, so it has to be turned off — but only while something is
|
|
52
|
+
* actually going to restore instead. Two moments where that stops being true:
|
|
53
|
+
*
|
|
54
|
+
* - **Unmount.** This used to run at MODULE scope, which meant merely
|
|
55
|
+
* importing the module disabled the browser's own restoration. Now that the
|
|
56
|
+
* core is importable by apps that mount no provider (and by SSR and Node
|
|
57
|
+
* tooling), that would have left those apps with neither restoration. Tying
|
|
58
|
+
* the switch to the provider's lifetime makes it describe exactly the period
|
|
59
|
+
* during which a replacement exists. The provider mounts at the app root on
|
|
60
|
+
* the first commit, which is before any navigation can create a history
|
|
61
|
+
* entry, so nothing is lost by not doing it at module scope.
|
|
62
|
+
* - **`pagehide`.** The offset map lives in memory only. A reload starts with
|
|
63
|
+
* an empty one, and a bfcache restore resumes a document whose provider is
|
|
64
|
+
* already mounted and whose focus effects therefore never re-run — so in
|
|
65
|
+
* both cases `'manual'` means NOBODY restores. Handing the mode back to the
|
|
66
|
+
* browser on the way out lets it do the job we are no longer able to.
|
|
67
|
+
* (react-router does exactly this, for the same reason.)
|
|
68
|
+
*
|
|
69
|
+
* The feature detect is also the platform test — `history` exists on web and
|
|
70
|
+
* nowhere else — so this stays one implementation rather than a fork. On React
|
|
71
|
+
* Native and during SSR it is a no-op.
|
|
72
|
+
*/
|
|
73
|
+
function useManualBrowserScrollRestoration() {
|
|
74
|
+
useEffect(() => {
|
|
75
|
+
if (typeof window === 'undefined' || typeof history === 'undefined' || !('scrollRestoration' in history)) {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
const previous = history.scrollRestoration;
|
|
79
|
+
history.scrollRestoration = 'manual';
|
|
80
|
+
const handBackToBrowser = () => {
|
|
81
|
+
history.scrollRestoration = 'auto';
|
|
82
|
+
};
|
|
83
|
+
window.addEventListener('pagehide', handBackToBrowser);
|
|
84
|
+
return () => {
|
|
85
|
+
window.removeEventListener('pagehide', handBackToBrowser);
|
|
86
|
+
history.scrollRestoration = previous;
|
|
87
|
+
};
|
|
88
|
+
}, []);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createContext","useContext","useEffect","useMemo","ScrollOffsetStore","jsx","_jsx","ScrollRestorationContext","displayName","ScrollRestorationProvider","children","adapter","store","value","useManualBrowserScrollRestoration","Provider","useScrollRestorationContext","Error","window","history","undefined","previous","scrollRestoration","handBackToBrowser","addEventListener","removeEventListener"],"sourceRoot":"../../../src","sources":["scroll/context.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,aAAa,EAAEC,UAAU,EAAEC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAErE,SAASC,iBAAiB,QAAQ,YAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAW5C,MAAMC,wBAAwB,gBAC5BP,aAAa,CAAuC,IAAI,CAAC;AAC3DO,wBAAwB,CAACC,WAAW,GAAG,+BAA+B;;AAEtE;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,yBAAyBA,CAAC;EACxCC,QAAQ;EACRC;AAC8B,CAAC,EAAE;EACjC,MAAMC,KAAK,GAAGT,OAAO,CAAC,MAAM,IAAIC,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC;EACxD,MAAMS,KAAK,GAAGV,OAAO,CAAC,OAAO;IAAES,KAAK;IAAED;EAAQ,CAAC,CAAC,EAAE,CAACC,KAAK,EAAED,OAAO,CAAC,CAAC;EAEnEG,iCAAiC,CAAC,CAAC;EAEnC,oBACER,IAAA,CAACC,wBAAwB,CAACQ,QAAQ;IAACF,KAAK,EAAEA,KAAM;IAAAH,QAAA,EAC7CA;EAAQ,CACwB,CAAC;AAExC;AAEA,OAAO,SAASM,2BAA2BA,CAAA,EAAkC;EAC3E,MAAMH,KAAK,GAAGZ,UAAU,CAACM,wBAAwB,CAAC;EAClD,IAAIM,KAAK,KAAK,IAAI,EAAE;IAClB,MAAM,IAAII,KAAK,CACb,yEACF,CAAC;EACH;EACA,OAAOJ,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,iCAAiCA,CAAA,EAAS;EACjDZ,SAAS,CAAC,MAAM;IACd,IACE,OAAOgB,MAAM,KAAK,WAAW,IAC7B,OAAOC,OAAO,KAAK,WAAW,IAC9B,EAAE,mBAAmB,IAAIA,OAAO,CAAC,EACjC;MACA,OAAOC,SAAS;IAClB;IACA,MAAMC,QAAQ,GAAGF,OAAO,CAACG,iBAAiB;IAC1CH,OAAO,CAACG,iBAAiB,GAAG,QAAQ;IAEpC,MAAMC,iBAAiB,GAAGA,CAAA,KAAM;MAC9BJ,OAAO,CAACG,iBAAiB,GAAG,MAAM;IACpC,CAAC;IACDJ,MAAM,CAACM,gBAAgB,CAAC,UAAU,EAAED,iBAAiB,CAAC;IAEtD,OAAO,MAAM;MACXL,MAAM,CAACO,mBAAmB,CAAC,UAAU,EAAEF,iBAAiB,CAAC;MACzDJ,OAAO,CAACG,iBAAiB,GAAGD,QAAQ;IACtC,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR","ignoreList":[]}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The expo-router binding for `@oxyhq/bloom/scroll`.
|
|
5
|
+
*
|
|
6
|
+
* This is the only file in the scroll primitive that knows a router exists. It
|
|
7
|
+
* is separate from the core so a consumer with a different router — or none —
|
|
8
|
+
* can still use the core with its own adapter; before the split, a module-scope
|
|
9
|
+
* `expo-router` import made the whole subpath unresolvable for them.
|
|
10
|
+
*
|
|
11
|
+
* The navigation hooks come from `expo-router` (which re-exports React
|
|
12
|
+
* Navigation's) rather than from `@react-navigation/native` directly. Every Oxy
|
|
13
|
+
* app uses expo-router as its router, so it is always a DIRECT, top-level
|
|
14
|
+
* dependency that resolves cleanly under Bun's isolated linker — whereas
|
|
15
|
+
* `@react-navigation/native` is only a nested/transitive dependency of
|
|
16
|
+
* expo-router and would fail to resolve when bundling those apps.
|
|
17
|
+
*/
|
|
18
|
+
import { useMemo } from 'react';
|
|
19
|
+
import { useFocusEffect, useRoute } from 'expo-router';
|
|
20
|
+
/**
|
|
21
|
+
* Params that describe how a screen was REACHED rather than what it shows, and
|
|
22
|
+
* so must not contribute to a content id — the same screen showing the same
|
|
23
|
+
* thing would otherwise get two ids depending on how the user got there.
|
|
24
|
+
*
|
|
25
|
+
* - `screen` / `params` are React Navigation's nested-navigator plumbing.
|
|
26
|
+
* expo-router strips both wherever it derives a URL from state
|
|
27
|
+
* (`global-state/getRouteInfoFromState.js` deletes them before building the
|
|
28
|
+
* pathname; `global-state/stateUtils.js` deletes `screen` from a payload;
|
|
29
|
+
* `hooks/useSearchParams.js` skips both).
|
|
30
|
+
* - `initial` is React Navigation's reserved anchor flag, set by expo-router's
|
|
31
|
+
* `withAnchor` handling in `global-state/getNavigationAction.js` — which also
|
|
32
|
+
* warns if an app supplies it as a real param.
|
|
33
|
+
*/
|
|
34
|
+
const NON_CONTENT_PARAM_KEYS = new Set(['screen', 'params', 'initial']);
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* expo-router's own internal params all carry this prefix
|
|
38
|
+
* (`build/navigationParams.js` — `__internal_expo_router_no_animation`,
|
|
39
|
+
* `__internal__expo_router_is_preview_navigation`, and the two zoom-transition
|
|
40
|
+
* ids, verified identical in expo-router 56.2.10 and 57.0.9). They are appended
|
|
41
|
+
* to the params of an ordinary navigation, so matching the prefix rather than
|
|
42
|
+
* the four literals means a fifth one added upstream cannot silently split one
|
|
43
|
+
* screen's content id in two.
|
|
44
|
+
*/
|
|
45
|
+
const INTERNAL_PARAM_PREFIX = '__internal';
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Depth at which nested param objects stop being described. React Navigation
|
|
49
|
+
* expects params to be serializable, but nothing enforces it, and a serializer
|
|
50
|
+
* that a cyclic value can hang is not one to put on a render path. Four levels
|
|
51
|
+
* is far past anything a URL produces.
|
|
52
|
+
*/
|
|
53
|
+
const MAX_PARAM_DEPTH = 4;
|
|
54
|
+
function serializeValue(value, depth) {
|
|
55
|
+
if (value === undefined) return '~undefined';
|
|
56
|
+
if (value === null) return '~null';
|
|
57
|
+
// JSON.stringify quotes and escapes, so a string can never be confused with
|
|
58
|
+
// a marker above or with the punctuation of a nested structure below.
|
|
59
|
+
if (typeof value === 'string') return JSON.stringify(value);
|
|
60
|
+
if (typeof value === 'number' || typeof value === 'boolean') {
|
|
61
|
+
return String(value);
|
|
62
|
+
}
|
|
63
|
+
if (depth >= MAX_PARAM_DEPTH) return '~deep';
|
|
64
|
+
if (Array.isArray(value)) {
|
|
65
|
+
return `[${value.map(entry => serializeValue(entry, depth + 1)).join(',')}]`;
|
|
66
|
+
}
|
|
67
|
+
if (typeof value === 'object') {
|
|
68
|
+
const source = value;
|
|
69
|
+
return `{${Object.keys(source).sort().map(key => `${JSON.stringify(key)}:${serializeValue(source[key], depth + 1)}`).join(',')}}`;
|
|
70
|
+
}
|
|
71
|
+
// A function, symbol or bigint reached a screen's params. Nothing about it
|
|
72
|
+
// identifies content, and it cannot be compared across renders anyway.
|
|
73
|
+
return '~opaque';
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Render a screen's params as a stable string. Keys are SORTED so params that
|
|
78
|
+
* differ only in insertion order — routinely, since expo-router rebuilds the
|
|
79
|
+
* object on every navigation — can never produce two ids for one screen.
|
|
80
|
+
*
|
|
81
|
+
* The exclusions apply at the top level only, because that is where React
|
|
82
|
+
* Navigation and expo-router inject theirs; a nested user object keeps every
|
|
83
|
+
* key it has.
|
|
84
|
+
*/
|
|
85
|
+
function serializeContentParams(params) {
|
|
86
|
+
if (params === undefined) return '';
|
|
87
|
+
const source = params;
|
|
88
|
+
return Object.keys(source).filter(key => !NON_CONTENT_PARAM_KEYS.has(key) && !key.startsWith(INTERNAL_PARAM_PREFIX)).sort().map(key => `${JSON.stringify(key)}:${serializeValue(source[key], 1)}`).join(',');
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Identify WHAT the calling screen is showing: its route name plus its params.
|
|
93
|
+
*
|
|
94
|
+
* `useRoute()` is the source, and it has to be: it reads the route object of
|
|
95
|
+
* the nearest screen, so a background screen keeps reporting its own content.
|
|
96
|
+
* `usePathname()` would not do — it reads the globally focused route, so a
|
|
97
|
+
* background screen would adopt the foreground one's pathname and save its
|
|
98
|
+
* offset under a key that is not its own.
|
|
99
|
+
*
|
|
100
|
+
* `route.key` is deliberately NOT part of this. An offset belongs to what the
|
|
101
|
+
* user was looking at, not to the history slot it occupied — see
|
|
102
|
+
* `deriveScrollKey` for the full reasoning and the trade it makes.
|
|
103
|
+
*
|
|
104
|
+
* Params are what separate two screens sharing a route name. That matters most
|
|
105
|
+
* where expo-router RECYCLES a route object: `layouts/StackClient.js` reuses
|
|
106
|
+
* the current route — key included — when `NAVIGATE` targets the current route
|
|
107
|
+
* name and `getSingularId` matches, i.e. when only the query changed. Measured
|
|
108
|
+
* on 56.2.10 and 57.0.9: `search?q=cats` -> `search?q=dogs` keeps one key and
|
|
109
|
+
* swaps `params`, so without the params the two searches would share an offset.
|
|
110
|
+
*/
|
|
111
|
+
function useScreenContentId() {
|
|
112
|
+
const route = useRoute();
|
|
113
|
+
const contentId = `${route.name}?${serializeContentParams(route.params)}`;
|
|
114
|
+
return useMemo(() => contentId, [contentId]);
|
|
115
|
+
}
|
|
116
|
+
function useScreenFocusEffect(effect) {
|
|
117
|
+
useFocusEffect(effect);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* The adapter to hand `<ScrollRestorationProvider adapter={...}>` in an
|
|
122
|
+
* expo-router app. A module-level constant, as the adapter contract requires.
|
|
123
|
+
*/
|
|
124
|
+
export const expoRouterScrollAdapter = {
|
|
125
|
+
useScreenContentId,
|
|
126
|
+
useScreenFocusEffect
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMemo","useFocusEffect","useRoute","NON_CONTENT_PARAM_KEYS","Set","INTERNAL_PARAM_PREFIX","MAX_PARAM_DEPTH","serializeValue","value","depth","undefined","JSON","stringify","String","Array","isArray","map","entry","join","source","Object","keys","sort","key","serializeContentParams","params","filter","has","startsWith","useScreenContentId","route","contentId","name","useScreenFocusEffect","effect","expoRouterScrollAdapter"],"sourceRoot":"../../../../src","sources":["scroll/expo-router/index.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,34 +1,93 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Native variant of the scroll-restoration primitive
|
|
4
|
+
* Native variant of the scroll-restoration primitive.
|
|
5
5
|
*
|
|
6
|
-
* React Navigation's native-stack keeps every screen
|
|
7
|
-
* stack, so a list's scroll position survives a push/pop for free
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
6
|
+
* React Navigation's native-stack keeps every screen MOUNTED while it is in the
|
|
7
|
+
* stack, so a list's scroll position survives a push/pop for free — this file
|
|
8
|
+
* must not interfere with that, and does not: nothing here runs on focus.
|
|
9
|
+
*
|
|
10
|
+
* What native does not survive is a KEY CHANGE: an in-screen tab or folder swap
|
|
11
|
+
* that re-keys a list, and a screen that genuinely unmounts and remounts. The
|
|
12
|
+
* effect below is therefore keyed on the storage key (plus `enabled`) rather
|
|
13
|
+
* than on focus, which draws exactly that line with no bookkeeping: React
|
|
14
|
+
* re-runs it when the key changes and leaves it alone when a push/pop merely
|
|
15
|
+
* re-focuses the same screen showing the same content.
|
|
12
16
|
*
|
|
13
17
|
* Web bundlers select `./index.web` via the `"browser"` export condition in
|
|
14
18
|
* `package.json`; native bundlers fall through to this file.
|
|
15
19
|
*/
|
|
16
|
-
|
|
20
|
+
import { useCallback, useEffect, useMemo, useRef } from 'react';
|
|
21
|
+
import { useScrollRestorationContext } from "./context.js";
|
|
22
|
+
import { createScroller } from "./scrollable.native.js";
|
|
23
|
+
import { deriveScrollKey } from "./store.js";
|
|
24
|
+
export { ScrollRestorationProvider } from "./context.js";
|
|
17
25
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
26
|
+
* Preserve and restore the scroll offset of `target` across content changes,
|
|
27
|
+
* keyed by the content its screen is showing plus an optional `options.key`.
|
|
28
|
+
*
|
|
29
|
+
* Behaviour (native):
|
|
30
|
+
* - Offsets are recorded from the returned `onScroll` binding, which the caller
|
|
31
|
+
* wires onto the list. There is no other way to observe a list's offset.
|
|
32
|
+
* - When the storage key changes — a re-keyed list, a remount, or `enabled`
|
|
33
|
+
* turning on — the saved offset is applied, or 0 when the key was never seen.
|
|
34
|
+
* - A push/pop that re-focuses the same screen scrolls nothing. The navigator
|
|
35
|
+
* already preserved the position, and re-applying it would at best be a
|
|
36
|
+
* no-op and at worst fight a list that has legitimately moved on.
|
|
20
37
|
*/
|
|
21
|
-
export function
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
38
|
+
export function useScrollRestoration(target, options) {
|
|
39
|
+
const {
|
|
40
|
+
store,
|
|
41
|
+
adapter
|
|
42
|
+
} = useScrollRestorationContext();
|
|
43
|
+
const contentId = adapter.useScreenContentId();
|
|
44
|
+
const enabled = options?.enabled ?? true;
|
|
45
|
+
const scrollKey = deriveScrollKey(contentId, options?.key);
|
|
26
46
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
47
|
+
// The key the live `onScroll` binding is allowed to record against. It is
|
|
48
|
+
// assigned by the effect below only AFTER that effect's own write has landed,
|
|
49
|
+
// and cleared by its cleanup — so the relayout the outgoing content emits
|
|
50
|
+
// while a new key is already rendered is never attributed to the new key.
|
|
51
|
+
const recordingKeyRef = useRef(null);
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (!enabled || scrollKey === null) return undefined;
|
|
54
|
+
const scroller = createScroller(target);
|
|
55
|
+
let frame = null;
|
|
56
|
+
|
|
57
|
+
// Restore and reset are ONE write: a miss reads 0, and 0 is exactly what a
|
|
58
|
+
// list showing content never seen this session must be sent to rather than
|
|
59
|
+
// left at the offset its predecessor had.
|
|
60
|
+
const apply = () => {
|
|
61
|
+
frame = null;
|
|
62
|
+
scroller.setOffset(store.read(scrollKey));
|
|
63
|
+
recordingKeyRef.current = scrollKey;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
// Defer one frame. This effect fires in the same commit that rendered the
|
|
67
|
+
// incoming rows, and a list cannot honour an offset before it has laid them
|
|
68
|
+
// out — the write would be clamped to whatever height it has reached so
|
|
69
|
+
// far, with no second chance (unlike web, native gets no scroll event to
|
|
70
|
+
// re-apply from). One frame is all that is needed because `enabled` has
|
|
71
|
+
// already guaranteed the rows are there; what remains is the layout pass.
|
|
72
|
+
if (typeof requestAnimationFrame === 'function') {
|
|
73
|
+
frame = requestAnimationFrame(apply);
|
|
74
|
+
} else {
|
|
75
|
+
// No frame scheduler (SSR, or a bare Node import of this barrel).
|
|
76
|
+
// Applying immediately is still the correct write; only the wait is lost.
|
|
77
|
+
apply();
|
|
78
|
+
}
|
|
79
|
+
return () => {
|
|
80
|
+
if (frame !== null) cancelAnimationFrame(frame);
|
|
81
|
+
recordingKeyRef.current = null;
|
|
82
|
+
};
|
|
83
|
+
}, [store, scrollKey, enabled, target]);
|
|
84
|
+
const onScroll = useCallback(event => {
|
|
85
|
+
const key = recordingKeyRef.current;
|
|
86
|
+
if (key === null) return;
|
|
87
|
+
store.save(key, event.nativeEvent.contentOffset.y);
|
|
88
|
+
}, [store]);
|
|
89
|
+
return useMemo(() => ({
|
|
90
|
+
onScroll
|
|
91
|
+
}), [onScroll]);
|
|
33
92
|
}
|
|
34
93
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useMemo","useRef","useScrollRestorationContext","createScroller","deriveScrollKey","ScrollRestorationProvider","useScrollRestoration","target","options","store","adapter","contentId","useScreenContentId","enabled","scrollKey","key","recordingKeyRef","undefined","scroller","frame","apply","setOffset","read","current","requestAnimationFrame","cancelAnimationFrame","onScroll","event","save","nativeEvent","contentOffset","y"],"sourceRoot":"../../../src","sources":["scroll/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,QAAQ,OAAO;AAE/D,SAASC,2BAA2B,QAAQ,cAAW;AACvD,SAASC,cAAc,QAAQ,wBAAqB;AACpD,SAASC,eAAe,QAAQ,YAAS;AAOzC,SAASC,yBAAyB,QAAQ,cAAW;AAYrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAClCC,MAA+B,EAC/BC,OAAqC,EACX;EAC1B,MAAM;IAAEC,KAAK;IAAEC;EAAQ,CAAC,GAAGR,2BAA2B,CAAC,CAAC;EACxD,MAAMS,SAAS,GAAGD,OAAO,CAACE,kBAAkB,CAAC,CAAC;EAC9C,MAAMC,OAAO,GAAGL,OAAO,EAAEK,OAAO,IAAI,IAAI;EACxC,MAAMC,SAAS,GAAGV,eAAe,CAACO,SAAS,EAAEH,OAAO,EAAEO,GAAG,CAAC;;EAE1D;EACA;EACA;EACA;EACA,MAAMC,eAAe,GAAGf,MAAM,CAAgB,IAAI,CAAC;EAEnDF,SAAS,CAAC,MAAM;IACd,IAAI,CAACc,OAAO,IAAIC,SAAS,KAAK,IAAI,EAAE,OAAOG,SAAS;IAEpD,MAAMC,QAAQ,GAAGf,cAAc,CAACI,MAAM,CAAC;IACvC,IAAIY,KAAoB,GAAG,IAAI;;IAE/B;IACA;IACA;IACA,MAAMC,KAAK,GAAGA,CAAA,KAAY;MACxBD,KAAK,GAAG,IAAI;MACZD,QAAQ,CAACG,SAAS,CAACZ,KAAK,CAACa,IAAI,CAACR,SAAS,CAAC,CAAC;MACzCE,eAAe,CAACO,OAAO,GAAGT,SAAS;IACrC,CAAC;;IAED;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAOU,qBAAqB,KAAK,UAAU,EAAE;MAC/CL,KAAK,GAAGK,qBAAqB,CAACJ,KAAK,CAAC;IACtC,CAAC,MAAM;MACL;MACA;MACAA,KAAK,CAAC,CAAC;IACT;IAEA,OAAO,MAAM;MACX,IAAID,KAAK,KAAK,IAAI,EAAEM,oBAAoB,CAACN,KAAK,CAAC;MAC/CH,eAAe,CAACO,OAAO,GAAG,IAAI;IAChC,CAAC;EACH,CAAC,EAAE,CAACd,KAAK,EAAEK,SAAS,EAAED,OAAO,EAAEN,MAAM,CAAC,CAAC;EAEvC,MAAMmB,QAAQ,GAAG5B,WAAW,CACzB6B,KAAK,IAAK;IACT,MAAMZ,GAAG,GAAGC,eAAe,CAACO,OAAO;IACnC,IAAIR,GAAG,KAAK,IAAI,EAAE;IAClBN,KAAK,CAACmB,IAAI,CAACb,GAAG,EAAEY,KAAK,CAACE,WAAW,CAACC,aAAa,CAACC,CAAC,CAAC;EACpD,CAAC,EACD,CAACtB,KAAK,CACR,CAAC;EAED,OAAOT,OAAO,CAAC,OAAO;IAAE0B;EAAS,CAAC,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;AAClD","ignoreList":[]}
|