Skip to content

Commit 8f5ac6c

Browse files
committed
fix: typescript
1 parent 81489b4 commit 8f5ac6c

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

src/styles/overlay.tsx

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,69 @@
11
import { Animated } from 'react-native';
22

3+
import color from 'color';
4+
35
export const isAnimatedValue = (
46
it: number | string | Animated.AnimatedInterpolation<number | string>
57
): it is Animated.Value => it instanceof Animated.Value;
8+
9+
// TODO: Revist this function to see if it's still needed
10+
export default function overlay<T extends Animated.Value | number>(
11+
elevation: T,
12+
surfaceColor: string
13+
): T extends number ? string : Animated.AnimatedInterpolation<number | string> {
14+
if (isAnimatedValue(elevation)) {
15+
const inputRange = [0, 1, 2, 3, 8, 24];
16+
17+
// @ts-expect-error: TS doesn't seem to refine the type correctly
18+
return elevation.interpolate({
19+
inputRange,
20+
outputRange: inputRange.map((elevation) => {
21+
return calculateColor(surfaceColor, elevation);
22+
}),
23+
});
24+
}
25+
26+
// @ts-expect-error: TS doesn't seem to refine the type correctly
27+
return calculateColor(surfaceColor, elevation);
28+
}
29+
30+
function calculateColor(surfaceColor: string, elevation: number = 1) {
31+
let overlayTransparency: number;
32+
if (elevation >= 1 && elevation <= 24) {
33+
overlayTransparency = elevationOverlayTransparency[elevation];
34+
} else if (elevation > 24) {
35+
overlayTransparency = elevationOverlayTransparency[24];
36+
} else {
37+
overlayTransparency = elevationOverlayTransparency[1];
38+
}
39+
return color(surfaceColor)
40+
.mix(color('white'), overlayTransparency * 0.01)
41+
.hex();
42+
}
43+
44+
const elevationOverlayTransparency: Record<string, number> = {
45+
1: 5,
46+
2: 7,
47+
3: 8,
48+
4: 9,
49+
5: 10,
50+
6: 11,
51+
7: 11.5,
52+
8: 12,
53+
9: 12.5,
54+
10: 13,
55+
11: 13.5,
56+
12: 14,
57+
13: 14.25,
58+
14: 14.5,
59+
15: 14.75,
60+
16: 15,
61+
17: 15.12,
62+
18: 15.24,
63+
19: 15.36,
64+
20: 15.48,
65+
21: 15.6,
66+
22: 15.72,
67+
23: 15.84,
68+
24: 16,
69+
};

0 commit comments

Comments
 (0)