diff --git a/packages/app/src/components/agent-status-dot.tsx b/packages/app/src/components/agent-status-dot.tsx
index 37ae7a67e..bdf7e360a 100644
--- a/packages/app/src/components/agent-status-dot.tsx
+++ b/packages/app/src/components/agent-status-dot.tsx
@@ -1,3 +1,4 @@
+import { useMemo } from "react";
import { View } from "react-native";
import { StyleSheet, useUnistyles } from "react-native-unistyles";
import {
@@ -41,7 +42,12 @@ export function AgentStatusDot({
return null;
}
- return ;
+ return ;
+}
+
+function AgentStatusDotView({ color }: { color: string }) {
+ const dotStyle = useMemo(() => [styles.dot, { backgroundColor: color }], [color]);
+ return ;
}
function isAgentLifecycleStatus(value: string): value is AgentLifecycleStatus {
diff --git a/packages/app/src/components/archived-agent-callout.tsx b/packages/app/src/components/archived-agent-callout.tsx
index 325e0387d..39bc06ea4 100644
--- a/packages/app/src/components/archived-agent-callout.tsx
+++ b/packages/app/src/components/archived-agent-callout.tsx
@@ -1,4 +1,4 @@
-import { useState } from "react";
+import { useMemo, useState } from "react";
import { View, Text } from "react-native";
import { StyleSheet } from "react-native-unistyles";
import Animated from "react-native-reanimated";
@@ -22,6 +22,11 @@ export function ArchivedAgentCallout({ serverId, agentId }: ArchivedAgentCallout
const { style: keyboardAnimatedStyle } = useKeyboardShiftStyle({ mode: "translate" });
+ const containerStyle = useMemo(
+ () => [styles.container, { paddingBottom: insets.bottom }, keyboardAnimatedStyle],
+ [insets.bottom, keyboardAnimatedStyle],
+ );
+
async function handleUnarchive() {
if (!client || !isConnected || isUnarchiving) return;
setIsUnarchiving(true);
@@ -34,9 +39,7 @@ export function ArchivedAgentCallout({ serverId, agentId }: ArchivedAgentCallout
}
return (
-
+
diff --git a/packages/app/src/components/git-actions-split-button.tsx b/packages/app/src/components/git-actions-split-button.tsx
index 4bc6cd8cb..ce6a11bde 100644
--- a/packages/app/src/components/git-actions-split-button.tsx
+++ b/packages/app/src/components/git-actions-split-button.tsx
@@ -1,4 +1,4 @@
-import { useCallback } from "react";
+import { useCallback, useMemo } from "react";
import { View, Text, ActivityIndicator, Pressable } from "react-native";
import { StyleSheet, useUnistyles } from "react-native-unistyles";
import { ChevronDown, Info, MoreVertical } from "lucide-react-native";
@@ -44,6 +44,8 @@ export function GitActionsSplitButton({ gitActions, hideLabels }: GitActionsSpli
[theme.colors.foreground, toast],
);
+ const overflowMenuButtonStyle = useMemo(() => [styles.iconButton, styles.overflowMenuButton], []);
+
return (
{gitActions.primary ? (
@@ -132,7 +134,7 @@ export function GitActionsSplitButton({ gitActions, hideLabels }: GitActionsSpli
diff --git a/packages/app/src/components/ui/isolated-bottom-sheet-modal.test.tsx b/packages/app/src/components/ui/isolated-bottom-sheet-modal.test.tsx
index bcd43f279..ddec35405 100644
--- a/packages/app/src/components/ui/isolated-bottom-sheet-modal.test.tsx
+++ b/packages/app/src/components/ui/isolated-bottom-sheet-modal.test.tsx
@@ -8,6 +8,10 @@ import {
useIsolatedBottomSheetVisibility,
} from "./isolated-bottom-sheet-modal";
+const SNAP_POINTS_50: (string | number)[] = ["50%"];
+const SNAP_POINTS_60: (string | number)[] = ["60%"];
+const SNAP_POINTS_90: (string | number)[] = ["90%"];
+
const { modalMethods, modalProps } = vi.hoisted(() => ({
modalMethods: {
present: vi.fn(),
@@ -57,7 +61,7 @@ function Harness({ visible, onClose }: { visible: boolean; onClose: () => void }
Sheet content
@@ -112,8 +116,8 @@ describe("IsolatedBottomSheetModal", () => {
it("allows nested sheets inside a parent sheet without creating a sibling provider", () => {
const { getAllByTestId } = render(
-
- {}}>
+
+ {}}>
Nested model picker
,
diff --git a/packages/app/src/desktop/components/pair-device-modal.tsx b/packages/app/src/desktop/components/pair-device-modal.tsx
index 4a774b2c4..548ca557f 100644
--- a/packages/app/src/desktop/components/pair-device-modal.tsx
+++ b/packages/app/src/desktop/components/pair-device-modal.tsx
@@ -7,13 +7,15 @@ export interface PairDeviceModalProps {
testID?: string;
}
+const SNAP_POINTS: string[] = ["82%", "94%"];
+
export function PairDeviceModal({ visible, onClose, testID }: PairDeviceModalProps) {
return (