106 lines
2.9 KiB
TypeScript
106 lines
2.9 KiB
TypeScript
// Ribbon-Registry (docs/design/ribbon-ui-plan.md §Architektur) — EINE
|
|
// datengetriebene Beschreibung aller Ribbon-Elemente. Die Ribbon-Tabs UND eine
|
|
// spätere modulare Custom-Bar (Phase 4) sind bloß zwei Ansichten über dieselbe
|
|
// Registry, ohne Sonderweg pro Element.
|
|
//
|
|
// Ein `RibbonItem` ist entweder ein Werkzeug (`tool` → onSelectTool, wie die
|
|
// Werkzeug-Sidebar) oder ein Engine-Befehl (`command` → engine.start). Beide
|
|
// münden in exakt DENSELBEN Pfad wie Klick in der alten Sidebar bzw. das Tippen
|
|
// des Befehlsnamens — keine Duplikate.
|
|
//
|
|
// Bezeichner englisch, UI-Text/Kommentare deutsch (CONVENTIONS.md). Sichtbare
|
|
// Texte kommen als i18n-Schlüssel und werden erst in der Komponente über t(...)
|
|
// aufgelöst.
|
|
|
|
import type { ToolId } from "../../tools/types";
|
|
|
|
/** Ein aktivierbares Ribbon-Element. Bei `command` wird die Beschriftung aus der
|
|
* Befehls-Registry (`getCommand(name).labelKey`) abgeleitet — kein doppeltes
|
|
* Pflegen von Labels. */
|
|
export type RibbonItem =
|
|
| { kind: "tool"; id: ToolId }
|
|
| { kind: "command"; name: string };
|
|
|
|
/** Eine benannte Gruppe von Elementen innerhalb eines Tabs. */
|
|
export interface RibbonGroup {
|
|
titleKey: string;
|
|
items: RibbonItem[];
|
|
}
|
|
|
|
/** Kennung eines Ribbon-Tabs (fest, für Tab-State + i18n). */
|
|
export type RibbonTabId = "2d" | "3d" | "bim" | "views";
|
|
|
|
/** Ein Ribbon-Tab: Beschriftung + gruppierte Elemente. */
|
|
export interface RibbonTab {
|
|
id: RibbonTabId;
|
|
labelKey: string;
|
|
groups: RibbonGroup[];
|
|
}
|
|
|
|
const t = (id: ToolId): RibbonItem => ({ kind: "tool", id });
|
|
const c = (name: string): RibbonItem => ({ kind: "command", name });
|
|
|
|
/**
|
|
* Die Ribbon-Tabs (Reihenfolge 2D·3D·BIM·Ansichten). 2D (Zeichnen + Ändern) und
|
|
* BIM (Bauteile) sind datengetrieben aus Werkzeugen/Befehlen; „Ansichten" trägt
|
|
* reichen Custom-Inhalt (aus der TopBar gemergt, siehe `ViewRibbonTab` — die
|
|
* Registry lässt seine `groups` leer). 3D ist vorerst leer (spätere Phase).
|
|
*/
|
|
export const RIBBON_TABS: RibbonTab[] = [
|
|
{
|
|
id: "2d",
|
|
labelKey: "ribbon.tab.2d",
|
|
groups: [
|
|
{
|
|
titleKey: "ribbon.group.draw",
|
|
items: [
|
|
t("select"),
|
|
t("line"),
|
|
t("polyline"),
|
|
t("rect"),
|
|
t("circle"),
|
|
t("arc"),
|
|
],
|
|
},
|
|
{
|
|
titleKey: "ribbon.group.modify",
|
|
items: [
|
|
c("move"),
|
|
c("copy"),
|
|
c("mirror"),
|
|
c("offset"),
|
|
c("trim"),
|
|
c("join"),
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: "3d",
|
|
labelKey: "ribbon.tab.3d",
|
|
groups: [],
|
|
},
|
|
{
|
|
id: "bim",
|
|
labelKey: "ribbon.tab.bim",
|
|
groups: [
|
|
{
|
|
titleKey: "ribbon.group.components",
|
|
items: [
|
|
t("wall"),
|
|
t("window"),
|
|
t("door"),
|
|
t("stair"),
|
|
t("ceiling"),
|
|
t("room"),
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: "views",
|
|
labelKey: "ribbon.tab.views",
|
|
groups: [],
|
|
},
|
|
];
|