import React from "react"; import { View, Text } from "react-native"; import { ScrollView } from "react-native-gesture-handler"; import { StyleSheet } from "react-native-unistyles"; import type { DiffLine } from "@/utils/tool-call-parsers"; interface DiffViewerProps { diffLines: DiffLine[]; maxHeight?: number; emptyLabel?: string; } export function DiffViewer({ diffLines, maxHeight = 280, emptyLabel = "No changes to display" }: DiffViewerProps) { if (!diffLines.length) { return ( {emptyLabel} ); } return ( {diffLines.map((line, index) => ( {line.content} ))} ); } const styles = StyleSheet.create((theme) => ({ verticalScroll: {}, verticalContent: { flexGrow: 1, }, horizontalContent: { flexDirection: "column" as const, }, linesContainer: { alignSelf: "flex-start", }, line: { minWidth: "100%", paddingHorizontal: theme.spacing[3], paddingVertical: theme.spacing[1], }, lineText: { fontFamily: "monospace", fontSize: theme.fontSize.xs, color: theme.colors.foreground, }, headerLine: { backgroundColor: theme.colors.muted, }, headerText: { color: theme.colors.mutedForeground, }, addLine: { backgroundColor: theme.colors.palette.green[900], }, addText: { color: theme.colors.palette.green[200], }, removeLine: { backgroundColor: theme.colors.palette.red[900], }, removeText: { color: theme.colors.palette.red[200], }, contextLine: { backgroundColor: theme.colors.card, }, contextText: { color: theme.colors.mutedForeground, }, emptyState: { padding: theme.spacing[4], alignItems: "center" as const, justifyContent: "center" as const, }, emptyText: { fontSize: theme.fontSize.sm, color: theme.colors.mutedForeground, }, }));