Text-Styling-Leiste wirkt auf selektierten Freitext/Textspalte

Die Text-Formatier-Gruppe der Oberleiste formatierte bisher nur den
Raum-Stempel. Jetzt ist auch ein selektierter Freitext/Textspalten-Element
(Drawing2D shape "text") ein Formatier-Ziel:
- Neues optionales Feld Drawing2D-Text.marks (Marks) für einheitliche
  Formatierung (Schriftfamilie, fett/kursiv/unterstrichen, Farbe).
- App.textTarget adaptiert den Text über docFromText/plainText an die
  Rich-Text-Leiste; die GRÖSSE bleibt bewusst über die Modell-Höhe (Meter),
  nicht über pt (massstabslos wäre falsch) — sizePt wird verworfen.
- generatePlan/PlanView rendern die Marks (fontFamily/-weight/-style/
  textDecoration); marks.color hat Vorrang vor der Kategorie-Farbe.
+3 Tests. tsc + vitest grün.
This commit is contained in:
2026-07-09 01:28:37 +02:00
parent 938d6421f9
commit d0b9d22141
5 changed files with 141 additions and 16 deletions
+13 -1
View File
@@ -3283,12 +3283,24 @@ function renderPrimitive(
} else {
lines.push(p.text);
}
// Einheitliche Formatierung (Text-Werkzeug + Oberleisten-Formatier-Gruppe):
// Schriftfamilie/fett/kursiv/Unterstreichung aus `marks`; Grösse bleibt über
// heightM (Modell-Meter). Farbe steckt bereits in p.color (marks.color-Vorrang
// in generatePlan aufgelöst).
const mk = p.marks;
const deco =
mk && (mk.underline || mk.strike)
? [mk.underline ? "underline" : "", mk.strike ? "line-through" : ""].join(" ").trim()
: undefined;
return (
<text
x={c.x}
y={c.y}
fontSize={fontSize}
fontFamily="var(--font-ui, sans-serif)"
fontFamily={mk?.font ?? "var(--font-ui, sans-serif)"}
fontWeight={mk?.bold ? 700 : undefined}
fontStyle={mk?.italic ? "italic" : undefined}
textDecoration={deco}
fill={p.color}
opacity={p.greyed ? 0.45 : undefined}
textAnchor="start"