From d223acefcfea748bdd5a705e4dd4cbfe07a4a969 Mon Sep 17 00:00:00 2001 From: Carlos Santos <4a.santos@gmail.com> Date: Fri, 19 Sep 2025 11:56:10 +0200 Subject: [PATCH] ov-components: add toolbar panel buttons component with event handling and styling --- .../toolbar-panel-buttons.component.html | 55 ++++++++ .../toolbar-panel-buttons.component.scss | 11 ++ .../toolbar-panel-buttons.component.ts | 43 +++++++ .../components/toolbar/toolbar.component.html | 77 +++--------- .../components/toolbar/toolbar.component.scss | 7 -- .../openvidu-components-angular-ui.module.ts | 119 +++++++++--------- .../src/public-api.ts | 1 + 7 files changed, 190 insertions(+), 123 deletions(-) create mode 100644 openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar-panel-buttons/toolbar-panel-buttons.component.html create mode 100644 openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar-panel-buttons/toolbar-panel-buttons.component.scss create mode 100644 openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar-panel-buttons/toolbar-panel-buttons.component.ts diff --git a/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar-panel-buttons/toolbar-panel-buttons.component.html b/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar-panel-buttons/toolbar-panel-buttons.component.html new file mode 100644 index 00000000..c049e743 --- /dev/null +++ b/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar-panel-buttons/toolbar-panel-buttons.component.html @@ -0,0 +1,55 @@ + + + + + + + + + + + + + diff --git a/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar-panel-buttons/toolbar-panel-buttons.component.scss b/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar-panel-buttons/toolbar-panel-buttons.component.scss new file mode 100644 index 00000000..d7e2bf77 --- /dev/null +++ b/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar-panel-buttons/toolbar-panel-buttons.component.scss @@ -0,0 +1,11 @@ +:host { + .panel-button { + border-radius: var(--ov-toolbar-buttons-radius); + color: var(--ov-secondary-action-color); + } + + .active-btn, + ::ng-deep .active-btn { + background-color: var(--ov-accent-action-color) !important; + } +} diff --git a/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar-panel-buttons/toolbar-panel-buttons.component.ts b/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar-panel-buttons/toolbar-panel-buttons.component.ts new file mode 100644 index 00000000..54ee4c97 --- /dev/null +++ b/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar-panel-buttons/toolbar-panel-buttons.component.ts @@ -0,0 +1,43 @@ +import { Component, EventEmitter, Input, Output, TemplateRef } from '@angular/core'; + +@Component({ + selector: 'ov-toolbar-panel-buttons', + templateUrl: './toolbar-panel-buttons.component.html', + styleUrl: './toolbar-panel-buttons.component.scss', + standalone: false +}) +export class ToolbarPanelButtonsComponent { + // Inputs from toolbar + @Input() isMinimal: boolean = false; + @Input() isConnectionLost: boolean = false; + @Input() isActivitiesOpened: boolean = false; + @Input() isParticipantsOpened: boolean = false; + @Input() isChatOpened: boolean = false; + @Input() unreadMessages: number = 0; + @Input() showActivitiesPanelButton: boolean = true; + @Input() showParticipantsPanelButton: boolean = true; + @Input() showChatPanelButton: boolean = true; + @Input() recordingStatus: any; + @Input() broadcastingStatus: any; + @Input() _recordingStatus: any; + @Input() _broadcastingStatus: any; + @Input() toolbarAdditionalPanelButtonsTemplate: TemplateRef | undefined; + + // Outputs back to toolbar + @Output() toggleActivitiesPanel: EventEmitter = new EventEmitter(); + @Output() toggleParticipantsPanel: EventEmitter = new EventEmitter(); + @Output() toggleChatPanel: EventEmitter = new EventEmitter(); + + // Local methods that emit events + onToggleActivities(expand?: string) { + this.toggleActivitiesPanel.emit(expand); + } + + onToggleParticipants() { + this.toggleParticipantsPanel.emit(); + } + + onToggleChat() { + this.toggleChatPanel.emit(); + } +} diff --git a/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar.component.html b/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar.component.html index 8bdfa348..7a465c14 100644 --- a/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar.component.html +++ b/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar.component.html @@ -85,63 +85,26 @@ > - + diff --git a/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar.component.scss b/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar.component.scss index 65704079..5a896e20 100644 --- a/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar.component.scss +++ b/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/toolbar/toolbar.component.scss @@ -54,11 +54,6 @@ max-height: 100% !important; } - #menu-buttons-container button { - border-radius: var(--ov-toolbar-buttons-radius); - color: var(--ov-secondary-action-color); - } - #branding-logo { background-color: var(--ov-primary-action-color); border-radius: var(--ov-surface-radius); @@ -122,8 +117,6 @@ animation: blinker 1.5s linear infinite; } - - ::ng-deep .mat-badge-content { background-color: var(--ov-warn-color); } diff --git a/openvidu-components-angular/projects/openvidu-components-angular/src/lib/openvidu-components-angular-ui.module.ts b/openvidu-components-angular/projects/openvidu-components-angular/src/lib/openvidu-components-angular-ui.module.ts index 6a391d56..d62aafed 100644 --- a/openvidu-components-angular/projects/openvidu-components-angular/src/lib/openvidu-components-angular-ui.module.ts +++ b/openvidu-components-angular/projects/openvidu-components-angular/src/lib/openvidu-components-angular-ui.module.ts @@ -1,4 +1,3 @@ - import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; @@ -12,6 +11,7 @@ import { SessionComponent } from './components/session/session.component'; import { StreamComponent } from './components/stream/stream.component'; import { ToolbarComponent } from './components/toolbar/toolbar.component'; import { ToolbarMediaButtonsComponent } from './components/toolbar/toolbar-media-buttons/toolbar-media-buttons.component'; +import { ToolbarPanelButtonsComponent } from './components/toolbar/toolbar-panel-buttons/toolbar-panel-buttons.component'; import { MediaElementComponent } from './components/media-element/media-element.component'; import { LinkifyPipe } from './pipes/linkify.pipe'; @@ -48,68 +48,69 @@ import { OpenViduComponentsDirectiveModule } from './directives/template/openvid import { AppMaterialModule } from './openvidu-components-angular.material.module'; const publicComponents = [ - AdminDashboardComponent, - AdminLoginComponent, - VideoconferenceComponent, - ToolbarComponent, - PanelComponent, - ActivitiesPanelComponent, - RecordingActivityComponent, - BroadcastingActivityComponent, - ParticipantsPanelComponent, - ParticipantPanelItemComponent, - ChatPanelComponent, - StreamComponent, - LayoutComponent + AdminDashboardComponent, + AdminLoginComponent, + VideoconferenceComponent, + ToolbarComponent, + PanelComponent, + ActivitiesPanelComponent, + RecordingActivityComponent, + BroadcastingActivityComponent, + ParticipantsPanelComponent, + ParticipantPanelItemComponent, + ChatPanelComponent, + StreamComponent, + LayoutComponent ]; const privateComponents = [ - PreJoinComponent, - SessionComponent, - BackgroundEffectsPanelComponent, - SettingsPanelComponent, - AudioWaveComponent, - DialogTemplateComponent, - ProFeatureDialogTemplateComponent, - RecordingDialogComponent, - DeleteDialogComponent, - AvatarProfileComponent, - MediaElementComponent, - VideoDevicesComponent, - AudioDevicesComponent, - ParticipantNameInputComponent, - LangSelectorComponent, - ToolbarMediaButtonsComponent + PreJoinComponent, + SessionComponent, + BackgroundEffectsPanelComponent, + SettingsPanelComponent, + AudioWaveComponent, + DialogTemplateComponent, + ProFeatureDialogTemplateComponent, + RecordingDialogComponent, + DeleteDialogComponent, + AvatarProfileComponent, + MediaElementComponent, + VideoDevicesComponent, + AudioDevicesComponent, + ParticipantNameInputComponent, + LangSelectorComponent, + ToolbarMediaButtonsComponent, + ToolbarPanelButtonsComponent ]; @NgModule({ - declarations: [ - ...publicComponents, - ...privateComponents, - LinkifyPipe, - RemoteParticipantTracksPipe, - DurationFromSecondsPipe, - SearchByStringPropertyPipe, - ThumbnailFromUrlPipe, - TrackPublishedTypesPipe, - TranslatePipe - ], - imports: [ - CommonModule, - FormsModule, - ReactiveFormsModule, - AppMaterialModule, - OpenViduComponentsDirectiveModule, - ApiDirectiveModule, - DragDropModule - ], - exports: [ - ...publicComponents, - RemoteParticipantTracksPipe, - DurationFromSecondsPipe, - TrackPublishedTypesPipe, - TranslatePipe, - OpenViduComponentsDirectiveModule, - ApiDirectiveModule - ] + declarations: [ + ...publicComponents, + ...privateComponents, + LinkifyPipe, + RemoteParticipantTracksPipe, + DurationFromSecondsPipe, + SearchByStringPropertyPipe, + ThumbnailFromUrlPipe, + TrackPublishedTypesPipe, + TranslatePipe + ], + imports: [ + CommonModule, + FormsModule, + ReactiveFormsModule, + AppMaterialModule, + OpenViduComponentsDirectiveModule, + ApiDirectiveModule, + DragDropModule + ], + exports: [ + ...publicComponents, + RemoteParticipantTracksPipe, + DurationFromSecondsPipe, + TrackPublishedTypesPipe, + TranslatePipe, + OpenViduComponentsDirectiveModule, + ApiDirectiveModule + ] }) export class OpenViduComponentsUiModule {} diff --git a/openvidu-components-angular/projects/openvidu-components-angular/src/public-api.ts b/openvidu-components-angular/projects/openvidu-components-angular/src/public-api.ts index d9b85c2f..2fdc29cb 100644 --- a/openvidu-components-angular/projects/openvidu-components-angular/src/public-api.ts +++ b/openvidu-components-angular/projects/openvidu-components-angular/src/public-api.ts @@ -16,6 +16,7 @@ export * from './lib/components/panel/participants-panel/participants-panel/part export * from './lib/components/stream/stream.component'; export * from './lib/components/toolbar/toolbar.component'; export * from './lib/components/toolbar/toolbar-media-buttons/toolbar-media-buttons.component'; +export * from './lib/components/toolbar/toolbar-panel-buttons/toolbar-panel-buttons.component'; export * from './lib/components/videoconference/videoconference.component'; export * from './lib/config/openvidu-components-angular.config'; // Directives