@r0b0t3d/react-native-collapsible 1.0.1 → 1.2.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 (124) hide show
  1. package/lib/commonjs/components/CollapsibleContainer.js +4 -2
  2. package/lib/commonjs/components/CollapsibleContainer.js.map +1 -1
  3. package/lib/commonjs/components/CollapsibleView.js +4 -3
  4. package/lib/commonjs/components/CollapsibleView.js.map +1 -1
  5. package/lib/commonjs/components/{AnimatedTopView.js → header/AnimatedTopView.js} +0 -0
  6. package/lib/commonjs/components/{AnimatedTopView.js.map → header/AnimatedTopView.js.map} +0 -0
  7. package/lib/commonjs/components/{CollapsibleHeaderContainer.js → header/CollapsibleHeaderContainer.js} +9 -8
  8. package/lib/commonjs/components/header/CollapsibleHeaderContainer.js.map +1 -0
  9. package/lib/commonjs/components/{StickyView.js → header/StickyView.js} +18 -31
  10. package/lib/commonjs/components/header/StickyView.js.map +1 -0
  11. package/lib/commonjs/components/pullToRefresh/PullToRefreshContainer.js +75 -0
  12. package/lib/commonjs/components/pullToRefresh/PullToRefreshContainer.js.map +1 -0
  13. package/lib/commonjs/components/pullToRefresh/PullToRefreshProvider.js +35 -0
  14. package/lib/commonjs/components/pullToRefresh/PullToRefreshProvider.js.map +1 -0
  15. package/lib/commonjs/components/pullToRefresh/RefreshControl.js +73 -0
  16. package/lib/commonjs/components/pullToRefresh/RefreshControl.js.map +1 -0
  17. package/lib/commonjs/components/pullToRefresh/usePullToRefreshContext.js +24 -0
  18. package/lib/commonjs/components/pullToRefresh/usePullToRefreshContext.js.map +1 -0
  19. package/lib/commonjs/components/pullToRefresh/utils.js +59 -0
  20. package/lib/commonjs/components/pullToRefresh/utils.js.map +1 -0
  21. package/lib/commonjs/components/{CollapsibleFlatList.js → scrollable/CollapsibleFlatList.js} +36 -31
  22. package/lib/commonjs/components/scrollable/CollapsibleFlatList.js.map +1 -0
  23. package/lib/commonjs/components/{CollapsibleScrollView.js → scrollable/CollapsibleScrollView.js} +6 -6
  24. package/lib/commonjs/components/scrollable/CollapsibleScrollView.js.map +1 -0
  25. package/lib/commonjs/{hooks → components/scrollable}/useAnimatedScroll.js +7 -7
  26. package/lib/commonjs/components/scrollable/useAnimatedScroll.js.map +1 -0
  27. package/lib/commonjs/hooks/useInternalCollapsibleContext.js +1 -1
  28. package/lib/commonjs/hooks/useInternalCollapsibleContext.js.map +1 -1
  29. package/lib/commonjs/index.js +21 -12
  30. package/lib/commonjs/index.js.map +1 -1
  31. package/lib/commonjs/{types.js → types.d.js} +1 -1
  32. package/lib/commonjs/{types.js.map → types.d.js.map} +0 -0
  33. package/lib/commonjs/utils/debounce.js +20 -0
  34. package/lib/commonjs/utils/debounce.js.map +1 -0
  35. package/lib/commonjs/{hooks/withCollapsibleContext.js → withCollapsibleContext.js} +95 -64
  36. package/lib/commonjs/withCollapsibleContext.js.map +1 -0
  37. package/lib/module/components/CollapsibleContainer.js +1 -1
  38. package/lib/module/components/CollapsibleContainer.js.map +1 -1
  39. package/lib/module/components/CollapsibleView.js +4 -3
  40. package/lib/module/components/CollapsibleView.js.map +1 -1
  41. package/lib/module/components/{AnimatedTopView.js → header/AnimatedTopView.js} +0 -0
  42. package/lib/module/components/{AnimatedTopView.js.map → header/AnimatedTopView.js.map} +0 -0
  43. package/lib/module/components/{CollapsibleHeaderContainer.js → header/CollapsibleHeaderContainer.js} +7 -6
  44. package/lib/module/components/header/CollapsibleHeaderContainer.js.map +1 -0
  45. package/lib/module/components/{StickyView.js → header/StickyView.js} +17 -30
  46. package/lib/module/components/header/StickyView.js.map +1 -0
  47. package/lib/module/components/pullToRefresh/PullToRefreshContainer.js +56 -0
  48. package/lib/module/components/pullToRefresh/PullToRefreshContainer.js.map +1 -0
  49. package/lib/module/components/pullToRefresh/PullToRefreshProvider.js +21 -0
  50. package/lib/module/components/pullToRefresh/PullToRefreshProvider.js.map +1 -0
  51. package/lib/module/components/pullToRefresh/RefreshControl.js +55 -0
  52. package/lib/module/components/pullToRefresh/RefreshControl.js.map +1 -0
  53. package/lib/module/components/pullToRefresh/usePullToRefreshContext.js +13 -0
  54. package/lib/module/components/pullToRefresh/usePullToRefreshContext.js.map +1 -0
  55. package/lib/module/components/pullToRefresh/utils.js +42 -0
  56. package/lib/module/components/pullToRefresh/utils.js.map +1 -0
  57. package/lib/module/components/{CollapsibleFlatList.js → scrollable/CollapsibleFlatList.js} +36 -32
  58. package/lib/module/components/scrollable/CollapsibleFlatList.js.map +1 -0
  59. package/lib/module/components/{CollapsibleScrollView.js → scrollable/CollapsibleScrollView.js} +5 -5
  60. package/lib/module/components/scrollable/CollapsibleScrollView.js.map +1 -0
  61. package/lib/module/{hooks → components/scrollable}/useAnimatedScroll.js +6 -6
  62. package/lib/module/components/scrollable/useAnimatedScroll.js.map +1 -0
  63. package/lib/module/hooks/useInternalCollapsibleContext.js +1 -1
  64. package/lib/module/hooks/useInternalCollapsibleContext.js.map +1 -1
  65. package/lib/module/index.js +6 -5
  66. package/lib/module/index.js.map +1 -1
  67. package/lib/module/types.d.js +2 -0
  68. package/lib/module/{types.js.map → types.d.js.map} +0 -0
  69. package/lib/module/utils/debounce.js +13 -0
  70. package/lib/module/utils/debounce.js.map +1 -0
  71. package/lib/module/withCollapsibleContext.js +163 -0
  72. package/lib/module/withCollapsibleContext.js.map +1 -0
  73. package/lib/typescript/components/CollapsibleView.d.ts +1 -1
  74. package/lib/typescript/components/{AnimatedTopView.d.ts → header/AnimatedTopView.d.ts} +0 -0
  75. package/lib/typescript/components/{CollapsibleHeaderContainer.d.ts → header/CollapsibleHeaderContainer.d.ts} +0 -0
  76. package/lib/typescript/components/{StickyView.d.ts → header/StickyView.d.ts} +0 -0
  77. package/lib/typescript/components/pullToRefresh/PullToRefreshContainer.d.ts +8 -0
  78. package/lib/typescript/components/pullToRefresh/PullToRefreshProvider.d.ts +6 -0
  79. package/lib/typescript/components/pullToRefresh/RefreshControl.d.ts +9 -0
  80. package/lib/typescript/components/pullToRefresh/usePullToRefreshContext.d.ts +4 -0
  81. package/lib/typescript/components/pullToRefresh/utils.d.ts +20 -0
  82. package/lib/typescript/components/{CollapsibleFlatList.d.ts → scrollable/CollapsibleFlatList.d.ts} +1 -1
  83. package/lib/typescript/components/{CollapsibleScrollView.d.ts → scrollable/CollapsibleScrollView.d.ts} +1 -1
  84. package/lib/typescript/{hooks → components/scrollable}/useAnimatedScroll.d.ts +0 -0
  85. package/lib/typescript/hooks/useInternalCollapsibleContext.d.ts +1 -1
  86. package/lib/typescript/index.d.ts +6 -5
  87. package/lib/typescript/utils/debounce.d.ts +1 -0
  88. package/lib/typescript/{hooks/withCollapsibleContext.d.ts → withCollapsibleContext.d.ts} +0 -0
  89. package/package.json +4 -2
  90. package/src/components/CollapsibleContainer.tsx +1 -1
  91. package/src/components/CollapsibleView.tsx +4 -3
  92. package/src/components/{AnimatedTopView.tsx → header/AnimatedTopView.tsx} +0 -0
  93. package/src/components/{CollapsibleHeaderContainer.tsx → header/CollapsibleHeaderContainer.tsx} +6 -4
  94. package/src/components/{StickyView.tsx → header/StickyView.tsx} +15 -22
  95. package/src/components/pullToRefresh/PullToRefreshContainer.tsx +65 -0
  96. package/src/components/pullToRefresh/PullToRefreshProvider.tsx +27 -0
  97. package/src/components/pullToRefresh/RefreshControl.tsx +80 -0
  98. package/src/components/pullToRefresh/usePullToRefreshContext.ts +13 -0
  99. package/src/components/pullToRefresh/utils.ts +49 -0
  100. package/src/components/scrollable/CollapsibleFlatList.tsx +135 -0
  101. package/src/components/{CollapsibleScrollView.tsx → scrollable/CollapsibleScrollView.tsx} +6 -6
  102. package/src/{hooks → components/scrollable}/useAnimatedScroll.ts +8 -8
  103. package/src/hooks/useInternalCollapsibleContext.ts +1 -1
  104. package/src/index.tsx +6 -5
  105. package/src/{types.ts → types.d.ts} +14 -3
  106. package/src/utils/debounce.ts +10 -0
  107. package/src/withCollapsibleContext.tsx +201 -0
  108. package/lib/commonjs/components/CollapsibleFlatList.js.map +0 -1
  109. package/lib/commonjs/components/CollapsibleHeaderContainer.js.map +0 -1
  110. package/lib/commonjs/components/CollapsibleScrollView.js.map +0 -1
  111. package/lib/commonjs/components/StickyView.js.map +0 -1
  112. package/lib/commonjs/hooks/useAnimatedScroll.js.map +0 -1
  113. package/lib/commonjs/hooks/withCollapsibleContext.js.map +0 -1
  114. package/lib/module/components/CollapsibleFlatList.js.map +0 -1
  115. package/lib/module/components/CollapsibleHeaderContainer.js.map +0 -1
  116. package/lib/module/components/CollapsibleScrollView.js.map +0 -1
  117. package/lib/module/components/StickyView.js.map +0 -1
  118. package/lib/module/hooks/useAnimatedScroll.js.map +0 -1
  119. package/lib/module/hooks/withCollapsibleContext.js +0 -136
  120. package/lib/module/hooks/withCollapsibleContext.js.map +0 -1
  121. package/lib/module/types.js +0 -2
  122. package/lib/typescript/types.d.ts +0 -33
  123. package/src/components/CollapsibleFlatList.tsx +0 -119
  124. package/src/hooks/withCollapsibleContext.tsx +0 -164
@@ -9,7 +9,9 @@ var _react = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _reactNative = require("react-native");
11
11
 
12
- var _useInternalCollapsibleContext = require("../hooks/useInternalCollapsibleContext");
12
+ var _useInternalCollapsibleContext = _interopRequireDefault(require("../hooks/useInternalCollapsibleContext"));
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
15
 
14
16
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
17
 
@@ -24,7 +26,7 @@ function CollapsibleContainer({
24
26
  const {
25
27
  containerRef,
26
28
  handleContainerHeight
27
- } = (0, _useInternalCollapsibleContext.useInternalCollapsibleContext)();
29
+ } = (0, _useInternalCollapsibleContext.default)();
28
30
  const handleContainerLayout = (0, _react.useCallback)(layout => {
29
31
  const height = layout.nativeEvent.layout.height;
30
32
  handleContainerHeight(height);
@@ -1 +1 @@
1
- {"version":3,"sources":["CollapsibleContainer.tsx"],"names":["CollapsibleContainer","children","props","containerRef","handleContainerHeight","handleContainerLayout","layout","height","nativeEvent","styles","container","style","StyleSheet","create","flex","overflow"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;;;;;AAMe,SAASA,oBAAT,CAA8B;AAAEC,EAAAA,QAAF;AAAY,KAAGC;AAAf,CAA9B,EAA6D;AAC1E,QAAM;AAAEC,IAAAA,YAAF;AAAgBC,IAAAA;AAAhB,MACJ,mEADF;AAGA,QAAMC,qBAAqB,GAAG,wBAC3BC,MAAD,IAA+B;AAC7B,UAAMC,MAAM,GAAGD,MAAM,CAACE,WAAP,CAAmBF,MAAnB,CAA0BC,MAAzC;AACAH,IAAAA,qBAAqB,CAACG,MAAD,CAArB;AACD,GAJ2B,EAK5B,CAACH,qBAAD,CAL4B,CAA9B;AAQA,sBACE,6BAAC,iBAAD,eACMF,KADN;AAEE,IAAA,GAAG,EAAEC,YAFP;AAGE,IAAA,KAAK,EAAE,CAACM,MAAM,CAACC,SAAR,EAAmBR,KAAK,CAACS,KAAzB,CAHT;AAIE,IAAA,QAAQ,EAAEN;AAJZ,MAMGJ,QANH,CADF;AAUD;;AAED,MAAMQ,MAAM,GAAGG,wBAAWC,MAAX,CAAkB;AAC/BH,EAAAA,SAAS,EAAE;AACTI,IAAAA,IAAI,EAAE,CADG;AAETC,IAAAA,QAAQ,EAAE;AAFD;AADoB,CAAlB,CAAf","sourcesContent":["import React, { useCallback } from 'react';\nimport { LayoutChangeEvent, StyleSheet, View, ViewProps } from 'react-native';\nimport { useInternalCollapsibleContext } from '../hooks/useInternalCollapsibleContext';\n\ntype Props = Omit<ViewProps, 'ref' | 'onLayout'> & {\n children: Element;\n};\n\nexport default function CollapsibleContainer({ children, ...props }: Props) {\n const { containerRef, handleContainerHeight } =\n useInternalCollapsibleContext();\n\n const handleContainerLayout = useCallback(\n (layout: LayoutChangeEvent) => {\n const height = layout.nativeEvent.layout.height;\n handleContainerHeight(height);\n },\n [handleContainerHeight]\n );\n\n return (\n <View\n {...props}\n ref={containerRef}\n style={[styles.container, props.style]}\n onLayout={handleContainerLayout}\n >\n {children}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n overflow: 'hidden',\n },\n});\n"]}
1
+ {"version":3,"sources":["CollapsibleContainer.tsx"],"names":["CollapsibleContainer","children","props","containerRef","handleContainerHeight","handleContainerLayout","layout","height","nativeEvent","styles","container","style","StyleSheet","create","flex","overflow"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;;;;;;;AAMe,SAASA,oBAAT,CAA8B;AAAEC,EAAAA,QAAF;AAAY,KAAGC;AAAf,CAA9B,EAA6D;AAC1E,QAAM;AAAEC,IAAAA,YAAF;AAAgBC,IAAAA;AAAhB,MACJ,6CADF;AAGA,QAAMC,qBAAqB,GAAG,wBAC3BC,MAAD,IAA+B;AAC7B,UAAMC,MAAM,GAAGD,MAAM,CAACE,WAAP,CAAmBF,MAAnB,CAA0BC,MAAzC;AACAH,IAAAA,qBAAqB,CAACG,MAAD,CAArB;AACD,GAJ2B,EAK5B,CAACH,qBAAD,CAL4B,CAA9B;AAQA,sBACE,6BAAC,iBAAD,eACMF,KADN;AAEE,IAAA,GAAG,EAAEC,YAFP;AAGE,IAAA,KAAK,EAAE,CAACM,MAAM,CAACC,SAAR,EAAmBR,KAAK,CAACS,KAAzB,CAHT;AAIE,IAAA,QAAQ,EAAEN;AAJZ,MAMGJ,QANH,CADF;AAUD;;AAED,MAAMQ,MAAM,GAAGG,wBAAWC,MAAX,CAAkB;AAC/BH,EAAAA,SAAS,EAAE;AACTI,IAAAA,IAAI,EAAE,CADG;AAETC,IAAAA,QAAQ,EAAE;AAFD;AADoB,CAAlB,CAAf","sourcesContent":["import React, { useCallback } from 'react';\nimport { LayoutChangeEvent, StyleSheet, View, ViewProps } from 'react-native';\nimport useInternalCollapsibleContext from '../hooks/useInternalCollapsibleContext';\n\ntype Props = Omit<ViewProps, 'ref' | 'onLayout'> & {\n children: Element;\n};\n\nexport default function CollapsibleContainer({ children, ...props }: Props) {\n const { containerRef, handleContainerHeight } =\n useInternalCollapsibleContext();\n\n const handleContainerLayout = useCallback(\n (layout: LayoutChangeEvent) => {\n const height = layout.nativeEvent.layout.height;\n handleContainerHeight(height);\n },\n [handleContainerHeight]\n );\n\n return (\n <View\n {...props}\n ref={containerRef}\n style={[styles.container, props.style]}\n onLayout={handleContainerLayout}\n >\n {children}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n overflow: 'hidden',\n },\n});\n"]}
@@ -47,7 +47,7 @@ function CollapsibleView({
47
47
  });
48
48
  }, []);
49
49
  const handleLayout = (0, _react.useCallback)(event => {
50
- if (event.nativeEvent.layout.height > 0) {
50
+ if (event.nativeEvent.layout.height >= 0) {
51
51
  actualHeight.value = event.nativeEvent.layout.height;
52
52
  }
53
53
  }, []);
@@ -114,7 +114,7 @@ function CollapsibleHeaderText({
114
114
  return /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
115
115
  activeOpacity: 0.9,
116
116
  onPress: onToggle,
117
- style: [style]
117
+ style: style
118
118
  }, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
119
119
  style: styles.headerContainer
120
120
  }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
@@ -130,7 +130,8 @@ const styles = _reactNative.StyleSheet.create({
130
130
  },
131
131
  content: {},
132
132
  headerContainer: {
133
- flexDirection: 'row'
133
+ flexDirection: 'row',
134
+ alignItems: 'center'
134
135
  },
135
136
  headerTitle: {
136
137
  flex: 1
@@ -1 +1 @@
1
- {"version":3,"sources":["CollapsibleView.tsx"],"names":["key","CollapsibleView","initialState","collapseState","renderHeader","children","containerStyle","collapsedBackgroundColor","expandedBackgroundColor","actualHeight","contentKey","newValue","value","onToggle","overshootClamping","handleLayout","event","nativeEvent","layout","height","wrapperStyle","damping","stiffness","contentHeight","undefined","containerAnimatedStyle","backgroundColor","headerProps","collapsed","styles","wrapper","content","CollapsibleHeaderText","title","style","titleStyle","icon","iconInitialAngle","iconStyle","rotate","transform","headerContainer","headerTitle","StyleSheet","create","overflow","flexDirection","flex"],"mappings":"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","sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable react-hooks/rules-of-hooks */\nimport React, { ReactNode, useCallback, useEffect, useMemo } from 'react';\nimport {\n LayoutChangeEvent,\n StyleProp,\n StyleSheet,\n Text,\n TextStyle,\n TouchableOpacity,\n View,\n ViewStyle,\n} from 'react-native';\nimport Animated, {\n useAnimatedStyle,\n useSharedValue,\n withSpring,\n interpolateColor,\n interpolate,\n} from 'react-native-reanimated';\n\nexport type CollapsibleHeaderProps = {\n onToggle: () => void;\n collapsed: Animated.SharedValue<number>;\n};\n\ntype Props = {\n initialState?: 'collapsed' | 'expanded';\n collapseState?: Animated.SharedValue<number>;\n renderHeader: (props: CollapsibleHeaderProps) => ReactNode;\n children: ReactNode;\n containerStyle?: StyleProp<ViewStyle>;\n collapsedBackgroundColor?: string;\n expandedBackgroundColor?: string;\n useDynamicLayout?: boolean;\n};\n\nlet key = 0;\nexport default function CollapsibleView({\n initialState = 'collapsed',\n collapseState = useSharedValue(0),\n renderHeader,\n children,\n containerStyle,\n collapsedBackgroundColor,\n expandedBackgroundColor,\n}: Props) {\n const actualHeight = useSharedValue(11110);\n const contentKey = useMemo(() => `collapsible-view-${key++}`, []);\n\n useEffect(() => {\n const newValue = initialState === 'collapsed' ? 0 : 1;\n if (newValue === collapseState.value) {\n return;\n }\n collapseState.value = newValue;\n }, [initialState]);\n\n const onToggle = useCallback(() => {\n collapseState.value = withSpring(collapseState.value === 0 ? 1 : 0, {\n overshootClamping: true,\n });\n }, []);\n\n const handleLayout = useCallback((event: LayoutChangeEvent) => {\n if (event.nativeEvent.layout.height > 0) {\n actualHeight.value = event.nativeEvent.layout.height;\n }\n }, []);\n\n const wrapperStyle = useAnimatedStyle(\n () => ({\n height: withSpring(collapseState.value === 1 ? actualHeight.value : 0, {\n damping: 5,\n stiffness: 130,\n overshootClamping: true,\n }),\n }),\n [actualHeight, contentKey]\n );\n\n const contentHeight = useAnimatedStyle(\n () => ({\n height: actualHeight.value > 0 ? actualHeight.value : undefined,\n }),\n [actualHeight, contentKey]\n );\n\n // @ts-ignore\n const containerAnimatedStyle = useAnimatedStyle(() => {\n if (collapsedBackgroundColor && expandedBackgroundColor) {\n return {\n backgroundColor: interpolateColor(\n collapseState.value,\n [0, 1],\n [collapsedBackgroundColor, expandedBackgroundColor]\n ),\n };\n }\n return {};\n }, []);\n\n const headerProps = useMemo(\n () => ({ onToggle, collapsed: collapseState }),\n [onToggle, collapseState]\n );\n\n return (\n <Animated.View\n style={[containerStyle, containerAnimatedStyle]}\n pointerEvents=\"box-none\"\n >\n <View pointerEvents=\"box-none\">{renderHeader(headerProps)}</View>\n <Animated.View\n style={[styles.wrapper, wrapperStyle]}\n pointerEvents=\"box-none\"\n >\n <Animated.View\n style={[styles.content, contentHeight]}\n pointerEvents=\"box-none\"\n >\n <View\n key={contentKey}\n onLayout={handleLayout}\n pointerEvents=\"box-none\"\n >\n {children}\n </View>\n </Animated.View>\n </Animated.View>\n </Animated.View>\n );\n}\n\nexport function CollapsibleHeaderText({\n title,\n collapsed,\n onToggle,\n style,\n titleStyle,\n icon,\n iconInitialAngle = 0,\n children,\n}: {\n title: string;\n style?: StyleProp<ViewStyle>;\n titleStyle?: StyleProp<TextStyle>;\n icon?: ReactNode;\n iconInitialAngle?: number;\n children?: ReactNode;\n} & CollapsibleHeaderProps) {\n const iconStyle = useAnimatedStyle(() => {\n const rotate = interpolate(\n collapsed.value,\n [0, 1],\n [iconInitialAngle, 180]\n );\n return {\n transform: [\n {\n rotate: `${rotate}deg`,\n },\n ],\n };\n }, [iconInitialAngle]);\n\n return (\n <TouchableOpacity activeOpacity={0.9} onPress={onToggle} style={[style]}>\n <View style={styles.headerContainer}>\n <Text style={[styles.headerTitle, titleStyle]}>{title}</Text>\n {icon && <Animated.View style={iconStyle}>{icon}</Animated.View>}\n </View>\n {children}\n </TouchableOpacity>\n );\n}\n\nconst styles = StyleSheet.create({\n wrapper: {\n overflow: 'hidden',\n },\n content: {},\n headerContainer: {\n flexDirection: 'row',\n },\n headerTitle: {\n flex: 1,\n },\n});\n"]}
1
+ {"version":3,"sources":["CollapsibleView.tsx"],"names":["key","CollapsibleView","initialState","collapseState","renderHeader","children","containerStyle","collapsedBackgroundColor","expandedBackgroundColor","actualHeight","contentKey","newValue","value","onToggle","overshootClamping","handleLayout","event","nativeEvent","layout","height","wrapperStyle","damping","stiffness","contentHeight","undefined","containerAnimatedStyle","backgroundColor","headerProps","collapsed","styles","wrapper","content","CollapsibleHeaderText","title","style","titleStyle","icon","iconInitialAngle","iconStyle","rotate","transform","headerContainer","headerTitle","StyleSheet","create","overflow","flexDirection","alignItems","flex"],"mappings":"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","sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable react-hooks/rules-of-hooks */\nimport React, { ReactNode, useCallback, useEffect, useMemo } from 'react';\nimport {\n LayoutChangeEvent,\n StyleProp,\n StyleSheet,\n Text,\n TextStyle,\n TouchableOpacity,\n View,\n ViewStyle,\n} from 'react-native';\nimport Animated, {\n useAnimatedStyle,\n useSharedValue,\n withSpring,\n interpolateColor,\n interpolate,\n} from 'react-native-reanimated';\n\nexport type CollapsibleHeaderProps = {\n onToggle: () => void;\n collapsed: Animated.SharedValue<number>;\n};\n\ntype Props = {\n initialState?: 'collapsed' | 'expanded';\n collapseState?: Animated.SharedValue<number>;\n renderHeader: (props: CollapsibleHeaderProps) => ReactNode;\n children: ReactNode;\n containerStyle?: StyleProp<ViewStyle>;\n collapsedBackgroundColor?: string;\n expandedBackgroundColor?: string;\n useDynamicLayout?: boolean;\n};\n\nlet key = 0;\nexport default function CollapsibleView({\n initialState = 'collapsed',\n collapseState = useSharedValue(0),\n renderHeader,\n children,\n containerStyle,\n collapsedBackgroundColor,\n expandedBackgroundColor,\n}: Props) {\n const actualHeight = useSharedValue(11110);\n const contentKey = useMemo(() => `collapsible-view-${key++}`, []);\n\n useEffect(() => {\n const newValue = initialState === 'collapsed' ? 0 : 1;\n if (newValue === collapseState.value) {\n return;\n }\n collapseState.value = newValue;\n }, [initialState]);\n\n const onToggle = useCallback(() => {\n collapseState.value = withSpring(collapseState.value === 0 ? 1 : 0, {\n overshootClamping: true,\n });\n }, []);\n\n const handleLayout = useCallback((event: LayoutChangeEvent) => {\n if (event.nativeEvent.layout.height >= 0) {\n actualHeight.value = event.nativeEvent.layout.height;\n }\n }, []);\n\n const wrapperStyle = useAnimatedStyle(\n () => ({\n height: withSpring(collapseState.value === 1 ? actualHeight.value : 0, {\n damping: 5,\n stiffness: 130,\n overshootClamping: true,\n }),\n }),\n [actualHeight, contentKey]\n );\n\n const contentHeight = useAnimatedStyle(\n () => ({\n height: actualHeight.value > 0 ? actualHeight.value : undefined,\n }),\n [actualHeight, contentKey]\n );\n\n // @ts-ignore\n const containerAnimatedStyle = useAnimatedStyle(() => {\n if (collapsedBackgroundColor && expandedBackgroundColor) {\n return {\n backgroundColor: interpolateColor(\n collapseState.value,\n [0, 1],\n [collapsedBackgroundColor, expandedBackgroundColor]\n ),\n };\n }\n return {};\n }, []);\n\n const headerProps = useMemo(\n () => ({ onToggle, collapsed: collapseState }),\n [onToggle, collapseState]\n );\n\n return (\n <Animated.View\n style={[containerStyle, containerAnimatedStyle]}\n pointerEvents=\"box-none\"\n >\n <View pointerEvents=\"box-none\">{renderHeader(headerProps)}</View>\n <Animated.View\n style={[styles.wrapper, wrapperStyle]}\n pointerEvents=\"box-none\"\n >\n <Animated.View\n style={[styles.content, contentHeight]}\n pointerEvents=\"box-none\"\n >\n <View\n key={contentKey}\n onLayout={handleLayout}\n pointerEvents=\"box-none\"\n >\n {children}\n </View>\n </Animated.View>\n </Animated.View>\n </Animated.View>\n );\n}\n\nexport function CollapsibleHeaderText({\n title,\n collapsed,\n onToggle,\n style,\n titleStyle,\n icon,\n iconInitialAngle = 0,\n children,\n}: {\n title: string | Element;\n style?: StyleProp<ViewStyle>;\n titleStyle?: StyleProp<TextStyle>;\n icon?: ReactNode;\n iconInitialAngle?: number;\n children?: ReactNode;\n} & CollapsibleHeaderProps) {\n const iconStyle = useAnimatedStyle(() => {\n const rotate = interpolate(\n collapsed.value,\n [0, 1],\n [iconInitialAngle, 180]\n );\n return {\n transform: [\n {\n rotate: `${rotate}deg`,\n },\n ],\n };\n }, [iconInitialAngle]);\n\n return (\n <TouchableOpacity activeOpacity={0.9} onPress={onToggle} style={style}>\n <View style={styles.headerContainer}>\n <Text style={[styles.headerTitle, titleStyle]}>{title}</Text>\n {icon && <Animated.View style={iconStyle}>{icon}</Animated.View>}\n </View>\n {children}\n </TouchableOpacity>\n );\n}\n\nconst styles = StyleSheet.create({\n wrapper: {\n overflow: 'hidden',\n },\n content: {},\n headerContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n headerTitle: {\n flex: 1,\n },\n});\n"]}
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = CollapsibleHeaderContainer;
7
7
 
8
- var _useInternalCollapsibleContext = require("../hooks/useInternalCollapsibleContext");
8
+ var _useInternalCollapsibleContext = _interopRequireDefault(require("../../hooks/useInternalCollapsibleContext"));
9
9
 
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
 
@@ -13,14 +13,14 @@ var _reactNative = require("react-native");
13
13
 
14
14
  var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
15
15
 
16
- var _useCollapsibleContext = _interopRequireDefault(require("../hooks/useCollapsibleContext"));
17
-
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
+ var _useCollapsibleContext = _interopRequireDefault(require("../../hooks/useCollapsibleContext"));
19
17
 
20
18
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
19
 
22
20
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
21
 
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+
24
24
  /* eslint-disable react-hooks/exhaustive-deps */
25
25
  let key = 0;
26
26
 
@@ -34,7 +34,7 @@ function CollapsibleHeaderContainer({
34
34
  } = (0, _useCollapsibleContext.default)();
35
35
  const {
36
36
  handleHeaderContainerLayout
37
- } = (0, _useInternalCollapsibleContext.useInternalCollapsibleContext)();
37
+ } = (0, _useInternalCollapsibleContext.default)();
38
38
  const headerHeight = (0, _reactNativeReanimated.useSharedValue)(0);
39
39
  (0, _react.useEffect)(() => {
40
40
  return () => handleHeaderContainerLayout(contentKey, undefined);
@@ -67,19 +67,20 @@ function CollapsibleHeaderContainer({
67
67
  };
68
68
  }, []);
69
69
  return /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
70
- style: [styles.container, headerStyle, internalStyle],
70
+ style: [headerStyle, internalStyle],
71
71
  pointerEvents: "box-none"
72
72
  }, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
73
73
  key: contentKey,
74
74
  onLayout: handleHeaderLayout,
75
75
  pointerEvents: "box-none",
76
- style: containerStyle
76
+ style: [styles.container, containerStyle]
77
77
  }, children));
78
78
  }
79
79
 
80
80
  const styles = _reactNative.StyleSheet.create({
81
81
  container: {
82
- backgroundColor: 'white'
82
+ backgroundColor: 'white',
83
+ marginTop: _reactNative.Platform.OS === 'android' ? -1 : 0
83
84
  }
84
85
  });
85
86
  //# sourceMappingURL=CollapsibleHeaderContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["CollapsibleHeaderContainer.tsx"],"names":["key","CollapsibleHeaderContainer","children","containerStyle","contentKey","scrollY","handleHeaderContainerLayout","headerHeight","undefined","handleHeaderLayout","nativeEvent","layout","height","value","duration","headerTranslate","Animated","Extrapolate","CLAMP","headerStyle","transform","translateY","minHeight","internalStyle","zIndex","styles","container","StyleSheet","create","backgroundColor","marginTop","Platform","OS"],"mappings":";;;;;;;AACA;;AACA;;AACA;;AAQA;;AAOA;;;;;;;;AAlBA;AAyBA,IAAIA,GAAG,GAAG,CAAV;;AAEe,SAASC,0BAAT,CAAoC;AACjDC,EAAAA,QADiD;AAEjDC,EAAAA;AAFiD,CAApC,EAGL;AACR,QAAMC,UAAU,GAAG,oBAAQ,MAAO,sBAAqBJ,GAAG,EAAG,EAA1C,EAA6C,EAA7C,CAAnB;AACA,QAAM;AAAEK,IAAAA;AAAF,MAAc,qCAApB;AACA,QAAM;AAAEC,IAAAA;AAAF,MAAkC,6CAAxC;AACA,QAAMC,YAAY,GAAG,2CAAe,CAAf,CAArB;AAEA,wBAAU,MAAM;AACd,WAAO,MAAMD,2BAA2B,CAACF,UAAD,EAAaI,SAAb,CAAxC;AACD,GAFD,EAEG,EAFH;AAIA,QAAMC,kBAAkB,GAAG,wBACzB,CAAC;AACCC,IAAAA,WAAW,EAAE;AACXC,MAAAA,MAAM,EAAE;AAAEC,QAAAA;AAAF;AADG;AADd,GAAD,KAIyB;AACvBL,IAAAA,YAAY,CAACM,KAAb,GAAqB,uCAAWD,MAAX,EAAmB;AACtCE,MAAAA,QAAQ,EAAE;AAD4B,KAAnB,CAArB;AAGAR,IAAAA,2BAA2B,CAACF,UAAD,EAAaQ,MAAb,CAA3B;AACD,GAVwB,EAWzB,CAACR,UAAD,EAAaE,2BAAb,CAXyB,CAA3B;AAcA,QAAMS,eAAe,GAAG,4CACtB,MACE,wCACEV,OAAO,CAACQ,KADV,EAEE;AACA,GAAC,CAAC,GAAF,EAAO,CAAP,EAAU,MAAV,CAHF,EAIE,CAAC,GAAD,EAAM,CAAN,EAAS,CAAC,MAAV,CAJF,EAKEG,+BAASC,WAAT,CAAqBC,KALvB,CAFoB,EAStB,EATsB,CAAxB;AAYA,QAAMC,WAAW,GAAG,6CAAiB,MAAM;AACzC,WAAO;AACLC,MAAAA,SAAS,EAAE,CAAC;AAAEC,QAAAA,UAAU,EAAEN,eAAe,CAACF;AAA9B,OAAD,CADN;AAELS,MAAAA,SAAS,EAAEf,YAAY,CAACM;AAFnB,KAAP;AAID,GALmB,EAKjB,CAACN,YAAD,EAAeQ,eAAf,CALiB,CAApB;AAOA,QAAMQ,aAAa,GAAG,oBAAQ,MAAM;AAClC,WAAO;AACLC,MAAAA,MAAM,EAAE,SAASxB;AADZ,KAAP;AAGD,GAJqB,EAInB,EAJmB,CAAtB;AAMA,sBACE,6BAAC,8BAAD,CAAU,IAAV;AACE,IAAA,KAAK,EAAE,CAACmB,WAAD,EAAcI,aAAd,CADT;AAEE,IAAA,aAAa,EAAC;AAFhB,kBAIE,6BAAC,iBAAD;AACE,IAAA,GAAG,EAAEnB,UADP;AAEE,IAAA,QAAQ,EAAEK,kBAFZ;AAGE,IAAA,aAAa,EAAC,UAHhB;AAIE,IAAA,KAAK,EAAE,CAACgB,MAAM,CAACC,SAAR,EAAmBvB,cAAnB;AAJT,KAMGD,QANH,CAJF,CADF;AAeD;;AAED,MAAMuB,MAAM,GAAGE,wBAAWC,MAAX,CAAkB;AAC/BF,EAAAA,SAAS,EAAE;AACTG,IAAAA,eAAe,EAAE,OADR;AAETC,IAAAA,SAAS,EAAEC,sBAASC,EAAT,KAAgB,SAAhB,GAA4B,CAAC,CAA7B,GAAiC;AAFnC;AADoB,CAAlB,CAAf","sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport useInternalCollapsibleContext from '../../hooks/useInternalCollapsibleContext';\nimport React, { ReactNode, useCallback, useEffect, useMemo } from 'react';\nimport {\n LayoutChangeEvent,\n Platform,\n StyleProp,\n StyleSheet,\n View,\n ViewStyle,\n} from 'react-native';\nimport Animated, {\n interpolate,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withTiming,\n} from 'react-native-reanimated';\nimport useCollapsibleContext from '../../hooks/useCollapsibleContext';\n\ntype Props = {\n children: ReactNode;\n containerStyle?: StyleProp<ViewStyle>;\n};\n\nlet key = 0;\n\nexport default function CollapsibleHeaderContainer({\n children,\n containerStyle,\n}: Props) {\n const contentKey = useMemo(() => `collapsible-header-${key++}`, []);\n const { scrollY } = useCollapsibleContext();\n const { handleHeaderContainerLayout } = useInternalCollapsibleContext();\n const headerHeight = useSharedValue(0);\n\n useEffect(() => {\n return () => handleHeaderContainerLayout(contentKey, undefined);\n }, []);\n\n const handleHeaderLayout = useCallback(\n ({\n nativeEvent: {\n layout: { height },\n },\n }: LayoutChangeEvent) => {\n headerHeight.value = withTiming(height, {\n duration: 200,\n });\n handleHeaderContainerLayout(contentKey, height);\n },\n [contentKey, handleHeaderContainerLayout]\n );\n\n const headerTranslate = useDerivedValue(\n () =>\n interpolate(\n scrollY.value,\n // FIXME: can improve by geting maxY value of header and sticky views\n [-250, 0, 100000],\n [250, 0, -100000],\n Animated.Extrapolate.CLAMP\n ),\n []\n );\n\n const headerStyle = useAnimatedStyle(() => {\n return {\n transform: [{ translateY: headerTranslate.value }],\n minHeight: headerHeight.value,\n };\n }, [headerHeight, headerTranslate]);\n\n const internalStyle = useMemo(() => {\n return {\n zIndex: 100000 - key,\n };\n }, []);\n\n return (\n <Animated.View\n style={[headerStyle, internalStyle]}\n pointerEvents=\"box-none\"\n >\n <View\n key={contentKey}\n onLayout={handleHeaderLayout}\n pointerEvents=\"box-none\"\n style={[styles.container, containerStyle]}\n >\n {children}\n </View>\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n backgroundColor: 'white',\n marginTop: Platform.OS === 'android' ? -1 : 0,\n },\n});\n"]}
@@ -5,13 +5,13 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = StickyView;
7
7
 
8
- var _useInternalCollapsibleContext = require("../hooks/useInternalCollapsibleContext");
9
-
10
8
  var _react = _interopRequireWildcard(require("react"));
11
9
 
12
10
  var _reactNative = require("react-native");
13
11
 
14
- var _useCollapsibleContext = _interopRequireDefault(require("../hooks/useCollapsibleContext"));
12
+ var _useCollapsibleContext = _interopRequireDefault(require("../../hooks/useCollapsibleContext"));
13
+
14
+ var _useInternalCollapsibleContext = _interopRequireDefault(require("../../hooks/useInternalCollapsibleContext"));
15
15
 
16
16
  var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
17
17
 
@@ -31,47 +31,34 @@ function StickyView({
31
31
  const key = (0, _react.useMemo)(() => `sticky_${stickyKey++}`, []);
32
32
  const viewRef = (0, _react.useRef)(null);
33
33
  const {
34
- containerRef,
35
34
  handleStickyViewLayout,
36
- stickyViewTops
37
- } = (0, _useInternalCollapsibleContext.useInternalCollapsibleContext)();
35
+ stickyViewTops,
36
+ stickyViewPositions
37
+ } = (0, _useInternalCollapsibleContext.default)();
38
38
  const {
39
39
  scrollY
40
40
  } = (0, _useCollapsibleContext.default)();
41
- const layoutValues = (0, _reactNativeReanimated.useSharedValue)({
42
- top: 0,
43
- height: 0
44
- });
45
41
  (0, _react.useEffect)(() => {
46
42
  return () => handleStickyViewLayout(key, undefined);
47
43
  }, []);
48
44
  const handleLayout = (0, _react.useCallback)(() => {
49
- if (viewRef.current && containerRef.current) {
50
- viewRef.current.measureLayout( // @ts-ignore
51
- containerRef.current, (left, top, width, height) => {
52
- handleStickyViewLayout(key, {
53
- left,
54
- top,
55
- width,
56
- height
57
- });
58
- layoutValues.value = {
59
- top,
60
- height
61
- };
62
- }, () => {});
63
- }
64
- }, [handleStickyViewLayout]);
65
- const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
45
+ handleStickyViewLayout(key, viewRef);
46
+ }, [handleStickyViewLayout, key]);
47
+ const translateY = (0, _reactNativeReanimated.useDerivedValue)(() => {
66
48
  const top = stickyViewTops.value[key] || 0;
67
- const inputMid = layoutValues.value.top - top;
68
- const translateY = (0, _reactNativeReanimated.interpolate)(scrollY.value, [0, inputMid, inputMid + 100000], [0, 0, 100000], _reactNativeReanimated.Extrapolate.CLAMP);
49
+ const layoutValues = stickyViewPositions.value[key] || {
50
+ top: 0
51
+ };
52
+ const inputMid = layoutValues.top - top;
53
+ return (0, _reactNativeReanimated.interpolate)(scrollY.value, [0, inputMid, inputMid + 100000], [0, 0, 100000], _reactNativeReanimated.Extrapolate.CLAMP);
54
+ }, []);
55
+ const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
69
56
  return {
70
57
  transform: [{
71
- translateY: translateY
58
+ translateY: translateY.value
72
59
  }]
73
60
  };
74
- }, [stickyViewTops, layoutValues, scrollY]);
61
+ }, []);
75
62
  return /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
76
63
  key: key // @ts-ignore
77
64
  ,
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["StickyView.tsx"],"names":["stickyKey","StickyView","children","style","key","viewRef","handleStickyViewLayout","stickyViewTops","stickyViewPositions","scrollY","undefined","handleLayout","translateY","top","value","layoutValues","inputMid","Extrapolate","CLAMP","animatedStyle","transform","styles","container","StyleSheet","create","backgroundColor","zIndex"],"mappings":";;;;;;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;AALA;AAiBA,IAAIA,SAAS,GAAG,CAAhB;;AAEe,SAASC,UAAT,CAAoB;AAAEC,EAAAA,QAAF;AAAYC,EAAAA;AAAZ,CAApB,EAAgD;AAC7D,QAAMC,GAAG,GAAG,oBAAQ,MAAO,UAASJ,SAAS,EAAG,EAApC,EAAuC,EAAvC,CAAZ;AACA,QAAMK,OAAO,GAAG,mBAAa,IAAb,CAAhB;AACA,QAAM;AAAEC,IAAAA,sBAAF;AAA0BC,IAAAA,cAA1B;AAA0CC,IAAAA;AAA1C,MACJ,6CADF;AAEA,QAAM;AAAEC,IAAAA;AAAF,MAAc,qCAApB;AAEA,wBAAU,MAAM;AACd,WAAO,MAAMH,sBAAsB,CAACF,GAAD,EAAMM,SAAN,CAAnC;AACD,GAFD,EAEG,EAFH;AAIA,QAAMC,YAAY,GAAG,wBAAY,MAAM;AACrCL,IAAAA,sBAAsB,CAACF,GAAD,EAAMC,OAAN,CAAtB;AACD,GAFoB,EAElB,CAACC,sBAAD,EAAyBF,GAAzB,CAFkB,CAArB;AAIA,QAAMQ,UAAU,GAAG,4CAAgB,MAAM;AACvC,UAAMC,GAAG,GAAGN,cAAc,CAACO,KAAf,CAAqBV,GAArB,KAA6B,CAAzC;AACA,UAAMW,YAAY,GAAGP,mBAAmB,CAACM,KAApB,CAA0BV,GAA1B,KAAkC;AAAES,MAAAA,GAAG,EAAE;AAAP,KAAvD;AACA,UAAMG,QAAQ,GAAGD,YAAY,CAACF,GAAb,GAAmBA,GAApC;AACA,WAAO,wCACLJ,OAAO,CAACK,KADH,EAEL,CAAC,CAAD,EAAIE,QAAJ,EAAcA,QAAQ,GAAG,MAAzB,CAFK,EAGL,CAAC,CAAD,EAAI,CAAJ,EAAO,MAAP,CAHK,EAILC,mCAAYC,KAJP,CAAP;AAMD,GAVkB,EAUhB,EAVgB,CAAnB;AAYA,QAAMC,aAAa,GAAG,6CAAiB,MAAM;AAC3C,WAAO;AACLC,MAAAA,SAAS,EAAE,CACT;AACER,QAAAA,UAAU,EAAEA,UAAU,CAACE;AADzB,OADS;AADN,KAAP;AAOD,GARqB,EAQnB,EARmB,CAAtB;AAUA,sBACE,6BAAC,8BAAD,CAAU,IAAV;AACE,IAAA,GAAG,EAAEV,GADP,CAEE;AAFF;AAGE,IAAA,GAAG,EAAEC,OAHP;AAIE,IAAA,QAAQ,EAAEM,YAJZ;AAKE,IAAA,KAAK,EAAE,CAACU,MAAM,CAACC,SAAR,EAAmBH,aAAnB,EAAkChB,KAAlC,CALT;AAME,IAAA,aAAa,EAAC;AANhB,KAQGD,QARH,CADF;AAYD;;AAED,MAAMmB,MAAM,GAAGE,wBAAWC,MAAX,CAAkB;AAC/BF,EAAAA,SAAS,EAAE;AACTG,IAAAA,eAAe,EAAE,OADR;AAETC,IAAAA,MAAM,EAAE;AAFC;AADoB,CAAlB,CAAf","sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { StyleProp, StyleSheet, View, ViewStyle } from 'react-native';\nimport useCollapsibleContext from '../../hooks/useCollapsibleContext';\nimport useInternalCollapsibleContext from '../../hooks/useInternalCollapsibleContext';\nimport Animated, {\n Extrapolate,\n interpolate,\n useAnimatedStyle,\n useDerivedValue,\n} from 'react-native-reanimated';\n\ntype Props = {\n style?: StyleProp<ViewStyle>;\n children: Element;\n};\n\nlet stickyKey = 0;\n\nexport default function StickyView({ children, style }: Props) {\n const key = useMemo(() => `sticky_${stickyKey++}`, []);\n const viewRef = useRef<View>(null);\n const { handleStickyViewLayout, stickyViewTops, stickyViewPositions } =\n useInternalCollapsibleContext();\n const { scrollY } = useCollapsibleContext();\n\n useEffect(() => {\n return () => handleStickyViewLayout(key, undefined);\n }, []);\n\n const handleLayout = useCallback(() => {\n handleStickyViewLayout(key, viewRef);\n }, [handleStickyViewLayout, key]);\n\n const translateY = useDerivedValue(() => {\n const top = stickyViewTops.value[key] || 0;\n const layoutValues = stickyViewPositions.value[key] || { top: 0 };\n const inputMid = layoutValues.top - top;\n return interpolate(\n scrollY.value,\n [0, inputMid, inputMid + 100000],\n [0, 0, 100000],\n Extrapolate.CLAMP\n );\n }, []);\n\n const animatedStyle = useAnimatedStyle(() => {\n return {\n transform: [\n {\n translateY: translateY.value,\n },\n ],\n };\n }, []);\n\n return (\n <Animated.View\n key={key}\n // @ts-ignore\n ref={viewRef}\n onLayout={handleLayout}\n style={[styles.container, animatedStyle, style]}\n pointerEvents=\"box-none\"\n >\n {children}\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n backgroundColor: 'white',\n zIndex: 10,\n },\n});\n"]}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = PullToRefreshContainer;
7
+
8
+ var _reactNativeGestureHandler = require("react-native-gesture-handler");
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
13
+
14
+ var _usePullToRefreshContext = _interopRequireDefault(require("./usePullToRefreshContext"));
15
+
16
+ var _reactNative = require("react-native");
17
+
18
+ var _utils = require("./utils");
19
+
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+
24
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
+
26
+ function PullToRefreshContainer({
27
+ children,
28
+ scrollY
29
+ }) {
30
+ const scrollRef = (0, _react.useRef)();
31
+ const panRef = (0, _react.useRef)();
32
+ const {
33
+ refreshValue,
34
+ internalRefreshing,
35
+ internalHeight
36
+ } = (0, _usePullToRefreshContext.default)();
37
+ const gestureHandler = (0, _reactNativeReanimated.useAnimatedGestureHandler)({
38
+ onStart: (_, ctx) => {
39
+ ctx.startY = internalRefreshing.value ? refreshValue.value : 0;
40
+ },
41
+ onActive: (event, ctx) => {
42
+ if (scrollY.value <= 1) {
43
+ const tranY = event.translationY + ctx.startY;
44
+ const clampedValue = (0, _utils.rubberClamp)(tranY, 0, internalHeight.value);
45
+ refreshValue.value = clampedValue;
46
+
47
+ if (clampedValue > internalHeight.value) {
48
+ internalRefreshing.value = true;
49
+ }
50
+ } else {
51
+ refreshValue.value = 0;
52
+ }
53
+ },
54
+ onEnd: () => {
55
+ if (refreshValue.value > 0) {
56
+ const value = internalRefreshing.value ? internalHeight.value : 0;
57
+ refreshValue.value = (0, _reactNativeReanimated.withTiming)(value);
58
+ }
59
+ }
60
+ });
61
+ return /*#__PURE__*/_react.default.createElement(_reactNativeGestureHandler.PanGestureHandler, {
62
+ ref: panRef,
63
+ simultaneousHandlers: scrollRef,
64
+ onGestureEvent: gestureHandler,
65
+ shouldCancelWhenOutside: false,
66
+ enableTrackpadTwoFingerGesture: true,
67
+ maxPointers: 1
68
+ }, /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
69
+ style: _reactNative.StyleSheet.absoluteFill
70
+ }, /*#__PURE__*/_react.default.createElement(_reactNativeGestureHandler.NativeViewGestureHandler, {
71
+ ref: scrollRef,
72
+ simultaneousHandlers: panRef
73
+ }, children)));
74
+ }
75
+ //# sourceMappingURL=PullToRefreshContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["PullToRefreshContainer.tsx"],"names":["PullToRefreshContainer","children","scrollY","scrollRef","panRef","refreshValue","internalRefreshing","internalHeight","gestureHandler","onStart","_","ctx","startY","value","onActive","event","tranY","translationY","clampedValue","onEnd","StyleSheet","absoluteFill"],"mappings":";;;;;;;AAAA;;AAIA;;AACA;;AAIA;;AACA;;AACA;;;;;;;;AAOe,SAASA,sBAAT,CAAgC;AAAEC,EAAAA,QAAF;AAAYC,EAAAA;AAAZ,CAAhC,EAA8D;AAC3E,QAAMC,SAAS,GAAG,oBAAlB;AACA,QAAMC,MAAM,GAAG,oBAAf;AACA,QAAM;AAAEC,IAAAA,YAAF;AAAgBC,IAAAA,kBAAhB;AAAoCC,IAAAA;AAApC,MACJ,uCADF;AAGA,QAAMC,cAAc,GAAG,sDAA0B;AAC/CC,IAAAA,OAAO,EAAE,CAACC,CAAD,EAAIC,GAAJ,KAAiB;AACxBA,MAAAA,GAAG,CAACC,MAAJ,GAAaN,kBAAkB,CAACO,KAAnB,GAA2BR,YAAY,CAACQ,KAAxC,GAAgD,CAA7D;AACD,KAH8C;AAI/CC,IAAAA,QAAQ,EAAE,CAACC,KAAD,EAAQJ,GAAR,KAAqB;AAC7B,UAAIT,OAAO,CAACW,KAAR,IAAiB,CAArB,EAAwB;AACtB,cAAMG,KAAK,GAAGD,KAAK,CAACE,YAAN,GAAqBN,GAAG,CAACC,MAAvC;AACA,cAAMM,YAAY,GAAG,wBAAYF,KAAZ,EAAmB,CAAnB,EAAsBT,cAAc,CAACM,KAArC,CAArB;AACAR,QAAAA,YAAY,CAACQ,KAAb,GAAqBK,YAArB;;AACA,YAAIA,YAAY,GAAGX,cAAc,CAACM,KAAlC,EAAyC;AACvCP,UAAAA,kBAAkB,CAACO,KAAnB,GAA2B,IAA3B;AACD;AACF,OAPD,MAOO;AACLR,QAAAA,YAAY,CAACQ,KAAb,GAAqB,CAArB;AACD;AACF,KAf8C;AAgB/CM,IAAAA,KAAK,EAAE,MAAM;AACX,UAAId,YAAY,CAACQ,KAAb,GAAqB,CAAzB,EAA4B;AAC1B,cAAMA,KAAK,GAAGP,kBAAkB,CAACO,KAAnB,GAA2BN,cAAc,CAACM,KAA1C,GAAkD,CAAhE;AACAR,QAAAA,YAAY,CAACQ,KAAb,GAAqB,uCAAWA,KAAX,CAArB;AACD;AACF;AArB8C,GAA1B,CAAvB;AAwBA,sBACE,6BAAC,4CAAD;AACE,IAAA,GAAG,EAAET,MADP;AAEE,IAAA,oBAAoB,EAAED,SAFxB;AAGE,IAAA,cAAc,EAAEK,cAHlB;AAIE,IAAA,uBAAuB,EAAE,KAJ3B;AAKE,IAAA,8BAA8B,MALhC;AAME,IAAA,WAAW,EAAE;AANf,kBAQE,6BAAC,8BAAD,CAAU,IAAV;AAAe,IAAA,KAAK,EAAEY,wBAAWC;AAAjC,kBACE,6BAAC,mDAAD;AAA0B,IAAA,GAAG,EAAElB,SAA/B;AAA0C,IAAA,oBAAoB,EAAEC;AAAhE,KACGH,QADH,CADF,CARF,CADF;AAgBD","sourcesContent":["import {\n NativeViewGestureHandler,\n PanGestureHandler,\n} from 'react-native-gesture-handler';\nimport React, { useRef } from 'react';\nimport Animated, {\n useAnimatedGestureHandler,\n withTiming,\n} from 'react-native-reanimated';\nimport usePullToRefreshContext from './usePullToRefreshContext';\nimport { StyleSheet } from 'react-native';\nimport { rubberClamp } from './utils';\n\ntype Props = {\n children: React.ReactNode;\n scrollY: Animated.SharedValue<number>;\n};\n\nexport default function PullToRefreshContainer({ children, scrollY }: Props) {\n const scrollRef = useRef();\n const panRef = useRef();\n const { refreshValue, internalRefreshing, internalHeight } =\n usePullToRefreshContext();\n\n const gestureHandler = useAnimatedGestureHandler({\n onStart: (_, ctx: any) => {\n ctx.startY = internalRefreshing.value ? refreshValue.value : 0;\n },\n onActive: (event, ctx: any) => {\n if (scrollY.value <= 1) {\n const tranY = event.translationY + ctx.startY;\n const clampedValue = rubberClamp(tranY, 0, internalHeight.value);\n refreshValue.value = clampedValue;\n if (clampedValue > internalHeight.value) {\n internalRefreshing.value = true;\n }\n } else {\n refreshValue.value = 0;\n }\n },\n onEnd: () => {\n if (refreshValue.value > 0) {\n const value = internalRefreshing.value ? internalHeight.value : 0;\n refreshValue.value = withTiming(value);\n }\n },\n });\n\n return (\n <PanGestureHandler\n ref={panRef}\n simultaneousHandlers={scrollRef}\n onGestureEvent={gestureHandler}\n shouldCancelWhenOutside={false}\n enableTrackpadTwoFingerGesture\n maxPointers={1}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <NativeViewGestureHandler ref={scrollRef} simultaneousHandlers={panRef}>\n {children}\n </NativeViewGestureHandler>\n </Animated.View>\n </PanGestureHandler>\n );\n}\n"]}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = PullToRefreshProvider;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _reactNativeReanimated = require("react-native-reanimated");
11
+
12
+ var _usePullToRefreshContext = require("./usePullToRefreshContext");
13
+
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
+
18
+ function PullToRefreshProvider({
19
+ children
20
+ }) {
21
+ const refreshValue = (0, _reactNativeReanimated.useSharedValue)(0);
22
+ const internalRefreshing = (0, _reactNativeReanimated.useSharedValue)(false);
23
+ const internalHeight = (0, _reactNativeReanimated.useSharedValue)(0);
24
+ const context = (0, _react.useMemo)(() => {
25
+ return {
26
+ refreshValue: refreshValue,
27
+ internalRefreshing,
28
+ internalHeight
29
+ };
30
+ }, [refreshValue, internalRefreshing, internalHeight]);
31
+ return /*#__PURE__*/_react.default.createElement(_usePullToRefreshContext.PullToRefreshContext.Provider, {
32
+ value: context
33
+ }, children);
34
+ }
35
+ //# sourceMappingURL=PullToRefreshProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["PullToRefreshProvider.tsx"],"names":["PullToRefreshProvider","children","refreshValue","internalRefreshing","internalHeight","context"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;;;AAMe,SAASA,qBAAT,CAA+B;AAAEC,EAAAA;AAAF,CAA/B,EAAoD;AACjE,QAAMC,YAAY,GAAG,2CAAe,CAAf,CAArB;AACA,QAAMC,kBAAkB,GAAG,2CAAe,KAAf,CAA3B;AACA,QAAMC,cAAc,GAAG,2CAAe,CAAf,CAAvB;AAEA,QAAMC,OAAO,GAAG,oBAAQ,MAAM;AAC5B,WAAO;AACLH,MAAAA,YAAY,EAAEA,YADT;AAELC,MAAAA,kBAFK;AAGLC,MAAAA;AAHK,KAAP;AAKD,GANe,EAMb,CAACF,YAAD,EAAeC,kBAAf,EAAmCC,cAAnC,CANa,CAAhB;AAQA,sBACE,6BAAC,6CAAD,CAAsB,QAAtB;AAA+B,IAAA,KAAK,EAAEC;AAAtC,KACGJ,QADH,CADF;AAKD","sourcesContent":["import React, { useMemo } from 'react';\nimport { useSharedValue } from 'react-native-reanimated';\nimport { PullToRefreshContext } from './usePullToRefreshContext';\n\ntype Props = {\n children: React.ReactNode;\n};\n\nexport default function PullToRefreshProvider({ children }: Props) {\n const refreshValue = useSharedValue(0);\n const internalRefreshing = useSharedValue(false);\n const internalHeight = useSharedValue(0);\n\n const context = useMemo(() => {\n return {\n refreshValue: refreshValue,\n internalRefreshing,\n internalHeight,\n };\n }, [refreshValue, internalRefreshing, internalHeight]);\n\n return (\n <PullToRefreshContext.Provider value={context}>\n {children}\n </PullToRefreshContext.Provider>\n );\n}\n"]}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = RefreshControl;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _reactNative = require("react-native");
11
+
12
+ var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
13
+
14
+ var _usePullToRefreshContext = _interopRequireDefault(require("./usePullToRefreshContext"));
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
+
20
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
+
22
+ /* eslint-disable react-hooks/exhaustive-deps */
23
+ function RefreshControl({
24
+ height = 100,
25
+ refreshing,
26
+ onRefresh,
27
+ renderAnimation
28
+ }) {
29
+ const {
30
+ refreshValue,
31
+ internalRefreshing,
32
+ internalHeight
33
+ } = (0, _usePullToRefreshContext.default)();
34
+ (0, _react.useEffect)(() => {
35
+ internalHeight.value = height;
36
+ }, [height]);
37
+ (0, _react.useEffect)(() => {
38
+ internalRefreshing.value = refreshing;
39
+ }, [refreshing]);
40
+ const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
41
+ return {
42
+ height: refreshValue.value
43
+ };
44
+ }, []);
45
+ const handleRefresh = (0, _react.useCallback)(() => {
46
+ console.log('refresh');
47
+ onRefresh();
48
+ }, [onRefresh]);
49
+ (0, _reactNativeReanimated.useAnimatedReaction)(() => internalRefreshing.value, (result, prev) => {
50
+ if (result !== prev) {
51
+ if (result) {
52
+ (0, _reactNativeReanimated.runOnJS)(handleRefresh)();
53
+ } else {
54
+ refreshValue.value = (0, _reactNativeReanimated.withTiming)(0);
55
+ }
56
+ }
57
+ });
58
+ const animatedProps = (0, _reactNativeReanimated.useAnimatedProps)(() => {
59
+ return {
60
+ progress: internalRefreshing.value ? undefined : Math.min(refreshValue.value / height, 1)
61
+ };
62
+ }, [height]);
63
+ return /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
64
+ style: [styles.container, animatedStyle]
65
+ }, renderAnimation(animatedProps));
66
+ }
67
+
68
+ const styles = _reactNative.StyleSheet.create({
69
+ container: {
70
+ overflow: 'hidden'
71
+ }
72
+ });
73
+ //# sourceMappingURL=RefreshControl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["RefreshControl.tsx"],"names":["RefreshControl","height","refreshing","onRefresh","renderAnimation","refreshValue","internalRefreshing","internalHeight","value","animatedStyle","handleRefresh","console","log","result","prev","animatedProps","progress","undefined","Math","min","styles","container","StyleSheet","create","overflow"],"mappings":";;;;;;;AACA;;AACA;;AACA;;AAOA;;;;;;;;AAVA;AAmBe,SAASA,cAAT,CAAwB;AACrCC,EAAAA,MAAM,GAAG,GAD4B;AAErCC,EAAAA,UAFqC;AAGrCC,EAAAA,SAHqC;AAIrCC,EAAAA;AAJqC,CAAxB,EAKL;AACR,QAAM;AAAEC,IAAAA,YAAF;AAAgBC,IAAAA,kBAAhB;AAAoCC,IAAAA;AAApC,MACJ,uCADF;AAGA,wBAAU,MAAM;AACdA,IAAAA,cAAc,CAACC,KAAf,GAAuBP,MAAvB;AACD,GAFD,EAEG,CAACA,MAAD,CAFH;AAIA,wBAAU,MAAM;AACdK,IAAAA,kBAAkB,CAACE,KAAnB,GAA2BN,UAA3B;AACD,GAFD,EAEG,CAACA,UAAD,CAFH;AAIA,QAAMO,aAAa,GAAG,6CAAiB,MAAM;AAC3C,WAAO;AACLR,MAAAA,MAAM,EAAEI,YAAY,CAACG;AADhB,KAAP;AAGD,GAJqB,EAInB,EAJmB,CAAtB;AAMA,QAAME,aAAa,GAAG,wBAAY,MAAM;AACtCC,IAAAA,OAAO,CAACC,GAAR,CAAY,SAAZ;AACAT,IAAAA,SAAS;AACV,GAHqB,EAGnB,CAACA,SAAD,CAHmB,CAAtB;AAKA,kDACE,MAAMG,kBAAkB,CAACE,KAD3B,EAEE,CAACK,MAAD,EAASC,IAAT,KAAkB;AAChB,QAAID,MAAM,KAAKC,IAAf,EAAqB;AACnB,UAAID,MAAJ,EAAY;AACV,4CAAQH,aAAR;AACD,OAFD,MAEO;AACLL,QAAAA,YAAY,CAACG,KAAb,GAAqB,uCAAW,CAAX,CAArB;AACD;AACF;AACF,GAVH;AAaA,QAAMO,aAAa,GAAG,6CAAiB,MAAM;AAC3C,WAAO;AACLC,MAAAA,QAAQ,EAAEV,kBAAkB,CAACE,KAAnB,GACNS,SADM,GAENC,IAAI,CAACC,GAAL,CAASd,YAAY,CAACG,KAAb,GAAqBP,MAA9B,EAAsC,CAAtC;AAHC,KAAP;AAKD,GANqB,EAMnB,CAACA,MAAD,CANmB,CAAtB;AAQA,sBACE,6BAAC,8BAAD,CAAU,IAAV;AAAe,IAAA,KAAK,EAAE,CAACmB,MAAM,CAACC,SAAR,EAAmBZ,aAAnB;AAAtB,KACGL,eAAe,CAACW,aAAD,CADlB,CADF;AAKD;;AAED,MAAMK,MAAM,GAAGE,wBAAWC,MAAX,CAAkB;AAC/BF,EAAAA,SAAS,EAAE;AACTG,IAAAA,QAAQ,EAAE;AADD;AADoB,CAAlB,CAAf","sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useCallback, useEffect } from 'react';\nimport { StyleSheet } from 'react-native';\nimport Animated, {\n runOnJS,\n useAnimatedProps,\n useAnimatedReaction,\n useAnimatedStyle,\n withTiming,\n} from 'react-native-reanimated';\nimport usePullToRefreshContext from './usePullToRefreshContext';\n\ntype Props = {\n height?: number;\n refreshing: boolean;\n onRefresh: () => void;\n renderAnimation: (animatedProps: any) => React.ReactNode;\n};\n\nexport default function RefreshControl({\n height = 100,\n refreshing,\n onRefresh,\n renderAnimation,\n}: Props) {\n const { refreshValue, internalRefreshing, internalHeight } =\n usePullToRefreshContext();\n\n useEffect(() => {\n internalHeight.value = height;\n }, [height]);\n\n useEffect(() => {\n internalRefreshing.value = refreshing;\n }, [refreshing]);\n\n const animatedStyle = useAnimatedStyle(() => {\n return {\n height: refreshValue.value,\n };\n }, []);\n\n const handleRefresh = useCallback(() => {\n console.log('refresh');\n onRefresh();\n }, [onRefresh]);\n\n useAnimatedReaction(\n () => internalRefreshing.value,\n (result, prev) => {\n if (result !== prev) {\n if (result) {\n runOnJS(handleRefresh)();\n } else {\n refreshValue.value = withTiming(0);\n }\n }\n }\n );\n\n const animatedProps = useAnimatedProps(() => {\n return {\n progress: internalRefreshing.value\n ? undefined\n : Math.min(refreshValue.value / height, 1),\n };\n }, [height]);\n\n return (\n <Animated.View style={[styles.container, animatedStyle]}>\n {renderAnimation(animatedProps)}\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n});\n"]}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = usePullToRefreshContext;
7
+ exports.PullToRefreshContext = void 0;
8
+
9
+ var _react = require("react");
10
+
11
+ // @ts-ignore
12
+ const PullToRefreshContext = /*#__PURE__*/(0, _react.createContext)({});
13
+ exports.PullToRefreshContext = PullToRefreshContext;
14
+
15
+ function usePullToRefreshContext() {
16
+ const ctx = (0, _react.useContext)(PullToRefreshContext);
17
+
18
+ if (!ctx) {
19
+ throw new Error('Component should be wrapped with withCollapsibleContext');
20
+ }
21
+
22
+ return ctx;
23
+ }
24
+ //# sourceMappingURL=usePullToRefreshContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["usePullToRefreshContext.ts"],"names":["PullToRefreshContext","usePullToRefreshContext","ctx","Error"],"mappings":";;;;;;;;AAAA;;AAGA;AACO,MAAMA,oBAAoB,gBAAG,0BAAwC,EAAxC,CAA7B;;;AAEQ,SAASC,uBAAT,GAAmC;AAChD,QAAMC,GAAG,GAAG,uBAAWF,oBAAX,CAAZ;;AACA,MAAI,CAACE,GAAL,EAAU;AACR,UAAM,IAAIC,KAAJ,CAAU,yDAAV,CAAN;AACD;;AACD,SAAOD,GAAP;AACD","sourcesContent":["import { createContext, useContext } from 'react';\nimport type { PullToRefreshContextType } from '../../types';\n\n// @ts-ignore\nexport const PullToRefreshContext = createContext<PullToRefreshContextType>({});\n\nexport default function usePullToRefreshContext() {\n const ctx = useContext(PullToRefreshContext);\n if (!ctx) {\n throw new Error('Component should be wrapped with withCollapsibleContext');\n }\n return ctx;\n}\n"]}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.clamp = clamp;
7
+ exports.rubberClamp = exports.rubberBandClamp = exports.springConfig = void 0;
8
+
9
+ const springConfig = velocity => {
10
+ 'worklet';
11
+
12
+ return {
13
+ stiffness: 1000,
14
+ damping: 500,
15
+ mass: 3,
16
+ overshootClamping: true,
17
+ restDisplacementThreshold: 0.01,
18
+ restSpeedThreshold: 0.01,
19
+ velocity
20
+ };
21
+ };
22
+
23
+ exports.springConfig = springConfig;
24
+
25
+ function clamp(value, lowerbound, upperbound) {
26
+ 'worklet';
27
+
28
+ return Math.min(Math.max(value, lowerbound), upperbound);
29
+ }
30
+ /**
31
+ * calculates rubber value
32
+ *
33
+ * @param x distance from the edge
34
+ * @param dim dimension, either width or height
35
+ * @param coeff constant value, UIScrollView uses 0.55
36
+ * @returns rubber = (1.0 – (1.0 / ((x * coeff / dim) + 1.0))) * dim
37
+ */
38
+
39
+
40
+ const rubberBandClamp = (x, dim, coeff) => {
41
+ 'worklet';
42
+
43
+ return (1.0 - 1.0 / (x * coeff / dim + 1.0)) * dim;
44
+ };
45
+
46
+ exports.rubberBandClamp = rubberBandClamp;
47
+
48
+ const rubberClamp = (y, topBound, bottomBound, coeff = 0.55) => {
49
+ 'worklet';
50
+
51
+ const clampedY = clamp(y, topBound, bottomBound);
52
+ const diff = Math.abs(y - clampedY);
53
+ const sign = clampedY > y ? -1 : 1;
54
+ const dimension = bottomBound - topBound;
55
+ return clampedY + sign * rubberBandClamp(diff, dimension, coeff);
56
+ };
57
+
58
+ exports.rubberClamp = rubberClamp;
59
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["utils.ts"],"names":["springConfig","velocity","stiffness","damping","mass","overshootClamping","restDisplacementThreshold","restSpeedThreshold","clamp","value","lowerbound","upperbound","Math","min","max","rubberBandClamp","x","dim","coeff","rubberClamp","y","topBound","bottomBound","clampedY","diff","abs","sign","dimension"],"mappings":";;;;;;;;AAAO,MAAMA,YAAY,GAAIC,QAAD,IAAsB;AAChD;;AAEA,SAAO;AACLC,IAAAA,SAAS,EAAE,IADN;AAELC,IAAAA,OAAO,EAAE,GAFJ;AAGLC,IAAAA,IAAI,EAAE,CAHD;AAILC,IAAAA,iBAAiB,EAAE,IAJd;AAKLC,IAAAA,yBAAyB,EAAE,IALtB;AAMLC,IAAAA,kBAAkB,EAAE,IANf;AAOLN,IAAAA;AAPK,GAAP;AASD,CAZM;;;;AAcA,SAASO,KAAT,CAAeC,KAAf,EAA8BC,UAA9B,EAAkDC,UAAlD,EAAsE;AAC3E;;AAEA,SAAOC,IAAI,CAACC,GAAL,CAASD,IAAI,CAACE,GAAL,CAASL,KAAT,EAAgBC,UAAhB,CAAT,EAAsCC,UAAtC,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMI,eAAe,GAAG,CAACC,CAAD,EAAYC,GAAZ,EAAyBC,KAAzB,KAA2C;AACxE;;AAEA,SAAO,CAAC,MAAM,OAAQF,CAAC,GAAGE,KAAL,GAAcD,GAAd,GAAoB,GAA3B,CAAP,IAA0CA,GAAjD;AACD,CAJM;;;;AAMA,MAAME,WAAW,GAAG,CACzBC,CADyB,EAEzBC,QAFyB,EAGzBC,WAHyB,EAIzBJ,KAAK,GAAG,IAJiB,KAKtB;AACH;;AAEA,QAAMK,QAAQ,GAAGf,KAAK,CAACY,CAAD,EAAIC,QAAJ,EAAcC,WAAd,CAAtB;AACA,QAAME,IAAI,GAAGZ,IAAI,CAACa,GAAL,CAASL,CAAC,GAAGG,QAAb,CAAb;AACA,QAAMG,IAAI,GAAGH,QAAQ,GAAGH,CAAX,GAAe,CAAC,CAAhB,GAAoB,CAAjC;AACA,QAAMO,SAAS,GAAGL,WAAW,GAAGD,QAAhC;AAEA,SAAOE,QAAQ,GAAGG,IAAI,GAAGX,eAAe,CAACS,IAAD,EAAOG,SAAP,EAAkBT,KAAlB,CAAxC;AACD,CAdM","sourcesContent":["export const springConfig = (velocity: number) => {\n 'worklet';\n\n return {\n stiffness: 1000,\n damping: 500,\n mass: 3,\n overshootClamping: true,\n restDisplacementThreshold: 0.01,\n restSpeedThreshold: 0.01,\n velocity,\n };\n};\n\nexport function clamp(value: number, lowerbound: number, upperbound: number) {\n 'worklet';\n\n return Math.min(Math.max(value, lowerbound), upperbound);\n}\n\n/**\n * calculates rubber value\n *\n * @param x distance from the edge\n * @param dim dimension, either width or height\n * @param coeff constant value, UIScrollView uses 0.55\n * @returns rubber = (1.0 – (1.0 / ((x * coeff / dim) + 1.0))) * dim\n */\nexport const rubberBandClamp = (x: number, dim: number, coeff: number) => {\n 'worklet';\n\n return (1.0 - 1.0 / ((x * coeff) / dim + 1.0)) * dim;\n};\n\nexport const rubberClamp = (\n y: number,\n topBound: number,\n bottomBound: number,\n coeff = 0.55\n) => {\n 'worklet';\n\n const clampedY = clamp(y, topBound, bottomBound);\n const diff = Math.abs(y - clampedY);\n const sign = clampedY > y ? -1 : 1;\n const dimension = bottomBound - topBound;\n\n return clampedY + sign * rubberBandClamp(diff, dimension, coeff);\n};\n"]}