Files
DOSSIER-STANDALONE/CONVENTIONS.md
T
karim ca859c4aa4 Browser-BIM (cad): semantisches Modell, abgeleitete 2D/3D-Sichten, Zeichenwerkzeuge
Standalone-Browser-Port von DOSSIER. Enthaelt das semantische Modell mit
Plan-/3D-Ableitung, Zeichen- und Editierwerkzeuge, Rhino-artiges Befehlssystem,
dockbares Panel-System, Resource-Manager, DXF/.lin/.pat-Import, i18n (de/en)
sowie Projektdokumentation und Probe-Harness.
2026-06-30 20:52:27 +02:00

65 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Projekt-Konventionen — Browser-BIM (cad)
Siehe [ROADMAP.md](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` `contextmenu``preventDefault`).
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 an **Subagenten** delegieren, wo möglich.
- Ä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).