feat(M3): Dashboard-Builder — Edit-Modus, Drag&Drop, Palette, Tabs (#361)

- DashboardBuilder: @dnd-kit 12-Spalten-Flow-Grid (seed-konsistent), View/Edit-Schalter, Resize, Tab-Verwaltung, Dashboard-CRUD + Set-Default, Dirty-Save
- MiniAppHost ersetzt DashboardWidgetLoader (lazy Registry + settings-Props); Palette nur renderbare Apps (component-Filter)
- WidgetSettingsForm generisch aus settings_schema; Bestands-Widgets settings-fähig (RecentContacts: limit)
- api/miniapps.ts + api/dashboards.ts (TanStack-Query-Hooks, documents.ts-Muster)
- Dashboard.tsx = Builder-Host (StatCards/SystemMetrics bleiben bis M4); Legacy-Grid/Loader gelöscht, Geister-Test ersetzt
- Tests: Builder 13/13, Page 11/11, i18n de/en, tsc clean, build OK
This commit is contained in:
Agent Zero
2026-08-30 21:28:40 +02:00
parent 74827156d0
commit 26948fdb51
16 changed files with 1257 additions and 221 deletions
+24
View File
@@ -138,6 +138,30 @@
"down": "Nicht verfügbar",
"unknown": "Unbekannt"
}
},
"builder": {
"edit": "Bearbeiten",
"save": "Speichern",
"create": "Neues Dashboard",
"delete": "Dashboard löschen",
"deleteConfirm": "Dashboard \"{{name}}\" wirklich löschen?",
"setDefault": "Als Standard",
"selectDashboard": "Dashboard auswählen",
"name": "Name",
"palette": "Widgets",
"paletteEmpty": "Keine Widgets verfügbar.",
"newTab": "Neuer Tab",
"addTab": "Tab hinzufügen",
"removeTab": "Tab entfernen",
"renameTab": "Tab umbenennen",
"tabName": "Tab-Name",
"widgetSettings": "Widget-Einstellungen",
"noSettings": "Keine Einstellungen verfügbar.",
"removeWidget": "Widget entfernen",
"wider": "Breiter",
"narrower": "Schmaler",
"taller": "Höher",
"shorter": "Niedriger"
}
},
"companies": {
+24
View File
@@ -138,6 +138,30 @@
"down": "Down",
"unknown": "Unknown"
}
},
"builder": {
"edit": "Edit",
"save": "Save",
"create": "New dashboard",
"delete": "Delete dashboard",
"deleteConfirm": "Really delete dashboard \"{{name}}\"?",
"setDefault": "Set as default",
"selectDashboard": "Select dashboard",
"name": "Name",
"palette": "Widgets",
"paletteEmpty": "No widgets available.",
"newTab": "New tab",
"addTab": "Add tab",
"removeTab": "Remove tab",
"renameTab": "Rename tab",
"tabName": "Tab name",
"widgetSettings": "Widget settings",
"noSettings": "No settings available.",
"removeWidget": "Remove widget",
"wider": "Wider",
"narrower": "Narrower",
"taller": "Taller",
"shorter": "Shorter"
}
},
"companies": {