@memberjunction/ng-explorer-core 6.2.0-edge.0 → 6.2.0-edge.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app-routing.module.d.ts +23 -1
- package/dist/app-routing.module.d.ts.map +1 -1
- package/dist/app-routing.module.js +50 -14
- package/dist/app-routing.module.js.map +1 -1
- package/dist/lib/command-palette/command-palette.component.d.ts +7 -1
- package/dist/lib/command-palette/command-palette.component.d.ts.map +1 -1
- package/dist/lib/command-palette/command-palette.component.js +28 -14
- package/dist/lib/command-palette/command-palette.component.js.map +1 -1
- package/dist/lib/conversation-feedback/conversation-feedback.d.ts +103 -13
- package/dist/lib/conversation-feedback/conversation-feedback.d.ts.map +1 -1
- package/dist/lib/conversation-feedback/conversation-feedback.js +219 -67
- package/dist/lib/conversation-feedback/conversation-feedback.js.map +1 -1
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.d.ts +64 -10
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.d.ts.map +1 -1
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js +172 -66
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js.map +1 -1
- package/dist/lib/generic/resource-container-component.d.ts +19 -5
- package/dist/lib/generic/resource-container-component.d.ts.map +1 -1
- package/dist/lib/generic/resource-container-component.js +43 -13
- package/dist/lib/generic/resource-container-component.js.map +1 -1
- package/dist/lib/guards/entities.guard.d.ts +4 -0
- package/dist/lib/guards/entities.guard.d.ts.map +1 -1
- package/dist/lib/guards/entities.guard.js +10 -2
- package/dist/lib/guards/entities.guard.js.map +1 -1
- package/dist/lib/identity-claims/claim-redeem.component.d.ts +4 -0
- package/dist/lib/identity-claims/claim-redeem.component.d.ts.map +1 -1
- package/dist/lib/identity-claims/claim-redeem.component.js +10 -2
- package/dist/lib/identity-claims/claim-redeem.component.js.map +1 -1
- package/dist/lib/oauth/oauth-callback.component.d.ts +4 -0
- package/dist/lib/oauth/oauth-callback.component.d.ts.map +1 -1
- package/dist/lib/oauth/oauth-callback.component.js +10 -2
- package/dist/lib/oauth/oauth-callback.component.js.map +1 -1
- package/dist/lib/profile/profile-dialog.component.d.ts.map +1 -1
- package/dist/lib/profile/profile-dialog.component.js +194 -191
- package/dist/lib/profile/profile-dialog.component.js.map +1 -1
- package/dist/lib/resource-wrappers/artifact-resource.component.d.ts +20 -2
- package/dist/lib/resource-wrappers/artifact-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/artifact-resource.component.js +33 -9
- package/dist/lib/resource-wrappers/artifact-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts +80 -10
- package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-collections-resource.component.js +168 -56
- package/dist/lib/resource-wrappers/chat-collections-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts +186 -23
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +500 -177
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts +2 -0
- package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-deeplink-params.js +5 -1
- package/dist/lib/resource-wrappers/chat-deeplink-params.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-search-routing.d.ts +25 -0
- package/dist/lib/resource-wrappers/chat-search-routing.d.ts.map +1 -0
- package/dist/lib/resource-wrappers/chat-search-routing.js +24 -0
- package/dist/lib/resource-wrappers/chat-search-routing.js.map +1 -0
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts +14 -2
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.js +32 -8
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts +54 -8
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.js +138 -46
- package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/livekit-room-resource.component.d.ts +223 -30
- package/dist/lib/resource-wrappers/livekit-room-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/livekit-room-resource.component.js +438 -118
- package/dist/lib/resource-wrappers/livekit-room-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/search-results-resource.component.d.ts +7 -3
- package/dist/lib/resource-wrappers/search-results-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/search-results-resource.component.js +23 -15
- package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.d.ts +68 -10
- package/dist/lib/resource-wrappers/view-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.js +178 -62
- package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
- package/dist/lib/services/startup-validation.service.d.ts +4 -0
- package/dist/lib/services/startup-validation.service.d.ts.map +1 -1
- package/dist/lib/services/startup-validation.service.js +10 -2
- package/dist/lib/services/startup-validation.service.js.map +1 -1
- package/dist/lib/services/system-validation.service.d.ts +13 -1
- package/dist/lib/services/system-validation.service.d.ts.map +1 -1
- package/dist/lib/services/system-validation.service.js +29 -5
- package/dist/lib/services/system-validation.service.js.map +1 -1
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.d.ts +54 -4
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.d.ts.map +1 -1
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.js +130 -40
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.js.map +1 -1
- package/dist/lib/shell/components/header/app-nav.component.d.ts +29 -1
- package/dist/lib/shell/components/header/app-nav.component.d.ts.map +1 -1
- package/dist/lib/shell/components/header/app-nav.component.js +56 -12
- package/dist/lib/shell/components/header/app-nav.component.js.map +1 -1
- package/dist/lib/shell/components/header/app-switcher.component.d.ts +33 -5
- package/dist/lib/shell/components/header/app-switcher.component.d.ts.map +1 -1
- package/dist/lib/shell/components/header/app-switcher.component.js +85 -29
- package/dist/lib/shell/components/header/app-switcher.component.js.map +1 -1
- package/dist/lib/shell/components/record-open/record-origin-crumb.component.js +1 -1
- package/dist/lib/shell/components/record-open/record-origin-crumb.component.js.map +1 -1
- package/dist/lib/shell/components/tabs/component-cache-manager.d.ts +50 -6
- package/dist/lib/shell/components/tabs/component-cache-manager.d.ts.map +1 -1
- package/dist/lib/shell/components/tabs/component-cache-manager.js +95 -22
- package/dist/lib/shell/components/tabs/component-cache-manager.js.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts +91 -9
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.js +257 -101
- package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
- package/dist/lib/shell/loading-themes.d.ts +16 -12
- package/dist/lib/shell/loading-themes.d.ts.map +1 -1
- package/dist/lib/shell/loading-themes.js +145 -137
- package/dist/lib/shell/loading-themes.js.map +1 -1
- package/dist/lib/shell/readiness-beacon.d.ts +2 -0
- package/dist/lib/shell/readiness-beacon.d.ts.map +1 -1
- package/dist/lib/shell/readiness-beacon.js +5 -1
- package/dist/lib/shell/readiness-beacon.js.map +1 -1
- package/dist/lib/shell/services/about-dialog.service.d.ts +6 -0
- package/dist/lib/shell/services/about-dialog.service.d.ts.map +1 -1
- package/dist/lib/shell/services/about-dialog.service.js +16 -4
- package/dist/lib/shell/services/about-dialog.service.js.map +1 -1
- package/dist/lib/shell/services/profile-dialog.service.d.ts +6 -0
- package/dist/lib/shell/services/profile-dialog.service.d.ts.map +1 -1
- package/dist/lib/shell/services/profile-dialog.service.js +16 -4
- package/dist/lib/shell/services/profile-dialog.service.js.map +1 -1
- package/dist/lib/shell/services/user-sharing-center-dialog.service.d.ts +6 -0
- package/dist/lib/shell/services/user-sharing-center-dialog.service.d.ts.map +1 -1
- package/dist/lib/shell/services/user-sharing-center-dialog.service.js +15 -3
- package/dist/lib/shell/services/user-sharing-center-dialog.service.js.map +1 -1
- package/dist/lib/shell/shell.component.d.ts +262 -39
- package/dist/lib/shell/shell.component.d.ts.map +1 -1
- package/dist/lib/shell/shell.component.js +688 -292
- package/dist/lib/shell/shell.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts +64 -8
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.js +129 -37
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.d.ts +26 -2
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js +48 -10
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.d.ts +84 -6
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js +133 -29
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js.map +1 -1
- package/dist/lib/single-dashboard/single-dashboard.component.d.ts +173 -23
- package/dist/lib/single-dashboard/single-dashboard.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/single-dashboard.component.js +383 -109
- package/dist/lib/single-dashboard/single-dashboard.component.js.map +1 -1
- package/dist/lib/single-list-detail/single-list-detail.component.d.ts +383 -55
- package/dist/lib/single-list-detail/single-list-detail.component.d.ts.map +1 -1
- package/dist/lib/single-list-detail/single-list-detail.component.js +962 -326
- package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
- package/dist/lib/single-query/single-query.component.d.ts +22 -2
- package/dist/lib/single-query/single-query.component.d.ts.map +1 -1
- package/dist/lib/single-query/single-query.component.js +40 -10
- package/dist/lib/single-query/single-query.component.js.map +1 -1
- package/dist/lib/single-record/single-record.component.d.ts +41 -3
- package/dist/lib/single-record/single-record.component.d.ts.map +1 -1
- package/dist/lib/single-record/single-record.component.js +71 -11
- package/dist/lib/single-record/single-record.component.js.map +1 -1
- package/dist/lib/single-search-result/single-search-result.component.d.ts +23 -3
- package/dist/lib/single-search-result/single-search-result.component.d.ts.map +1 -1
- package/dist/lib/single-search-result/single-search-result.component.js +42 -12
- package/dist/lib/single-search-result/single-search-result.component.js.map +1 -1
- package/dist/lib/system-validation/system-validation-banner.component.d.ts +12 -2
- package/dist/lib/system-validation/system-validation-banner.component.d.ts.map +1 -1
- package/dist/lib/system-validation/system-validation-banner.component.js +25 -5
- package/dist/lib/system-validation/system-validation-banner.component.js.map +1 -1
- package/dist/lib/user-menu/user-menu.types.d.ts +4 -0
- package/dist/lib/user-menu/user-menu.types.d.ts.map +1 -1
- package/dist/lib/user-menu/user-menu.types.js +10 -2
- package/dist/lib/user-menu/user-menu.types.js.map +1 -1
- package/dist/lib/user-notifications/user-notifications.component.d.ts +59 -7
- package/dist/lib/user-notifications/user-notifications.component.d.ts.map +1 -1
- package/dist/lib/user-notifications/user-notifications.component.js +151 -47
- package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
- package/dist/lib/user-profile/user-profile.component.d.ts +3 -2
- package/dist/lib/user-profile/user-profile.component.d.ts.map +1 -1
- package/dist/lib/user-profile/user-profile.component.js +5 -4
- package/dist/lib/user-profile/user-profile.component.js.map +1 -1
- package/package.json +52 -52
|
@@ -523,88 +523,344 @@ function LiveKitRoomResource_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
|
523
523
|
*/
|
|
524
524
|
let LiveKitRoomResource = class LiveKitRoomResource extends BaseResourceComponent {
|
|
525
525
|
/** Render phase: spinner while resolving → landing (new/existing/history) → picker/existing/history → live room. */
|
|
526
|
-
|
|
526
|
+
Phase = 'loading';
|
|
527
|
+
/** @deprecated Use {@link Phase}. */
|
|
528
|
+
get phase() {
|
|
529
|
+
return this.Phase;
|
|
530
|
+
}
|
|
531
|
+
/** @deprecated Use {@link Phase}. */
|
|
532
|
+
set phase(value) {
|
|
533
|
+
this.Phase = value;
|
|
534
|
+
}
|
|
527
535
|
// ── "Join existing" state ─────────────────────────────────────────────────────────
|
|
528
536
|
/** Currently-active rooms (a distinct `ExternalConnectionID` with ≥1 connected agent bridge). */
|
|
529
|
-
|
|
537
|
+
ActiveRooms = [];
|
|
538
|
+
/** @deprecated Use {@link ActiveRooms}. */
|
|
539
|
+
get activeRooms() {
|
|
540
|
+
return this.ActiveRooms;
|
|
541
|
+
}
|
|
542
|
+
/** @deprecated Use {@link ActiveRooms}. */
|
|
543
|
+
set activeRooms(value) {
|
|
544
|
+
this.ActiveRooms = value;
|
|
545
|
+
}
|
|
530
546
|
/** True while loading the active-rooms list. */
|
|
531
|
-
|
|
547
|
+
LoadingActive = false;
|
|
548
|
+
/** @deprecated Use {@link LoadingActive}. */
|
|
549
|
+
get loadingActive() {
|
|
550
|
+
return this.LoadingActive;
|
|
551
|
+
}
|
|
552
|
+
/** @deprecated Use {@link LoadingActive}. */
|
|
553
|
+
set loadingActive(value) {
|
|
554
|
+
this.LoadingActive = value;
|
|
555
|
+
}
|
|
532
556
|
/** Free-text room name to join directly (the "join by name/code" path). */
|
|
533
|
-
|
|
557
|
+
ManualRoomName = '';
|
|
558
|
+
/** @deprecated Use {@link ManualRoomName}. */
|
|
559
|
+
get manualRoomName() {
|
|
560
|
+
return this.ManualRoomName;
|
|
561
|
+
}
|
|
562
|
+
/** @deprecated Use {@link ManualRoomName}. */
|
|
563
|
+
set manualRoomName(value) {
|
|
564
|
+
this.ManualRoomName = value;
|
|
565
|
+
}
|
|
534
566
|
// ── "History" (past meetings) state ───────────────────────────────────────────────
|
|
535
567
|
/** Past meeting rooms (the `MJ: Conversations` of Type='Meeting Room' the bridge recorded). */
|
|
536
|
-
|
|
568
|
+
HistoryRooms = [];
|
|
569
|
+
/** @deprecated Use {@link HistoryRooms}. */
|
|
570
|
+
get historyRooms() {
|
|
571
|
+
return this.HistoryRooms;
|
|
572
|
+
}
|
|
573
|
+
/** @deprecated Use {@link HistoryRooms}. */
|
|
574
|
+
set historyRooms(value) {
|
|
575
|
+
this.HistoryRooms = value;
|
|
576
|
+
}
|
|
537
577
|
/** True while loading the history list. */
|
|
538
|
-
|
|
578
|
+
LoadingHistory = false;
|
|
579
|
+
/** @deprecated Use {@link LoadingHistory}. */
|
|
580
|
+
get loadingHistory() {
|
|
581
|
+
return this.LoadingHistory;
|
|
582
|
+
}
|
|
583
|
+
/** @deprecated Use {@link LoadingHistory}. */
|
|
584
|
+
set loadingHistory(value) {
|
|
585
|
+
this.LoadingHistory = value;
|
|
586
|
+
}
|
|
539
587
|
/** The history room whose transcript is open (drill-in), or null for the list. */
|
|
540
|
-
|
|
588
|
+
OpenHistoryRoom = null;
|
|
589
|
+
/** @deprecated Use {@link OpenHistoryRoom}. */
|
|
590
|
+
get openHistoryRoom() {
|
|
591
|
+
return this.OpenHistoryRoom;
|
|
592
|
+
}
|
|
593
|
+
/** @deprecated Use {@link OpenHistoryRoom}. */
|
|
594
|
+
set openHistoryRoom(value) {
|
|
595
|
+
this.OpenHistoryRoom = value;
|
|
596
|
+
}
|
|
541
597
|
/** The opened room's transcript lines. */
|
|
542
|
-
|
|
598
|
+
HistoryTranscript = [];
|
|
599
|
+
/** @deprecated Use {@link HistoryTranscript}. */
|
|
600
|
+
get historyTranscript() {
|
|
601
|
+
return this.HistoryTranscript;
|
|
602
|
+
}
|
|
603
|
+
/** @deprecated Use {@link HistoryTranscript}. */
|
|
604
|
+
set historyTranscript(value) {
|
|
605
|
+
this.HistoryTranscript = value;
|
|
606
|
+
}
|
|
543
607
|
/** True while loading a room's transcript. */
|
|
544
|
-
|
|
608
|
+
LoadingTranscript = false;
|
|
609
|
+
/** @deprecated Use {@link LoadingTranscript}. */
|
|
610
|
+
get loadingTranscript() {
|
|
611
|
+
return this.LoadingTranscript;
|
|
612
|
+
}
|
|
613
|
+
/** @deprecated Use {@link LoadingTranscript}. */
|
|
614
|
+
set loadingTranscript(value) {
|
|
615
|
+
this.LoadingTranscript = value;
|
|
616
|
+
}
|
|
545
617
|
/** `'agent'` to start/voice an agent (the default), or `'join'` when opened from an invite link. */
|
|
546
|
-
|
|
618
|
+
RoomMode = 'agent';
|
|
619
|
+
/** @deprecated Use {@link RoomMode}. */
|
|
620
|
+
get roomMode() {
|
|
621
|
+
return this.RoomMode;
|
|
622
|
+
}
|
|
623
|
+
/** @deprecated Use {@link RoomMode}. */
|
|
624
|
+
set roomMode(value) {
|
|
625
|
+
this.RoomMode = value;
|
|
626
|
+
}
|
|
547
627
|
/** The room to JOIN when opened via an invite link (`?room=…`); null in agent mode. */
|
|
548
|
-
|
|
628
|
+
JoinRoomName = null;
|
|
629
|
+
/** @deprecated Use {@link JoinRoomName}. */
|
|
630
|
+
get joinRoomName() {
|
|
631
|
+
return this.JoinRoomName;
|
|
632
|
+
}
|
|
633
|
+
/** @deprecated Use {@link JoinRoomName}. */
|
|
634
|
+
set joinRoomName(value) {
|
|
635
|
+
this.JoinRoomName = value;
|
|
636
|
+
}
|
|
549
637
|
/** The Realtime co-agent (voice front-end) id — the resolved default Realtime-type agent. */
|
|
550
|
-
|
|
638
|
+
AgentId = null;
|
|
639
|
+
/** @deprecated Use {@link AgentId}. */
|
|
640
|
+
get agentId() {
|
|
641
|
+
return this.AgentId;
|
|
642
|
+
}
|
|
643
|
+
/** @deprecated Use {@link AgentId}. */
|
|
644
|
+
set agentId(value) {
|
|
645
|
+
this.AgentId = value;
|
|
646
|
+
}
|
|
551
647
|
/** The TARGET agent the co-agent voices (the one being "called"); the bot is named after it. */
|
|
552
|
-
|
|
648
|
+
TargetAgentId = null;
|
|
649
|
+
/** @deprecated Use {@link TargetAgentId}. */
|
|
650
|
+
get targetAgentId() {
|
|
651
|
+
return this.TargetAgentId;
|
|
652
|
+
}
|
|
653
|
+
/** @deprecated Use {@link TargetAgentId}. */
|
|
654
|
+
set targetAgentId(value) {
|
|
655
|
+
this.TargetAgentId = value;
|
|
656
|
+
}
|
|
553
657
|
/** The target agent's display name — used as the bot name + addressing word ("Sage, …"). */
|
|
554
|
-
|
|
658
|
+
TargetAgentName = null;
|
|
659
|
+
/** @deprecated Use {@link TargetAgentName}. */
|
|
660
|
+
get targetAgentName() {
|
|
661
|
+
return this.TargetAgentName;
|
|
662
|
+
}
|
|
663
|
+
/** @deprecated Use {@link TargetAgentName}. */
|
|
664
|
+
set targetAgentName(value) {
|
|
665
|
+
this.TargetAgentName = value;
|
|
666
|
+
}
|
|
555
667
|
/** The agents offered in the pre-join picker (active, excluding the Realtime co-agent itself). */
|
|
556
|
-
|
|
668
|
+
Agents = [];
|
|
669
|
+
/** @deprecated Use {@link Agents}. */
|
|
670
|
+
get agents() {
|
|
671
|
+
return this.Agents;
|
|
672
|
+
}
|
|
673
|
+
/** @deprecated Use {@link Agents}. */
|
|
674
|
+
set agents(value) {
|
|
675
|
+
this.Agents = value;
|
|
676
|
+
}
|
|
557
677
|
/** The currently-selected target in the picker (defaults to "Sage" when present). */
|
|
558
|
-
|
|
678
|
+
SelectedTargetId = null;
|
|
679
|
+
/** @deprecated Use {@link SelectedTargetId}. */
|
|
680
|
+
get selectedTargetId() {
|
|
681
|
+
return this.SelectedTargetId;
|
|
682
|
+
}
|
|
683
|
+
/** @deprecated Use {@link SelectedTargetId}. */
|
|
684
|
+
set selectedTargetId(value) {
|
|
685
|
+
this.SelectedTargetId = value;
|
|
686
|
+
}
|
|
559
687
|
// ── Dev model/voice override (gated by the `Realtime: Advanced Session Controls` authorization) ──────
|
|
560
688
|
/** Whether the current user may override the realtime model/voice (drives the dev pickers). */
|
|
561
|
-
|
|
689
|
+
CanPickModelVoice = false;
|
|
690
|
+
/** @deprecated Use {@link CanPickModelVoice}. */
|
|
691
|
+
get canPickModelVoice() {
|
|
692
|
+
return this.CanPickModelVoice;
|
|
693
|
+
}
|
|
694
|
+
/** @deprecated Use {@link CanPickModelVoice}. */
|
|
695
|
+
set canPickModelVoice(value) {
|
|
696
|
+
this.CanPickModelVoice = value;
|
|
697
|
+
}
|
|
562
698
|
/** Active Realtime models + their voices (loaded once when the user can override). */
|
|
563
|
-
|
|
699
|
+
RealtimeModels = [];
|
|
700
|
+
/** @deprecated Use {@link RealtimeModels}. */
|
|
701
|
+
get realtimeModels() {
|
|
702
|
+
return this.RealtimeModels;
|
|
703
|
+
}
|
|
704
|
+
/** @deprecated Use {@link RealtimeModels}. */
|
|
705
|
+
set realtimeModels(value) {
|
|
706
|
+
this.RealtimeModels = value;
|
|
707
|
+
}
|
|
564
708
|
/** The MODEL override chosen for the FIRST agent in the pre-join picker (null = default). */
|
|
565
|
-
|
|
709
|
+
SelectedModelId = null;
|
|
710
|
+
/** @deprecated Use {@link SelectedModelId}. */
|
|
711
|
+
get selectedModelId() {
|
|
712
|
+
return this.SelectedModelId;
|
|
713
|
+
}
|
|
714
|
+
/** @deprecated Use {@link SelectedModelId}. */
|
|
715
|
+
set selectedModelId(value) {
|
|
716
|
+
this.SelectedModelId = value;
|
|
717
|
+
}
|
|
566
718
|
/** The VOICE override chosen for the FIRST agent in the pre-join picker (null = default). */
|
|
567
|
-
|
|
719
|
+
SelectedVoice = null;
|
|
720
|
+
/** @deprecated Use {@link SelectedVoice}. */
|
|
721
|
+
get selectedVoice() {
|
|
722
|
+
return this.SelectedVoice;
|
|
723
|
+
}
|
|
724
|
+
/** @deprecated Use {@link SelectedVoice}. */
|
|
725
|
+
set selectedVoice(value) {
|
|
726
|
+
this.SelectedVoice = value;
|
|
727
|
+
}
|
|
568
728
|
/** Voices for the model chosen in the pre-join picker. */
|
|
729
|
+
get SelectedModelVoices() {
|
|
730
|
+
return this.RealtimeModels.find((m) => UUIDsEqual(m.ModelID, this.SelectedModelId))?.Voices ?? [];
|
|
731
|
+
}
|
|
732
|
+
/** @deprecated Use {@link SelectedModelVoices}. */
|
|
569
733
|
get selectedModelVoices() {
|
|
570
|
-
return this.
|
|
734
|
+
return this.SelectedModelVoices;
|
|
571
735
|
}
|
|
572
736
|
/** Records the pre-join MODEL choice; clears the voice so it can't outlive a model switch. */
|
|
737
|
+
OnModelChange(event) {
|
|
738
|
+
this.SelectedModelId = event.target.value || null;
|
|
739
|
+
this.SelectedVoice = null;
|
|
740
|
+
}
|
|
741
|
+
/** @deprecated Use {@link OnModelChange}. */
|
|
573
742
|
onModelChange(event) {
|
|
574
|
-
this.
|
|
575
|
-
this.selectedVoice = null;
|
|
743
|
+
return this.OnModelChange(event);
|
|
576
744
|
}
|
|
577
745
|
/** Records the pre-join VOICE choice. */
|
|
746
|
+
OnVoiceChange(event) {
|
|
747
|
+
this.SelectedVoice = event.target.value || null;
|
|
748
|
+
}
|
|
749
|
+
/** @deprecated Use {@link OnVoiceChange}. */
|
|
578
750
|
onVoiceChange(event) {
|
|
579
|
-
this.
|
|
751
|
+
return this.OnVoiceChange(event);
|
|
580
752
|
}
|
|
581
753
|
/** Exposed for template use — platform-safe UUID equality (SQL upper vs PG lower). */
|
|
582
754
|
UUIDsEqual = UUIDsEqual;
|
|
583
755
|
/** Set when no co-agent could be resolved — shown instead of the room. */
|
|
584
|
-
|
|
756
|
+
ResolveError = null;
|
|
757
|
+
/** @deprecated Use {@link ResolveError}. */
|
|
758
|
+
get resolveError() {
|
|
759
|
+
return this.ResolveError;
|
|
760
|
+
}
|
|
761
|
+
/** @deprecated Use {@link ResolveError}. */
|
|
762
|
+
set resolveError(value) {
|
|
763
|
+
this.ResolveError = value;
|
|
764
|
+
}
|
|
585
765
|
// ── "Invite people" dialog state ─────────────────────────────────────────────────
|
|
586
766
|
/** Whether the invite-people dialog is open. */
|
|
587
|
-
|
|
767
|
+
ShowInvite = false;
|
|
768
|
+
/** @deprecated Use {@link ShowInvite}. */
|
|
769
|
+
get showInvite() {
|
|
770
|
+
return this.ShowInvite;
|
|
771
|
+
}
|
|
772
|
+
/** @deprecated Use {@link ShowInvite}. */
|
|
773
|
+
set showInvite(value) {
|
|
774
|
+
this.ShowInvite = value;
|
|
775
|
+
}
|
|
588
776
|
/** The room the invite targets (the live room name). */
|
|
589
|
-
|
|
777
|
+
InviteRoomName = null;
|
|
778
|
+
/** @deprecated Use {@link InviteRoomName}. */
|
|
779
|
+
get inviteRoomName() {
|
|
780
|
+
return this.InviteRoomName;
|
|
781
|
+
}
|
|
782
|
+
/** @deprecated Use {@link InviteRoomName}. */
|
|
783
|
+
set inviteRoomName(value) {
|
|
784
|
+
this.InviteRoomName = value;
|
|
785
|
+
}
|
|
590
786
|
/** Current search text in the people search box. */
|
|
591
|
-
|
|
787
|
+
UserSearch = '';
|
|
788
|
+
/** @deprecated Use {@link UserSearch}. */
|
|
789
|
+
get userSearch() {
|
|
790
|
+
return this.UserSearch;
|
|
791
|
+
}
|
|
792
|
+
/** @deprecated Use {@link UserSearch}. */
|
|
793
|
+
set userSearch(value) {
|
|
794
|
+
this.UserSearch = value;
|
|
795
|
+
}
|
|
592
796
|
/** People matching the last search (minus already-selected + the current user). */
|
|
593
|
-
|
|
797
|
+
UserResults = [];
|
|
798
|
+
/** @deprecated Use {@link UserResults}. */
|
|
799
|
+
get userResults() {
|
|
800
|
+
return this.UserResults;
|
|
801
|
+
}
|
|
802
|
+
/** @deprecated Use {@link UserResults}. */
|
|
803
|
+
set userResults(value) {
|
|
804
|
+
this.UserResults = value;
|
|
805
|
+
}
|
|
594
806
|
/** People chosen to invite. */
|
|
595
|
-
|
|
807
|
+
SelectedInvitees = [];
|
|
808
|
+
/** @deprecated Use {@link SelectedInvitees}. */
|
|
809
|
+
get selectedInvitees() {
|
|
810
|
+
return this.SelectedInvitees;
|
|
811
|
+
}
|
|
812
|
+
/** @deprecated Use {@link SelectedInvitees}. */
|
|
813
|
+
set selectedInvitees(value) {
|
|
814
|
+
this.SelectedInvitees = value;
|
|
815
|
+
}
|
|
596
816
|
/** True while a people search is running. */
|
|
597
|
-
|
|
817
|
+
Searching = false;
|
|
818
|
+
/** @deprecated Use {@link Searching}. */
|
|
819
|
+
get searching() {
|
|
820
|
+
return this.Searching;
|
|
821
|
+
}
|
|
822
|
+
/** @deprecated Use {@link Searching}. */
|
|
823
|
+
set searching(value) {
|
|
824
|
+
this.Searching = value;
|
|
825
|
+
}
|
|
598
826
|
/** True once a search has run (drives the "no matches" empty state). */
|
|
599
|
-
|
|
827
|
+
Searched = false;
|
|
828
|
+
/** @deprecated Use {@link Searched}. */
|
|
829
|
+
get searched() {
|
|
830
|
+
return this.Searched;
|
|
831
|
+
}
|
|
832
|
+
/** @deprecated Use {@link Searched}. */
|
|
833
|
+
set searched(value) {
|
|
834
|
+
this.Searched = value;
|
|
835
|
+
}
|
|
600
836
|
/** True while invites are being sent. */
|
|
601
|
-
|
|
837
|
+
Inviting = false;
|
|
838
|
+
/** @deprecated Use {@link Inviting}. */
|
|
839
|
+
get inviting() {
|
|
840
|
+
return this.Inviting;
|
|
841
|
+
}
|
|
842
|
+
/** @deprecated Use {@link Inviting}. */
|
|
843
|
+
set inviting(value) {
|
|
844
|
+
this.Inviting = value;
|
|
845
|
+
}
|
|
602
846
|
/** Result/status message under the dialog. */
|
|
603
|
-
|
|
847
|
+
InviteMessage = null;
|
|
848
|
+
/** @deprecated Use {@link InviteMessage}. */
|
|
849
|
+
get inviteMessage() {
|
|
850
|
+
return this.InviteMessage;
|
|
851
|
+
}
|
|
852
|
+
/** @deprecated Use {@link InviteMessage}. */
|
|
853
|
+
set inviteMessage(value) {
|
|
854
|
+
this.InviteMessage = value;
|
|
855
|
+
}
|
|
604
856
|
cdr = inject(ChangeDetectorRef);
|
|
605
857
|
/** Description of the selected target, shown under the picker. */
|
|
858
|
+
get SelectedDescription() {
|
|
859
|
+
return this.Agents.find((a) => UUIDsEqual(a.ID, this.SelectedTargetId))?.Description ?? null;
|
|
860
|
+
}
|
|
861
|
+
/** @deprecated Use {@link SelectedDescription}. */
|
|
606
862
|
get selectedDescription() {
|
|
607
|
-
return this.
|
|
863
|
+
return this.SelectedDescription;
|
|
608
864
|
}
|
|
609
865
|
ngOnInit() {
|
|
610
866
|
super.ngOnInit();
|
|
@@ -619,9 +875,9 @@ let LiveKitRoomResource = class LiveKitRoomResource extends BaseResourceComponen
|
|
|
619
875
|
// Invite link (?room=…): join that existing room directly — no agent resolution / picker needed.
|
|
620
876
|
const invitedRoom = this.GetQueryParams()?.['room']?.trim();
|
|
621
877
|
if (invitedRoom) {
|
|
622
|
-
this.
|
|
623
|
-
this.
|
|
624
|
-
this.
|
|
878
|
+
this.RoomMode = 'join';
|
|
879
|
+
this.JoinRoomName = invitedRoom;
|
|
880
|
+
this.Phase = 'live';
|
|
625
881
|
this.NotifyLoadComplete();
|
|
626
882
|
return;
|
|
627
883
|
}
|
|
@@ -641,37 +897,37 @@ let LiveKitRoomResource = class LiveKitRoomResource extends BaseResourceComponen
|
|
|
641
897
|
? AIEngineBase.Instance.Agents.find((a) => a.Status === 'Active' && UUIDsEqual(a.TypeID, realtimeType.ID))
|
|
642
898
|
: undefined;
|
|
643
899
|
if (!coAgent) {
|
|
644
|
-
this.
|
|
900
|
+
this.ResolveError =
|
|
645
901
|
'No active Realtime agent is configured, so the Live Room has no voice to bring in. ' +
|
|
646
902
|
'Create a Realtime-type AI Agent (e.g. "Realtime Co-Agent") and try again.';
|
|
647
|
-
this.
|
|
903
|
+
this.Phase = 'error';
|
|
648
904
|
this.NotifyLoadComplete();
|
|
649
905
|
return;
|
|
650
906
|
}
|
|
651
|
-
this.
|
|
907
|
+
this.AgentId = coAgent.ID;
|
|
652
908
|
// Dev model/voice override: gate on the `Realtime: Advanced Session Controls` authorization and, when
|
|
653
909
|
// held, load the active models + their voices for the pickers (here and the in-room add-agent control).
|
|
654
|
-
this.
|
|
655
|
-
if (this.
|
|
910
|
+
this.CanPickModelVoice = UserHoldsAuthorization(this.ProviderToUse?.CurrentUser, REALTIME_ADVANCED_SESSION_CONTROLS, this.ProviderToUse);
|
|
911
|
+
if (this.CanPickModelVoice) {
|
|
656
912
|
void this.loadRealtimeModels();
|
|
657
913
|
}
|
|
658
914
|
// Target candidates: every active agent EXCEPT the Realtime co-agents (they voice a target, not themselves).
|
|
659
|
-
this.
|
|
915
|
+
this.Agents = AIEngineBase.Instance.Agents
|
|
660
916
|
.filter((a) => a.Status === 'Active' && (!realtimeType || !UUIDsEqual(a.TypeID, realtimeType.ID)))
|
|
661
917
|
.map((a) => ({ ID: a.ID, Name: a.Name ?? '(unnamed)', Description: a.Description ?? null }))
|
|
662
918
|
.sort((a, b) => a.Name.localeCompare(b.Name));
|
|
663
919
|
// An explicit record id (deep link to a specific agent) skips the picker and calls it directly.
|
|
664
920
|
const explicit = this.Data?.ResourceRecordID ? String(this.Data.ResourceRecordID) : null;
|
|
665
921
|
if (explicit) {
|
|
666
|
-
this.
|
|
667
|
-
this.
|
|
922
|
+
this.SelectedTargetId = explicit;
|
|
923
|
+
this.StartCall();
|
|
668
924
|
return;
|
|
669
925
|
}
|
|
670
926
|
// Default the picker to the general assistant "Sage" when present, else the first candidate.
|
|
671
|
-
this.
|
|
672
|
-
this.
|
|
927
|
+
this.SelectedTargetId =
|
|
928
|
+
this.Agents.find((a) => a.Name.trim().toLowerCase() === 'sage')?.ID ?? this.Agents[0]?.ID ?? null;
|
|
673
929
|
// Land on the Meet home (start new / join existing / history) rather than jumping straight into the picker.
|
|
674
|
-
this.
|
|
930
|
+
this.Phase = 'landing';
|
|
675
931
|
this.NotifyLoadComplete();
|
|
676
932
|
}
|
|
677
933
|
// ── Meet landing navigation ─────────────────────────────────────────────────────────
|
|
@@ -680,45 +936,69 @@ let LiveKitRoomResource = class LiveKitRoomResource extends BaseResourceComponen
|
|
|
680
936
|
* Meet landing so they can start a new room, join another, or review history — rather than being stranded
|
|
681
937
|
* on a dead room. Resets the join state so the next "New room" / "Join existing" starts clean.
|
|
682
938
|
*/
|
|
683
|
-
|
|
684
|
-
this.
|
|
685
|
-
this.
|
|
686
|
-
this.
|
|
939
|
+
OnRoomLeft() {
|
|
940
|
+
this.RoomMode = 'agent';
|
|
941
|
+
this.JoinRoomName = null;
|
|
942
|
+
this.Phase = 'landing';
|
|
687
943
|
this.cdr.detectChanges();
|
|
688
944
|
}
|
|
945
|
+
/** @deprecated Use {@link OnRoomLeft}. */
|
|
946
|
+
onRoomLeft() {
|
|
947
|
+
return this.OnRoomLeft();
|
|
948
|
+
}
|
|
689
949
|
/** Go to the "start a new room" picker. */
|
|
950
|
+
StartNewRoom() {
|
|
951
|
+
this.Phase = 'picking';
|
|
952
|
+
}
|
|
953
|
+
/** @deprecated Use {@link StartNewRoom}. */
|
|
690
954
|
startNewRoom() {
|
|
691
|
-
this.
|
|
955
|
+
return this.StartNewRoom();
|
|
692
956
|
}
|
|
693
957
|
/** Open the "join existing room" view and load the active rooms. */
|
|
694
|
-
|
|
695
|
-
this.
|
|
958
|
+
OpenExisting() {
|
|
959
|
+
this.Phase = 'existing';
|
|
696
960
|
void this.loadActiveRooms();
|
|
697
961
|
}
|
|
962
|
+
/** @deprecated Use {@link OpenExisting}. */
|
|
963
|
+
openExisting() {
|
|
964
|
+
return this.OpenExisting();
|
|
965
|
+
}
|
|
698
966
|
/** Open the "past meetings" history view and load the list. */
|
|
699
|
-
|
|
700
|
-
this.
|
|
701
|
-
this.
|
|
967
|
+
OpenHistory() {
|
|
968
|
+
this.Phase = 'history';
|
|
969
|
+
this.OpenHistoryRoom = null;
|
|
702
970
|
void this.loadHistory();
|
|
703
971
|
}
|
|
972
|
+
/** @deprecated Use {@link OpenHistory}. */
|
|
973
|
+
openHistory() {
|
|
974
|
+
return this.OpenHistory();
|
|
975
|
+
}
|
|
704
976
|
/** Back to the Meet home. */
|
|
977
|
+
BackToLanding() {
|
|
978
|
+
this.Phase = 'landing';
|
|
979
|
+
}
|
|
980
|
+
/** @deprecated Use {@link BackToLanding}. */
|
|
705
981
|
backToLanding() {
|
|
706
|
-
this.
|
|
982
|
+
return this.BackToLanding();
|
|
707
983
|
}
|
|
708
984
|
/** Joins an existing room by its LiveKit room name (the bridge `ExternalConnectionID`). */
|
|
709
|
-
|
|
985
|
+
JoinExistingRoom(roomName) {
|
|
710
986
|
const name = roomName.trim();
|
|
711
987
|
if (!name) {
|
|
712
988
|
return;
|
|
713
989
|
}
|
|
714
|
-
this.
|
|
715
|
-
this.
|
|
716
|
-
this.
|
|
990
|
+
this.RoomMode = 'join';
|
|
991
|
+
this.JoinRoomName = name;
|
|
992
|
+
this.Phase = 'live';
|
|
993
|
+
}
|
|
994
|
+
/** @deprecated Use {@link JoinExistingRoom}. */
|
|
995
|
+
joinExistingRoom(roomName) {
|
|
996
|
+
return this.JoinExistingRoom(roomName);
|
|
717
997
|
}
|
|
718
998
|
/** Loads currently-active rooms: distinct rooms that have a Connected/Connecting agent bridge. */
|
|
719
999
|
async loadActiveRooms() {
|
|
720
|
-
this.
|
|
721
|
-
this.
|
|
1000
|
+
this.LoadingActive = true;
|
|
1001
|
+
this.ActiveRooms = [];
|
|
722
1002
|
try {
|
|
723
1003
|
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
724
1004
|
const res = await rv.RunView({
|
|
@@ -743,7 +1023,7 @@ let LiveKitRoomResource = class LiveKitRoomResource extends BaseResourceComponen
|
|
|
743
1023
|
}
|
|
744
1024
|
byRoom.set(room, entry);
|
|
745
1025
|
}
|
|
746
|
-
this.
|
|
1026
|
+
this.ActiveRooms = [...byRoom.entries()].map(([room, info]) => ({
|
|
747
1027
|
RoomName: room,
|
|
748
1028
|
Label: info.agents.size ? [...info.agents].join(', ') : room,
|
|
749
1029
|
AgentCount: info.count,
|
|
@@ -751,14 +1031,14 @@ let LiveKitRoomResource = class LiveKitRoomResource extends BaseResourceComponen
|
|
|
751
1031
|
}
|
|
752
1032
|
}
|
|
753
1033
|
finally {
|
|
754
|
-
this.
|
|
1034
|
+
this.LoadingActive = false;
|
|
755
1035
|
this.cdr.detectChanges();
|
|
756
1036
|
}
|
|
757
1037
|
}
|
|
758
1038
|
/** Loads past meetings: the `Meeting Room` conversations the bridge recorded, newest first. */
|
|
759
1039
|
async loadHistory() {
|
|
760
|
-
this.
|
|
761
|
-
this.
|
|
1040
|
+
this.LoadingHistory = true;
|
|
1041
|
+
this.HistoryRooms = [];
|
|
762
1042
|
try {
|
|
763
1043
|
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
764
1044
|
const res = await rv.RunView({
|
|
@@ -770,7 +1050,7 @@ let LiveKitRoomResource = class LiveKitRoomResource extends BaseResourceComponen
|
|
|
770
1050
|
ResultType: 'simple',
|
|
771
1051
|
}, this.ProviderToUse.CurrentUser);
|
|
772
1052
|
if (res.Success) {
|
|
773
|
-
this.
|
|
1053
|
+
this.HistoryRooms = res.Results.map((r) => ({
|
|
774
1054
|
ConversationID: String(r['ID']),
|
|
775
1055
|
Name: String(r['Name'] ?? 'Meeting'),
|
|
776
1056
|
At: new Date(String(r['__mj_UpdatedAt'] ?? '')),
|
|
@@ -778,15 +1058,15 @@ let LiveKitRoomResource = class LiveKitRoomResource extends BaseResourceComponen
|
|
|
778
1058
|
}
|
|
779
1059
|
}
|
|
780
1060
|
finally {
|
|
781
|
-
this.
|
|
1061
|
+
this.LoadingHistory = false;
|
|
782
1062
|
this.cdr.detectChanges();
|
|
783
1063
|
}
|
|
784
1064
|
}
|
|
785
1065
|
/** Opens a past meeting's transcript (drill-in). */
|
|
786
|
-
async
|
|
787
|
-
this.
|
|
788
|
-
this.
|
|
789
|
-
this.
|
|
1066
|
+
async OpenTranscript(room) {
|
|
1067
|
+
this.OpenHistoryRoom = room;
|
|
1068
|
+
this.HistoryTranscript = [];
|
|
1069
|
+
this.LoadingTranscript = true;
|
|
790
1070
|
this.cdr.detectChanges();
|
|
791
1071
|
try {
|
|
792
1072
|
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
@@ -799,7 +1079,7 @@ let LiveKitRoomResource = class LiveKitRoomResource extends BaseResourceComponen
|
|
|
799
1079
|
ResultType: 'simple',
|
|
800
1080
|
}, this.ProviderToUse.CurrentUser);
|
|
801
1081
|
if (res.Success) {
|
|
802
|
-
this.
|
|
1082
|
+
this.HistoryTranscript = res.Results.map((d) => {
|
|
803
1083
|
const role = String(d['Role'] ?? 'User');
|
|
804
1084
|
if (role === 'Error') {
|
|
805
1085
|
return { Kind: 'error', Speaker: 'Error', Message: String(d['Error'] ?? d['Message'] ?? '') };
|
|
@@ -814,64 +1094,88 @@ let LiveKitRoomResource = class LiveKitRoomResource extends BaseResourceComponen
|
|
|
814
1094
|
}
|
|
815
1095
|
}
|
|
816
1096
|
finally {
|
|
817
|
-
this.
|
|
1097
|
+
this.LoadingTranscript = false;
|
|
818
1098
|
this.cdr.detectChanges();
|
|
819
1099
|
}
|
|
820
1100
|
}
|
|
1101
|
+
/** @deprecated Use {@link OpenTranscript}. */
|
|
1102
|
+
async openTranscript(room) {
|
|
1103
|
+
return this.OpenTranscript(room);
|
|
1104
|
+
}
|
|
821
1105
|
/** Back to the history list from a transcript drill-in. */
|
|
1106
|
+
CloseTranscript() {
|
|
1107
|
+
this.OpenHistoryRoom = null;
|
|
1108
|
+
}
|
|
1109
|
+
/** @deprecated Use {@link CloseTranscript}. */
|
|
822
1110
|
closeTranscript() {
|
|
823
|
-
this.
|
|
1111
|
+
return this.CloseTranscript();
|
|
824
1112
|
}
|
|
825
1113
|
/** Formats a meeting timestamp for the history list (avoids a `date` pipe / CommonModule dependency). */
|
|
826
|
-
|
|
1114
|
+
FormatTime(d) {
|
|
827
1115
|
return d && !isNaN(d.getTime()) ? d.toLocaleString() : '';
|
|
828
1116
|
}
|
|
1117
|
+
/** @deprecated Use {@link FormatTime}. */
|
|
1118
|
+
formatTime(d) {
|
|
1119
|
+
return this.FormatTime(d);
|
|
1120
|
+
}
|
|
829
1121
|
/** Picker selection handler (native select; avoids a FormsModule dependency). */
|
|
1122
|
+
OnTargetChange(event) {
|
|
1123
|
+
this.SelectedTargetId = event.target.value || null;
|
|
1124
|
+
}
|
|
1125
|
+
/** @deprecated Use {@link OnTargetChange}. */
|
|
830
1126
|
onTargetChange(event) {
|
|
831
|
-
this.
|
|
1127
|
+
return this.OnTargetChange(event);
|
|
832
1128
|
}
|
|
833
1129
|
/** Loads active Realtime models + their voices for the dev pickers (best-effort; empty on failure). */
|
|
834
1130
|
async loadRealtimeModels() {
|
|
835
1131
|
try {
|
|
836
1132
|
const client = new GraphQLLiveKitClient(this.ProviderToUse);
|
|
837
|
-
this.
|
|
1133
|
+
this.RealtimeModels = await client.GetRealtimeModelVoices();
|
|
838
1134
|
}
|
|
839
1135
|
catch {
|
|
840
|
-
this.
|
|
1136
|
+
this.RealtimeModels = [];
|
|
841
1137
|
}
|
|
842
1138
|
this.cdr.markForCheck();
|
|
843
1139
|
}
|
|
844
1140
|
/** Commits the chosen target and switches to the live room. */
|
|
845
|
-
|
|
846
|
-
if (!this.
|
|
1141
|
+
StartCall() {
|
|
1142
|
+
if (!this.SelectedTargetId) {
|
|
847
1143
|
return;
|
|
848
1144
|
}
|
|
849
|
-
this.
|
|
850
|
-
this.
|
|
851
|
-
this.
|
|
1145
|
+
this.TargetAgentId = this.SelectedTargetId;
|
|
1146
|
+
this.TargetAgentName = this.Agents.find((a) => UUIDsEqual(a.ID, this.SelectedTargetId))?.Name ?? null;
|
|
1147
|
+
this.Phase = 'live';
|
|
1148
|
+
}
|
|
1149
|
+
/** @deprecated Use {@link StartCall}. */
|
|
1150
|
+
startCall() {
|
|
1151
|
+
return this.StartCall();
|
|
852
1152
|
}
|
|
853
1153
|
/** Opens the invite-people dialog for the given room. */
|
|
1154
|
+
OpenInvite(roomName) {
|
|
1155
|
+
this.InviteRoomName = roomName || null;
|
|
1156
|
+
this.UserSearch = '';
|
|
1157
|
+
this.UserResults = [];
|
|
1158
|
+
this.SelectedInvitees = [];
|
|
1159
|
+
this.Searched = false;
|
|
1160
|
+
this.InviteMessage = null;
|
|
1161
|
+
this.ShowInvite = true;
|
|
1162
|
+
}
|
|
1163
|
+
/** @deprecated Use {@link OpenInvite}. */
|
|
854
1164
|
openInvite(roomName) {
|
|
855
|
-
this.
|
|
856
|
-
this.userSearch = '';
|
|
857
|
-
this.userResults = [];
|
|
858
|
-
this.selectedInvitees = [];
|
|
859
|
-
this.searched = false;
|
|
860
|
-
this.inviteMessage = null;
|
|
861
|
-
this.showInvite = true;
|
|
1165
|
+
return this.OpenInvite(roomName);
|
|
862
1166
|
}
|
|
863
1167
|
/** Searches `MJ: Users` by name/email, excluding the current user + already-selected people. */
|
|
864
|
-
async
|
|
865
|
-
const term = this.
|
|
1168
|
+
async SearchUsers() {
|
|
1169
|
+
const term = this.UserSearch.trim();
|
|
866
1170
|
if (!term) {
|
|
867
1171
|
return;
|
|
868
1172
|
}
|
|
869
|
-
this.
|
|
1173
|
+
this.Searching = true;
|
|
870
1174
|
this.cdr.markForCheck();
|
|
871
1175
|
try {
|
|
872
1176
|
const p = this.ProviderToUse;
|
|
873
1177
|
const escaped = term.replace(/'/g, "''");
|
|
874
|
-
const excluded = [p.CurrentUser?.ID, ...this.
|
|
1178
|
+
const excluded = [p.CurrentUser?.ID, ...this.SelectedInvitees.map((u) => u.ID)].filter(Boolean);
|
|
875
1179
|
const excludeFilter = excluded.length ? ` AND ID NOT IN (${excluded.map((id) => `'${id}'`).join(',')})` : '';
|
|
876
1180
|
const result = await RunView.FromMetadataProvider(p).RunView({
|
|
877
1181
|
EntityName: 'Users',
|
|
@@ -881,60 +1185,76 @@ let LiveKitRoomResource = class LiveKitRoomResource extends BaseResourceComponen
|
|
|
881
1185
|
MaxRows: 20,
|
|
882
1186
|
ResultType: 'simple',
|
|
883
1187
|
});
|
|
884
|
-
this.
|
|
1188
|
+
this.UserResults = (result.Success ? result.Results : []).map((u) => ({
|
|
885
1189
|
ID: u.ID,
|
|
886
1190
|
Name: u.Name || u.Email || '(unnamed)',
|
|
887
1191
|
Email: u.Email ?? null,
|
|
888
1192
|
}));
|
|
889
1193
|
}
|
|
890
1194
|
finally {
|
|
891
|
-
this.
|
|
892
|
-
this.
|
|
1195
|
+
this.Searching = false;
|
|
1196
|
+
this.Searched = true;
|
|
893
1197
|
this.cdr.markForCheck();
|
|
894
1198
|
}
|
|
895
1199
|
}
|
|
1200
|
+
/** @deprecated Use {@link SearchUsers}. */
|
|
1201
|
+
async searchUsers() {
|
|
1202
|
+
return this.SearchUsers();
|
|
1203
|
+
}
|
|
896
1204
|
/** Adds a person to the invite list (and out of the results). */
|
|
897
|
-
|
|
898
|
-
if (!this.
|
|
899
|
-
this.
|
|
1205
|
+
AddInvitee(user) {
|
|
1206
|
+
if (!this.SelectedInvitees.some((u) => UUIDsEqual(u.ID, user.ID))) {
|
|
1207
|
+
this.SelectedInvitees = [...this.SelectedInvitees, user];
|
|
900
1208
|
}
|
|
901
|
-
this.
|
|
1209
|
+
this.UserResults = this.UserResults.filter((u) => !UUIDsEqual(u.ID, user.ID));
|
|
1210
|
+
}
|
|
1211
|
+
/** @deprecated Use {@link AddInvitee}. */
|
|
1212
|
+
addInvitee(user) {
|
|
1213
|
+
return this.AddInvitee(user);
|
|
902
1214
|
}
|
|
903
1215
|
/** Removes a person from the invite list. */
|
|
1216
|
+
RemoveInvitee(userId) {
|
|
1217
|
+
this.SelectedInvitees = this.SelectedInvitees.filter((u) => !UUIDsEqual(u.ID, userId));
|
|
1218
|
+
}
|
|
1219
|
+
/** @deprecated Use {@link RemoveInvitee}. */
|
|
904
1220
|
removeInvitee(userId) {
|
|
905
|
-
|
|
1221
|
+
return this.RemoveInvitee(userId);
|
|
906
1222
|
}
|
|
907
1223
|
/** Sends the invites — the server notifies each person (in-app + Comms when configured). */
|
|
908
|
-
async
|
|
909
|
-
if (!this.
|
|
1224
|
+
async SendInvites() {
|
|
1225
|
+
if (!this.SelectedInvitees.length || !this.InviteRoomName || this.Inviting) {
|
|
910
1226
|
return;
|
|
911
1227
|
}
|
|
912
|
-
this.
|
|
913
|
-
this.
|
|
1228
|
+
this.Inviting = true;
|
|
1229
|
+
this.InviteMessage = null;
|
|
914
1230
|
this.cdr.markForCheck();
|
|
915
1231
|
try {
|
|
916
1232
|
const client = new GraphQLLiveKitClient(this.ProviderToUse);
|
|
917
|
-
const ok = await client.InviteUsers(this.
|
|
1233
|
+
const ok = await client.InviteUsers(this.InviteRoomName, this.SelectedInvitees.map((u) => u.ID));
|
|
918
1234
|
if (ok) {
|
|
919
|
-
this.
|
|
920
|
-
this.
|
|
1235
|
+
this.InviteMessage = `Invited ${this.SelectedInvitees.length} ${this.SelectedInvitees.length === 1 ? 'person' : 'people'}.`;
|
|
1236
|
+
this.SelectedInvitees = [];
|
|
921
1237
|
setTimeout(() => {
|
|
922
|
-
this.
|
|
1238
|
+
this.ShowInvite = false;
|
|
923
1239
|
this.cdr.markForCheck();
|
|
924
1240
|
}, 900);
|
|
925
1241
|
}
|
|
926
1242
|
else {
|
|
927
|
-
this.
|
|
1243
|
+
this.InviteMessage = 'Could not send the invites. Please try again.';
|
|
928
1244
|
}
|
|
929
1245
|
}
|
|
930
1246
|
catch (err) {
|
|
931
|
-
this.
|
|
1247
|
+
this.InviteMessage = err instanceof Error ? err.message : String(err);
|
|
932
1248
|
}
|
|
933
1249
|
finally {
|
|
934
|
-
this.
|
|
1250
|
+
this.Inviting = false;
|
|
935
1251
|
this.cdr.markForCheck();
|
|
936
1252
|
}
|
|
937
1253
|
}
|
|
1254
|
+
/** @deprecated Use {@link SendInvites}. */
|
|
1255
|
+
async sendInvites() {
|
|
1256
|
+
return this.SendInvites();
|
|
1257
|
+
}
|
|
938
1258
|
ngAfterViewInit() {
|
|
939
1259
|
// Clear the shell loading screen even if resolution is slow — the picker/room/message shows its own
|
|
940
1260
|
// state, so the loader must not hang on direct URL navigation.
|