Files
AstrBot/dashboard/src/utils
lxfight c58916b8e9 feat(dashboard): add plugin WebUI entries to sidebar with MDI icon support (#8569)
* feat(plugin): support icon field in metadata.yaml for sidebar icon

* feat(sidebar): add isRawTitle support for non-i18n sidebar titles

* feat(sidebar): add usePluginSidebarItems composable for dynamic plugin WebUI entries

* feat(sidebar): inject plugin WebUI items into sidebar before More group

* refactor(plugin-page): remove header, make iframe full-screen

* feat(sidebar): restore plugin WebUI collapsible group

* fix(plugin-page): prevent iframe from capturing mousemove during sidebar resize

- Use absolute positioning instead of negative margin for full-screen layout
- Zero container padding for plugin page route in FullLayout
- Disable pointer-events on iframe during sidebar drag to avoid event capture

* refactor(sidebar): share plugin state reactively instead of polling

- Replace polling + events with module-level reactive shared state
- useExtensionPage.getExtensions() populates pluginSidebarState
- usePluginSidebarItems uses computed() to derive sidebar menu
- Zero additional API calls, updates instantly on any plugin change

* fix(sidebar): restore initial plugin data fetch on sidebar mount

* feat(sidebar): render plugin icons via MDI SVG CDN instead of subset font

- Plugin icons loaded from https://cdn.jsdelivr.net/npm/@mdi/svg@7/svg/
- Removes subset limitation - plugins can use any MDI icon
- Fallback to subset font class for built-in sidebar items
- Default icon remains mdi-puzzle when plugin doesn't specify one

* fix(sidebar): render plugin icons as inline SVG with currentColor for theme matching

* docs: add plugin sidebar icon documentation

* docs: require mdi- prefix for plugin icon field

* chore: ruff format

* fix: address review feedback

- Add SVG sanitization to prevent XSS via v-html (reject <script>, event handlers)
- Extract MORE_GROUP_KEY shared constant to avoid hardcoded i18n key
- Parallel SVG loading with Promise.all instead of serial
- Pure buildPluginItems, mutate iconSvg in place to avoid redundant rebuilds
- Fallback to default icon SVG when loading fails
- Revert accidental pnpm-lock.yaml changes

* chore: remove webui icon

---------

Co-authored-by: Soulter <905617992@qq.com>
2026-06-06 00:35:52 +08:00
..
2026-05-03 23:00:16 +08:00