Files
DOSSIER-STANDALONE/CONVENTIONS.md
T

3.5 KiB
Raw Permalink Blame History

Projekt-Konventionen — Browser-BIM (cad)

Siehe ROADMAP.md für Vision, Architektur und Phasen.

Code-Konventionen (verbindlich)

  • Alle Bezeichner im Code sind ENGLISCH — Funktionen, Variablen, Typen, Felder, Datei-/Modulnamen. Keine deutschen Bezeichner. (Beispiel: computeJoins, nicht verschneidungBerechnen.)
  • UI-Texte und Kommentare dürfen Deutsch sein (Nutzeroberfläche ist deutsch).
  • Domänen-Begriffe möglichst nach Vectorworks-Terminologie benennen (englisch): Design Layer, Sheet/Drawing Layer, Component, Class, Hatch, Wall Style, Viewport.
  • Einheiten: intern alles in Metern (number). Anzeige via formatM.
  • Geometrie-Konventionen: Wand-Normale n = leftNormal(u) = (-u.y, u.x); bei CCW-Wicklung zeigt +n nach innen. Schichten werden außen (T/2) → innen (+T/2) gestapelt.

Code-Struktur (kein God-Component)

  • App.tsx bleibt ein dünner Shell (Store-Provider, Oberleiste, Docks+View-Router, Statusleiste, Floating-Panels, Ressourcen-Overlay) — keine Geschäftslogik darin.
  • Globaler Zustand in einem Store (src/state/, Slices: project/selection/view/layout). Komponenten lesen Zustand über Store-Hooks statt Prop-Drilling.
  • Features als eigene Module: src/views/ (View-Router-Teile), src/editors/ (Inline-Editoren), src/menus/ (Kontextmenü-Builder), src/panels/, src/ui/.
  • Ziel: modular + parallel bearbeitbar (verschiedene Features ≠ dieselbe Datei). Siehe docs/design/state-architecture.md.

UI-Konventionen

  • Listen-/Manager-Ansichten als saubere Tabellen: eine Kopfzeile mit Spaltentiteln (sticky), darunter kompakte Datenzeilen mit Inline-Edit pro Zelle. KEINE wiederholten Feld-Beschriftungen pro Zeile. Gilt für Component-/Hatch-/ Line-Manager und ähnliche Listen.
  • Dunkler DOSSIER-Stil; kompakt, ruhig, viel Inhalt pro Fläche.
  • UI-Text immer übersetzbar (i18n): KEINE hartcodierten sichtbaren Strings im JSX. Alle Texte über eine Übersetzungsfunktion t('key') aus einem Wörterbuch (Default-Sprache Deutsch). Keys wie bei DOSSIER (common.delete, layers.settings, topbar.resources). Neue Komponenten gleich mit t(...) schreiben. Identifier/Keys bleiben englisch; nur die Wörterbuch-Werte sind die übersetzbaren Texte.

Native-App-Verhalten (kein Browser-Standard)

Die App soll sich wie ein natives Programm anfühlen, nicht wie eine Webseite:

  • Browser-Kontextmenü global unterdrücken (document contextmenupreventDefault). Nur unser eigenes ContextMenu erscheint; auf Flächen ohne eigenes Menü passiert nichts.
  • Keine Textauswahl / „Alles markieren": user-select: none global; user-select: text NUR in echten Eingaben (input, textarea, [contenteditable]). Ctrl+A außerhalb von Eingaben unterbinden.
  • Bild-/Element-Drag aus (draggable=false wo nötig); keine Browser-Drag-Gesten.

Architektur-Prinzip

Ein semantisches Modell ist die einzige Wahrheit; jede Ansicht (3D, Grundriss, Schnitt) wird abgeleitet. Darstellung (Detailgrad, Stile, Schraffuren) wird beim Rendern angewandt, nie in die Geometrie eingebacken.

Arbeitsweise (für Beiträge)

  • Substanzielle, mehrstufige Arbeit schrittweise in isolierten Schritten angehen.
  • Änderungen verifizieren: npx tsc -b, npm run build, und Screenshot via node scripts/probe.mjs (schreibt scripts/probe.png) bzw. probe-ff*.mjs für Firefox-Fälle. Screenshot ansehen und Geometrie visuell prüfen.
  • Dev-Server läuft via npm run dev (Vite, Port 5173).