react-native-header-motion 0.3.0 → 1.0.0-alpha.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.
Files changed (62) hide show
  1. package/README.md +75 -25
  2. package/lib/module/components/FlatList.js +2 -0
  3. package/lib/module/components/FlatList.js.map +1 -1
  4. package/lib/module/components/HeaderBase.js +53 -5
  5. package/lib/module/components/HeaderBase.js.map +1 -1
  6. package/lib/module/components/HeaderMotion.js +66 -24
  7. package/lib/module/components/HeaderMotion.js.map +1 -1
  8. package/lib/module/components/ScrollManager.js.map +1 -1
  9. package/lib/module/components/ScrollView.js +2 -0
  10. package/lib/module/components/ScrollView.js.map +1 -1
  11. package/lib/module/context.js.map +1 -1
  12. package/lib/module/hooks/useMotionProgress.js +6 -2
  13. package/lib/module/hooks/useMotionProgress.js.map +1 -1
  14. package/lib/module/hooks/useScrollManager.js +79 -29
  15. package/lib/module/hooks/useScrollManager.js.map +1 -1
  16. package/lib/module/utils/index.js +1 -0
  17. package/lib/module/utils/index.js.map +1 -1
  18. package/lib/module/utils/refreshControl.js +93 -0
  19. package/lib/module/utils/refreshControl.js.map +1 -0
  20. package/lib/module/utils/values.js +36 -0
  21. package/lib/module/utils/values.js.map +1 -1
  22. package/lib/typescript/src/components/FlatList.d.ts +1 -1
  23. package/lib/typescript/src/components/FlatList.d.ts.map +1 -1
  24. package/lib/typescript/src/components/HeaderBase.d.ts +9 -2
  25. package/lib/typescript/src/components/HeaderBase.d.ts.map +1 -1
  26. package/lib/typescript/src/components/HeaderMotion.d.ts +5 -1
  27. package/lib/typescript/src/components/HeaderMotion.d.ts.map +1 -1
  28. package/lib/typescript/src/components/ScrollManager.d.ts +6 -16
  29. package/lib/typescript/src/components/ScrollManager.d.ts.map +1 -1
  30. package/lib/typescript/src/components/ScrollView.d.ts +2 -2
  31. package/lib/typescript/src/components/ScrollView.d.ts.map +1 -1
  32. package/lib/typescript/src/context.d.ts +7 -3
  33. package/lib/typescript/src/context.d.ts.map +1 -1
  34. package/lib/typescript/src/hooks/useMotionProgress.d.ts.map +1 -1
  35. package/lib/typescript/src/hooks/useScrollManager.d.ts +5 -4
  36. package/lib/typescript/src/hooks/useScrollManager.d.ts.map +1 -1
  37. package/lib/typescript/src/types.d.ts +20 -6
  38. package/lib/typescript/src/types.d.ts.map +1 -1
  39. package/lib/typescript/src/utils/index.d.ts +1 -0
  40. package/lib/typescript/src/utils/index.d.ts.map +1 -1
  41. package/lib/typescript/src/utils/refreshControl.d.ts +150 -0
  42. package/lib/typescript/src/utils/refreshControl.d.ts.map +1 -0
  43. package/lib/typescript/src/utils/values.d.ts +4 -1
  44. package/lib/typescript/src/utils/values.d.ts.map +1 -1
  45. package/package.json +7 -5
  46. package/src/components/FlatList.tsx +9 -3
  47. package/src/components/HeaderBase.tsx +93 -4
  48. package/src/components/HeaderMotion.tsx +102 -26
  49. package/src/components/ScrollManager.tsx +23 -28
  50. package/src/components/ScrollView.tsx +9 -3
  51. package/src/context.ts +9 -2
  52. package/src/hooks/useMotionProgress.ts +10 -2
  53. package/src/hooks/useScrollManager.ts +105 -36
  54. package/src/types.ts +22 -10
  55. package/src/utils/index.ts +1 -0
  56. package/src/utils/refreshControl.tsx +118 -0
  57. package/src/utils/values.ts +57 -1
  58. package/lib/module/hooks/refreshControl.js +0 -31
  59. package/lib/module/hooks/refreshControl.js.map +0 -1
  60. package/lib/typescript/src/hooks/refreshControl.d.ts +0 -13
  61. package/lib/typescript/src/hooks/refreshControl.d.ts.map +0 -1
  62. package/src/hooks/refreshControl.ts +0 -55
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
 
3
3
  import { useContext, useCallback, useEffect } from 'react';
4
- import { measure, scrollTo, useAnimatedReaction, useAnimatedRef, useAnimatedScrollHandler, useAnimatedStyle } from 'react-native-reanimated';
4
+ import { cancelAnimation, measure, scrollTo, useAnimatedReaction, useAnimatedRef, useAnimatedScrollHandler, useAnimatedStyle } from 'react-native-reanimated';
5
5
  import { RuntimeKind, scheduleOnUI } from 'react-native-worklets';
6
6
  import { HeaderMotionContext } from "../context.js";
7
- import { DEFAULT_SCROLL_ID, getInitialScrollValue } from "../utils/index.js";
8
- import { resolveRefreshControl } from "./refreshControl.js";
7
+ import { resolveRefreshControl, DEFAULT_SCROLL_ID, ensureScrollValueRegistered, warnIfMissingActiveScrollId } from "../utils/index.js";
8
+ const SCROLL_TOLERANCE = 0.5;
9
9
 
10
10
  /**
11
11
  * Hook that manages scroll tracking and synchronization for header animations.
@@ -55,15 +55,34 @@ export function useScrollManager(scrollId, options) {
55
55
  progress,
56
56
  activeScrollId,
57
57
  progressThreshold,
58
- originalHeaderHeight
58
+ originalHeaderHeight,
59
+ scrollToRef,
60
+ headerPanMomentumOffset
59
61
  } = ctxValue;
60
62
  const id = scrollId ?? DEFAULT_SCROLL_ID;
61
- const localRef = useAnimatedRef(); // TODO: better typing
63
+ const localRef = useAnimatedRef();
62
64
  const animatedRef = options?.animatedRef ?? localRef;
63
65
  const refreshControl = options?.refreshControl;
64
66
  const refreshing = options?.refreshing;
65
67
  const onRefresh = options?.onRefresh;
66
68
  const progressViewOffset = options?.progressViewOffset ?? originalHeaderHeight;
69
+ useAnimatedReaction(() => activeScrollId?.get(), activeId => {
70
+ const currentValues = ensureScrollValueRegistered(scrollValues, id);
71
+ warnIfMissingActiveScrollId(currentValues, id, activeId);
72
+ if (!activeId || activeId === id) {
73
+ // TODO: Could we just be passing current scrollRef instead of the entire function?
74
+ scrollToRef.current = (y, scrollOptions = {}) => {
75
+ 'worklet';
76
+
77
+ const {
78
+ isValueDelta = true,
79
+ animated = false
80
+ } = scrollOptions;
81
+ const newY = isValueDelta ? scrollValues.get()[id].current - y : y;
82
+ scrollTo(animatedRef, 0, newY, animated);
83
+ };
84
+ }
85
+ });
67
86
  useEffect(() => {
68
87
  return () => {
69
88
  scheduleOnUI(scrollIdToDelete => {
@@ -83,22 +102,17 @@ export function useScrollManager(scrollId, options) {
83
102
  if (!currentActiveScrollId || id === currentActiveScrollId || oldProgress === null) {
84
103
  return;
85
104
  }
86
- if (!scrollValues.get()[id]) {
87
- scrollValues.modify(value => {
88
- value[id] = getInitialScrollValue();
89
- return value;
90
- });
91
- }
105
+ ensureScrollValueRegistered(scrollValues, id);
92
106
  let newCur = -1;
107
+ const threshold = progressThreshold.get();
93
108
  scrollValues.modify(value => {
94
- let scrollValue = value[id];
109
+ const scrollValue = value[id];
95
110
  if (!scrollValue) {
96
- value[id] = getInitialScrollValue();
97
- scrollValue = value[id];
111
+ return value;
98
112
  }
99
113
  const progressDiff = oldProgress - newProgress;
100
- newCur = scrollValue.current - progressDiff * progressThreshold;
101
- const newMin = newCur - newProgress * progressThreshold;
114
+ newCur = scrollValue.current - progressDiff * threshold;
115
+ const newMin = newCur - newProgress * threshold;
102
116
  scrollValue.current = newCur;
103
117
  scrollValue.min = newMin;
104
118
  return value;
@@ -107,30 +121,66 @@ export function useScrollManager(scrollId, options) {
107
121
  scrollTo(animatedRef, 0, newCur, false);
108
122
  }
109
123
  });
110
- const scrollHandler = useCallback(e => {
124
+ const onScroll = useCallback((e, ctx) => {
111
125
  'worklet';
112
126
 
127
+ const newCurrent = e.contentOffset.y;
128
+ if (ctx.lastOffset !== undefined && Math.abs(ctx.lastOffset - newCurrent) < SCROLL_TOLERANCE) {
129
+ return;
130
+ }
131
+ ctx.lastOffset = newCurrent;
132
+ const threshold = progressThreshold.get();
133
+ const values = scrollValues.get();
134
+ const scrollValue = values[id];
135
+ if (!scrollValue) {
136
+ return;
137
+ }
138
+ const activeScrollIdValue = activeScrollId?.get();
139
+ if (activeScrollIdValue && activeScrollIdValue !== id) {
140
+ return;
141
+ }
142
+ const oldCurrent = scrollValue.current;
143
+ const oldMin = scrollValue.min;
144
+ const isCollapsed = oldCurrent >= oldMin + threshold - 0.001;
145
+
146
+ // When the header is fully collapsed and the user is scrolled past the
147
+ // threshold, progress is mathematically guaranteed to stay at 1:
148
+ // min = newCurrent - threshold → (newCurrent - min) / threshold = 1
149
+ // In this case we update the values directly via .get() instead of
150
+ // .modify(), which avoids triggering the reactive cascade (progress
151
+ // re-derivation, animated reactions, animated styles). The values are
152
+ // still updated in-place for tab synchronization correctness.
153
+ if (isCollapsed && newCurrent >= threshold) {
154
+ scrollValue.current = newCurrent;
155
+ scrollValue.min = newCurrent - threshold;
156
+ return;
157
+ }
113
158
  scrollValues.modify(value => {
114
159
  if (!value[id]) {
115
160
  return value;
116
161
  }
117
- const activeScrollIdValue = activeScrollId?.get();
118
- if (activeScrollIdValue && activeScrollIdValue !== id) {
119
- return value;
120
- }
121
- const oldCurrent = value[id].current;
122
- const oldMin = value[id].min;
123
- const isCollapsed = oldCurrent >= oldMin + progressThreshold - 0.001;
124
- const newCurrent = e.contentOffset.y;
125
162
  value[id].current = newCurrent;
126
163
  if (isCollapsed) {
127
- value[id].min = Math.max(0, newCurrent - progressThreshold);
164
+ value[id].min = Math.max(0, newCurrent - threshold);
128
165
  }
129
166
  return value;
130
167
  });
131
168
  }, [scrollValues, id, activeScrollId, progressThreshold]);
132
- const onScroll = useAnimatedScrollHandler(scrollHandler);
169
+ const onBeginDrag = useCallback(() => {
170
+ 'worklet';
171
+
172
+ if (headerPanMomentumOffset.get() === null) {
173
+ return;
174
+ }
175
+ cancelAnimation(headerPanMomentumOffset);
176
+ headerPanMomentumOffset.set(null);
177
+ }, [headerPanMomentumOffset]);
178
+ const animatedOnScroll = useAnimatedScrollHandler({
179
+ onBeginDrag,
180
+ onScroll
181
+ });
133
182
  const minHeightContentContainerStyle = useAnimatedStyle(() => {
183
+ const threshold = progressThreshold.get();
134
184
  if (globalThis.__RUNTIME_KIND === RuntimeKind.ReactNative) {
135
185
  return {};
136
186
  }
@@ -139,7 +189,7 @@ export function useScrollManager(scrollId, options) {
139
189
  return {};
140
190
  }
141
191
  return {
142
- minHeight: measurement.height + progressThreshold
192
+ minHeight: measurement.height + threshold
143
193
  };
144
194
  });
145
195
  const resolvedRefreshControl = resolveRefreshControl({
@@ -149,7 +199,7 @@ export function useScrollManager(scrollId, options) {
149
199
  progressViewOffset
150
200
  });
151
201
  const scrollableProps = {
152
- onScroll,
202
+ onScroll: animatedOnScroll,
153
203
  scrollEventThrottle: 16,
154
204
  ref: animatedRef,
155
205
  refreshControl: resolvedRefreshControl
@@ -1 +1 @@
1
- {"version":3,"names":["useContext","useCallback","useEffect","measure","scrollTo","useAnimatedReaction","useAnimatedRef","useAnimatedScrollHandler","useAnimatedStyle","RuntimeKind","scheduleOnUI","HeaderMotionContext","DEFAULT_SCROLL_ID","getInitialScrollValue","resolveRefreshControl","useScrollManager","scrollId","options","ctxValue","Error","scrollValues","progress","activeScrollId","progressThreshold","originalHeaderHeight","id","localRef","animatedRef","refreshControl","refreshing","onRefresh","progressViewOffset","scrollIdToDelete","modify","value","newProgress","oldProgress","currentActiveScrollId","get","newCur","scrollValue","progressDiff","current","newMin","min","scrollHandler","e","activeScrollIdValue","oldCurrent","oldMin","isCollapsed","newCurrent","contentOffset","y","Math","max","onScroll","minHeightContentContainerStyle","globalThis","__RUNTIME_KIND","ReactNative","measurement","minHeight","height","resolvedRefreshControl","scrollableProps","scrollEventThrottle","ref","headerMotionContext"],"sourceRoot":"../../../src","sources":["hooks/useScrollManager.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useContext","useCallback","useEffect","cancelAnimation","measure","scrollTo","useAnimatedReaction","useAnimatedRef","useAnimatedScrollHandler","useAnimatedStyle","RuntimeKind","scheduleOnUI","HeaderMotionContext","resolveRefreshControl","DEFAULT_SCROLL_ID","ensureScrollValueRegistered","warnIfMissingActiveScrollId","SCROLL_TOLERANCE","useScrollManager","scrollId","options","ctxValue","Error","scrollValues","progress","activeScrollId","progressThreshold","originalHeaderHeight","scrollToRef","headerPanMomentumOffset","id","localRef","animatedRef","refreshControl","refreshing","onRefresh","progressViewOffset","get","activeId","currentValues","current","y","scrollOptions","isValueDelta","animated","newY","scrollIdToDelete","modify","value","newProgress","oldProgress","currentActiveScrollId","newCur","threshold","scrollValue","progressDiff","newMin","min","onScroll","e","ctx","newCurrent","contentOffset","lastOffset","undefined","Math","abs","values","activeScrollIdValue","oldCurrent","oldMin","isCollapsed","max","onBeginDrag","set","animatedOnScroll","minHeightContentContainerStyle","globalThis","__RUNTIME_KIND","ReactNative","measurement","minHeight","height","resolvedRefreshControl","scrollableProps","scrollEventThrottle","ref","headerMotionContext"],"sourceRoot":"../../../src","sources":["hooks/useScrollManager.ts"],"mappings":"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","ignoreList":[]}
@@ -2,4 +2,5 @@
2
2
 
3
3
  export * from "./defaults.js";
4
4
  export * from "./values.js";
5
+ export * from "./refreshControl.js";
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sourceRoot":"../../../src","sources":["utils/index.ts"],"mappings":";;AAAA,cAAc,eAAY;AAC1B,cAAc,aAAU","ignoreList":[]}
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["utils/index.ts"],"mappings":";;AAAA,cAAc,eAAY;AAC1B,cAAc,aAAU;AACxB,cAAc,qBAAkB","ignoreList":[]}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+
3
+ import { cloneElement, createElement, isValidElement } from 'react';
4
+ import { RefreshControl } from 'react-native';
5
+ import Animated, { useAnimatedProps } from 'react-native-reanimated';
6
+
7
+ // FIXME: Types are a mess here
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+ const AnimatedRefreshControl = Animated.createAnimatedComponent(RefreshControl);
10
+ export function resolveRefreshControl({
11
+ refreshControl,
12
+ refreshing,
13
+ onRefresh,
14
+ progressViewOffset
15
+ }) {
16
+ if (!refreshControl) {
17
+ return createRefreshControlWithOffset({
18
+ refreshing,
19
+ onRefresh,
20
+ progressViewOffset
21
+ });
22
+ }
23
+ return /*#__PURE__*/isValidElement(refreshControl) ? injectProgressViewOffset(refreshControl, progressViewOffset) : undefined;
24
+ }
25
+ function createRefreshControlWithOffset({
26
+ refreshing,
27
+ onRefresh,
28
+ progressViewOffset
29
+ }) {
30
+ if (!onRefresh) {
31
+ return undefined;
32
+ }
33
+ return /*#__PURE__*/createElement(ResolvedRefreshControl, {
34
+ refreshing: refreshing ?? false,
35
+ onRefresh: onRefresh,
36
+ progressViewOffset: progressViewOffset
37
+ });
38
+ }
39
+ function injectProgressViewOffset(refreshControl, progressViewOffset) {
40
+ const offset = refreshControl.props.progressViewOffset ?? progressViewOffset;
41
+ if (!isSharedValue(offset)) {
42
+ return /*#__PURE__*/cloneElement(refreshControl, {
43
+ progressViewOffset: offset
44
+ });
45
+ }
46
+ return /*#__PURE__*/createElement(ResolvedRefreshControl, {
47
+ ...refreshControl.props,
48
+ progressViewOffset: progressViewOffset
49
+ });
50
+ }
51
+ function ResolvedRefreshControl({
52
+ refreshing,
53
+ onRefresh,
54
+ progressViewOffset,
55
+ ...props
56
+ }) {
57
+ const animatedProps = useAnimatedProps(() => {
58
+ return {
59
+ ...(isSharedValue(refreshing) ? {
60
+ refreshing: refreshing.value
61
+ } : {}),
62
+ ...(isSharedValue(onRefresh) ? {
63
+ onRefresh: onRefresh.value
64
+ } : {}),
65
+ ...(isSharedValue(progressViewOffset) ? {
66
+ progressViewOffset: progressViewOffset.value
67
+ } : {})
68
+ };
69
+ });
70
+ const nonAnimatedProps = {
71
+ ...(isSharedValue(refreshing) ? {} : {
72
+ refreshing
73
+ }),
74
+ ...(isSharedValue(onRefresh) ? {} : {
75
+ onRefresh
76
+ }),
77
+ ...(isSharedValue(progressViewOffset) ? {} : {
78
+ progressViewOffset
79
+ })
80
+ };
81
+ return /*#__PURE__*/_jsx(AnimatedRefreshControl, {
82
+ ...props,
83
+ ...nonAnimatedProps,
84
+ refreshing: nonAnimatedProps.refreshing,
85
+ animatedProps: animatedProps
86
+ });
87
+ }
88
+ function isSharedValue(value) {
89
+ 'worklet';
90
+
91
+ return typeof value === 'object' && value !== null && 'value' in value;
92
+ }
93
+ //# sourceMappingURL=refreshControl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["cloneElement","createElement","isValidElement","RefreshControl","Animated","useAnimatedProps","jsx","_jsx","AnimatedRefreshControl","createAnimatedComponent","resolveRefreshControl","refreshControl","refreshing","onRefresh","progressViewOffset","createRefreshControlWithOffset","injectProgressViewOffset","undefined","ResolvedRefreshControl","offset","props","isSharedValue","animatedProps","value","nonAnimatedProps"],"sourceRoot":"../../../src","sources":["utils/refreshControl.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ import { DEFAULT_SCROLL_ID } from "./defaults.js";
3
4
  export function getInitialScrollValue() {
4
5
  'worklet';
5
6
 
@@ -8,4 +9,39 @@ export function getInitialScrollValue() {
8
9
  current: 0
9
10
  };
10
11
  }
12
+ export function ensureScrollValueRegistered(scrollValues, id) {
13
+ 'worklet';
14
+
15
+ const values = scrollValues.get();
16
+ if (values[id]) {
17
+ return values;
18
+ }
19
+ scrollValues.modify(value => {
20
+ if (!value[id]) {
21
+ value[id] = getInitialScrollValue();
22
+ }
23
+ return value;
24
+ });
25
+ return scrollValues.get();
26
+ }
27
+ export function warnIfMissingActiveScrollId(scrollValues, id, activeScrollId) {
28
+ 'worklet';
29
+
30
+ if (!__DEV__ || activeScrollId || id === DEFAULT_SCROLL_ID) {
31
+ return;
32
+ }
33
+ let nonDefaultCount = 0;
34
+ let nonDefaultIds = '';
35
+ for (const key in scrollValues) {
36
+ if (key === DEFAULT_SCROLL_ID) {
37
+ continue;
38
+ }
39
+ nonDefaultCount += 1;
40
+ nonDefaultIds = nonDefaultIds ? `${nonDefaultIds}, ${key}` : key;
41
+ }
42
+ if (nonDefaultCount < 1) {
43
+ return;
44
+ }
45
+ console.warn(`[react-native-header-motion] Explicit scrollIds (${nonDefaultIds}) are registered but no activeScrollId was provided. Pass useActiveScrollId(...).sv to <HeaderMotion activeScrollId={...}> to keep header motion deterministic.`);
46
+ }
11
47
  //# sourceMappingURL=values.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["getInitialScrollValue","min","current"],"sourceRoot":"../../../src","sources":["utils/values.ts"],"mappings":";;AAEA,OAAO,SAASA,qBAAqBA,CAAA,EAAgB;EACnD,SAAS;;EACT,OAAO;IAAEC,GAAG,EAAE,CAAC;IAAEC,OAAO,EAAE;EAAE,CAAC;AAC/B","ignoreList":[]}
1
+ {"version":3,"names":["DEFAULT_SCROLL_ID","getInitialScrollValue","min","current","ensureScrollValueRegistered","scrollValues","id","values","get","modify","value","warnIfMissingActiveScrollId","activeScrollId","__DEV__","nonDefaultCount","nonDefaultIds","key","console","warn"],"sourceRoot":"../../../src","sources":["utils/values.ts"],"mappings":";;AAEA,SAASA,iBAAiB,QAAQ,eAAY;AAE9C,OAAO,SAASC,qBAAqBA,CAAA,EAAgB;EACnD,SAAS;;EACT,OAAO;IAAEC,GAAG,EAAE,CAAC;IAAEC,OAAO,EAAE;EAAE,CAAC;AAC/B;AAEA,OAAO,SAASC,2BAA2BA,CACzCC,YAAuC,EACvCC,EAAU,EACI;EACd,SAAS;;EAET,MAAMC,MAAM,GAAGF,YAAY,CAACG,GAAG,CAAC,CAAC;EACjC,IAAID,MAAM,CAACD,EAAE,CAAC,EAAE;IACd,OAAOC,MAAM;EACf;EAEAF,YAAY,CAACI,MAAM,CAAEC,KAAK,IAAK;IAC7B,IAAI,CAACA,KAAK,CAACJ,EAAE,CAAC,EAAE;MACbI,KAAK,CAAkBJ,EAAE,CAAC,GAAGL,qBAAqB,CAAC,CAAC;IACvD;IAEA,OAAOS,KAAK;EACd,CAAC,CAAC;EAEF,OAAOL,YAAY,CAACG,GAAG,CAAC,CAAC;AAC3B;AAEA,OAAO,SAASG,2BAA2BA,CACzCN,YAA0B,EAC1BC,EAAU,EACVM,cAAkC,EAC5B;EACN,SAAS;;EAET,IAAI,CAACC,OAAO,IAAID,cAAc,IAAIN,EAAE,KAAKN,iBAAiB,EAAE;IAC1D;EACF;EAEA,IAAIc,eAAe,GAAG,CAAC;EACvB,IAAIC,aAAa,GAAG,EAAE;EAEtB,KAAK,MAAMC,GAAG,IAAIX,YAAY,EAAE;IAC9B,IAAIW,GAAG,KAAKhB,iBAAiB,EAAE;MAC7B;IACF;IAEAc,eAAe,IAAI,CAAC;IACpBC,aAAa,GAAGA,aAAa,GAAG,GAAGA,aAAa,KAAKC,GAAG,EAAE,GAAGA,GAAG;EAClE;EAEA,IAAIF,eAAe,GAAG,CAAC,EAAE;IACvB;EACF;EAEAG,OAAO,CAACC,IAAI,CACV,oDAAoDH,aAAa,iKACnE,CAAC;AACH","ignoreList":[]}
@@ -10,7 +10,7 @@ export type HeaderMotionFlatListProps<T = any> = ComponentProps<typeof Animated.
10
10
  * Optional animated ref to use for the flat list.
11
11
  * When provided, the scroll manager will use this ref instead of creating its own.
12
12
  */
13
- animatedRef?: AnimatedRef<any>;
13
+ animatedRef?: AnimatedRef<Animated.FlatList<T>> | AnimatedRef;
14
14
  };
15
15
  /**
16
16
  * Animated FlatList component that integrates with HeaderMotion.
@@ -1 +1 @@
1
- {"version":3,"file":"FlatList.d.ts","sourceRoot":"","sources":["../../../../src/components/FlatList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAqB,MAAM,OAAO,CAAC;AAC3E,OAAO,QAAQ,EAAE,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAKrE,MAAM,MAAM,yBAAyB,CAAC,CAAC,GAAG,GAAG,IAAI,cAAc,CAC7D,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC5B,GAAG;IACF;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;CAChC,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,GAAG,GAAG,EAAE,EAC5C,QAAQ,EACR,WAAW,EACX,qBAAqB,EACrB,GAAG,KAAK,EACT,EAAE,yBAAyB,CAAC,CAAC,CAAC,2CAmC9B"}
1
+ {"version":3,"file":"FlatList.d.ts","sourceRoot":"","sources":["../../../../src/components/FlatList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAqB,MAAM,OAAO,CAAC;AAC3E,OAAO,QAAQ,EAAE,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAKrE,MAAM,MAAM,yBAAyB,CAAC,CAAC,GAAG,GAAG,IAAI,cAAc,CAC7D,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC5B,GAAG;IACF;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;CAC/D,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,GAAG,GAAG,EAAE,EAC5C,QAAQ,EACR,WAAW,EACX,qBAAqB,EACrB,GAAG,KAAK,EACT,EAAE,yBAAyB,CAAC,CAAC,CAAC,2CAyC9B"}
@@ -1,7 +1,14 @@
1
1
  import { type ViewProps } from 'react-native';
2
2
  import { type AnimatedProps } from 'react-native-reanimated';
3
+ import type { MotionProgress } from '../types';
3
4
  export type HeaderBaseProps = ViewProps;
4
- export type AnimatedHeaderBaseProps = AnimatedProps<ViewProps>;
5
+ export type AnimatedHeaderBaseProps = AnimatedProps<ViewProps> & Pick<MotionProgress, 'animatedHeaderBaseProps'> & {
6
+ /**
7
+ * Wraps the header with GestureHandlerRootView.
8
+ * Keep this disabled when your app already has a root-level GestureHandlerRootView.
9
+ */
10
+ withGestureHandlerRootView?: boolean;
11
+ };
5
12
  /**
6
13
  * Base header component with absolute positioning.
7
14
  * Provides a foundation for building headers that need to be positioned absolutely.
@@ -30,5 +37,5 @@ export declare function HeaderBase({ style, ...rest }: HeaderBaseProps): import(
30
37
  * </AnimatedHeaderBase>
31
38
  * ```
32
39
  */
33
- export declare function AnimatedHeaderBase({ style, ...rest }: AnimatedHeaderBaseProps): import("react/jsx-runtime").JSX.Element;
40
+ export declare function AnimatedHeaderBase({ style, animatedHeaderBaseProps, withGestureHandlerRootView, ...rest }: AnimatedHeaderBaseProps): import("react/jsx-runtime").JSX.Element;
34
41
  //# sourceMappingURL=HeaderBase.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderBase.d.ts","sourceRoot":"","sources":["../../../../src/components/HeaderBase.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAChE,OAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAEvE,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC;AACxC,MAAM,MAAM,uBAAuB,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;AAE/D;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,eAAe,2CAE7D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,GAAG,IAAI,EACR,EAAE,uBAAuB,2CAEzB"}
1
+ {"version":3,"file":"HeaderBase.d.ts","sourceRoot":"","sources":["../../../../src/components/HeaderBase.tsx"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAM1E,OAAiB,EAGf,KAAK,aAAa,EACnB,MAAM,yBAAyB,CAAC;AAOjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC;AACxC,MAAM,MAAM,uBAAuB,GAAG,aAAa,CAAC,SAAS,CAAC,GAC5D,IAAI,CAAC,cAAc,EAAE,yBAAyB,CAAC,GAAG;IAChD;;;OAGG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC,CAAC;AAEJ;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,eAAe,2CAE7D;AAED;;;;;;;;;;;;;GAaG;AAKH,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,uBAAuB,EACvB,0BAAkC,EAClC,GAAG,IAAI,EACR,EAAE,uBAAuB,2CA2DzB"}
@@ -39,6 +39,10 @@ export interface HeaderMotionProps<T extends string> {
39
39
  * @default Extrapolation.CLAMP
40
40
  */
41
41
  progressExtrapolation?: ExtrapolationType;
42
+ /** Enables panning directly on the header surface.
43
+ * @default false
44
+ */
45
+ enableHeaderPan?: boolean;
42
46
  /** Child components that will have access to the header motion context */
43
47
  children: ReactNode;
44
48
  }
@@ -47,6 +51,6 @@ export interface HeaderMotionProps<T extends string> {
47
51
  * Manages header animation state and provides it to child components via context.
48
52
  * @template T - The type of scroll ID string
49
53
  */
50
- declare function HeaderMotionContextProvider<T extends string>({ progressThreshold, measureDynamic, measureDynamicMode, activeScrollId, progressExtrapolation, children, }: HeaderMotionProps<T>): import("react/jsx-runtime").JSX.Element;
54
+ declare function HeaderMotionContextProvider<T extends string>({ progressThreshold, measureDynamic, measureDynamicMode, activeScrollId, progressExtrapolation, enableHeaderPan, children, }: HeaderMotionProps<T>): import("react/jsx-runtime").JSX.Element;
51
55
  export { HeaderMotionContextProvider };
52
56
  //# sourceMappingURL=HeaderMotion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderMotion.d.ts","sourceRoot":"","sources":["../../../../src/components/HeaderMotion.tsx"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,iBAAiB,EACtB,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EACV,qBAAqB,EAErB,iBAAiB,EAElB,MAAM,UAAU,CAAC;AAQlB,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,MAAM;IACjD;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IACxC;;;OAGG;IACH,cAAc,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAChC;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,iBAAiB,CAAC;IAC1C,0EAA0E;IAC1E,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;GAIG;AACH,iBAAS,2BAA2B,CAAC,CAAC,SAAS,MAAM,EAAE,EACrD,iBAA8C,EAC9C,cAAwC,EACxC,kBAA4B,EAC5B,cAAc,EACd,qBAA2C,EAC3C,QAAQ,GACT,EAAE,iBAAiB,CAAC,CAAC,CAAC,2CAqGtB;AAED,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
1
+ {"version":3,"file":"HeaderMotion.d.ts","sourceRoot":"","sources":["../../../../src/components/HeaderMotion.tsx"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,iBAAiB,EACtB,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAEV,qBAAqB,EAErB,iBAAiB,EAElB,MAAM,UAAU,CAAC;AAkClB,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,MAAM;IACjD;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IACxC;;;OAGG;IACH,cAAc,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAChC;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,iBAAiB,CAAC;IAC1C;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,0EAA0E;IAC1E,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;GAIG;AACH,iBAAS,2BAA2B,CAAC,CAAC,SAAS,MAAM,EAAE,EACrD,iBAA8C,EAC9C,cAAwC,EACxC,kBAA4B,EAC5B,cAAc,EACd,qBAA2C,EAC3C,eAAuB,EACvB,QAAQ,GACT,EAAE,iBAAiB,CAAC,CAAC,CAAC,2CAiJtB;AAED,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
@@ -1,29 +1,19 @@
1
+ import { type UseScrollManagerOptions } from '../hooks';
1
2
  import type { ScrollManagerConfig } from '../types';
2
- import type { ResolveRefreshControlOptions } from '../hooks/refreshControl';
3
3
  import type { ReactNode } from 'react';
4
- import type { AnimatedRef } from 'react-native-reanimated';
5
- type ScrollManagerRenderChildren = (scrollableProps: ScrollManagerConfig['scrollableProps'], options: ScrollManagerConfig['headerMotionContext']) => ReactNode;
6
- export interface HeaderMotionScrollManagerProps extends Omit<ResolveRefreshControlOptions, 'progressViewOffset'> {
4
+ import type { InstanceOrElement } from 'react-native-reanimated/lib/typescript/commonTypes';
5
+ type ScrollManagerRenderChildren<TRef extends InstanceOrElement = any> = (scrollableProps: ScrollManagerConfig<TRef>['scrollableProps'], options: ScrollManagerConfig<TRef>['headerMotionContext']) => ReactNode;
6
+ export interface HeaderMotionScrollManagerProps<TRef extends InstanceOrElement = any> extends UseScrollManagerOptions<TRef> {
7
7
  /**
8
8
  * Optional unique identifier for this scroll view.
9
9
  * Use this when you have multiple scroll views (e.g., in tabs) to track them separately.
10
10
  */
11
11
  scrollId?: string;
12
- /**
13
- * Optional animated ref to use for the scroll view.
14
- * When provided, the scroll manager will use this ref instead of creating its own.
15
- */
16
- animatedRef?: AnimatedRef<any>;
17
- /**
18
- * Optional refresh progress offset override.
19
- * When provided, it takes precedence over the automatic offset based on header height.
20
- */
21
- progressViewOffset?: ResolveRefreshControlOptions['progressViewOffset'];
22
12
  /**
23
13
  * Render function that receives scroll props and header context.
24
14
  * Use this to create custom scroll implementations that integrate with HeaderMotion.
25
15
  */
26
- children: ScrollManagerRenderChildren;
16
+ children: ScrollManagerRenderChildren<TRef>;
27
17
  }
28
18
  /**
29
19
  * ScrollManager component that provides scroll tracking functionality for custom scroll implementations. Uses {@link useScrollManager} under the hood.
@@ -47,6 +37,6 @@ export interface HeaderMotionScrollManagerProps extends Omit<ResolveRefreshContr
47
37
  * </HeaderMotion>
48
38
  * ```
49
39
  */
50
- export declare function HeaderMotionScrollManager({ children, scrollId, animatedRef, refreshControl, refreshing, onRefresh, progressViewOffset, }: HeaderMotionScrollManagerProps): ReactNode;
40
+ export declare function HeaderMotionScrollManager<TRef extends InstanceOrElement = any>({ children, scrollId, animatedRef, refreshControl, refreshing, onRefresh, progressViewOffset, }: HeaderMotionScrollManagerProps<TRef>): ReactNode;
51
41
  export {};
52
42
  //# sourceMappingURL=ScrollManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollManager.d.ts","sourceRoot":"","sources":["../../../../src/components/ScrollManager.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,KAAK,2BAA2B,GAAG,CACjC,eAAe,EAAE,mBAAmB,CAAC,iBAAiB,CAAC,EACvD,OAAO,EAAE,mBAAmB,CAAC,qBAAqB,CAAC,KAChD,SAAS,CAAC;AAEf,MAAM,WAAW,8BACf,SAAQ,IAAI,CAAC,4BAA4B,EAAE,oBAAoB,CAAC;IAChE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,4BAA4B,CAAC,oBAAoB,CAAC,CAAC;IACxE;;;OAGG;IACH,QAAQ,EAAE,2BAA2B,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,cAAc,EACd,UAAU,EACV,SAAS,EACT,kBAAkB,GACnB,EAAE,8BAA8B,aAgBhC"}
1
+ {"version":3,"file":"ScrollManager.d.ts","sourceRoot":"","sources":["../../../../src/components/ScrollManager.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAC;AAE5F,KAAK,2BAA2B,CAAC,IAAI,SAAS,iBAAiB,GAAG,GAAG,IAAI,CACvE,eAAe,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,EAC7D,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,KACtD,SAAS,CAAC;AAEf,MAAM,WAAW,8BAA8B,CAC7C,IAAI,SAAS,iBAAiB,GAAG,GAAG,CACpC,SAAQ,uBAAuB,CAAC,IAAI,CAAC;IACrC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,QAAQ,EAAE,2BAA2B,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,SAAS,iBAAiB,GAAG,GAAG,EACpC,EACA,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,cAAc,EACd,UAAU,EACV,SAAS,EACT,kBAAkB,GACnB,EAAE,8BAA8B,CAAC,IAAI,CAAC,aAmBtC"}
@@ -1,4 +1,4 @@
1
- import { type AnimatedRef, type AnimatedScrollViewProps } from 'react-native-reanimated';
1
+ import Animated, { type AnimatedRef, type AnimatedScrollViewProps } from 'react-native-reanimated';
2
2
  export type HeaderMotionScrollViewProps = AnimatedScrollViewProps & {
3
3
  /**
4
4
  * Optional unique identifier for this scroll view.
@@ -9,7 +9,7 @@ export type HeaderMotionScrollViewProps = AnimatedScrollViewProps & {
9
9
  * Optional animated ref to use for the scroll view.
10
10
  * When provided, the scroll manager will use this ref instead of creating its own.
11
11
  */
12
- animatedRef?: AnimatedRef<any>;
12
+ animatedRef?: AnimatedRef<Animated.ScrollView> | AnimatedRef;
13
13
  };
14
14
  /**
15
15
  * Animated ScrollView component that integrates with HeaderMotion.
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollView.d.ts","sourceRoot":"","sources":["../../../../src/components/ScrollView.tsx"],"names":[],"mappings":"AAAA,OAAiB,EACf,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC7B,MAAM,yBAAyB,CAAC;AAGjC,MAAM,MAAM,2BAA2B,GAAG,uBAAuB,GAAG;IAClE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;CAChC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,qBAAqB,EACrB,cAAc,EACd,GAAG,KAAK,EACT,EAAE,2BAA2B,2CAgC7B"}
1
+ {"version":3,"file":"ScrollView.d.ts","sourceRoot":"","sources":["../../../../src/components/ScrollView.tsx"],"names":[],"mappings":"AAAA,OAAO,QAAQ,EAAE,EACf,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC7B,MAAM,yBAAyB,CAAC;AAGjC,MAAM,MAAM,2BAA2B,GAAG,uBAAuB,GAAG;IAClE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC;CAC9D,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,qBAAqB,EACrB,cAAc,EACd,GAAG,KAAK,EACT,EAAE,2BAA2B,2CAsC7B"}
@@ -1,13 +1,17 @@
1
1
  import { type SharedValue } from 'react-native-reanimated';
2
- import type { MeasureAnimatedHeaderAndSet, Progress, ScrollValues } from './types';
2
+ import type { AnimatedHeaderBaseMotionProps, MeasureAnimatedHeaderAndSet, Progress, ScrollTo, ScrollValues } from './types';
3
3
  interface HeaderMotionContextType {
4
4
  progress: Progress;
5
5
  measureTotalHeight: MeasureAnimatedHeaderAndSet;
6
6
  measureDynamic: MeasureAnimatedHeaderAndSet;
7
+ enableHeaderPan: boolean;
8
+ headerPanMomentumOffset: SharedValue<number | null>;
9
+ animatedHeaderBaseProps: AnimatedHeaderBaseMotionProps;
7
10
  scrollValues: SharedValue<ScrollValues>;
8
11
  activeScrollId: SharedValue<string> | undefined;
9
- progressThreshold: number;
10
- originalHeaderHeight: number;
12
+ progressThreshold: SharedValue<number>;
13
+ originalHeaderHeight: SharedValue<number>;
14
+ scrollToRef: React.RefObject<ScrollTo | null>;
11
15
  }
12
16
  export declare const HeaderMotionContext: import("react").Context<HeaderMotionContextType | null>;
13
17
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EACV,2BAA2B,EAC3B,QAAQ,EACR,YAAY,EACb,MAAM,SAAS,CAAC;AAEjB,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,kBAAkB,EAAE,2BAA2B,CAAC;IAChD,cAAc,EAAE,2BAA2B,CAAC;IAC5C,YAAY,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IACxC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IAChD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,mBAAmB,yDACqB,CAAC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EACV,6BAA6B,EAC7B,2BAA2B,EAC3B,QAAQ,EACR,QAAQ,EACR,YAAY,EACb,MAAM,SAAS,CAAC;AAEjB,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,kBAAkB,EAAE,2BAA2B,CAAC;IAChD,cAAc,EAAE,2BAA2B,CAAC;IAC5C,eAAe,EAAE,OAAO,CAAC;IACzB,uBAAuB,EAAE,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACpD,uBAAuB,EAAE,6BAA6B,CAAC;IACvD,YAAY,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IACxC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IAChD,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAE1C,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;CAC/C;AAED,eAAO,MAAM,mBAAmB,yDACqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useMotionProgress.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useMotionProgress.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAgBlD"}
1
+ {"version":3,"file":"useMotionProgress.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useMotionProgress.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAwBlD"}
@@ -1,6 +1,7 @@
1
1
  import { type AnimatedRef } from 'react-native-reanimated';
2
2
  import type { ScrollManagerConfig } from '../types';
3
- import { type ResolveRefreshControlOptions } from './refreshControl';
3
+ import { type ResolveRefreshControlOptions } from '../utils';
4
+ import type { InstanceOrElement } from 'react-native-reanimated/lib/typescript/commonTypes';
4
5
  /**
5
6
  * Hook that manages scroll tracking and synchronization for header animations.
6
7
  * Returns props to apply to scrollable components and additional values that help with adjusting styling of the scrollables to header's dimensions.
@@ -38,17 +39,17 @@ import { type ResolveRefreshControlOptions } from './refreshControl';
38
39
  * }
39
40
  * ```
40
41
  */
41
- export interface UseScrollManagerOptions extends Omit<ResolveRefreshControlOptions, 'progressViewOffset'> {
42
+ export interface UseScrollManagerOptions<TRef extends InstanceOrElement = any> extends Omit<ResolveRefreshControlOptions, 'progressViewOffset'> {
42
43
  /**
43
44
  * Optional animated ref to use instead of creating one internally.
44
45
  * Useful when you need access to the scroll view ref from outside.
45
46
  */
46
- animatedRef?: AnimatedRef<any>;
47
+ animatedRef?: AnimatedRef<TRef>;
47
48
  /**
48
49
  * Optional refresh progress offset override.
49
50
  * When provided, it takes precedence over the automatic offset based on header height.
50
51
  */
51
52
  progressViewOffset?: ResolveRefreshControlOptions['progressViewOffset'];
52
53
  }
53
- export declare function useScrollManager(scrollId?: string, options?: UseScrollManagerOptions): ScrollManagerConfig;
54
+ export declare function useScrollManager<TRef extends InstanceOrElement = any>(scrollId?: string, options?: UseScrollManagerOptions<TRef>): ScrollManagerConfig<TRef>;
54
55
  //# sourceMappingURL=useScrollManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useScrollManager.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useScrollManager.ts"],"names":[],"mappings":"AACA,OAAO,EAOL,KAAK,WAAW,EAEjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EAAE,mBAAmB,EAAgB,MAAM,UAAU,CAAC;AAElE,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,WAAW,uBACf,SAAQ,IAAI,CAAC,4BAA4B,EAAE,oBAAoB,CAAC;IAChE;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,4BAA4B,CAAC,oBAAoB,CAAC,CAAC;CACzE;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,uBAAuB,GAChC,mBAAmB,CAsJrB"}
1
+ {"version":3,"file":"useScrollManager.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useScrollManager.ts"],"names":[],"mappings":"AACA,OAAO,EAQL,KAAK,WAAW,EAEjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAKL,KAAK,4BAA4B,EAClC,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAC;AAQ5F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,WAAW,uBAAuB,CAAC,IAAI,SAAS,iBAAiB,GAAG,GAAG,CAC3E,SAAQ,IAAI,CAAC,4BAA4B,EAAE,oBAAoB,CAAC;IAChE;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,4BAA4B,CAAC,oBAAoB,CAAC,CAAC;CACzE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,SAAS,iBAAiB,GAAG,GAAG,EACnE,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,uBAAuB,CAAC,IAAI,CAAC,GACtC,mBAAmB,CAAC,IAAI,CAAC,CAiN3B"}