feat(plugins): plugin pages, per-user config, capabilities gate, mobile/telegram refactors

- Plugin HTTP routes + web pages (plugin-page-host, plugin-catalog, plugin-detail)
- Plugin access grants + per-user config (DB tables + API + frontend forms)
- Capabilities-based guard (caps.rs) replacing role-id checks
- Mobile connector: message routing, payload types, router refactor
- Telegram bot: auth flow, event handling improvements
- Honcho plugin: substantial rework
- Sidebar: plugin pages integration, role-driven visibility
- i18n: new strings for plugins, connectors, capabilities
- Remove unused mascot asset
This commit is contained in:
2026-07-19 20:47:09 +01:00
parent f85876350e
commit ba911ae8cb
50 changed files with 3186 additions and 305 deletions
+30
View File
@@ -270,3 +270,33 @@
font-size: 0.7rem;
color: var(--placeholder-color);
}
/* ── Plugin health dot ────────────────────────────────────────────────────────
*
* The plugin catalog's red/green status: green = enabled, running and fully
* configured; red = enabled but broken; grey = off. Same Bootstrap-subtle
* colour sources as the chips, so light/dark follows `data-bs-theme`.
*/
.plugin-status-dot {
display: inline-block;
width: 0.5rem;
height: 0.5rem;
border-radius: 50%;
flex-shrink: 0;
}
.plugin-status-dot--ok {
background: var(--bs-success);
box-shadow: 0 0 0 2px var(--bs-success-bg-subtle);
}
.plugin-status-dot--err {
background: var(--bs-danger);
box-shadow: 0 0 0 2px var(--bs-danger-bg-subtle);
}
.plugin-status-dot--off {
background: var(--placeholder-color);
opacity: 0.5;
}
+16
View File
@@ -76,6 +76,10 @@ roles-page,
shared-folders-page,
connectors-page,
connector-detail-page,
plugins-page,
plugin-catalog-page,
plugin-detail-page,
plugin-page-host,
marketplace-page,
catalog-page,
profile-page {
@@ -88,6 +92,18 @@ profile-page {
border-right: 1px solid var(--toolbar-border, #e5e9f0);
}
/* Plugin-contributed page fragments mount inside the host with the `plugin-id`
attribute set — make them fill the host column (the host is `flex:1`, but a
bare custom element has no default sizing). Generic across all plugins. */
plugin-page-host > [plugin-id] {
display: flex;
flex-direction: column;
flex: 1;
min-width: 0;
min-height: 0;
overflow: hidden;
}
/* ── Workspace placeholder ──────────────────────────────────────────────────── */
.app-workspace {