librelad 25e3570616 refactor(webui): fold app-detail into the apps feature
app-detail was a separate sibling component but is really the apps feature's
detail view (shares the apps controllers + apps-unified-layout). Merge it in:
the apps feature now owns /apps*, /app, /app* and its mount() dispatches grid
vs detail by path (checks /apps first for wildcard precedence). Removed the
components/app-detail/ folder + its manifest entry. (The 1-level feature scan
means a feature must be a direct components/<id>/ child — folding the routes
into apps is the correct way to express the relationship.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: librelad <librelad@digitalangels.vip>
2026-05-30 15:27:36 +01:00

119 lines
2.6 KiB
JSON

{
"version": 1,
"note": "Phase-0 hand-committed manifest (to be replaced by the generated /data/webui/generated/features.json once the scan generator lands — see docs/frontend-modularization.md). 'module' is the feature's self-registering index.js; the kernel loads these from here so they no longer need <script> tags in index.html. 'handler' names the LibrePortalSPAClean method kept as the fallback during the strangler migration; 'navId' is the topbar element id for active-state highlighting.",
"features": [
{
"id": "dashboard",
"routes": [
"/",
"/dashboard"
],
"module": "/components/dashboard/index.js",
"handler": "handleDashboard",
"navId": "nav-dashboard",
"nav": {
"label": "Dashboard",
"order": 10
}
},
{
"id": "apps",
"routes": [
"/apps",
"/apps*",
"/app",
"/app*"
],
"module": "/components/apps/index.js",
"handler": "handleApps",
"navId": "nav-app-center",
"nav": {
"label": "App Center",
"order": 20
}
},
{
"id": "admin",
"routes": [
"/admin",
"/admin*"
],
"module": "/components/admin/index.js",
"handler": "handleAdmin",
"navId": "nav-config",
"nav": {
"label": "Admin",
"order": 40
}
},
{
"id": "config-redirect",
"routes": [
"/config",
"/config*"
],
"handler": "handleConfigRedirect",
"navId": "nav-config"
},
{
"id": "tasks",
"routes": [
"/tasks",
"/tasks*"
],
"module": "/components/tasks/index.js",
"handler": "handleTasks",
"navId": "nav-tasks",
"nav": {
"label": "Tasks",
"order": 60
}
},
{
"id": "updater",
"routes": [
"/updater",
"/updater*"
],
"module": "/components/updater/index.js",
"navId": "nav-updater",
"nav": {
"label": "Updates",
"order": 30
}
},
{
"id": "backup",
"routes": [
"/backup",
"/backup*"
],
"module": "/components/backup/index.js",
"handler": "handleBackup",
"navId": "nav-backup",
"nav": {
"label": "Backups",
"order": 50
}
},
{
"id": "peers",
"routes": [
"/peers",
"/peers*"
],
"handler": "handlePeers",
"navId": "nav-config"
},
{
"id": "ssh",
"routes": [
"/ssh",
"/ssh*"
],
"handler": "handleSsh",
"navId": "nav-config"
}
]
}