88 lines
3.5 KiB
TypeScript
88 lines
3.5 KiB
TypeScript
export type ControlPointStyleId = 'classic-ring' | 'solid-dot' | 'double-ring' | 'badge' | 'pulse-core'
|
|
|
|
export type CourseLegStyleId = 'classic-leg' | 'dashed-leg' | 'glow-leg' | 'progress-leg'
|
|
|
|
export interface ControlPointStyleEntry {
|
|
style: ControlPointStyleId
|
|
colorHex: string
|
|
sizeScale?: number
|
|
accentRingScale?: number
|
|
glowStrength?: number
|
|
labelScale?: number
|
|
labelColorHex?: string
|
|
}
|
|
|
|
export interface CourseLegStyleEntry {
|
|
style: CourseLegStyleId
|
|
colorHex: string
|
|
widthScale?: number
|
|
glowStrength?: number
|
|
}
|
|
|
|
export interface ScoreBandStyleEntry extends ControlPointStyleEntry {
|
|
min: number
|
|
max: number
|
|
}
|
|
|
|
export interface SequentialCourseStyleConfig {
|
|
controls: {
|
|
default: ControlPointStyleEntry
|
|
current: ControlPointStyleEntry
|
|
completed: ControlPointStyleEntry
|
|
skipped: ControlPointStyleEntry
|
|
start: ControlPointStyleEntry
|
|
finish: ControlPointStyleEntry
|
|
}
|
|
legs: {
|
|
default: CourseLegStyleEntry
|
|
completed: CourseLegStyleEntry
|
|
}
|
|
}
|
|
|
|
export interface ScoreOCourseStyleConfig {
|
|
controls: {
|
|
default: ControlPointStyleEntry
|
|
focused: ControlPointStyleEntry
|
|
collected: ControlPointStyleEntry
|
|
start: ControlPointStyleEntry
|
|
finish: ControlPointStyleEntry
|
|
scoreBands: ScoreBandStyleEntry[]
|
|
}
|
|
}
|
|
|
|
export interface CourseStyleConfig {
|
|
sequential: SequentialCourseStyleConfig
|
|
scoreO: ScoreOCourseStyleConfig
|
|
}
|
|
|
|
export const DEFAULT_COURSE_STYLE_CONFIG: CourseStyleConfig = {
|
|
sequential: {
|
|
controls: {
|
|
default: { style: 'classic-ring', colorHex: '#cc006b', sizeScale: 1, labelScale: 1 },
|
|
current: { style: 'pulse-core', colorHex: '#38fff2', sizeScale: 1.08, accentRingScale: 1.28, glowStrength: 0.9, labelScale: 1.08, labelColorHex: '#fff4fb' },
|
|
completed: { style: 'solid-dot', colorHex: '#7e838a', sizeScale: 0.88, labelScale: 0.96 },
|
|
skipped: { style: 'badge', colorHex: '#8a9198', sizeScale: 0.9, accentRingScale: 1.12, labelScale: 0.94 },
|
|
start: { style: 'double-ring', colorHex: '#cc006b', sizeScale: 1.04, accentRingScale: 1.3, labelScale: 1.02 },
|
|
finish: { style: 'double-ring', colorHex: '#cc006b', sizeScale: 1.08, accentRingScale: 1.34, glowStrength: 0.32, labelScale: 1.06, labelColorHex: '#fff4de' },
|
|
},
|
|
legs: {
|
|
default: { style: 'classic-leg', colorHex: '#cc006b', widthScale: 1 },
|
|
completed: { style: 'progress-leg', colorHex: '#7a8088', widthScale: 0.92, glowStrength: 0.24 },
|
|
},
|
|
},
|
|
scoreO: {
|
|
controls: {
|
|
default: { style: 'badge', colorHex: '#cc006b', sizeScale: 0.96, accentRingScale: 1.1, labelScale: 1.02 },
|
|
focused: { style: 'pulse-core', colorHex: '#fff0fa', sizeScale: 1.12, accentRingScale: 1.36, glowStrength: 1, labelScale: 1.12, labelColorHex: '#fffafc' },
|
|
collected: { style: 'solid-dot', colorHex: '#d6dae0', sizeScale: 0.82, labelScale: 0.92 },
|
|
start: { style: 'double-ring', colorHex: '#cc006b', sizeScale: 1.02, accentRingScale: 1.24, labelScale: 1.02 },
|
|
finish: { style: 'double-ring', colorHex: '#cc006b', sizeScale: 1.06, accentRingScale: 1.28, glowStrength: 0.26, labelScale: 1.04, labelColorHex: '#fff4de' },
|
|
scoreBands: [
|
|
{ min: 0, max: 19, style: 'badge', colorHex: '#56ccf2', sizeScale: 0.88, accentRingScale: 1.06, labelScale: 0.94 },
|
|
{ min: 20, max: 49, style: 'badge', colorHex: '#f2c94c', sizeScale: 1.02, accentRingScale: 1.18, labelScale: 1.02 },
|
|
{ min: 50, max: 999999, style: 'badge', colorHex: '#eb5757', sizeScale: 1.14, accentRingScale: 1.32, glowStrength: 0.72, labelScale: 1.1 },
|
|
],
|
|
},
|
|
},
|
|
}
|