# Dossier Launcher Standalone macOS-App, die als Projekt-Hub für Dossier-Projekte in Rhino 8 dient. Wählt eine `.3dm` aus, konfiguriert pro Projekt welche Module aktiv sind, startet Rhino mit der Datei. Das Python-Plugin in `rhino/` liest beim Start die `dossier.project.json` (neben der `.3dm`) und lädt nur die aktivierten Module. ## Setup (einmalig) ### 1. Dependencies installieren ```bash cd launcher npm install ``` Beim ersten `npm run tauri dev` zieht Cargo zusätzlich die Rust-Dependencies (dauert ein paar Minuten). ### 2. Rhino Auto-Run einrichten Damit die Module bei jedem Rhino-Start automatisch laden: 1. Rhino 8 starten 2. `Rhinoceros 8` → `Preferences` → `General` → **Startup commands** 3. Folgende Zeile eintragen: ``` _-RunPythonScript "/Users/karim/STUDIO/rhino-panel/rhino/startup.py" ``` 4. OK → Rhino neu starten Ab jetzt lädt `startup.py` bei jedem Rhino-Start: - mit `dossier.project.json` neben der `.3dm` → nur konfigurierte Module - ohne Config → alle Module (Backwards-Compat zum bisherigen Verhalten) ## Entwicklung ```bash npm run tauri dev ``` Startet Vite (Port 5174) und öffnet die Tauri-Window. Hot-Reload für React, Rust-Änderungen brauchen einen Rebuild. ## Build (.app + .dmg) ```bash npm run tauri build ``` Output: `src-tauri/target/release/bundle/macos/Dossier.app` und `src-tauri/target/release/bundle/dmg/Dossier_0.1.0_*.dmg` **Vor dem ersten Build**: Icons hinterlegen. Aktuell ist `bundle.icon` in `src-tauri/tauri.conf.json` leer. Mit ```bash npm run tauri icon path/zur/icon.png ``` generiert Tauri das vollständige Icon-Set (1024×1024 PNG als Quelle reicht). ## Architektur ``` launcher/ ├── modules.json # Modul-Manifest (statisch, in Binary einkompiliert) ├── src/ # React-Frontend │ ├── App.jsx # Project Hub + Modul-Dialog │ └── styles.css └── src-tauri/ # Rust-Backend ├── src/lib.rs # Tauri-Commands └── tauri.conf.json ``` **Datenfluss:** 1. Launcher liest `~/Library/Application Support/Dossier/recent.json` 2. User klickt „Öffnen" → Launcher schreibt `dossier.project.json` neben die `.3dm` und ruft `open -a "Rhinoceros 8" file.3dm` 3. Rhino startet, `startup.py` läuft, liest die Config, lädt nur die aktivierten Module 4. Jedes Modul registriert sein eigenes Panel via `panel_base.register_and_open` ## Module-Manifest erweitern Wenn ein neues Modul dazukommt, **drei Stellen** synchron halten: 1. `launcher/modules.json` — Eintrag mit `id`, `name`, `description`, `pythonModule`, `dependsOn` 2. `rhino/startup.py` — `_MODULE_TO_PY` Map ergänzen 3. `rhino/.py` — die Python-Implementierung Launcher rebuilden (`npm run tauri build`), neue `.app` ersetzt die alte.