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
+8 -1
View File
@@ -16,7 +16,7 @@ export type Vec2 = { x: number; y: number };
import type { SiaCategory } from "../geometry/roomArea";
export type { SiaCategory } from "../geometry/roomArea";
// Rich-Text-Dokument für den Raum-Stempel (frei editierbarer Teil).
import type { RichTextDoc, Align } from "../text/richText";
import type { RichTextDoc, Align, Marks } from "../text/richText";
export type { RichTextDoc } from "../text/richText";
// Ansichts-Enums für Ausschnitte/View-Snapshots (Ansichtstyp, Kamera-Preset,
// Detailgrad). Rein type-only importiert — zur Laufzeit erased, kein Zyklus
@@ -1279,6 +1279,13 @@ export type Drawing2DGeom =
* sie, bleibt es einzeiliger Text (heutiges Verhalten).
*/
width?: number;
/**
* Optionale einheitliche Formatierung des ganzen Texts (Schriftfamilie, fett/
* kursiv, Farbe …) — gesetzt über die Text-Formatier-Gruppe der Oberleiste,
* wenn dieser Text selektiert ist. Die Grösse bleibt bewusst über `height`
* (Modell-Meter) geführt, nicht über `marks.sizePt`.
*/
marks?: Marks;
};
/** Ein freies 2D-Zeichenelement auf einer Zeichnungsebene. */