From 4f9f4522e08d299f61d17c7f1901f41a93bfa114 Mon Sep 17 00:00:00 2001 From: flamboh Date: Fri, 16 Oct 2026 22:45:45 +0000 Subject: [PATCH] refactor(mobile): Git and Agents sheet headers take theme colours from classes --- apps/mobile/src/components/ui/Sheet.tsx | 10 ++---- .../features/threads/ThreadAgentsSheet.tsx | 17 +++++----- .../features/threads/git/GitOverviewSheet.tsx | 31 +++++++++---------- apps/mobile/src/native/ThemedScreenStack.tsx | 8 +++++ vite.config.ts | 2 -- 5 files changed, 33 insertions(+), 35 deletions(-) create mode 100644 apps/mobile/src/native/ThemedScreenStack.tsx diff --git a/apps/mobile/src/components/ui/Sheet.tsx b/apps/mobile/src/components/ui/Sheet.tsx index a2b50a084eea..fcf5426809bd 100644 --- a/apps/mobile/src/components/ui/Sheet.tsx +++ b/apps/mobile/src/components/ui/Sheet.tsx @@ -1,16 +1,12 @@ import { useId, useState } from "react"; import { Platform, View } from "react-native"; -import { FormSheet, Screen, ScreenStack, ScreenStackHeaderConfig } from "react-native-screens"; -import { useResolveClassNames, withUniwind } from "uniwind"; +import { FormSheet, ScreenStack } from "react-native-screens"; +import { useResolveClassNames } from "uniwind"; import { nativeHeaderScrollEdgeEffects } from "../../native/StackHeader"; +import { NativeHeader, NativeScreen } from "../../native/ThemedScreenStack"; const HEADER_SCROLL_EDGE_EFFECTS = nativeHeaderScrollEdgeEffects(Platform.OS, Platform.Version); -const NativeScreen = withUniwind(Screen); -const NativeHeader = withUniwind(ScreenStackHeaderConfig, { - color: { fromClassName: "tintColorClassName", styleProperty: "accentColor" }, - titleColor: { fromClassName: "titleColorClassName", styleProperty: "accentColor" }, -}); export type { SheetProps } from "./Sheet.types"; import type { SheetProps } from "./Sheet.types"; diff --git a/apps/mobile/src/features/threads/ThreadAgentsSheet.tsx b/apps/mobile/src/features/threads/ThreadAgentsSheet.tsx index 9c4e599b2b83..2fbf4349ab97 100644 --- a/apps/mobile/src/features/threads/ThreadAgentsSheet.tsx +++ b/apps/mobile/src/features/threads/ThreadAgentsSheet.tsx @@ -13,14 +13,14 @@ import { Atom } from "effect/reactivity"; import * as Haptics from "expo-haptics"; import { useEffect, useState } from "react"; import { Platform, Pressable, ScrollView, View } from "react-native"; -import { Screen, ScreenStack, ScreenStackHeaderConfig } from "react-native-screens"; +import { ScreenStack } from "react-native-screens"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { AndroidSheetHeader } from "../../components/ui/AndroidScreenHeader"; import { AppText as Text } from "../../components/ui/AppText"; -import { useUniwindTheme } from "../../lib/useUniwindTheme"; import { environmentThreadDetails } from "../../state/threads"; import { NativeStackScreenOptions, nativeHeaderScrollEdgeEffects } from "../../native/StackHeader"; +import { NativeHeader, NativeScreen } from "../../native/ThemedScreenStack"; import { SubagentRow } from "./SubagentRow"; import { ScreenContent } from "../../components/ui/ScreenContent"; import { useAdaptiveWorkspaceLayout } from "../layout/AdaptiveWorkspaceLayout"; @@ -46,7 +46,6 @@ export function ThreadAgentsSheet({ route }: StaticScreenProps) { const target = route.params; const navigation = useNavigation(); const insets = useSafeAreaInsets(); - const theme = useUniwindTheme(); const turn = useThreadTurnSubagents(target); const subagents = turn?.subagents ?? []; const hasLiveAgent = (turn?.liveCount ?? 0) > 0; @@ -97,27 +96,27 @@ export function ThreadAgentsSheet({ route }: StaticScreenProps) { return ( - {content} - - + ); diff --git a/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx b/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx index eaf6e53d62a0..5e0f5c3c0c4f 100644 --- a/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx +++ b/apps/mobile/src/features/threads/git/GitOverviewSheet.tsx @@ -21,10 +21,10 @@ import { SymbolView } from "../../../components/ui/AppSymbol"; import { useCallback, useEffect, useMemo, useState } from "react"; import { Platform, Pressable, RefreshControl, ScrollView, View } from "react-native"; -import { Screen, ScreenStack, ScreenStackHeaderConfig } from "react-native-screens"; +import { ScreenStack } from "react-native-screens"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { NativeSheetContent } from "../../../native/NativeSheetContent"; -import { useUniwindTheme } from "../../../lib/useUniwindTheme"; +import { NativeHeader, NativeScreen } from "../../../native/ThemedScreenStack"; import { AndroidHeaderIconButton, AndroidSheetHeader, @@ -90,9 +90,6 @@ function GitOverviewSheetContent(props: GitOverviewSheetProps) { const gitState = useSelectedThreadGitState(); const gitActions = useSelectedThreadGitActions(); const { canWriteSourceControl, canChangeThreadBranch } = gitActions; - const theme = useUniwindTheme(); - const foregroundColor = theme["--color-foreground"]; - const sheetColor = theme["--color-sheet"]; const gitStatus = useEnvironmentQuery( selectedThread !== null && selectedThreadCwd !== null @@ -412,28 +409,28 @@ function GitOverviewSheetContent(props: GitOverviewSheetProps) { return ( - {content} - - + ); @@ -446,28 +443,28 @@ function GitOverviewSheetContent(props: GitOverviewSheetProps) { return ( - {content} - - + ); diff --git a/apps/mobile/src/native/ThemedScreenStack.tsx b/apps/mobile/src/native/ThemedScreenStack.tsx new file mode 100644 index 000000000000..eee1ec9c94ea --- /dev/null +++ b/apps/mobile/src/native/ThemedScreenStack.tsx @@ -0,0 +1,8 @@ +import { Screen, ScreenStackHeaderConfig } from "react-native-screens"; +import { withUniwind } from "uniwind"; + +export const NativeScreen = withUniwind(Screen); +export const NativeHeader = withUniwind(ScreenStackHeaderConfig, { + color: { fromClassName: "tintColorClassName", styleProperty: "accentColor" }, + titleColor: { fromClassName: "titleColorClassName", styleProperty: "accentColor" }, +}); diff --git a/vite.config.ts b/vite.config.ts index 293b6873dcd8..22a7cd7872f0 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -358,10 +358,8 @@ export default defineConfig({ "apps/mobile/src/features/settings/appearance/components/FontSizeSliderRow.tsx", "apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx", "apps/mobile/src/features/threads/ThreadQueueControl.tsx", - "apps/mobile/src/features/threads/ThreadAgentsSheet.tsx", "apps/mobile/src/features/review/ReviewCommentCard.tsx", "apps/mobile/src/features/threads/ThreadSettingsSheet.tsx", - "apps/mobile/src/features/threads/git/GitOverviewSheet.tsx", "apps/mobile/src/features/threads/thread-list-items.tsx", "apps/mobile/src/features/threads/thread-list-v2-items.tsx", "apps/mobile/src/lib/useMobileNavigationTheme.ts",