export type GpsMarkerStyleId = 'dot' | 'beacon' | 'disc' | 'badge' export type GpsMarkerSizePreset = 'small' | 'medium' | 'large' export type GpsMarkerAnimationProfile = 'minimal' | 'dynamic-runner' | 'warning-reactive' export type GpsMarkerMotionState = 'idle' | 'moving' | 'fast-moving' | 'warning' export type GpsMarkerColorPreset = | 'mint' | 'cyan' | 'sky' | 'blue' | 'violet' | 'pink' | 'orange' | 'yellow' export type GpsMarkerLogoMode = 'center-badge' export interface GpsMarkerColorPresetEntry { colorHex: string ringColorHex: string indicatorColorHex: string } export const GPS_MARKER_COLOR_PRESET_MAP: Record = { mint: { colorHex: '#18b39a', ringColorHex: '#ffffff', indicatorColorHex: '#9bfff0', }, cyan: { colorHex: '#1db7cf', ringColorHex: '#ffffff', indicatorColorHex: '#b2f7ff', }, sky: { colorHex: '#54a3ff', ringColorHex: '#ffffff', indicatorColorHex: '#d6efff', }, blue: { colorHex: '#4568ff', ringColorHex: '#ffffff', indicatorColorHex: '#bec9ff', }, violet: { colorHex: '#8658ff', ringColorHex: '#ffffff', indicatorColorHex: '#dbcaff', }, pink: { colorHex: '#ff5cb5', ringColorHex: '#ffffff', indicatorColorHex: '#ffd0ea', }, orange: { colorHex: '#ff9238', ringColorHex: '#ffffff', indicatorColorHex: '#ffd7b0', }, yellow: { colorHex: '#f3c72b', ringColorHex: '#ffffff', indicatorColorHex: '#fff1ae', }, } export interface GpsMarkerStyleConfig { visible: boolean style: GpsMarkerStyleId size: GpsMarkerSizePreset colorPreset: GpsMarkerColorPreset colorHex: string ringColorHex: string indicatorColorHex: string showHeadingIndicator: boolean animationProfile: GpsMarkerAnimationProfile motionState: GpsMarkerMotionState motionIntensity: number pulseStrength: number headingAlpha: number effectScale: number wakeStrength: number warningGlowStrength: number indicatorScale: number logoScale: number logoUrl: string logoMode: GpsMarkerLogoMode } export const DEFAULT_GPS_MARKER_STYLE_CONFIG: GpsMarkerStyleConfig = { visible: true, style: 'beacon', size: 'medium', colorPreset: 'cyan', colorHex: GPS_MARKER_COLOR_PRESET_MAP.cyan.colorHex, ringColorHex: GPS_MARKER_COLOR_PRESET_MAP.cyan.ringColorHex, indicatorColorHex: GPS_MARKER_COLOR_PRESET_MAP.cyan.indicatorColorHex, showHeadingIndicator: true, animationProfile: 'dynamic-runner', motionState: 'idle', motionIntensity: 0, pulseStrength: 1, headingAlpha: 1, effectScale: 1, wakeStrength: 0, warningGlowStrength: 0, indicatorScale: 1, logoScale: 1, logoUrl: '', logoMode: 'center-badge', }