mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 18:38:55 +00:00
Co-authored-by: Dylan Conway <dylan.conway567@gmail.com> Co-authored-by: Georgijs Vilums <=> Co-authored-by: dylan-conway <dylan-conway@users.noreply.github.com> Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
import Ionicons from "@expo/vector-icons/Ionicons";
|
|
import { PropsWithChildren, useState } from "react";
|
|
import { StyleSheet, TouchableOpacity, useColorScheme } from "react-native";
|
|
|
|
import { ThemedText } from "@/components/ThemedText";
|
|
import { ThemedView } from "@/components/ThemedView";
|
|
import { Colors } from "@/constants/Colors";
|
|
|
|
export function Collapsible({ children, title }: PropsWithChildren & { title: string }) {
|
|
const [isOpen, setIsOpen] = useState(false);
|
|
const theme = useColorScheme() ?? "light";
|
|
|
|
return (
|
|
<ThemedView>
|
|
<TouchableOpacity style={styles.heading} onPress={() => setIsOpen(value => !value)} activeOpacity={0.8}>
|
|
<Ionicons
|
|
name={isOpen ? "chevron-down" : "chevron-forward-outline"}
|
|
size={18}
|
|
color={theme === "light" ? Colors.light.icon : Colors.dark.icon}
|
|
/>
|
|
<ThemedText type="defaultSemiBold">{title}</ThemedText>
|
|
</TouchableOpacity>
|
|
{isOpen && <ThemedView style={styles.content}>{children}</ThemedView>}
|
|
</ThemedView>
|
|
);
|
|
}
|
|
|
|
const styles = StyleSheet.create({
|
|
heading: {
|
|
flexDirection: "row",
|
|
alignItems: "center",
|
|
gap: 6,
|
|
},
|
|
content: {
|
|
marginTop: 6,
|
|
marginLeft: 24,
|
|
},
|
|
});
|