import { GlassView, isGlassEffectAPIAvailable } from "expo-glass-effect";
import type { ReactNode } from "react";
import { Platform, useColorScheme, View, type ViewProps, type ViewStyle } from "react-native";
export interface GlassSurfaceProps extends ViewProps {
readonly children: ReactNode;
readonly glassEffectStyle?: "clear" | "regular" | "none";
readonly tintColor?: string;
readonly chrome?: "default" | "none";
}
export function GlassSurface({
children,
glassEffectStyle = "regular",
chrome = "default",
tintColor,
style,
...props
}: GlassSurfaceProps) {
const isDarkMode = useColorScheme() === "dark";
const supportsGlass = Platform.OS === "ios" && isGlassEffectAPIAvailable();
const surfaceStyle: ViewStyle = {
borderRadius: 32,
overflow: "hidden",
borderWidth: chrome === "none" ? 0 : 1,
borderColor:
chrome === "none"
? "transparent"
: isDarkMode
? "rgba(255,255,255,0.08)"
: "rgba(226,232,240,0.9)",
backgroundColor:
chrome === "none"
? "transparent"
: isDarkMode
? "rgba(15,23,42,0.78)"
: "rgba(255,255,255,0.72)",
shadowColor: chrome === "none" ? "transparent" : "#020617",
shadowOpacity: chrome === "none" ? 0 : isDarkMode ? 0.22 : 0.08,
shadowRadius: chrome === "none" ? 0 : 28,
shadowOffset:
chrome === "none"
? {
width: 0,
height: 0,
}
: {
width: 0,
height: 14,
},
elevation: chrome === "none" ? 0 : 12,
};
if (supportsGlass) {
return (
{children}
);
}
return (
{children}
);
}