native_convex_CRM/app/components/projectActivityFeed/projectActivityFeed.styles.ts

251 lines
5.5 KiB
TypeScript

import { StyleSheet } from 'react-native';
import { ThemeColors, colors as globalColors } from '@theme';
export const getStyles = (colors: ThemeColors, isDark: boolean) =>
StyleSheet.create({
/* ── Card wrapper ── */
card: {
backgroundColor: colors.card,
borderRadius: 20,
marginBottom: 20,
shadowColor: isDark ? '#000000' : '#0F172A',
shadowOffset: { width: 0, height: 4 },
shadowOpacity: isDark ? 0.25 : 0.08,
shadowRadius: 12,
elevation: 4,
borderWidth: 1,
borderColor: colors.border,
},
/* ── Header ── */
header: {
flexDirection: 'row',
alignItems: 'center',
paddingHorizontal: 16,
paddingTop: 16,
paddingBottom: 14,
gap: 10,
},
titleIconBadge: {
width: 34,
height: 34,
borderRadius: 10,
backgroundColor: globalColors.accent,
justifyContent: 'center',
alignItems: 'center',
shadowColor: globalColors.accent,
shadowOffset: { width: 0, height: 3 },
shadowOpacity: 0.4,
shadowRadius: 6,
elevation: 4,
},
titleGroup: {
flex: 1,
},
title: {
fontSize: 15,
fontWeight: '700',
color: colors.text,
letterSpacing: 0.1,
},
subtitle: {
fontSize: 11,
fontWeight: '500',
color: colors.textMuted,
marginTop: 1,
letterSpacing: 0.2,
},
countBadge: {
paddingHorizontal: 9,
paddingVertical: 4,
borderRadius: 20,
backgroundColor: isDark
? `${globalColors.accent}28`
: `${globalColors.accent}15`,
borderWidth: 1,
borderColor: isDark
? `${globalColors.accent}55`
: `${globalColors.accent}35`,
},
countBadgeText: {
fontSize: 12,
fontWeight: '700',
color: globalColors.accent,
},
/* ── Divider ── */
divider: {
height: 1,
backgroundColor: colors.border,
marginHorizontal: 16,
marginBottom: 4,
opacity: isDark ? 0.5 : 0.8,
},
/* ── Timeline list ── */
listContent: {
paddingHorizontal: 16,
paddingBottom: 12,
paddingTop: 4,
},
/* ── Timeline row ── */
row: {
flexDirection: 'row',
paddingVertical: 12,
},
/* ── Left column: avatar + connector line ── */
leftCol: {
width: 38,
alignItems: 'center',
},
avatar: {
width: 34,
height: 34,
borderRadius: 17,
justifyContent: 'center',
alignItems: 'center',
},
avatarText: {
fontSize: 13,
fontWeight: '800',
color: '#FFFFFF',
},
connector: {
width: 2,
flex: 1,
marginTop: 4,
borderRadius: 1,
backgroundColor: colors.border,
opacity: isDark ? 0.5 : 0.7,
},
/* ── Right column: content bubble ── */
rightCol: {
flex: 1,
marginLeft: 10,
},
bubble: {
backgroundColor: isDark
? `${globalColors.primary}12`
: `${globalColors.primary}07`,
borderRadius: 14,
borderWidth: 1,
borderColor: isDark
? `${globalColors.primary}30`
: `${globalColors.primary}18`,
padding: 12,
},
/* row inside bubble: name + time */
bubbleHeader: {
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'center',
marginBottom: 4,
},
staffName: {
fontSize: 13,
fontWeight: '700',
color: colors.text,
flex: 1,
marginRight: 6,
},
timeAgo: {
fontSize: 10,
fontWeight: '600',
color: colors.textMuted,
letterSpacing: 0.2,
},
/* description */
descriptionRow: {
flexDirection: 'row',
alignItems: 'center',
gap: 5,
marginBottom: 6,
},
actionDot: {
width: 5,
height: 5,
borderRadius: 2.5,
backgroundColor: globalColors.accent,
},
description: {
fontSize: 13,
fontWeight: '500',
color: colors.textSecondary,
flex: 1,
},
/* project chip */
projectChip: {
flexDirection: 'row',
alignItems: 'center',
gap: 5,
backgroundColor: isDark
? `${globalColors.accentAlt}18`
: `${globalColors.accentAlt}12`,
borderRadius: 20,
paddingHorizontal: 9,
paddingVertical: 4,
alignSelf: 'flex-start',
borderWidth: 1,
borderColor: isDark
? `${globalColors.accentAlt}40`
: `${globalColors.accentAlt}30`,
marginBottom: 6,
},
projectChipText: {
fontSize: 10,
fontWeight: '700',
color: globalColors.accentAlt,
letterSpacing: 0.2,
},
/* additional data tag */
additionalTag: {
flexDirection: 'row',
alignItems: 'center',
gap: 4,
},
additionalText: {
fontSize: 11,
fontWeight: '500',
color: colors.textMuted,
flex: 1,
},
/* ── Empty / Loader states ── */
stateContainer: {
paddingVertical: 32,
alignItems: 'center',
justifyContent: 'center',
},
emptyText: {
fontSize: 13,
color: colors.textMuted,
marginTop: 8,
fontWeight: '500',
},
/* ── Footer ── */
footer: {
borderTopWidth: 1,
borderTopColor: colors.border,
paddingVertical: 12,
alignItems: 'center',
justifyContent: 'center',
},
footerButton: {
flexDirection: 'row',
alignItems: 'center',
gap: 6,
},
footerButtonText: {
fontSize: 13,
fontWeight: '700',
color: globalColors.primary,
},
});