Some checks failed
Build & Deploy KLZ Cables / build-and-deploy (push) Failing after 17m33s
217 lines
5.6 KiB
TypeScript
217 lines
5.6 KiB
TypeScript
import { Font, StyleSheet } from '@react-pdf/renderer';
|
|
|
|
// Prevent automatic word hyphenation, which can create multi-line table headers
|
|
// even when we try to keep them single-line.
|
|
Font.registerHyphenationCallback(word => [word]);
|
|
|
|
export const COLORS = {
|
|
primary: '#001a4d',
|
|
primaryDark: '#000d26',
|
|
accent: '#82ed20',
|
|
textPrimary: '#111827',
|
|
textSecondary: '#4b5563',
|
|
textLight: '#9ca3af',
|
|
neutral: '#f8f9fa',
|
|
border: '#e5e7eb',
|
|
} as const;
|
|
|
|
export const styles = StyleSheet.create({
|
|
page: {
|
|
paddingTop: 0,
|
|
paddingLeft: 30,
|
|
paddingRight: 30,
|
|
paddingBottom: 60,
|
|
fontFamily: 'Helvetica',
|
|
fontSize: 10,
|
|
color: COLORS.textPrimary,
|
|
backgroundColor: '#FFFFFF',
|
|
},
|
|
|
|
// Hero-style header
|
|
hero: {
|
|
backgroundColor: '#FFFFFF',
|
|
paddingTop: 30,
|
|
paddingBottom: 0,
|
|
paddingHorizontal: 0,
|
|
marginBottom: 20,
|
|
position: 'relative',
|
|
borderBottomWidth: 0,
|
|
borderBottomColor: COLORS.border,
|
|
},
|
|
header: {
|
|
flexDirection: 'row',
|
|
justifyContent: 'space-between',
|
|
alignItems: 'center',
|
|
marginBottom: 24,
|
|
paddingHorizontal: 0,
|
|
},
|
|
headerLeft: { flexDirection: 'row', alignItems: 'center', gap: 10 },
|
|
logo: { width: 100, height: 22, objectFit: 'contain' },
|
|
brandFallback: { fontSize: 20, fontWeight: 700, color: COLORS.primaryDark, letterSpacing: 1, textTransform: 'uppercase' },
|
|
headerRight: { flexDirection: 'row', alignItems: 'center', gap: 10 },
|
|
headerTitle: { fontSize: 9, fontWeight: 700, color: COLORS.primary, letterSpacing: 1.5, textTransform: 'uppercase' },
|
|
qr: { width: 30, height: 30, objectFit: 'contain' },
|
|
|
|
productRow: {
|
|
flexDirection: 'row',
|
|
alignItems: 'center',
|
|
gap: 20,
|
|
},
|
|
productInfoCol: {
|
|
flex: 1,
|
|
justifyContent: 'center',
|
|
},
|
|
productImageCol: {
|
|
flex: 1,
|
|
height: 120,
|
|
justifyContent: 'center',
|
|
alignItems: 'center',
|
|
borderRadius: 8,
|
|
borderWidth: 1,
|
|
borderColor: COLORS.border,
|
|
backgroundColor: '#FFFFFF',
|
|
overflow: 'hidden',
|
|
},
|
|
|
|
productHero: {
|
|
marginTop: 0,
|
|
paddingHorizontal: 0,
|
|
},
|
|
productName: {
|
|
fontSize: 24,
|
|
fontWeight: 700,
|
|
color: COLORS.primaryDark,
|
|
marginBottom: 0,
|
|
textTransform: 'uppercase',
|
|
letterSpacing: -0.5,
|
|
},
|
|
productMeta: {
|
|
fontSize: 9,
|
|
color: COLORS.textSecondary,
|
|
fontWeight: 700,
|
|
textTransform: 'uppercase',
|
|
letterSpacing: 1,
|
|
marginBottom: 4,
|
|
},
|
|
|
|
content: {
|
|
paddingHorizontal: 0,
|
|
},
|
|
|
|
footer: {
|
|
position: 'absolute',
|
|
left: 30,
|
|
right: 30,
|
|
bottom: 30,
|
|
paddingTop: 16,
|
|
borderTopWidth: 1,
|
|
borderTopColor: COLORS.border,
|
|
flexDirection: 'row',
|
|
justifyContent: 'space-between',
|
|
alignItems: 'center',
|
|
},
|
|
footerBrand: { fontSize: 9, fontWeight: 700, color: COLORS.primaryDark, textTransform: 'uppercase', letterSpacing: 1 },
|
|
footerText: { fontSize: 8, color: COLORS.textLight, fontWeight: 500, textTransform: 'uppercase', letterSpacing: 0.5 },
|
|
|
|
h1: { fontSize: 22, fontWeight: 700, color: COLORS.primaryDark, marginBottom: 8, textTransform: 'uppercase' },
|
|
subhead: { fontSize: 10, fontWeight: 700, color: COLORS.textSecondary, marginBottom: 16, textTransform: 'uppercase', letterSpacing: 0.5 },
|
|
|
|
heroBox: {
|
|
height: 180,
|
|
borderRadius: 12,
|
|
borderWidth: 1,
|
|
borderColor: COLORS.border,
|
|
backgroundColor: '#FFFFFF',
|
|
marginBottom: 24,
|
|
justifyContent: 'center',
|
|
overflow: 'hidden',
|
|
padding: 0,
|
|
},
|
|
heroImage: { width: '100%', height: '100%', objectFit: 'contain' },
|
|
noImage: { fontSize: 8, color: COLORS.textLight, textAlign: 'center' },
|
|
|
|
section: {
|
|
marginBottom: 10,
|
|
},
|
|
sectionTitle: {
|
|
fontSize: 14,
|
|
fontWeight: 700,
|
|
color: COLORS.primaryDark,
|
|
marginBottom: 8,
|
|
textTransform: 'uppercase',
|
|
letterSpacing: -0.2,
|
|
},
|
|
sectionAccent: {
|
|
width: 30,
|
|
height: 3,
|
|
backgroundColor: COLORS.accent,
|
|
marginBottom: 8,
|
|
borderRadius: 1.5,
|
|
},
|
|
body: { fontSize: 10, lineHeight: 1.6, color: COLORS.textSecondary },
|
|
|
|
kvGrid: {
|
|
width: '100%',
|
|
borderWidth: 1,
|
|
borderColor: COLORS.border,
|
|
borderRadius: 8,
|
|
overflow: 'hidden',
|
|
},
|
|
kvRow: {
|
|
flexDirection: 'row',
|
|
borderBottomWidth: 1,
|
|
borderBottomColor: COLORS.border,
|
|
},
|
|
kvRowAlt: { backgroundColor: COLORS.neutral },
|
|
kvRowLast: { borderBottomWidth: 0 },
|
|
kvCell: { paddingVertical: 3, paddingHorizontal: 12 },
|
|
kvMidDivider: {
|
|
borderRightWidth: 1,
|
|
borderRightColor: COLORS.border,
|
|
},
|
|
kvLabelText: { fontSize: 8, fontWeight: 700, color: COLORS.primaryDark, textTransform: 'uppercase', letterSpacing: 0.3 },
|
|
kvValueText: { fontSize: 9, color: COLORS.textPrimary, fontWeight: 500 },
|
|
|
|
tableWrap: {
|
|
width: '100%',
|
|
borderWidth: 1,
|
|
borderColor: COLORS.border,
|
|
borderRadius: 8,
|
|
overflow: 'hidden',
|
|
marginBottom: 16,
|
|
},
|
|
tableHeader: {
|
|
width: '100%',
|
|
flexDirection: 'row',
|
|
backgroundColor: COLORS.neutral,
|
|
borderBottomWidth: 1,
|
|
borderBottomColor: COLORS.border,
|
|
},
|
|
tableHeaderCell: {
|
|
paddingVertical: 8,
|
|
paddingHorizontal: 6,
|
|
fontSize: 7,
|
|
fontWeight: 700,
|
|
color: COLORS.primaryDark,
|
|
textTransform: 'uppercase',
|
|
letterSpacing: 0.2,
|
|
},
|
|
tableHeaderCellCfg: {
|
|
paddingHorizontal: 8,
|
|
},
|
|
tableHeaderCellDivider: {
|
|
borderRightWidth: 1,
|
|
borderRightColor: COLORS.border,
|
|
},
|
|
tableRow: { width: '100%', flexDirection: 'row', borderBottomWidth: 1, borderBottomColor: COLORS.border },
|
|
tableRowAlt: { backgroundColor: '#FFFFFF' },
|
|
tableCell: { paddingVertical: 6, paddingHorizontal: 6, fontSize: 7, color: COLORS.textSecondary, fontWeight: 500 },
|
|
tableCellCfg: {
|
|
paddingHorizontal: 8,
|
|
},
|
|
tableCellDivider: {
|
|
borderRightWidth: 1,
|
|
borderRightColor: COLORS.border,
|
|
},
|
|
});
|