@memberjunction/ng-mj-livekit-room 6.2.0-edge.3 → 6.2.0-edge.4

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/README.md CHANGED
@@ -28,7 +28,7 @@ RealtimeBridgeResolver (MJServer) ──► @memberjunction/livekit-room-server
28
28
  ></mj-livekit-agent-room>
29
29
 
30
30
  <!-- Or just join an existing room -->
31
- <mj-livekit-agent-room [Mode]="'join'" [RoomName]="'support-42'" [DisplayName]="'Amith'"></mj-livekit-agent-room>
31
+ <mj-livekit-agent-room [Mode]="'join'" [RoomName]="'support-42'" [DisplayName]="'Jordan'"></mj-livekit-agent-room>
32
32
  ```
33
33
 
34
34
  ## What it adds over the generic component
@@ -39,11 +39,18 @@ RealtimeBridgeResolver (MJServer) ──► @memberjunction/livekit-room-server
39
39
  emits `SessionStarted` with the bridge id.
40
40
  - **Server-authorized recording** — `EnableRecording` wires the record button to the egress mutations.
41
41
  - **Multi-provider** — extends `BaseAngularComponent`; pass `[Provider]` to scope to a specific MJ server.
42
+ - **Saved layout** — the user's layout of the room is saved per user (see [Saved layout](#saved-layout)).
43
+ - **Avatar notices** — when an agent's bot says the agent's avatar can't be shown, the room shows one info notice per
44
+ agent per join, such as "Audio only for Sage: the avatar can't be shown in this meeting". The user can dismiss it; it
45
+ also hides after 10 seconds or when the agent leaves, and doesn't show again in that join. A reconnect is the same
46
+ join; a disconnect or "Try again" starts a new one. `AvatarNoticeLabels` (`AvatarNoticeOverrides` from
47
+ `@memberjunction/ng-realtime-media`) gives a host's own line per reason, shown as written with `{Agent}` for the
48
+ agent's name. A reason it leaves out, or one the room doesn't know, gets the stock line.
42
49
 
43
50
  ## Inputs
44
51
 
45
- `Mode` (`agent` / `join`), `AgentID`, `AgentName`, `RoomName`, `DisplayName`, `TurnMode`, `AutoStart`,
46
- plus pass-through gates: `Layout`, `Title`, `ShowHeader`, `ShowControlBar`, `ShowChat`,
52
+ `Mode` (`agent` / `join` / `preview`), `AgentID`, `AgentName`, `RoomName`, `DisplayName`, `TurnMode`, `AutoStart`,
53
+ `AvatarNoticeLabels`, plus pass-through gates: `Layout`, `Title`, `ShowHeader`, `ShowControlBar`, `ShowChat`,
47
54
  `ShowParticipantsPanel`, `EnablePinning`, `EnableLayoutSwitcher`, `EnableNoiseFilter`,
48
55
  `EnableBackgroundEffects`, `ShowAgentState`, `ShowPreJoin`, `EnableRecording`, `StartWithMicrophone`,
49
56
  `StartWithCamera`, `AgentAvatarUrl`, `E2EEPassphrase`, `E2EEWorker`, and the device-control gates.
@@ -53,6 +60,23 @@ plus pass-through gates: `Layout`, `Title`, `ShowHeader`, `ShowControlBar`, `Sho
53
60
  `SessionStarted`, `Connected`, `Disconnected`, `ParticipantJoined`, `ParticipantLeft`, `DataReceived`,
54
61
  `ErrorOccurred`.
55
62
 
63
+ ## Saved layout
64
+
65
+ The binding saves the user's room layout in `MJ: User Settings`, per user and for every room: where they moved
66
+ participants' tiles, where they put picture-in-picture boxes, and whether they hid their self-view. It loads the layout
67
+ when it starts, gives it to the room, and saves each change the room reports, through `MediaLayoutPrefs` from
68
+ `@memberjunction/ai-realtime-client/media`. The preview room (`Mode="preview"`) saves under its own keys, so trying it
69
+ never changes a meeting's layout.
70
+
71
+ | Saved | Meetings | Preview room |
72
+ |---|---|---|
73
+ | Tile moves | `mj.livekit.placement.v1` (`LIVEKIT_PLACEMENT_PREF_KEY`) | `mj.livekit.preview.placement.v1` (`LIVEKIT_PREVIEW_PLACEMENT_PREF_KEY`) |
74
+ | Picture-in-picture boxes | `mj.livekit.pip.v1` (`LIVEKIT_PIP_PREF_KEY`) | `mj.livekit.preview.pip.v1` (`LIVEKIT_PREVIEW_PIP_PREF_KEY`) |
75
+ | Self-view hidden | `mj.livekit.selfView.hidden.v1` (`LIVEKIT_SELF_VIEW_HIDDEN_PREF_KEY`) | `mj.livekit.preview.selfView.hidden.v1` (`LIVEKIT_PREVIEW_SELF_VIEW_HIDDEN_PREF_KEY`) |
76
+
77
+ Only a saved `true` hides the self-view; nothing saved, `false` or any other value shows it. Show and Reset layout save
78
+ `false`. When saving fails, the change still holds for the session.
79
+
56
80
  ## In Explorer
57
81
 
58
82
  `@memberjunction/ng-explorer-core` registers a `LiveKitRoomResource` (`DriverClass = 'LiveKitRoomResource'`)
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @fileoverview The meeting room's notice that an agent's avatar can't be shown. Everyone in the room sees it, once per
3
+ * agent per join, from the agent's bot's attribute (`LiveKitParticipantView.AvatarAudioOnly`, read by the room core).
4
+ * Its words are `ng-realtime-media`'s `AvatarNoticeText` in the meeting form, which names the agent, since a meeting
5
+ * can have several.
6
+ *
7
+ * @module @memberjunction/ng-mj-livekit-room
8
+ */
9
+ import type { LiveKitAvatarAudioOnly, LiveKitRoomState } from '@memberjunction/livekit-room-core';
10
+ /** How long a notice shows before it hides itself, in milliseconds. */
11
+ export declare const AGENT_AVATAR_NOTICE_HIDE_MS = 10000;
12
+ /** A reason the room can name (`RealtimeAvatarUnavailableReason` in `@memberjunction/ai`). */
13
+ type AvatarAudioOnlyReason = NonNullable<LiveKitAvatarAudioOnly['Reason']>;
14
+ /** A notice over the room: the agent it is about, and why its avatar can't be shown. */
15
+ export interface AgentAvatarNotice {
16
+ /** The agent's participant identity. */
17
+ Identity: string;
18
+ /** The agent's name, as the room shows it. */
19
+ AgentName: string;
20
+ /** Why, when the agent's bot gave a reason the room knows. */
21
+ Reason?: AvatarAudioOnlyReason;
22
+ }
23
+ /**
24
+ * The notices that agents' avatars can't be shown, for one meeting room. A notice shows from the first room state in
25
+ * which the agent's bot says audio only, until the user dismisses it, {@link AGENT_AVATAR_NOTICE_HIDE_MS} passes or the
26
+ * agent leaves, and not again in the same join: a reconnect is the same join, and only {@link Reset} starts a new one.
27
+ */
28
+ export declare class AgentAvatarNotices {
29
+ private readonly changed;
30
+ private readonly hideAfterMs;
31
+ /** The agents that have had their notice in this join. */
32
+ private readonly noticed;
33
+ /** The hide timer of each notice showing, by agent. */
34
+ private readonly timers;
35
+ private visible;
36
+ /**
37
+ * @param changed Called whenever the notices showing change, including when one hides itself.
38
+ * @param hideAfterMs How long a notice shows before it hides itself.
39
+ */
40
+ constructor(changed: () => void, hideAfterMs?: number);
41
+ /** The notices showing now, oldest first. */
42
+ get Visible(): readonly AgentAvatarNotice[];
43
+ /** Shows a notice for each agent newly audio only in this join, and drops the notices of agents who left. */
44
+ Update(state: LiveKitRoomState): void;
45
+ /** Hides an agent's notice; it does not show again in this join. */
46
+ Dismiss(identity: string): void;
47
+ /** Starts a new join: no notice shows now, and each agent's can show once more. */
48
+ Reset(): void;
49
+ /** Stops the hide timers, for a room that is going away. */
50
+ Dispose(): void;
51
+ /** A new notice for an agent newly audio only in this join, with its hide timer started; none for anyone else. */
52
+ private noticeFor;
53
+ private hide;
54
+ private stopTimer;
55
+ }
56
+ export {};
57
+ //# sourceMappingURL=agent-avatar-notices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-avatar-notices.d.ts","sourceRoot":"","sources":["../../src/lib/agent-avatar-notices.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAA0B,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE1H,uEAAuE;AACvE,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAElD,8FAA8F;AAC9F,KAAK,qBAAqB,GAAG,WAAW,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE3E,wFAAwF;AACxF,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC;AAED;;;;GAIG;AACH,qBAAa,kBAAkB;IAY3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAZ9B,0DAA0D;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,uDAAuD;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoD;IAC3E,OAAO,CAAC,OAAO,CAAoC;IAEnD;;;OAGG;gBAEgB,OAAO,EAAE,MAAM,IAAI,EACnB,WAAW,GAAE,MAAoC;IAGpE,6CAA6C;IAC7C,IAAW,OAAO,IAAI,SAAS,iBAAiB,EAAE,CAEjD;IAED,6GAA6G;IACtG,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAY5C,oEAAoE;IAC7D,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMtC,mFAAmF;IAC5E,KAAK,IAAI,IAAI;IASpB,4DAA4D;IACrD,OAAO,IAAI,IAAI;IAItB,kHAAkH;IAClH,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,SAAS;CAOlB"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * @fileoverview The meeting room's notice that an agent's avatar can't be shown. Everyone in the room sees it, once per
3
+ * agent per join, from the agent's bot's attribute (`LiveKitParticipantView.AvatarAudioOnly`, read by the room core).
4
+ * Its words are `ng-realtime-media`'s `AvatarNoticeText` in the meeting form, which names the agent, since a meeting
5
+ * can have several.
6
+ *
7
+ * @module @memberjunction/ng-mj-livekit-room
8
+ */
9
+ /** How long a notice shows before it hides itself, in milliseconds. */
10
+ export const AGENT_AVATAR_NOTICE_HIDE_MS = 10_000;
11
+ /**
12
+ * The notices that agents' avatars can't be shown, for one meeting room. A notice shows from the first room state in
13
+ * which the agent's bot says audio only, until the user dismisses it, {@link AGENT_AVATAR_NOTICE_HIDE_MS} passes or the
14
+ * agent leaves, and not again in the same join: a reconnect is the same join, and only {@link Reset} starts a new one.
15
+ */
16
+ export class AgentAvatarNotices {
17
+ changed;
18
+ hideAfterMs;
19
+ /** The agents that have had their notice in this join. */
20
+ noticed = new Set();
21
+ /** The hide timer of each notice showing, by agent. */
22
+ timers = new Map();
23
+ visible = [];
24
+ /**
25
+ * @param changed Called whenever the notices showing change, including when one hides itself.
26
+ * @param hideAfterMs How long a notice shows before it hides itself.
27
+ */
28
+ constructor(changed, hideAfterMs = AGENT_AVATAR_NOTICE_HIDE_MS) {
29
+ this.changed = changed;
30
+ this.hideAfterMs = hideAfterMs;
31
+ }
32
+ /** The notices showing now, oldest first. */
33
+ get Visible() {
34
+ return this.visible;
35
+ }
36
+ /** Shows a notice for each agent newly audio only in this join, and drops the notices of agents who left. */
37
+ Update(state) {
38
+ const present = new Set(state.Remote.map((p) => p.Identity));
39
+ const kept = this.visible.filter((notice) => present.has(notice.Identity));
40
+ this.visible.filter((notice) => !present.has(notice.Identity)).forEach((notice) => this.stopTimer(notice.Identity));
41
+ const added = state.Remote.flatMap((p) => this.noticeFor(p));
42
+ if (added.length === 0 && kept.length === this.visible.length) {
43
+ return;
44
+ }
45
+ this.visible = [...kept, ...added];
46
+ this.changed();
47
+ }
48
+ /** Hides an agent's notice; it does not show again in this join. */
49
+ Dismiss(identity) {
50
+ if (this.visible.some((notice) => notice.Identity === identity)) {
51
+ this.hide(identity);
52
+ }
53
+ }
54
+ /** Starts a new join: no notice shows now, and each agent's can show once more. */
55
+ Reset() {
56
+ this.noticed.clear();
57
+ [...this.timers.keys()].forEach((identity) => this.stopTimer(identity));
58
+ if (this.visible.length > 0) {
59
+ this.visible = [];
60
+ this.changed();
61
+ }
62
+ }
63
+ /** Stops the hide timers, for a room that is going away. */
64
+ Dispose() {
65
+ [...this.timers.keys()].forEach((identity) => this.stopTimer(identity));
66
+ }
67
+ /** A new notice for an agent newly audio only in this join, with its hide timer started; none for anyone else. */
68
+ noticeFor(participant) {
69
+ const audioOnly = participant.AvatarAudioOnly;
70
+ if (participant.Role !== 'agent' || !audioOnly || this.noticed.has(participant.Identity)) {
71
+ return [];
72
+ }
73
+ this.noticed.add(participant.Identity);
74
+ this.timers.set(participant.Identity, setTimeout(() => this.hide(participant.Identity), this.hideAfterMs));
75
+ return [{ Identity: participant.Identity, AgentName: participant.DisplayName, ...(audioOnly.Reason ? { Reason: audioOnly.Reason } : {}) }];
76
+ }
77
+ hide(identity) {
78
+ this.stopTimer(identity);
79
+ this.visible = this.visible.filter((notice) => notice.Identity !== identity);
80
+ this.changed();
81
+ }
82
+ stopTimer(identity) {
83
+ const timer = this.timers.get(identity);
84
+ if (timer !== undefined) {
85
+ clearTimeout(timer);
86
+ this.timers.delete(identity);
87
+ }
88
+ }
89
+ }
90
+ //# sourceMappingURL=agent-avatar-notices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-avatar-notices.js","sourceRoot":"","sources":["../../src/lib/agent-avatar-notices.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview The meeting room's notice that an agent's avatar can't be shown. Everyone in the room sees it, once per\n * agent per join, from the agent's bot's attribute (`LiveKitParticipantView.AvatarAudioOnly`, read by the room core).\n * Its words are `ng-realtime-media`'s `AvatarNoticeText` in the meeting form, which names the agent, since a meeting\n * can have several.\n *\n * @module @memberjunction/ng-mj-livekit-room\n */\n\nimport type { LiveKitAvatarAudioOnly, LiveKitParticipantView, LiveKitRoomState } from '@memberjunction/livekit-room-core';\n\n/** How long a notice shows before it hides itself, in milliseconds. */\nexport const AGENT_AVATAR_NOTICE_HIDE_MS = 10_000;\n\n/** A reason the room can name (`RealtimeAvatarUnavailableReason` in `@memberjunction/ai`). */\ntype AvatarAudioOnlyReason = NonNullable<LiveKitAvatarAudioOnly['Reason']>;\n\n/** A notice over the room: the agent it is about, and why its avatar can't be shown. */\nexport interface AgentAvatarNotice {\n /** The agent's participant identity. */\n Identity: string;\n /** The agent's name, as the room shows it. */\n AgentName: string;\n /** Why, when the agent's bot gave a reason the room knows. */\n Reason?: AvatarAudioOnlyReason;\n}\n\n/**\n * The notices that agents' avatars can't be shown, for one meeting room. A notice shows from the first room state in\n * which the agent's bot says audio only, until the user dismisses it, {@link AGENT_AVATAR_NOTICE_HIDE_MS} passes or the\n * agent leaves, and not again in the same join: a reconnect is the same join, and only {@link Reset} starts a new one.\n */\nexport class AgentAvatarNotices {\n /** The agents that have had their notice in this join. */\n private readonly noticed = new Set<string>();\n /** The hide timer of each notice showing, by agent. */\n private readonly timers = new Map<string, ReturnType<typeof setTimeout>>();\n private visible: readonly AgentAvatarNotice[] = [];\n\n /**\n * @param changed Called whenever the notices showing change, including when one hides itself.\n * @param hideAfterMs How long a notice shows before it hides itself.\n */\n constructor(\n private readonly changed: () => void,\n private readonly hideAfterMs: number = AGENT_AVATAR_NOTICE_HIDE_MS,\n ) {}\n\n /** The notices showing now, oldest first. */\n public get Visible(): readonly AgentAvatarNotice[] {\n return this.visible;\n }\n\n /** Shows a notice for each agent newly audio only in this join, and drops the notices of agents who left. */\n public Update(state: LiveKitRoomState): void {\n const present = new Set(state.Remote.map((p) => p.Identity));\n const kept = this.visible.filter((notice) => present.has(notice.Identity));\n this.visible.filter((notice) => !present.has(notice.Identity)).forEach((notice) => this.stopTimer(notice.Identity));\n const added = state.Remote.flatMap((p) => this.noticeFor(p));\n if (added.length === 0 && kept.length === this.visible.length) {\n return;\n }\n this.visible = [...kept, ...added];\n this.changed();\n }\n\n /** Hides an agent's notice; it does not show again in this join. */\n public Dismiss(identity: string): void {\n if (this.visible.some((notice) => notice.Identity === identity)) {\n this.hide(identity);\n }\n }\n\n /** Starts a new join: no notice shows now, and each agent's can show once more. */\n public Reset(): void {\n this.noticed.clear();\n [...this.timers.keys()].forEach((identity) => this.stopTimer(identity));\n if (this.visible.length > 0) {\n this.visible = [];\n this.changed();\n }\n }\n\n /** Stops the hide timers, for a room that is going away. */\n public Dispose(): void {\n [...this.timers.keys()].forEach((identity) => this.stopTimer(identity));\n }\n\n /** A new notice for an agent newly audio only in this join, with its hide timer started; none for anyone else. */\n private noticeFor(participant: LiveKitParticipantView): AgentAvatarNotice[] {\n const audioOnly = participant.AvatarAudioOnly;\n if (participant.Role !== 'agent' || !audioOnly || this.noticed.has(participant.Identity)) {\n return [];\n }\n this.noticed.add(participant.Identity);\n this.timers.set(participant.Identity, setTimeout(() => this.hide(participant.Identity), this.hideAfterMs));\n return [{ Identity: participant.Identity, AgentName: participant.DisplayName, ...(audioOnly.Reason ? { Reason: audioOnly.Reason } : {}) }];\n }\n\n private hide(identity: string): void {\n this.stopTimer(identity);\n this.visible = this.visible.filter((notice) => notice.Identity !== identity);\n this.changed();\n }\n\n private stopTimer(identity: string): void {\n const timer = this.timers.get(identity);\n if (timer !== undefined) {\n clearTimeout(timer);\n this.timers.delete(identity);\n }\n }\n}\n"]}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @fileoverview The meeting room's notice for a device error: a microphone, camera, speaker or share that failed, or
3
+ * that the browser refused. Its line says what the user asked for and, after a colon, the reason the browser, LiveKit or
4
+ * the share picker gave, as the room's notice about what the agent sees does ("Couldn't change what the agent sees: …").
5
+ * For a panel share where the user picked another surface, the reason is `/media`'s own hint, so the line reads
6
+ * "Couldn't start sharing: To share only the panel, choose this tab in the browser's picker." A share picker the user
7
+ * closed is no error, so nothing shows for it.
8
+ *
9
+ * @module @memberjunction/ng-mj-livekit-room
10
+ */
11
+ import type { LiveKitRoomError } from '@memberjunction/livekit-room-core';
12
+ /**
13
+ * The meeting room's notice line for a room error: for a `device` error, what the user asked for and the reason given,
14
+ * or what they asked for alone when no reason was given; `null` for any other kind of error.
15
+ *
16
+ * @param error The error the room reported.
17
+ * @returns The line, such as "Couldn't turn on your camera: Could not start video source", or `null`.
18
+ */
19
+ export declare function DeviceErrorNoticeText(error: LiveKitRoomError): string | null;
20
+ //# sourceMappingURL=device-error-notice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-error-notice.d.ts","sourceRoot":"","sources":["../../src/lib/device-error-notice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAsB,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAoC9F;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAO5E"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @fileoverview The meeting room's notice for a device error: a microphone, camera, speaker or share that failed, or
3
+ * that the browser refused. Its line says what the user asked for and, after a colon, the reason the browser, LiveKit or
4
+ * the share picker gave, as the room's notice about what the agent sees does ("Couldn't change what the agent sees: …").
5
+ * For a panel share where the user picked another surface, the reason is `/media`'s own hint, so the line reads
6
+ * "Couldn't start sharing: To share only the panel, choose this tab in the browser's picker." A share picker the user
7
+ * closed is no error, so nothing shows for it.
8
+ *
9
+ * @module @memberjunction/ng-mj-livekit-room
10
+ */
11
+ /** How the notice starts: what the user asked for, by device and request. */
12
+ const LEADS = {
13
+ microphone: {
14
+ on: "Couldn't turn on your microphone",
15
+ off: "Couldn't turn off your microphone",
16
+ switch: "Couldn't switch your microphone",
17
+ unknown: "Couldn't use your microphone",
18
+ },
19
+ camera: {
20
+ on: "Couldn't turn on your camera",
21
+ off: "Couldn't turn off your camera",
22
+ switch: "Couldn't switch your camera",
23
+ unknown: "Couldn't use your camera",
24
+ },
25
+ screen: {
26
+ on: "Couldn't start sharing",
27
+ off: "Couldn't stop sharing",
28
+ switch: "Couldn't share",
29
+ unknown: "Couldn't share",
30
+ },
31
+ speaker: {
32
+ on: "Couldn't turn on the sound",
33
+ off: "Couldn't turn off the sound",
34
+ switch: "Couldn't switch your speaker",
35
+ unknown: "Couldn't play the sound",
36
+ },
37
+ };
38
+ /** How the notice starts for a device error about no one device (listing the devices). */
39
+ const NO_DEVICE_LEAD = "Couldn't use your devices";
40
+ /**
41
+ * The meeting room's notice line for a room error: for a `device` error, what the user asked for and the reason given,
42
+ * or what they asked for alone when no reason was given; `null` for any other kind of error.
43
+ *
44
+ * @param error The error the room reported.
45
+ * @returns The line, such as "Couldn't turn on your camera: Could not start video source", or `null`.
46
+ */
47
+ export function DeviceErrorNoticeText(error) {
48
+ if (error.Kind !== 'device') {
49
+ return null;
50
+ }
51
+ const lead = error.Device ? LEADS[error.Device.Media][error.Device.Change ?? 'unknown'] : NO_DEVICE_LEAD;
52
+ const reason = reasonOf(error.Cause);
53
+ return reason ? `${lead}: ${reason}` : `${lead}.`;
54
+ }
55
+ /** The reason an error's cause gives: an error's message, or the text the preview room passes; empty for anything else. */
56
+ function reasonOf(cause) {
57
+ if (cause instanceof Error) {
58
+ return cause.message.trim();
59
+ }
60
+ return typeof cause === 'string' ? cause.trim() : '';
61
+ }
62
+ //# sourceMappingURL=device-error-notice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-error-notice.js","sourceRoot":"","sources":["../../src/lib/device-error-notice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,6EAA6E;AAC7E,MAAM,KAAK,GAA2F;IACpG,UAAU,EAAE;QACV,EAAE,EAAE,kCAAkC;QACtC,GAAG,EAAE,mCAAmC;QACxC,MAAM,EAAE,iCAAiC;QACzC,OAAO,EAAE,8BAA8B;KACxC;IACD,MAAM,EAAE;QACN,EAAE,EAAE,8BAA8B;QAClC,GAAG,EAAE,+BAA+B;QACpC,MAAM,EAAE,6BAA6B;QACrC,OAAO,EAAE,0BAA0B;KACpC;IACD,MAAM,EAAE;QACN,EAAE,EAAE,wBAAwB;QAC5B,GAAG,EAAE,uBAAuB;QAC5B,MAAM,EAAE,gBAAgB;QACxB,OAAO,EAAE,gBAAgB;KAC1B;IACD,OAAO,EAAE;QACP,EAAE,EAAE,4BAA4B;QAChC,GAAG,EAAE,6BAA6B;QAClC,MAAM,EAAE,8BAA8B;QACtC,OAAO,EAAE,yBAAyB;KACnC;CACF,CAAC;AAEF,0FAA0F;AAC1F,MAAM,cAAc,GAAG,2BAA2B,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAuB;IAC3D,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;IACzG,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;AACpD,CAAC;AAED,2HAA2H;AAC3H,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC","sourcesContent":["/**\n * @fileoverview The meeting room's notice for a device error: a microphone, camera, speaker or share that failed, or\n * that the browser refused. Its line says what the user asked for and, after a colon, the reason the browser, LiveKit or\n * the share picker gave, as the room's notice about what the agent sees does (\"Couldn't change what the agent sees: …\").\n * For a panel share where the user picked another surface, the reason is `/media`'s own hint, so the line reads\n * \"Couldn't start sharing: To share only the panel, choose this tab in the browser's picker.\" A share picker the user\n * closed is no error, so nothing shows for it.\n *\n * @module @memberjunction/ng-mj-livekit-room\n */\n\nimport type { LiveKitErrorDevice, LiveKitRoomError } from '@memberjunction/livekit-room-core';\n\n/** What the user asked of a device, or `'unknown'` when the room can't tell. */\ntype DeviceRequest = NonNullable<LiveKitErrorDevice['Change']> | 'unknown';\n\n/** How the notice starts: what the user asked for, by device and request. */\nconst LEADS: Readonly<Record<LiveKitErrorDevice['Media'], Readonly<Record<DeviceRequest, string>>>> = {\n microphone: {\n on: \"Couldn't turn on your microphone\",\n off: \"Couldn't turn off your microphone\",\n switch: \"Couldn't switch your microphone\",\n unknown: \"Couldn't use your microphone\",\n },\n camera: {\n on: \"Couldn't turn on your camera\",\n off: \"Couldn't turn off your camera\",\n switch: \"Couldn't switch your camera\",\n unknown: \"Couldn't use your camera\",\n },\n screen: {\n on: \"Couldn't start sharing\",\n off: \"Couldn't stop sharing\",\n switch: \"Couldn't share\",\n unknown: \"Couldn't share\",\n },\n speaker: {\n on: \"Couldn't turn on the sound\",\n off: \"Couldn't turn off the sound\",\n switch: \"Couldn't switch your speaker\",\n unknown: \"Couldn't play the sound\",\n },\n};\n\n/** How the notice starts for a device error about no one device (listing the devices). */\nconst NO_DEVICE_LEAD = \"Couldn't use your devices\";\n\n/**\n * The meeting room's notice line for a room error: for a `device` error, what the user asked for and the reason given,\n * or what they asked for alone when no reason was given; `null` for any other kind of error.\n *\n * @param error The error the room reported.\n * @returns The line, such as \"Couldn't turn on your camera: Could not start video source\", or `null`.\n */\nexport function DeviceErrorNoticeText(error: LiveKitRoomError): string | null {\n if (error.Kind !== 'device') {\n return null;\n }\n const lead = error.Device ? LEADS[error.Device.Media][error.Device.Change ?? 'unknown'] : NO_DEVICE_LEAD;\n const reason = reasonOf(error.Cause);\n return reason ? `${lead}: ${reason}` : `${lead}.`;\n}\n\n/** The reason an error's cause gives: an error's message, or the text the preview room passes; empty for anything else. */\nfunction reasonOf(cause: unknown): string {\n if (cause instanceof Error) {\n return cause.message.trim();\n }\n return typeof cause === 'string' ? cause.trim() : '';\n}\n"]}
@@ -3,11 +3,33 @@ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
3
3
  import { UUIDsEqual } from '@memberjunction/global';
4
4
  import { LiveKitRoomTurnState, RealtimeModelVoices, RealtimeVoiceOption } from '@memberjunction/graphql-dataprovider';
5
5
  import { type LiveKitRoomLayout } from '@memberjunction/ng-livekit-room';
6
- import type { LiveKitDataMessage, LiveKitDisconnectedEvent, LiveKitParticipantJoinedEvent, LiveKitParticipantLeftEvent, LiveKitRoomError, LiveKitRoomState } from '@memberjunction/livekit-room-core';
6
+ import { type AvatarNoticeOverrides } from '@memberjunction/ng-realtime-media';
7
+ import { type MediaPipRect, type MediaPlacementMove } from '@memberjunction/ai-realtime-client/media';
8
+ import { type LiveKitDataMessage, type LiveKitDisconnectedEvent, type LiveKitParticipantJoinedEvent, type LiveKitParticipantLeftEvent, type LiveKitRoomError, type LiveKitRoomState } from '@memberjunction/livekit-room-core';
9
+ import { type AgentAvatarNotice } from './agent-avatar-notices';
7
10
  import { type RosterTurnBadge, type TurnAddressingChoice, type TurnModeChoice } from './turn-taking-options';
11
+ import type { RoomOptions } from 'livekit-client';
8
12
  import * as i0 from "@angular/core";
9
- /** How the MJ binding obtains its room: start an agent in a room, or just join an existing room. */
10
- export type MJLiveKitConnectionMode = 'agent' | 'join';
13
+ /**
14
+ * The `MJ: User Settings` keys under which the meeting room's layout is saved, per user and for every room: where the
15
+ * user moved participants' tiles, where they put picture-in-picture boxes, and whether they hid their self-view. The
16
+ * realtime call saves its own layout under `mj.realtime.*`.
17
+ */
18
+ export declare const LIVEKIT_PLACEMENT_PREF_KEY = "mj.livekit.placement.v1";
19
+ export declare const LIVEKIT_PIP_PREF_KEY = "mj.livekit.pip.v1";
20
+ export declare const LIVEKIT_SELF_VIEW_HIDDEN_PREF_KEY = "mj.livekit.selfView.hidden.v1";
21
+ /**
22
+ * The keys the preview room saves its layout under: it remembers its layout as a meeting does, but apart, so moving the
23
+ * simulated people, hiding the self-view (or resetting the layout) there never changes what is saved for meetings.
24
+ */
25
+ export declare const LIVEKIT_PREVIEW_PLACEMENT_PREF_KEY = "mj.livekit.preview.placement.v1";
26
+ export declare const LIVEKIT_PREVIEW_PIP_PREF_KEY = "mj.livekit.preview.pip.v1";
27
+ export declare const LIVEKIT_PREVIEW_SELF_VIEW_HIDDEN_PREF_KEY = "mj.livekit.preview.selfView.hidden.v1";
28
+ /**
29
+ * How the MJ binding obtains its room: start an agent in a room (`'agent'`), join an existing room (`'join'`), or open
30
+ * the preview room (`'preview'`): your camera and microphone with simulated people, and no server.
31
+ */
32
+ export type MJLiveKitConnectionMode = 'agent' | 'join' | 'preview';
11
33
  /** Emitted when an agent room session has been started server-side. */
12
34
  export interface MJLiveKitSessionStartedEvent {
13
35
  /** The durable bridge-session row id. */
@@ -36,7 +58,10 @@ export interface AgentInRoom {
36
58
  */
37
59
  export declare class MJLiveKitRoomComponent extends BaseAngularComponent implements OnInit {
38
60
  private readonly cdr;
39
- /** Whether to start an agent in the room (`'agent'`) or just join an existing room (`'join'`). */
61
+ /**
62
+ * Whether to start an agent in the room (`'agent'`), just join an existing room (`'join'`), or open the preview room
63
+ * (`'preview'`: no token, no agent session, no recording). Read when the room is created.
64
+ */
40
65
  Mode: MJLiveKitConnectionMode;
41
66
  /** The agent to voice (agent mode) — the Realtime Co-Agent / voice front-end. */
42
67
  AgentID: string | null;
@@ -132,6 +157,11 @@ export declare class MJLiveKitRoomComponent extends BaseAngularComponent impleme
132
157
  get addVoice(): string | null;
133
158
  /** @deprecated Use {@link AddVoice}. */
134
159
  set addVoice(value: string | null);
160
+ /**
161
+ * The voice option picked in the "Add an agent" picker (one of {@link AddVoices}), or null. Kept beside
162
+ * {@link AddVoice} because two personas can share a voice id: the option, not the id, says which one shows picked.
163
+ */
164
+ AddVoiceOption: RealtimeVoiceOption | null;
135
165
  /** Exposed for template use — platform-safe UUID equality (SQL upper vs PG lower). */
136
166
  UUIDsEqual: typeof UUIDsEqual;
137
167
  /** True while an Add request is in flight. */
@@ -192,7 +222,10 @@ export declare class MJLiveKitRoomComponent extends BaseAngularComponent impleme
192
222
  OnAddModelChange(event: Event): void;
193
223
  /** @deprecated Use {@link OnAddModelChange}. */
194
224
  onAddModelChange(event: Event): void;
195
- /** Records the add-agent VOICE choice. */
225
+ /**
226
+ * Records the add-agent VOICE choice: the picked option, found by its position (two personas can share a voice id,
227
+ * so the value can't tell them apart; option 0 is "Default voice"), and its voice id.
228
+ */
196
229
  OnAddVoiceChange(event: Event): void;
197
230
  /** @deprecated Use {@link OnAddVoiceChange}. */
198
231
  onAddVoiceChange(event: Event): void;
@@ -238,12 +271,22 @@ export declare class MJLiveKitRoomComponent extends BaseAngularComponent impleme
238
271
  ShowWhiteboard: boolean;
239
272
  /** @see LiveKitRoomComponent.ShowPreJoin */
240
273
  ShowPreJoin: boolean;
274
+ /** @see LiveKitRoomComponent.EnableAgentVisionControl */
275
+ EnableAgentVisionControl: boolean;
276
+ /**
277
+ * The host's own words for why the room shows an agent without its avatar, per reason (for example its product's name
278
+ * for "this app"), shown as written; `{Agent}` stands for the agent's name. `unknown` words a reason the room doesn't
279
+ * know, such as a newer bot's. A reason it leaves out keeps the stock line, which names the agent.
280
+ */
281
+ AvatarNoticeLabels: AvatarNoticeOverrides | null;
241
282
  /** Enable the server-authorized recording control (composite egress). */
242
283
  EnableRecording: boolean;
243
284
  /** @see LiveKitRoomComponent.E2EEPassphrase */
244
285
  E2EEPassphrase: string | null;
245
286
  /** @see LiveKitRoomComponent.E2EEWorker */
246
287
  E2EEWorker: Worker | null;
288
+ /** Advanced livekit-client room options merged into the constructed Room (overrides speech defaults). */
289
+ RoomOptions?: RoomOptions;
247
290
  /** Emitted once the agent room session is started (agent mode). */
248
291
  SessionStarted: EventEmitter<MJLiveKitSessionStartedEvent>;
249
292
  /**
@@ -290,8 +333,28 @@ export declare class MJLiveKitRoomComponent extends BaseAngularComponent impleme
290
333
  get resolvedDisplayName(): string | null;
291
334
  /** @deprecated Use {@link ResolvedDisplayName}. */
292
335
  set resolvedDisplayName(value: string | null);
293
- /** The resolved room name (for recording calls). */
336
+ /** The resolved room name (for recording and agent-vision calls). */
294
337
  ResolvedRoomName: string | null;
338
+ /**
339
+ * Why the server could not record the user's last choice of what the agent sees, shown over the room until they
340
+ * dismiss it or choose again; `null` when there is nothing to say.
341
+ */
342
+ AgentVisionNotice: string | null;
343
+ /**
344
+ * What went wrong with the user's microphone, camera, speaker or share while the room was connected, such as a share
345
+ * the browser refused, shown over the room until they dismiss it, ask for another change to their devices, or leave;
346
+ * `null` when there is nothing to say. A share picker the user closed is no error, so it says nothing.
347
+ */
348
+ DeviceNotice: string | null;
349
+ /** Which agents' notices show that the meeting can't show their avatar: once per agent per join. */
350
+ private readonly avatarNotices;
351
+ /**
352
+ * The notices over the room that an agent's avatar can't be shown, oldest first: one per agent per join, for everyone
353
+ * in the room, from the agent's bot. Each hides itself after a while or when dismissed.
354
+ */
355
+ get AvatarNotices(): readonly AgentAvatarNotice[];
356
+ /** A notice's line, naming the agent, in the host's words when it gave some ({@link AvatarNoticeLabels}). */
357
+ AvatarNoticeLine(notice: AgentAvatarNotice): string;
295
358
  /** @deprecated Use {@link ResolvedRoomName}. */
296
359
  get resolvedRoomName(): string | null;
297
360
  /** @deprecated Use {@link ResolvedRoomName}. */
@@ -320,6 +383,57 @@ export declare class MJLiveKitRoomComponent extends BaseAngularComponent impleme
320
383
  get showRecordingPanel(): boolean;
321
384
  /** @deprecated Use {@link ShowRecordingPanel}. */
322
385
  set showRecordingPanel(value: boolean);
386
+ /** Where the user moved participants' tiles, as saved for them; given to the room, and saved again as they change. */
387
+ TileMoves: readonly MediaPlacementMove[];
388
+ /** Where the user put picture-in-picture boxes, by participant identity, as saved for them. */
389
+ PipRects: ReadonlyMap<string, MediaPipRect>;
390
+ /** Whether the user hid their self-view, as saved for them; given to the room, and saved again as they change it. */
391
+ SelfViewHidden: boolean;
392
+ /** The user's meeting layout, saved per user under the room's keys in the provider's settings. */
393
+ private readonly meetingLayoutPrefs;
394
+ /** The preview room's layout, saved the same way under its own keys. */
395
+ private readonly previewLayoutPrefs;
396
+ /** Where this room's layout is saved: the preview room's own keys in preview mode, the meeting room's otherwise. */
397
+ private get layoutPrefs();
398
+ /** The user moved a tile or reset the layout: keep the room's moves and save them. */
399
+ OnTileMovesChange(moves: readonly MediaPlacementMove[]): void;
400
+ /** The user moved or resized a box, or reset the layout: keep the boxes and save them. */
401
+ OnPipRectsChange(rects: ReadonlyMap<string, MediaPipRect>): void;
402
+ /**
403
+ * The user hid their self-view, showed it again, or reset the layout: keep it and save it. When saving fails, it still
404
+ * holds for this session.
405
+ */
406
+ OnSelfViewHiddenChange(hidden: boolean): void;
407
+ /**
408
+ * The user chose whether agents may see their camera and screen. The preview room records it at once. In a meeting,
409
+ * MJAPI records it, since a participant's token can't change its own attributes, and the room shows the change when
410
+ * LiveKit reports it; when MJAPI can't, a notice says why.
411
+ */
412
+ OnAgentVisionChange(on: boolean): void;
413
+ /** Asks MJAPI to record the user's choice for this room; when it can't, shows why and emits the error. */
414
+ private recordAgentVision;
415
+ /** The room's state changed: a notice shows for each agent whose bot newly says the meeting can't show its avatar. */
416
+ OnRoomStateChanged(state: LiveKitRoomState): void;
417
+ /** The room disconnected: its notices go, and joining again shows each agent's once more. */
418
+ OnRoomDisconnected(event: LiveKitDisconnectedEvent): void;
419
+ /**
420
+ * The room reported an error: the host hears it ({@link ErrorOccurred}), and a device error while the room is
421
+ * connected shows over the room ({@link DeviceNotice}), the latest in place of any earlier one. Until the room
422
+ * connects, it shows its own connection overlay, which says why a join failed.
423
+ */
424
+ OnRoomError(error: LiveKitRoomError): void;
425
+ /**
426
+ * The user asked for a change to their devices (turned the microphone, camera or share on or off, or switched a
427
+ * device): the device notice goes, since it was about an earlier request. Should this one fail too, its own shows.
428
+ */
429
+ OnDeviceChangeRequested(): void;
430
+ /** The user dismissed an agent's avatar notice: it does not show again in this join. */
431
+ OnAvatarNoticeDismissed(identity: string): void;
432
+ /**
433
+ * The settings engine for this component's provider. A host that never ran startup (lazy startup) can hand back an
434
+ * engine that has not loaded the user's settings; the loaded global one is used then.
435
+ */
436
+ private userInfoEngine;
323
437
  ngOnInit(): void;
324
438
  /**
325
439
  * Max time to wait for the connection to start before surfacing a retryable error, so a hung or very
@@ -327,7 +441,7 @@ export declare class MJLiveKitRoomComponent extends BaseAngularComponent impleme
327
441
  * `0` to disable the client-side timeout.
328
442
  */
329
443
  ConnectTimeoutMs: number;
330
- /** Resolves the connection (mints a token and, in agent mode, starts the agent session). */
444
+ /** Resolves the connection (mints a token and, in agent mode, starts the agent session). A new join, too. */
331
445
  Start(): Promise<void>;
332
446
  /**
333
447
  * Races `op` against a timeout: if it hasn't settled within `ms`, rejects with a clear, retryable
@@ -365,6 +479,11 @@ export declare class MJLiveKitRoomComponent extends BaseAngularComponent impleme
365
479
  get inviteUrl(): string;
366
480
  /** Copies {@link inviteUrl} to the clipboard and flips the pill to "Link copied" briefly. */
367
481
  CopyInvite(): Promise<void>;
482
+ /**
483
+ * Opens the preview room: nothing is minted and no agent session starts. You join as the signed-in user unless
484
+ * {@link DisplayName} names someone else.
485
+ */
486
+ private openPreview;
368
487
  /** Joins an existing room by minting a client token. */
369
488
  private joinRoom;
370
489
  /** Records the add-agent turn-mode choice. */
@@ -393,6 +512,6 @@ export declare class MJLiveKitRoomComponent extends BaseAngularComponent impleme
393
512
  /** Records a failure and emits an error event. */
394
513
  private fail;
395
514
  static ɵfac: i0.ɵɵFactoryDeclaration<MJLiveKitRoomComponent, never>;
396
- static ɵcmp: i0.ɵɵComponentDeclaration<MJLiveKitRoomComponent, "mj-livekit-agent-room", never, { "Mode": { "alias": "Mode"; "required": false; }; "AgentID": { "alias": "AgentID"; "required": false; }; "AgentName": { "alias": "AgentName"; "required": false; }; "TargetAgentID": { "alias": "TargetAgentID"; "required": false; }; "RoomName": { "alias": "RoomName"; "required": false; }; "DisplayName": { "alias": "DisplayName"; "required": false; }; "TurnMode": { "alias": "TurnMode"; "required": false; }; "TurnAddressing": { "alias": "TurnAddressing"; "required": false; }; "EnableTurnTaking": { "alias": "EnableTurnTaking"; "required": false; }; "TurnPollIntervalMs": { "alias": "TurnPollIntervalMs"; "required": false; }; "AutoStart": { "alias": "AutoStart"; "required": false; }; "EnableAgentManagement": { "alias": "EnableAgentManagement"; "required": false; }; "EnableInvite": { "alias": "EnableInvite"; "required": false; }; "EnableEndForAll": { "alias": "EnableEndForAll"; "required": false; }; "AvailableAgents": { "alias": "AvailableAgents"; "required": false; }; "RealtimeModelID": { "alias": "RealtimeModelID"; "required": false; }; "RealtimeVoice": { "alias": "RealtimeVoice"; "required": false; }; "EnableHandoff": { "alias": "EnableHandoff"; "required": false; }; "CanPickModelVoice": { "alias": "CanPickModelVoice"; "required": false; }; "AvailableModels": { "alias": "AvailableModels"; "required": false; }; "Layout": { "alias": "Layout"; "required": false; }; "Title": { "alias": "Title"; "required": false; }; "ShowHeader": { "alias": "ShowHeader"; "required": false; }; "ShowControlBar": { "alias": "ShowControlBar"; "required": false; }; "ShowChat": { "alias": "ShowChat"; "required": false; }; "ShowParticipantsPanel": { "alias": "ShowParticipantsPanel"; "required": false; }; "EnableMicrophoneControl": { "alias": "EnableMicrophoneControl"; "required": false; }; "EnableCameraControl": { "alias": "EnableCameraControl"; "required": false; }; "EnableScreenShareControl": { "alias": "EnableScreenShareControl"; "required": false; }; "EnableDeviceSettings": { "alias": "EnableDeviceSettings"; "required": false; }; "EnableLeaveControl": { "alias": "EnableLeaveControl"; "required": false; }; "StartWithMicrophone": { "alias": "StartWithMicrophone"; "required": false; }; "StartWithCamera": { "alias": "StartWithCamera"; "required": false; }; "AgentAvatarUrl": { "alias": "AgentAvatarUrl"; "required": false; }; "EnablePinning": { "alias": "EnablePinning"; "required": false; }; "EnableLayoutSwitcher": { "alias": "EnableLayoutSwitcher"; "required": false; }; "EnableNoiseFilter": { "alias": "EnableNoiseFilter"; "required": false; }; "EnableBackgroundEffects": { "alias": "EnableBackgroundEffects"; "required": false; }; "ShowAgentState": { "alias": "ShowAgentState"; "required": false; }; "ShowWhiteboard": { "alias": "ShowWhiteboard"; "required": false; }; "ShowPreJoin": { "alias": "ShowPreJoin"; "required": false; }; "EnableRecording": { "alias": "EnableRecording"; "required": false; }; "E2EEPassphrase": { "alias": "E2EEPassphrase"; "required": false; }; "E2EEWorker": { "alias": "E2EEWorker"; "required": false; }; "ConnectTimeoutMs": { "alias": "ConnectTimeoutMs"; "required": false; }; }, { "SessionStarted": "SessionStarted"; "InvitePeopleRequested": "InvitePeopleRequested"; "Connected": "Connected"; "Disconnected": "Disconnected"; "ParticipantJoined": "ParticipantJoined"; "ParticipantLeft": "ParticipantLeft"; "DataReceived": "DataReceived"; "ErrorOccurred": "ErrorOccurred"; }, never, never, true, never>;
515
+ static ɵcmp: i0.ɵɵComponentDeclaration<MJLiveKitRoomComponent, "mj-livekit-agent-room", never, { "Mode": { "alias": "Mode"; "required": false; }; "AgentID": { "alias": "AgentID"; "required": false; }; "AgentName": { "alias": "AgentName"; "required": false; }; "TargetAgentID": { "alias": "TargetAgentID"; "required": false; }; "RoomName": { "alias": "RoomName"; "required": false; }; "DisplayName": { "alias": "DisplayName"; "required": false; }; "TurnMode": { "alias": "TurnMode"; "required": false; }; "TurnAddressing": { "alias": "TurnAddressing"; "required": false; }; "EnableTurnTaking": { "alias": "EnableTurnTaking"; "required": false; }; "TurnPollIntervalMs": { "alias": "TurnPollIntervalMs"; "required": false; }; "AutoStart": { "alias": "AutoStart"; "required": false; }; "EnableAgentManagement": { "alias": "EnableAgentManagement"; "required": false; }; "EnableInvite": { "alias": "EnableInvite"; "required": false; }; "EnableEndForAll": { "alias": "EnableEndForAll"; "required": false; }; "AvailableAgents": { "alias": "AvailableAgents"; "required": false; }; "RealtimeModelID": { "alias": "RealtimeModelID"; "required": false; }; "RealtimeVoice": { "alias": "RealtimeVoice"; "required": false; }; "EnableHandoff": { "alias": "EnableHandoff"; "required": false; }; "CanPickModelVoice": { "alias": "CanPickModelVoice"; "required": false; }; "AvailableModels": { "alias": "AvailableModels"; "required": false; }; "Layout": { "alias": "Layout"; "required": false; }; "Title": { "alias": "Title"; "required": false; }; "ShowHeader": { "alias": "ShowHeader"; "required": false; }; "ShowControlBar": { "alias": "ShowControlBar"; "required": false; }; "ShowChat": { "alias": "ShowChat"; "required": false; }; "ShowParticipantsPanel": { "alias": "ShowParticipantsPanel"; "required": false; }; "EnableMicrophoneControl": { "alias": "EnableMicrophoneControl"; "required": false; }; "EnableCameraControl": { "alias": "EnableCameraControl"; "required": false; }; "EnableScreenShareControl": { "alias": "EnableScreenShareControl"; "required": false; }; "EnableDeviceSettings": { "alias": "EnableDeviceSettings"; "required": false; }; "EnableLeaveControl": { "alias": "EnableLeaveControl"; "required": false; }; "StartWithMicrophone": { "alias": "StartWithMicrophone"; "required": false; }; "StartWithCamera": { "alias": "StartWithCamera"; "required": false; }; "AgentAvatarUrl": { "alias": "AgentAvatarUrl"; "required": false; }; "EnablePinning": { "alias": "EnablePinning"; "required": false; }; "EnableLayoutSwitcher": { "alias": "EnableLayoutSwitcher"; "required": false; }; "EnableNoiseFilter": { "alias": "EnableNoiseFilter"; "required": false; }; "EnableBackgroundEffects": { "alias": "EnableBackgroundEffects"; "required": false; }; "ShowAgentState": { "alias": "ShowAgentState"; "required": false; }; "ShowWhiteboard": { "alias": "ShowWhiteboard"; "required": false; }; "ShowPreJoin": { "alias": "ShowPreJoin"; "required": false; }; "EnableAgentVisionControl": { "alias": "EnableAgentVisionControl"; "required": false; }; "AvatarNoticeLabels": { "alias": "AvatarNoticeLabels"; "required": false; }; "EnableRecording": { "alias": "EnableRecording"; "required": false; }; "E2EEPassphrase": { "alias": "E2EEPassphrase"; "required": false; }; "E2EEWorker": { "alias": "E2EEWorker"; "required": false; }; "RoomOptions": { "alias": "RoomOptions"; "required": false; }; "ConnectTimeoutMs": { "alias": "ConnectTimeoutMs"; "required": false; }; }, { "SessionStarted": "SessionStarted"; "InvitePeopleRequested": "InvitePeopleRequested"; "Connected": "Connected"; "Disconnected": "Disconnected"; "ParticipantJoined": "ParticipantJoined"; "ParticipantLeft": "ParticipantLeft"; "DataReceived": "DataReceived"; "ErrorOccurred": "ErrorOccurred"; }, never, never, true, never>;
397
516
  }
398
517
  //# sourceMappingURL=mj-livekit-room.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mj-livekit-room.component.d.ts","sourceRoot":"","sources":["../../src/lib/mj-livekit-room.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mj-livekit-room.component.d.ts","sourceRoot":"","sources":["../../src/lib/mj-livekit-room.component.ts"],"names":[],"mappings":"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"}