import React from "react"; import { Pressable, ScrollView, StyleSheet, Text, View } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { fonts, text } from "../theme/tokens"; import { useTheme } from "../theme/useTheme"; import { Button } from "../components/Button"; import { Icon } from "../components/Icon"; import { Card, Divider, Mono, SectionLabel, StatusDot, } from "../components/primitives"; import { TabBar } from "../components/TabBar"; import { useAppState } from "../state/AppState"; import { recentCheckmarks, waitingAgents, type Checkmark, type WaitingAgent, } from "../data/mock"; export function FleetScreen() { const { colors } = useTheme(); const insets = useSafeAreaInsets(); const { go, notAnswered } = useAppState(); const waiting = waitingAgents.filter((a) => !(a.clearsOnAnswer && !notAnswered)); const stats = [ { label: "Running", value: "6", tint: colors.textHeading }, { label: "Waiting", value: "3", tint: colors.warning }, { label: "Done", value: "42", tint: colors.textHeading }, ]; return ( Fleet 12 agents ยท 3 waiting on you {stats.map((s) => ( {s.label} {s.value} ))} Waiting on you {waiting.map((a, i) => ( {i > 0 && } go("answer")} /> ))} Recent checkmarks {recentCheckmarks.map((c, i) => ( {i > 0 && } go("detail")} /> ))} ); } function WaitingRow({ agent, onAnswer, }: { agent: WaitingAgent; onAnswer: () => void; }) { const { colors } = useTheme(); return ( {agent.id} {agent.title} {agent.question} ); } function CheckmarkRow({ checkmark, onPress, }: { checkmark: Checkmark; onPress: () => void; }) { const { colors } = useTheme(); const dot = checkmark.status === "positive" ? colors.positive : colors.danger; return ( [ styles.checkmarkRow, pressed && { backgroundColor: colors.surfaceSunken }, ]} > {checkmark.title} {checkmark.meta} ); } const styles = StyleSheet.create({ page: { flex: 1 }, content: { paddingTop: 8, paddingHorizontal: 20, paddingBottom: 20 }, headerRow: { flexDirection: "row", alignItems: "center", gap: 12, marginTop: 12, marginBottom: 20, }, statsRow: { flexDirection: "row", gap: 12, marginBottom: 20 }, statCard: { flex: 1, paddingVertical: 14, paddingHorizontal: 16 }, statValue: { fontFamily: fonts.monoSemiBold, fontSize: 24, lineHeight: 28, marginTop: 4, }, overline: { marginBottom: 10 }, section: { marginBottom: 20 }, rowPad: { paddingVertical: 14, paddingHorizontal: 16 }, waitingTop: { flexDirection: "row", alignItems: "center", gap: 8 }, waitingBottom: { flexDirection: "row", alignItems: "center", gap: 10, marginTop: 8, }, rowTitle: { fontFamily: fonts.bodySemiBold, fontSize: 13, lineHeight: 16, }, checkmarkRow: { flexDirection: "row", alignItems: "center", gap: 12, paddingVertical: 14, paddingHorizontal: 16, minHeight: 44, }, });