react-native-collapsible-tabs-reanimated 0.1.0-beta
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.
- package/LICENSE +21 -0
- package/README.md +232 -0
- package/lib/commonjs/Bar.js +247 -0
- package/lib/commonjs/Bar.js.map +1 -0
- package/lib/commonjs/Button.js +150 -0
- package/lib/commonjs/Button.js.map +1 -0
- package/lib/commonjs/Context.js +21 -0
- package/lib/commonjs/Context.js.map +1 -0
- package/lib/commonjs/FlashList.js +91 -0
- package/lib/commonjs/FlashList.js.map +1 -0
- package/lib/commonjs/Header.js +54 -0
- package/lib/commonjs/Header.js.map +1 -0
- package/lib/commonjs/Indicator.js +156 -0
- package/lib/commonjs/Indicator.js.map +1 -0
- package/lib/commonjs/Lazy.js +87 -0
- package/lib/commonjs/Lazy.js.map +1 -0
- package/lib/commonjs/LegendList.js +86 -0
- package/lib/commonjs/LegendList.js.map +1 -0
- package/lib/commonjs/List.js +83 -0
- package/lib/commonjs/List.js.map +1 -0
- package/lib/commonjs/Pager.js +93 -0
- package/lib/commonjs/Pager.js.map +1 -0
- package/lib/commonjs/Root.js +169 -0
- package/lib/commonjs/Root.js.map +1 -0
- package/lib/commonjs/ScrollView.js +85 -0
- package/lib/commonjs/ScrollView.js.map +1 -0
- package/lib/commonjs/StaticHeader.js +37 -0
- package/lib/commonjs/StaticHeader.js.map +1 -0
- package/lib/commonjs/StickyHeader.js +37 -0
- package/lib/commonjs/StickyHeader.js.map +1 -0
- package/lib/commonjs/Tab.js +86 -0
- package/lib/commonjs/Tab.js.map +1 -0
- package/lib/commonjs/flash-list.js +14 -0
- package/lib/commonjs/flash-list.js.map +1 -0
- package/lib/commonjs/index.js +128 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/legend-list.js +14 -0
- package/lib/commonjs/legend-list.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/useStableCallback.js +15 -0
- package/lib/commonjs/useStableCallback.js.map +1 -0
- package/lib/module/Bar.js +242 -0
- package/lib/module/Bar.js.map +1 -0
- package/lib/module/Button.js +145 -0
- package/lib/module/Button.js.map +1 -0
- package/lib/module/Context.js +16 -0
- package/lib/module/Context.js.map +1 -0
- package/lib/module/FlashList.js +86 -0
- package/lib/module/FlashList.js.map +1 -0
- package/lib/module/Header.js +49 -0
- package/lib/module/Header.js.map +1 -0
- package/lib/module/Indicator.js +151 -0
- package/lib/module/Indicator.js.map +1 -0
- package/lib/module/Lazy.js +82 -0
- package/lib/module/Lazy.js.map +1 -0
- package/lib/module/LegendList.js +81 -0
- package/lib/module/LegendList.js.map +1 -0
- package/lib/module/List.js +78 -0
- package/lib/module/List.js.map +1 -0
- package/lib/module/Pager.js +87 -0
- package/lib/module/Pager.js.map +1 -0
- package/lib/module/Root.js +165 -0
- package/lib/module/Root.js.map +1 -0
- package/lib/module/ScrollView.js +80 -0
- package/lib/module/ScrollView.js.map +1 -0
- package/lib/module/StaticHeader.js +32 -0
- package/lib/module/StaticHeader.js.map +1 -0
- package/lib/module/StickyHeader.js +32 -0
- package/lib/module/StickyHeader.js.map +1 -0
- package/lib/module/Tab.js +81 -0
- package/lib/module/Tab.js.map +1 -0
- package/lib/module/flash-list.js +4 -0
- package/lib/module/flash-list.js.map +1 -0
- package/lib/module/index.js +44 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/legend-list.js +4 -0
- package/lib/module/legend-list.js.map +1 -0
- package/lib/module/useStableCallback.js +11 -0
- package/lib/module/useStableCallback.js.map +1 -0
- package/lib/typescript/Bar.d.ts +22 -0
- package/lib/typescript/Bar.d.ts.map +1 -0
- package/lib/typescript/Button.d.ts +32 -0
- package/lib/typescript/Button.d.ts.map +1 -0
- package/lib/typescript/Context.d.ts +37 -0
- package/lib/typescript/Context.d.ts.map +1 -0
- package/lib/typescript/FlashList.d.ts +6 -0
- package/lib/typescript/FlashList.d.ts.map +1 -0
- package/lib/typescript/Header.d.ts +7 -0
- package/lib/typescript/Header.d.ts.map +1 -0
- package/lib/typescript/Indicator.d.ts +11 -0
- package/lib/typescript/Indicator.d.ts.map +1 -0
- package/lib/typescript/Lazy.d.ts +36 -0
- package/lib/typescript/Lazy.d.ts.map +1 -0
- package/lib/typescript/LegendList.d.ts +6 -0
- package/lib/typescript/LegendList.d.ts.map +1 -0
- package/lib/typescript/List.d.ts +6 -0
- package/lib/typescript/List.d.ts.map +1 -0
- package/lib/typescript/Pager.d.ts +15 -0
- package/lib/typescript/Pager.d.ts.map +1 -0
- package/lib/typescript/Root.d.ts +14 -0
- package/lib/typescript/Root.d.ts.map +1 -0
- package/lib/typescript/ScrollView.d.ts +6 -0
- package/lib/typescript/ScrollView.d.ts.map +1 -0
- package/lib/typescript/StaticHeader.d.ts +7 -0
- package/lib/typescript/StaticHeader.d.ts.map +1 -0
- package/lib/typescript/StickyHeader.d.ts +7 -0
- package/lib/typescript/StickyHeader.d.ts.map +1 -0
- package/lib/typescript/Tab.d.ts +31 -0
- package/lib/typescript/Tab.d.ts.map +1 -0
- package/lib/typescript/flash-list.d.ts +3 -0
- package/lib/typescript/flash-list.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +69 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/legend-list.d.ts +3 -0
- package/lib/typescript/legend-list.d.ts.map +1 -0
- package/lib/typescript/useStableCallback.d.ts +2 -0
- package/lib/typescript/useStableCallback.d.ts.map +1 -0
- package/package.json +112 -0
- package/src/Bar.tsx +359 -0
- package/src/Button.tsx +219 -0
- package/src/Context.tsx +44 -0
- package/src/FlashList.tsx +150 -0
- package/src/Header.tsx +45 -0
- package/src/Indicator.tsx +193 -0
- package/src/Lazy.tsx +110 -0
- package/src/LegendList.tsx +130 -0
- package/src/List.tsx +115 -0
- package/src/Pager.tsx +134 -0
- package/src/Root.tsx +194 -0
- package/src/ScrollView.tsx +116 -0
- package/src/StaticHeader.tsx +30 -0
- package/src/StickyHeader.tsx +30 -0
- package/src/Tab.tsx +89 -0
- package/src/flash-list.ts +2 -0
- package/src/index.ts +54 -0
- package/src/legend-list.ts +2 -0
- package/src/useStableCallback.ts +11 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { memo, useCallback, useMemo, useRef } from "react";
|
|
4
|
+
import { StyleSheet, View } from "react-native";
|
|
5
|
+
import { Pressable } from "react-native-gesture-handler";
|
|
6
|
+
import Animated, { interpolateColor, useAnimatedStyle, withTiming } from "react-native-reanimated";
|
|
7
|
+
import { useCollapsibleTabsContext } from "./Context";
|
|
8
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
+
const Button = ({
|
|
10
|
+
index,
|
|
11
|
+
name,
|
|
12
|
+
onPress,
|
|
13
|
+
style,
|
|
14
|
+
fullWidth,
|
|
15
|
+
labelStyle,
|
|
16
|
+
labelProps,
|
|
17
|
+
activeLabelStyle,
|
|
18
|
+
activeStyle,
|
|
19
|
+
children,
|
|
20
|
+
contentWrapperStyle,
|
|
21
|
+
activeLabelColor = "#111827",
|
|
22
|
+
inactiveLabelColor = "#9ca3af",
|
|
23
|
+
...props
|
|
24
|
+
}) => {
|
|
25
|
+
const {
|
|
26
|
+
activeTabIndex,
|
|
27
|
+
activeTabIndexValue,
|
|
28
|
+
pageDecimal,
|
|
29
|
+
pagerRef,
|
|
30
|
+
registerButton,
|
|
31
|
+
itemLayout
|
|
32
|
+
} = useCollapsibleTabsContext();
|
|
33
|
+
const isActive = activeTabIndexValue === index;
|
|
34
|
+
const combinedStaticLabelStyle = useMemo(() => [styles.label, labelStyle, activeLabelStyle && isActive && activeLabelStyle], [activeLabelStyle, isActive, labelStyle]);
|
|
35
|
+
const animatedLabelStyle = useAnimatedStyle(() => {
|
|
36
|
+
const color = interpolateColor(pageDecimal.value, [index - 1, index, index + 1], [inactiveLabelColor, activeLabelColor, inactiveLabelColor]);
|
|
37
|
+
return {
|
|
38
|
+
color
|
|
39
|
+
};
|
|
40
|
+
}, [activeLabelColor, inactiveLabelColor, index, pageDecimal]);
|
|
41
|
+
const handleOnPress = useCallback(event => {
|
|
42
|
+
onPress?.(event);
|
|
43
|
+
if (pagerRef.current) {
|
|
44
|
+
pagerRef.current.setPage(index);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
activeTabIndex.value = index;
|
|
48
|
+
pageDecimal.value = withTiming(index);
|
|
49
|
+
}, [activeTabIndex, index, onPress, pageDecimal, pagerRef]);
|
|
50
|
+
const pressableLayoutRef = useRef(null);
|
|
51
|
+
const contentLayoutRef = useRef(null);
|
|
52
|
+
const commitLayout = useCallback(() => {
|
|
53
|
+
const pressable = pressableLayoutRef.current;
|
|
54
|
+
const content = contentLayoutRef.current;
|
|
55
|
+
if (!pressable || !content) return;
|
|
56
|
+
registerButton({
|
|
57
|
+
width: content.width,
|
|
58
|
+
height: content.height,
|
|
59
|
+
x: pressable.x + content.x,
|
|
60
|
+
y: pressable.y + content.y,
|
|
61
|
+
name,
|
|
62
|
+
index
|
|
63
|
+
});
|
|
64
|
+
}, [index, name, registerButton]);
|
|
65
|
+
const onLayout = useCallback(event => {
|
|
66
|
+
props.onLayout?.(event);
|
|
67
|
+
const {
|
|
68
|
+
x,
|
|
69
|
+
y
|
|
70
|
+
} = event.nativeEvent.layout;
|
|
71
|
+
pressableLayoutRef.current = {
|
|
72
|
+
x,
|
|
73
|
+
y
|
|
74
|
+
};
|
|
75
|
+
commitLayout();
|
|
76
|
+
}, [commitLayout, props]);
|
|
77
|
+
const onContentLayout = useCallback(event => {
|
|
78
|
+
const {
|
|
79
|
+
x,
|
|
80
|
+
y,
|
|
81
|
+
width,
|
|
82
|
+
height
|
|
83
|
+
} = event.nativeEvent.layout;
|
|
84
|
+
contentLayoutRef.current = {
|
|
85
|
+
x,
|
|
86
|
+
y,
|
|
87
|
+
width,
|
|
88
|
+
height
|
|
89
|
+
};
|
|
90
|
+
commitLayout();
|
|
91
|
+
}, [commitLayout]);
|
|
92
|
+
const isLast = itemLayout.length - 1 === index;
|
|
93
|
+
const isFirst = index === 0;
|
|
94
|
+
const mergedStyle = useMemo(() => [styles.pressable, isFirst && {
|
|
95
|
+
paddingLeft: 0
|
|
96
|
+
}, isLast && {
|
|
97
|
+
paddingRight: 0
|
|
98
|
+
}, fullWidth && styles.fullWidth, style, isActive && activeStyle], [activeStyle, fullWidth, isActive, isFirst, isLast, style]);
|
|
99
|
+
return /*#__PURE__*/_jsx(Pressable, {
|
|
100
|
+
onPress: handleOnPress,
|
|
101
|
+
...props,
|
|
102
|
+
onLayout: onLayout,
|
|
103
|
+
style: mergedStyle,
|
|
104
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
105
|
+
onLayout: onContentLayout,
|
|
106
|
+
style: [styles.contentWrapper, contentWrapperStyle],
|
|
107
|
+
children: typeof children === "function" ? children({
|
|
108
|
+
isActive,
|
|
109
|
+
index,
|
|
110
|
+
name,
|
|
111
|
+
style: combinedStaticLabelStyle,
|
|
112
|
+
animatedStyle: animatedLabelStyle,
|
|
113
|
+
pageDecimal
|
|
114
|
+
}) : /*#__PURE__*/_jsx(Animated.Text, {
|
|
115
|
+
style: [combinedStaticLabelStyle, animatedLabelStyle],
|
|
116
|
+
numberOfLines: 1,
|
|
117
|
+
...labelProps,
|
|
118
|
+
children: children
|
|
119
|
+
})
|
|
120
|
+
})
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
const styles = StyleSheet.create({
|
|
124
|
+
pressable: {
|
|
125
|
+
paddingVertical: 16,
|
|
126
|
+
paddingHorizontal: 10
|
|
127
|
+
},
|
|
128
|
+
fullWidth: {
|
|
129
|
+
flex: 1
|
|
130
|
+
},
|
|
131
|
+
contentWrapper: {
|
|
132
|
+
position: "relative",
|
|
133
|
+
alignSelf: "center"
|
|
134
|
+
},
|
|
135
|
+
label: {
|
|
136
|
+
fontSize: 14,
|
|
137
|
+
lineHeight: 18,
|
|
138
|
+
fontWeight: "700",
|
|
139
|
+
fontVariant: ["tabular-nums"],
|
|
140
|
+
textAlign: "center"
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
Button.displayName = "CollapsibleTabs.Button";
|
|
144
|
+
export default /*#__PURE__*/memo(Button);
|
|
145
|
+
//# sourceMappingURL=Button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["memo","useCallback","useMemo","useRef","StyleSheet","View","Pressable","Animated","interpolateColor","useAnimatedStyle","withTiming","useCollapsibleTabsContext","jsx","_jsx","Button","index","name","onPress","style","fullWidth","labelStyle","labelProps","activeLabelStyle","activeStyle","children","contentWrapperStyle","activeLabelColor","inactiveLabelColor","props","activeTabIndex","activeTabIndexValue","pageDecimal","pagerRef","registerButton","itemLayout","isActive","combinedStaticLabelStyle","styles","label","animatedLabelStyle","color","value","handleOnPress","event","current","setPage","pressableLayoutRef","contentLayoutRef","commitLayout","pressable","content","width","height","x","y","onLayout","nativeEvent","layout","onContentLayout","isLast","length","isFirst","mergedStyle","paddingLeft","paddingRight","contentWrapper","animatedStyle","Text","numberOfLines","create","paddingVertical","paddingHorizontal","flex","position","alignSelf","fontSize","lineHeight","fontWeight","fontVariant","textAlign","displayName"],"sourceRoot":"..\\..\\src","sources":["Button.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { createContext, memo, useContext } from 'react';
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
+
const CollapsibleTabsContext = /*#__PURE__*/createContext({});
|
|
6
|
+
export const useCollapsibleTabsContext = () => useContext(CollapsibleTabsContext);
|
|
7
|
+
export const CollapsibleTabsContextProvider = /*#__PURE__*/memo(({
|
|
8
|
+
children,
|
|
9
|
+
...props
|
|
10
|
+
}) => {
|
|
11
|
+
return /*#__PURE__*/_jsx(CollapsibleTabsContext.Provider, {
|
|
12
|
+
value: props,
|
|
13
|
+
children: children
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=Context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createContext","memo","useContext","jsx","_jsx","CollapsibleTabsContext","useCollapsibleTabsContext","CollapsibleTabsContextProvider","children","props","Provider","value"],"sourceRoot":"..\\..\\src","sources":["Context.tsx"],"mappings":";;AAAA,SAA+BA,aAAa,EAAEC,IAAI,EAAEC,UAAU,QAAQ,OAAO;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAqC9E,MAAMC,sBAAsB,gBAAGL,aAAa,CAAC,CAAC,CAAgC,CAAC;AAE/E,OAAO,MAAMM,yBAAyB,GAAGA,CAAA,KAAMJ,UAAU,CAACG,sBAAsB,CAAC;AAEjF,OAAO,MAAME,8BAA8B,gBAAGN,IAAI,CAAC,CAAC;EAAEO,QAAQ;EAAE,GAAGC;AAA6D,CAAC,KAAK;EACpI,oBAAOL,IAAA,CAACC,sBAAsB,CAACK,QAAQ;IAACC,KAAK,EAAEF,KAAM;IAAAD,QAAA,EAAEA;EAAQ,CAAkC,CAAC;AACpG,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { memo, useCallback, useEffect, useMemo } from "react";
|
|
4
|
+
import { FlashList as ShopifyFlashList } from "@shopify/flash-list";
|
|
5
|
+
import { StyleSheet, View } from "react-native";
|
|
6
|
+
import { GestureDetector } from "react-native-gesture-handler";
|
|
7
|
+
import Animated, { scrollTo, useAnimatedReaction, useAnimatedRef, useAnimatedScrollHandler, useComposedEventHandler, useSharedValue } from "react-native-reanimated";
|
|
8
|
+
import { useCollapsibleTabsContext } from "./Context";
|
|
9
|
+
import { useTabSelfContext } from "./Tab";
|
|
10
|
+
import { useStableCallback } from "./useStableCallback";
|
|
11
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
const AnimatedFlashList = Animated.createAnimatedComponent(ShopifyFlashList);
|
|
13
|
+
const CollapsibleFlashList = ({
|
|
14
|
+
onLayout,
|
|
15
|
+
onContentSizeChange,
|
|
16
|
+
...props
|
|
17
|
+
}) => {
|
|
18
|
+
const {
|
|
19
|
+
listGestures,
|
|
20
|
+
activeTabIndex,
|
|
21
|
+
activeListOffset,
|
|
22
|
+
registerListScroller
|
|
23
|
+
} = useCollapsibleTabsContext();
|
|
24
|
+
const {
|
|
25
|
+
index
|
|
26
|
+
} = useTabSelfContext();
|
|
27
|
+
const selfOffset = useSharedValue(0);
|
|
28
|
+
const listRef = useAnimatedRef();
|
|
29
|
+
const onScroll = useAnimatedScrollHandler(event => {
|
|
30
|
+
selfOffset.value = event.contentOffset.y;
|
|
31
|
+
if (activeTabIndex.value === index) activeListOffset.value = event.contentOffset.y;
|
|
32
|
+
});
|
|
33
|
+
const composedScrollEvent = useComposedEventHandler(props.onScroll ? [onScroll, props.onScroll] : [onScroll]);
|
|
34
|
+
const myListGesture = listGestures[index];
|
|
35
|
+
const renderScrollComponent = useCallback(scrollProps => /*#__PURE__*/_jsx(GestureDetector, {
|
|
36
|
+
gesture: myListGesture,
|
|
37
|
+
children: /*#__PURE__*/_jsx(Animated.ScrollView, {
|
|
38
|
+
...scrollProps
|
|
39
|
+
})
|
|
40
|
+
}), [myListGesture]);
|
|
41
|
+
useAnimatedReaction(() => activeTabIndex.value, value => {
|
|
42
|
+
if (value === index) activeListOffset.value = selfOffset.value;
|
|
43
|
+
}, [index]);
|
|
44
|
+
const scroller = useMemo(() => (animated = true) => {
|
|
45
|
+
"worklet";
|
|
46
|
+
|
|
47
|
+
scrollTo(listRef, 0, 0, animated);
|
|
48
|
+
}, [listRef]);
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
registerListScroller(index, scroller);
|
|
51
|
+
return () => registerListScroller(index, null);
|
|
52
|
+
}, [index, registerListScroller, scroller]);
|
|
53
|
+
const stableLayout = useStableCallback(onLayout);
|
|
54
|
+
const stableContentSizeChange = useStableCallback(onContentSizeChange);
|
|
55
|
+
const handleLayout = useCallback(event => {
|
|
56
|
+
stableLayout?.(event);
|
|
57
|
+
}, [stableLayout]);
|
|
58
|
+
const handleContentSizeChange = useCallback((width, height) => {
|
|
59
|
+
stableContentSizeChange?.(width, height);
|
|
60
|
+
}, [stableContentSizeChange]);
|
|
61
|
+
return /*#__PURE__*/_jsx(View, {
|
|
62
|
+
style: styles.view,
|
|
63
|
+
collapsable: false,
|
|
64
|
+
children: /*#__PURE__*/_jsx(AnimatedFlashList, {
|
|
65
|
+
ref: listRef,
|
|
66
|
+
scrollEventThrottle: 16,
|
|
67
|
+
showsVerticalScrollIndicator: true,
|
|
68
|
+
directionalLockEnabled: true,
|
|
69
|
+
keyboardShouldPersistTaps: "handled",
|
|
70
|
+
...props,
|
|
71
|
+
renderScrollComponent: renderScrollComponent,
|
|
72
|
+
onScroll: composedScrollEvent,
|
|
73
|
+
onLayout: handleLayout,
|
|
74
|
+
onContentSizeChange: handleContentSizeChange
|
|
75
|
+
})
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
const styles = StyleSheet.create({
|
|
79
|
+
view: {
|
|
80
|
+
position: "relative",
|
|
81
|
+
flex: 1
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
CollapsibleFlashList.displayName = "CollapsibleTabs.CollapsibleFlashList";
|
|
85
|
+
export default /*#__PURE__*/memo(CollapsibleFlashList);
|
|
86
|
+
//# sourceMappingURL=FlashList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["memo","useCallback","useEffect","useMemo","FlashList","ShopifyFlashList","StyleSheet","View","GestureDetector","Animated","scrollTo","useAnimatedReaction","useAnimatedRef","useAnimatedScrollHandler","useComposedEventHandler","useSharedValue","useCollapsibleTabsContext","useTabSelfContext","useStableCallback","jsx","_jsx","AnimatedFlashList","createAnimatedComponent","CollapsibleFlashList","onLayout","onContentSizeChange","props","listGestures","activeTabIndex","activeListOffset","registerListScroller","index","selfOffset","listRef","onScroll","event","value","contentOffset","y","composedScrollEvent","myListGesture","renderScrollComponent","scrollProps","gesture","children","ScrollView","scroller","animated","stableLayout","stableContentSizeChange","handleLayout","handleContentSizeChange","width","height","style","styles","view","collapsable","ref","scrollEventThrottle","showsVerticalScrollIndicator","directionalLockEnabled","keyboardShouldPersistTaps","create","position","flex","displayName"],"sourceRoot":"..\\..\\src","sources":["FlashList.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { memo, useMemo } from 'react';
|
|
4
|
+
import { Platform } from 'react-native';
|
|
5
|
+
import { Gesture, GestureDetector } from 'react-native-gesture-handler';
|
|
6
|
+
import Animated, { clamp, useAnimatedStyle, withDecay } from 'react-native-reanimated';
|
|
7
|
+
import { useCollapsibleTabsContext } from './Context';
|
|
8
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
+
const DECELERATION = Platform.OS === 'android' ? 0.985 : 0.998;
|
|
10
|
+
const Header = ({
|
|
11
|
+
children,
|
|
12
|
+
style,
|
|
13
|
+
...props
|
|
14
|
+
}) => {
|
|
15
|
+
const {
|
|
16
|
+
headerOffset,
|
|
17
|
+
staticHeight,
|
|
18
|
+
offsetAdjustment
|
|
19
|
+
} = useCollapsibleTabsContext();
|
|
20
|
+
const panGesture = useMemo(() => Gesture.Pan().activeOffsetY([-5, 5]).failOffsetX([-5, 5]).maxPointers(1).onChange(evt => {
|
|
21
|
+
const minOffset = -(staticHeight.value - offsetAdjustment.value);
|
|
22
|
+
headerOffset.value = clamp(headerOffset.value + evt.changeY, minOffset, 0);
|
|
23
|
+
}).onEnd(evt => {
|
|
24
|
+
const minOffset = -(staticHeight.value - offsetAdjustment.value);
|
|
25
|
+
headerOffset.value = withDecay({
|
|
26
|
+
velocity: evt.velocityY,
|
|
27
|
+
rubberBandEffect: false,
|
|
28
|
+
clamp: [minOffset, 0],
|
|
29
|
+
deceleration: DECELERATION
|
|
30
|
+
});
|
|
31
|
+
}), [headerOffset, offsetAdjustment, staticHeight]);
|
|
32
|
+
const animatedStyle = useAnimatedStyle(() => ({
|
|
33
|
+
transform: [{
|
|
34
|
+
translateY: headerOffset.value
|
|
35
|
+
}]
|
|
36
|
+
}), []);
|
|
37
|
+
return /*#__PURE__*/_jsx(GestureDetector, {
|
|
38
|
+
gesture: panGesture,
|
|
39
|
+
children: /*#__PURE__*/_jsx(Animated.View, {
|
|
40
|
+
...props,
|
|
41
|
+
style: [style, animatedStyle],
|
|
42
|
+
collapsable: false,
|
|
43
|
+
children: children
|
|
44
|
+
})
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
Header.displayName = 'CollapsibleTabs.Header';
|
|
48
|
+
export default /*#__PURE__*/memo(Header);
|
|
49
|
+
//# sourceMappingURL=Header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["memo","useMemo","Platform","Gesture","GestureDetector","Animated","clamp","useAnimatedStyle","withDecay","useCollapsibleTabsContext","jsx","_jsx","DECELERATION","OS","Header","children","style","props","headerOffset","staticHeight","offsetAdjustment","panGesture","Pan","activeOffsetY","failOffsetX","maxPointers","onChange","evt","minOffset","value","changeY","onEnd","velocity","velocityY","rubberBandEffect","deceleration","animatedStyle","transform","translateY","gesture","View","collapsable","displayName"],"sourceRoot":"..\\..\\src","sources":["Header.tsx"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,OAAO,QAAQ,OAAO;AAErC,SAASC,QAAQ,QAAmB,cAAc;AAElD,SAASC,OAAO,EAAEC,eAAe,QAAQ,8BAA8B;AACvE,OAAOC,QAAQ,IAAIC,KAAK,EAAEC,gBAAgB,EAAEC,SAAS,QAAQ,yBAAyB;AAEtF,SAASC,yBAAyB,QAAQ,WAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEtD,MAAMC,YAAY,GAAGV,QAAQ,CAACW,EAAE,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AAE9D,MAAMC,MAAM,GAAGA,CAAC;EAAEC,QAAQ;EAAEC,KAAK;EAAE,GAAGC;AAAiB,CAAC,KAAK;EAC3D,MAAM;IAAEC,YAAY;IAAEC,YAAY;IAAEC;EAAiB,CAAC,GAAGX,yBAAyB,CAAC,CAAC;EAEpF,MAAMY,UAAU,GAAGpB,OAAO,CACxB,MACEE,OAAO,CAACmB,GAAG,CAAC,CAAC,CACVC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACtBC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACpBC,WAAW,CAAC,CAAC,CAAC,CACdC,QAAQ,CAAEC,GAAG,IAAK;IACjB,MAAMC,SAAS,GAAG,EAAET,YAAY,CAACU,KAAK,GAAGT,gBAAgB,CAACS,KAAK,CAAC;IAChEX,YAAY,CAACW,KAAK,GAAGvB,KAAK,CAACY,YAAY,CAACW,KAAK,GAAGF,GAAG,CAACG,OAAO,EAAEF,SAAS,EAAE,CAAC,CAAC;EAC5E,CAAC,CAAC,CACDG,KAAK,CAAEJ,GAAG,IAAK;IACd,MAAMC,SAAS,GAAG,EAAET,YAAY,CAACU,KAAK,GAAGT,gBAAgB,CAACS,KAAK,CAAC;IAChEX,YAAY,CAACW,KAAK,GAAGrB,SAAS,CAAC;MAAEwB,QAAQ,EAAEL,GAAG,CAACM,SAAS;MAAEC,gBAAgB,EAAE,KAAK;MAAE5B,KAAK,EAAE,CAACsB,SAAS,EAAE,CAAC,CAAC;MAAEO,YAAY,EAAEvB;IAAa,CAAC,CAAC;EACzI,CAAC,CAAC,EACN,CAACM,YAAY,EAAEE,gBAAgB,EAAED,YAAY,CAC/C,CAAC;EAED,MAAMiB,aAAa,GAAG7B,gBAAgB,CAAC,OAAO;IAAE8B,SAAS,EAAE,CAAC;MAAEC,UAAU,EAAEpB,YAAY,CAACW;IAAM,CAAC;EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;EAEvG,oBACElB,IAAA,CAACP,eAAe;IAACmC,OAAO,EAAElB,UAAW;IAAAN,QAAA,eACnCJ,IAAA,CAACN,QAAQ,CAACmC,IAAI;MAAA,GAAKvB,KAAK;MAAED,KAAK,EAAE,CAACA,KAAK,EAAEoB,aAAa,CAAE;MAACK,WAAW,EAAE,KAAM;MAAA1B,QAAA,EACzEA;IAAQ,CACI;EAAC,CACD,CAAC;AAEtB,CAAC;AAEDD,MAAM,CAAC4B,WAAW,GAAG,wBAAwB;AAE7C,4BAAe1C,IAAI,CAACc,MAAM,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { memo } from "react";
|
|
4
|
+
import { PixelRatio, StyleSheet } from "react-native";
|
|
5
|
+
import Animated, { interpolate, useAnimatedStyle, useDerivedValue } from "react-native-reanimated";
|
|
6
|
+
import { useCollapsibleTabsContext } from "./Context";
|
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
+
export const MaterialIndicator = /*#__PURE__*/memo(({
|
|
9
|
+
style,
|
|
10
|
+
color = "#111827",
|
|
11
|
+
borderRadius = 999,
|
|
12
|
+
...props
|
|
13
|
+
}) => {
|
|
14
|
+
const {
|
|
15
|
+
itemLayout,
|
|
16
|
+
pageDecimal
|
|
17
|
+
} = useCollapsibleTabsContext();
|
|
18
|
+
const data = useDerivedValue(() => {
|
|
19
|
+
if (!itemLayout || itemLayout.length === 0) return {
|
|
20
|
+
input: [],
|
|
21
|
+
width: [],
|
|
22
|
+
translateX: []
|
|
23
|
+
};
|
|
24
|
+
const input = new Array(itemLayout.length);
|
|
25
|
+
const translateX = new Array(itemLayout.length);
|
|
26
|
+
const width = new Array(itemLayout.length);
|
|
27
|
+
for (let index = 0; index < itemLayout.length; index += 1) {
|
|
28
|
+
const item = itemLayout[index];
|
|
29
|
+
input[index] = index;
|
|
30
|
+
translateX[index] = item.x;
|
|
31
|
+
width[index] = item.width;
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
input,
|
|
35
|
+
translateX,
|
|
36
|
+
width
|
|
37
|
+
};
|
|
38
|
+
}, [itemLayout]);
|
|
39
|
+
const animatedStyles = useAnimatedStyle(() => {
|
|
40
|
+
if (data.value.input.length === 0 || data.value.width.length === 0 || data.value.translateX.length === 0) return {
|
|
41
|
+
opacity: 0,
|
|
42
|
+
width: 0
|
|
43
|
+
};
|
|
44
|
+
if (data.value.input.length === 1) return {
|
|
45
|
+
opacity: 1,
|
|
46
|
+
width: data.value.width[0],
|
|
47
|
+
transform: [{
|
|
48
|
+
translateX: data.value.translateX[0]
|
|
49
|
+
}]
|
|
50
|
+
};
|
|
51
|
+
return {
|
|
52
|
+
opacity: 1,
|
|
53
|
+
width: interpolate(pageDecimal.value, data.value.input, data.value.width, "clamp"),
|
|
54
|
+
transform: [{
|
|
55
|
+
translateX: interpolate(pageDecimal.value, data.value.input, data.value.translateX, "clamp")
|
|
56
|
+
}]
|
|
57
|
+
};
|
|
58
|
+
}, []);
|
|
59
|
+
return /*#__PURE__*/_jsx(Animated.View, {
|
|
60
|
+
style: [styles.indicator, {
|
|
61
|
+
backgroundColor: color,
|
|
62
|
+
borderRadius
|
|
63
|
+
}, style, animatedStyles],
|
|
64
|
+
...props
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
export const SegmentIndicator = /*#__PURE__*/memo(({
|
|
68
|
+
style,
|
|
69
|
+
color = "#ffffff",
|
|
70
|
+
borderRadius = 999,
|
|
71
|
+
...props
|
|
72
|
+
}) => {
|
|
73
|
+
const {
|
|
74
|
+
itemLayout,
|
|
75
|
+
pageDecimal
|
|
76
|
+
} = useCollapsibleTabsContext();
|
|
77
|
+
const data = useDerivedValue(() => {
|
|
78
|
+
if (!itemLayout || itemLayout.length === 0) return {
|
|
79
|
+
input: [],
|
|
80
|
+
width: [],
|
|
81
|
+
translateX: [],
|
|
82
|
+
height: []
|
|
83
|
+
};
|
|
84
|
+
const input = new Array(itemLayout.length);
|
|
85
|
+
const translateX = new Array(itemLayout.length);
|
|
86
|
+
const width = new Array(itemLayout.length);
|
|
87
|
+
const height = new Array(itemLayout.length);
|
|
88
|
+
for (let index = 0; index < itemLayout.length; index += 1) {
|
|
89
|
+
const item = itemLayout[index];
|
|
90
|
+
input[index] = index;
|
|
91
|
+
translateX[index] = item.x;
|
|
92
|
+
width[index] = item.width;
|
|
93
|
+
height[index] = item.height;
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
input,
|
|
97
|
+
translateX,
|
|
98
|
+
width,
|
|
99
|
+
height
|
|
100
|
+
};
|
|
101
|
+
}, [itemLayout]);
|
|
102
|
+
const animatedStyles = useAnimatedStyle(() => {
|
|
103
|
+
const input = data.value.input;
|
|
104
|
+
const width = data.value.width;
|
|
105
|
+
const translateX = data.value.translateX;
|
|
106
|
+
const height = data.value.height;
|
|
107
|
+
if (input.length === 0 || width.length === 0 || translateX.length === 0) return {
|
|
108
|
+
opacity: 0,
|
|
109
|
+
width: 0
|
|
110
|
+
};
|
|
111
|
+
if (input.length === 1) return {
|
|
112
|
+
opacity: 1,
|
|
113
|
+
width: width[0],
|
|
114
|
+
transform: [{
|
|
115
|
+
translateX: translateX[0]
|
|
116
|
+
}],
|
|
117
|
+
height: height[0]
|
|
118
|
+
};
|
|
119
|
+
return {
|
|
120
|
+
opacity: 1,
|
|
121
|
+
width: interpolate(pageDecimal.value, input, width, "clamp"),
|
|
122
|
+
transform: [{
|
|
123
|
+
translateX: interpolate(pageDecimal.value, input, translateX, "clamp")
|
|
124
|
+
}],
|
|
125
|
+
height: height[0]
|
|
126
|
+
};
|
|
127
|
+
}, []);
|
|
128
|
+
return /*#__PURE__*/_jsx(Animated.View, {
|
|
129
|
+
style: [styles.segment, {
|
|
130
|
+
backgroundColor: color,
|
|
131
|
+
borderRadius
|
|
132
|
+
}, style, animatedStyles],
|
|
133
|
+
...props
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
MaterialIndicator.displayName = "CollapsibleTabs.MaterialIndicator";
|
|
137
|
+
SegmentIndicator.displayName = "CollapsibleTabs.SegmentIndicator";
|
|
138
|
+
const styles = StyleSheet.create({
|
|
139
|
+
indicator: {
|
|
140
|
+
height: PixelRatio.roundToNearestPixel(3),
|
|
141
|
+
position: "absolute",
|
|
142
|
+
left: 0,
|
|
143
|
+
bottom: 0
|
|
144
|
+
},
|
|
145
|
+
segment: {
|
|
146
|
+
position: "absolute",
|
|
147
|
+
left: 0,
|
|
148
|
+
zIndex: 0
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
//# sourceMappingURL=Indicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["memo","PixelRatio","StyleSheet","Animated","interpolate","useAnimatedStyle","useDerivedValue","useCollapsibleTabsContext","jsx","_jsx","MaterialIndicator","style","color","borderRadius","props","itemLayout","pageDecimal","data","length","input","width","translateX","Array","index","item","x","animatedStyles","value","opacity","transform","View","styles","indicator","backgroundColor","SegmentIndicator","height","segment","displayName","create","roundToNearestPixel","position","left","bottom","zIndex"],"sourceRoot":"..\\..\\src","sources":["Indicator.tsx"],"mappings":";;AAAA,SAASA,IAAI,QAAQ,OAAO;AAE5B,SACEC,UAAU,EAEVC,UAAU,QAGL,cAAc;AAErB,OAAOC,QAAQ,IAEbC,WAAW,EACXC,gBAAgB,EAChBC,eAAe,QACV,yBAAyB;AAEhC,SAASC,yBAAyB,QAAQ,WAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQtD,OAAO,MAAMC,iBAAiB,gBAAGV,IAAI,CACnC,CAAC;EACCW,KAAK;EACLC,KAAK,GAAG,SAAS;EACjBC,YAAY,GAAG,GAAG;EAClB,GAAGC;AACiB,CAAC,KAAK;EAC1B,MAAM;IAAEC,UAAU;IAAEC;EAAY,CAAC,GAAGT,yBAAyB,CAAC,CAAC;EAE/D,MAAMU,IAAI,GAAGX,eAAe,CAAC,MAAM;IACjC,IAAI,CAACS,UAAU,IAAIA,UAAU,CAACG,MAAM,KAAK,CAAC,EACxC,OAAO;MAAEC,KAAK,EAAE,EAAE;MAAEC,KAAK,EAAE,EAAE;MAAEC,UAAU,EAAE;IAAG,CAAC;IACjD,MAAMF,KAAK,GAAG,IAAIG,KAAK,CAASP,UAAU,CAACG,MAAM,CAAC;IAClD,MAAMG,UAAU,GAAG,IAAIC,KAAK,CAASP,UAAU,CAACG,MAAM,CAAC;IACvD,MAAME,KAAK,GAAG,IAAIE,KAAK,CAASP,UAAU,CAACG,MAAM,CAAC;IAClD,KAAK,IAAIK,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGR,UAAU,CAACG,MAAM,EAAEK,KAAK,IAAI,CAAC,EAAE;MACzD,MAAMC,IAAI,GAAGT,UAAU,CAACQ,KAAK,CAAC;MAC9BJ,KAAK,CAACI,KAAK,CAAC,GAAGA,KAAK;MACpBF,UAAU,CAACE,KAAK,CAAC,GAAGC,IAAI,CAACC,CAAC;MAC1BL,KAAK,CAACG,KAAK,CAAC,GAAGC,IAAI,CAACJ,KAAK;IAC3B;IACA,OAAO;MACLD,KAAK;MACLE,UAAU;MACVD;IACF,CAAC;EACH,CAAC,EAAE,CAACL,UAAU,CAAC,CAAC;EAEhB,MAAMW,cAAc,GAAGrB,gBAAgB,CAAC,MAAM;IAC5C,IACEY,IAAI,CAACU,KAAK,CAACR,KAAK,CAACD,MAAM,KAAK,CAAC,IAC7BD,IAAI,CAACU,KAAK,CAACP,KAAK,CAACF,MAAM,KAAK,CAAC,IAC7BD,IAAI,CAACU,KAAK,CAACN,UAAU,CAACH,MAAM,KAAK,CAAC,EAElC,OAAO;MAAEU,OAAO,EAAE,CAAC;MAAER,KAAK,EAAE;IAAE,CAAC;IACjC,IAAIH,IAAI,CAACU,KAAK,CAACR,KAAK,CAACD,MAAM,KAAK,CAAC,EAC/B,OAAO;MACLU,OAAO,EAAE,CAAC;MACVR,KAAK,EAAEH,IAAI,CAACU,KAAK,CAACP,KAAK,CAAC,CAAC,CAAC;MAC1BS,SAAS,EAAE,CAAC;QAAER,UAAU,EAAEJ,IAAI,CAACU,KAAK,CAACN,UAAU,CAAC,CAAC;MAAE,CAAC;IACtD,CAAC;IACH,OAAO;MACLO,OAAO,EAAE,CAAC;MACVR,KAAK,EAAEhB,WAAW,CAChBY,WAAW,CAACW,KAAK,EACjBV,IAAI,CAACU,KAAK,CAACR,KAAK,EAChBF,IAAI,CAACU,KAAK,CAACP,KAAK,EAChB,OACF,CAAC;MACDS,SAAS,EAAE,CACT;QACER,UAAU,EAAEjB,WAAW,CACrBY,WAAW,CAACW,KAAK,EACjBV,IAAI,CAACU,KAAK,CAACR,KAAK,EAChBF,IAAI,CAACU,KAAK,CAACN,UAAU,EACrB,OACF;MACF,CAAC;IAEL,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,oBACEZ,IAAA,CAACN,QAAQ,CAAC2B,IAAI;IACZnB,KAAK,EAAE,CACLoB,MAAM,CAACC,SAAS,EAChB;MAAEC,eAAe,EAAErB,KAAK;MAAEC;IAAa,CAAC,EACxCF,KAAK,EACLe,cAAc,CACd;IAAA,GACEZ;EAAK,CACV,CAAC;AAEN,CACF,CAAC;AAED,OAAO,MAAMoB,gBAAgB,gBAAGlC,IAAI,CAClC,CAAC;EACCW,KAAK;EACLC,KAAK,GAAG,SAAS;EACjBC,YAAY,GAAG,GAAG;EAClB,GAAGC;AACiB,CAAC,KAAK;EAC1B,MAAM;IAAEC,UAAU;IAAEC;EAAY,CAAC,GAAGT,yBAAyB,CAAC,CAAC;EAE/D,MAAMU,IAAI,GAAGX,eAAe,CAAC,MAAM;IACjC,IAAI,CAACS,UAAU,IAAIA,UAAU,CAACG,MAAM,KAAK,CAAC,EACxC,OAAO;MAAEC,KAAK,EAAE,EAAE;MAAEC,KAAK,EAAE,EAAE;MAAEC,UAAU,EAAE,EAAE;MAAEc,MAAM,EAAE;IAAG,CAAC;IAC7D,MAAMhB,KAAK,GAAG,IAAIG,KAAK,CAASP,UAAU,CAACG,MAAM,CAAC;IAClD,MAAMG,UAAU,GAAG,IAAIC,KAAK,CAASP,UAAU,CAACG,MAAM,CAAC;IACvD,MAAME,KAAK,GAAG,IAAIE,KAAK,CAASP,UAAU,CAACG,MAAM,CAAC;IAClD,MAAMiB,MAAM,GAAG,IAAIb,KAAK,CAASP,UAAU,CAACG,MAAM,CAAC;IACnD,KAAK,IAAIK,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGR,UAAU,CAACG,MAAM,EAAEK,KAAK,IAAI,CAAC,EAAE;MACzD,MAAMC,IAAI,GAAGT,UAAU,CAACQ,KAAK,CAAC;MAC9BJ,KAAK,CAACI,KAAK,CAAC,GAAGA,KAAK;MACpBF,UAAU,CAACE,KAAK,CAAC,GAAGC,IAAI,CAACC,CAAC;MAC1BL,KAAK,CAACG,KAAK,CAAC,GAAGC,IAAI,CAACJ,KAAK;MACzBe,MAAM,CAACZ,KAAK,CAAC,GAAGC,IAAI,CAACW,MAAM;IAC7B;IACA,OAAO;MACLhB,KAAK;MACLE,UAAU;MACVD,KAAK;MACLe;IACF,CAAC;EACH,CAAC,EAAE,CAACpB,UAAU,CAAC,CAAC;EAEhB,MAAMW,cAAc,GAAGrB,gBAAgB,CAAC,MAAM;IAC5C,MAAMc,KAAK,GAAGF,IAAI,CAACU,KAAK,CAACR,KAAK;IAC9B,MAAMC,KAAK,GAAGH,IAAI,CAACU,KAAK,CAACP,KAAK;IAC9B,MAAMC,UAAU,GAAGJ,IAAI,CAACU,KAAK,CAACN,UAAU;IACxC,MAAMc,MAAM,GAAGlB,IAAI,CAACU,KAAK,CAACQ,MAAM;IAChC,IAAIhB,KAAK,CAACD,MAAM,KAAK,CAAC,IAAIE,KAAK,CAACF,MAAM,KAAK,CAAC,IAAIG,UAAU,CAACH,MAAM,KAAK,CAAC,EACrE,OAAO;MAAEU,OAAO,EAAE,CAAC;MAAER,KAAK,EAAE;IAAE,CAAC;IACjC,IAAID,KAAK,CAACD,MAAM,KAAK,CAAC,EACpB,OAAO;MACLU,OAAO,EAAE,CAAC;MACVR,KAAK,EAAEA,KAAK,CAAC,CAAC,CAAC;MACfS,SAAS,EAAE,CAAC;QAAER,UAAU,EAAEA,UAAU,CAAC,CAAC;MAAE,CAAC,CAAC;MAC1Cc,MAAM,EAAEA,MAAM,CAAC,CAAC;IAClB,CAAC;IACH,OAAO;MACLP,OAAO,EAAE,CAAC;MACVR,KAAK,EAAEhB,WAAW,CAACY,WAAW,CAACW,KAAK,EAAER,KAAK,EAAEC,KAAK,EAAE,OAAO,CAAC;MAC5DS,SAAS,EAAE,CACT;QACER,UAAU,EAAEjB,WAAW,CACrBY,WAAW,CAACW,KAAK,EACjBR,KAAK,EACLE,UAAU,EACV,OACF;MACF,CAAC,CACF;MACDc,MAAM,EAAEA,MAAM,CAAC,CAAC;IAClB,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,oBACE1B,IAAA,CAACN,QAAQ,CAAC2B,IAAI;IACZnB,KAAK,EAAE,CACLoB,MAAM,CAACK,OAAO,EACd;MAAEH,eAAe,EAAErB,KAAK;MAAEC;IAAa,CAAC,EACxCF,KAAK,EACLe,cAAc,CACd;IAAA,GACEZ;EAAK,CACV,CAAC;AAEN,CACF,CAAC;AAEDJ,iBAAiB,CAAC2B,WAAW,GAAG,mCAAmC;AACnEH,gBAAgB,CAACG,WAAW,GAAG,kCAAkC;AAEjE,MAAMN,MAAM,GAAG7B,UAAU,CAACoC,MAAM,CAAC;EAC/BN,SAAS,EAAE;IACTG,MAAM,EAAElC,UAAU,CAACsC,mBAAmB,CAAC,CAAC,CAAC;IACzCC,QAAQ,EAAE,UAAU;IACpBC,IAAI,EAAE,CAAC;IACPC,MAAM,EAAE;EACV,CAAC;EACDN,OAAO,EAAE;IACPI,QAAQ,EAAE,UAAU;IACpBC,IAAI,EAAE,CAAC;IACPE,MAAM,EAAE;EACV;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useRef, useState } from 'react';
|
|
4
|
+
import { StyleSheet } from 'react-native';
|
|
5
|
+
import Animated, { FadeIn, FadeOut } from 'react-native-reanimated';
|
|
6
|
+
import { useStableCallback } from './useStableCallback';
|
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
+
export function Lazy({
|
|
9
|
+
placeholder,
|
|
10
|
+
renderPlaceholder,
|
|
11
|
+
placeholderStyle,
|
|
12
|
+
placeholderProps,
|
|
13
|
+
containerProps,
|
|
14
|
+
disableEntering = false,
|
|
15
|
+
disableExiting = false,
|
|
16
|
+
entering,
|
|
17
|
+
exiting,
|
|
18
|
+
enteringDuration,
|
|
19
|
+
enteringDelay,
|
|
20
|
+
exitingDuration = 300,
|
|
21
|
+
focused,
|
|
22
|
+
duration = 200,
|
|
23
|
+
delay = 50,
|
|
24
|
+
onMount,
|
|
25
|
+
children,
|
|
26
|
+
style
|
|
27
|
+
}) {
|
|
28
|
+
const [canMount, setCanMount] = useState(false);
|
|
29
|
+
const mountNotifiedRef = useRef(false);
|
|
30
|
+
const stableOnMount = useStableCallback(onMount);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (focused) {
|
|
33
|
+
setCanMount(true);
|
|
34
|
+
if (!mountNotifiedRef.current) {
|
|
35
|
+
mountNotifiedRef.current = true;
|
|
36
|
+
stableOnMount();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}, [focused, stableOnMount]);
|
|
40
|
+
const placeholderPointerEvents = placeholderProps?.pointerEvents ?? 'box-none';
|
|
41
|
+
const {
|
|
42
|
+
style: placeholderContainerStyle,
|
|
43
|
+
pointerEvents: _placeholderPointerEvents,
|
|
44
|
+
...restPlaceholderProps
|
|
45
|
+
} = placeholderProps ?? {};
|
|
46
|
+
const {
|
|
47
|
+
style: containerStyle,
|
|
48
|
+
...restContainerProps
|
|
49
|
+
} = containerProps ?? {};
|
|
50
|
+
const enteringAnimation = disableEntering || entering === null ? undefined : entering ?? FadeIn.duration(enteringDuration ?? duration).delay(enteringDelay ?? delay);
|
|
51
|
+
const exitingAnimation = disableExiting || exiting === null ? undefined : exiting ?? FadeOut.duration(exitingDuration);
|
|
52
|
+
if (!canMount) {
|
|
53
|
+
return /*#__PURE__*/_jsx(Animated.View, {
|
|
54
|
+
...restPlaceholderProps,
|
|
55
|
+
exiting: exitingAnimation,
|
|
56
|
+
style: [styles.placeholder, placeholderStyle, placeholderContainerStyle],
|
|
57
|
+
pointerEvents: placeholderPointerEvents,
|
|
58
|
+
children: renderPlaceholder ? renderPlaceholder({
|
|
59
|
+
focused,
|
|
60
|
+
canMount
|
|
61
|
+
}) : placeholder
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
return /*#__PURE__*/_jsx(Animated.View, {
|
|
65
|
+
...restContainerProps,
|
|
66
|
+
entering: enteringAnimation,
|
|
67
|
+
style: [styles.container, style, containerStyle],
|
|
68
|
+
children: children
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
const styles = StyleSheet.create({
|
|
72
|
+
container: {
|
|
73
|
+
width: '100%',
|
|
74
|
+
flex: 1,
|
|
75
|
+
height: '100%'
|
|
76
|
+
},
|
|
77
|
+
placeholder: {
|
|
78
|
+
paddingVertical: 12,
|
|
79
|
+
width: '100%'
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=Lazy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useState","StyleSheet","Animated","FadeIn","FadeOut","useStableCallback","jsx","_jsx","Lazy","placeholder","renderPlaceholder","placeholderStyle","placeholderProps","containerProps","disableEntering","disableExiting","entering","exiting","enteringDuration","enteringDelay","exitingDuration","focused","duration","delay","onMount","children","style","canMount","setCanMount","mountNotifiedRef","stableOnMount","current","placeholderPointerEvents","pointerEvents","placeholderContainerStyle","_placeholderPointerEvents","restPlaceholderProps","containerStyle","restContainerProps","enteringAnimation","undefined","exitingAnimation","View","styles","container","create","width","flex","height","paddingVertical"],"sourceRoot":"..\\..\\src","sources":["Lazy.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { memo, useCallback, useEffect, useMemo } from "react";
|
|
4
|
+
import { LegendList } from "@legendapp/list/react-native";
|
|
5
|
+
import { StyleSheet, View } from "react-native";
|
|
6
|
+
import { GestureDetector } from "react-native-gesture-handler";
|
|
7
|
+
import Animated, { useAnimatedReaction, useAnimatedRef, useAnimatedScrollHandler, useComposedEventHandler, useSharedValue } from "react-native-reanimated";
|
|
8
|
+
import { useCollapsibleTabsContext } from "./Context";
|
|
9
|
+
import { useTabSelfContext } from "./Tab";
|
|
10
|
+
import { useStableCallback } from "./useStableCallback";
|
|
11
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
const AnimatedLegendList = Animated.createAnimatedComponent(LegendList);
|
|
13
|
+
const CollapsibleLegendList = ({
|
|
14
|
+
onLayout,
|
|
15
|
+
onContentSizeChange,
|
|
16
|
+
...props
|
|
17
|
+
}) => {
|
|
18
|
+
const {
|
|
19
|
+
listGestures,
|
|
20
|
+
activeTabIndex,
|
|
21
|
+
activeListOffset,
|
|
22
|
+
registerListScroller
|
|
23
|
+
} = useCollapsibleTabsContext();
|
|
24
|
+
const {
|
|
25
|
+
index
|
|
26
|
+
} = useTabSelfContext();
|
|
27
|
+
const selfOffset = useSharedValue(0);
|
|
28
|
+
const listRef = useAnimatedRef();
|
|
29
|
+
const onScroll = useAnimatedScrollHandler(event => {
|
|
30
|
+
selfOffset.value = event.contentOffset.y;
|
|
31
|
+
if (activeTabIndex.value === index) activeListOffset.value = event.contentOffset.y;
|
|
32
|
+
});
|
|
33
|
+
const composedScrollEvent = useComposedEventHandler(props.onScroll ? [onScroll, props.onScroll] : [onScroll]);
|
|
34
|
+
useAnimatedReaction(() => activeTabIndex.value, value => {
|
|
35
|
+
if (value === index) activeListOffset.value = selfOffset.value;
|
|
36
|
+
}, [index]);
|
|
37
|
+
const scroller = useMemo(() => (animated = true) => {
|
|
38
|
+
listRef.current?.scrollToOffset({
|
|
39
|
+
offset: 0,
|
|
40
|
+
animated
|
|
41
|
+
});
|
|
42
|
+
}, [listRef]);
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
registerListScroller(index, scroller);
|
|
45
|
+
return () => registerListScroller(index, null);
|
|
46
|
+
}, [index, registerListScroller, scroller]);
|
|
47
|
+
const stableLayout = useStableCallback(onLayout);
|
|
48
|
+
const stableContentSizeChange = useStableCallback(onContentSizeChange);
|
|
49
|
+
const handleLayout = useCallback(event => {
|
|
50
|
+
stableLayout?.(event);
|
|
51
|
+
}, [stableLayout]);
|
|
52
|
+
const handleContentSizeChange = useCallback((width, height) => {
|
|
53
|
+
stableContentSizeChange?.(width, height);
|
|
54
|
+
}, [stableContentSizeChange]);
|
|
55
|
+
return /*#__PURE__*/_jsx(View, {
|
|
56
|
+
style: styles.view,
|
|
57
|
+
collapsable: false,
|
|
58
|
+
children: /*#__PURE__*/_jsx(GestureDetector, {
|
|
59
|
+
gesture: listGestures[index],
|
|
60
|
+
children: /*#__PURE__*/_jsx(AnimatedLegendList, {
|
|
61
|
+
ref: listRef,
|
|
62
|
+
scrollEventThrottle: 16,
|
|
63
|
+
showsVerticalScrollIndicator: true,
|
|
64
|
+
directionalLockEnabled: true,
|
|
65
|
+
keyboardShouldPersistTaps: "handled",
|
|
66
|
+
...props,
|
|
67
|
+
onScroll: composedScrollEvent,
|
|
68
|
+
onLayout: handleLayout,
|
|
69
|
+
onContentSizeChange: handleContentSizeChange
|
|
70
|
+
})
|
|
71
|
+
})
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
const styles = StyleSheet.create({
|
|
75
|
+
view: {
|
|
76
|
+
position: "relative"
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
CollapsibleLegendList.displayName = "CollapsibleTabs.CollapsibleLegendList";
|
|
80
|
+
export default /*#__PURE__*/memo(CollapsibleLegendList);
|
|
81
|
+
//# sourceMappingURL=LegendList.js.map
|