Update app and ignore local artifacts

This commit is contained in:
2026-09-04 12:59:28 +05:30
parent 8120ebb927
commit e6884a148b
56 changed files with 4419 additions and 370 deletions

87
components/ui/tokens.ts Normal file
View File

@@ -0,0 +1,87 @@
import { Platform } from 'react-native';
/**
* Runtime token mirror for designs/design-tokens.json.
* Components must consume this module rather than introduce screen-local values.
*/
export const colors = {
brand: {
ink: '#061430',
cobalt: '#0559FA',
cobaltPressed: '#0047D5',
cobaltSoft: '#E7F0FF',
coral: '#FF7A4F',
coralSoft: '#FFE9E1',
sky: '#D5F2FF',
skySoft: '#F0FAFF',
},
neutral: {
canvas: '#F7F9FC',
surface: '#FFFFFF',
surfaceSubtle: '#F0F4F8',
textPrimary: '#061430',
textSecondary: '#4E6078',
textMuted: '#68788F',
textDisabled: '#9AA8B8',
border: '#DDE5EE',
divider: '#E9EEF4',
scrim: 'rgba(6, 20, 48, 0.46)',
},
semantic: {
success: { solid: '#168A63', text: '#117A57', soft: '#DDF5EC' },
warning: { solid: '#F0B44D', text: '#8A5900', soft: '#FFF4CE' },
danger: { solid: '#CF4038', text: '#A82E2A', soft: '#FFE9E7' },
neutral: { solid: '#68788F', text: '#4E6078', soft: '#EDF1F5' },
},
subject: {
ocean: { surface: '#BFD5FF', accent: '#0559FA', text: '#061430' },
aqua: { surface: '#DDF7FA', accent: '#167F96', text: '#061430' },
lilac: { surface: '#FDF0FF', accent: '#9B4BA4', text: '#061430' },
sun: { surface: '#FFF3C4', accent: '#8A6400', text: '#061430' },
mint: { surface: '#DDF5EC', accent: '#117A57', text: '#061430' },
peach: { surface: '#FFE5D9', accent: '#B95230', text: '#061430' },
},
} as const;
export const spacing = { 0: 0, 1: 2, 2: 4, 3: 8, 4: 12, 5: 16, 6: 20, 7: 24, 8: 32, 9: 40, 10: 48, 11: 64 } as const;
export const radius = { small: 8, control: 12, card: 16, feature: 20, sheet: 28, pill: 999 } as const;
export const size = { touchTargetMin: 44, control: 52, controlCompact: 40, iconSmall: 16, icon: 20, iconLarge: 24, iconContainer: 40, screenGutter: 20, screenGutterWide: 24, contentMaxWidth: 560, tabBar: 68 } as const;
const fontFaces = {
regular: 'Manrope_400Regular',
medium: 'Manrope_500Medium',
semibold: 'Manrope_600SemiBold',
bold: 'Manrope_700Bold',
extrabold: 'Manrope_800ExtraBold',
} as const;
const systemFont = Platform.select({ ios: 'System', android: 'sans-serif', default: 'system-ui' });
const font = (face: keyof typeof fontFaces) => ({ fontFamily: fontFaces[face] || systemFont });
export const type = {
display: { ...font('extrabold'), fontSize: 40, lineHeight: 44, letterSpacing: -1.2 },
heading1: { ...font('extrabold'), fontSize: 32, lineHeight: 38, letterSpacing: -0.8 },
heading2: { ...font('bold'), fontSize: 24, lineHeight: 30, letterSpacing: -0.4 },
heading3: { ...font('bold'), fontSize: 20, lineHeight: 26, letterSpacing: -0.2 },
title: { ...font('bold'), fontSize: 17, lineHeight: 23, letterSpacing: 0 },
body: { ...font('regular'), fontSize: 15, lineHeight: 22, letterSpacing: 0 },
bodySmall: { ...font('regular'), fontSize: 13, lineHeight: 19, letterSpacing: 0 },
label: { ...font('semibold'), fontSize: 12, lineHeight: 16, letterSpacing: 0.1 },
caption: { ...font('medium'), fontSize: 11, lineHeight: 15, letterSpacing: 0.1 },
} as const;
export type TypeVariant = keyof typeof type;
export type SubjectTone = keyof typeof colors.subject;
export type SemanticTone = keyof typeof colors.semantic;
export const shadow = {
floating: {
shadowColor: colors.brand.ink,
shadowOpacity: 0.12,
shadowRadius: 18,
shadowOffset: { width: 0, height: 8 },
elevation: 8,
},
} as const;
export const motion = { instant: 100, quick: 160, standard: 220, emphasized: 320, pressedScale: 0.98 } as const;