feat(plugins): add frontend plugin system (P2.12 M2) (#190)
* feat(plugins): update API client methods and add registry endpoints
* feat(plugins): add PluginContext provider and usePlugins hook
Provides plugin state to the component tree: fetches enabled plugins
from the API on mount, exposes isPluginEnabled/getPluginSettings
helpers, and a refreshPlugins method for admin pages to trigger
re-fetch after changes. Gracefully handles unauthenticated users
by returning an empty plugin list.
* feat(plugins): add PluginSlot component and plugin registry
* feat(plugins): wire admin plugins page to real API
* test(plugins): add tests for plugin frontend system
Tests for plugin component registry, PluginSlot component, and
PluginProvider context covering registration, rendering, error
boundaries, context propagation, and accessibility.
* feat(plugins): add PluginSlot placements across app
* fix(plugins): resolve type errors and lint issues in plugin tests
- Fix PluginSource type in test mocks ('builtin' -> 'core'/'official')
- Fix PluginSettingsSchema shape in test mocks (use empty object)
- Use mutable ref pattern for context capture in tests (avoids TS narrowing)
- Remove unused imports (screen, SlotName)
- Return safe default from usePlugins hook when no provider (SSR/test compat)
- Update admin plugins page test for new wired implementation
* style(plugins): format files with prettier
authored by