ca859c4aa4
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.
52 lines
1.8 KiB
TypeScript
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);
|
|
}
|