Files
GerbilManager/gerbil-manager-web/src/pedigree/chipColors.ts
Gulum b72e0a9d9a GEN-4c: PEW=REW konsolidiert (Julian) + REW-2-Verifikation
- catalog.ts: 'Pink Eyed White (PEW)' -> 'REW' (frozen rename; chch+pp
  engine-computes 'REW' per Julian; entry now round-trips correctly)
- genetics.test.ts: REW_SHADOWED-Ausnahme entfernt (kein Bedarf mehr);
  CATALOG[0]-Assertion auf 'REW'; aa cchmcchm+pp-Test als REW-2-Nachweis
  (Julian: A-Locus egal fuer REW-Bedingung)
- chipColors.ts: 'REW'-Chip ergaenzt (gleiche Farbe wie PEW; additive;
  PEW-Eintrag bleibt fuer Rueckwaertskompatibilitaet waehrend DB-Migration)
- Seed-Artefakte regeneriert (70 Reihen, REW statt PEW an Position 0)
- FLAGGED to god: 'Altweiss (REW)' hat volles C (C:'C') -> faellt NICHT
  unter REW-Bedingung; warte auf Julian-Entscheid vor Aenderung
2026-06-07 01:08:23 +02:00

57 lines
2.2 KiB
TypeScript

/**
* FEAT-4: Anzeigefarben der Farbschlag-Chips auf den Stammbaum-Karten.
*
* Reine Präsentation (angenäherte Fellfarben) — KEINE Genetik. Schlüssel sind
* die Basisnamen aus dem GEN-1-Katalog (src/genetics/catalog.ts BASE_COLORS);
* Modifikatoren („… Schecke“, „… Rex“) werden über den Basisnamen-Präfix
* aufgelöst. Unbekannte Namen → null, die Karte nutzt dann den neutralen Chip.
*/
export interface ChipColor {
readonly bg: string
readonly fg: string
}
const CHIP_COLORS: Record<string, ChipColor> = {
// Colourpoint / C-Serie
// GEN-4c: PEW renamed to REW in catalog (Julian: PEW=REW). Both kept here for
// backward-compat during DB migration (old animals may still carry the old name).
'REW': { bg: '#f7f3ec', fg: '#8a7d6b' },
'Pink Eyed White (PEW)': { bg: '#f7f3ec', fg: '#8a7d6b' },
Hermelin: { bg: '#f3ede2', fg: '#8a7d6b' },
Himalaya: { bg: '#efe6d8', fg: '#8a7d6b' },
Zobel: { bg: '#6b4f3a', fg: '#ffffff' },
// Schimmel
Schwarzschimmel: { bg: '#7a7470', fg: '#ffffff' },
Rotaugenschimmel: { bg: '#c0a99a', fg: '#3b3026' },
// Schwarzäugige Vollfarben
Agouti: { bg: '#b3854d', fg: '#ffffff' },
Schwarz: { bg: '#2f2a26', fg: '#ffffff' },
Silberagouti: { bg: '#b9b3a8', fg: '#3b3026' },
Anthrazit: { bg: '#5a5550', fg: '#ffffff' },
Algierfuchs: { bg: '#c98a3d', fg: '#ffffff' },
Blau: { bg: '#8a93a5', fg: '#ffffff' },
// Rotäugige Vollfarben
Gold: { bg: '#d9a441', fg: '#3b3026' },
Platin: { bg: '#c8c2bd', fg: '#3b3026' },
Goldfuchs: { bg: '#e0b15e', fg: '#3b3026' },
Rotfuchs: { bg: '#b56a3c', fg: '#ffffff' },
'dd Gold': { bg: '#e3c98f', fg: '#3b3026' },
'dd Platin': { bg: '#d9d4cf', fg: '#3b3026' },
}
/** Chipfarbe für einen Farbschlag-Namen (inkl. Modifikator-Suffixen). */
export function chipColorFor(farbschlag: string): ChipColor | null {
const exact = CHIP_COLORS[farbschlag]
if (exact) return exact
// Modifikatoren abgetrennt: längster passender Basisname gewinnt.
let best: ChipColor | null = null
let bestLength = 0
for (const [name, color] of Object.entries(CHIP_COLORS)) {
if (farbschlag.startsWith(name + ' ') && name.length > bestLength) {
best = color
bestLength = name.length
}
}
return best
}