| author | |
| committer | |
| log | 6dcde218ad6c07af4dde2a69517c9316adaf732f |
| tree | bca250dc4bd434a55998004b8d2855c706038cc9 |
| parent | 34096519121033ccf72cd43ea5350f9482df188a |
| signature | Signed by PGP key B5690EEEBB952194 |
5 files changed, 222 insertions(+), 57 deletions(-)
apps/mobile/src/features/threads/git/GitBranchesSheet.tsx+69-18| ... | @@ -63,7 +63,7 @@ export function GitBranchesSheet(_props: GitBranchesSheetProps) { | ... | @@ -63,7 +63,7 @@ export function GitBranchesSheet(_props: GitBranchesSheetProps) { |
| 63 | return ( | 63 | return ( |
| 64 | <View | 64 | <View |
| 65 | collapsable={false} | 65 | collapsable={false} |
| 66 | className="bg-sheet ios:flex-1" | 66 | className={Platform.OS === "android" ? "bg-sheet" : "flex-1 bg-sheet"} |
| 67 | style={Platform.OS === "android" ? { maxHeight: windowHeight * 0.92 } : undefined} | 67 | style={Platform.OS === "android" ? { maxHeight: windowHeight * 0.92 } : undefined} |
| 68 | > | 68 | > |
| 69 | {Platform.OS === "android" ? ( | 69 | {Platform.OS === "android" ? ( |
| ... | @@ -83,19 +83,31 @@ export function GitBranchesSheet(_props: GitBranchesSheetProps) { | ... | @@ -83,19 +83,31 @@ export function GitBranchesSheet(_props: GitBranchesSheetProps) { |
| 83 | ) : null} | 83 | ) : null} |
| 84 | <MaterialScreenContent fitToContents> | 84 | <MaterialScreenContent fitToContents> |
| 85 | <ScrollView | 85 | <ScrollView |
| 86 | className="android:shrink android:grow-0 ios:flex-1" | 86 | className={Platform.OS === "android" ? "shrink grow-0" : "flex-1"} |
| 87 | keyboardShouldPersistTaps="handled" | 87 | keyboardShouldPersistTaps="handled" |
| 88 | showsVerticalScrollIndicator={false} | 88 | showsVerticalScrollIndicator={false} |
| 89 | contentInset={{ bottom: Math.max(insets.bottom, 18) + 18 }} | 89 | contentInset={{ bottom: Math.max(insets.bottom, 18) + 18 }} |
| 90 | contentContainerClassName="android:gap-2 android:p-2 ios:gap-4 ios:px-5 ios:pt-2" | 90 | contentContainerClassName={Platform.OS === "android" ? "gap-2 p-2" : "gap-4 px-5 pt-2"} |
| 91 | contentContainerStyle={ | 91 | contentContainerStyle={ |
| 92 | Platform.OS === "android" | 92 | Platform.OS === "android" |
| 93 | ? { paddingBottom: Math.max(insets.bottom, 18) + 18 } | 93 | ? { paddingBottom: Math.max(insets.bottom, 18) + 18 } |
| 94 | : undefined | 94 | : undefined |
| 95 | } | 95 | } |
| 96 | > | 96 | > |
| 97 | <View className="bg-card android:gap-3 android:rounded-[20px] android:p-4 ios:gap-2 ios:rounded-[18px] ios:border ios:border-border ios:px-4 ios:py-4"> | 97 | <View |
| 98 | <Text className="android:text-foreground android:text-base android:font-t3-medium ios:text-foreground-secondary ios:text-2xs ios:font-t3-bold ios:tracking-[1px] ios:uppercase"> | 98 | className={ |
| 99 | Platform.OS === "android" | ||
| 100 | ? "gap-3 rounded-[20px] bg-card p-4" | ||
| 101 | : "gap-2 rounded-[18px] border border-border bg-card px-4 py-4" | ||
| 102 | } | ||
| 103 | > | ||
| 104 | <Text | ||
| 105 | className={ | ||
| 106 | Platform.OS === "android" | ||
| 107 | ? "text-foreground text-base font-t3-medium" | ||
| 108 | : "text-foreground-secondary text-2xs font-t3-bold tracking-[1px] uppercase" | ||
| 109 | } | ||
| 110 | > | ||
| 99 | New branch | 111 | New branch |
| 100 | </Text> | 112 | </Text> |
| 101 | <TextInput | 113 | <TextInput |
| ... | @@ -103,7 +115,7 @@ export function GitBranchesSheet(_props: GitBranchesSheetProps) { | ... | @@ -103,7 +115,7 @@ export function GitBranchesSheet(_props: GitBranchesSheetProps) { |
| 103 | onChangeText={setNewBranchName} | 115 | onChangeText={setNewBranchName} |
| 104 | placeholder="feature/mobile-polish" | 116 | placeholder="feature/mobile-polish" |
| 105 | accessibilityLabel="New branch name" | 117 | accessibilityLabel="New branch name" |
| 106 | className="android:rounded-xl android:bg-sheet-solid ios:rounded-[18px]" | 118 | className={Platform.OS === "android" ? "rounded-xl bg-sheet-solid" : "rounded-[18px]"} |
| 107 | /> | 119 | /> |
| 108 | <SheetActionButton | 120 | <SheetActionButton |
| 109 | icon="plus" | 121 | icon="plus" |
| ... | @@ -121,8 +133,20 @@ export function GitBranchesSheet(_props: GitBranchesSheetProps) { | ... | @@ -121,8 +133,20 @@ export function GitBranchesSheet(_props: GitBranchesSheetProps) { |
| 121 | /> | 133 | /> |
| 122 | </View> | 134 | </View> |
| 123 | 135 | ||
| 124 | <View className="bg-card android:gap-3 android:rounded-[20px] android:p-4 ios:gap-2 ios:rounded-[18px] ios:border ios:border-border ios:px-4 ios:py-4"> | 136 | <View |
| 125 | <Text className="android:text-foreground android:text-base android:font-t3-medium ios:text-foreground-secondary ios:text-2xs ios:font-t3-bold ios:tracking-[1px] ios:uppercase"> | 137 | className={ |
| 138 | Platform.OS === "android" | ||
| 139 | ? "gap-3 rounded-[20px] bg-card p-4" | ||
| 140 | : "gap-2 rounded-[18px] border border-border bg-card px-4 py-4" | ||
| 141 | } | ||
| 142 | > | ||
| 143 | <Text | ||
| 144 | className={ | ||
| 145 | Platform.OS === "android" | ||
| 146 | ? "text-foreground text-base font-t3-medium" | ||
| 147 | : "text-foreground-secondary text-2xs font-t3-bold tracking-[1px] uppercase" | ||
| 148 | } | ||
| 149 | > | ||
| 126 | New worktree | 150 | New worktree |
| 127 | </Text> | 151 | </Text> |
| 128 | {Platform.OS === "android" ? ( | 152 | {Platform.OS === "android" ? ( |
| ... | @@ -133,7 +157,7 @@ export function GitBranchesSheet(_props: GitBranchesSheetProps) { | ... | @@ -133,7 +157,7 @@ export function GitBranchesSheet(_props: GitBranchesSheetProps) { |
| 133 | onChangeText={setWorktreeBaseBranch} | 157 | onChangeText={setWorktreeBaseBranch} |
| 134 | placeholder="main" | 158 | placeholder="main" |
| 135 | accessibilityLabel="Worktree base branch" | 159 | accessibilityLabel="Worktree base branch" |
| 136 | className="android:rounded-xl android:bg-sheet-solid ios:rounded-[18px]" | 160 | className={Platform.OS === "android" ? "rounded-xl bg-sheet-solid" : "rounded-[18px]"} |
| 137 | /> | 161 | /> |
| 138 | {Platform.OS === "android" ? ( | 162 | {Platform.OS === "android" ? ( |
| 139 | <Text className="text-foreground-secondary text-sm">New branch</Text> | 163 | <Text className="text-foreground-secondary text-sm">New branch</Text> |
| ... | @@ -143,7 +167,7 @@ export function GitBranchesSheet(_props: GitBranchesSheetProps) { | ... | @@ -143,7 +167,7 @@ export function GitBranchesSheet(_props: GitBranchesSheetProps) { |
| 143 | onChangeText={setWorktreeBranchName} | 167 | onChangeText={setWorktreeBranchName} |
| 144 | placeholder="feature/mobile-thread" | 168 | placeholder="feature/mobile-thread" |
| 145 | accessibilityLabel="Worktree branch name" | 169 | accessibilityLabel="Worktree branch name" |
| 146 | className="android:rounded-xl android:bg-sheet-solid ios:rounded-[18px]" | 170 | className={Platform.OS === "android" ? "rounded-xl bg-sheet-solid" : "rounded-[18px]"} |
| 147 | /> | 171 | /> |
| 148 | <SheetActionButton | 172 | <SheetActionButton |
| 149 | icon="square.split.2x1" | 173 | icon="square.split.2x1" |
| ... | @@ -169,16 +193,32 @@ export function GitBranchesSheet(_props: GitBranchesSheetProps) { | ... | @@ -169,16 +193,32 @@ export function GitBranchesSheet(_props: GitBranchesSheetProps) { |
| 169 | </View> | 193 | </View> |
| 170 | 194 | ||
| 171 | <View className="gap-2"> | 195 | <View className="gap-2"> |
| 172 | <Text className="text-foreground-secondary android:px-4 android:pb-1 android:pt-3 android:text-sm android:font-t3-medium ios:text-2xs ios:font-t3-bold ios:tracking-[1px] ios:uppercase"> | 196 | <Text |
| 197 | className={ | ||
| 198 | Platform.OS === "android" | ||
| 199 | ? "px-4 pb-1 pt-3 text-foreground-secondary text-sm font-t3-medium" | ||
| 200 | : "text-foreground-secondary text-2xs font-t3-bold tracking-[1px] uppercase" | ||
| 201 | } | ||
| 202 | > | ||
| 173 | Existing branches | 203 | Existing branches |
| 174 | </Text> | 204 | </Text> |
| 175 | {branchesLoading ? ( | 205 | {branchesLoading ? ( |
| 176 | <Text className="text-foreground-secondary text-sm font-medium android:px-4"> | 206 | <Text |
| 207 | className={cn( | ||
| 208 | "text-foreground-secondary text-sm font-medium", | ||
| 209 | Platform.OS === "android" && "px-4", | ||
| 210 | )} | ||
| 211 | > | ||
| 177 | Loading branches... | 212 | Loading branches... |
| 178 | </Text> | 213 | </Text> |
| 179 | ) : null} | 214 | ) : null} |
| 180 | {!branchesLoading && availableBranches.length === 0 ? ( | 215 | {!branchesLoading && availableBranches.length === 0 ? ( |
| 181 | <Text className="text-foreground-secondary text-sm font-medium android:px-4"> | 216 | <Text |
| 217 | className={cn( | ||
| 218 | "text-foreground-secondary text-sm font-medium", | ||
| 219 | Platform.OS === "android" && "px-4", | ||
| 220 | )} | ||
| 221 | > | ||
| 182 | No local branches found. | 222 | No local branches found. |
| 183 | </Text> | 223 | </Text> |
| 184 | ) : null} | 224 | ) : null} |
| ... | @@ -196,10 +236,16 @@ export function GitBranchesSheet(_props: GitBranchesSheetProps) { | ... | @@ -196,10 +236,16 @@ export function GitBranchesSheet(_props: GitBranchesSheetProps) { |
| 196 | <Pressable | 236 | <Pressable |
| 197 | key={branch.name} | 237 | key={branch.name} |
| 198 | className={cn( | 238 | className={cn( |
| 199 | "gap-1 px-4 py-3 disabled:opacity-[0.45] android:rounded-[20px] android:active:bg-subtle ios:rounded-[18px] ios:border", | 239 | "gap-1 px-4 py-3 disabled:opacity-[0.45]", |
| 200 | branch.current | 240 | Platform.OS === "android" |
| 201 | ? "android:bg-secondary ios:border-subtle-strong" | 241 | ? cn( |
| 202 | : "android:bg-card ios:border-border", | 242 | "rounded-[20px] active:bg-subtle", |
| 243 | branch.current ? "bg-secondary" : "bg-card", | ||
| 244 | ) | ||
| 245 | : cn( | ||
| 246 | "rounded-[18px] border", | ||
| 247 | branch.current ? "border-subtle-strong" : "border-border", | ||
| 248 | ), | ||
| 203 | )} | 249 | )} |
| 204 | accessibilityRole="button" | 250 | accessibilityRole="button" |
| 205 | accessibilityState={{ selected: branch.current, disabled: busy || disabled }} | 251 | accessibilityState={{ selected: branch.current, disabled: busy || disabled }} |
| ... | @@ -213,7 +259,12 @@ export function GitBranchesSheet(_props: GitBranchesSheetProps) { | ... | @@ -213,7 +259,12 @@ export function GitBranchesSheet(_props: GitBranchesSheetProps) { |
| 213 | {Platform.OS !== "android" ? ( | 259 | {Platform.OS !== "android" ? ( |
| 214 | <View className="absolute inset-0 rounded-[18px] bg-card" /> | 260 | <View className="absolute inset-0 rounded-[18px] bg-card" /> |
| 215 | ) : null} | 261 | ) : null} |
| 216 | <Text className="text-foreground text-base android:font-t3-medium ios:font-t3-bold"> | 262 | <Text |
| 263 | className={cn( | ||
| 264 | "text-foreground text-base", | ||
| 265 | Platform.OS === "android" ? "font-t3-medium" : "font-t3-bold", | ||
| 266 | )} | ||
| 267 | > | ||
| 217 | {branch.name} | 268 | {branch.name} |
| 218 | </Text> | 269 | </Text> |
| 219 | <Text className="text-foreground-secondary text-xs font-medium">{subtitle}</Text> | 270 | <Text className="text-foreground-secondary text-xs font-medium">{subtitle}</Text> |
apps/mobile/src/features/threads/git/GitCommitSheet.tsx+82-22| ... | @@ -72,7 +72,7 @@ export function GitCommitSheet(_props: GitCommitSheetProps) { | ... | @@ -72,7 +72,7 @@ export function GitCommitSheet(_props: GitCommitSheetProps) { |
| 72 | return ( | 72 | return ( |
| 73 | <View | 73 | <View |
| 74 | collapsable={false} | 74 | collapsable={false} |
| 75 | className="bg-sheet ios:flex-1" | 75 | className={Platform.OS === "android" ? "bg-sheet" : "flex-1 bg-sheet"} |
| 76 | style={Platform.OS === "android" ? { maxHeight: windowHeight * 0.92 } : undefined} | 76 | style={Platform.OS === "android" ? { maxHeight: windowHeight * 0.92 } : undefined} |
| 77 | > | 77 | > |
| 78 | {Platform.OS === "android" ? ( | 78 | {Platform.OS === "android" ? ( |
| ... | @@ -92,21 +92,35 @@ export function GitCommitSheet(_props: GitCommitSheetProps) { | ... | @@ -92,21 +92,35 @@ export function GitCommitSheet(_props: GitCommitSheetProps) { |
| 92 | ) : null} | 92 | ) : null} |
| 93 | <MaterialScreenContent fitToContents> | 93 | <MaterialScreenContent fitToContents> |
| 94 | <ScrollView | 94 | <ScrollView |
| 95 | className="android:shrink android:grow-0 ios:flex-1" | 95 | className={Platform.OS === "android" ? "shrink grow-0" : "flex-1"} |
| 96 | keyboardShouldPersistTaps="handled" | 96 | keyboardShouldPersistTaps="handled" |
| 97 | showsVerticalScrollIndicator={false} | 97 | showsVerticalScrollIndicator={false} |
| 98 | contentInset={{ bottom: Math.max(insets.bottom, 18) + 18 }} | 98 | contentInset={{ bottom: Math.max(insets.bottom, 18) + 18 }} |
| 99 | contentContainerClassName="android:gap-2 android:p-2 ios:gap-4 ios:px-5 ios:pt-2" | 99 | contentContainerClassName={Platform.OS === "android" ? "gap-2 p-2" : "gap-4 px-5 pt-2"} |
| 100 | contentContainerStyle={ | 100 | contentContainerStyle={ |
| 101 | Platform.OS === "android" | 101 | Platform.OS === "android" |
| 102 | ? { paddingBottom: Math.max(insets.bottom, 18) + 18 } | 102 | ? { paddingBottom: Math.max(insets.bottom, 18) + 18 } |
| 103 | : undefined | 103 | : undefined |
| 104 | } | 104 | } |
| 105 | > | 105 | > |
| 106 | <View className="gap-3 bg-card p-4 android:rounded-[20px] ios:rounded-[22px] ios:border ios:border-border"> | 106 | <View |
| 107 | <View className="android:gap-1 ios:flex-row ios:items-center ios:justify-between ios:gap-3"> | 107 | className={cn( |
| 108 | "gap-3 bg-card p-4", | ||
| 109 | Platform.OS === "android" ? "rounded-[20px]" : "rounded-[22px] border border-border", | ||
| 110 | )} | ||
| 111 | > | ||
| 112 | <View | ||
| 113 | className={ | ||
| 114 | Platform.OS === "android" ? "gap-1" : "flex-row items-center justify-between gap-3" | ||
| 115 | } | ||
| 116 | > | ||
| 108 | <Text className="text-foreground-muted text-sm font-medium">Branch</Text> | 117 | <Text className="text-foreground-muted text-sm font-medium">Branch</Text> |
| 109 | <Text className="text-foreground text-base android:font-t3-medium ios:font-t3-bold"> | 118 | <Text |
| 119 | className={cn( | ||
| 120 | "text-foreground text-base", | ||
| 121 | Platform.OS === "android" ? "font-t3-medium" : "font-t3-bold", | ||
| 122 | )} | ||
| 123 | > | ||
| 110 | {gitStatus.data?.refName ?? "(detached HEAD)"} | 124 | {gitStatus.data?.refName ?? "(detached HEAD)"} |
| 111 | </Text> | 125 | </Text> |
| 112 | </View> | 126 | </View> |
| ... | @@ -117,10 +131,20 @@ export function GitCommitSheet(_props: GitCommitSheetProps) { | ... | @@ -117,10 +131,20 @@ export function GitCommitSheet(_props: GitCommitSheetProps) { |
| 117 | ) : null} | 131 | ) : null} |
| 118 | </View> | 132 | </View> |
| 119 | 133 | ||
| 120 | <View className="gap-3 bg-card p-4 android:rounded-[20px] ios:rounded-[22px] ios:border ios:border-border"> | 134 | <View |
| 135 | className={cn( | ||
| 136 | "gap-3 bg-card p-4", | ||
| 137 | Platform.OS === "android" ? "rounded-[20px]" : "rounded-[22px] border border-border", | ||
| 138 | )} | ||
| 139 | > | ||
| 121 | <View className="flex-row items-center justify-between gap-3"> | 140 | <View className="flex-row items-center justify-between gap-3"> |
| 122 | <View className="gap-1"> | 141 | <View className="gap-1"> |
| 123 | <Text className="text-foreground text-base android:font-t3-medium ios:font-t3-bold"> | 142 | <Text |
| 143 | className={cn( | ||
| 144 | "text-foreground text-base", | ||
| 145 | Platform.OS === "android" ? "font-t3-medium" : "font-t3-bold", | ||
| 146 | )} | ||
| 147 | > | ||
| 124 | Files | 148 | Files |
| 125 | </Text> | 149 | </Text> |
| 126 | <Text className="text-foreground-muted text-xs leading-normal"> | 150 | <Text className="text-foreground-muted text-xs leading-normal"> |
| ... | @@ -130,19 +154,39 @@ export function GitCommitSheet(_props: GitCommitSheetProps) { | ... | @@ -130,19 +154,39 @@ export function GitCommitSheet(_props: GitCommitSheetProps) { |
| 130 | <View className="flex-row items-center gap-2"> | 154 | <View className="flex-row items-center gap-2"> |
| 131 | {!allSelected && isEditingFiles ? ( | 155 | {!allSelected && isEditingFiles ? ( |
| 132 | <Pressable | 156 | <Pressable |
| 133 | className="rounded-full px-3 android:min-h-12 android:justify-center android:active:bg-subtle ios:bg-subtle ios:py-2" | 157 | className={ |
| 158 | Platform.OS === "android" | ||
| 159 | ? "min-h-12 justify-center rounded-full px-3 active:bg-subtle" | ||
| 160 | : "bg-subtle rounded-full px-3 py-2" | ||
| 161 | } | ||
| 134 | onPress={() => setExcludedFiles(new Set())} | 162 | onPress={() => setExcludedFiles(new Set())} |
| 135 | > | 163 | > |
| 136 | <Text className="android:text-primary-text android:text-sm android:font-t3-medium ios:text-foreground ios:text-2xs ios:font-t3-bold ios:uppercase"> | 164 | <Text |
| 165 | className={ | ||
| 166 | Platform.OS === "android" | ||
| 167 | ? "text-primary-text text-sm font-t3-medium" | ||
| 168 | : "text-foreground text-2xs font-t3-bold uppercase" | ||
| 169 | } | ||
| 170 | > | ||
| 137 | Reset | 171 | Reset |
| 138 | </Text> | 172 | </Text> |
| 139 | </Pressable> | 173 | </Pressable> |
| 140 | ) : null} | 174 | ) : null} |
| 141 | <Pressable | 175 | <Pressable |
| 142 | className="rounded-full px-3 android:min-h-12 android:justify-center android:active:bg-subtle ios:bg-subtle ios:py-2" | 176 | className={ |
| 177 | Platform.OS === "android" | ||
| 178 | ? "min-h-12 justify-center rounded-full px-3 active:bg-subtle" | ||
| 179 | : "bg-subtle rounded-full px-3 py-2" | ||
| 180 | } | ||
| 143 | onPress={() => setIsEditingFiles((current) => !current)} | 181 | onPress={() => setIsEditingFiles((current) => !current)} |
| 144 | > | 182 | > |
| 145 | <Text className="android:text-primary-text android:text-sm android:font-t3-medium ios:text-foreground ios:text-2xs ios:font-t3-bold ios:uppercase"> | 183 | <Text |
| 184 | className={ | ||
| 185 | Platform.OS === "android" | ||
| 186 | ? "text-primary-text text-sm font-t3-medium" | ||
| 187 | : "text-foreground text-2xs font-t3-bold uppercase" | ||
| 188 | } | ||
| 189 | > | ||
| 146 | {isEditingFiles ? "Done" : "Edit"} | 190 | {isEditingFiles ? "Done" : "Edit"} |
| 147 | </Text> | 191 | </Text> |
| 148 | </Pressable> | 192 | </Pressable> |
| ... | @@ -182,10 +226,15 @@ export function GitCommitSheet(_props: GitCommitSheetProps) { | ... | @@ -182,10 +226,15 @@ export function GitCommitSheet(_props: GitCommitSheetProps) { |
| 182 | <Pressable | 226 | <Pressable |
| 183 | key={file.path} | 227 | key={file.path} |
| 184 | className={cn( | 228 | className={cn( |
| 185 | "px-4 py-3 android:rounded-xl ios:rounded-[18px] ios:border", | 229 | "px-4 py-3", |
| 186 | included | 230 | Platform.OS === "android" |
| 187 | ? "android:bg-subtle ios:border-border" | 231 | ? included |
| 188 | : "ios:border-border-subtle", | 232 | ? "rounded-xl bg-subtle" |
| 233 | : "rounded-xl" | ||
| 234 | : cn( | ||
| 235 | "rounded-[18px] border", | ||
| 236 | included ? "border-border" : "border-border-subtle", | ||
| 237 | ), | ||
| 189 | )} | 238 | )} |
| 190 | accessibilityRole="checkbox" | 239 | accessibilityRole="checkbox" |
| 191 | accessibilityLabel={file.path} | 240 | accessibilityLabel={file.path} |
| ... | @@ -254,8 +303,16 @@ export function GitCommitSheet(_props: GitCommitSheetProps) { | ... | @@ -254,8 +303,16 @@ export function GitCommitSheet(_props: GitCommitSheetProps) { |
| 254 | )} | 303 | )} |
| 255 | </View> | 304 | </View> |
| 256 | 305 | ||
| 257 | <View className="android:gap-3 android:rounded-[20px] android:bg-card android:p-4 ios:gap-2"> | 306 | <View |
| 258 | <Text className="text-foreground android:text-base android:font-t3-medium ios:text-sm ios:font-t3-bold"> | 307 | className={Platform.OS === "android" ? "gap-3 rounded-[20px] bg-card p-4" : "gap-2"} |
| 308 | > | ||
| 309 | <Text | ||
| 310 | className={ | ||
| 311 | Platform.OS === "android" | ||
| 312 | ? "text-foreground text-base font-t3-medium" | ||
| 313 | : "text-foreground text-sm font-t3-bold" | ||
| 314 | } | ||
| 315 | > | ||
| 259 | Commit message | 316 | Commit message |
| 260 | </Text> | 317 | </Text> |
| 261 | <TextInput | 318 | <TextInput |
| ... | @@ -265,12 +322,15 @@ export function GitCommitSheet(_props: GitCommitSheetProps) { | ... | @@ -265,12 +322,15 @@ export function GitCommitSheet(_props: GitCommitSheetProps) { |
| 265 | onChangeText={setDialogCommitMessage} | 322 | onChangeText={setDialogCommitMessage} |
| 266 | placeholder="Leave empty to auto-generate" | 323 | placeholder="Leave empty to auto-generate" |
| 267 | textAlignVertical="top" | 324 | textAlignVertical="top" |
| 268 | className="min-h-[128px] px-4 py-3.5 android:rounded-xl android:bg-sheet-solid ios:rounded-[20px]" | 325 | className={cn( |
| 326 | "min-h-[128px] px-4 py-3.5", | ||
| 327 | Platform.OS === "android" ? "rounded-xl bg-sheet-solid" : "rounded-[20px]", | ||
| 328 | )} | ||
| 269 | /> | 329 | /> |
| 270 | </View> | 330 | </View> |
| 271 | 331 | ||
| 272 | <View className="android:gap-2 ios:flex-row ios:gap-3"> | 332 | <View className={Platform.OS === "android" ? "gap-2" : "flex-row gap-3"}> |
| 273 | <View className="ios:flex-1"> | 333 | <View className={Platform.OS === "android" ? undefined : "flex-1"}> |
| 274 | <SheetActionButton | 334 | <SheetActionButton |
| 275 | icon="arrow.branch" | 335 | icon="arrow.branch" |
| 276 | label="Commit on new branch" | 336 | label="Commit on new branch" |
| ... | @@ -278,7 +338,7 @@ export function GitCommitSheet(_props: GitCommitSheetProps) { | ... | @@ -278,7 +338,7 @@ export function GitCommitSheet(_props: GitCommitSheetProps) { |
| 278 | onPress={() => void runCommitAction(true)} | 338 | onPress={() => void runCommitAction(true)} |
| 279 | /> | 339 | /> |
| 280 | </View> | 340 | </View> |
| 281 | <View className="ios:flex-1"> | 341 | <View className={Platform.OS === "android" ? undefined : "flex-1"}> |
| 282 | <SheetActionButton | 342 | <SheetActionButton |
| 283 | icon="checkmark.circle" | 343 | icon="checkmark.circle" |
| 284 | label="Commit" | 344 | label="Commit" |
apps/mobile/src/features/threads/git/GitConfirmSheet.tsx+25-7| ... | @@ -107,7 +107,7 @@ export function GitConfirmSheet(props: GitConfirmSheetProps) { | ... | @@ -107,7 +107,7 @@ export function GitConfirmSheet(props: GitConfirmSheetProps) { |
| 107 | return ( | 107 | return ( |
| 108 | <View | 108 | <View |
| 109 | collapsable={false} | 109 | collapsable={false} |
| 110 | className="bg-sheet ios:flex-1" | 110 | className={Platform.OS === "android" ? "bg-sheet" : "flex-1 bg-sheet"} |
| 111 | style={Platform.OS === "android" ? { maxHeight: windowHeight * 0.92 } : undefined} | 111 | style={Platform.OS === "android" ? { maxHeight: windowHeight * 0.92 } : undefined} |
| 112 | > | 112 | > |
| 113 | {Platform.OS === "android" ? ( | 113 | {Platform.OS === "android" ? ( |
| ... | @@ -130,31 +130,49 @@ export function GitConfirmSheet(props: GitConfirmSheetProps) { | ... | @@ -130,31 +130,49 @@ export function GitConfirmSheet(props: GitConfirmSheetProps) { |
| 130 | 130 | ||
| 131 | <MaterialScreenContent fitToContents> | 131 | <MaterialScreenContent fitToContents> |
| 132 | <ScrollView | 132 | <ScrollView |
| 133 | className="android:shrink android:grow-0 ios:flex-1" | 133 | className={Platform.OS === "android" ? "shrink grow-0" : "flex-1"} |
| 134 | showsVerticalScrollIndicator={false} | 134 | showsVerticalScrollIndicator={false} |
| 135 | contentContainerClassName="android:gap-2 android:p-2" | 135 | contentContainerClassName={Platform.OS === "android" ? "gap-2 p-2" : undefined} |
| 136 | contentContainerStyle={ | 136 | contentContainerStyle={ |
| 137 | Platform.OS === "android" | 137 | Platform.OS === "android" |
| 138 | ? { paddingBottom: Math.max(insets.bottom, 18) + 8 } | 138 | ? { paddingBottom: Math.max(insets.bottom, 18) + 8 } |
| 139 | : undefined | 139 | : undefined |
| 140 | } | 140 | } |
| 141 | > | 141 | > |
| 142 | <View className="android:gap-2 android:rounded-[20px] android:bg-card android:p-3 ios:items-center ios:gap-1 ios:px-5 ios:pb-3 ios:pt-4"> | 142 | <View |
| 143 | className={ | ||
| 144 | Platform.OS === "android" | ||
| 145 | ? "gap-2 rounded-[20px] bg-card p-3" | ||
| 146 | : "items-center gap-1 px-5 pb-3 pt-4" | ||
| 147 | } | ||
| 148 | > | ||
| 143 | {Platform.OS !== "android" ? ( | 149 | {Platform.OS !== "android" ? ( |
| 144 | <Text className="text-xs font-t3-bold tracking-[1px] uppercase text-foreground-muted"> | 150 | <Text className="text-xs font-t3-bold tracking-[1px] uppercase text-foreground-muted"> |
| 145 | Confirm | 151 | Confirm |
| 146 | </Text> | 152 | </Text> |
| 147 | ) : null} | 153 | ) : null} |
| 148 | <Text className="android:text-xl android:font-t3-medium ios:text-center ios:text-3xl ios:font-t3-bold"> | 154 | <Text |
| 155 | className={ | ||
| 156 | Platform.OS === "android" | ||
| 157 | ? "text-xl font-t3-medium" | ||
| 158 | : "text-center text-3xl font-t3-bold" | ||
| 159 | } | ||
| 160 | > | ||
| 149 | {copy?.title ?? "Run action on default branch?"} | 161 | {copy?.title ?? "Run action on default branch?"} |
| 150 | </Text> | 162 | </Text> |
| 151 | <Text className="text-foreground-secondary leading-normal android:text-base ios:text-center ios:text-sm ios:font-medium"> | 163 | <Text |
| 164 | className={ | ||
| 165 | Platform.OS === "android" | ||
| 166 | ? "text-foreground-secondary text-base leading-normal" | ||
| 167 | : "text-center text-foreground-secondary text-sm font-medium leading-normal" | ||
| 168 | } | ||
| 169 | > | ||
| 152 | {copy?.description ?? "Choose how to continue."} | 170 | {copy?.description ?? "Choose how to continue."} |
| 153 | </Text> | 171 | </Text> |
| 154 | </View> | 172 | </View> |
| 155 | 173 | ||
| 156 | <View | 174 | <View |
| 157 | className="android:gap-2 ios:gap-3 ios:px-5 ios:pt-2" | 175 | className={Platform.OS === "android" ? "gap-2" : "gap-3 px-5 pt-2"} |
| 158 | style={ | 176 | style={ |
| 159 | Platform.OS === "android" | 177 | Platform.OS === "android" |
| 160 | ? undefined | 178 | ? undefined |
apps/mobile/src/features/threads/git/GitOverviewSheet.tsx+20-6| ... | @@ -234,7 +234,7 @@ export function GitOverviewSheet(props: GitOverviewSheetProps) { | ... | @@ -234,7 +234,7 @@ export function GitOverviewSheet(props: GitOverviewSheetProps) { |
| 234 | const content = ( | 234 | const content = ( |
| 235 | <ScrollView | 235 | <ScrollView |
| 236 | alwaysBounceVertical | 236 | alwaysBounceVertical |
| 237 | className="flex-1 android:bg-sheet-solid ios:bg-screen" | 237 | className={Platform.OS === "android" ? "flex-1 bg-sheet-solid" : "flex-1 bg-screen"} |
| 238 | contentInsetAdjustmentBehavior={Platform.OS === "ios" ? "automatic" : "never"} | 238 | contentInsetAdjustmentBehavior={Platform.OS === "ios" ? "automatic" : "never"} |
| 239 | showsVerticalScrollIndicator={false} | 239 | showsVerticalScrollIndicator={false} |
| 240 | contentInset={{ bottom: Math.max(insets.bottom, 18) + 18 }} | 240 | contentInset={{ bottom: Math.max(insets.bottom, 18) + 18 }} |
| ... | @@ -248,9 +248,13 @@ export function GitOverviewSheet(props: GitOverviewSheetProps) { | ... | @@ -248,9 +248,13 @@ export function GitOverviewSheet(props: GitOverviewSheetProps) { |
| 248 | } | 248 | } |
| 249 | > | 249 | > |
| 250 | <View | 250 | <View |
| 251 | className={`overflow-hidden bg-card android:rounded-[20px] ios:border ios:border-border ${ | 251 | className={ |
| 252 | isInspector ? "ios:rounded-2xl ios:px-3 ios:py-1" : "ios:rounded-[22px] ios:px-4 ios:py-1" | 252 | Platform.OS === "android" |
| 253 | }`} | 253 | ? "overflow-hidden rounded-[20px] bg-card" |
| 254 | : isInspector | ||
| 255 | ? "overflow-hidden rounded-2xl border border-border bg-card px-3 py-1" | ||
| 256 | : "overflow-hidden rounded-[22px] border border-border bg-card px-4 py-1" | ||
| 257 | } | ||
| 254 | > | 258 | > |
| 255 | {sheetMenuItems.map(({ item, disabledReason }, index) => ( | 259 | {sheetMenuItems.map(({ item, disabledReason }, index) => ( |
| 256 | <View key={`${item.id}-${item.label}`}> | 260 | <View key={`${item.id}-${item.label}`}> |
| ... | @@ -316,7 +320,11 @@ export function GitOverviewSheet(props: GitOverviewSheetProps) { | ... | @@ -316,7 +320,11 @@ export function GitOverviewSheet(props: GitOverviewSheetProps) { |
| 316 | {linkedPrChains.map((chain) => ( | 320 | {linkedPrChains.map((chain) => ( |
| 317 | <View | 321 | <View |
| 318 | key={threadPullRequestKeyOf(chain.layers[0]!)} | 322 | key={threadPullRequestKeyOf(chain.layers[0]!)} |
| 319 | className="overflow-hidden bg-card android:rounded-[20px] ios:rounded-2xl ios:border ios:border-border ios:px-3 ios:py-1" | 323 | className={ |
| 324 | Platform.OS === "android" | ||
| 325 | ? "overflow-hidden rounded-[20px] bg-card" | ||
| 326 | : "overflow-hidden rounded-2xl border border-border bg-card px-3 py-1" | ||
| 327 | } | ||
| 320 | > | 328 | > |
| 321 | {chain.layers.length > 1 ? ( | 329 | {chain.layers.length > 1 ? ( |
| 322 | <View className="flex-row items-center gap-2 px-1 pt-2 pb-1"> | 330 | <View className="flex-row items-center gap-2 px-1 pt-2 pb-1"> |
| ... | @@ -475,7 +483,13 @@ export function GitOverviewSheet(props: GitOverviewSheetProps) { | ... | @@ -475,7 +483,13 @@ export function GitOverviewSheet(props: GitOverviewSheetProps) { |
| 475 | ) : null} | 483 | ) : null} |
| 476 | 484 | ||
| 477 | {isInspector ? ( | 485 | {isInspector ? ( |
| 478 | <View className="gap-1 px-4 pb-4 pt-3 android:bg-header ios:border-b ios:border-border"> | 486 | <View |
| 487 | className={ | ||
| 488 | Platform.OS === "android" | ||
| 489 | ? "gap-1 bg-header px-4 pb-4 pt-3" | ||
| 490 | : "gap-1 border-b border-border px-4 pb-4 pt-3" | ||
| 491 | } | ||
| 492 | > | ||
| 479 | {Platform.OS === "android" ? ( | 493 | {Platform.OS === "android" ? ( |
| 480 | <View className="absolute right-3 top-4 z-[1]">{refreshMenu}</View> | 494 | <View className="absolute right-3 top-4 z-[1]">{refreshMenu}</View> |
| 481 | ) : ( | 495 | ) : ( |
apps/mobile/src/features/threads/git/gitSheetComponents.tsx+26-4| ... | @@ -71,7 +71,13 @@ export function SheetActionButton(props: { | ... | @@ -71,7 +71,13 @@ export function SheetActionButton(props: { |
| 71 | 71 | ||
| 72 | export function MetaCard(props: { readonly label: string; readonly value: string }) { | 72 | export function MetaCard(props: { readonly label: string; readonly value: string }) { |
| 73 | return ( | 73 | return ( |
| 74 | <View className="bg-card px-4 py-3 android:rounded-[20px] ios:rounded-[18px] ios:border ios:border-border"> | 74 | <View |
| 75 | className={ | ||
| 76 | Platform.OS === "android" | ||
| 77 | ? "rounded-[20px] bg-card px-4 py-3" | ||
| 78 | : "rounded-[18px] border border-border bg-card px-4 py-3" | ||
| 79 | } | ||
| 80 | > | ||
| 75 | <Text className="text-foreground-muted text-2xs font-t3-bold tracking-[0.9px] uppercase"> | 81 | <Text className="text-foreground-muted text-2xs font-t3-bold tracking-[0.9px] uppercase"> |
| 76 | {props.label} | 82 | {props.label} |
| 77 | </Text> | 83 | </Text> |
| ... | @@ -91,11 +97,21 @@ export function SheetListRow(props: { | ... | @@ -91,11 +97,21 @@ export function SheetListRow(props: { |
| 91 | }) { | 97 | }) { |
| 92 | return ( | 98 | return ( |
| 93 | <Pressable | 99 | <Pressable |
| 94 | className="flex-row items-center py-3 disabled:opacity-[0.45] android:min-h-16 android:gap-4 android:px-4 android:active:bg-subtle ios:gap-3 ios:px-1" | 100 | className={ |
| 101 | Platform.OS === "android" | ||
| 102 | ? "min-h-16 flex-row items-center gap-4 px-4 py-3 active:bg-subtle disabled:opacity-[0.45]" | ||
| 103 | : "flex-row items-center gap-3 px-1 py-3 disabled:opacity-[0.45]" | ||
| 104 | } | ||
| 95 | disabled={props.disabled} | 105 | disabled={props.disabled} |
| 96 | onPress={props.onPress} | 106 | onPress={props.onPress} |
| 97 | > | 107 | > |
| 98 | <View className="items-center justify-center android:size-6 ios:bg-subtle ios:h-9 ios:w-9 ios:rounded-full"> | 108 | <View |
| 109 | className={ | ||
| 110 | Platform.OS === "android" | ||
| 111 | ? "size-6 items-center justify-center" | ||
| 112 | : "bg-subtle h-9 w-9 items-center justify-center rounded-full" | ||
| 113 | } | ||
| 114 | > | ||
| 99 | <SymbolView | 115 | <SymbolView |
| 100 | name={props.icon} | 116 | name={props.icon} |
| 101 | size={Platform.OS === "android" ? 24 : 16} | 117 | size={Platform.OS === "android" ? 24 : 16} |
| ... | @@ -104,7 +120,13 @@ export function SheetListRow(props: { | ... | @@ -104,7 +120,13 @@ export function SheetListRow(props: { |
| 104 | /> | 120 | /> |
| 105 | </View> | 121 | </View> |
| 106 | <View className="flex-1 gap-0.5"> | 122 | <View className="flex-1 gap-0.5"> |
| 107 | <Text className="text-foreground text-base android:font-t3-medium ios:font-t3-bold"> | 123 | <Text |
| 124 | className={ | ||
| 125 | Platform.OS === "android" | ||
| 126 | ? "text-foreground text-base font-t3-medium" | ||
| 127 | : "text-foreground text-base font-t3-bold" | ||
| 128 | } | ||
| 129 | > | ||
| 108 | {props.title} | 130 | {props.title} |
| 109 | </Text> | 131 | </Text> |
| 110 | {props.subtitle ? ( | 132 | {props.subtitle ? ( |