Files
DOSSIER-STANDALONE/src/panels/registry.ts
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

52 lines
1.8 KiB
TypeScript

// Panel-Registry — die Plugin-Naht.
//
// Modulweites Verzeichnis aller bekannten Panels. Kern-Panels und Plugins/
// eigene Panels rufen `registerPanel` (typisch beim Import ihres Moduls) auf;
// die Docks fragen anschließend über `getPanel`/`listPanels` ab. So bleibt der
// Rahmen offen für Erweiterungen, ohne ihn zu ändern.
//
// Bezeichner englisch, Kommentare deutsch (CONVENTIONS.md).
import type { PanelDef } from "./types";
/** Modulweites Verzeichnis: Panel-ID → Definition (Einfügereihenfolge bewahrt). */
const registry = new Map<string, PanelDef>();
/**
* Registriert ein Panel. Idempotent pro ID: ein erneuter Aufruf mit derselben
* ID ersetzt die vorhandene Definition (praktisch für Hot-Reload und für
* Plugins, die Kern-Panels überschreiben). Liefert die übergebene Definition
* zurück, damit Aufrufe verkettet werden können.
*/
export function registerPanel(def: PanelDef): PanelDef {
registry.set(def.id, def);
return def;
}
/** Liefert die registrierte Panel-Definition zur ID oder `undefined`. */
export function getPanel(id: string): PanelDef | undefined {
return registry.get(id);
}
/** Liefert alle registrierten Panels in Registrierungsreihenfolge. */
export function listPanels(): PanelDef[] {
return [...registry.values()];
}
/**
* Ob zu einer ID ein Panel registriert ist. Hilfreich, um aus einem
* persistierten Layout verschwundene (z. B. von einem deaktivierten Plugin
* stammende) Panel-IDs herauszufiltern.
*/
export function hasPanel(id: string): boolean {
return registry.has(id);
}
/**
* Entfernt ein Panel aus der Registry. Liefert `true`, wenn etwas entfernt
* wurde. Vor allem für Tests und das Entladen von Plugins gedacht.
*/
export function unregisterPanel(id: string): boolean {
return registry.delete(id);
}