react-native-header-motion 0.2.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 (58) hide show
  1. package/README.md +126 -18
  2. package/lib/module/components/FlatList.js +12 -2
  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 +10 -2
  9. package/lib/module/components/ScrollManager.js.map +1 -1
  10. package/lib/module/components/ScrollView.js +8 -0
  11. package/lib/module/components/ScrollView.js.map +1 -1
  12. package/lib/module/context.js.map +1 -1
  13. package/lib/module/hooks/useMotionProgress.js +6 -2
  14. package/lib/module/hooks/useMotionProgress.js.map +1 -1
  15. package/lib/module/hooks/useScrollManager.js +91 -29
  16. package/lib/module/hooks/useScrollManager.js.map +1 -1
  17. package/lib/module/utils/index.js +1 -0
  18. package/lib/module/utils/index.js.map +1 -1
  19. package/lib/module/utils/refreshControl.js +93 -0
  20. package/lib/module/utils/refreshControl.js.map +1 -0
  21. package/lib/module/utils/values.js +36 -0
  22. package/lib/module/utils/values.js.map +1 -1
  23. package/lib/typescript/src/components/FlatList.d.ts +2 -4
  24. package/lib/typescript/src/components/FlatList.d.ts.map +1 -1
  25. package/lib/typescript/src/components/HeaderBase.d.ts +9 -2
  26. package/lib/typescript/src/components/HeaderBase.d.ts.map +1 -1
  27. package/lib/typescript/src/components/HeaderMotion.d.ts +5 -1
  28. package/lib/typescript/src/components/HeaderMotion.d.ts.map +1 -1
  29. package/lib/typescript/src/components/ScrollManager.d.ts +6 -10
  30. package/lib/typescript/src/components/ScrollManager.d.ts.map +1 -1
  31. package/lib/typescript/src/components/ScrollView.d.ts +3 -3
  32. package/lib/typescript/src/components/ScrollView.d.ts.map +1 -1
  33. package/lib/typescript/src/context.d.ts +7 -3
  34. package/lib/typescript/src/context.d.ts.map +1 -1
  35. package/lib/typescript/src/hooks/useMotionProgress.d.ts.map +1 -1
  36. package/lib/typescript/src/hooks/useScrollManager.d.ts +10 -3
  37. package/lib/typescript/src/hooks/useScrollManager.d.ts.map +1 -1
  38. package/lib/typescript/src/types.d.ts +20 -4
  39. package/lib/typescript/src/types.d.ts.map +1 -1
  40. package/lib/typescript/src/utils/index.d.ts +1 -0
  41. package/lib/typescript/src/utils/index.d.ts.map +1 -1
  42. package/lib/typescript/src/utils/refreshControl.d.ts +150 -0
  43. package/lib/typescript/src/utils/refreshControl.d.ts.map +1 -0
  44. package/lib/typescript/src/utils/values.d.ts +4 -1
  45. package/lib/typescript/src/utils/values.d.ts.map +1 -1
  46. package/package.json +7 -5
  47. package/src/components/FlatList.tsx +23 -9
  48. package/src/components/HeaderBase.tsx +93 -4
  49. package/src/components/HeaderMotion.tsx +102 -26
  50. package/src/components/ScrollManager.tsx +27 -17
  51. package/src/components/ScrollView.tsx +17 -3
  52. package/src/context.ts +9 -2
  53. package/src/hooks/useMotionProgress.ts +10 -2
  54. package/src/hooks/useScrollManager.ts +127 -35
  55. package/src/types.ts +22 -4
  56. package/src/utils/index.ts +1 -0
  57. package/src/utils/refreshControl.tsx +118 -0
  58. package/src/utils/values.ts +57 -1
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","HeaderMotionContext"],"sourceRoot":"../../src","sources":["context.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,OAAO;AAkBrC,OAAO,MAAMC,mBAAmB,gBAC9BD,aAAa,CAAiC,IAAI,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createContext","HeaderMotionContext"],"sourceRoot":"../../src","sources":["context.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,OAAO;AAyBrC,OAAO,MAAMC,mBAAmB,gBAC9BD,aAAa,CAAiC,IAAI,CAAC","ignoreList":[]}
@@ -46,13 +46,17 @@ export function useMotionProgress() {
46
46
  progress,
47
47
  measureTotalHeight,
48
48
  measureDynamic,
49
- progressThreshold
49
+ progressThreshold,
50
+ animatedHeaderBaseProps,
51
+ activeScrollId
50
52
  } = ctxValue;
51
53
  return {
52
54
  progress,
53
55
  measureTotalHeight,
54
56
  measureDynamic,
55
- progressThreshold
57
+ progressThreshold,
58
+ animatedHeaderBaseProps,
59
+ activeScrollId
56
60
  };
57
61
  }
58
62
  //# sourceMappingURL=useMotionProgress.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useContext","HeaderMotionContext","useMotionProgress","ctxValue","Error","progress","measureTotalHeight","measureDynamic","progressThreshold"],"sourceRoot":"../../../src","sources":["hooks/useMotionProgress.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,OAAO;AAClC,SAASC,mBAAmB,QAAQ,eAAY;AAGhD;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;AACA;AACA,OAAO,SAASC,iBAAiBA,CAAA,EAAmB;EAClD,MAAMC,QAAQ,GAAGH,UAAU,CAACC,mBAAmB,CAAC;EAChD,IAAI,CAACE,QAAQ,EAAE;IACb,MAAM,IAAIC,KAAK,CACb,mLACF,CAAC;EACH;EACA,MAAM;IAAEC,QAAQ;IAAEC,kBAAkB;IAAEC,cAAc;IAAEC;EAAkB,CAAC,GACvEL,QAAQ;EAEV,OAAO;IACLE,QAAQ;IACRC,kBAAkB;IAClBC,cAAc;IACdC;EACF,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["useContext","HeaderMotionContext","useMotionProgress","ctxValue","Error","progress","measureTotalHeight","measureDynamic","progressThreshold","animatedHeaderBaseProps","activeScrollId"],"sourceRoot":"../../../src","sources":["hooks/useMotionProgress.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,OAAO;AAClC,SAASC,mBAAmB,QAAQ,eAAY;AAGhD;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;AACA;AACA,OAAO,SAASC,iBAAiBA,CAAA,EAAmB;EAClD,MAAMC,QAAQ,GAAGH,UAAU,CAACC,mBAAmB,CAAC;EAChD,IAAI,CAACE,QAAQ,EAAE;IACb,MAAM,IAAIC,KAAK,CACb,mLACF,CAAC;EACH;EACA,MAAM;IACJC,QAAQ;IACRC,kBAAkB;IAClBC,cAAc;IACdC,iBAAiB;IACjBC,uBAAuB;IACvBC;EACF,CAAC,GAAGP,QAAQ;EAEZ,OAAO;IACLE,QAAQ;IACRC,kBAAkB;IAClBC,cAAc;IACdC,iBAAiB;IACjBC,uBAAuB;IACvBC;EACF,CAAC;AACH","ignoreList":[]}
@@ -1,10 +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";
7
+ import { resolveRefreshControl, DEFAULT_SCROLL_ID, ensureScrollValueRegistered, warnIfMissingActiveScrollId } from "../utils/index.js";
8
+ const SCROLL_TOLERANCE = 0.5;
8
9
 
9
10
  /**
10
11
  * Hook that manages scroll tracking and synchronization for header animations.
@@ -54,11 +55,34 @@ export function useScrollManager(scrollId, options) {
54
55
  progress,
55
56
  activeScrollId,
56
57
  progressThreshold,
57
- originalHeaderHeight
58
+ originalHeaderHeight,
59
+ scrollToRef,
60
+ headerPanMomentumOffset
58
61
  } = ctxValue;
59
62
  const id = scrollId ?? DEFAULT_SCROLL_ID;
60
- const localRef = useAnimatedRef(); // TODO: better typing
63
+ const localRef = useAnimatedRef();
61
64
  const animatedRef = options?.animatedRef ?? localRef;
65
+ const refreshControl = options?.refreshControl;
66
+ const refreshing = options?.refreshing;
67
+ const onRefresh = options?.onRefresh;
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
+ });
62
86
  useEffect(() => {
63
87
  return () => {
64
88
  scheduleOnUI(scrollIdToDelete => {
@@ -78,22 +102,17 @@ export function useScrollManager(scrollId, options) {
78
102
  if (!currentActiveScrollId || id === currentActiveScrollId || oldProgress === null) {
79
103
  return;
80
104
  }
81
- if (!scrollValues.get()[id]) {
82
- scrollValues.modify(value => {
83
- value[id] = getInitialScrollValue();
84
- return value;
85
- });
86
- }
105
+ ensureScrollValueRegistered(scrollValues, id);
87
106
  let newCur = -1;
107
+ const threshold = progressThreshold.get();
88
108
  scrollValues.modify(value => {
89
- let scrollValue = value[id];
109
+ const scrollValue = value[id];
90
110
  if (!scrollValue) {
91
- value[id] = getInitialScrollValue();
92
- scrollValue = value[id];
111
+ return value;
93
112
  }
94
113
  const progressDiff = oldProgress - newProgress;
95
- newCur = scrollValue.current - progressDiff * progressThreshold;
96
- const newMin = newCur - newProgress * progressThreshold;
114
+ newCur = scrollValue.current - progressDiff * threshold;
115
+ const newMin = newCur - newProgress * threshold;
97
116
  scrollValue.current = newCur;
98
117
  scrollValue.min = newMin;
99
118
  return value;
@@ -102,30 +121,66 @@ export function useScrollManager(scrollId, options) {
102
121
  scrollTo(animatedRef, 0, newCur, false);
103
122
  }
104
123
  });
105
- const scrollHandler = useCallback(e => {
124
+ const onScroll = useCallback((e, ctx) => {
106
125
  'worklet';
107
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
+ }
108
158
  scrollValues.modify(value => {
109
159
  if (!value[id]) {
110
160
  return value;
111
161
  }
112
- const activeScrollIdValue = activeScrollId?.get();
113
- if (activeScrollIdValue && activeScrollIdValue !== id) {
114
- return value;
115
- }
116
- const oldCurrent = value[id].current;
117
- const oldMin = value[id].min;
118
- const isCollapsed = oldCurrent >= oldMin + progressThreshold - 0.001;
119
- const newCurrent = e.contentOffset.y;
120
162
  value[id].current = newCurrent;
121
163
  if (isCollapsed) {
122
- value[id].min = Math.max(0, newCurrent - progressThreshold);
164
+ value[id].min = Math.max(0, newCurrent - threshold);
123
165
  }
124
166
  return value;
125
167
  });
126
168
  }, [scrollValues, id, activeScrollId, progressThreshold]);
127
- 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
+ });
128
182
  const minHeightContentContainerStyle = useAnimatedStyle(() => {
183
+ const threshold = progressThreshold.get();
129
184
  if (globalThis.__RUNTIME_KIND === RuntimeKind.ReactNative) {
130
185
  return {};
131
186
  }
@@ -134,13 +189,20 @@ export function useScrollManager(scrollId, options) {
134
189
  return {};
135
190
  }
136
191
  return {
137
- minHeight: measurement.height + progressThreshold
192
+ minHeight: measurement.height + threshold
138
193
  };
139
194
  });
195
+ const resolvedRefreshControl = resolveRefreshControl({
196
+ refreshControl,
197
+ refreshing,
198
+ onRefresh,
199
+ progressViewOffset
200
+ });
140
201
  const scrollableProps = {
141
- onScroll,
202
+ onScroll: animatedOnScroll,
142
203
  scrollEventThrottle: 16,
143
- ref: animatedRef
204
+ ref: animatedRef,
205
+ refreshControl: resolvedRefreshControl
144
206
  };
145
207
  const headerMotionContext = {
146
208
  originalHeaderHeight,
@@ -1 +1 @@
1
- {"version":3,"names":["useContext","useCallback","useEffect","measure","scrollTo","useAnimatedReaction","useAnimatedRef","useAnimatedScrollHandler","useAnimatedStyle","RuntimeKind","scheduleOnUI","HeaderMotionContext","DEFAULT_SCROLL_ID","getInitialScrollValue","useScrollManager","scrollId","options","ctxValue","Error","scrollValues","progress","activeScrollId","progressThreshold","originalHeaderHeight","id","localRef","animatedRef","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","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":[]}
@@ -1,7 +1,6 @@
1
1
  import { type ComponentProps } from 'react';
2
2
  import Animated, { type AnimatedRef } from 'react-native-reanimated';
3
- type AnimatedFlatListProps<T = any> = ComponentProps<typeof Animated.FlatList<T>>;
4
- export type HeaderMotionFlatListProps<T = any> = AnimatedFlatListProps<T> & {
3
+ export type HeaderMotionFlatListProps<T = any> = ComponentProps<typeof Animated.FlatList<T>> & {
5
4
  /**
6
5
  * Optional unique identifier for this scroll view.
7
6
  * Use this when you have multiple scroll views (e.g. in tabs) to track them separately.
@@ -11,7 +10,7 @@ export type HeaderMotionFlatListProps<T = any> = AnimatedFlatListProps<T> & {
11
10
  * Optional animated ref to use for the flat list.
12
11
  * When provided, the scroll manager will use this ref instead of creating its own.
13
12
  */
14
- animatedRef?: AnimatedRef<any>;
13
+ animatedRef?: AnimatedRef<Animated.FlatList<T>> | AnimatedRef;
15
14
  };
16
15
  /**
17
16
  * Animated FlatList component that integrates with HeaderMotion.
@@ -31,5 +30,4 @@ export type HeaderMotionFlatListProps<T = any> = AnimatedFlatListProps<T> & {
31
30
  * ```
32
31
  */
33
32
  export declare function HeaderMotionFlatList<T = any>({ scrollId, animatedRef, contentContainerStyle, ...props }: HeaderMotionFlatListProps<T>): import("react/jsx-runtime").JSX.Element;
34
- export {};
35
33
  //# sourceMappingURL=FlatList.d.ts.map
@@ -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,KAAK,qBAAqB,CAAC,CAAC,GAAG,GAAG,IAAI,cAAc,CAClD,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC5B,CAAC;AAEF,MAAM,MAAM,yBAAyB,CAAC,CAAC,GAAG,GAAG,IAAI,qBAAqB,CAAC,CAAC,CAAC,GAAG;IAC1E;;;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,2CAyB9B"}
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,23 +1,19 @@
1
+ import { type UseScrollManagerOptions } from '../hooks';
1
2
  import type { ScrollManagerConfig } from '../types';
2
3
  import type { ReactNode } from 'react';
3
- import type { AnimatedRef } from 'react-native-reanimated';
4
- type ScrollManagerRenderChildren = (scrollableProps: ScrollManagerConfig['scrollableProps'], options: ScrollManagerConfig['headerMotionContext']) => ReactNode;
5
- export interface HeaderMotionScrollManagerProps {
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> {
6
7
  /**
7
8
  * Optional unique identifier for this scroll view.
8
9
  * Use this when you have multiple scroll views (e.g., in tabs) to track them separately.
9
10
  */
10
11
  scrollId?: string;
11
- /**
12
- * Optional animated ref to use for the scroll view.
13
- * When provided, the scroll manager will use this ref instead of creating its own.
14
- */
15
- animatedRef?: AnimatedRef<any>;
16
12
  /**
17
13
  * Render function that receives scroll props and header context.
18
14
  * Use this to create custom scroll implementations that integrate with HeaderMotion.
19
15
  */
20
- children: ScrollManagerRenderChildren;
16
+ children: ScrollManagerRenderChildren<TRef>;
21
17
  }
22
18
  /**
23
19
  * ScrollManager component that provides scroll tracking functionality for custom scroll implementations. Uses {@link useScrollManager} under the hood.
@@ -41,6 +37,6 @@ export interface HeaderMotionScrollManagerProps {
41
37
  * </HeaderMotion>
42
38
  * ```
43
39
  */
44
- export declare function HeaderMotionScrollManager({ children, scrollId, animatedRef, }: HeaderMotionScrollManagerProps): ReactNode;
40
+ export declare function HeaderMotionScrollManager<TRef extends InstanceOrElement = any>({ children, scrollId, animatedRef, refreshControl, refreshing, onRefresh, progressViewOffset, }: HeaderMotionScrollManagerProps<TRef>): ReactNode;
45
41
  export {};
46
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,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,8BAA8B;IAC7C;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/B;;;OAGG;IACH,QAAQ,EAAE,2BAA2B,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,QAAQ,EACR,QAAQ,EACR,WAAW,GACZ,EAAE,8BAA8B,aAYhC"}
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.
@@ -25,5 +25,5 @@ export type HeaderMotionScrollViewProps = AnimatedScrollViewProps & {
25
25
  * </HeaderMotion>
26
26
  * ```
27
27
  */
28
- export declare function HeaderMotionScrollView({ scrollId, animatedRef, children, contentContainerStyle, ...props }: HeaderMotionScrollViewProps): import("react/jsx-runtime").JSX.Element;
28
+ export declare function HeaderMotionScrollView({ scrollId, animatedRef, children, contentContainerStyle, refreshControl, ...props }: HeaderMotionScrollViewProps): import("react/jsx-runtime").JSX.Element;
29
29
  //# sourceMappingURL=ScrollView.d.ts.map
@@ -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,GAAG,KAAK,EACT,EAAE,2BAA2B,2CAyB7B"}
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"}