feat(plugins): add frontend plugin system (P2.12 M2) (#190) master
* 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