392 lines
9.1 KiB
TypeScript
392 lines
9.1 KiB
TypeScript
import { StyleSheet, Dimensions, Platform } from 'react-native';
|
|
import { typography } from '@theme';
|
|
|
|
const { width } = Dimensions.get('window');
|
|
const BANNER_WIDTH = width - 32;
|
|
|
|
export const getStyles = (colors: any) =>
|
|
StyleSheet.create({
|
|
container: {
|
|
flex: 1,
|
|
backgroundColor: colors.background,
|
|
},
|
|
|
|
// ---------- Top bar ----------
|
|
topBar: {
|
|
flexDirection: 'row',
|
|
alignItems: 'center',
|
|
justifyContent: 'space-between',
|
|
paddingHorizontal: 16,
|
|
paddingTop: 14,
|
|
paddingBottom: 10,
|
|
},
|
|
addressBar: {
|
|
flexDirection: 'row',
|
|
alignItems: 'center',
|
|
flex: 1,
|
|
},
|
|
pinBadge: {
|
|
width: 34,
|
|
height: 34,
|
|
borderRadius: 17,
|
|
backgroundColor: colors.primaryMuted ?? '#E9F7EF',
|
|
alignItems: 'center',
|
|
justifyContent: 'center',
|
|
marginRight: 10,
|
|
},
|
|
pinEmoji: {
|
|
fontSize: 16,
|
|
},
|
|
addressTextWrap: {
|
|
flex: 1,
|
|
},
|
|
addressLabel: {
|
|
fontSize: typography.fontSize.xs,
|
|
color: colors.textSecondary,
|
|
marginBottom: 1,
|
|
letterSpacing: 0.2,
|
|
},
|
|
addressRow: {
|
|
flexDirection: 'row',
|
|
alignItems: 'center',
|
|
},
|
|
addressText: {
|
|
fontSize: typography.fontSize.md,
|
|
fontWeight: typography.fontWeight.bold,
|
|
color: colors.text,
|
|
maxWidth: width * 0.55,
|
|
},
|
|
dropdownArrow: {
|
|
fontSize: 11,
|
|
color: colors.textSecondary,
|
|
marginLeft: 6,
|
|
},
|
|
avatarButton: {
|
|
width: 40,
|
|
height: 40,
|
|
borderRadius: 20,
|
|
backgroundColor: colors.surface ?? '#F2F2F2',
|
|
alignItems: 'center',
|
|
justifyContent: 'center',
|
|
borderWidth: 1,
|
|
borderColor: colors.border ?? '#ECECEC',
|
|
},
|
|
avatarEmoji: {
|
|
fontSize: 18,
|
|
},
|
|
notifDot: {
|
|
position: 'absolute',
|
|
top: 6,
|
|
right: 7,
|
|
width: 8,
|
|
height: 8,
|
|
borderRadius: 4,
|
|
backgroundColor: '#FF4D4F',
|
|
borderWidth: 1.5,
|
|
borderColor: colors.background,
|
|
},
|
|
|
|
// ---------- Search ----------
|
|
searchWrap: {
|
|
paddingHorizontal: 16,
|
|
marginTop: 4,
|
|
marginBottom: 18,
|
|
},
|
|
|
|
// ---------- Promo carousel ----------
|
|
bannerListContent: {
|
|
paddingLeft: 16,
|
|
paddingRight: 4,
|
|
},
|
|
bannerCard: {
|
|
width: BANNER_WIDTH,
|
|
height: 140,
|
|
borderRadius: 20,
|
|
marginRight: 12,
|
|
padding: 20,
|
|
overflow: 'hidden',
|
|
justifyContent: 'space-between',
|
|
...Platform.select({
|
|
ios: {
|
|
shadowColor: '#000',
|
|
shadowOffset: { width: 0, height: 6 },
|
|
shadowOpacity: 0.15,
|
|
shadowRadius: 12,
|
|
},
|
|
android: { elevation: 5 },
|
|
}),
|
|
},
|
|
bannerDecoCircleLg: {
|
|
position: 'absolute',
|
|
width: 140,
|
|
height: 140,
|
|
borderRadius: 70,
|
|
backgroundColor: 'rgba(255,255,255,0.10)',
|
|
top: -50,
|
|
right: -30,
|
|
},
|
|
bannerDecoCircleSm: {
|
|
position: 'absolute',
|
|
width: 80,
|
|
height: 80,
|
|
borderRadius: 40,
|
|
backgroundColor: 'rgba(255,255,255,0.08)',
|
|
bottom: -30,
|
|
right: 40,
|
|
},
|
|
bannerEyebrow: {
|
|
fontSize: typography.fontSize.xs,
|
|
fontWeight: typography.fontWeight.semibold,
|
|
color: 'rgba(255,255,255,0.85)',
|
|
letterSpacing: 0.6,
|
|
textTransform: 'uppercase',
|
|
},
|
|
bannerText: {
|
|
fontSize: 26,
|
|
fontWeight: typography.fontWeight.bold,
|
|
color: '#FFFFFF',
|
|
marginTop: 2,
|
|
},
|
|
bannerSubtext: {
|
|
fontSize: typography.fontSize.sm,
|
|
color: 'rgba(255,255,255,0.9)',
|
|
marginTop: 2,
|
|
},
|
|
bannerCta: {
|
|
alignSelf: 'flex-start',
|
|
backgroundColor: 'rgba(255,255,255,0.95)',
|
|
paddingHorizontal: 14,
|
|
paddingVertical: 7,
|
|
borderRadius: 20,
|
|
marginTop: 4,
|
|
},
|
|
bannerCtaText: {
|
|
fontSize: typography.fontSize.xs,
|
|
fontWeight: typography.fontWeight.bold,
|
|
color: '#111111',
|
|
},
|
|
dotsRow: {
|
|
flexDirection: 'row',
|
|
alignSelf: 'center',
|
|
marginTop: 10,
|
|
marginBottom: 4,
|
|
},
|
|
dot: {
|
|
width: 6,
|
|
height: 6,
|
|
borderRadius: 3,
|
|
backgroundColor: colors.border ?? '#E0E0E0',
|
|
marginHorizontal: 3,
|
|
},
|
|
dotActive: {
|
|
width: 16,
|
|
backgroundColor: colors.primary ?? '#05824C',
|
|
},
|
|
|
|
// ---------- Categories ----------
|
|
categorySection: {
|
|
marginTop: 22,
|
|
},
|
|
chipRow: {
|
|
paddingHorizontal: 16,
|
|
paddingTop: 4,
|
|
},
|
|
categoryItem: {
|
|
alignItems: 'center',
|
|
marginRight: 18,
|
|
width: 64,
|
|
},
|
|
categoryCircle: {
|
|
width: 60,
|
|
height: 60,
|
|
borderRadius: 18,
|
|
backgroundColor: colors.surface ?? '#F5F6F8',
|
|
alignItems: 'center',
|
|
justifyContent: 'center',
|
|
marginBottom: 6,
|
|
borderWidth: 1.5,
|
|
borderColor: 'transparent',
|
|
},
|
|
categoryCircleSelected: {
|
|
backgroundColor: colors.primaryMuted ?? '#E9F7EF',
|
|
borderColor: colors.primary ?? '#05824C',
|
|
},
|
|
categoryIcon: {
|
|
fontSize: 24,
|
|
},
|
|
categoryLabel: {
|
|
fontSize: typography.fontSize.xs,
|
|
color: colors.textSecondary,
|
|
fontWeight: typography.fontWeight.medium,
|
|
textAlign: 'center',
|
|
},
|
|
categoryLabelSelected: {
|
|
color: colors.text,
|
|
fontWeight: typography.fontWeight.bold,
|
|
},
|
|
|
|
// ---------- Section header ----------
|
|
sectionHeaderRow: {
|
|
flexDirection: 'row',
|
|
alignItems: 'center',
|
|
justifyContent: 'space-between',
|
|
paddingHorizontal: 16,
|
|
marginTop: 26,
|
|
marginBottom: 12,
|
|
},
|
|
sectionTitle: {
|
|
fontSize: typography.fontSize.lg,
|
|
fontWeight: typography.fontWeight.bold,
|
|
color: colors.text,
|
|
},
|
|
sectionSubtitle: {
|
|
fontSize: typography.fontSize.xs,
|
|
color: colors.textSecondary,
|
|
marginTop: 2,
|
|
},
|
|
seeAllText: {
|
|
fontSize: typography.fontSize.sm,
|
|
fontWeight: typography.fontWeight.semibold,
|
|
color: colors.primary ?? '#05824C',
|
|
},
|
|
|
|
// ---------- Product Grid ----------
|
|
providerList: {
|
|
paddingHorizontal: 16,
|
|
flexDirection: 'row',
|
|
flexWrap: 'wrap',
|
|
justifyContent: 'space-between',
|
|
},
|
|
providerCardWrap: {
|
|
backgroundColor: colors.surface ?? '#FFFFFF',
|
|
borderRadius: 18,
|
|
marginBottom: 16,
|
|
overflow: 'hidden',
|
|
...Platform.select({
|
|
ios: {
|
|
shadowColor: '#000',
|
|
shadowOffset: { width: 0, height: 3 },
|
|
shadowOpacity: 0.06,
|
|
shadowRadius: 10,
|
|
},
|
|
android: { elevation: 2 },
|
|
}),
|
|
},
|
|
providerImageWrap: {
|
|
width: '100%',
|
|
height: 150,
|
|
position: 'relative',
|
|
},
|
|
providerImage: {
|
|
width: '100%',
|
|
height: '100%',
|
|
},
|
|
discountRibbon: {
|
|
position: 'absolute',
|
|
top: 12,
|
|
left: 0,
|
|
backgroundColor: '#05824C',
|
|
paddingVertical: 4,
|
|
paddingHorizontal: 10,
|
|
borderTopRightRadius: 8,
|
|
borderBottomRightRadius: 8,
|
|
},
|
|
discountRibbonText: {
|
|
color: '#FFFFFF',
|
|
fontSize: typography.fontSize.xs,
|
|
fontWeight: typography.fontWeight.bold,
|
|
},
|
|
favoriteButton: {
|
|
position: 'absolute',
|
|
top: 10,
|
|
right: 10,
|
|
width: 32,
|
|
height: 32,
|
|
borderRadius: 16,
|
|
backgroundColor: 'rgba(255,255,255,0.92)',
|
|
alignItems: 'center',
|
|
justifyContent: 'center',
|
|
},
|
|
favoriteIcon: {
|
|
fontSize: 15,
|
|
},
|
|
providerBody: {
|
|
padding: 14,
|
|
},
|
|
providerTopRow: {
|
|
flexDirection: 'row',
|
|
justifyContent: 'space-between',
|
|
alignItems: 'flex-start',
|
|
},
|
|
providerName: {
|
|
fontSize: typography.fontSize.md,
|
|
fontWeight: typography.fontWeight.bold,
|
|
color: colors.text,
|
|
flex: 1,
|
|
marginRight: 8,
|
|
},
|
|
ratingPill: {
|
|
flexDirection: 'row',
|
|
alignItems: 'center',
|
|
backgroundColor: colors.primaryMuted ?? '#E9F7EF',
|
|
borderRadius: 8,
|
|
paddingHorizontal: 6,
|
|
paddingVertical: 3,
|
|
},
|
|
ratingStar: {
|
|
fontSize: 11,
|
|
marginRight: 3,
|
|
},
|
|
ratingText: {
|
|
fontSize: typography.fontSize.xs,
|
|
fontWeight: typography.fontWeight.bold,
|
|
color: colors.primary ?? '#05824C',
|
|
},
|
|
metaRow: {
|
|
flexDirection: 'row',
|
|
alignItems: 'center',
|
|
marginTop: 8,
|
|
},
|
|
metaText: {
|
|
fontSize: typography.fontSize.sm,
|
|
color: colors.textSecondary,
|
|
},
|
|
metaDivider: {
|
|
width: 3,
|
|
height: 3,
|
|
borderRadius: 1.5,
|
|
backgroundColor: colors.textSecondary,
|
|
marginHorizontal: 8,
|
|
opacity: 0.5,
|
|
},
|
|
tagPill: {
|
|
alignSelf: 'flex-start',
|
|
backgroundColor: colors.background,
|
|
borderRadius: 6,
|
|
paddingHorizontal: 8,
|
|
paddingVertical: 3,
|
|
marginTop: 10,
|
|
borderWidth: 1,
|
|
borderColor: colors.border ?? '#ECECEC',
|
|
},
|
|
tagPillText: {
|
|
fontSize: typography.fontSize.xs,
|
|
color: colors.textSecondary,
|
|
fontWeight: typography.fontWeight.medium,
|
|
},
|
|
|
|
// ---------- Skeleton / empty ----------
|
|
emptyWrap: {
|
|
alignItems: 'center',
|
|
paddingVertical: 40,
|
|
},
|
|
emptyEmoji: {
|
|
fontSize: 36,
|
|
marginBottom: 8,
|
|
},
|
|
emptyText: {
|
|
color: colors.textSecondary,
|
|
fontSize: typography.fontSize.sm,
|
|
},
|
|
});
|