diff --git a/models/love/src/index.ts b/models/love/src/index.ts index bf322cd398..b185597208 100644 --- a/models/love/src/index.ts +++ b/models/love/src/index.ts @@ -698,10 +698,6 @@ export function createModel (builder: Builder): void { searchDisabled: true }) - builder.mixin(love.class.MeetingMinutes, core.class.Class, view.mixin.ObjectPanelFooter, { - editor: love.component.PanelControlBar - }) - builder.createDoc(core.class.FullTextSearchContext, core.space.Model, { toClass: love.class.MeetingMinutes, fullTextSummary: true, diff --git a/plugins/love-resources/package.json b/plugins/love-resources/package.json index 43d7c40014..29891e198d 100644 --- a/plugins/love-resources/package.json +++ b/plugins/love-resources/package.json @@ -62,6 +62,7 @@ "@hcengineering/workbench": "^0.6.16", "@hcengineering/workbench-resources": "^0.6.1", "@hcengineering/emoji": "^0.6.0", + "@hcengineering/emoji-resources": "^0.6.0", "@hcengineering/theme": "^0.6.5", "@livekit/krisp-noise-filter": "^0.3.0", "@livekit/track-processors": "^0.5.6", diff --git a/plugins/love-resources/src/components/ControlBar.svelte b/plugins/love-resources/src/components/ControlBar.svelte deleted file mode 100644 index 9628ff4ba8..0000000000 --- a/plugins/love-resources/src/components/ControlBar.svelte +++ /dev/null @@ -1,326 +0,0 @@ - - - - - - {#if room._id !== love.ids.Reception && $lkSessionConnected} - - {/if} - - - {#if $lkSessionConnected} - - - {#if allowCam} - - {/if} - {#if allowShare} - - {/if} - {#if hasAccountRole(getCurrentAccount(), AccountRole.User) && $isRecordingAvailable} - record(room)} - /> - {/if} - {#if hasAccountRole(getCurrentAccount(), AccountRole.User) && isTranscriptionAllowed() && $lkSessionConnected} - { - if ($isTranscription) { - void stopTranscription(room) - } else { - void startTranscription(room) - } - }} - /> - {/if} - {:else} - - {/if} - - - {#if $lkSessionConnected && withVideo && onFullScreen} - { - $isFullScreen = !$isFullScreen - }} - /> - {/if} - - {#if ($screenSharing || room.type === RoomType.Video) && $lkSessionConnected && canMaximize} - - {/if} - {#if $lkSessionConnected && moreItems.length > 0} - - {/if} - {#if allowLeave} - - {/if} - - - - {#if fullScreen} - - - {/if} - - diff --git a/plugins/love-resources/src/components/Floor.svelte b/plugins/love-resources/src/components/Floor.svelte index 8b3aeb8990..64765f246f 100644 --- a/plugins/love-resources/src/components/Floor.svelte +++ b/plugins/love-resources/src/components/Floor.svelte @@ -21,8 +21,7 @@ import { Viewlet, ViewletPreference } from '@hcengineering/view' import lovePlg from '../plugin' - import { currentRoom, floors } from '../stores' - import ControlBar from './ControlBar.svelte' + import { floors } from '../stores' export let rooms: Room[] = [] export let floor: Ref @@ -63,7 +62,4 @@ {/if} - {#if $currentRoom} - - {/if} diff --git a/plugins/love-resources/src/components/Main.svelte b/plugins/love-resources/src/components/Main.svelte index f5f687921e..27d7e6703b 100644 --- a/plugins/love-resources/src/components/Main.svelte +++ b/plugins/love-resources/src/components/Main.svelte @@ -16,12 +16,11 @@ import { deviceOptionsStore as deviceInfo } from '@hcengineering/ui' import { onDestroy, onMount } from 'svelte' import presentation from '@hcengineering/presentation' - import { RoomType } from '@hcengineering/love' import Hall from './Hall.svelte' import { getMetadata } from '@hcengineering/platform' import love from '../plugin' - import { tryConnect, screenSharing } from '../utils' + import { tryConnect } from '../utils' import { infos, invites, myInfo, myRequests, waitForOfficeLoaded, currentRoom } from '../stores' import { lkSessionConnected } from '../liveKitClient' @@ -48,8 +47,7 @@ if ( !$lkSessionConnected && - (room.type === RoomType.Video || $screenSharing) && - $myInfo?.sessionId && + $myInfo?.sessionId !== undefined && $myInfo.sessionId === getMetadata(presentation.metadata.SessionId) ) { const info = $infos.filter((p) => p.room === room._id) diff --git a/plugins/love-resources/src/components/MediaPopupItemExt.svelte b/plugins/love-resources/src/components/MediaPopupItemExt.svelte index 2b689b8435..fe7d6c0cd9 100644 --- a/plugins/love-resources/src/components/MediaPopupItemExt.svelte +++ b/plugins/love-resources/src/components/MediaPopupItemExt.svelte @@ -3,12 +3,12 @@ import { isOffice } from '@hcengineering/love' import { Button } from '@hcengineering/ui' import view from '@hcengineering/view' - import { DocNavLink } from '@hcengineering/view-resources' - import { createEventDispatcher, onMount } from 'svelte' + import { createEventDispatcher } from 'svelte' import love from '../plugin' - import { currentRoom, infos, myInfo, myOffice, rooms, currentMeetingMinutes } from '../stores' - import { endMeeting, leaveRoom } from '../utils' + import { currentRoom, infos, myInfo, myOffice, rooms } from '../stores' + import { endMeeting, isSharingEnabled, leaveRoom, liveKitClient } from '../utils' import { lkSessionConnected } from '../liveKitClient' + import MeetingHeader from './meeting/MeetingHeader.svelte' export let limit: number = 4 @@ -34,31 +34,12 @@ dispatch('close') } - function formatElapsedTime (elapsed: number): string { - const seconds = Math.floor(elapsed / 1000) - const minutes = Math.floor(seconds / 60) - const hours = Math.floor(minutes / 60) - - const displaySeconds = (seconds % 60).toString().padStart(2, '0') - const displayMinutes = (minutes % 60).toString().padStart(2, '0') - - return hours > 0 ? `${hours}:${displayMinutes}:${displaySeconds}` : `${displayMinutes}:${displaySeconds}` + async function stopShare (): Promise { + await liveKitClient.setScreenShareEnabled(false) } - let now = Date.now() - $: participants = $infos.filter((p) => p.room === $currentRoom?._id) $: personByRefStore = getPersonByPersonRefStore(participants.map((p) => p.person)) - - onMount(() => { - const interval = setInterval(() => { - now = Date.now() - }, 1000) - - return () => { - clearInterval(interval) - } - }) {#if $lkSessionConnected && $currentRoom != null} @@ -66,34 +47,7 @@
- - {#if $currentMeetingMinutes !== undefined} -
- - {$currentRoom.name} - - - - {#if $currentMeetingMinutes?.createdOn !== undefined} - {@const elapsed = now - $currentMeetingMinutes.createdOn} -
{formatElapsedTime(elapsed)}
- {/if} -
- {/if} - -
- - {#if $currentMeetingMinutes !== undefined} - - {$currentMeetingMinutes.title} - - {:else} - - {$currentRoom.name} - - {/if} -
- +
{#if overLimit} @@ -123,28 +77,41 @@
{/if} - - {#if allowLeave || leaving} -
diff --git a/plugins/love-resources/src/components/PanelControlBar.svelte b/plugins/love-resources/src/components/PanelControlBar.svelte deleted file mode 100644 index 48f60858a5..0000000000 --- a/plugins/love-resources/src/components/PanelControlBar.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - - - -{#if $currentRoom && $currentMeetingMinutes?._id === object._id} -
- -
-{/if} diff --git a/plugins/love-resources/src/components/Room.svelte b/plugins/love-resources/src/components/Room.svelte index 3159f76854..a1c769a54e 100644 --- a/plugins/love-resources/src/components/Room.svelte +++ b/plugins/love-resources/src/components/Room.svelte @@ -22,7 +22,7 @@ import love from '../plugin' import { waitForOfficeLoaded, currentRoom, infos, invites, myInfo, myRequests } from '../stores' import { isFullScreen, lk, tryConnect } from '../utils' - import ControlBar from './ControlBar.svelte' + import ControlBar from './meeting/ControlBar.svelte' import { lkSessionConnected } from '../liveKitClient' import ParticipantsListView from './meeting/ParticipantsListView.svelte' import ScreenSharingView from './meeting/ScreenSharingView.svelte' diff --git a/plugins/love-resources/src/components/RoomModal.svelte b/plugins/love-resources/src/components/RoomModal.svelte index fa9b445a1a..1abb647e0a 100644 --- a/plugins/love-resources/src/components/RoomModal.svelte +++ b/plugins/love-resources/src/components/RoomModal.svelte @@ -16,28 +16,29 @@ import { createEventDispatcher } from 'svelte' import presentation from '@hcengineering/presentation' import { Modal } from '@hcengineering/ui' - import love, { RoomType } from '@hcengineering/love' + import { RoomType } from '@hcengineering/love' import { currentRoom } from '../stores' import RoomComponent from './Room.svelte' - import { screenSharing } from '../utils' const dispatch = createEventDispatcher() - $: if ($currentRoom === undefined || (!$screenSharing && $currentRoom.type !== RoomType.Video)) { + $: if ($currentRoom === undefined) { dispatch('close') } -{#if ($currentRoom !== undefined && $screenSharing) || $currentRoom?.type === RoomType.Video} +{#if $currentRoom !== undefined} dispatch('close')} > + + {$currentRoom.name} + {/if} diff --git a/plugins/love-resources/src/components/RoomPopup.svelte b/plugins/love-resources/src/components/RoomPopup.svelte index 9be763d444..a791d3ae9a 100644 --- a/plugins/love-resources/src/components/RoomPopup.svelte +++ b/plugins/love-resources/src/components/RoomPopup.svelte @@ -13,57 +13,26 @@ // limitations under the License. --> -
-
-
- {#await getRoomName(room) then name} - {name} - {/await} -
+
+
@@ -188,98 +101,37 @@
- {#if joined && $lkSessionConnected} -
- - {#if allowCam} - - {/if} - {#if allowShare} - - {/if} +
+ {#if joined && $lkSessionConnected} +
+ + + dispatch('close')} /> +
+ {/if} +
+ {#if canGoBack(joined, $location, $currentMeetingMinutes)} -
- {/if} - {#if $location.path[2] !== loveId || (joined && (allowLeave || isMyOffice)) || !joined} -
- {#if joined} - {#if allowLeave} - - {:else if isMyOffice} - - {/if} - {:else} - - {/if} - {#if canGoBack(joined, $location, $currentMeetingMinutes)} - - {/if} -
- {/if} + {/if} + {#if joined} + dispatch('close')} /> + {:else} + + {/if} +
diff --git a/plugins/love-resources/src/components/ControlBarContainer.svelte b/plugins/love-resources/src/components/meeting/ControlBarContainer.svelte similarity index 100% rename from plugins/love-resources/src/components/ControlBarContainer.svelte rename to plugins/love-resources/src/components/meeting/ControlBarContainer.svelte diff --git a/plugins/love-resources/src/components/ControlExt.svelte b/plugins/love-resources/src/components/meeting/ControlExt.svelte similarity index 91% rename from plugins/love-resources/src/components/ControlExt.svelte rename to plugins/love-resources/src/components/meeting/ControlExt.svelte index 8ff30993df..190528e01c 100644 --- a/plugins/love-resources/src/components/ControlExt.svelte +++ b/plugins/love-resources/src/components/meeting/ControlExt.svelte @@ -15,16 +15,7 @@ + +{#if currentMeetingMinutes !== undefined} +
+ + {room.name} + + + + {#if currentMeetingMinutes?.createdOn !== undefined} + {@const elapsed = now - currentMeetingMinutes.createdOn} +
{formatElapsedTime(elapsed)}
+ {/if} +
+{/if} + +
+ + {#if currentMeetingMinutes !== undefined} + + {currentMeetingMinutes.title} + + {:else} + + {room.name} + + {/if} +
diff --git a/plugins/love-resources/src/components/meeting/Reaction.svelte b/plugins/love-resources/src/components/meeting/Reaction.svelte index 6c895539cd..82dc37085d 100644 --- a/plugins/love-resources/src/components/meeting/Reaction.svelte +++ b/plugins/love-resources/src/components/meeting/Reaction.svelte @@ -1,5 +1,8 @@ + +{#if allowCam} + +{/if} diff --git a/plugins/love-resources/src/components/meeting/controls/LeaveRoomButton.svelte b/plugins/love-resources/src/components/meeting/controls/LeaveRoomButton.svelte new file mode 100644 index 0000000000..10670403d7 --- /dev/null +++ b/plugins/love-resources/src/components/meeting/controls/LeaveRoomButton.svelte @@ -0,0 +1,34 @@ + + + diff --git a/plugins/love-resources/src/components/meeting/controls/MeetingOptionsButton.svelte b/plugins/love-resources/src/components/meeting/controls/MeetingOptionsButton.svelte new file mode 100644 index 0000000000..fe185fd2d2 --- /dev/null +++ b/plugins/love-resources/src/components/meeting/controls/MeetingOptionsButton.svelte @@ -0,0 +1,53 @@ + + +{#if $lkSessionConnected && moreItems.length > 0} + +{/if} diff --git a/plugins/love-resources/src/components/meeting/controls/MicrophoneButton.svelte b/plugins/love-resources/src/components/meeting/controls/MicrophoneButton.svelte new file mode 100644 index 0000000000..4ac88b3117 --- /dev/null +++ b/plugins/love-resources/src/components/meeting/controls/MicrophoneButton.svelte @@ -0,0 +1,32 @@ + + + diff --git a/plugins/love-resources/src/components/meeting/controls/RecordingButton.svelte b/plugins/love-resources/src/components/meeting/controls/RecordingButton.svelte new file mode 100644 index 0000000000..f790bf1c59 --- /dev/null +++ b/plugins/love-resources/src/components/meeting/controls/RecordingButton.svelte @@ -0,0 +1,22 @@ + + +{#if hasAccountRole(getCurrentAccount(), AccountRole.User) && $isRecordingAvailable} + record(room)} + /> +{/if} diff --git a/plugins/love-resources/src/components/meeting/controls/RoomAccessButton.svelte b/plugins/love-resources/src/components/meeting/controls/RoomAccessButton.svelte new file mode 100644 index 0000000000..273059d191 --- /dev/null +++ b/plugins/love-resources/src/components/meeting/controls/RoomAccessButton.svelte @@ -0,0 +1,34 @@ + + + diff --git a/plugins/love-resources/src/components/meeting/controls/SendReactionButton.svelte b/plugins/love-resources/src/components/meeting/controls/SendReactionButton.svelte new file mode 100644 index 0000000000..c76e7a5f55 --- /dev/null +++ b/plugins/love-resources/src/components/meeting/controls/SendReactionButton.svelte @@ -0,0 +1,23 @@ + + + diff --git a/plugins/love-resources/src/components/meeting/controls/ShareScreenButton.svelte b/plugins/love-resources/src/components/meeting/controls/ShareScreenButton.svelte new file mode 100644 index 0000000000..459926450f --- /dev/null +++ b/plugins/love-resources/src/components/meeting/controls/ShareScreenButton.svelte @@ -0,0 +1,37 @@ + + + diff --git a/plugins/love-resources/src/components/meeting/controls/TranscriptionButton.svelte b/plugins/love-resources/src/components/meeting/controls/TranscriptionButton.svelte new file mode 100644 index 0000000000..b56165ec58 --- /dev/null +++ b/plugins/love-resources/src/components/meeting/controls/TranscriptionButton.svelte @@ -0,0 +1,29 @@ + + +{#if hasAccountRole(getCurrentAccount(), AccountRole.User) && isTranscriptionAllowed() && $lkSessionConnected} + { + if ($isTranscription) { + void stopTranscription(room) + } else { + void startTranscription(room) + } + }} + /> +{/if} diff --git a/plugins/love-resources/src/components/widget/ChatTab.svelte b/plugins/love-resources/src/components/meeting/widget/ChatTab.svelte similarity index 82% rename from plugins/love-resources/src/components/widget/ChatTab.svelte rename to plugins/love-resources/src/components/meeting/widget/ChatTab.svelte index 5e7c2ecdff..1ce29275b5 100644 --- a/plugins/love-resources/src/components/widget/ChatTab.svelte +++ b/plugins/love-resources/src/components/meeting/widget/ChatTab.svelte @@ -13,15 +13,13 @@ // limitations under the License. --> -{#if widgetState && room} - {#if widgetState.tab === 'video'} - - {:else if widgetState.tab === 'chat'} - {#if !isMeetingMinutesLoaded} - - {:else if meetingMinutes} - +{#if widgetState !== undefined && room} +
+ +
+
+ {#if widgetState.tab === 'video'} + + {:else if widgetState.tab === 'chat'} + {#if !isMeetingMinutesLoaded} + + {:else if meetingMinutes} + + {/if} + {:else if widgetState.tab === 'transcription'} + {#if !isMeetingMinutesLoaded} + + {:else if meetingMinutes} + + {/if} {/if} - {:else if widgetState.tab === 'transcription'} - {#if !isMeetingMinutesLoaded} - - {:else if meetingMinutes} - - {/if} - {/if} +
+ + + + + + + + + + + + + {/if} diff --git a/plugins/love-resources/src/components/widget/MeetingWidgetHeader.svelte b/plugins/love-resources/src/components/meeting/widget/MeetingWidgetHeader.svelte similarity index 80% rename from plugins/love-resources/src/components/widget/MeetingWidgetHeader.svelte rename to plugins/love-resources/src/components/meeting/widget/MeetingWidgetHeader.svelte index 6293e03cb2..e9b94884f7 100644 --- a/plugins/love-resources/src/components/widget/MeetingWidgetHeader.svelte +++ b/plugins/love-resources/src/components/meeting/widget/MeetingWidgetHeader.svelte @@ -22,13 +22,13 @@ showPopup, PopupResult } from '@hcengineering/ui' - import { MeetingMinutes, Room, RoomType } from '@hcengineering/love' + import { MeetingMinutes, Room } from '@hcengineering/love' import { onDestroy } from 'svelte' - import love from '../../plugin' - import RoomModal from '../RoomModal.svelte' - import { currentRoom } from '../../stores' - import { screenSharing } from '../../utils' + import love from '../../../plugin' + import RoomModal from '../../RoomModal.svelte' + import { currentRoom } from '../../../stores' + import MeetingOptionsButton from '../controls/MeetingOptionsButton.svelte' export let room: Room export let doc: MeetingMinutes | undefined = undefined @@ -56,8 +56,9 @@
- {#if ($currentRoom !== undefined && $screenSharing) || $currentRoom?.type === RoomType.Video} + {#if $currentRoom !== undefined} + {/if}
diff --git a/plugins/love-resources/src/components/widget/TranscriptionTab.svelte b/plugins/love-resources/src/components/meeting/widget/TranscriptionTab.svelte similarity index 84% rename from plugins/love-resources/src/components/widget/TranscriptionTab.svelte rename to plugins/love-resources/src/components/meeting/widget/TranscriptionTab.svelte index 00cb351401..cea431f727 100644 --- a/plugins/love-resources/src/components/widget/TranscriptionTab.svelte +++ b/plugins/love-resources/src/components/meeting/widget/TranscriptionTab.svelte @@ -16,7 +16,6 @@ import { MeetingMinutes, Room } from '@hcengineering/love' import { ChannelEmbeddedContent } from '@hcengineering/chunter-resources' import { WidgetState } from '@hcengineering/workbench-resources' - import MeetingWidgetHeader from './MeetingWidgetHeader.svelte' export let widgetState: WidgetState export let meetingMinutes: MeetingMinutes @@ -33,8 +32,4 @@ threadId={undefined} collection="transcription" on:close -> - - - - +> diff --git a/plugins/love-resources/src/components/widget/VideoTab.svelte b/plugins/love-resources/src/components/meeting/widget/VideoTab.svelte similarity index 86% rename from plugins/love-resources/src/components/widget/VideoTab.svelte rename to plugins/love-resources/src/components/meeting/widget/VideoTab.svelte index 1c4ed89f32..c2a5b89e0b 100644 --- a/plugins/love-resources/src/components/widget/VideoTab.svelte +++ b/plugins/love-resources/src/components/meeting/widget/VideoTab.svelte @@ -15,14 +15,12 @@ -
diff --git a/plugins/love-resources/src/components/widget/WidgetSwitcher.svelte b/plugins/love-resources/src/components/meeting/widget/WidgetSwitcher.svelte similarity index 90% rename from plugins/love-resources/src/components/widget/WidgetSwitcher.svelte rename to plugins/love-resources/src/components/meeting/widget/WidgetSwitcher.svelte index 7c99963e3d..b3c87ce267 100644 --- a/plugins/love-resources/src/components/widget/WidgetSwitcher.svelte +++ b/plugins/love-resources/src/components/meeting/widget/WidgetSwitcher.svelte @@ -17,11 +17,11 @@ import type { AnySvelteComponent } from '@hcengineering/ui' import { AppItem } from '@hcengineering/workbench-resources' import { RoomType } from '@hcengineering/love' - import { currentRoom } from '../../stores' - import { isSharingEnabled } from '../../utils' + import { currentRoom } from '../../../stores' + import { isSharingEnabled } from '../../../utils' import { state } from '@hcengineering/media-resources' - import love from '../../plugin' - import { lkSessionConnected } from '../../liveKitClient' + import love from '../../../plugin' + import { lkSessionConnected } from '../../../liveKitClient' export let label: IntlString export let icon: Asset | AnySvelteComponent diff --git a/plugins/love-resources/src/index.ts b/plugins/love-resources/src/index.ts index 2740240d52..5a9d306698 100644 --- a/plugins/love-resources/src/index.ts +++ b/plugins/love-resources/src/index.ts @@ -2,7 +2,7 @@ import { getMetadata, type Resources } from '@hcengineering/platform' import aiBot from '@hcengineering/ai-bot' import { AccountRole, getCurrentAccount, hasAccountRole } from '@hcengineering/core' -import ControlExt from './components/ControlExt.svelte' +import ControlExt from './components/meeting/ControlExt.svelte' import EditMeetingData from './components/EditMeetingData.svelte' import Main from './components/Main.svelte' import MeetingData from './components/MeetingData.svelte' @@ -10,8 +10,8 @@ import SelectScreenSourcePopup from './components/SelectScreenSourcePopup.svelte import Settings from './components/Settings.svelte' import WorkbenchExtension from './components/WorkbenchExtension.svelte' import LoveWidget from './components/LoveWidget.svelte' -import MeetingWidget from './components/widget/MeetingWidget.svelte' -import WidgetSwitcher from './components/widget/WidgetSwitcher.svelte' +import MeetingWidget from './components/meeting/widget/MeetingWidget.svelte' +import WidgetSwitcher from './components/meeting/widget/WidgetSwitcher.svelte' import MeetingMinutesPresenter from './components/MeetingMinutesPresenter.svelte' import MeetingMinutesSection from './components/MeetingMinutesSection.svelte' import EditMeetingMinutes from './components/EditMeetingMinutes.svelte' @@ -19,7 +19,6 @@ import EditRoom from './components/EditRoom.svelte' import FloorAttributePresenter from './components/FloorAttributePresenter.svelte' import FloorView from './components/FloorView.svelte' import MeetingMinutesTable from './components/MeetingMinutesTable.svelte' -import PanelControlBar from './components/PanelControlBar.svelte' import RoomPresenter from './components/RoomPresenter.svelte' import MeetingMinutesDocEditor from './components/MeetingMinutesDocEditor.svelte' import MeetingMinutesStatusPresenter from './components/MeetingMinutesStatusPresenter.svelte' @@ -62,7 +61,6 @@ export default async (): Promise => ({ FloorAttributePresenter, FloorView, MeetingMinutesTable, - PanelControlBar, RoomPresenter, MeetingMinutesDocEditor, MeetingMinutesStatusPresenter, diff --git a/plugins/love-resources/src/liveKitClient.ts b/plugins/love-resources/src/liveKitClient.ts index 3c65675ef8..7cadc952bc 100644 --- a/plugins/love-resources/src/liveKitClient.ts +++ b/plugins/love-resources/src/liveKitClient.ts @@ -208,6 +208,7 @@ export class LiveKitClient { } async setCameraEnabled (value: boolean): Promise { + if (!this.currentSessionSupportsVideo) return try { await this.liveKitRoom.localParticipant.setCameraEnabled(value) } catch (e) { diff --git a/plugins/love-resources/src/plugin.ts b/plugins/love-resources/src/plugin.ts index f2f9eb076a..f1151d9bab 100644 --- a/plugins/love-resources/src/plugin.ts +++ b/plugins/love-resources/src/plugin.ts @@ -32,7 +32,6 @@ export default mergeIds(loveId, love, { FloorAttributePresenter: '' as AnyComponent, MeetingMinutesTable: '' as AnyComponent, FloorView: '' as AnyComponent, - PanelControlBar: '' as AnyComponent, MeetingMinutesDocEditor: '' as AnyComponent, MeetingMinutesStatusPresenter: '' as AnyComponent, MeetingScheduleData: '' as AnyComponent,