@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.
Files changed (105) hide show
  1. package/README.md +3 -3
  2. package/lib/commonjs/provider/index.js +11 -7
  3. package/lib/commonjs/provider/index.js.map +1 -1
  4. package/lib/commonjs/scroll/context.js +96 -0
  5. package/lib/commonjs/scroll/context.js.map +1 -0
  6. package/lib/commonjs/scroll/expo-router/index.js +133 -0
  7. package/lib/commonjs/scroll/expo-router/index.js.map +1 -0
  8. package/lib/commonjs/scroll/index.js +85 -21
  9. package/lib/commonjs/scroll/index.js.map +1 -1
  10. package/lib/commonjs/scroll/index.web.js +184 -118
  11. package/lib/commonjs/scroll/index.web.js.map +1 -1
  12. package/lib/commonjs/scroll/scrollable.native.js +58 -0
  13. package/lib/commonjs/scroll/scrollable.native.js.map +1 -0
  14. package/lib/commonjs/scroll/store.js +47 -25
  15. package/lib/commonjs/scroll/store.js.map +1 -1
  16. package/lib/commonjs/theme/color-policy.js +11 -9
  17. package/lib/commonjs/theme/color-policy.js.map +1 -1
  18. package/lib/module/provider/index.js +10 -6
  19. package/lib/module/provider/index.js.map +1 -1
  20. package/lib/module/scroll/context.js +90 -0
  21. package/lib/module/scroll/context.js.map +1 -0
  22. package/lib/module/scroll/expo-router/index.js +128 -0
  23. package/lib/module/scroll/expo-router/index.js.map +1 -0
  24. package/lib/module/scroll/index.js +80 -21
  25. package/lib/module/scroll/index.js.map +1 -1
  26. package/lib/module/scroll/index.web.js +181 -119
  27. package/lib/module/scroll/index.web.js.map +1 -1
  28. package/lib/module/scroll/scrollable.native.js +54 -0
  29. package/lib/module/scroll/scrollable.native.js.map +1 -0
  30. package/lib/module/scroll/store.js +47 -25
  31. package/lib/module/scroll/store.js.map +1 -1
  32. package/lib/module/theme/color-policy.js +11 -9
  33. package/lib/module/theme/color-policy.js.map +1 -1
  34. package/lib/typescript/commonjs/provider/index.d.ts +7 -5
  35. package/lib/typescript/commonjs/provider/index.d.ts.map +1 -1
  36. package/lib/typescript/commonjs/scroll/context.d.ts +14 -0
  37. package/lib/typescript/commonjs/scroll/context.d.ts.map +1 -0
  38. package/lib/typescript/commonjs/scroll/expo-router/index.d.ts +7 -0
  39. package/lib/typescript/commonjs/scroll/expo-router/index.d.ts.map +1 -0
  40. package/lib/typescript/commonjs/scroll/index.d.ts +14 -23
  41. package/lib/typescript/commonjs/scroll/index.d.ts.map +1 -1
  42. package/lib/typescript/commonjs/scroll/index.web.d.ts +17 -19
  43. package/lib/typescript/commonjs/scroll/index.web.d.ts.map +1 -1
  44. package/lib/typescript/commonjs/scroll/scrollable.native.d.ts +23 -0
  45. package/lib/typescript/commonjs/scroll/scrollable.native.d.ts.map +1 -0
  46. package/lib/typescript/commonjs/scroll/store.d.ts +41 -22
  47. package/lib/typescript/commonjs/scroll/store.d.ts.map +1 -1
  48. package/lib/typescript/commonjs/scroll/types.d.ts +82 -12
  49. package/lib/typescript/commonjs/scroll/types.d.ts.map +1 -1
  50. package/lib/typescript/commonjs/theme/color-policy.d.ts.map +1 -1
  51. package/lib/typescript/module/provider/index.d.ts +7 -5
  52. package/lib/typescript/module/provider/index.d.ts.map +1 -1
  53. package/lib/typescript/module/scroll/context.d.ts +14 -0
  54. package/lib/typescript/module/scroll/context.d.ts.map +1 -0
  55. package/lib/typescript/module/scroll/expo-router/index.d.ts +7 -0
  56. package/lib/typescript/module/scroll/expo-router/index.d.ts.map +1 -0
  57. package/lib/typescript/module/scroll/index.d.ts +14 -23
  58. package/lib/typescript/module/scroll/index.d.ts.map +1 -1
  59. package/lib/typescript/module/scroll/index.web.d.ts +17 -19
  60. package/lib/typescript/module/scroll/index.web.d.ts.map +1 -1
  61. package/lib/typescript/module/scroll/scrollable.native.d.ts +23 -0
  62. package/lib/typescript/module/scroll/scrollable.native.d.ts.map +1 -0
  63. package/lib/typescript/module/scroll/store.d.ts +41 -22
  64. package/lib/typescript/module/scroll/store.d.ts.map +1 -1
  65. package/lib/typescript/module/scroll/types.d.ts +82 -12
  66. package/lib/typescript/module/scroll/types.d.ts.map +1 -1
  67. package/lib/typescript/module/theme/color-policy.d.ts.map +1 -1
  68. package/package.json +15 -1
  69. package/src/__tests__/BloomProvider.web.test.tsx +8 -15
  70. package/src/__tests__/optional-peer-imports.test.ts +2 -2
  71. package/src/__tests__/scroll-expo-router-adapter.test.tsx +164 -0
  72. package/src/__tests__/scroll-native.test.tsx +465 -0
  73. package/src/__tests__/scroll-store.test.ts +41 -17
  74. package/src/__tests__/scroll-web.test.tsx +547 -111
  75. package/src/provider/index.tsx +10 -7
  76. package/src/scroll/context.tsx +107 -0
  77. package/src/scroll/expo-router/index.ts +140 -0
  78. package/src/scroll/index.ts +92 -25
  79. package/src/scroll/index.web.tsx +219 -162
  80. package/src/scroll/scrollable.native.ts +64 -0
  81. package/src/scroll/store.ts +47 -25
  82. package/src/scroll/types.ts +82 -12
  83. package/src/theme/__tests__/__fixtures__/golden-resolved-tokens.json +27 -27
  84. package/src/theme/__tests__/__snapshots__/visual-gallery.test.tsx.snap +55 -55
  85. package/src/theme/__tests__/policy-legibility.test.ts +21 -1
  86. package/src/theme/color-policy.ts +13 -9
  87. package/lib/commonjs/provider/scroll-provider.js +0 -13
  88. package/lib/commonjs/provider/scroll-provider.js.map +0 -1
  89. package/lib/commonjs/provider/scroll-provider.web.js +0 -13
  90. package/lib/commonjs/provider/scroll-provider.web.js.map +0 -1
  91. package/lib/module/provider/scroll-provider.js +0 -16
  92. package/lib/module/provider/scroll-provider.js.map +0 -1
  93. package/lib/module/provider/scroll-provider.web.js +0 -5
  94. package/lib/module/provider/scroll-provider.web.js.map +0 -1
  95. package/lib/typescript/commonjs/provider/scroll-provider.d.ts +0 -14
  96. package/lib/typescript/commonjs/provider/scroll-provider.d.ts.map +0 -1
  97. package/lib/typescript/commonjs/provider/scroll-provider.web.d.ts +0 -3
  98. package/lib/typescript/commonjs/provider/scroll-provider.web.d.ts.map +0 -1
  99. package/lib/typescript/module/provider/scroll-provider.d.ts +0 -14
  100. package/lib/typescript/module/provider/scroll-provider.d.ts.map +0 -1
  101. package/lib/typescript/module/provider/scroll-provider.web.d.ts +0 -3
  102. package/lib/typescript/module/provider/scroll-provider.web.d.ts.map +0 -1
  103. package/src/__tests__/scroll-native.test.ts +0 -25
  104. package/src/provider/scroll-provider.ts +0 -13
  105. package/src/provider/scroll-provider.web.ts +0 -2
@@ -207,15 +207,17 @@ function vividHueNear(hue) {
207
207
  * why 11 of the 13 presets carry white and exactly the two light ones do not.
208
208
  */
209
209
  function whiteLabelTone(palette, seedTone, isDark) {
210
- // DARK keeps the brand's OWN tone, floored so a dark seed still lifts off the
211
- // ground. On a near-black page the fill IS the brand oxy at tone 49 is a
212
- // different, electric purple, not #c46ede so fidelity wins and the label
213
- // follows. LIGHT is the opposite: a bright fill on a white page reads thin, so
214
- // it comes down to the ceiling white allows unless that costs more than the
215
- // budget, which is what keeps yellow yellow and faircoin lime.
216
- if (isDark) return Math.max(seedTone, DARK_SEED_FLOOR);
217
- const candidate = Math.max(LIGHT_FILL_TONE, seedTone - TONE_BUDGET);
218
- return contrastOf(palette.tone(candidate), true) >= AA ? candidate : seedTone;
210
+ // LIGHT: every fill comes down, no exemption. On a near-white page a bright
211
+ // colour has nothing to read against a lime at its own tone 90 is a pale
212
+ // smear there, indistinguishable from the same colour in dark, which is not a
213
+ // theme at all. Coming down is what makes faircoin a deep green in light and a
214
+ // bright lime in dark.
215
+ if (!isDark) return LIGHT_FILL_TONE;
216
+ // DARK: the budget applies. Most brands come down to where white fits, but a
217
+ // seed that is already light cannot without ceasing to be itself, so it keeps
218
+ // its own tone and takes a black label. That is the eleven-and-two pattern.
219
+ const candidate = Math.max(DARK_FILL_TONE, seedTone - TONE_BUDGET);
220
+ return contrastOf(palette.tone(candidate), true) >= AA ? candidate : Math.max(seedTone, DARK_SEED_FLOOR);
219
221
  }
220
222
 
221
223
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["argbFromHex","Hct","TonalPalette","blueFromArgb","greenFromArgb","redFromArgb","STATUS_SEEDS","success","error","warning","info","AA","rgb","argb","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","fromHueAndChroma","bestTone","bestChroma","tone","chroma","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","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":["argbFromHex","Hct","TonalPalette","blueFromArgb","greenFromArgb","redFromArgb","STATUS_SEEDS","success","error","warning","info","AA","rgb","argb","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","fromHueAndChroma","bestTone","bestChroma","tone","chroma","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","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":[]}
@@ -18,11 +18,13 @@
18
18
  * Nesting extra contexts costs nothing at runtime — the win is that scope is no
19
19
  * longer a per-app decision.
20
20
  *
21
- * EXPO/EXPO-ROUTER APPS ONLY. The scroll-restoration provider it mounts imports
22
- * `expo-router` (its web implementation keys offsets on the focused route), so
23
- * a Vite/SPA consumer that has no expo-router cannot resolve this module. Those
24
- * apps keep mounting `BloomThemeProvider` (and any other piece they need)
25
- * directly that is not a lesser path, just the one without a router.
21
+ * EXPO/EXPO-ROUTER APPS ONLY, and now for one narrow reason: it binds the
22
+ * scroll store to the expo-router ADAPTER, which is the only module in the
23
+ * scroll primitive that imports `expo-router`. The scroll core itself is
24
+ * router-agnostic, so a Vite/SPA consumer can mount
25
+ * `<ScrollRestorationProvider adapter={...}>` from `@oxyhq/bloom/scroll` with
26
+ * an adapter for its own router — alongside `BloomThemeProvider` and whatever
27
+ * else it needs — rather than going without.
26
28
  *
27
29
  * NOT included, on purpose — these are OUTLETS, not state, and their placement
28
30
  * in the tree is a real app decision (z-order, safe areas, and mounting a
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/provider/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG9E,OAAO,EAAsB,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAG5E,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,uBAAuB,EAAE,UAAU,CAAC;IACnF,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,wFAAwF;IACxF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,aAAa,EACb,OAAc,EACd,GAAG,UAAU,EACd,EAAE,kBAAkB,2CAcpB;yBAnBe,aAAa"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/provider/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG9E,OAAO,EAAsB,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAI5E,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,uBAAuB,EAAE,UAAU,CAAC;IACnF,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,wFAAwF;IACxF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,aAAa,EACb,OAAc,EACd,GAAG,UAAU,EACd,EAAE,kBAAkB,2CAcpB;yBAnBe,aAAa"}
@@ -0,0 +1,14 @@
1
+ import { ScrollOffsetStore } from './store';
2
+ import type { ScrollRestorationProviderProps, ScrollRouterAdapter } from './types';
3
+ export interface ScrollRestorationContextValue {
4
+ store: ScrollOffsetStore;
5
+ adapter: ScrollRouterAdapter;
6
+ }
7
+ /**
8
+ * Holds the offset map and the router binding for the subtree. One provider
9
+ * near the app root is enough; the store lives as long as the provider, so
10
+ * offsets survive navigating away and back (including browser Back/Forward).
11
+ */
12
+ export declare function ScrollRestorationProvider({ children, adapter, }: ScrollRestorationProviderProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function useScrollRestorationContext(): ScrollRestorationContextValue;
14
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/scroll/context.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EACV,8BAA8B,EAC9B,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAMD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,QAAQ,EACR,OAAO,GACR,EAAE,8BAA8B,2CAWhC;AAED,wBAAgB,2BAA2B,IAAI,6BAA6B,CAQ3E"}
@@ -0,0 +1,7 @@
1
+ import type { ScrollRouterAdapter } from '../types';
2
+ /**
3
+ * The adapter to hand `<ScrollRestorationProvider adapter={...}>` in an
4
+ * expo-router app. A module-level constant, as the adapter contract requires.
5
+ */
6
+ export declare const expoRouterScrollAdapter: ScrollRouterAdapter;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/scroll/expo-router/index.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAqB,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAkHvE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,mBAGrC,CAAC"}
@@ -1,27 +1,18 @@
1
+ import type { ScrollRestorationBinding, ScrollRestorationTarget, UseScrollRestorationOptions } from './types';
2
+ export { ScrollRestorationProvider } from './context';
3
+ export type { ScreenFocusEffect, ScrollableHandle, ScrollRestorationBinding, ScrollRestorationProviderProps, ScrollRestorationTarget, ScrollRouterAdapter, UseScrollRestorationOptions, } from './types';
1
4
  /**
2
- * Native variant of the scroll-restoration primitive a deliberate no-op.
5
+ * Preserve and restore the scroll offset of `target` across content changes,
6
+ * keyed by the content its screen is showing plus an optional `options.key`.
3
7
  *
4
- * React Navigation's native-stack keeps every screen mounted while it is in the
5
- * stack, so a list's scroll position survives a push/pop for free. There is
6
- * nothing to save or restore. We still ship the full API surface (provider +
7
- * hook) so consumers write one set of call sites that compile and run on every
8
- * platform; on native the provider just renders its children and the hook does
9
- * nothing.
10
- *
11
- * Web bundlers select `./index.web` via the `"browser"` export condition in
12
- * `package.json`; native bundlers fall through to this file.
13
- */
14
- import type { ReactElement } from 'react';
15
- import type { ScrollRestorationProviderProps, ScrollRestorationTarget, UseScrollRestorationOptions } from './types';
16
- export type { ScrollableHandle, ScrollRestorationProviderProps, ScrollRestorationTarget, UseScrollRestorationOptions, } from './types';
17
- /**
18
- * No-op provider. Renders children unchanged — native scroll persistence is
19
- * handled by the navigator, so no per-route state is kept.
20
- */
21
- export declare function ScrollRestorationProvider({ children, }: ScrollRestorationProviderProps): ReactElement;
22
- /**
23
- * No-op hook. Accepts the same arguments as the web implementation so call
24
- * sites are identical across platforms.
8
+ * Behaviour (native):
9
+ * - Offsets are recorded from the returned `onScroll` binding, which the caller
10
+ * wires onto the list. There is no other way to observe a list's offset.
11
+ * - When the storage key changes a re-keyed list, a remount, or `enabled`
12
+ * turning on the saved offset is applied, or 0 when the key was never seen.
13
+ * - A push/pop that re-focuses the same screen scrolls nothing. The navigator
14
+ * already preserved the position, and re-applying it would at best be a
15
+ * no-op and at worst fight a list that has legitimately moved on.
25
16
  */
26
- export declare function useScrollRestoration(_target: ScrollRestorationTarget, _options?: UseScrollRestorationOptions): void;
17
+ export declare function useScrollRestoration(target: ScrollRestorationTarget, options?: UseScrollRestorationOptions): ScrollRestorationBinding;
27
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/scroll/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,EACV,8BAA8B,EAC9B,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AAEjB,YAAY,EACV,gBAAgB,EAChB,8BAA8B,EAC9B,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,QAAQ,GACT,EAAE,8BAA8B,GAAG,YAAY,CAE/C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,uBAAuB,EAChC,QAAQ,CAAC,EAAE,2BAA2B,GACrC,IAAI,CAEN"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/scroll/index.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EACV,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAEtD,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,8BAA8B,EAC9B,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,uBAAuB,EAC/B,OAAO,CAAC,EAAE,2BAA2B,GACpC,wBAAwB,CAyD1B"}
@@ -1,26 +1,24 @@
1
- import type { ScrollRestorationProviderProps, ScrollRestorationTarget, UseScrollRestorationOptions } from './types';
2
- export type { ScrollableHandle, ScrollRestorationProviderProps, ScrollRestorationTarget, UseScrollRestorationOptions, } from './types';
3
- /**
4
- * Holds the per-route offset map for the subtree. One provider near the app
5
- * root is enough; the store lives for the document's lifetime so offsets
6
- * survive navigating away and back (including browser Back/Forward).
7
- */
8
- export declare function ScrollRestorationProvider({ children, }: ScrollRestorationProviderProps): import("react/jsx-runtime").JSX.Element;
1
+ import type { ScrollRestorationBinding, ScrollRestorationTarget, UseScrollRestorationOptions } from './types';
2
+ export { ScrollRestorationProvider } from './context';
3
+ export type { ScreenFocusEffect, ScrollableHandle, ScrollRestorationBinding, ScrollRestorationProviderProps, ScrollRestorationTarget, ScrollRouterAdapter, UseScrollRestorationOptions, } from './types';
9
4
  /**
10
5
  * Preserve and restore the scroll offset of `target` across navigation, keyed
11
- * by the active route (plus an optional `options.key` for routes that host
12
- * multiple scrollables).
6
+ * by the content its screen is showing plus an optional `options.key`.
13
7
  *
14
8
  * Behaviour (web):
15
9
  * - On every scroll while the screen is focused, the current offset is recorded
16
- * in memory and persisted. This live stream of saves is the source of truth.
17
- * - On focus, the saved offset is re-applied across a bounded run of animation
18
- * frames, stopping as soon as the write sticks (the list has re-rendered its
19
- * rows and grown tall enough) or {@link RESTORE_FRAME_CAP} is reached. A
20
- * saved offset of 0 is a no-op (nothing to restore).
21
- * - On blur, the LAST OBSERVED offset is persisted as a final safety net — not
22
- * a fresh `scrollTop` read, which the navigator may already have forced to 0
23
- * while collapsing the hidden screen.
10
+ * under the key that was live when the listener was attached. This stream of
11
+ * saves is the source of truth.
12
+ * - On focus and again whenever the key changes while the screen STAYS
13
+ * focused, which is how an in-screen tab or folder swap is seen at all — the
14
+ * offset saved for the new key is re-applied across a bounded run of
15
+ * animation frames, stopping as soon as the write sticks or
16
+ * {@link RESTORE_FRAME_CAP} is reached. Content never seen this session is
17
+ * written to 0 once instead; a write to 0 always sticks, so it needs no loop.
18
+ * - On blur (and on a key change), the LAST OBSERVED offset is persisted under
19
+ * the OUTGOING key as a final safety net — not a fresh `scrollTop` read,
20
+ * which the navigator may already have forced to 0 while collapsing the
21
+ * hidden screen.
24
22
  */
25
- export declare function useScrollRestoration(target: ScrollRestorationTarget, options?: UseScrollRestorationOptions): void;
23
+ export declare function useScrollRestoration(target: ScrollRestorationTarget, options?: UseScrollRestorationOptions): ScrollRestorationBinding;
26
24
  //# sourceMappingURL=index.web.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../../src/scroll/index.web.tsx"],"names":[],"mappings":"AAgDA,OAAO,KAAK,EACV,8BAA8B,EAC9B,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AAEjB,YAAY,EACV,gBAAgB,EAChB,8BAA8B,EAC9B,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AAmCjB;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,QAAQ,GACT,EAAE,8BAA8B,2CAOhC;AAYD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,uBAAuB,EAC/B,OAAO,CAAC,EAAE,2BAA2B,GACpC,IAAI,CAqGN"}
1
+ {"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../../src/scroll/index.web.tsx"],"names":[],"mappings":"AA6CA,OAAO,KAAK,EACV,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAEtD,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,8BAA8B,EAC9B,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AA0DjB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,uBAAuB,EAC/B,OAAO,CAAC,EAAE,2BAA2B,GACpC,wBAAwB,CA4J1B"}
@@ -0,0 +1,23 @@
1
+ import type { ScrollRestorationTarget } from './types';
2
+ /**
3
+ * The write half of a scrollable, on native. There is no read half: native
4
+ * offers no way to sample a list's offset from outside it, so offsets arrive
5
+ * through the `onScroll` binding the hook returns instead.
6
+ */
7
+ export interface NativeScroller {
8
+ setOffset: (offset: number) => void;
9
+ }
10
+ /**
11
+ * Build a {@link NativeScroller} for a target.
12
+ *
13
+ * `scrollToOffset` (`FlatList`, `FlashList`) is preferred over `scrollTo`
14
+ * (`ScrollView`) because a list exposes both shapes on some versions and only
15
+ * the former accounts for the list's own header. The `'window'` sentinel has no
16
+ * native meaning — there is no document scroller — so it resolves to a no-op
17
+ * rather than an error: a call site shared with web legitimately passes it.
18
+ *
19
+ * The handle is re-resolved on every write; it is never cached, because a ref
20
+ * can be swapped or detached between the schedule and the write.
21
+ */
22
+ export declare function createScroller(target: ScrollRestorationTarget): NativeScroller;
23
+ //# sourceMappingURL=scrollable.native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollable.native.d.ts","sourceRoot":"","sources":["../../../../src/scroll/scrollable.native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEzE;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAsBD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,uBAAuB,GAC9B,cAAc,CAkBhB"}
@@ -1,42 +1,61 @@
1
1
  /**
2
- * Pure, platform-agnostic core of the scroll-restoration primitive.
2
+ * Derive the storage key for a scrollable from WHAT its screen is showing plus
3
+ * an optional caller sub-key.
3
4
  *
4
- * This file deliberately contains NO React and NO DOM/native imports so the
5
- * logic can be unit-tested in isolation and shared verbatim by the web and
6
- * native barrels. The web barrel drives it with real scroll offsets; the
7
- * native barrel never instantiates it (native-stack already restores scroll).
8
- */
9
- /**
10
- * Derive the storage key for a scrollable from its owning route key and an
11
- * optional caller sub-key.
5
+ * The key is CONTENT identity, deliberately not the navigation entry. An offset
6
+ * belongs to what the user was looking at, so returning to it restores however
7
+ * they got there browser Back or Forward, a tab press, an in-app link — and
8
+ * only content never seen this session opens at the top. Keying on the entry
9
+ * would defeat that: a tab press and `router.replace` both mint a fresh entry,
10
+ * so both would open at the top even though the user has been there.
11
+ *
12
+ * The trade, chosen rather than overlooked: the same content occupying two LIVE
13
+ * entries now shares one offset. Pushing `/@alice` on top of `/@alice` in a
14
+ * native stack restores the first one's position instead of opening at the top,
15
+ * and while both are mounted each writes to the same key. That is the price of
16
+ * a tab press restoring, which is the behaviour that was asked for.
12
17
  *
13
- * - `routeKey` is React Navigation's stable per-route `route.key`.
14
- * - `subKey` distinguishes multiple scrollables that share a single route.
18
+ * The key is always the same two-field composite, with an absent sub-key
19
+ * written as empty, so two different identities can never collapse onto one key
20
+ * by omission.
15
21
  *
16
- * Returns `null` when there is no route key to anchor against (the scrollable
17
- * is not inside a navigator), which the caller treats as "do not persist".
22
+ * Returns `null` when there is no content id to anchor against (the scrollable
23
+ * is not inside a navigator, or the adapter cannot answer), which every caller
24
+ * treats as "do not persist and do not restore".
18
25
  */
19
- export declare function deriveScrollKey(routeKey: string | undefined, subKey?: string): string | null;
26
+ export declare function deriveScrollKey(contentId: string | null, subKey?: string): string | null;
20
27
  /**
21
28
  * In-memory map of `scrollKey -> last-known scroll offset`.
22
29
  *
23
- * Mirrors the semantics of Bluesky's `Map<screenKey, scrollY>`: offsets live
24
- * only for the lifetime of the document/session. We never persist them — a
25
- * full reload should start at the top and we never auto-evict, because a
26
- * route can be revisited via browser Forward/Back long after it blurred.
30
+ * Offsets live only for the lifetime of the document/session. We never persist
31
+ * them a full reload should start at the top and we never auto-evict,
32
+ * because an entry can be revisited via browser Forward/Back long after it
33
+ * blurred.
34
+ *
35
+ * Deliberately an instance held in React context rather than a module-level
36
+ * singleton: a dependency tree can legitimately contain two copies of Bloom
37
+ * (a hoisted one plus a nested one under another Oxy package), and a
38
+ * module-global would then exist twice with no way for either half to see the
39
+ * other's offsets.
27
40
  */
28
41
  export declare class ScrollOffsetStore {
29
42
  private readonly offsets;
30
43
  /** Persist the offset for a key. A negative offset is clamped to 0. */
31
44
  save(key: string, offset: number): void;
32
45
  /**
33
- * Read the saved offset for a key. Returns `0` when nothing was saved, so
34
- * callers can restore unconditionally (an unseen list restores to the top).
46
+ * Read the saved offset for a key. Returns `0` when nothing was saved, which
47
+ * is the same value a caller writes when {@link has} is false — an unseen
48
+ * list restores to the top.
35
49
  */
36
50
  read(key: string): number;
37
- /** Whether an offset was ever saved for this key. */
51
+ /**
52
+ * Whether an offset was ever saved for this key. This — not `read() > 0` —
53
+ * is what separates "restore" from "reset": a key that was never seen and a
54
+ * key deliberately saved at the top both read 0, and only the store knows
55
+ * which is which.
56
+ */
38
57
  has(key: string): boolean;
39
- /** Drop a saved offset (e.g. when a route is permanently removed). */
58
+ /** Drop a saved offset (e.g. when an entry is permanently removed). */
40
59
  forget(key: string): void;
41
60
  /** Clear every saved offset. Primarily for tests and full resets. */
42
61
  clear(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/scroll/store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,GAAG,IAAI,CAIf;AAED;;;;;;;GAOG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IAErD,uEAAuE;IACvE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIvC;;;OAGG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIzB,qDAAqD;IACrD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,sEAAsE;IACtE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB,qEAAqE;IACrE,KAAK,IAAI,IAAI;IAIb,iDAAiD;IACjD,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/scroll/store.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,GAAG,IAAI,CAGf;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IAErD,uEAAuE;IACvE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIvC;;;;OAIG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIzB;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,uEAAuE;IACvE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB,qEAAqE;IACrE,KAAK,IAAI,IAAI;IAIb,iDAAiD;IACjD,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
@@ -1,24 +1,31 @@
1
1
  import type { ReactNode, RefObject } from 'react';
2
+ import type { NativeScrollEvent, NativeSyntheticEvent } from 'react-native';
2
3
  /**
3
4
  * Anything `useScrollRestoration` knows how to read/write a vertical scroll
4
5
  * offset from. The hook accepts a ref to one of these:
5
6
  *
6
- * - a React Native `ScrollView` / `FlatList` ref (which on web is backed by a
7
- * DOM node and exposes `getScrollableNode()`),
7
+ * - a React Native `ScrollView` / `FlatList` / `FlashList` ref (which on web is
8
+ * backed by a DOM node and exposes `getScrollableNode()`),
8
9
  * - a raw DOM element ref (when a component renders its own scroll container),
9
- * - the literal `'window'` sentinel, for the rare layout where the list IS the
10
- * window scroller (matches Bluesky's default).
10
+ * - the literal `'window'` sentinel, for the layout where the list IS the
11
+ * document scroller.
11
12
  *
12
- * Native never reads any of these — the native hook is a no-op — so the type is
13
- * intentionally permissive rather than coupled to a specific RN class.
13
+ * The two imperative methods are the native write path; web writes `scrollTop`
14
+ * on the resolved DOM node instead. Both are optional because a given ref only
15
+ * ever exposes one of them (list vs. scroll view).
14
16
  */
15
17
  export interface ScrollableHandle {
16
- /** Imperative scroll API exposed by RN scrollables. */
18
+ /** `ScrollView`'s imperative scroll API. */
17
19
  scrollTo?: (options: {
18
20
  x?: number;
19
21
  y?: number;
20
22
  animated?: boolean;
21
23
  }) => void;
24
+ /** `FlatList`/`FlashList`'s imperative scroll API. */
25
+ scrollToOffset?: (options: {
26
+ offset: number;
27
+ animated?: boolean;
28
+ }) => void;
22
29
  /** Web/RNW path: returns the underlying DOM node. */
23
30
  getScrollableNode?: () => unknown;
24
31
  }
@@ -26,21 +33,84 @@ export interface ScrollableHandle {
26
33
  * The accepted ref shapes. `'window'` is a sentinel for the document scroller.
27
34
  */
28
35
  export type ScrollRestorationTarget = RefObject<ScrollableHandle | null> | RefObject<unknown> | 'window';
36
+ /** The effect shape `useScreenFocusEffect` runs — mirrors `useEffect`'s. */
37
+ export type ScreenFocusEffect = () => (() => void) | void;
38
+ /**
39
+ * The router bindings the scroll core needs, and the ONLY thing it knows about
40
+ * routing. Keeping this to two hooks is what lets the core ship without a
41
+ * router import, so a Vite/SPA consumer can supply its own adapter (or none).
42
+ *
43
+ * Both members are HOOKS: the core calls them from `useScrollRestoration`, so
44
+ * the adapter value must be referentially stable for the lifetime of the
45
+ * provider (a module-level constant, which is what every adapter Bloom ships
46
+ * is). Swapping in a different adapter at runtime would change the hook order
47
+ * of every consumer below it.
48
+ */
49
+ export interface ScrollRouterAdapter {
50
+ /**
51
+ * Identify WHAT the calling screen is showing — its route and params, not the
52
+ * history slot it occupies. Offsets are remembered per content, so returning
53
+ * to something already seen restores it however the user got there.
54
+ *
55
+ * It must describe the screen the CALLER is rendered inside, never the
56
+ * globally focused one: a background screen has to keep reporting its own
57
+ * content, or it would save its offset under the foreground screen's key.
58
+ *
59
+ * `null` when the adapter cannot answer (a scrollable rendered outside any
60
+ * navigator), which makes the hook inert rather than guessing.
61
+ */
62
+ useScreenContentId(): string | null;
63
+ /**
64
+ * Run `effect` while the calling screen is focused, and its cleanup on blur.
65
+ * Re-runs when `effect`'s identity changes AND the screen is focused — that
66
+ * is what makes an in-screen key change (a tab or folder swap) visible to a
67
+ * hook that never blurred.
68
+ */
69
+ useScreenFocusEffect(effect: ScreenFocusEffect): void;
70
+ }
29
71
  export interface UseScrollRestorationOptions {
30
72
  /**
31
- * Sub-key to disambiguate multiple scrollables that live on the same route
32
- * (e.g. the tabs of a profile screen). Combined with the active route key to
33
- * form the storage key. Omit when a route has a single scrollable.
73
+ * Sub-key distinguishing scrollables that share one screen AND one content
74
+ * id the tabs of a profile, the folders of a saved-items screen. Changing
75
+ * it while the screen stays focused saves the outgoing list's offset and
76
+ * restores (or resets) the incoming one.
34
77
  */
35
78
  key?: string;
36
79
  /**
37
- * When `false`, the hook is inert (saves and restores are skipped). Useful to
38
- * gate restoration behind a feature flag without changing call sites.
80
+ * When `false` the hook is completely inert: no save, no restore, no reset.
81
+ *
82
+ * On NATIVE this is load-bearing rather than a feature flag. Restoring into a
83
+ * list whose rows have not been laid out yet lands at the wrong place (or is
84
+ * clamped away), and native has no equivalent of the web path's re-apply
85
+ * loop — so the caller gates on its own content being present, e.g.
86
+ * `enabled: rows.length > 0`. Flipping it from `false` to `true` is what
87
+ * triggers the restore.
88
+ *
39
89
  * Defaults to `true`.
40
90
  */
41
91
  enabled?: boolean;
42
92
  }
93
+ /**
94
+ * What `useScrollRestoration` hands back. Identical on both platforms so call
95
+ * sites are written once.
96
+ */
97
+ export interface ScrollRestorationBinding {
98
+ /**
99
+ * Wire onto the list being restored: `<FlashList onScroll={scroll.onScroll}>`.
100
+ *
101
+ * Native has no way to observe a list's offset from outside it, so this is
102
+ * how offsets are recorded there. On web it is a stable no-op — the web path
103
+ * subscribes to the resolved DOM node's own `scroll` event, which needs
104
+ * nothing from the caller — and passing it costs nothing.
105
+ */
106
+ onScroll: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
107
+ }
43
108
  export interface ScrollRestorationProviderProps {
44
109
  children: ReactNode;
110
+ /**
111
+ * Binds the store to a router. Must be referentially stable — see
112
+ * {@link ScrollRouterAdapter}.
113
+ */
114
+ adapter: ScrollRouterAdapter;
45
115
  }
46
116
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/scroll/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElD;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC7E,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAC/B,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAClC,SAAS,CAAC,OAAO,CAAC,GAClB,QAAQ,CAAC;AAEb,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,SAAS,CAAC;CACrB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/scroll/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAE5E;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC7E,sDAAsD;IACtD,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC3E,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAC/B,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAClC,SAAS,CAAC,OAAO,CAAC,GAClB,QAAQ,CAAC;AAEb,4EAA4E;AAC5E,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;;;;OAWG;IACH,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAAC;IACpC;;;;;OAKG;IACH,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACvD;AAED,MAAM,WAAW,2BAA2B;IAC1C;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;;;;OAOG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;CACpE;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,OAAO,EAAE,mBAAmB,CAAC;CAC9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"color-policy.d.ts","sourceRoot":"","sources":["../../../../src/theme/color-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK9D,sFAAsF;AACtF,eAAO,MAAM,YAAY;;;;;CAKf,CAAC;AAEX,wFAAwF;AACxF,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,kFAAkF;AAClF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AA8OlD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,UAAU,EACjB,MAAM,GAAE,aAAkB,GACzB,YAAY,CAgHd"}
1
+ {"version":3,"file":"color-policy.d.ts","sourceRoot":"","sources":["../../../../src/theme/color-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK9D,sFAAsF;AACtF,eAAO,MAAM,YAAY;;;;;CAKf,CAAC;AAEX,wFAAwF;AACxF,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,kFAAkF;AAClF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAkPlD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,UAAU,EACjB,MAAM,GAAE,aAAkB,GACzB,YAAY,CAgHd"}
@@ -18,11 +18,13 @@
18
18
  * Nesting extra contexts costs nothing at runtime — the win is that scope is no
19
19
  * longer a per-app decision.
20
20
  *
21
- * EXPO/EXPO-ROUTER APPS ONLY. The scroll-restoration provider it mounts imports
22
- * `expo-router` (its web implementation keys offsets on the focused route), so
23
- * a Vite/SPA consumer that has no expo-router cannot resolve this module. Those
24
- * apps keep mounting `BloomThemeProvider` (and any other piece they need)
25
- * directly that is not a lesser path, just the one without a router.
21
+ * EXPO/EXPO-ROUTER APPS ONLY, and now for one narrow reason: it binds the
22
+ * scroll store to the expo-router ADAPTER, which is the only module in the
23
+ * scroll primitive that imports `expo-router`. The scroll core itself is
24
+ * router-agnostic, so a Vite/SPA consumer can mount
25
+ * `<ScrollRestorationProvider adapter={...}>` from `@oxyhq/bloom/scroll` with
26
+ * an adapter for its own router — alongside `BloomThemeProvider` and whatever
27
+ * else it needs — rather than going without.
26
28
  *
27
29
  * NOT included, on purpose — these are OUTLETS, not state, and their placement
28
30
  * in the tree is a real app decision (z-order, safe areas, and mounting a
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/provider/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG9E,OAAO,EAAsB,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAG5E,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,uBAAuB,EAAE,UAAU,CAAC;IACnF,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,wFAAwF;IACxF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,aAAa,EACb,OAAc,EACd,GAAG,UAAU,EACd,EAAE,kBAAkB,2CAcpB;yBAnBe,aAAa"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/provider/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG9E,OAAO,EAAsB,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAI5E,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,uBAAuB,EAAE,UAAU,CAAC;IACnF,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,wFAAwF;IACxF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,aAAa,EACb,OAAc,EACd,GAAG,UAAU,EACd,EAAE,kBAAkB,2CAcpB;yBAnBe,aAAa"}
@@ -0,0 +1,14 @@
1
+ import { ScrollOffsetStore } from './store';
2
+ import type { ScrollRestorationProviderProps, ScrollRouterAdapter } from './types';
3
+ export interface ScrollRestorationContextValue {
4
+ store: ScrollOffsetStore;
5
+ adapter: ScrollRouterAdapter;
6
+ }
7
+ /**
8
+ * Holds the offset map and the router binding for the subtree. One provider
9
+ * near the app root is enough; the store lives as long as the provider, so
10
+ * offsets survive navigating away and back (including browser Back/Forward).
11
+ */
12
+ export declare function ScrollRestorationProvider({ children, adapter, }: ScrollRestorationProviderProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function useScrollRestorationContext(): ScrollRestorationContextValue;
14
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/scroll/context.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EACV,8BAA8B,EAC9B,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAMD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,QAAQ,EACR,OAAO,GACR,EAAE,8BAA8B,2CAWhC;AAED,wBAAgB,2BAA2B,IAAI,6BAA6B,CAQ3E"}
@@ -0,0 +1,7 @@
1
+ import type { ScrollRouterAdapter } from '../types';
2
+ /**
3
+ * The adapter to hand `<ScrollRestorationProvider adapter={...}>` in an
4
+ * expo-router app. A module-level constant, as the adapter contract requires.
5
+ */
6
+ export declare const expoRouterScrollAdapter: ScrollRouterAdapter;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/scroll/expo-router/index.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAqB,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAkHvE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,mBAGrC,CAAC"}