related-ui-components 1.5.9 → 1.6.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.
- package/lib/commonjs/components/Marquee/Marquee.js +9 -10
- package/lib/commonjs/components/Marquee/Marquee.js.map +1 -1
- package/lib/module/components/Marquee/Marquee.js +9 -10
- package/lib/module/components/Marquee/Marquee.js.map +1 -1
- package/lib/typescript/commonjs/components/Marquee/Marquee.d.ts.map +1 -1
- package/lib/typescript/module/components/Marquee/Marquee.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/Marquee/Marquee.tsx +16 -12
|
@@ -23,8 +23,6 @@ const ReusableMarquee = ({
|
|
|
23
23
|
moveTo = "left"
|
|
24
24
|
}) => {
|
|
25
25
|
const translateX = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
26
|
-
|
|
27
|
-
// Memoize calculations that depend on props to avoid unnecessary recalculations
|
|
28
26
|
const {
|
|
29
27
|
ONE_SET_WIDTH,
|
|
30
28
|
DATA
|
|
@@ -35,6 +33,7 @@ const ReusableMarquee = ({
|
|
|
35
33
|
DATA: []
|
|
36
34
|
};
|
|
37
35
|
}
|
|
36
|
+
// Calculate width of one set of items including spacing
|
|
38
37
|
const calculatedWidth = baseData.reduce(sum => sum + itemWidth + itemSpacing, 0);
|
|
39
38
|
// Duplicate data for seamless looping
|
|
40
39
|
const duplicatedData = [...baseData, ...baseData];
|
|
@@ -45,14 +44,13 @@ const ReusableMarquee = ({
|
|
|
45
44
|
}, [baseData, itemWidth, itemSpacing]);
|
|
46
45
|
(0, _react.useEffect)(() => {
|
|
47
46
|
if (DATA.length > 0 && ONE_SET_WIDTH > 0) {
|
|
48
|
-
|
|
49
|
-
const
|
|
47
|
+
const initialTranslateX = moveTo === "left" ? 0 : -ONE_SET_WIDTH;
|
|
48
|
+
const targetTranslateX = moveTo === "left" ? -ONE_SET_WIDTH : 0;
|
|
49
|
+
translateX.value = initialTranslateX;
|
|
50
|
+
const animation = (0, _reactNativeReanimated.withRepeat)((0, _reactNativeReanimated.withTiming)(targetTranslateX, {
|
|
50
51
|
duration: animationSpeedMs,
|
|
51
52
|
easing: _reactNativeReanimated.Easing.linear
|
|
52
|
-
}), -1,
|
|
53
|
-
// Infinite repeat
|
|
54
|
-
false // Don't reverse
|
|
55
|
-
);
|
|
53
|
+
}), -1, false);
|
|
56
54
|
translateX.value = animation;
|
|
57
55
|
return () => {
|
|
58
56
|
(0, _reactNativeReanimated.cancelAnimation)(translateX);
|
|
@@ -62,7 +60,8 @@ const ReusableMarquee = ({
|
|
|
62
60
|
translateX.value = 0;
|
|
63
61
|
return undefined;
|
|
64
62
|
}
|
|
65
|
-
}, [translateX, ONE_SET_WIDTH, DATA, animationSpeedMs]);
|
|
63
|
+
}, [translateX, ONE_SET_WIDTH, DATA, animationSpeedMs, moveTo]); //
|
|
64
|
+
|
|
66
65
|
const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
|
|
67
66
|
return {
|
|
68
67
|
transform: [{
|
|
@@ -87,7 +86,7 @@ const ReusableMarquee = ({
|
|
|
87
86
|
height: itemHeight,
|
|
88
87
|
marginRight: itemSpacing
|
|
89
88
|
}],
|
|
90
|
-
children: renderItem(item, index)
|
|
89
|
+
children: renderItem(item, index % baseData.length)
|
|
91
90
|
}, `${item.id}-${index}`))
|
|
92
91
|
})
|
|
93
92
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeReanimated","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","DEFAULT_ANIMATION_SPEED_MS","ReusableMarquee","data","baseData","renderItem","itemWidth","itemHeight","itemSpacing","animationSpeedMs","style","contentContainerStyle","moveTo","translateX","useSharedValue","ONE_SET_WIDTH","DATA","useMemo","length","calculatedWidth","reduce","sum","duplicatedData","useEffect","value","animation","withRepeat","withTiming","duration","easing","Easing","linear","cancelAnimation","undefined","animatedStyle","useAnimatedStyle","transform","jsx","View","styles","container","height","children","animatedContainer","map","item","index","itemWrapper","width","marginRight","id","StyleSheet","create","overflow","flexDirection","_default","exports"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Marquee/Marquee.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,sBAAA,GAAAH,uBAAA,CAAAC,OAAA;AAOiC,IAAAG,WAAA,GAAAH,OAAA;AAAA,SAAAI,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAN,wBAAAM,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAEjC,MAAMW,0BAA0B,GAAG,KAAK;AAcxC,MAAMC,eAAe,GAAGA,CAAoC;EAC1DC,IAAI,EAAEC,QAAQ;EACdC,UAAU;EACVC,SAAS;EACTC,UAAU;EACVC,WAAW;EACXC,gBAAgB,GAAGR,0BAA0B;EAC7CS,KAAK;EACLC,qBAAqB;EACrBC,MAAM,GAAG;AACc,CAAC,KAAgC;EACxD,MAAMC,UAAU,GAAG,IAAAC,qCAAc,EAAC,CAAC,CAAC
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeReanimated","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","DEFAULT_ANIMATION_SPEED_MS","ReusableMarquee","data","baseData","renderItem","itemWidth","itemHeight","itemSpacing","animationSpeedMs","style","contentContainerStyle","moveTo","translateX","useSharedValue","ONE_SET_WIDTH","DATA","useMemo","length","calculatedWidth","reduce","sum","duplicatedData","useEffect","initialTranslateX","targetTranslateX","value","animation","withRepeat","withTiming","duration","easing","Easing","linear","cancelAnimation","undefined","animatedStyle","useAnimatedStyle","transform","jsx","View","styles","container","height","children","animatedContainer","map","item","index","itemWrapper","width","marginRight","id","StyleSheet","create","overflow","flexDirection","_default","exports"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Marquee/Marquee.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -17,8 +17,6 @@ const ReusableMarquee = ({
|
|
|
17
17
|
moveTo = "left"
|
|
18
18
|
}) => {
|
|
19
19
|
const translateX = useSharedValue(0);
|
|
20
|
-
|
|
21
|
-
// Memoize calculations that depend on props to avoid unnecessary recalculations
|
|
22
20
|
const {
|
|
23
21
|
ONE_SET_WIDTH,
|
|
24
22
|
DATA
|
|
@@ -29,6 +27,7 @@ const ReusableMarquee = ({
|
|
|
29
27
|
DATA: []
|
|
30
28
|
};
|
|
31
29
|
}
|
|
30
|
+
// Calculate width of one set of items including spacing
|
|
32
31
|
const calculatedWidth = baseData.reduce(sum => sum + itemWidth + itemSpacing, 0);
|
|
33
32
|
// Duplicate data for seamless looping
|
|
34
33
|
const duplicatedData = [...baseData, ...baseData];
|
|
@@ -39,14 +38,13 @@ const ReusableMarquee = ({
|
|
|
39
38
|
}, [baseData, itemWidth, itemSpacing]);
|
|
40
39
|
useEffect(() => {
|
|
41
40
|
if (DATA.length > 0 && ONE_SET_WIDTH > 0) {
|
|
42
|
-
|
|
43
|
-
const
|
|
41
|
+
const initialTranslateX = moveTo === "left" ? 0 : -ONE_SET_WIDTH;
|
|
42
|
+
const targetTranslateX = moveTo === "left" ? -ONE_SET_WIDTH : 0;
|
|
43
|
+
translateX.value = initialTranslateX;
|
|
44
|
+
const animation = withRepeat(withTiming(targetTranslateX, {
|
|
44
45
|
duration: animationSpeedMs,
|
|
45
46
|
easing: Easing.linear
|
|
46
|
-
}), -1,
|
|
47
|
-
// Infinite repeat
|
|
48
|
-
false // Don't reverse
|
|
49
|
-
);
|
|
47
|
+
}), -1, false);
|
|
50
48
|
translateX.value = animation;
|
|
51
49
|
return () => {
|
|
52
50
|
cancelAnimation(translateX);
|
|
@@ -56,7 +54,8 @@ const ReusableMarquee = ({
|
|
|
56
54
|
translateX.value = 0;
|
|
57
55
|
return undefined;
|
|
58
56
|
}
|
|
59
|
-
}, [translateX, ONE_SET_WIDTH, DATA, animationSpeedMs]);
|
|
57
|
+
}, [translateX, ONE_SET_WIDTH, DATA, animationSpeedMs, moveTo]); //
|
|
58
|
+
|
|
60
59
|
const animatedStyle = useAnimatedStyle(() => {
|
|
61
60
|
return {
|
|
62
61
|
transform: [{
|
|
@@ -81,7 +80,7 @@ const ReusableMarquee = ({
|
|
|
81
80
|
height: itemHeight,
|
|
82
81
|
marginRight: itemSpacing
|
|
83
82
|
}],
|
|
84
|
-
children: renderItem(item, index)
|
|
83
|
+
children: renderItem(item, index % baseData.length)
|
|
85
84
|
}, `${item.id}-${index}`))
|
|
86
85
|
})
|
|
87
86
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useMemo","View","StyleSheet","Animated","useSharedValue","useAnimatedStyle","withRepeat","withTiming","Easing","cancelAnimation","jsx","_jsx","DEFAULT_ANIMATION_SPEED_MS","ReusableMarquee","data","baseData","renderItem","itemWidth","itemHeight","itemSpacing","animationSpeedMs","style","contentContainerStyle","moveTo","translateX","ONE_SET_WIDTH","DATA","length","calculatedWidth","reduce","sum","duplicatedData","value","animation","duration","easing","linear","undefined","animatedStyle","transform","styles","container","height","children","animatedContainer","map","item","index","itemWrapper","width","marginRight","id","create","overflow","flexDirection"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Marquee/Marquee.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AACjD,SAASC,IAAI,EAAEC,UAAU,
|
|
1
|
+
{"version":3,"names":["React","useEffect","useMemo","View","StyleSheet","Animated","useSharedValue","useAnimatedStyle","withRepeat","withTiming","Easing","cancelAnimation","jsx","_jsx","DEFAULT_ANIMATION_SPEED_MS","ReusableMarquee","data","baseData","renderItem","itemWidth","itemHeight","itemSpacing","animationSpeedMs","style","contentContainerStyle","moveTo","translateX","ONE_SET_WIDTH","DATA","length","calculatedWidth","reduce","sum","duplicatedData","initialTranslateX","targetTranslateX","value","animation","duration","easing","linear","undefined","animatedStyle","transform","styles","container","height","children","animatedContainer","map","item","index","itemWrapper","width","marginRight","id","create","overflow","flexDirection"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Marquee/Marquee.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Marquee.d.ts","sourceRoot":"","sources":["../../../../../src/components/Marquee/Marquee.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"Marquee.d.ts","sourceRoot":"","sources":["../../../../../src/components/Marquee/Marquee.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAClD,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAY3D,KAAK,oBAAoB,CAAC,CAAC,IAAI;IAC7B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,YAAY,CAAC;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,qBAAqB,CAAC,EAAE,SAAS,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EAAE,6HAUzD,oBAAoB,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,YAAY,GAAG,IAmFjD,CAAC;AAcF,eAAe,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Marquee.d.ts","sourceRoot":"","sources":["../../../../../src/components/Marquee/Marquee.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"Marquee.d.ts","sourceRoot":"","sources":["../../../../../src/components/Marquee/Marquee.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAClD,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAY3D,KAAK,oBAAoB,CAAC,CAAC,IAAI;IAC7B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,YAAY,CAAC;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,qBAAqB,CAAC,EAAE,SAAS,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EAAE,6HAUzD,oBAAoB,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,YAAY,GAAG,IAmFjD,CAAC;AAcF,eAAe,eAAe,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useEffect, useMemo } from "react";
|
|
2
|
-
import { View, StyleSheet,
|
|
2
|
+
import { View, StyleSheet, ViewStyle } from "react-native";
|
|
3
3
|
import Animated, {
|
|
4
4
|
useSharedValue,
|
|
5
5
|
useAnimatedStyle,
|
|
@@ -36,11 +36,11 @@ const ReusableMarquee = <T extends { id: string | number }>({
|
|
|
36
36
|
}: ReusableMarqueeProps<T>): React.ReactElement | null => {
|
|
37
37
|
const translateX = useSharedValue(0);
|
|
38
38
|
|
|
39
|
-
// Memoize calculations that depend on props to avoid unnecessary recalculations
|
|
40
39
|
const { ONE_SET_WIDTH, DATA } = useMemo(() => {
|
|
41
40
|
if (!baseData || baseData.length === 0) {
|
|
42
41
|
return { ONE_SET_WIDTH: 0, DATA: [] };
|
|
43
42
|
}
|
|
43
|
+
// Calculate width of one set of items including spacing
|
|
44
44
|
const calculatedWidth = baseData.reduce(
|
|
45
45
|
(sum) => sum + itemWidth + itemSpacing,
|
|
46
46
|
0
|
|
@@ -52,15 +52,20 @@ const ReusableMarquee = <T extends { id: string | number }>({
|
|
|
52
52
|
|
|
53
53
|
useEffect(() => {
|
|
54
54
|
if (DATA.length > 0 && ONE_SET_WIDTH > 0) {
|
|
55
|
-
|
|
55
|
+
const initialTranslateX = moveTo === "left" ? 0 : -ONE_SET_WIDTH;
|
|
56
|
+
const targetTranslateX = moveTo === "left" ? -ONE_SET_WIDTH : 0;
|
|
57
|
+
|
|
58
|
+
translateX.value = initialTranslateX;
|
|
59
|
+
|
|
56
60
|
const animation = withRepeat(
|
|
57
|
-
withTiming(
|
|
61
|
+
withTiming(targetTranslateX, {
|
|
58
62
|
duration: animationSpeedMs,
|
|
59
63
|
easing: Easing.linear,
|
|
60
64
|
}),
|
|
61
|
-
-1,
|
|
62
|
-
false
|
|
65
|
+
-1,
|
|
66
|
+
false
|
|
63
67
|
);
|
|
68
|
+
|
|
64
69
|
translateX.value = animation;
|
|
65
70
|
|
|
66
71
|
return () => {
|
|
@@ -69,9 +74,9 @@ const ReusableMarquee = <T extends { id: string | number }>({
|
|
|
69
74
|
} else {
|
|
70
75
|
cancelAnimation(translateX);
|
|
71
76
|
translateX.value = 0;
|
|
72
|
-
return undefined;
|
|
77
|
+
return undefined;
|
|
73
78
|
}
|
|
74
|
-
}, [translateX, ONE_SET_WIDTH, DATA, animationSpeedMs]);
|
|
79
|
+
}, [translateX, ONE_SET_WIDTH, DATA, animationSpeedMs, moveTo]); //
|
|
75
80
|
|
|
76
81
|
const animatedStyle = useAnimatedStyle(() => {
|
|
77
82
|
return {
|
|
@@ -85,7 +90,6 @@ const ReusableMarquee = <T extends { id: string | number }>({
|
|
|
85
90
|
|
|
86
91
|
return (
|
|
87
92
|
<View style={[styles.container, { height: itemHeight }, style]}>
|
|
88
|
-
{/* Animated container holds items and moves horizontally */}
|
|
89
93
|
<Animated.View
|
|
90
94
|
style={[
|
|
91
95
|
styles.animatedContainer,
|
|
@@ -94,7 +98,6 @@ const ReusableMarquee = <T extends { id: string | number }>({
|
|
|
94
98
|
contentContainerStyle,
|
|
95
99
|
]}
|
|
96
100
|
>
|
|
97
|
-
{/* Map over the duplicated data */}
|
|
98
101
|
{DATA.map((item, index) => (
|
|
99
102
|
<View
|
|
100
103
|
key={`${item.id}-${index}`}
|
|
@@ -107,7 +110,7 @@ const ReusableMarquee = <T extends { id: string | number }>({
|
|
|
107
110
|
},
|
|
108
111
|
]}
|
|
109
112
|
>
|
|
110
|
-
{renderItem(item, index)}
|
|
113
|
+
{renderItem(item, index % baseData.length)}
|
|
111
114
|
</View>
|
|
112
115
|
))}
|
|
113
116
|
</Animated.View>
|
|
@@ -123,7 +126,8 @@ const styles = StyleSheet.create({
|
|
|
123
126
|
animatedContainer: {
|
|
124
127
|
flexDirection: "row",
|
|
125
128
|
},
|
|
126
|
-
itemWrapper: {
|
|
129
|
+
itemWrapper: {
|
|
130
|
+
},
|
|
127
131
|
});
|
|
128
132
|
|
|
129
133
|
export default ReusableMarquee;
|