| author | |
| committer | |
| log | ce96e4c3de1973c7e0088ef8806043841f902080 |
| tree | 07ecd8b3f29f3d0a598b46673445ac4423d40514 |
| parent | 54084ae1e6c32809db040e4fa571c80fdf2d8ae4 |
| signature | Signed by PGP key B5690EEEBB952194 |
10 files changed, 38 insertions(+), 34 deletions(-)
apps/mobile/src/features/archive/ArchivedThreadsScreen.tsx+2-2| ... | ... | @@ -190,7 +190,7 @@ function ArchivedThreadRow(props: { |
| 190 | 190 | readonly thread: EnvironmentThreadShell; |
| 191 | 191 | }) { |
| 192 | 192 | const { width: windowWidth } = useWindowDimensions(); |
| 193 | const cardColor = useUniwindTheme()["--color-card"]; | |
| 193 | const cardColor = useUniwindTheme()["--color-grouped-card"]; | |
| 194 | 194 | const timestamp = relativeTime(props.thread.archivedAt ?? props.thread.updatedAt); |
| 195 | 195 | const subtitle = [props.environmentLabel, props.thread.branch].filter((part): part is string => |
| 196 | 196 | Boolean(part), |
| ... | ... | @@ -224,7 +224,7 @@ function ArchivedThreadRow(props: { |
| 224 | 224 | > |
| 225 | 225 | {() => ( |
| 226 | 226 | <View |
| 227 | className={`flex-row items-center gap-3 bg-card px-4 py-3 ${props.isLast ? "" : "border-b border-separator"}`} | |
| 227 | className={`flex-row items-center gap-3 bg-grouped-card px-4 py-3 ${props.isLast ? "" : "border-b border-separator"}`} | |
| 228 | 228 | > |
| 229 | 229 | <View className="h-[34px] w-[34px] items-center justify-center rounded-[11px] bg-subtle"> |
| 230 | 230 | <SymbolView |
apps/mobile/src/features/cloud/ConnectOnboardingRouteScreen.tsx+1-1| ... | ... | @@ -117,7 +117,7 @@ function ConfiguredConnectOnboardingRouteScreen() { |
| 117 | 117 | showHeader={false} |
| 118 | 118 | /> |
| 119 | 119 | ) : ( |
| 120 | <View collapsable={false} className="rounded-[24px] bg-card p-5"> | |
| 120 | <View collapsable={false} className="rounded-[24px] bg-grouped-card p-5"> | |
| 121 | 121 | <Text className="text-sm leading-normal text-foreground-muted"> |
| 122 | 122 | Sign in to your T3 account to set up T3 Connect. |
| 123 | 123 | </Text> |
apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx+2-2| ... | ... | @@ -226,7 +226,7 @@ export function ConnectionsNewRouteScreen({ |
| 226 | 226 | /> |
| 227 | 227 | </View> |
| 228 | 228 | ) : ( |
| 229 | <View className="items-center gap-3 rounded-[24px] border-continuous bg-card px-5 py-8"> | |
| 229 | <View className="items-center gap-3 rounded-[24px] border-continuous bg-grouped-card px-5 py-8"> | |
| 230 | 230 | <Text className="text-center text-sm leading-normal text-foreground-muted"> |
| 231 | 231 | Camera permission is required to scan a QR code. |
| 232 | 232 | </Text> |
| ... | ... | @@ -242,7 +242,7 @@ export function ConnectionsNewRouteScreen({ |
| 242 | 242 | </View> |
| 243 | 243 | ) |
| 244 | 244 | ) : ( |
| 245 | <View collapsable={false} className="gap-4 rounded-[24px] bg-card p-4"> | |
| 245 | <View collapsable={false} className="gap-4 rounded-[24px] bg-grouped-card p-4"> | |
| 246 | 246 | <ConnectionFormField |
| 247 | 247 | label="Host" |
| 248 | 248 | autoCapitalize="none" |
apps/mobile/src/features/projects/AddProjectScreen.tsx+6-5| ... | ... | @@ -175,8 +175,8 @@ function ListSection(props: { readonly children: ReactNode }) { |
| 175 | 175 | <View |
| 176 | 176 | className={ |
| 177 | 177 | Platform.OS === "android" |
| 178 | ? "overflow-hidden rounded-[28px] bg-card" | |
| 179 | : "overflow-hidden rounded-[24px] bg-card" | |
| 178 | ? "overflow-hidden rounded-[28px] bg-grouped-card" | |
| 179 | : "overflow-hidden rounded-[24px] bg-grouped-card" | |
| 180 | 180 | } |
| 181 | 181 | > |
| 182 | 182 | {props.children} |
| ... | ... | @@ -197,6 +197,7 @@ function ListRow(props: { |
| 197 | 197 | if (Platform.OS === "android") { |
| 198 | 198 | return ( |
| 199 | 199 | <MaterialListRow |
| 200 | className="bg-grouped-card" | |
| 200 | 201 | title={props.title} |
| 201 | 202 | subtitle={props.subtitle} |
| 202 | 203 | leading={props.icon} |
| ... | ... | @@ -213,7 +214,7 @@ function ListRow(props: { |
| 213 | 214 | disabled={props.disabled} |
| 214 | 215 | onPress={props.onPress} |
| 215 | 216 | className={cn( |
| 216 | "bg-card px-3.5 py-2.5 active:opacity-70", | |
| 217 | "bg-grouped-card px-3.5 py-2.5 active:opacity-70", | |
| 217 | 218 | !props.isFirst && "border-t border-border-subtle", |
| 218 | 219 | props.disabled && "opacity-[0.45]", |
| 219 | 220 | )} |
| ... | ... | @@ -448,7 +449,7 @@ function EmptyEnvironmentState() { |
| 448 | 449 | const navigation = useNavigation(); |
| 449 | 450 | |
| 450 | 451 | return ( |
| 451 | <View className="items-center gap-3 rounded-2xl bg-card px-5 py-8"> | |
| 452 | <View className="items-center gap-3 rounded-2xl bg-grouped-card px-5 py-8"> | |
| 452 | 453 | <Text className="text-center text-lg font-t3-bold">Environment unavailable</Text> |
| 453 | 454 | <Text className="text-center text-sm leading-normal text-foreground-muted"> |
| 454 | 455 | Start or reconnect an environment before adding a project. |
| ... | ... | @@ -1333,7 +1334,7 @@ export function AddProjectDestinationScreen(props: { |
| 1333 | 1334 | <AddProjectShell title="Clone destination"> |
| 1334 | 1335 | {error ? <ErrorBanner message={error} /> : null} |
| 1335 | 1336 | {repositoryTitle ? ( |
| 1336 | <View className="rounded-[24px] bg-card px-4 py-3"> | |
| 1337 | <View className="rounded-[24px] bg-grouped-card px-4 py-3"> | |
| 1337 | 1338 | <Text className="text-base font-t3-bold">{repositoryTitle}</Text> |
| 1338 | 1339 | <Text className="mt-0.5 text-xs text-foreground-muted" numberOfLines={2}> |
| 1339 | 1340 | {remoteUrl} |
apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx+5-4| ... | ... | @@ -54,6 +54,7 @@ function SelectionRow(props: { |
| 54 | 54 | if (Platform.OS === "android") { |
| 55 | 55 | return ( |
| 56 | 56 | <MaterialListRow |
| 57 | className="bg-grouped-card" | |
| 57 | 58 | title={props.title} |
| 58 | 59 | subtitle={props.subtitle} |
| 59 | 60 | leading={ |
| ... | ... | @@ -85,7 +86,7 @@ function SelectionRow(props: { |
| 85 | 86 | accessibilityRole="radio" |
| 86 | 87 | accessibilityState={{ checked: props.selected }} |
| 87 | 88 | className={cn( |
| 88 | "min-h-14 flex-row items-center gap-3 bg-card px-4 py-3 active:bg-subtle", | |
| 89 | "min-h-14 flex-row items-center gap-3 bg-grouped-card px-4 py-3 active:bg-subtle", | |
| 89 | 90 | !props.isLast && "border-b border-border-subtle", |
| 90 | 91 | )} |
| 91 | 92 | disabled={props.disabled} |
| ... | ... | @@ -131,7 +132,7 @@ function ToggleRow(props: { |
| 131 | 132 | readonly onValueChange: (value: boolean) => void; |
| 132 | 133 | }) { |
| 133 | 134 | return ( |
| 134 | <View className="min-h-14 flex-row items-center gap-3 bg-card px-4 py-3"> | |
| 135 | <View className="min-h-14 flex-row items-center gap-3 bg-grouped-card px-4 py-3"> | |
| 135 | 136 | <Text |
| 136 | 137 | className={cn( |
| 137 | 138 | "min-w-0 flex-1 text-base text-foreground", |
| ... | ... | @@ -192,8 +193,8 @@ function PickerSurface(props: { readonly children: ReactNode }) { |
| 192 | 193 | <View |
| 193 | 194 | className={ |
| 194 | 195 | Platform.OS === "android" |
| 195 | ? "overflow-hidden rounded-[28px] bg-card" | |
| 196 | : "overflow-hidden rounded-2xl bg-card" | |
| 196 | ? "overflow-hidden rounded-[28px] bg-grouped-card" | |
| 197 | : "overflow-hidden rounded-2xl bg-grouped-card" | |
| 197 | 198 | } |
| 198 | 199 | > |
| 199 | 200 | {props.children} |
apps/mobile/src/features/threads/NewTaskRouteScreen.tsx+9-7| ... | ... | @@ -314,8 +314,9 @@ export function NewTaskRouteScreen({ route }: StaticScreenProps<NewTaskRoutePara |
| 314 | 314 | > |
| 315 | 315 | {canStartScratch && listScopes.length > 0 ? ( |
| 316 | 316 | Platform.OS === "android" ? ( |
| 317 | <View collapsable={false} className="overflow-hidden rounded-[28px] bg-card"> | |
| 317 | <View collapsable={false} className="overflow-hidden rounded-[28px] bg-grouped-card"> | |
| 318 | 318 | <MaterialListRow |
| 319 | className="bg-grouped-card" | |
| 319 | 320 | title="No project" |
| 320 | 321 | subtitle="Start a task without a project" |
| 321 | 322 | onPress={() => void startScratch()} |
| ... | ... | @@ -330,12 +331,12 @@ export function NewTaskRouteScreen({ route }: StaticScreenProps<NewTaskRoutePara |
| 330 | 331 | /> |
| 331 | 332 | </View> |
| 332 | 333 | ) : ( |
| 333 | <View collapsable={false} className="overflow-hidden rounded-[24px] bg-card"> | |
| 334 | <View collapsable={false} className="overflow-hidden rounded-[24px] bg-grouped-card"> | |
| 334 | 335 | <Pressable |
| 335 | 336 | accessibilityRole="button" |
| 336 | 337 | accessibilityLabel="No project" |
| 337 | 338 | onPress={() => void startScratch()} |
| 338 | className="flex-row items-center gap-3 bg-card px-4 py-3.5" | |
| 339 | className="flex-row items-center gap-3 bg-grouped-card px-4 py-3.5" | |
| 339 | 340 | > |
| 340 | 341 | <View className="h-7 w-7 items-center justify-center"> |
| 341 | 342 | <SymbolView |
| ... | ... | @@ -366,7 +367,7 @@ export function NewTaskRouteScreen({ route }: StaticScreenProps<NewTaskRoutePara |
| 366 | 367 | collapsable={false} |
| 367 | 368 | className={cn( |
| 368 | 369 | "items-center gap-3 px-6 py-8", |
| 369 | Platform.OS !== "android" && "rounded-[24px] bg-card", | |
| 370 | Platform.OS !== "android" && "rounded-[24px] bg-grouped-card", | |
| 370 | 371 | )} |
| 371 | 372 | > |
| 372 | 373 | {projectEmptyState.loading ? ( |
| ... | ... | @@ -443,8 +444,8 @@ export function NewTaskRouteScreen({ route }: StaticScreenProps<NewTaskRoutePara |
| 443 | 444 | collapsable={false} |
| 444 | 445 | className={ |
| 445 | 446 | Platform.OS === "android" |
| 446 | ? "overflow-hidden rounded-[28px] bg-card" | |
| 447 | : "overflow-hidden rounded-[24px] bg-card" | |
| 447 | ? "overflow-hidden rounded-[28px] bg-grouped-card" | |
| 448 | : "overflow-hidden rounded-[24px] bg-grouped-card" | |
| 448 | 449 | } |
| 449 | 450 | > |
| 450 | 451 | {visibleScopes.map((scope, scopeIndex) => { |
| ... | ... | @@ -456,6 +457,7 @@ export function NewTaskRouteScreen({ route }: StaticScreenProps<NewTaskRoutePara |
| 456 | 457 | if (Platform.OS === "android") { |
| 457 | 458 | return ( |
| 458 | 459 | <MaterialListRow |
| 460 | className="bg-grouped-card" | |
| 459 | 461 | key={scope.key} |
| 460 | 462 | title={scope.title} |
| 461 | 463 | subtitle={ |
| ... | ... | @@ -488,7 +490,7 @@ export function NewTaskRouteScreen({ route }: StaticScreenProps<NewTaskRoutePara |
| 488 | 490 | accessibilityLabel={scope.title} |
| 489 | 491 | disabled={reservedDestinationProject !== null} |
| 490 | 492 | onPress={() => void selectProject(selectionTarget)} |
| 491 | className="flex-row items-center gap-3 bg-card px-4 py-3.5" | |
| 493 | className="flex-row items-center gap-3 bg-grouped-card px-4 py-3.5" | |
| 492 | 494 | > |
| 493 | 495 | <View className="h-7 w-7 items-center justify-center"> |
| 494 | 496 | <ProjectFavicon |
apps/mobile/src/features/threads/ThreadSettingsRows.shared.tsx+2-2| ... | ... | @@ -41,7 +41,7 @@ export function ModelRowContent( |
| 41 | 41 | <View |
| 42 | 42 | style={props.minimumHeight === undefined ? undefined : { minHeight: props.minimumHeight }} |
| 43 | 43 | className={cn( |
| 44 | "mx-4 min-h-11 flex-row items-center gap-2 bg-card px-4", | |
| 44 | "mx-4 min-h-11 flex-row items-center gap-2 bg-grouped-card px-4", | |
| 45 | 45 | props.selectedClassName, |
| 46 | 46 | props.isFirst && "rounded-t-2xl", |
| 47 | 47 | props.isLast ? "rounded-b-2xl" : "border-b border-border-subtle", |
| ... | ... | @@ -123,7 +123,7 @@ export function ChoiceRowContent(props: ChoiceRowProps & RowSelectionProps) { |
| 123 | 123 | onPress={props.onPress} |
| 124 | 124 | style={props.minimumHeight === undefined ? undefined : { minHeight: props.minimumHeight }} |
| 125 | 125 | className={cn( |
| 126 | "min-h-14 flex-row items-center gap-3 bg-card px-4 py-3 active:bg-subtle", | |
| 126 | "min-h-14 flex-row items-center gap-3 bg-grouped-card px-4 py-3 active:bg-subtle", | |
| 127 | 127 | !props.isLast && "border-b border-border-subtle", |
| 128 | 128 | )} |
| 129 | 129 | > |
apps/mobile/src/features/threads/ThreadSettingsSheet.tsx+5-5| ... | ... | @@ -186,7 +186,7 @@ function DisclosureRow(props: { |
| 186 | 186 | accessibilityRole="button" |
| 187 | 187 | onPress={props.onPress} |
| 188 | 188 | className={cn( |
| 189 | "min-h-11 flex-row items-center gap-2 bg-card px-4 py-2 active:bg-subtle android:min-h-14", | |
| 189 | "min-h-11 flex-row items-center gap-2 bg-grouped-card px-4 py-2 active:bg-subtle android:min-h-14", | |
| 190 | 190 | !props.isLast && "border-b border-border-subtle", |
| 191 | 191 | )} |
| 192 | 192 | > |
| ... | ... | @@ -216,7 +216,7 @@ function SwitchRow(props: { |
| 216 | 216 | return ( |
| 217 | 217 | <View |
| 218 | 218 | className={cn( |
| 219 | "min-h-11 flex-row items-center justify-between bg-card px-4 py-1", | |
| 219 | "min-h-11 flex-row items-center justify-between bg-grouped-card px-4 py-1", | |
| 220 | 220 | !props.isLast && "border-b border-border-subtle", |
| 221 | 221 | )} |
| 222 | 222 | > |
| ... | ... | @@ -700,7 +700,7 @@ function ThreadSettingsOptionsItem(props: { |
| 700 | 700 | <ChatGptSharingStatus provider={selectedProvider} /> |
| 701 | 701 | <Text className="px-5 pb-2 pt-2 text-sm font-t3-medium text-foreground-muted">Options</Text> |
| 702 | 702 | <Animated.View |
| 703 | className="mx-4 overflow-hidden rounded-2xl bg-card" | |
| 703 | className="mx-4 overflow-hidden rounded-2xl bg-grouped-card" | |
| 704 | 704 | layout={THREAD_SETTINGS_OPTIONS_LAYOUT_TRANSITION} |
| 705 | 705 | > |
| 706 | 706 | {session.displayedDescriptors.map((descriptor) => { |
| ... | ... | @@ -754,7 +754,7 @@ function ThreadSettingsOptionsItem(props: { |
| 754 | 754 | <Text className="px-5 pb-2 pt-7 text-sm font-t3-medium text-foreground-muted"> |
| 755 | 755 | Catalog |
| 756 | 756 | </Text> |
| 757 | <View className="mx-4 overflow-hidden rounded-2xl bg-card"> | |
| 757 | <View className="mx-4 overflow-hidden rounded-2xl bg-grouped-card"> | |
| 758 | 758 | <SwitchRow |
| 759 | 759 | isLast |
| 760 | 760 | label="Legacy models" |
| ... | ... | @@ -999,7 +999,7 @@ function ThreadSettingsChoiceContent(props: { |
| 999 | 999 | contentInsetAdjustmentBehavior="automatic" |
| 1000 | 1000 | showsVerticalScrollIndicator={false} |
| 1001 | 1001 | > |
| 1002 | <View className="overflow-hidden rounded-2xl bg-card"> | |
| 1002 | <View className="overflow-hidden rounded-2xl bg-grouped-card"> | |
| 1003 | 1003 | {submenuContent.rows.map((row, index) => ( |
| 1004 | 1004 | <ChoiceRow |
| 1005 | 1005 | key={row.id} |
apps/mobile/src/features/usage/UsageLimitsPooled.tsx+4-4| ... | ... | @@ -100,7 +100,7 @@ function PoolWindowCard({ |
| 100 | 100 | }, |
| 101 | 101 | }); |
| 102 | 102 | return ( |
| 103 | <View className="gap-3 rounded-[24px] border-continuous bg-card p-4"> | |
| 103 | <View className="gap-3 rounded-[24px] border-continuous bg-grouped-card p-4"> | |
| 104 | 104 | <View className="flex-row items-start justify-between gap-3"> |
| 105 | 105 | <View className="gap-1"> |
| 106 | 106 | <Text className="text-sm font-t3-medium text-foreground">{label ?? pool.label}</Text> |
| ... | ... | @@ -383,7 +383,7 @@ export function UsageLimitAccountScreen({ route }: AccountScreenProps) { |
| 383 | 383 | </Text> |
| 384 | 384 | ) : null} |
| 385 | 385 | </View> |
| 386 | <View className="gap-3 rounded-[24px] border-continuous bg-card p-4"> | |
| 386 | <View className="gap-3 rounded-[24px] border-continuous bg-grouped-card p-4"> | |
| 387 | 387 | <Text className="text-sm font-t3-medium text-foreground">{window.label}</Text> |
| 388 | 388 | <Text className="text-3xl font-t3-bold tabular-nums text-foreground"> |
| 389 | 389 | {remainingPercent(window)}% left |
| ... | ... | @@ -403,7 +403,7 @@ export function UsageLimitAccountScreen({ route }: AccountScreenProps) { |
| 403 | 403 | </Text> |
| 404 | 404 | ) : null} |
| 405 | 405 | </View> |
| 406 | <View className="gap-2 rounded-[24px] border-continuous bg-card p-4"> | |
| 406 | <View className="gap-2 rounded-[24px] border-continuous bg-grouped-card p-4"> | |
| 407 | 407 | <Text className="text-sm font-t3-medium text-foreground"> |
| 408 | 408 | {account.environments.length ? "Signed in" : "Source"} |
| 409 | 409 | </Text> |
| ... | ... | @@ -418,7 +418,7 @@ export function UsageLimitAccountScreen({ route }: AccountScreenProps) { |
| 418 | 418 | )} |
| 419 | 419 | </View> |
| 420 | 420 | {account.redeem && account.limits.resetCredits ? ( |
| 421 | <View className="gap-3 rounded-[24px] border-continuous bg-card p-4"> | |
| 421 | <View className="gap-3 rounded-[24px] border-continuous bg-grouped-card p-4"> | |
| 422 | 422 | <Text className="text-sm font-t3-medium text-foreground">Reset credits</Text> |
| 423 | 423 | <ResetCredits |
| 424 | 424 | key={account.key} |
apps/mobile/src/features/usage/UsageRouteScreen.tsx+2-2| ... | ... | @@ -457,7 +457,7 @@ function CursorEnableLimits({ |
| 457 | 457 | <ProviderIcon provider="cursor" size={18} /> |
| 458 | 458 | <Text className="text-base font-t3-medium text-foreground">Cursor</Text> |
| 459 | 459 | </View> |
| 460 | <View className="items-start gap-3 rounded-[24px] border-continuous bg-card p-4"> | |
| 460 | <View className="items-start gap-3 rounded-[24px] border-continuous bg-grouped-card p-4"> | |
| 461 | 461 | <Text className="text-xs text-foreground-muted">{CURSOR_KEYCHAIN_COPY}</Text> |
| 462 | 462 | <View className="flex-row flex-wrap gap-2"> |
| 463 | 463 | {environments.map((environment) => ( |
| ... | ... | @@ -491,7 +491,7 @@ function ChartCard(props: { |
| 491 | 491 | const hasActivity = props.daily.some((period) => period.totalTokens > 0); |
| 492 | 492 | |
| 493 | 493 | return ( |
| 494 | <View className="gap-4 rounded-[24px] border-continuous bg-card p-4"> | |
| 494 | <View className="gap-4 rounded-[24px] border-continuous bg-grouped-card p-4"> | |
| 495 | 495 | <View className="gap-0.5"> |
| 496 | 496 | <Text className="text-sm text-foreground-muted"> |
| 497 | 497 | {metric === "cost" ? "Raw token cost" : "Processed tokens"} |