react-native-header-motion 0.4.0 → 1.0.0-beta.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 (140) hide show
  1. package/README.md +400 -335
  2. package/lib/module/components/Bridge.js +16 -0
  3. package/lib/module/components/Bridge.js.map +1 -0
  4. package/lib/module/components/FlatList.js +5 -62
  5. package/lib/module/components/FlatList.js.map +1 -1
  6. package/lib/module/components/Header.js +71 -13
  7. package/lib/module/components/Header.js.map +1 -1
  8. package/lib/module/components/HeaderDynamic.js +34 -0
  9. package/lib/module/components/HeaderDynamic.js.map +1 -0
  10. package/lib/module/components/HeaderMotion.js +59 -23
  11. package/lib/module/components/HeaderMotion.js.map +1 -1
  12. package/lib/module/components/HeaderPanBoundary.js +54 -0
  13. package/lib/module/components/HeaderPanBoundary.js.map +1 -0
  14. package/lib/module/components/NavigationBridge.js +20 -0
  15. package/lib/module/components/NavigationBridge.js.map +1 -0
  16. package/lib/module/components/ScrollManager.js +7 -5
  17. package/lib/module/components/ScrollManager.js.map +1 -1
  18. package/lib/module/components/ScrollView.js +6 -47
  19. package/lib/module/components/ScrollView.js.map +1 -1
  20. package/lib/module/components/createHeaderMotionScrollable.js +136 -0
  21. package/lib/module/components/createHeaderMotionScrollable.js.map +1 -0
  22. package/lib/module/components/index.js +3 -1
  23. package/lib/module/components/index.js.map +1 -1
  24. package/lib/module/context.js +8 -1
  25. package/lib/module/context.js.map +1 -1
  26. package/lib/module/hooks/index.js +1 -0
  27. package/lib/module/hooks/index.js.map +1 -1
  28. package/lib/module/hooks/useActiveScrollId.js +7 -6
  29. package/lib/module/hooks/useActiveScrollId.js.map +1 -1
  30. package/lib/module/hooks/useHeaderMotionBridge.js +14 -0
  31. package/lib/module/hooks/useHeaderMotionBridge.js.map +1 -0
  32. package/lib/module/hooks/useMotionProgress.js +10 -36
  33. package/lib/module/hooks/useMotionProgress.js.map +1 -1
  34. package/lib/module/hooks/useMotionProgress.test.js +56 -0
  35. package/lib/module/hooks/useMotionProgress.test.js.map +1 -0
  36. package/lib/module/hooks/useScrollManager.js +219 -109
  37. package/lib/module/hooks/useScrollManager.js.map +1 -1
  38. package/lib/module/index.js +21 -18
  39. package/lib/module/index.js.map +1 -1
  40. package/lib/module/utils/defaults.js +2 -1
  41. package/lib/module/utils/defaults.js.map +1 -1
  42. package/lib/module/utils/header.js +24 -0
  43. package/lib/module/utils/header.js.map +1 -0
  44. package/lib/module/utils/headerOffsetStyle.js +31 -0
  45. package/lib/module/utils/headerOffsetStyle.js.map +1 -0
  46. package/lib/module/utils/index.js +3 -0
  47. package/lib/module/utils/index.js.map +1 -1
  48. package/lib/module/utils/refreshControl.js +93 -0
  49. package/lib/module/utils/refreshControl.js.map +1 -0
  50. package/lib/module/utils/values.js +36 -0
  51. package/lib/module/utils/values.js.map +1 -1
  52. package/lib/typescript/src/components/Bridge.d.ts +19 -0
  53. package/lib/typescript/src/components/Bridge.d.ts.map +1 -0
  54. package/lib/typescript/src/components/FlatList.d.ts +7 -15
  55. package/lib/typescript/src/components/FlatList.d.ts.map +1 -1
  56. package/lib/typescript/src/components/Header.d.ts +73 -12
  57. package/lib/typescript/src/components/Header.d.ts.map +1 -1
  58. package/lib/typescript/src/components/HeaderDynamic.d.ts +11 -0
  59. package/lib/typescript/src/components/HeaderDynamic.d.ts.map +1 -0
  60. package/lib/typescript/src/components/HeaderMotion.d.ts +37 -18
  61. package/lib/typescript/src/components/HeaderMotion.d.ts.map +1 -1
  62. package/lib/typescript/src/components/HeaderPanBoundary.d.ts +11 -0
  63. package/lib/typescript/src/components/HeaderPanBoundary.d.ts.map +1 -0
  64. package/lib/typescript/src/components/NavigationBridge.d.ts +19 -0
  65. package/lib/typescript/src/components/NavigationBridge.d.ts.map +1 -0
  66. package/lib/typescript/src/components/ScrollManager.d.ts +18 -25
  67. package/lib/typescript/src/components/ScrollManager.d.ts.map +1 -1
  68. package/lib/typescript/src/components/ScrollView.d.ts +7 -14
  69. package/lib/typescript/src/components/ScrollView.d.ts.map +1 -1
  70. package/lib/typescript/src/components/createHeaderMotionScrollable.d.ts +86 -0
  71. package/lib/typescript/src/components/createHeaderMotionScrollable.d.ts.map +1 -0
  72. package/lib/typescript/src/components/index.d.ts +3 -1
  73. package/lib/typescript/src/components/index.d.ts.map +1 -1
  74. package/lib/typescript/src/context.d.ts +3 -13
  75. package/lib/typescript/src/context.d.ts.map +1 -1
  76. package/lib/typescript/src/hooks/index.d.ts +1 -0
  77. package/lib/typescript/src/hooks/index.d.ts.map +1 -1
  78. package/lib/typescript/src/hooks/useActiveScrollId.d.ts +7 -6
  79. package/lib/typescript/src/hooks/useActiveScrollId.d.ts.map +1 -1
  80. package/lib/typescript/src/hooks/useHeaderMotionBridge.d.ts +10 -0
  81. package/lib/typescript/src/hooks/useHeaderMotionBridge.d.ts.map +1 -0
  82. package/lib/typescript/src/hooks/useMotionProgress.d.ts +8 -25
  83. package/lib/typescript/src/hooks/useMotionProgress.d.ts.map +1 -1
  84. package/lib/typescript/src/hooks/useMotionProgress.test.d.ts +2 -0
  85. package/lib/typescript/src/hooks/useMotionProgress.test.d.ts.map +1 -0
  86. package/lib/typescript/src/hooks/useScrollManager.d.ts +63 -31
  87. package/lib/typescript/src/hooks/useScrollManager.d.ts.map +1 -1
  88. package/lib/typescript/src/index.d.ts +56 -26
  89. package/lib/typescript/src/index.d.ts.map +1 -1
  90. package/lib/typescript/src/types.d.ts +63 -15
  91. package/lib/typescript/src/types.d.ts.map +1 -1
  92. package/lib/typescript/src/utils/defaults.d.ts +3 -2
  93. package/lib/typescript/src/utils/defaults.d.ts.map +1 -1
  94. package/lib/typescript/src/utils/header.d.ts +10 -0
  95. package/lib/typescript/src/utils/header.d.ts.map +1 -0
  96. package/lib/typescript/src/utils/headerOffsetStyle.d.ts +19 -0
  97. package/lib/typescript/src/utils/headerOffsetStyle.d.ts.map +1 -0
  98. package/lib/typescript/src/utils/index.d.ts +3 -0
  99. package/lib/typescript/src/utils/index.d.ts.map +1 -1
  100. package/lib/typescript/src/utils/refreshControl.d.ts +150 -0
  101. package/lib/typescript/src/utils/refreshControl.d.ts.map +1 -0
  102. package/lib/typescript/src/utils/values.d.ts +4 -1
  103. package/lib/typescript/src/utils/values.d.ts.map +1 -1
  104. package/package.json +13 -5
  105. package/src/components/Bridge.tsx +29 -0
  106. package/src/components/FlatList.tsx +18 -84
  107. package/src/components/Header.tsx +159 -23
  108. package/src/components/HeaderDynamic.tsx +45 -0
  109. package/src/components/HeaderMotion.tsx +114 -41
  110. package/src/components/HeaderPanBoundary.tsx +92 -0
  111. package/src/components/NavigationBridge.tsx +30 -0
  112. package/src/components/ScrollManager.tsx +38 -43
  113. package/src/components/ScrollView.tsx +16 -68
  114. package/src/components/createHeaderMotionScrollable.tsx +438 -0
  115. package/src/components/index.ts +3 -1
  116. package/src/context.ts +12 -18
  117. package/src/hooks/index.ts +1 -0
  118. package/src/hooks/useActiveScrollId.ts +7 -6
  119. package/src/hooks/useHeaderMotionBridge.ts +15 -0
  120. package/src/hooks/useMotionProgress.test.ts +67 -0
  121. package/src/hooks/useMotionProgress.ts +12 -37
  122. package/src/hooks/useScrollManager.ts +310 -129
  123. package/src/index.ts +82 -36
  124. package/src/types.ts +85 -25
  125. package/src/utils/defaults.ts +7 -1
  126. package/src/utils/header.tsx +52 -0
  127. package/src/utils/headerOffsetStyle.ts +40 -0
  128. package/src/utils/index.ts +3 -0
  129. package/src/utils/refreshControl.tsx +118 -0
  130. package/src/utils/values.ts +57 -1
  131. package/lib/module/components/HeaderBase.js +0 -59
  132. package/lib/module/components/HeaderBase.js.map +0 -1
  133. package/lib/module/hooks/refreshControl.js +0 -31
  134. package/lib/module/hooks/refreshControl.js.map +0 -1
  135. package/lib/typescript/src/components/HeaderBase.d.ts +0 -34
  136. package/lib/typescript/src/components/HeaderBase.d.ts.map +0 -1
  137. package/lib/typescript/src/hooks/refreshControl.d.ts +0 -13
  138. package/lib/typescript/src/hooks/refreshControl.d.ts.map +0 -1
  139. package/src/components/HeaderBase.tsx +0 -51
  140. package/src/hooks/refreshControl.ts +0 -55
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ import { useHeaderMotionBridge } from "../hooks/useHeaderMotionBridge.js";
4
+ /**
5
+ * Reads the current HeaderMotion context and exposes it through a render
6
+ * function so it can be forwarded into another subtree.
7
+ */
8
+ export function Bridge({
9
+ children
10
+ }) {
11
+ if (typeof children !== 'function') {
12
+ throw new Error('HeaderMotion.Bridge only accepts a render function as its child.');
13
+ }
14
+ return children(useHeaderMotionBridge());
15
+ }
16
+ //# sourceMappingURL=Bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useHeaderMotionBridge","Bridge","children","Error"],"sourceRoot":"../../../src","sources":["components/Bridge.tsx"],"mappings":";;AAAA,SAASA,qBAAqB,QAAQ,mCAAgC;AAgBtE;AACA;AACA;AACA;AACA,OAAO,SAASC,MAAMA,CAAC;EAAEC;AAAkC,CAAC,EAAE;EAC5D,IAAI,OAAOA,QAAQ,KAAK,UAAU,EAAE;IAClC,MAAM,IAAIC,KAAK,CACb,kEACF,CAAC;EACH;EAEA,OAAOD,QAAQ,CAACF,qBAAqB,CAAC,CAAC,CAAC;AAC1C","ignoreList":[]}
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
2
 
3
- import { forwardRef } from 'react';
4
3
  import Animated from 'react-native-reanimated';
5
- import { HeaderMotionScrollManager } from "./ScrollManager.js";
6
- import { jsx as _jsx } from "react/jsx-runtime";
4
+ import { createHeaderMotionScrollable } from "./createHeaderMotionScrollable.js";
7
5
  /**
8
6
  * Animated FlatList component that integrates with HeaderMotion.
9
7
  * Automatically handles scroll tracking and header animation synchronization.
@@ -21,64 +19,9 @@ import { jsx as _jsx } from "react/jsx-runtime";
21
19
  * </HeaderMotion>
22
20
  * ```
23
21
  */
24
- export function HeaderMotionFlatList({
25
- scrollId,
26
- animatedRef,
27
- contentContainerStyle,
28
- onScroll,
29
- onScrollBeginDrag,
30
- onScrollEndDrag,
31
- onMomentumScrollBegin,
32
- onMomentumScrollEnd,
33
- ...props
34
- }) {
35
- return /*#__PURE__*/_jsx(HeaderMotionScrollManager, {
36
- scrollId: scrollId,
37
- animatedRef: animatedRef,
38
- refreshControl: props.refreshControl,
39
- refreshing: props.refreshing,
40
- onRefresh: props.onRefresh,
41
- progressViewOffset: props.progressViewOffset,
42
- onScroll: onScroll,
43
- onScrollBeginDrag: onScrollBeginDrag,
44
- onScrollEndDrag: onScrollEndDrag,
45
- onMomentumScrollBegin: onMomentumScrollBegin,
46
- onMomentumScrollEnd: onMomentumScrollEnd,
47
- children: ({
48
- onScroll: managedOnScroll,
49
- refreshControl: managedRefreshControl,
50
- ...scrollViewProps
51
- }, {
52
- originalHeaderHeight,
53
- minHeightContentContainerStyle
54
- }) => /*#__PURE__*/_jsx(Animated.FlatList, {
55
- ...scrollViewProps,
56
- ...props,
57
- onScroll: managedOnScroll,
58
- ...(managedRefreshControl && {
59
- refreshControl: managedRefreshControl
60
- }),
61
- renderScrollComponent: scrollComponentProps => /*#__PURE__*/_jsx(AnimatedScrollContainer, {
62
- ...scrollComponentProps,
63
- contentContainerStyle: [minHeightContentContainerStyle, {
64
- paddingTop: originalHeaderHeight
65
- }, contentContainerStyle]
66
- })
67
- })
68
- });
69
- }
70
- const AnimatedScrollContainer = /*#__PURE__*/forwardRef(({
71
- children,
72
- contentContainerStyle,
73
- ...rest
74
- }, ref) => {
75
- return /*#__PURE__*/_jsx(Animated.ScrollView, {
76
- ...rest,
77
- ref: ref,
78
- children: /*#__PURE__*/_jsx(Animated.View, {
79
- style: contentContainerStyle,
80
- children: children
81
- })
82
- });
22
+ export const FlatList = createHeaderMotionScrollable(Animated.FlatList, {
23
+ displayName: 'HeaderMotion.FlatList',
24
+ contentContainerMode: 'renderScrollComponent',
25
+ isComponentAnimated: true
83
26
  });
84
27
  //# sourceMappingURL=FlatList.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["forwardRef","Animated","HeaderMotionScrollManager","jsx","_jsx","HeaderMotionFlatList","scrollId","animatedRef","contentContainerStyle","onScroll","onScrollBeginDrag","onScrollEndDrag","onMomentumScrollBegin","onMomentumScrollEnd","props","refreshControl","refreshing","onRefresh","progressViewOffset","children","managedOnScroll","managedRefreshControl","scrollViewProps","originalHeaderHeight","minHeightContentContainerStyle","FlatList","renderScrollComponent","scrollComponentProps","AnimatedScrollContainer","paddingTop","rest","ref","ScrollView","View","style"],"sourceRoot":"../../../src","sources":["components/FlatList.tsx"],"mappings":";;AAAA,SAASA,UAAU,QAAgD,OAAO;AAC1E,OAAOC,QAAQ,MAA4B,yBAAyB;AACpE,SAASC,yBAAyB,QAAQ,oBAAiB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAmB5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAAU;EAC5CC,QAAQ;EACRC,WAAW;EACXC,qBAAqB;EACrBC,QAAQ;EACRC,iBAAiB;EACjBC,eAAe;EACfC,qBAAqB;EACrBC,mBAAmB;EACnB,GAAGC;AACyB,CAAC,EAAE;EAC/B,oBACEV,IAAA,CAACF,yBAAyB;IACxBI,QAAQ,EAAEA,QAAS;IACnBC,WAAW,EAAEA,WAAY;IACzBQ,cAAc,EAAED,KAAK,CAACC,cAAe;IACrCC,UAAU,EAAEF,KAAK,CAACE,UAAW;IAC7BC,SAAS,EAAEH,KAAK,CAACG,SAAU;IAC3BC,kBAAkB,EAAEJ,KAAK,CAACI,kBAAmB;IAC7CT,QAAQ,EAAEA,QAAS;IACnBC,iBAAiB,EAAEA,iBAAkB;IACrCC,eAAe,EAAEA,eAAgB;IACjCC,qBAAqB,EAAEA,qBAAsB;IAC7CC,mBAAmB,EAAEA,mBAAoB;IAAAM,QAAA,EAExCA,CACC;MACEV,QAAQ,EAAEW,eAAe;MACzBL,cAAc,EAAEM,qBAAqB;MACrC,GAAGC;IACL,CAAC,EACD;MAAEC,oBAAoB;MAAEC;IAA+B,CAAC,kBAExDpB,IAAA,CAACH,QAAQ,CAACwB,QAAQ;MAAA,GACZH,eAAe;MAAA,GACfR,KAAK;MACTL,QAAQ,EAAEW,eAAgB;MAAA,IACrBC,qBAAqB,IAAI;QAC5BN,cAAc,EAAEM;MAClB,CAAC;MACDK,qBAAqB,EAAGC,oBAAoB,iBAC1CvB,IAAA,CAACwB,uBAAuB;QAAA,GAClBD,oBAAoB;QACxBnB,qBAAqB,EAAE,CACrBgB,8BAA8B,EAC9B;UAAEK,UAAU,EAAEN;QAAqB,CAAC,EACpCf,qBAAqB;MACrB,CACH;IACD,CACH;EACF,CACwB,CAAC;AAEhC;AAEA,MAAMoB,uBAAuB,gBAAG5B,UAAU,CAGxC,CAAC;EAAEmB,QAAQ;EAAEX,qBAAqB;EAAE,GAAGsB;AAAK,CAAC,EAAEC,GAAG,KAAK;EACvD,oBACE3B,IAAA,CAACH,QAAQ,CAAC+B,UAAU;IAAA,GAAKF,IAAI;IAAEC,GAAG,EAAEA,GAAI;IAAAZ,QAAA,eACtCf,IAAA,CAACH,QAAQ,CAACgC,IAAI;MAACC,KAAK,EAAE1B,qBAAsB;MAAAW,QAAA,EAAEA;IAAQ,CAAgB;EAAC,CACpD,CAAC;AAE1B,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Animated","createHeaderMotionScrollable","FlatList","displayName","contentContainerMode","isComponentAnimated"],"sourceRoot":"../../../src","sources":["components/FlatList.tsx"],"mappings":";;AACA,OAAOA,QAAQ,MAER,yBAAyB;AAChC,SACEC,4BAA4B,QAEvB,mCAAgC;AASvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,QAAQ,GAAGD,4BAA4B,CAACD,QAAQ,CAACE,QAAQ,EAAE;EACtEC,WAAW,EAAE,uBAAuB;EACpCC,oBAAoB,EAAE,uBAAuB;EAC7CC,mBAAmB,EAAE;AACvB,CAAC,CAAsB","ignoreList":[]}
@@ -1,19 +1,77 @@
1
1
  "use strict";
2
2
 
3
- import { useMotionProgress } from "../hooks/useMotionProgress.js";
3
+ import { StyleSheet } from 'react-native';
4
+ import Animated from 'react-native-reanimated';
5
+ import { useHeaderMotionContextOrThrow } from "../context.js";
6
+ import { cloneWithOnLayout, composeOnLayoutHandlers, resolveSlottableChild } from "../utils/index.js";
7
+ import { HeaderDynamic } from "./HeaderDynamic.js";
8
+ import { HeaderPanBoundary } from "./HeaderPanBoundary.js";
9
+ import { jsx as _jsx } from "react/jsx-runtime";
10
+ const headerOverlayStyle = StyleSheet.create({
11
+ overlay: {
12
+ position: 'absolute',
13
+ top: 0,
14
+ left: 0,
15
+ right: 0
16
+ }
17
+ }).overlay;
18
+ function HeaderRoot(props) {
19
+ const ctxValue = useHeaderMotionContextOrThrow('HeaderMotion.Header must be used within <HeaderMotion /> or <HeaderMotion.NavigationBridge />. If you are rendering inside a navigation header, bridge the context with <HeaderMotion.Bridge /> and <HeaderMotion.NavigationBridge />.');
20
+ if (props.asChild) {
21
+ const child = resolveSlottableChild('HeaderMotion.Header', props.children);
22
+ return /*#__PURE__*/_jsx(HeaderPanBoundary, {
23
+ pannable: props.pannable,
24
+ panDecayConfig: props.panDecayConfig,
25
+ headerPanMomentumOffset: ctxValue.headerPanMomentumOffset,
26
+ scrollToRef: ctxValue.scrollToRef,
27
+ withGestureHandlerRootView: props.withGestureHandlerRootView,
28
+ children: cloneWithOnLayout(child, ctxValue.measureTotalHeight, 'HeaderMotion.Header')
29
+ });
30
+ }
31
+ const {
32
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
33
+ asChild: _asChild,
34
+ overlay = true,
35
+ pannable,
36
+ panDecayConfig,
37
+ onLayout,
38
+ style,
39
+ withGestureHandlerRootView,
40
+ ...rest
41
+ } = props;
42
+ const resolvedOnLayout = onLayout;
43
+ return /*#__PURE__*/_jsx(HeaderPanBoundary, {
44
+ pannable: pannable,
45
+ panDecayConfig: panDecayConfig,
46
+ headerPanMomentumOffset: ctxValue.headerPanMomentumOffset,
47
+ scrollToRef: ctxValue.scrollToRef,
48
+ withGestureHandlerRootView: withGestureHandlerRootView,
49
+ children: /*#__PURE__*/_jsx(Animated.View, {
50
+ ...rest,
51
+ onLayout: composeOnLayoutHandlers(resolvedOnLayout, ctxValue.measureTotalHeight),
52
+ style: [overlay ? headerOverlayStyle : undefined, style]
53
+ })
54
+ });
55
+ }
56
+
4
57
  /**
5
- * Header component for providing motion progress properties to animated headers.
6
- * Must be used within a HeaderMotion component.
58
+ * Header container that measures the total header height for scroll offsetting.
7
59
  *
8
- * Use to pass props to the header components in React Navigation / Expo Router, which cannot access HeaderMotion's context and `useMotionProgress` otherwise.`
60
+ * It renders an `Animated.View` by default, wires the outer header measurement
61
+ * automatically, and can optionally make the header surface pannable.
62
+ *
63
+ * Pair it with `Header.Dynamic` to mark the part of the header that should
64
+ * drive the collapse threshold.
9
65
  */
10
- export function HeaderMotionHeader({
11
- children
12
- }) {
13
- if (typeof children !== 'function') {
14
- throw new Error('HeaderMotion.Header only accepts render function as the only child.');
15
- }
16
- const motionProgressProps = useMotionProgress();
17
- return children(motionProgressProps);
18
- }
66
+ export const Header = Object.assign(HeaderRoot, {
67
+ /**
68
+ * Marks the part of the header whose measured layout should define the
69
+ * collapsible distance.
70
+ *
71
+ * In most designs, this is the section that visually disappears while the
72
+ * header collapses. Its measured value feeds `measureDynamic`, which can in
73
+ * turn drive `progressThreshold`.
74
+ */
75
+ Dynamic: HeaderDynamic
76
+ });
19
77
  //# sourceMappingURL=Header.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useMotionProgress","HeaderMotionHeader","children","Error","motionProgressProps"],"sourceRoot":"../../../src","sources":["components/Header.tsx"],"mappings":";;AAAA,SAASA,iBAAiB,QAAQ,+BAA4B;AAc9D;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAAC;EAAEC;AAAkC,CAAC,EAAE;EACxE,IAAI,OAAOA,QAAQ,KAAK,UAAU,EAAE;IAClC,MAAM,IAAIC,KAAK,CACb,qEACF,CAAC;EACH;EAEA,MAAMC,mBAAmB,GAAGJ,iBAAiB,CAAC,CAAC;EAC/C,OAAOE,QAAQ,CAACE,mBAAmB,CAAC;AACtC","ignoreList":[]}
1
+ {"version":3,"names":["StyleSheet","Animated","useHeaderMotionContextOrThrow","cloneWithOnLayout","composeOnLayoutHandlers","resolveSlottableChild","HeaderDynamic","HeaderPanBoundary","jsx","_jsx","headerOverlayStyle","create","overlay","position","top","left","right","HeaderRoot","props","ctxValue","asChild","child","children","pannable","panDecayConfig","headerPanMomentumOffset","scrollToRef","withGestureHandlerRootView","measureTotalHeight","_asChild","onLayout","style","rest","resolvedOnLayout","View","undefined","Header","Object","assign","Dynamic"],"sourceRoot":"../../../src","sources":["components/Header.tsx"],"mappings":";;AAAA,SAASA,UAAU,QAAwB,cAAc;AACzD,OAAOC,QAAQ,MAAM,yBAAyB;AAC9C,SAASC,6BAA6B,QAAQ,eAAY;AAM1D,SACEC,iBAAiB,EACjBC,uBAAuB,EACvBC,qBAAqB,QAChB,mBAAU;AACjB,SAASC,aAAa,QAAQ,oBAAiB;AAC/C,SAASC,iBAAiB,QAAQ,wBAAqB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAiExD,MAAMC,kBAAkB,GAAGV,UAAU,CAACW,MAAM,CAAC;EAC3CC,OAAO,EAAE;IACPC,QAAQ,EAAE,UAAU;IACpBC,GAAG,EAAE,CAAC;IACNC,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE;EACT;AACF,CAAC,CAAC,CAACJ,OAAO;AAEV,SAASK,UAAUA,CAACC,KAAkB,EAAE;EACtC,MAAMC,QAAQ,GAAGjB,6BAA6B,CAC5C,wOACF,CAAC;EAED,IAAIgB,KAAK,CAACE,OAAO,EAAE;IACjB,MAAMC,KAAK,GAAGhB,qBAAqB,CAAC,qBAAqB,EAAEa,KAAK,CAACI,QAAQ,CAAC;IAE1E,oBACEb,IAAA,CAACF,iBAAiB;MAChBgB,QAAQ,EAAEL,KAAK,CAACK,QAAS;MACzBC,cAAc,EAAEN,KAAK,CAACM,cAAe;MACrCC,uBAAuB,EAAEN,QAAQ,CAACM,uBAAwB;MAC1DC,WAAW,EAAEP,QAAQ,CAACO,WAAY;MAClCC,0BAA0B,EAAET,KAAK,CAACS,0BAA2B;MAAAL,QAAA,EAE5DnB,iBAAiB,CAChBkB,KAAK,EACLF,QAAQ,CAACS,kBAAkB,EAC3B,qBACF;IAAC,CACgB,CAAC;EAExB;EAEA,MAAM;IACJ;IACAR,OAAO,EAAES,QAAQ;IACjBjB,OAAO,GAAG,IAAI;IACdW,QAAQ;IACRC,cAAc;IACdM,QAAQ;IACRC,KAAK;IACLJ,0BAA0B;IAC1B,GAAGK;EACL,CAAC,GAAGd,KAAK;EACT,MAAMe,gBAAgB,GAAGH,QAA6C;EAEtE,oBACErB,IAAA,CAACF,iBAAiB;IAChBgB,QAAQ,EAAEA,QAAS;IACnBC,cAAc,EAAEA,cAAe;IAC/BC,uBAAuB,EAAEN,QAAQ,CAACM,uBAAwB;IAC1DC,WAAW,EAAEP,QAAQ,CAACO,WAAY;IAClCC,0BAA0B,EAAEA,0BAA2B;IAAAL,QAAA,eAEvDb,IAAA,CAACR,QAAQ,CAACiC,IAAI;MAAA,GACRF,IAAI;MACRF,QAAQ,EAAE1B,uBAAuB,CAC/B6B,gBAAgB,EAChBd,QAAQ,CAACS,kBACX,CAAE;MACFG,KAAK,EAAE,CAACnB,OAAO,GAAGF,kBAAkB,GAAGyB,SAAS,EAAEJ,KAAK;IAAE,CAC1D;EAAC,CACe,CAAC;AAExB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMK,MAAM,GAAGC,MAAM,CAACC,MAAM,CAACrB,UAAU,EAAE;EAC9C;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEsB,OAAO,EAAEjC;AACX,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ import Animated from 'react-native-reanimated';
4
+ import { useHeaderMotionContextOrThrow } from "../context.js";
5
+ import { cloneWithOnLayout, composeOnLayoutHandlers, resolveSlottableChild } from "../utils/index.js";
6
+
7
+ /**
8
+ * Marks the part of the header whose layout should define the collapsible
9
+ * distance.
10
+ *
11
+ * In most designs, this is the section that visually disappears while the
12
+ * header collapses. Its measured value feeds `measureDynamic`, which in turn
13
+ * can drive `progressThreshold`.
14
+ */
15
+ import { jsx as _jsx } from "react/jsx-runtime";
16
+ export function HeaderDynamic(props) {
17
+ const ctxValue = useHeaderMotionContextOrThrow('HeaderMotion.Header.Dynamic must be used within <HeaderMotion /> or <HeaderMotion.NavigationBridge />. If you are rendering inside a navigation header, bridge the context with <HeaderMotion.Bridge /> and <HeaderMotion.NavigationBridge />.');
18
+ if (props.asChild) {
19
+ return cloneWithOnLayout(resolveSlottableChild('HeaderMotion.Header.Dynamic', props.children), ctxValue.measureDynamic, 'HeaderMotion.Header.Dynamic');
20
+ }
21
+
22
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
23
+ const {
24
+ asChild: _asChild,
25
+ onLayout,
26
+ ...rest
27
+ } = props;
28
+ const resolvedOnLayout = onLayout;
29
+ return /*#__PURE__*/_jsx(Animated.View, {
30
+ ...rest,
31
+ onLayout: composeOnLayoutHandlers(resolvedOnLayout, ctxValue.measureDynamic)
32
+ });
33
+ }
34
+ //# sourceMappingURL=HeaderDynamic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Animated","useHeaderMotionContextOrThrow","cloneWithOnLayout","composeOnLayoutHandlers","resolveSlottableChild","jsx","_jsx","HeaderDynamic","props","ctxValue","asChild","children","measureDynamic","_asChild","onLayout","rest","resolvedOnLayout","View"],"sourceRoot":"../../../src","sources":["components/HeaderDynamic.tsx"],"mappings":";;AACA,OAAOA,QAAQ,MAAM,yBAAyB;AAC9C,SAASC,6BAA6B,QAAQ,eAAY;AAE1D,SACEC,iBAAiB,EACjBC,uBAAuB,EACvBC,qBAAqB,QAChB,mBAAU;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA,SAAAC,GAAA,IAAAC,IAAA;AAQA,OAAO,SAASC,aAAaA,CAACC,KAAyB,EAAE;EACvD,MAAMC,QAAQ,GAAGR,6BAA6B,CAC5C,gPACF,CAAC;EAED,IAAIO,KAAK,CAACE,OAAO,EAAE;IACjB,OAAOR,iBAAiB,CACtBE,qBAAqB,CAAC,6BAA6B,EAAEI,KAAK,CAACG,QAAQ,CAAC,EACpEF,QAAQ,CAACG,cAAc,EACvB,6BACF,CAAC;EACH;;EAEA;EACA,MAAM;IAAEF,OAAO,EAAEG,QAAQ;IAAEC,QAAQ;IAAE,GAAGC;EAAK,CAAC,GAAGP,KAAK;EACtD,MAAMQ,gBAAgB,GAAGF,QAA6C;EAEtE,oBACER,IAAA,CAACN,QAAQ,CAACiB,IAAI;IAAA,GACRF,IAAI;IACRD,QAAQ,EAAEX,uBAAuB,CAC/Ba,gBAAgB,EAChBP,QAAQ,CAACG,cACX;EAAE,CACH,CAAC;AAEN","ignoreList":[]}
@@ -1,13 +1,34 @@
1
1
  "use strict";
2
2
 
3
- import { useCallback, useMemo, useState } from 'react';
3
+ import { useCallback, useRef, useEffect, useMemo, useState } from 'react';
4
4
  import { Extrapolation, interpolate, useAnimatedReaction, useDerivedValue, useSharedValue } from 'react-native-reanimated';
5
5
  import { HeaderMotionContext } from "../context.js";
6
6
  import { DEFAULT_MEASURE_DYNAMIC, DEFAULT_PROGRESS_THRESHOLD, DEFAULT_SCROLL_ID, getInitialScrollValue } from "../utils/index.js";
7
7
  import { jsx as _jsx } from "react/jsx-runtime";
8
+ const resolveScrollIdForProgress = (scrollValues, activeScrollIdValue) => {
9
+ 'worklet';
10
+
11
+ if (activeScrollIdValue) {
12
+ return activeScrollIdValue;
13
+ }
14
+ let onlyNonDefaultId = null;
15
+ for (const key in scrollValues) {
16
+ if (key === DEFAULT_SCROLL_ID) {
17
+ continue;
18
+ }
19
+ if (onlyNonDefaultId !== null) {
20
+ return DEFAULT_SCROLL_ID;
21
+ }
22
+ onlyNonDefaultId = key;
23
+ }
24
+ return onlyNonDefaultId ?? DEFAULT_SCROLL_ID;
25
+ };
8
26
  /**
9
- * Context provider component for HeaderMotion.
10
- * Manages header animation state and provides it to child components via context.
27
+ * Root provider for a header-motion setup.
28
+ *
29
+ * It tracks the measured header layout, the active scroll position, and the
30
+ * derived `progress` shared value consumed by your animated header UI.
31
+ *
11
32
  * @template T - The type of scroll ID string
12
33
  */
13
34
  function HeaderMotionContextProvider({
@@ -18,26 +39,32 @@ function HeaderMotionContextProvider({
18
39
  progressExtrapolation = Extrapolation.CLAMP,
19
40
  children
20
41
  }) {
21
- const [dynamicMeasurement, setDynamicMeasurement] = useState(undefined);
42
+ const dynamicMeasurement = useSharedValue(undefined);
22
43
  const [originalHeaderHeight, setOriginalHeaderHeight] = useState(0);
44
+ const progressThresholdValue = useSharedValue(typeof progressThreshold === 'number' ? progressThreshold : Infinity);
45
+ const headerPanMomentumOffset = useSharedValue(null);
23
46
  const setOrUpdateDynamicMeasurement = useCallback(e => {
47
+ const prevMeasurement = dynamicMeasurement.get();
48
+ if (prevMeasurement !== undefined && measureDynamicMode === 'mount') {
49
+ return;
50
+ }
24
51
  const measured = measureDynamic(e);
25
- setDynamicMeasurement(prevMeasurement => {
26
- if (prevMeasurement !== undefined && measureDynamicMode === 'mount') {
27
- return prevMeasurement;
28
- }
29
- return measured;
30
- });
31
- }, [measureDynamicMode, measureDynamic, setDynamicMeasurement]);
32
- const calculatedProgressThreshold = useMemo(() => {
33
- if (typeof progressThreshold === 'number') {
34
- return progressThreshold;
52
+ if (prevMeasurement === measured) {
53
+ return;
35
54
  }
36
- if (dynamicMeasurement === undefined) {
37
- return Infinity;
55
+ dynamicMeasurement.set(measured);
56
+ const nextThreshold = typeof progressThreshold === 'number' ? progressThreshold : progressThreshold(measured);
57
+ progressThresholdValue.set(nextThreshold);
58
+ }, [measureDynamicMode, measureDynamic, dynamicMeasurement, progressThreshold, progressThresholdValue]);
59
+ useEffect(() => {
60
+ if (typeof progressThreshold === 'number') {
61
+ progressThresholdValue.set(progressThreshold);
62
+ return;
38
63
  }
39
- return progressThreshold(dynamicMeasurement);
40
- }, [dynamicMeasurement, progressThreshold]);
64
+ const measured = dynamicMeasurement.get();
65
+ const nextThreshold = measured === undefined ? Infinity : progressThreshold(measured);
66
+ progressThresholdValue.set(nextThreshold);
67
+ }, [progressThreshold, dynamicMeasurement, progressThresholdValue]);
41
68
  const measureTotalHeight = useCallback(e => {
42
69
  const measuredValue = e.nativeEvent.layout.height;
43
70
  setOriginalHeaderHeight(measuredValue);
@@ -55,8 +82,10 @@ function HeaderMotionContextProvider({
55
82
  });
56
83
  });
57
84
  const progress = useDerivedValue(() => {
58
- const id = activeScrollId?.get() ?? DEFAULT_SCROLL_ID;
59
- const scrollValue = scrollValues.get()[id];
85
+ const values = scrollValues.get();
86
+ const id = resolveScrollIdForProgress(values, activeScrollId?.get());
87
+ const scrollValue = values[id];
88
+ const threshold = progressThresholdValue.get();
60
89
  if (!scrollValue) {
61
90
  return 0;
62
91
  }
@@ -64,17 +93,24 @@ function HeaderMotionContextProvider({
64
93
  min,
65
94
  current
66
95
  } = scrollValue;
67
- return interpolate(current, [min, min + calculatedProgressThreshold], [0, 1], progressExtrapolation);
96
+ return interpolate(current, [min, min + threshold], [0, 1], progressExtrapolation);
68
97
  });
98
+ const scrollToRef = useRef(null);
99
+ // FUTURE: SharedValue-based scrollTo was removed for now because function updates
100
+ // were not propagating reliably, while it works for refs. Revisit later.
101
+ // We need to be updating the scrollTo on active scroll ID changes and doing it via state would cause re-renders.
102
+ // It's a bit of an anti-pattern to use refs for this as well, but I am yet to figure out a better way to pass those if SV won't work.
69
103
  const ctxValue = useMemo(() => ({
70
104
  progress,
71
105
  originalHeaderHeight,
72
106
  measureDynamic: setOrUpdateDynamicMeasurement,
73
107
  measureTotalHeight,
74
- progressThreshold: calculatedProgressThreshold,
108
+ headerPanMomentumOffset,
109
+ progressThreshold: progressThresholdValue,
75
110
  scrollValues,
111
+ scrollToRef,
76
112
  activeScrollId: activeScrollId
77
- }), [originalHeaderHeight, progress, measureTotalHeight, setOrUpdateDynamicMeasurement, scrollValues, activeScrollId, calculatedProgressThreshold]);
113
+ }), [originalHeaderHeight, progress, measureTotalHeight, headerPanMomentumOffset, setOrUpdateDynamicMeasurement, scrollValues, activeScrollId, progressThresholdValue]);
78
114
  return /*#__PURE__*/_jsx(HeaderMotionContext.Provider, {
79
115
  value: ctxValue,
80
116
  children: children
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useMemo","useState","Extrapolation","interpolate","useAnimatedReaction","useDerivedValue","useSharedValue","HeaderMotionContext","DEFAULT_MEASURE_DYNAMIC","DEFAULT_PROGRESS_THRESHOLD","DEFAULT_SCROLL_ID","getInitialScrollValue","jsx","_jsx","HeaderMotionContextProvider","progressThreshold","measureDynamic","measureDynamicMode","activeScrollId","progressExtrapolation","CLAMP","children","dynamicMeasurement","setDynamicMeasurement","undefined","originalHeaderHeight","setOriginalHeaderHeight","setOrUpdateDynamicMeasurement","e","measured","prevMeasurement","calculatedProgressThreshold","Infinity","measureTotalHeight","measuredValue","nativeEvent","layout","height","scrollValues","get","id","modify","value","progress","scrollValue","min","current","ctxValue","Provider"],"sourceRoot":"../../../src","sources":["components/HeaderMotion.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useRef","useEffect","useMemo","useState","Extrapolation","interpolate","useAnimatedReaction","useDerivedValue","useSharedValue","HeaderMotionContext","DEFAULT_MEASURE_DYNAMIC","DEFAULT_PROGRESS_THRESHOLD","DEFAULT_SCROLL_ID","getInitialScrollValue","jsx","_jsx","resolveScrollIdForProgress","scrollValues","activeScrollIdValue","onlyNonDefaultId","key","HeaderMotionContextProvider","progressThreshold","measureDynamic","measureDynamicMode","activeScrollId","progressExtrapolation","CLAMP","children","dynamicMeasurement","undefined","originalHeaderHeight","setOriginalHeaderHeight","progressThresholdValue","Infinity","headerPanMomentumOffset","setOrUpdateDynamicMeasurement","e","prevMeasurement","get","measured","set","nextThreshold","measureTotalHeight","measuredValue","nativeEvent","layout","height","id","modify","value","progress","values","scrollValue","threshold","min","current","scrollToRef","ctxValue","Provider"],"sourceRoot":"../../../src","sources":["components/HeaderMotion.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ import { useMemo } from 'react';
4
+ import { Platform } from 'react-native';
5
+ import { Gesture, GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler';
6
+ import { useAnimatedReaction, withDecay } from 'react-native-reanimated';
7
+ import { jsx as _jsx } from "react/jsx-runtime";
8
+ const PLATFORM_PANNING_ENABLED = Platform.select({
9
+ default: true,
10
+ android: false
11
+ });
12
+ export function HeaderPanBoundary({
13
+ children,
14
+ pannable = false,
15
+ panDecayConfig,
16
+ scrollToRef,
17
+ headerPanMomentumOffset,
18
+ withGestureHandlerRootView = false
19
+ }) {
20
+ useAnimatedReaction(() => headerPanMomentumOffset.get(), (offset, prevOffset) => {
21
+ if (offset !== null) {
22
+ const dy = offset - (prevOffset ?? 0);
23
+ scrollToRef.current?.(dy);
24
+ }
25
+ });
26
+ const isPanEnabled = PLATFORM_PANNING_ENABLED && pannable;
27
+ const pan = useMemo(() => Gesture.Pan().enabled(isPanEnabled).onChange(e => {
28
+ const dy = e.changeY;
29
+ scrollToRef.current?.(dy);
30
+ }).onEnd(e => {
31
+ const resolvedConfig = resolvePanDecayConfig(panDecayConfig, e);
32
+ headerPanMomentumOffset.set(withDecay(resolvedConfig, () => headerPanMomentumOffset.set(null)));
33
+ }).shouldCancelWhenOutside(false), [headerPanMomentumOffset, isPanEnabled, panDecayConfig, scrollToRef]);
34
+ const content = /*#__PURE__*/_jsx(GestureDetector, {
35
+ gesture: pan,
36
+ children: children
37
+ });
38
+ if (!withGestureHandlerRootView) {
39
+ return content;
40
+ }
41
+ return /*#__PURE__*/_jsx(GestureHandlerRootView, {
42
+ children: content
43
+ });
44
+ }
45
+ function resolvePanDecayConfig(panDecayConfig, event) {
46
+ 'worklet';
47
+
48
+ const resolvedConfig = typeof panDecayConfig === 'function' ? panDecayConfig(event) : panDecayConfig;
49
+ return {
50
+ ...resolvedConfig,
51
+ velocity: resolvedConfig?.velocity ?? event.velocityY
52
+ };
53
+ }
54
+ //# sourceMappingURL=HeaderPanBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useMemo","Platform","Gesture","GestureDetector","GestureHandlerRootView","useAnimatedReaction","withDecay","jsx","_jsx","PLATFORM_PANNING_ENABLED","select","default","android","HeaderPanBoundary","children","pannable","panDecayConfig","scrollToRef","headerPanMomentumOffset","withGestureHandlerRootView","get","offset","prevOffset","dy","current","isPanEnabled","pan","Pan","enabled","onChange","e","changeY","onEnd","resolvedConfig","resolvePanDecayConfig","set","shouldCancelWhenOutside","content","gesture","event","velocity","velocityY"],"sourceRoot":"../../../src","sources":["components/HeaderPanBoundary.tsx"],"mappings":";;AAAA,SAASA,OAAO,QAA2B,OAAO;AAClD,SAASC,QAAQ,QAAQ,cAAc;AACvC,SACEC,OAAO,EACPC,eAAe,EACfC,sBAAsB,QACjB,8BAA8B;AACrC,SAASC,mBAAmB,EAAEC,SAAS,QAAQ,yBAAyB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAOzE,MAAMC,wBAAwB,GAAGR,QAAQ,CAACS,MAAM,CAAC;EAC/CC,OAAO,EAAE,IAAI;EACbC,OAAO,EAAE;AACX,CAAC,CAAC;AAYF,OAAO,SAASC,iBAAiBA,CAAC;EAChCC,QAAQ;EACRC,QAAQ,GAAG,KAAK;EAChBC,cAAc;EACdC,WAAW;EACXC,uBAAuB;EACvBC,0BAA0B,GAAG;AACP,CAAC,EAAE;EACzBd,mBAAmB,CACjB,MAAMa,uBAAuB,CAACE,GAAG,CAAC,CAAC,EACnC,CAACC,MAAM,EAAEC,UAAU,KAAK;IACtB,IAAID,MAAM,KAAK,IAAI,EAAE;MACnB,MAAME,EAAE,GAAGF,MAAM,IAAIC,UAAU,IAAI,CAAC,CAAC;MACrCL,WAAW,CAACO,OAAO,GAAGD,EAAE,CAAC;IAC3B;EACF,CACF,CAAC;EAED,MAAME,YAAY,GAAGhB,wBAAwB,IAAIM,QAAQ;EAEzD,MAAMW,GAAG,GAAG1B,OAAO,CACjB,MACEE,OAAO,CAACyB,GAAG,CAAC,CAAC,CACVC,OAAO,CAACH,YAAY,CAAC,CACrBI,QAAQ,CAAEC,CAAC,IAAK;IACf,MAAMP,EAAE,GAAGO,CAAC,CAACC,OAAO;IACpBd,WAAW,CAACO,OAAO,GAAGD,EAAE,CAAC;EAC3B,CAAC,CAAC,CACDS,KAAK,CAAEF,CAAC,IAAK;IACZ,MAAMG,cAAc,GAAGC,qBAAqB,CAAClB,cAAc,EAAEc,CAAC,CAAC;IAC/DZ,uBAAuB,CAACiB,GAAG,CACzB7B,SAAS,CAAC2B,cAAc,EAAE,MAAMf,uBAAuB,CAACiB,GAAG,CAAC,IAAI,CAAC,CACnE,CAAC;EACH,CAAC,CAAC,CACDC,uBAAuB,CAAC,KAAK,CAAC,EACnC,CAAClB,uBAAuB,EAAEO,YAAY,EAAET,cAAc,EAAEC,WAAW,CACrE,CAAC;EAED,MAAMoB,OAAO,gBAAG7B,IAAA,CAACL,eAAe;IAACmC,OAAO,EAAEZ,GAAI;IAAAZ,QAAA,EAAEA;EAAQ,CAAkB,CAAC;EAE3E,IAAI,CAACK,0BAA0B,EAAE;IAC/B,OAAOkB,OAAO;EAChB;EAEA,oBAAO7B,IAAA,CAACJ,sBAAsB;IAAAU,QAAA,EAAEuB;EAAO,CAAyB,CAAC;AACnE;AAEA,SAASH,qBAAqBA,CAC5BlB,cAAgD,EAChDuB,KAA0B,EAC1B;EACA,SAAS;;EAET,MAAMN,cAAc,GAClB,OAAOjB,cAAc,KAAK,UAAU,GAChCA,cAAc,CAACuB,KAAK,CAAC,GACrBvB,cAAc;EAEpB,OAAO;IACL,GAAGiB,cAAc;IACjBO,QAAQ,EAAEP,cAAc,EAAEO,QAAQ,IAAID,KAAK,CAACE;EAC9C,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ import { HeaderMotionContext } from "../context.js";
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ /**
6
+ * Re-provides HeaderMotion context in a different part of the React tree.
7
+ *
8
+ * This is primarily useful for navigation libraries that render headers outside
9
+ * the screen subtree where `HeaderMotion` itself lives.
10
+ */
11
+ export function NavigationBridge({
12
+ value,
13
+ children
14
+ }) {
15
+ return /*#__PURE__*/_jsx(HeaderMotionContext.Provider, {
16
+ value: value,
17
+ children: children
18
+ });
19
+ }
20
+ //# sourceMappingURL=NavigationBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["HeaderMotionContext","jsx","_jsx","NavigationBridge","value","children","Provider"],"sourceRoot":"../../../src","sources":["components/NavigationBridge.tsx"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,eAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAajD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAC;EAC/BC,KAAK;EACLC;AACiC,CAAC,EAAE;EACpC,oBACEH,IAAA,CAACF,mBAAmB,CAACM,QAAQ;IAACF,KAAK,EAAEA,KAAM;IAAAC,QAAA,EACxCA;EAAQ,CACmB,CAAC;AAEnC","ignoreList":[]}
@@ -2,11 +2,13 @@
2
2
 
3
3
  import { useScrollManager } from "../hooks/index.js";
4
4
  /**
5
- * ScrollManager component that provides scroll tracking functionality for custom scroll implementations. Uses {@link useScrollManager} under the hood.
6
- * Must be used within a HeaderMotion component.
5
+ * Render-prop wrapper around `useScrollManager()`.
7
6
  *
8
- * This is useful when you need to use a scroll component that isn't directly supported
9
- * (like a custom scroll view or third-party list components).
7
+ * **Most code should prefer `createHeaderMotionScrollable()` instead.**
8
+ *
9
+ * Use `ScrollManager` only when the factory approach is not enough and you
10
+ * still need HeaderMotion to manage a custom scrollable through render-prop
11
+ * composition.
10
12
  *
11
13
  * @example
12
14
  * ```tsx
@@ -23,7 +25,7 @@ import { useScrollManager } from "../hooks/index.js";
23
25
  * </HeaderMotion>
24
26
  * ```
25
27
  */
26
- export function HeaderMotionScrollManager({
28
+ export function ScrollManager({
27
29
  children,
28
30
  scrollId,
29
31
  animatedRef,
@@ -1 +1 @@
1
- {"version":3,"names":["useScrollManager","HeaderMotionScrollManager","children","scrollId","animatedRef","refreshControl","refreshing","onRefresh","progressViewOffset","onScroll","onScrollBeginDrag","onScrollEndDrag","onMomentumScrollBegin","onMomentumScrollEnd","Error","scrollableProps","headerMotionContext"],"sourceRoot":"../../../src","sources":["components/ScrollManager.tsx"],"mappings":";;AAAA,SAASA,gBAAgB,QAAQ,mBAAU;AAqC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,yBAAyBA,CAAC;EACxCC,QAAQ;EACRC,QAAQ;EACRC,WAAW;EACXC,cAAc;EACdC,UAAU;EACVC,SAAS;EACTC,kBAAkB;EAClBC,QAAQ;EACRC,iBAAiB;EACjBC,eAAe;EACfC,qBAAqB;EACrBC;AAC8B,CAAC,EAAE;EACjC,IAAI,OAAOX,QAAQ,KAAK,UAAU,EAAE;IAClC,MAAM,IAAIY,KAAK,CACb,4EACF,CAAC;EACH;EAEA,MAAM;IAAEC,eAAe;IAAEC;EAAoB,CAAC,GAAGhB,gBAAgB,CAACG,QAAQ,EAAE;IAC1EC,WAAW;IACXC,cAAc;IACdC,UAAU;IACVC,SAAS;IACTC,kBAAkB;IAClBC,QAAQ;IACRC,iBAAiB;IACjBC,eAAe;IACfC,qBAAqB;IACrBC;EACF,CAAC,CAAC;EAEF,OAAOX,QAAQ,CAACa,eAAe,EAAEC,mBAAmB,CAAC;AACvD","ignoreList":[]}
1
+ {"version":3,"names":["useScrollManager","ScrollManager","children","scrollId","animatedRef","refreshControl","refreshing","onRefresh","progressViewOffset","onScroll","onScrollBeginDrag","onScrollEndDrag","onMomentumScrollBegin","onMomentumScrollEnd","Error","scrollableProps","headerMotionContext"],"sourceRoot":"../../../src","sources":["components/ScrollManager.tsx"],"mappings":";;AAAA,SAASA,gBAAgB,QAAsC,mBAAU;AA2BzE;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,aAAaA,CAAuC;EAClEC,QAAQ;EACRC,QAAQ;EACRC,WAAW;EACXC,cAAc;EACdC,UAAU;EACVC,SAAS;EACTC,kBAAkB;EAClBC,QAAQ;EACRC,iBAAiB;EACjBC,eAAe;EACfC,qBAAqB;EACrBC;AACoC,CAAC,EAAE;EACvC,IAAI,OAAOX,QAAQ,KAAK,UAAU,EAAE;IAClC,MAAM,IAAIY,KAAK,CACb,4EACF,CAAC;EACH;EAEA,MAAM;IAAEC,eAAe;IAAEC;EAAoB,CAAC,GAAGhB,gBAAgB,CAC/DG,QAAQ,EACR;IACEC,WAAW;IACXC,cAAc;IACdC,UAAU;IACVC,SAAS;IACTC,kBAAkB;IAClBC,QAAQ;IACRC,iBAAiB;IACjBC,eAAe;IACfC,qBAAqB;IACrBC;EACF,CACF,CAAC;EAED,OAAOX,QAAQ,CAACa,eAAe,EAAEC,mBAAmB,CAAC;AACvD","ignoreList":[]}
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import Animated from 'react-native-reanimated';
4
- import { HeaderMotionScrollManager } from "./ScrollManager.js";
5
- import { jsx as _jsx } from "react/jsx-runtime";
4
+ import { createHeaderMotionScrollable } from "./createHeaderMotionScrollable.js";
6
5
  /**
7
6
  * Animated ScrollView component that integrates with HeaderMotion.
8
7
  * Automatically handles scroll tracking and header animation synchronization.
@@ -17,49 +16,9 @@ import { jsx as _jsx } from "react/jsx-runtime";
17
16
  * </HeaderMotion>
18
17
  * ```
19
18
  */
20
- export function HeaderMotionScrollView({
21
- scrollId,
22
- animatedRef,
23
- children,
24
- contentContainerStyle,
25
- refreshControl,
26
- onScroll,
27
- onScrollBeginDrag,
28
- onScrollEndDrag,
29
- onMomentumScrollBegin,
30
- onMomentumScrollEnd,
31
- ...props
32
- }) {
33
- return /*#__PURE__*/_jsx(HeaderMotionScrollManager, {
34
- scrollId: scrollId,
35
- animatedRef: animatedRef,
36
- refreshControl: refreshControl,
37
- onScroll: onScroll,
38
- onScrollBeginDrag: onScrollBeginDrag,
39
- onScrollEndDrag: onScrollEndDrag,
40
- onMomentumScrollBegin: onMomentumScrollBegin,
41
- onMomentumScrollEnd: onMomentumScrollEnd,
42
- children: ({
43
- onScroll: managedOnScroll,
44
- refreshControl: managedRefreshControl,
45
- ...scrollViewProps
46
- }, {
47
- originalHeaderHeight,
48
- minHeightContentContainerStyle
49
- }) => /*#__PURE__*/_jsx(Animated.ScrollView, {
50
- ...scrollViewProps,
51
- ...props,
52
- onScroll: managedOnScroll,
53
- ...(managedRefreshControl && {
54
- refreshControl: managedRefreshControl
55
- }),
56
- children: /*#__PURE__*/_jsx(Animated.View, {
57
- style: [minHeightContentContainerStyle, {
58
- paddingTop: originalHeaderHeight
59
- }, contentContainerStyle],
60
- children: children
61
- })
62
- })
63
- });
64
- }
19
+ export const ScrollView = createHeaderMotionScrollable(Animated.ScrollView, {
20
+ displayName: 'HeaderMotion.ScrollView',
21
+ contentContainerMode: 'children',
22
+ isComponentAnimated: true
23
+ });
65
24
  //# sourceMappingURL=ScrollView.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Animated","HeaderMotionScrollManager","jsx","_jsx","HeaderMotionScrollView","scrollId","animatedRef","children","contentContainerStyle","refreshControl","onScroll","onScrollBeginDrag","onScrollEndDrag","onMomentumScrollBegin","onMomentumScrollEnd","props","managedOnScroll","managedRefreshControl","scrollViewProps","originalHeaderHeight","minHeightContentContainerStyle","ScrollView","View","style","paddingTop"],"sourceRoot":"../../../src","sources":["components/ScrollView.tsx"],"mappings":";;AAAA,OAAOA,QAAQ,MAGR,yBAAyB;AAChC,SAASC,yBAAyB,QAAQ,oBAAiB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAe5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,sBAAsBA,CAAC;EACrCC,QAAQ;EACRC,WAAW;EACXC,QAAQ;EACRC,qBAAqB;EACrBC,cAAc;EACdC,QAAQ;EACRC,iBAAiB;EACjBC,eAAe;EACfC,qBAAqB;EACrBC,mBAAmB;EACnB,GAAGC;AACwB,CAAC,EAAE;EAC9B,oBACEZ,IAAA,CAACF,yBAAyB;IACxBI,QAAQ,EAAEA,QAAS;IACnBC,WAAW,EAAEA,WAAY;IACzBG,cAAc,EAAEA,cAAe;IAC/BC,QAAQ,EAAEA,QAAS;IACnBC,iBAAiB,EAAEA,iBAAkB;IACrCC,eAAe,EAAEA,eAAgB;IACjCC,qBAAqB,EAAEA,qBAAsB;IAC7CC,mBAAmB,EAAEA,mBAAoB;IAAAP,QAAA,EAExCA,CACC;MACEG,QAAQ,EAAEM,eAAe;MACzBP,cAAc,EAAEQ,qBAAqB;MACrC,GAAGC;IACL,CAAC,EACD;MAAEC,oBAAoB;MAAEC;IAA+B,CAAC,kBAExDjB,IAAA,CAACH,QAAQ,CAACqB,UAAU;MAAA,GACdH,eAAe;MAAA,GACfH,KAAK;MACTL,QAAQ,EAAEM,eAAgB;MAAA,IACrBC,qBAAqB,IAAI;QAC5BR,cAAc,EAAEQ;MAClB,CAAC;MAAAV,QAAA,eAEDJ,IAAA,CAACH,QAAQ,CAACsB,IAAI;QACZC,KAAK,EAAE,CACLH,8BAA8B,EAC9B;UAAEI,UAAU,EAAEL;QAAqB,CAAC,EACpCX,qBAAqB,CACrB;QAAAD,QAAA,EAEDA;MAAQ,CACI;IAAC,CACG;EACtB,CACwB,CAAC;AAEhC","ignoreList":[]}
1
+ {"version":3,"names":["Animated","createHeaderMotionScrollable","ScrollView","displayName","contentContainerMode","isComponentAnimated"],"sourceRoot":"../../../src","sources":["components/ScrollView.tsx"],"mappings":";;AACA,OAAOA,QAAQ,MAER,yBAAyB;AAChC,SACEC,4BAA4B,QAEvB,mCAAgC;AASvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,GAAGD,4BAA4B,CAACD,QAAQ,CAACE,UAAU,EAAE;EAC1EC,WAAW,EAAE,yBAAyB;EACtCC,oBAAoB,EAAE,UAAU;EAChCC,mBAAmB,EAAE;AACvB,CAAC,CAAoC","ignoreList":[]}