From the feng-shui audit (all adversarially verified): - BUG (high): apps-grid.js category tiles used onerror fallback /core/icons/categories/default.svg, which doesn't exist (the dir has misc.svg as its generic icon, which data-loader.js already uses). Any category missing its named SVG showed a broken-image glyph. Repointed to /core/icons/categories/misc.svg. - TIDY: core/forms was the lone depth-3 nesting — JS at forms/controls/js/ while its CSS sat at forms/css/ and every other core subsystem uses <name>/js/. 'controls/' grouped nothing (just the 2 custom-* widgets), so flattened to core/forms/js/ (+ updated index.html). forms is now symmetric. - CONSISTENCY: components/manifest.dev.json entries carried nav.order but not the top-level 'order' that each feature.json has; added it so the API-down fallback matches the live /api/features/list scan. Signed-off-by: librelad <librelad@digitalangels.vip>
98 lines
2.3 KiB
JSON
98 lines
2.3 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
|
|
},
|
|
"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
|
|
},
|
|
"order": 20
|
|
},
|
|
{
|
|
"id": "admin",
|
|
"routes": [
|
|
"/admin",
|
|
"/admin*"
|
|
],
|
|
"module": "/components/admin/index.js",
|
|
"handler": "handleAdmin",
|
|
"navId": "nav-config",
|
|
"nav": {
|
|
"label": "Admin",
|
|
"order": 40
|
|
},
|
|
"order": 40
|
|
},
|
|
{
|
|
"id": "tasks",
|
|
"routes": [
|
|
"/tasks",
|
|
"/tasks*"
|
|
],
|
|
"module": "/components/tasks/index.js",
|
|
"handler": "handleTasks",
|
|
"navId": "nav-tasks",
|
|
"nav": {
|
|
"label": "Tasks",
|
|
"order": 60
|
|
},
|
|
"order": 60
|
|
},
|
|
{
|
|
"id": "updater",
|
|
"routes": [
|
|
"/updater",
|
|
"/updater*"
|
|
],
|
|
"module": "/components/updater/index.js",
|
|
"navId": "nav-updater",
|
|
"nav": {
|
|
"label": "Updates",
|
|
"order": 30
|
|
},
|
|
"order": 30
|
|
},
|
|
{
|
|
"id": "backup",
|
|
"routes": [
|
|
"/backup",
|
|
"/backup*"
|
|
],
|
|
"module": "/components/backup/index.js",
|
|
"handler": "handleBackup",
|
|
"navId": "nav-backup",
|
|
"nav": {
|
|
"label": "Backups",
|
|
"order": 50
|
|
},
|
|
"order": 50
|
|
}
|
|
]
|
|
}
|