diff --git a/src/app/export.tsx b/src/app/export.tsx index d2f7a18..e46be02 100644 --- a/src/app/export.tsx +++ b/src/app/export.tsx @@ -12,6 +12,7 @@ import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { ThemedText } from '@/components/themed-text'; import { ThemedView } from '@/components/themed-view'; +import { GlassPill } from '@/components/glass-pill'; import { CloseButton } from '@/features/recorder/close-button'; import { Spacing } from '@/constants/theme'; import { useTheme } from '@/hooks/use-theme'; @@ -605,33 +606,35 @@ function MergedPreview({ {!isPlaying && ( - - - + + + )} - + {meta} - + {working && ( - + - + )} {actionable && ( 0 ? 'Edit captions' : 'Add captions' } style={styles.captionBadge}> - + + + )} @@ -661,11 +664,12 @@ const styles = StyleSheet.create({ alignItems: 'center', justifyContent: 'center', }, + // Shape only — GlassPill owns the surface (Liquid Glass on iOS 26+, dark scrim fallback). + // Matches the recorder preview card's ▶; paddingLeft optically centers the glyph. playBadge: { - width: 56, - height: 56, - borderRadius: 28, - backgroundColor: 'rgba(0,0,0,0.45)', + width: 64, + height: 64, + borderRadius: 32, alignItems: 'center', justifyContent: 'center', paddingLeft: 4, @@ -694,7 +698,6 @@ const styles = StyleSheet.create({ paddingHorizontal: Spacing.two, paddingVertical: 4, borderRadius: 12, - backgroundColor: 'rgba(0,0,0,0.55)', }, metaText: { color: '#fff', @@ -704,15 +707,18 @@ const styles = StyleSheet.create({ letterSpacing: 0.3, }, // Small tappable badge in the top-right of the merged preview — edit/add captions, or a - // spinner while transcribing/downloading. White glyph on a translucent scrim over the video. + // spinner while transcribing/downloading. Placement here; the glass surface (sized to a + // 48pt effective target with hitSlop, like the recorder preview card's badges) is split + // out so the Pressable variant can own the position while GlassPill owns the surface. captionBadge: { position: 'absolute', top: Spacing.two, right: Spacing.two, - width: 30, - height: 30, - borderRadius: 15, - backgroundColor: 'rgba(0,0,0,0.55)', + }, + captionSurface: { + width: 40, + height: 40, + borderRadius: 20, alignItems: 'center', justifyContent: 'center', }, diff --git a/src/app/recorder.tsx b/src/app/recorder.tsx index 89788c1..35fb314 100644 --- a/src/app/recorder.tsx +++ b/src/app/recorder.tsx @@ -12,6 +12,7 @@ import { } from 'react-native-vision-camera'; import { ThemedView } from '@/components/themed-view'; +import { GlassPill } from '@/components/glass-pill'; import { Spacing } from '@/constants/theme'; import { CameraControls } from '@/features/recorder/camera-controls'; import { CloseButton } from '@/features/recorder/close-button'; @@ -444,7 +445,9 @@ export default function RecorderScreen() { { paddingTop: insets.top + Spacing.two, paddingHorizontal: Spacing.three }, ]}> - {formatDurationPadded(totalMs)} + + {formatDurationPadded(totalMs)} + {/* Mirrors the CloseButton's width so the timer stays optically centered. */} @@ -585,15 +588,18 @@ const styles = StyleSheet.create({ alignItems: 'center', justifyContent: 'space-between', }, + // Shape only — GlassPill owns the surface; ties the top bar to the glass close button. + timerPill: { + paddingHorizontal: Spacing.two, + paddingVertical: 4, + borderRadius: 14, + }, timerText: { color: '#fff', fontSize: 16, fontWeight: '600', fontVariant: ['tabular-nums'], letterSpacing: 0.5, - textShadowColor: 'rgba(0,0,0,0.6)', - textShadowOffset: { width: 0, height: 1 }, - textShadowRadius: 3, }, topBarSpacer: { width: 40 }, previewArea: { flex: 1, alignItems: 'center', justifyContent: 'center' }, diff --git a/src/app/subtitles.tsx b/src/app/subtitles.tsx index 8a2bd85..6074389 100644 --- a/src/app/subtitles.tsx +++ b/src/app/subtitles.tsx @@ -2,6 +2,7 @@ import { useEvent } from 'expo'; import { useLiveQuery } from 'drizzle-orm/expo-sqlite'; import { useLocalSearchParams, router } from 'expo-router'; import { Icon, type IconName } from '@/components/icon'; +import { GlassPill } from '@/components/glass-pill'; import { useVideoPlayer, VideoView } from 'expo-video'; import { useEffect, useMemo, useRef, useState } from 'react'; import { @@ -334,9 +335,9 @@ function Editor({ {!isPlaying && ( - + - + )} @@ -513,11 +514,11 @@ const styles = StyleSheet.create({ alignItems: 'center', justifyContent: 'center', }, + // Shape only — GlassPill owns the surface. paddingLeft optically centers the ▶ glyph. playBadge: { width: 48, height: 48, borderRadius: 24, - backgroundColor: 'rgba(0,0,0,0.45)', alignItems: 'center', justifyContent: 'center', paddingLeft: 3,