feat: plugins v1

This commit is contained in:
2026-04-29 01:14:14 +02:00
parent ec3802ade6
commit 6920f93b41
86 changed files with 9036 additions and 14 deletions

View File

@@ -135,6 +135,9 @@
@case ('general') {
General
}
@case ('plugins') {
Plugins
}
@case ('network') {
Network
}
@@ -193,6 +196,9 @@
@case ('general') {
<app-general-settings />
}
@case ('plugins') {
<app-plugin-manager (closed)="navigate('general')" />
}
@case ('network') {
<app-network-settings />
}

View File

@@ -21,6 +21,7 @@ import {
lucideGlobe,
lucideAudioLines,
lucidePalette,
lucidePackage,
lucideSettings,
lucideUsers,
lucideBan,
@@ -33,6 +34,7 @@ import { selectSavedRooms, selectCurrentRoom } from '../../../store/rooms/rooms.
import { selectCurrentUser } from '../../../store/users/users.selectors';
import { Room, UserRole } from '../../../shared-kernel';
import { NotificationsSettingsComponent } from '../../../domains/notifications';
import { PluginManagerComponent } from '../../../domains/plugins/feature/plugin-manager/plugin-manager.component';
import { resolveLegacyRole, resolveRoomPermission } from '../../../domains/access-control';
import { GeneralSettingsComponent } from './general-settings/general-settings.component';
@@ -62,6 +64,7 @@ import {
GeneralSettingsComponent,
NetworkSettingsComponent,
NotificationsSettingsComponent,
PluginManagerComponent,
VoiceSettingsComponent,
UpdatesSettingsComponent,
DataSettingsComponent,
@@ -81,6 +84,7 @@ import {
lucideGlobe,
lucideAudioLines,
lucidePalette,
lucidePackage,
lucideSettings,
lucideUsers,
lucideBan,
@@ -117,6 +121,7 @@ export class SettingsModalComponent {
readonly globalPages: { id: SettingsPage; label: string; icon: string }[] = [
{ id: 'general', label: 'General', icon: 'lucideSettings' },
{ id: 'plugins', label: 'Plugins', icon: 'lucidePackage' },
{ id: 'theme', label: 'Theme Studio', icon: 'lucidePalette' },
{ id: 'network', label: 'Network', icon: 'lucideGlobe' },
{ id: 'notifications', label: 'Notifications', icon: 'lucideBell' },

View File

@@ -18,6 +18,18 @@
<h1 class="text-2xl font-bold text-foreground">Settings</h1>
</div>
<button
type="button"
(click)="openPluginStore()"
class="mb-6 flex items-center gap-2 rounded-lg bg-secondary px-3 py-1.5 text-sm text-foreground transition-colors hover:bg-secondary/80"
>
<ng-icon
name="lucidePackage"
class="h-4 w-4"
/>
Plugin Store
</button>
<!-- Server Endpoints Section -->
<div class="bg-card border border-border rounded-lg p-6 mb-6">
<div class="flex items-center justify-between mb-4">

View File

@@ -20,7 +20,8 @@ import {
lucideRefreshCw,
lucideGlobe,
lucideArrowLeft,
lucideAudioLines
lucideAudioLines,
lucidePackage
} from '@ng-icons/lucide';
import { ServerDirectoryFacade } from '../../domains/server-directory';
@@ -47,7 +48,8 @@ import { STORAGE_KEY_CONNECTION_SETTINGS, STORAGE_KEY_VOICE_SETTINGS } from '../
lucideRefreshCw,
lucideGlobe,
lucideArrowLeft,
lucideAudioLines
lucideAudioLines,
lucidePackage
})
],
templateUrl: './settings.component.html'
@@ -173,6 +175,12 @@ export class SettingsComponent implements OnInit {
this.router.navigate(['/']);
}
openPluginStore(): void {
const returnUrl = this.router.url.startsWith('/plugin-store') ? '/search' : this.router.url;
void this.router.navigate(['/plugin-store'], { queryParams: { returnUrl } });
}
/** Load voice settings (noise reduction) from localStorage. */
loadVoiceSettings(): void {
const settings = localStorage.getItem(STORAGE_KEY_VOICE_SETTINGS);