251 lines
5.5 KiB
TypeScript
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,
|
|
},
|
|
});
|