diff --git a/src/components/home/CatalogSection.tsx b/src/components/home/CatalogSection.tsx index 78b25f8f..2b043083 100644 --- a/src/components/home/CatalogSection.tsx +++ b/src/components/home/CatalogSection.tsx @@ -80,13 +80,8 @@ const CatalogSection = ({ catalog }: CatalogSectionProps) => { > - {catalog.name} - + {catalog.name} + @@ -96,10 +91,10 @@ const CatalogSection = ({ catalog }: CatalogSectionProps) => { addonId: catalog.addon }) } - style={styles.seeAllButton} + style={styles.viewAllButton} > - See More - + View All + @@ -130,41 +125,45 @@ const CatalogSection = ({ catalog }: CatalogSectionProps) => { const styles = StyleSheet.create({ catalogContainer: { - marginBottom: 24, + marginBottom: 28, }, catalogHeader: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', paddingHorizontal: 16, - marginBottom: 12, + marginBottom: 16, }, titleContainer: { position: 'relative', }, catalogTitle: { - fontSize: 19, - fontWeight: '700', - letterSpacing: 0.2, + fontSize: 24, + fontWeight: '800', + letterSpacing: 0.5, marginBottom: 4, }, titleUnderline: { position: 'absolute', bottom: -2, left: 0, - width: 35, - height: 2, - borderRadius: 1, + width: 40, + height: 3, + borderRadius: 2, opacity: 0.8, }, - seeAllButton: { + viewAllButton: { flexDirection: 'row', alignItems: 'center', - gap: 4, + paddingVertical: 8, + paddingHorizontal: 10, + borderRadius: 20, + backgroundColor: 'rgba(255,255,255,0.1)', }, - seeAllText: { + viewAllText: { fontSize: 14, fontWeight: '600', + marginRight: 4, }, catalogList: { paddingHorizontal: 16, diff --git a/src/components/home/ContinueWatchingSection.tsx b/src/components/home/ContinueWatchingSection.tsx index 7aeda06c..b86e5438 100644 --- a/src/components/home/ContinueWatchingSection.tsx +++ b/src/components/home/ContinueWatchingSection.tsx @@ -277,13 +277,8 @@ const ContinueWatchingSection = React.forwardRef((props, re - Continue Watching - + Continue Watching + @@ -386,7 +381,7 @@ const ContinueWatchingSection = React.forwardRef((props, re const styles = StyleSheet.create({ container: { - marginBottom: 24, + marginBottom: 28, paddingTop: 0, marginTop: 12, }, @@ -395,15 +390,15 @@ const styles = StyleSheet.create({ justifyContent: 'space-between', alignItems: 'center', paddingHorizontal: 16, - marginBottom: 12, + marginBottom: 16, }, titleContainer: { position: 'relative', }, title: { - fontSize: 20, - fontWeight: '700', - letterSpacing: 0.3, + fontSize: 24, + fontWeight: '800', + letterSpacing: 0.5, marginBottom: 4, }, titleUnderline: { @@ -411,8 +406,8 @@ const styles = StyleSheet.create({ bottom: -2, left: 0, width: 40, - height: 2, - borderRadius: 1, + height: 3, + borderRadius: 2, opacity: 0.8, }, wideList: { diff --git a/src/components/home/ThisWeekSection.tsx b/src/components/home/ThisWeekSection.tsx index d83f5cf1..166f4681 100644 --- a/src/components/home/ThisWeekSection.tsx +++ b/src/components/home/ThisWeekSection.tsx @@ -22,8 +22,8 @@ import { parseISO, isThisWeek, format, isAfter, isBefore } from 'date-fns'; import Animated, { FadeIn, FadeInRight } from 'react-native-reanimated'; const { width } = Dimensions.get('window'); -const ITEM_WIDTH = width * 0.85; -const ITEM_HEIGHT = 180; +const ITEM_WIDTH = width * 0.75; // Reduced width for better spacing +const ITEM_HEIGHT = 220; // Increased height for better proportions interface ThisWeekEpisode { id: string; @@ -163,7 +163,10 @@ export const ThisWeekSection = () => { if (loading) { return ( - + + + Loading this week's episodes... + ); } @@ -186,84 +189,134 @@ export const ThisWeekSection = () => { return ( handleEpisodePress(item)} - activeOpacity={0.7} + activeOpacity={0.8} > - - - - - - - - {isReleased ? 'Released' : 'Coming Soon'} - - - - {item.vote_average > 0 && ( - + + + + {/* Enhanced gradient overlay */} + + {/* Top badges */} + + - - {item.vote_average.toFixed(1)} + + {isReleased ? 'Available' : 'Upcoming'} - )} - - - - - {item.seriesName} - - - S{item.season}:E{item.episode} - {item.title} - - {item.overview ? ( - - {item.overview} + + {item.vote_average > 0 && ( + + + + {item.vote_average.toFixed(1)} + + + )} + + + {/* Content area */} + + + + {item.seriesName} + + + + S{item.season}:E{item.episode} + + + + + + {item.title} - ) : null} - - {formattedDate} - - - + + {item.overview && ( + + {item.overview} + + )} + + + + + {formattedDate} + + + + + ); }; return ( - + - This Week + + This Week + + - View All - + View All + @@ -274,8 +327,10 @@ export const ThisWeekSection = () => { horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles.listContent} - snapToInterval={ITEM_WIDTH + 12} + snapToInterval={ITEM_WIDTH + 16} decelerationRate="fast" + snapToAlignment="start" + ItemSeparatorComponent={() => } /> ); @@ -283,109 +338,180 @@ export const ThisWeekSection = () => { const styles = StyleSheet.create({ container: { - marginVertical: 16, + marginVertical: 20, }, header: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', paddingHorizontal: 16, - marginBottom: 12, + marginBottom: 16, + }, + titleContainer: { + position: 'relative', }, title: { - fontSize: 19, - fontWeight: '700', - letterSpacing: 0.2, + fontSize: 24, + fontWeight: '800', + letterSpacing: 0.5, + marginBottom: 4, + }, + titleUnderline: { + position: 'absolute', + bottom: -2, + left: 0, + width: 40, + height: 3, + borderRadius: 2, + opacity: 0.8, }, viewAllButton: { flexDirection: 'row', alignItems: 'center', + paddingVertical: 8, + paddingHorizontal: 10, + borderRadius: 20, + backgroundColor: 'rgba(255,255,255,0.1)', }, viewAllText: { fontSize: 14, + fontWeight: '600', marginRight: 4, }, listContent: { - paddingHorizontal: 8, + paddingHorizontal: 20, + paddingBottom: 8, }, loadingContainer: { - padding: 20, + padding: 32, alignItems: 'center', }, + loadingText: { + marginTop: 12, + fontSize: 16, + fontWeight: '500', + }, episodeItemContainer: { width: ITEM_WIDTH, height: ITEM_HEIGHT, - marginHorizontal: 6, }, episodeItem: { width: '100%', height: '100%', - borderRadius: 8, + borderRadius: 16, overflow: 'hidden', + shadowOffset: { width: 0, height: 8 }, + shadowOpacity: 0.3, + shadowRadius: 12, + elevation: 12, + }, + imageContainer: { + width: '100%', + height: '100%', + position: 'relative', }, poster: { width: '100%', height: '100%', + borderRadius: 16, }, gradient: { position: 'absolute', left: 0, right: 0, + top: 0, bottom: 0, - height: '80%', - justifyContent: 'flex-end', - padding: 16, - }, - badgeContainer: { - flexDirection: 'row', - alignItems: 'center', justifyContent: 'space-between', - marginBottom: 12, + padding: 16, + borderRadius: 16, }, - badge: { + topBadgeContainer: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'flex-start', + }, + statusBadge: { flexDirection: 'row', alignItems: 'center', - paddingHorizontal: 8, - paddingVertical: 4, - borderRadius: 4, + paddingHorizontal: 10, + paddingVertical: 6, + borderRadius: 20, + borderWidth: 1, + backgroundColor: 'rgba(0,0,0,0.3)', }, releasedBadge: {}, upcomingBadge: {}, - badgeText: { - fontSize: 10, - fontWeight: 'bold', - marginLeft: 4, + statusBadgeText: { + fontSize: 11, + fontWeight: '700', + color: '#FFFFFF', + marginLeft: 6, + textTransform: 'uppercase', + letterSpacing: 0.5, }, ratingBadge: { flexDirection: 'row', alignItems: 'center', paddingHorizontal: 8, paddingVertical: 4, - borderRadius: 4, + borderRadius: 16, + borderWidth: 1, + backgroundColor: 'rgba(0,0,0,0.3)', }, ratingText: { - fontSize: 10, - fontWeight: 'bold', + fontSize: 11, + fontWeight: '700', + color: '#FFFFFF', marginLeft: 4, }, - content: { - width: '100%', + contentArea: { + justifyContent: 'flex-end', + }, + seriesHeader: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: 8, }, seriesName: { - fontSize: 16, - fontWeight: 'bold', - marginBottom: 4, + fontSize: 18, + fontWeight: '700', + flex: 1, + marginRight: 8, + }, + episodeNumber: { + paddingHorizontal: 8, + paddingVertical: 4, + borderRadius: 12, + borderWidth: 1, + borderColor: 'rgba(255,255,255,0.2)', + }, + episodeNumberText: { + fontSize: 12, + fontWeight: '700', + letterSpacing: 0.5, }, episodeTitle: { - fontSize: 14, - marginBottom: 4, + fontSize: 15, + fontWeight: '600', + marginBottom: 6, + lineHeight: 20, }, overview: { - fontSize: 12, - marginBottom: 4, + fontSize: 13, + lineHeight: 18, + marginBottom: 8, + opacity: 0.9, + }, + dateContainer: { + flexDirection: 'row', + alignItems: 'center', + marginTop: 4, }, releaseDate: { - fontSize: 12, - fontWeight: 'bold', + fontSize: 13, + fontWeight: '600', + marginLeft: 6, + letterSpacing: 0.3, }, }); \ No newline at end of file