From 54ffb809c4943dce2024c39b2c3ed3e2a334fdd6 Mon Sep 17 00:00:00 2001 From: Gulum Date: Sat, 6 Jun 2026 22:32:16 +0200 Subject: [PATCH] CHARAKTERBOGEN-2 (E1): Trait-Katalog in 4 Kategorien + 10 neue Traits + Warnsignale - de.ts: traits-Array -> traitCategories (4 Kategorien: Sozialverhalten / Eignung & Umgang / Hobbys & Eigenarten / Wesen & Temperament); alle 15 bestehenden Keys erhalten (stored auf Live-Tieren); 10 neue Keys additiv; warn:true auf schwer-vergesellschaftbar + territorial. - format/traits.ts: TraitEntry/TraitCategory-Interface, TRAIT_CATEGORIES-Export, ALL_TRAITS via flatMap, neuer isWarnTrait()-Helper. - Charakterbogen.tsx: grouped-Rendering nach Kategorie (section + h4); warn-Chips mit trait-chip--warn-Klasse + trait-warn-badge. - charakterbogen.css: .trait-category__heading + .trait-chip--warn (amber) + .trait-warn-badge. - format/__tests__/traits.test.ts: 14 neue Vitest-Tests (Kategorien, Keys, warn, traitLabel/traitLabels). - Gate: vitest 122/122, tsc clean, build clean, eslint clean. --- .../src/components/Charakterbogen.tsx | 44 ++++----- .../src/components/charakterbogen.css | 30 +++++- .../src/format/__tests__/traits.test.ts | 91 +++++++++++++++++++ gerbil-manager-web/src/format/traits.ts | 24 ++++- gerbil-manager-web/src/strings/de.ts | 69 ++++++++++---- 5 files changed, 212 insertions(+), 46 deletions(-) create mode 100644 gerbil-manager-web/src/format/__tests__/traits.test.ts diff --git a/gerbil-manager-web/src/components/Charakterbogen.tsx b/gerbil-manager-web/src/components/Charakterbogen.tsx index f8a7ad1..e90c872 100644 --- a/gerbil-manager-web/src/components/Charakterbogen.tsx +++ b/gerbil-manager-web/src/components/Charakterbogen.tsx @@ -1,5 +1,5 @@ import { de } from '../strings/de' -import { ALL_TRAITS } from '../format/traits' +import { ALL_TRAITS, TRAIT_CATEGORIES } from '../format/traits' import './charakterbogen.css' export interface CharakterbogenProps { @@ -10,12 +10,6 @@ export interface CharakterbogenProps { onNoteChange: (note: string) => void } -/** - * FEAT-14: character sheet — a checkbox grid of traits + a free note. - * Controlled & reusable: rendered on the animal detail page (persisted) and in - * the Abgabe listing composer (feeds the AI sale-text). German labels from - * de.character.traits; the stored value is the trait KEY. - */ export default function Charakterbogen({ traits, note, @@ -29,26 +23,32 @@ export default function Charakterbogen({ const next = new Set(selected) if (next.has(key)) next.delete(key) else next.add(key) - // Preserve the vocabulary order for stable output. + // Preserve vocabulary (category) order for stable output. onTraitsChange(ALL_TRAITS.filter((tr) => next.has(tr.key)).map((tr) => tr.key)) } return (
- + {TRAIT_CATEGORIES.map((cat) => ( +
+

{cat.category}

+
    + {cat.traits.map((tr) => ( +
  • + +
  • + ))} +
+
+ ))}