@memberjunction/ng-conversations 5.43.0 → 5.44.0

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.
Files changed (351) hide show
  1. package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts +0 -1
  2. package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts.map +1 -1
  3. package/dist/lib/components/active-tasks/active-tasks-panel.component.js +56 -52
  4. package/dist/lib/components/active-tasks/active-tasks-panel.component.js.map +1 -1
  5. package/dist/lib/components/artifact/artifact-share-modal.component.js +37 -41
  6. package/dist/lib/components/artifact/artifact-share-modal.component.js.map +1 -1
  7. package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -1
  8. package/dist/lib/components/collection/collection-form-modal.component.js +10 -14
  9. package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -1
  10. package/dist/lib/components/collection/collection-share-modal.component.js +41 -45
  11. package/dist/lib/components/collection/collection-share-modal.component.js.map +1 -1
  12. package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -1
  13. package/dist/lib/components/collection/collection-view.component.js +22 -36
  14. package/dist/lib/components/collection/collection-view.component.js.map +1 -1
  15. package/dist/lib/components/collection/collections-full-view.component.d.ts +4 -0
  16. package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -1
  17. package/dist/lib/components/collection/collections-full-view.component.js +134 -166
  18. package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
  19. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +73 -8
  20. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  21. package/dist/lib/components/conversation/conversation-chat-area.component.js +487 -123
  22. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  23. package/dist/lib/components/conversation/pinned-messages-panel.component.js +6 -9
  24. package/dist/lib/components/conversation/pinned-messages-panel.component.js.map +1 -1
  25. package/dist/lib/components/library/library-full-view.component.d.ts.map +1 -1
  26. package/dist/lib/components/library/library-full-view.component.js +20 -24
  27. package/dist/lib/components/library/library-full-view.component.js.map +1 -1
  28. package/dist/lib/components/members/members-modal.component.d.ts.map +1 -1
  29. package/dist/lib/components/members/members-modal.component.js +10 -11
  30. package/dist/lib/components/members/members-modal.component.js.map +1 -1
  31. package/dist/lib/components/mention/mention-dropdown.component.js +49 -28
  32. package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -1
  33. package/dist/lib/components/mention/mention-editor.component.d.ts.map +1 -1
  34. package/dist/lib/components/mention/mention-editor.component.js +24 -10
  35. package/dist/lib/components/mention/mention-editor.component.js.map +1 -1
  36. package/dist/lib/components/message/message-input-box.component.d.ts +11 -16
  37. package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
  38. package/dist/lib/components/message/message-input-box.component.js +52 -46
  39. package/dist/lib/components/message/message-input-box.component.js.map +1 -1
  40. package/dist/lib/components/message/message-input.component.d.ts +83 -18
  41. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  42. package/dist/lib/components/message/message-input.component.js +238 -151
  43. package/dist/lib/components/message/message-input.component.js.map +1 -1
  44. package/dist/lib/components/message/message-item.component.d.ts +10 -1
  45. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  46. package/dist/lib/components/message/message-item.component.js +67 -15
  47. package/dist/lib/components/message/message-item.component.js.map +1 -1
  48. package/dist/lib/components/message/message-list.component.js +6 -9
  49. package/dist/lib/components/message/message-list.component.js.map +1 -1
  50. package/dist/lib/components/overlay/chat-overlay.component.d.ts +3 -0
  51. package/dist/lib/components/overlay/chat-overlay.component.d.ts.map +1 -1
  52. package/dist/lib/components/overlay/chat-overlay.component.js +9 -4
  53. package/dist/lib/components/overlay/chat-overlay.component.js.map +1 -1
  54. package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts +45 -0
  55. package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts.map +1 -1
  56. package/dist/lib/components/realtime/channels/base-realtime-channel-client.js +10 -0
  57. package/dist/lib/components/realtime/channels/base-realtime-channel-client.js.map +1 -1
  58. package/dist/lib/components/realtime/channels/client-context-channel.d.ts +46 -0
  59. package/dist/lib/components/realtime/channels/client-context-channel.d.ts.map +1 -0
  60. package/dist/lib/components/realtime/channels/client-context-channel.js +174 -0
  61. package/dist/lib/components/realtime/channels/client-context-channel.js.map +1 -0
  62. package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.d.ts +123 -0
  63. package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.d.ts.map +1 -0
  64. package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.js +397 -0
  65. package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.js.map +1 -0
  66. package/dist/lib/components/realtime/media/media-channel-state.d.ts +103 -0
  67. package/dist/lib/components/realtime/media/media-channel-state.d.ts.map +1 -0
  68. package/dist/lib/components/realtime/media/media-channel-state.js +143 -0
  69. package/dist/lib/components/realtime/media/media-channel-state.js.map +1 -0
  70. package/dist/lib/components/realtime/media/media-channel-tools.d.ts +24 -0
  71. package/dist/lib/components/realtime/media/media-channel-tools.d.ts.map +1 -0
  72. package/dist/lib/components/realtime/media/media-channel-tools.js +107 -0
  73. package/dist/lib/components/realtime/media/media-channel-tools.js.map +1 -0
  74. package/dist/lib/components/realtime/media/media-channel.d.ts +89 -0
  75. package/dist/lib/components/realtime/media/media-channel.d.ts.map +1 -0
  76. package/dist/lib/components/realtime/media/media-channel.js +253 -0
  77. package/dist/lib/components/realtime/media/media-channel.js.map +1 -0
  78. package/dist/lib/components/realtime/media/realtime-media-surface.component.d.ts +141 -0
  79. package/dist/lib/components/realtime/media/realtime-media-surface.component.d.ts.map +1 -0
  80. package/dist/lib/components/realtime/media/realtime-media-surface.component.js +574 -0
  81. package/dist/lib/components/realtime/media/realtime-media-surface.component.js.map +1 -0
  82. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts +59 -14
  83. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts.map +1 -1
  84. package/dist/lib/components/realtime/realtime-activity-rail.component.js +277 -74
  85. package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -1
  86. package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts +28 -27
  87. package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts.map +1 -1
  88. package/dist/lib/components/realtime/realtime-agent-banner.component.js +144 -143
  89. package/dist/lib/components/realtime/realtime-agent-banner.component.js.map +1 -1
  90. package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts +12 -0
  91. package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts.map +1 -1
  92. package/dist/lib/components/realtime/realtime-agent-picker.component.js +105 -43
  93. package/dist/lib/components/realtime/realtime-agent-picker.component.js.map +1 -1
  94. package/dist/lib/components/realtime/realtime-audio-visuals.d.ts +2 -2
  95. package/dist/lib/components/realtime/realtime-audio-visuals.d.ts.map +1 -1
  96. package/dist/lib/components/realtime/realtime-audio-visuals.js.map +1 -1
  97. package/dist/lib/components/realtime/realtime-composer.component.d.ts +41 -7
  98. package/dist/lib/components/realtime/realtime-composer.component.d.ts.map +1 -1
  99. package/dist/lib/components/realtime/realtime-composer.component.js +216 -102
  100. package/dist/lib/components/realtime/realtime-composer.component.js.map +1 -1
  101. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +0 -2
  102. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts.map +1 -1
  103. package/dist/lib/components/realtime/realtime-delegation-card.component.js +67 -71
  104. package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -1
  105. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +364 -44
  106. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts.map +1 -1
  107. package/dist/lib/components/realtime/realtime-session-overlay.component.js +839 -153
  108. package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -1
  109. package/dist/lib/components/realtime/realtime-session-state.d.ts +5 -5
  110. package/dist/lib/components/realtime/realtime-session-state.d.ts.map +1 -1
  111. package/dist/lib/components/realtime/realtime-session-state.js.map +1 -1
  112. package/dist/lib/components/realtime/realtime-surface-tab-style.d.ts +70 -0
  113. package/dist/lib/components/realtime/realtime-surface-tab-style.d.ts.map +1 -0
  114. package/dist/lib/components/realtime/realtime-surface-tab-style.js +115 -0
  115. package/dist/lib/components/realtime/realtime-surface-tab-style.js.map +1 -0
  116. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +55 -57
  117. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts.map +1 -1
  118. package/dist/lib/components/realtime/realtime-surface-tabs.component.js +165 -143
  119. package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -1
  120. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +80 -71
  121. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts.map +1 -1
  122. package/dist/lib/components/realtime/realtime-surface-tabs.model.js +83 -113
  123. package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -1
  124. package/dist/lib/components/realtime/realtime-ui-config.d.ts +270 -0
  125. package/dist/lib/components/realtime/realtime-ui-config.d.ts.map +1 -0
  126. package/dist/lib/components/realtime/realtime-ui-config.js +212 -0
  127. package/dist/lib/components/realtime/realtime-ui-config.js.map +1 -0
  128. package/dist/lib/components/search/search-panel.component.d.ts +2 -0
  129. package/dist/lib/components/search/search-panel.component.d.ts.map +1 -1
  130. package/dist/lib/components/search/search-panel.component.js +92 -101
  131. package/dist/lib/components/search/search-panel.component.js.map +1 -1
  132. package/dist/lib/components/share/share-modal.component.d.ts.map +1 -1
  133. package/dist/lib/components/share/share-modal.component.js +10 -11
  134. package/dist/lib/components/share/share-modal.component.js.map +1 -1
  135. package/dist/lib/components/shared/user-picker.component.d.ts.map +1 -1
  136. package/dist/lib/components/shared/user-picker.component.js +12 -15
  137. package/dist/lib/components/shared/user-picker.component.js.map +1 -1
  138. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +5 -0
  139. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  140. package/dist/lib/components/workspace/conversation-workspace.component.js +18 -7
  141. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  142. package/dist/lib/conversations.module.d.ts +29 -26
  143. package/dist/lib/conversations.module.d.ts.map +1 -1
  144. package/dist/lib/conversations.module.js +37 -6
  145. package/dist/lib/conversations.module.js.map +1 -1
  146. package/dist/lib/models/conversation-state.model.d.ts +6 -3
  147. package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
  148. package/dist/lib/models/conversation-state.model.js.map +1 -1
  149. package/dist/lib/services/conversation-agent.service.d.ts +2 -2
  150. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  151. package/dist/lib/services/conversation-agent.service.js +6 -2
  152. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  153. package/dist/lib/services/mention-autocomplete.service.d.ts +17 -1
  154. package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
  155. package/dist/lib/services/mention-autocomplete.service.js +58 -2
  156. package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
  157. package/dist/lib/services/realtime-audio-recorder.d.ts +143 -0
  158. package/dist/lib/services/realtime-audio-recorder.d.ts.map +1 -0
  159. package/dist/lib/services/realtime-audio-recorder.js +379 -0
  160. package/dist/lib/services/realtime-audio-recorder.js.map +1 -0
  161. package/dist/lib/services/realtime-pcm-wav.d.ts +75 -0
  162. package/dist/lib/services/realtime-pcm-wav.d.ts.map +1 -0
  163. package/dist/lib/services/realtime-pcm-wav.js +205 -0
  164. package/dist/lib/services/realtime-pcm-wav.js.map +1 -0
  165. package/dist/lib/services/realtime-session-review.service.d.ts +28 -1
  166. package/dist/lib/services/realtime-session-review.service.d.ts.map +1 -1
  167. package/dist/lib/services/realtime-session-review.service.js +12 -3
  168. package/dist/lib/services/realtime-session-review.service.js.map +1 -1
  169. package/dist/lib/services/realtime-session.service.d.ts +210 -20
  170. package/dist/lib/services/realtime-session.service.d.ts.map +1 -1
  171. package/dist/lib/services/realtime-session.service.js +452 -21
  172. package/dist/lib/services/realtime-session.service.js.map +1 -1
  173. package/dist/lib/services/realtime-sessions-adapter.js +1 -1
  174. package/dist/lib/services/realtime-sessions-adapter.js.map +1 -1
  175. package/dist/lib/services/ui-command-handler.service.d.ts +7 -2
  176. package/dist/lib/services/ui-command-handler.service.d.ts.map +1 -1
  177. package/dist/lib/services/ui-command-handler.service.js +6 -2
  178. package/dist/lib/services/ui-command-handler.service.js.map +1 -1
  179. package/dist/lib/utils/plan-mode-preference.d.ts +62 -0
  180. package/dist/lib/utils/plan-mode-preference.d.ts.map +1 -0
  181. package/dist/lib/utils/plan-mode-preference.js +130 -0
  182. package/dist/lib/utils/plan-mode-preference.js.map +1 -0
  183. package/dist/public-api.d.ts +6 -0
  184. package/dist/public-api.d.ts.map +1 -1
  185. package/dist/public-api.js +8 -0
  186. package/dist/public-api.js.map +1 -1
  187. package/package.json +28 -26
  188. package/dist/__tests__/attachment-badge.test.d.ts +0 -2
  189. package/dist/__tests__/attachment-badge.test.d.ts.map +0 -1
  190. package/dist/__tests__/attachment-badge.test.js +0 -66
  191. package/dist/__tests__/attachment-badge.test.js.map +0 -1
  192. package/dist/__tests__/channel-optional-surface.test.d.ts +0 -2
  193. package/dist/__tests__/channel-optional-surface.test.d.ts.map +0 -1
  194. package/dist/__tests__/channel-optional-surface.test.js +0 -53
  195. package/dist/__tests__/channel-optional-surface.test.js.map +0 -1
  196. package/dist/__tests__/chat-events.test.d.ts +0 -14
  197. package/dist/__tests__/chat-events.test.d.ts.map +0 -1
  198. package/dist/__tests__/chat-events.test.js +0 -109
  199. package/dist/__tests__/chat-events.test.js.map +0 -1
  200. package/dist/__tests__/collections-full-view.test.d.ts +0 -2
  201. package/dist/__tests__/collections-full-view.test.d.ts.map +0 -1
  202. package/dist/__tests__/collections-full-view.test.js +0 -225
  203. package/dist/__tests__/collections-full-view.test.js.map +0 -1
  204. package/dist/__tests__/conversation-cache.test.d.ts +0 -2
  205. package/dist/__tests__/conversation-cache.test.d.ts.map +0 -1
  206. package/dist/__tests__/conversation-cache.test.js +0 -233
  207. package/dist/__tests__/conversation-cache.test.js.map +0 -1
  208. package/dist/__tests__/conversation-naming.test.d.ts +0 -2
  209. package/dist/__tests__/conversation-naming.test.d.ts.map +0 -1
  210. package/dist/__tests__/conversation-naming.test.js +0 -110
  211. package/dist/__tests__/conversation-naming.test.js.map +0 -1
  212. package/dist/__tests__/delegation-result-parser.test.d.ts +0 -2
  213. package/dist/__tests__/delegation-result-parser.test.d.ts.map +0 -1
  214. package/dist/__tests__/delegation-result-parser.test.js +0 -107
  215. package/dist/__tests__/delegation-result-parser.test.js.map +0 -1
  216. package/dist/__tests__/distinct-artifacts.test.d.ts +0 -2
  217. package/dist/__tests__/distinct-artifacts.test.d.ts.map +0 -1
  218. package/dist/__tests__/distinct-artifacts.test.js +0 -56
  219. package/dist/__tests__/distinct-artifacts.test.js.map +0 -1
  220. package/dist/__tests__/event-wiring.test.d.ts +0 -15
  221. package/dist/__tests__/event-wiring.test.d.ts.map +0 -1
  222. package/dist/__tests__/event-wiring.test.js +0 -100
  223. package/dist/__tests__/event-wiring.test.js.map +0 -1
  224. package/dist/__tests__/index.test.d.ts +0 -2
  225. package/dist/__tests__/index.test.d.ts.map +0 -1
  226. package/dist/__tests__/index.test.js +0 -7
  227. package/dist/__tests__/index.test.js.map +0 -1
  228. package/dist/__tests__/narration-template.test.d.ts +0 -2
  229. package/dist/__tests__/narration-template.test.d.ts.map +0 -1
  230. package/dist/__tests__/narration-template.test.js +0 -76
  231. package/dist/__tests__/narration-template.test.js.map +0 -1
  232. package/dist/__tests__/notification-model.test.d.ts +0 -2
  233. package/dist/__tests__/notification-model.test.d.ts.map +0 -1
  234. package/dist/__tests__/notification-model.test.js +0 -68
  235. package/dist/__tests__/notification-model.test.js.map +0 -1
  236. package/dist/__tests__/realtime-agent-picker-models.test.d.ts +0 -2
  237. package/dist/__tests__/realtime-agent-picker-models.test.d.ts.map +0 -1
  238. package/dist/__tests__/realtime-agent-picker-models.test.js +0 -49
  239. package/dist/__tests__/realtime-agent-picker-models.test.js.map +0 -1
  240. package/dist/__tests__/realtime-audio-visuals.test.d.ts +0 -2
  241. package/dist/__tests__/realtime-audio-visuals.test.d.ts.map +0 -1
  242. package/dist/__tests__/realtime-audio-visuals.test.js +0 -123
  243. package/dist/__tests__/realtime-audio-visuals.test.js.map +0 -1
  244. package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts +0 -2
  245. package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts.map +0 -1
  246. package/dist/__tests__/realtime-delegation-card-cancel.test.js +0 -48
  247. package/dist/__tests__/realtime-delegation-card-cancel.test.js.map +0 -1
  248. package/dist/__tests__/realtime-disclosure.test.d.ts +0 -2
  249. package/dist/__tests__/realtime-disclosure.test.d.ts.map +0 -1
  250. package/dist/__tests__/realtime-disclosure.test.js +0 -164
  251. package/dist/__tests__/realtime-disclosure.test.js.map +0 -1
  252. package/dist/__tests__/realtime-pairing.test.d.ts +0 -2
  253. package/dist/__tests__/realtime-pairing.test.d.ts.map +0 -1
  254. package/dist/__tests__/realtime-pairing.test.js +0 -207
  255. package/dist/__tests__/realtime-pairing.test.js.map +0 -1
  256. package/dist/__tests__/realtime-review-lifecycle.test.d.ts +0 -2
  257. package/dist/__tests__/realtime-review-lifecycle.test.d.ts.map +0 -1
  258. package/dist/__tests__/realtime-review-lifecycle.test.js +0 -154
  259. package/dist/__tests__/realtime-review-lifecycle.test.js.map +0 -1
  260. package/dist/__tests__/realtime-session-cancel-usage.test.d.ts +0 -2
  261. package/dist/__tests__/realtime-session-cancel-usage.test.d.ts.map +0 -1
  262. package/dist/__tests__/realtime-session-cancel-usage.test.js +0 -230
  263. package/dist/__tests__/realtime-session-cancel-usage.test.js.map +0 -1
  264. package/dist/__tests__/realtime-session-channels.test.d.ts +0 -2
  265. package/dist/__tests__/realtime-session-channels.test.d.ts.map +0 -1
  266. package/dist/__tests__/realtime-session-channels.test.js +0 -252
  267. package/dist/__tests__/realtime-session-channels.test.js.map +0 -1
  268. package/dist/__tests__/realtime-session-client-tools.test.d.ts +0 -2
  269. package/dist/__tests__/realtime-session-client-tools.test.d.ts.map +0 -1
  270. package/dist/__tests__/realtime-session-client-tools.test.js +0 -103
  271. package/dist/__tests__/realtime-session-client-tools.test.js.map +0 -1
  272. package/dist/__tests__/realtime-session-minimized.test.d.ts +0 -2
  273. package/dist/__tests__/realtime-session-minimized.test.d.ts.map +0 -1
  274. package/dist/__tests__/realtime-session-minimized.test.js +0 -32
  275. package/dist/__tests__/realtime-session-minimized.test.js.map +0 -1
  276. package/dist/__tests__/realtime-session-mint.test.d.ts +0 -2
  277. package/dist/__tests__/realtime-session-mint.test.d.ts.map +0 -1
  278. package/dist/__tests__/realtime-session-mint.test.js +0 -69
  279. package/dist/__tests__/realtime-session-mint.test.js.map +0 -1
  280. package/dist/__tests__/realtime-session-policy.test.d.ts +0 -2
  281. package/dist/__tests__/realtime-session-policy.test.d.ts.map +0 -1
  282. package/dist/__tests__/realtime-session-policy.test.js +0 -303
  283. package/dist/__tests__/realtime-session-policy.test.js.map +0 -1
  284. package/dist/__tests__/realtime-session-review.service.test.d.ts +0 -2
  285. package/dist/__tests__/realtime-session-review.service.test.d.ts.map +0 -1
  286. package/dist/__tests__/realtime-session-review.service.test.js +0 -743
  287. package/dist/__tests__/realtime-session-review.service.test.js.map +0 -1
  288. package/dist/__tests__/realtime-session-state.test.d.ts +0 -2
  289. package/dist/__tests__/realtime-session-state.test.d.ts.map +0 -1
  290. package/dist/__tests__/realtime-session-state.test.js +0 -83
  291. package/dist/__tests__/realtime-session-state.test.js.map +0 -1
  292. package/dist/__tests__/realtime-session-timeline-card.test.d.ts +0 -2
  293. package/dist/__tests__/realtime-session-timeline-card.test.d.ts.map +0 -1
  294. package/dist/__tests__/realtime-session-timeline-card.test.js +0 -106
  295. package/dist/__tests__/realtime-session-timeline-card.test.js.map +0 -1
  296. package/dist/__tests__/realtime-session-timeline.test.d.ts +0 -2
  297. package/dist/__tests__/realtime-session-timeline.test.d.ts.map +0 -1
  298. package/dist/__tests__/realtime-session-timeline.test.js +0 -142
  299. package/dist/__tests__/realtime-session-timeline.test.js.map +0 -1
  300. package/dist/__tests__/realtime-sessions-adapter.test.d.ts +0 -19
  301. package/dist/__tests__/realtime-sessions-adapter.test.d.ts.map +0 -1
  302. package/dist/__tests__/realtime-sessions-adapter.test.js +0 -188
  303. package/dist/__tests__/realtime-sessions-adapter.test.js.map +0 -1
  304. package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts +0 -2
  305. package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts.map +0 -1
  306. package/dist/__tests__/realtime-surface-panel-prefs.test.js +0 -100
  307. package/dist/__tests__/realtime-surface-panel-prefs.test.js.map +0 -1
  308. package/dist/__tests__/realtime-surface-tabs-model.test.d.ts +0 -2
  309. package/dist/__tests__/realtime-surface-tabs-model.test.d.ts.map +0 -1
  310. package/dist/__tests__/realtime-surface-tabs-model.test.js +0 -193
  311. package/dist/__tests__/realtime-surface-tabs-model.test.js.map +0 -1
  312. package/dist/__tests__/remote-browser-audio-player.test.d.ts +0 -2
  313. package/dist/__tests__/remote-browser-audio-player.test.d.ts.map +0 -1
  314. package/dist/__tests__/remote-browser-audio-player.test.js +0 -137
  315. package/dist/__tests__/remote-browser-audio-player.test.js.map +0 -1
  316. package/dist/__tests__/remote-browser-channel.test.d.ts +0 -2
  317. package/dist/__tests__/remote-browser-channel.test.d.ts.map +0 -1
  318. package/dist/__tests__/remote-browser-channel.test.js +0 -585
  319. package/dist/__tests__/remote-browser-channel.test.js.map +0 -1
  320. package/dist/__tests__/search-service.test.d.ts +0 -2
  321. package/dist/__tests__/search-service.test.d.ts.map +0 -1
  322. package/dist/__tests__/search-service.test.js +0 -114
  323. package/dist/__tests__/search-service.test.js.map +0 -1
  324. package/dist/__tests__/slot-defaults.test.d.ts +0 -24
  325. package/dist/__tests__/slot-defaults.test.d.ts.map +0 -1
  326. package/dist/__tests__/slot-defaults.test.js +0 -63
  327. package/dist/__tests__/slot-defaults.test.js.map +0 -1
  328. package/dist/__tests__/toast-service.test.d.ts +0 -2
  329. package/dist/__tests__/toast-service.test.d.ts.map +0 -1
  330. package/dist/__tests__/toast-service.test.js +0 -143
  331. package/dist/__tests__/toast-service.test.js.map +0 -1
  332. package/dist/__tests__/user-authorization.test.d.ts +0 -2
  333. package/dist/__tests__/user-authorization.test.d.ts.map +0 -1
  334. package/dist/__tests__/user-authorization.test.js +0 -97
  335. package/dist/__tests__/user-authorization.test.js.map +0 -1
  336. package/dist/__tests__/voice-session-narration.test.d.ts +0 -2
  337. package/dist/__tests__/voice-session-narration.test.d.ts.map +0 -1
  338. package/dist/__tests__/voice-session-narration.test.js +0 -609
  339. package/dist/__tests__/voice-session-narration.test.js.map +0 -1
  340. package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts +0 -2
  341. package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts.map +0 -1
  342. package/dist/__tests__/whiteboard-artifact-viewer.test.js +0 -101
  343. package/dist/__tests__/whiteboard-artifact-viewer.test.js.map +0 -1
  344. package/dist/__tests__/whiteboard-channel.test.d.ts +0 -2
  345. package/dist/__tests__/whiteboard-channel.test.d.ts.map +0 -1
  346. package/dist/__tests__/whiteboard-channel.test.js +0 -260
  347. package/dist/__tests__/whiteboard-channel.test.js.map +0 -1
  348. package/dist/__tests__/whiteboard-restore-state.test.d.ts +0 -2
  349. package/dist/__tests__/whiteboard-restore-state.test.d.ts.map +0 -1
  350. package/dist/__tests__/whiteboard-restore-state.test.js +0 -108
  351. package/dist/__tests__/whiteboard-restore-state.test.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { Component, EventEmitter, Input, Output, ViewChild, inject } from '@angular/core';
1
+ import { Component, EventEmitter, HostListener, Input, Output, ViewChild, inject } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { FormsModule } from '@angular/forms';
4
4
  import { RealtimeSessionService } from '../../services/realtime-session.service';
@@ -6,135 +6,188 @@ import * as i0 from "@angular/core";
6
6
  import * as i1 from "@angular/common";
7
7
  import * as i2 from "@angular/forms";
8
8
  const _c0 = ["dockInput"];
9
- function RealtimeComposerComponent_Conditional_0_Conditional_11_Template(rf, ctx) { if (rf & 1) {
10
- const _r3 = i0.ɵɵgetCurrentView();
11
- i0.ɵɵelementStart(0, "div", 3)(1, "button", 4);
12
- i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_0_Conditional_11_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.DetailsToggled.emit()); });
13
- i0.ɵɵelement(2, "i", 14);
9
+ function RealtimeComposerComponent_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
10
+ const _r2 = i0.ɵɵgetCurrentView();
11
+ i0.ɵɵelementStart(0, "button", 17);
12
+ i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_0_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(2); ctx_r2.DetailsToggled.emit(); return i0.ɵɵresetView(ctx_r2.MoreOpen = false); });
13
+ i0.ɵɵelement(1, "i", 18);
14
+ i0.ɵɵelementStart(2, "small");
15
+ i0.ɵɵtext(3, "Details");
16
+ i0.ɵɵelementEnd()();
17
+ } if (rf & 2) {
18
+ const ctx_r2 = i0.ɵɵnextContext(2);
19
+ i0.ɵɵclassProp("lean-sheet__btn--on", ctx_r2.DetailsOn);
20
+ i0.ɵɵproperty("title", ctx_r2.DetailsOn ? "Hide the session panels" : "Peek at the session panels");
21
+ i0.ɵɵattribute("aria-pressed", ctx_r2.DetailsOn);
22
+ } }
23
+ function RealtimeComposerComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
24
+ const _r1 = i0.ɵɵgetCurrentView();
25
+ i0.ɵɵelementStart(0, "div", 1)(1, "div", 4)(2, "div", 5);
26
+ i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_0_Template_div_click_2_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
27
+ i0.ɵɵconditionalCreate(3, RealtimeComposerComponent_Conditional_0_Conditional_3_Template, 4, 4, "button", 6);
28
+ i0.ɵɵelementStart(4, "button", 7);
29
+ i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_0_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); ctx_r2.OpenChanged.emit(true); return i0.ɵɵresetView(ctx_r2.MoreOpen = false); });
30
+ i0.ɵɵelement(5, "i", 8);
31
+ i0.ɵɵelementStart(6, "small");
32
+ i0.ɵɵtext(7, "Type");
33
+ i0.ɵɵelementEnd()()();
34
+ i0.ɵɵelementStart(8, "button", 9);
35
+ i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_0_Template_button_click_8_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ToggleMore($event)); });
36
+ i0.ɵɵelement(9, "i", 10);
37
+ i0.ɵɵelementEnd()();
38
+ i0.ɵɵelementStart(10, "button", 11);
39
+ i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_0_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ToggleCaptions()); });
40
+ i0.ɵɵelement(11, "i", 12);
41
+ i0.ɵɵelementEnd();
42
+ i0.ɵɵelementStart(12, "button", 13);
43
+ i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_0_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ToggleMute()); });
44
+ i0.ɵɵelement(13, "i", 14);
45
+ i0.ɵɵelementEnd();
46
+ i0.ɵɵelementStart(14, "button", 15);
47
+ i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_0_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.EndRequested.emit()); });
48
+ i0.ɵɵelement(15, "i", 16);
49
+ i0.ɵɵelementEnd()();
50
+ } if (rf & 2) {
51
+ const ctx_r2 = i0.ɵɵnextContext();
52
+ i0.ɵɵadvance();
53
+ i0.ɵɵclassProp("lean-more--open", ctx_r2.MoreOpen);
54
+ i0.ɵɵadvance(2);
55
+ i0.ɵɵconditional(ctx_r2.ShowDetails ? 3 : -1);
56
+ i0.ɵɵadvance(5);
57
+ i0.ɵɵclassProp("lean-ctrl--on", ctx_r2.MoreOpen);
58
+ i0.ɵɵattribute("aria-expanded", ctx_r2.MoreOpen);
59
+ i0.ɵɵadvance(2);
60
+ i0.ɵɵclassProp("lean-ctrl--on", ctx_r2.CaptionsOn);
61
+ i0.ɵɵproperty("title", ctx_r2.CaptionsOn ? "Voice-first \u2014 back to the orb" : "Show the conversation as text");
62
+ i0.ɵɵattribute("aria-pressed", ctx_r2.CaptionsOn);
63
+ i0.ɵɵadvance(2);
64
+ i0.ɵɵclassProp("lean-ctrl--muted", ctx_r2.IsMuted);
65
+ i0.ɵɵproperty("title", ctx_r2.IsMuted ? "Unmute microphone" : "Mute microphone");
66
+ i0.ɵɵattribute("aria-pressed", ctx_r2.IsMuted);
67
+ i0.ɵɵadvance();
68
+ i0.ɵɵproperty("ngClass", ctx_r2.IsMuted ? "fa-microphone-slash" : "fa-microphone");
69
+ } }
70
+ function RealtimeComposerComponent_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
71
+ const _r5 = i0.ɵɵgetCurrentView();
72
+ i0.ɵɵelementStart(0, "div", 19)(1, "button", 20);
73
+ i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_1_Conditional_11_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.DetailsToggled.emit()); });
74
+ i0.ɵɵelement(2, "i", 18);
14
75
  i0.ɵɵelementEnd();
15
- i0.ɵɵelementStart(3, "span", 6);
76
+ i0.ɵɵelementStart(3, "span", 21);
16
77
  i0.ɵɵtext(4, "Details");
17
78
  i0.ɵɵelementEnd()();
18
79
  } if (rf & 2) {
19
- const ctx_r1 = i0.ɵɵnextContext(2);
80
+ const ctx_r2 = i0.ɵɵnextContext(2);
20
81
  i0.ɵɵadvance();
21
- i0.ɵɵclassProp("ctrl--on", ctx_r1.DetailsOn);
22
- i0.ɵɵproperty("title", ctx_r1.DetailsOn ? "Hide the session panels" : "Peek at the session panels");
23
- i0.ɵɵattribute("aria-pressed", ctx_r1.DetailsOn);
82
+ i0.ɵɵclassProp("ctrl--on", ctx_r2.DetailsOn);
83
+ i0.ɵɵproperty("title", ctx_r2.DetailsOn ? "Hide the session panels" : "Peek at the session panels");
84
+ i0.ɵɵattribute("aria-pressed", ctx_r2.DetailsOn);
24
85
  } }
25
- function RealtimeComposerComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
26
- const _r1 = i0.ɵɵgetCurrentView();
27
- i0.ɵɵelementStart(0, "div", 1)(1, "div", 3)(2, "button", 4);
28
- i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_0_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleMute()); });
29
- i0.ɵɵelement(3, "i", 5);
86
+ function RealtimeComposerComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
87
+ const _r4 = i0.ɵɵgetCurrentView();
88
+ i0.ɵɵelementStart(0, "div", 2)(1, "div", 19)(2, "button", 20);
89
+ i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_1_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ToggleMute()); });
90
+ i0.ɵɵelement(3, "i", 14);
30
91
  i0.ɵɵelementEnd();
31
- i0.ɵɵelementStart(4, "span", 6);
92
+ i0.ɵɵelementStart(4, "span", 21);
32
93
  i0.ɵɵtext(5);
33
94
  i0.ɵɵelementEnd()();
34
- i0.ɵɵelementStart(6, "div", 3)(7, "button", 4);
35
- i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_0_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleCaptions()); });
36
- i0.ɵɵelement(8, "i", 7);
95
+ i0.ɵɵelementStart(6, "div", 19)(7, "button", 20);
96
+ i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_1_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ToggleCaptions()); });
97
+ i0.ɵɵelement(8, "i", 12);
37
98
  i0.ɵɵelementEnd();
38
- i0.ɵɵelementStart(9, "span", 6);
99
+ i0.ɵɵelementStart(9, "span", 21);
39
100
  i0.ɵɵtext(10, "Captions");
40
101
  i0.ɵɵelementEnd()();
41
- i0.ɵɵconditionalCreate(11, RealtimeComposerComponent_Conditional_0_Conditional_11_Template, 5, 4, "div", 3);
42
- i0.ɵɵelementStart(12, "div", 3)(13, "button", 8);
43
- i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_0_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OpenChanged.emit(true)); });
44
- i0.ɵɵelement(14, "i", 9);
102
+ i0.ɵɵconditionalCreate(11, RealtimeComposerComponent_Conditional_1_Conditional_11_Template, 5, 4, "div", 19);
103
+ i0.ɵɵelementStart(12, "div", 19)(13, "button", 22);
104
+ i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_1_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OpenChanged.emit(true)); });
105
+ i0.ɵɵelement(14, "i", 8);
45
106
  i0.ɵɵelementEnd();
46
- i0.ɵɵelementStart(15, "span", 6);
107
+ i0.ɵɵelementStart(15, "span", 21);
47
108
  i0.ɵɵtext(16, "Type");
48
109
  i0.ɵɵelementEnd()();
49
- i0.ɵɵelementStart(17, "div", 3)(18, "button", 10);
50
- i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_0_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.EndRequested.emit()); });
51
- i0.ɵɵelement(19, "i", 11);
110
+ i0.ɵɵelementStart(17, "div", 19)(18, "button", 23);
111
+ i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_1_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.EndRequested.emit()); });
112
+ i0.ɵɵelement(19, "i", 16);
52
113
  i0.ɵɵelementEnd();
53
- i0.ɵɵelementStart(20, "span", 12);
114
+ i0.ɵɵelementStart(20, "span", 24);
54
115
  i0.ɵɵtext(21, "End call");
55
- i0.ɵɵelementEnd()();
56
- i0.ɵɵelementStart(22, "span", 13);
57
- i0.ɵɵelement(23, "i", 9);
58
- i0.ɵɵtext(24, " press ");
59
- i0.ɵɵelementStart(25, "kbd");
60
- i0.ɵɵtext(26, "T");
61
- i0.ɵɵelementEnd();
62
- i0.ɵɵtext(27, " to type");
63
- i0.ɵɵelementEnd()();
116
+ i0.ɵɵelementEnd()()();
64
117
  } if (rf & 2) {
65
- const ctx_r1 = i0.ɵɵnextContext();
118
+ const ctx_r2 = i0.ɵɵnextContext();
66
119
  i0.ɵɵadvance(2);
67
- i0.ɵɵclassProp("ctrl--muted", ctx_r1.IsMuted);
68
- i0.ɵɵproperty("title", ctx_r1.IsMuted ? "Unmute microphone" : "Mute microphone");
69
- i0.ɵɵattribute("aria-pressed", ctx_r1.IsMuted);
120
+ i0.ɵɵclassProp("ctrl--muted", ctx_r2.IsMuted);
121
+ i0.ɵɵproperty("title", ctx_r2.IsMuted ? "Unmute microphone" : "Mute microphone");
122
+ i0.ɵɵattribute("aria-pressed", ctx_r2.IsMuted);
70
123
  i0.ɵɵadvance();
71
- i0.ɵɵproperty("ngClass", ctx_r1.IsMuted ? "fa-microphone-slash" : "fa-microphone");
124
+ i0.ɵɵproperty("ngClass", ctx_r2.IsMuted ? "fa-microphone-slash" : "fa-microphone");
72
125
  i0.ɵɵadvance(2);
73
- i0.ɵɵtextInterpolate(ctx_r1.IsMuted ? "Unmute" : "Mute");
126
+ i0.ɵɵtextInterpolate(ctx_r2.IsMuted ? "Unmute" : "Mute");
74
127
  i0.ɵɵadvance(2);
75
- i0.ɵɵclassProp("ctrl--on", ctx_r1.CaptionsOn);
76
- i0.ɵɵproperty("title", ctx_r1.CaptionsOn ? "Voice-first \u2014 back to the orb" : "Show the conversation as text");
77
- i0.ɵɵattribute("aria-pressed", ctx_r1.CaptionsOn);
128
+ i0.ɵɵclassProp("ctrl--on", ctx_r2.CaptionsOn);
129
+ i0.ɵɵproperty("title", ctx_r2.CaptionsOn ? "Voice-first \u2014 back to the orb" : "Show the conversation as text");
130
+ i0.ɵɵattribute("aria-pressed", ctx_r2.CaptionsOn);
78
131
  i0.ɵɵadvance(4);
79
- i0.ɵɵconditional(ctx_r1.ShowDetails ? 11 : -1);
132
+ i0.ɵɵconditional(ctx_r2.ShowDetails ? 11 : -1);
80
133
  } }
81
- function RealtimeComposerComponent_Conditional_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
82
- const _r5 = i0.ɵɵgetCurrentView();
83
- i0.ɵɵelementStart(0, "button", 16);
84
- i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_1_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.DetailsToggled.emit()); });
85
- i0.ɵɵelement(1, "i", 14);
134
+ function RealtimeComposerComponent_Conditional_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
135
+ const _r7 = i0.ɵɵgetCurrentView();
136
+ i0.ɵɵelementStart(0, "button", 26);
137
+ i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_2_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.DetailsToggled.emit()); });
138
+ i0.ɵɵelement(1, "i", 18);
86
139
  i0.ɵɵelementEnd();
87
140
  } if (rf & 2) {
88
- const ctx_r1 = i0.ɵɵnextContext(2);
89
- i0.ɵɵclassProp("mini--on", ctx_r1.DetailsOn);
90
- i0.ɵɵproperty("title", ctx_r1.DetailsOn ? "Hide the session panels" : "Show the session panels");
91
- i0.ɵɵattribute("aria-pressed", ctx_r1.DetailsOn);
141
+ const ctx_r2 = i0.ɵɵnextContext(2);
142
+ i0.ɵɵclassProp("mini--on", ctx_r2.DetailsOn);
143
+ i0.ɵɵproperty("title", ctx_r2.DetailsOn ? "Hide the session panels" : "Show the session panels");
144
+ i0.ɵɵattribute("aria-pressed", ctx_r2.DetailsOn);
92
145
  } }
93
- function RealtimeComposerComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
94
- const _r4 = i0.ɵɵgetCurrentView();
95
- i0.ɵɵelementStart(0, "div", 2)(1, "div", 15)(2, "button", 16);
96
- i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_1_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleMute()); });
97
- i0.ɵɵelement(3, "i", 5);
146
+ function RealtimeComposerComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
147
+ const _r6 = i0.ɵɵgetCurrentView();
148
+ i0.ɵɵelementStart(0, "div", 3)(1, "div", 25)(2, "button", 26);
149
+ i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_2_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ToggleMute()); });
150
+ i0.ɵɵelement(3, "i", 14);
98
151
  i0.ɵɵelementEnd();
99
- i0.ɵɵelementStart(4, "button", 16);
100
- i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_1_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleCaptions()); });
101
- i0.ɵɵelement(5, "i", 7);
152
+ i0.ɵɵelementStart(4, "button", 26);
153
+ i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_2_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ToggleCaptions()); });
154
+ i0.ɵɵelement(5, "i", 12);
102
155
  i0.ɵɵelementEnd();
103
- i0.ɵɵconditionalCreate(6, RealtimeComposerComponent_Conditional_1_Conditional_6_Template, 2, 4, "button", 17);
156
+ i0.ɵɵconditionalCreate(6, RealtimeComposerComponent_Conditional_2_Conditional_6_Template, 2, 4, "button", 27);
104
157
  i0.ɵɵelementEnd();
105
- i0.ɵɵelementStart(7, "div", 18)(8, "input", 19, 0);
106
- i0.ɵɵtwoWayListener("ngModelChange", function RealtimeComposerComponent_Conditional_1_Template_input_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.Draft, $event) || (ctx_r1.Draft = $event); return i0.ɵɵresetView($event); });
107
- i0.ɵɵlistener("keydown", function RealtimeComposerComponent_Conditional_1_Template_input_keydown_8_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnKeydown($event)); });
158
+ i0.ɵɵelementStart(7, "div", 28)(8, "input", 29, 0);
159
+ i0.ɵɵtwoWayListener("ngModelChange", function RealtimeComposerComponent_Conditional_2_Template_input_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.Draft, $event) || (ctx_r2.Draft = $event); return i0.ɵɵresetView($event); });
160
+ i0.ɵɵlistener("keydown", function RealtimeComposerComponent_Conditional_2_Template_input_keydown_8_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnKeydown($event)); });
108
161
  i0.ɵɵelementEnd();
109
- i0.ɵɵelementStart(10, "span", 20);
162
+ i0.ɵɵelementStart(10, "span", 30);
110
163
  i0.ɵɵtext(11, "\u21B5 send");
111
164
  i0.ɵɵelementEnd();
112
- i0.ɵɵelementStart(12, "button", 21);
113
- i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_1_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Send()); });
114
- i0.ɵɵelement(13, "i", 22);
165
+ i0.ɵɵelementStart(12, "button", 31);
166
+ i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_2_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.Send()); });
167
+ i0.ɵɵelement(13, "i", 32);
115
168
  i0.ɵɵelementEnd()();
116
- i0.ɵɵelementStart(14, "button", 23);
117
- i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_1_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OpenChanged.emit(false)); });
118
- i0.ɵɵelement(15, "i", 24);
169
+ i0.ɵɵelementStart(14, "button", 33);
170
+ i0.ɵɵlistener("click", function RealtimeComposerComponent_Conditional_2_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OpenChanged.emit(false)); });
171
+ i0.ɵɵelement(15, "i", 34);
119
172
  i0.ɵɵelementEnd()();
120
173
  } if (rf & 2) {
121
- const ctx_r1 = i0.ɵɵnextContext();
174
+ const ctx_r2 = i0.ɵɵnextContext();
122
175
  i0.ɵɵadvance(2);
123
- i0.ɵɵclassProp("mini--muted", ctx_r1.IsMuted);
124
- i0.ɵɵproperty("title", ctx_r1.IsMuted ? "Unmute microphone" : "Mute microphone");
125
- i0.ɵɵattribute("aria-pressed", ctx_r1.IsMuted);
176
+ i0.ɵɵclassProp("mini--muted", ctx_r2.IsMuted);
177
+ i0.ɵɵproperty("title", ctx_r2.IsMuted ? "Unmute microphone" : "Mute microphone");
178
+ i0.ɵɵattribute("aria-pressed", ctx_r2.IsMuted);
126
179
  i0.ɵɵadvance();
127
- i0.ɵɵproperty("ngClass", ctx_r1.IsMuted ? "fa-microphone-slash" : "fa-microphone");
180
+ i0.ɵɵproperty("ngClass", ctx_r2.IsMuted ? "fa-microphone-slash" : "fa-microphone");
128
181
  i0.ɵɵadvance();
129
- i0.ɵɵclassProp("mini--on", ctx_r1.CaptionsOn);
130
- i0.ɵɵproperty("title", ctx_r1.CaptionsOn ? "Voice-first \u2014 back to the orb" : "Show the conversation as text");
131
- i0.ɵɵattribute("aria-pressed", ctx_r1.CaptionsOn);
182
+ i0.ɵɵclassProp("mini--on", ctx_r2.CaptionsOn);
183
+ i0.ɵɵproperty("title", ctx_r2.CaptionsOn ? "Voice-first \u2014 back to the orb" : "Show the conversation as text");
184
+ i0.ɵɵattribute("aria-pressed", ctx_r2.CaptionsOn);
132
185
  i0.ɵɵadvance(2);
133
- i0.ɵɵconditional(ctx_r1.ShowDetails ? 6 : -1);
186
+ i0.ɵɵconditional(ctx_r2.ShowDetails ? 6 : -1);
134
187
  i0.ɵɵadvance(2);
135
- i0.ɵɵtwoWayProperty("ngModel", ctx_r1.Draft);
188
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r2.Draft);
136
189
  i0.ɵɵadvance(4);
137
- i0.ɵɵproperty("disabled", !ctx_r1.CanSend);
190
+ i0.ɵɵproperty("disabled", !ctx_r2.CanSend);
138
191
  } }
139
192
  /**
140
193
  * The call overlay's BOTTOM DOCK — the progressive-disclosure composer
@@ -144,8 +197,9 @@ function RealtimeComposerComponent_Conditional_1_Template(rf, ctx) { if (rf & 1)
144
197
  * - **Levels 0–1 (phone-call strip)** — big round call controls, centered: Mute, the
145
198
  * Captions toggle (level 1+, arriving WITH the text it controls), the Details peek
146
199
  * (level 0 paths where the surface panel isn't earned yet — lets the user look at the
147
- * Activity/Whiteboard panels on demand), and End call. Level 1 adds the whispered
148
- * "press T to type" hint typing exists, but there's no visible composer yet.
200
+ * Activity/Whiteboard panels on demand), the Type control, and End call. There's no visible
201
+ * composer yet the Type control opens it, and so does simply starting to type (the overlay
202
+ * captures the first printable keystroke and seeds it via {@link AppendAndFocus}).
149
203
  * - **Level 2+ (the dock)** — mute/captions shrink to compact minis and the in-call text
150
204
  * input docks beside them (one bottom bar, per Redesign A's fused composer+controls).
151
205
  * Submit calls {@link RealtimeSessionService.SendText}, which injects the text as a user
@@ -161,6 +215,14 @@ export class RealtimeComposerComponent {
161
215
  * never becomes permanent chrome. Default closed (voice-first), reset per session.
162
216
  */
163
217
  Open = false;
218
+ /**
219
+ * COMPACT (Calm Orb · overlay) presentation: collapse the phone-call strip to the
220
+ * mockup's lean dock — **Mute + End + a "•••"** overflow button. The "•••" blooms a small
221
+ * sheet hosting the secondary actions (Captions / Details / Type). The fused level-2 dock
222
+ * (minis + text input) is unchanged. Fed from the overlay's resolved `Ui.compact`.
223
+ * Default `false` (the full 5-button strip is unchanged).
224
+ */
225
+ Compact = false;
164
226
  /** Emitted when the user opens (Type control / typing) or closes (hide control) the dock. */
165
227
  OpenChanged = new EventEmitter();
166
228
  /** Whether captions are currently shown (drives the captions control's active state). */
@@ -175,12 +237,18 @@ export class RealtimeComposerComponent {
175
237
  DetailsToggled = new EventEmitter();
176
238
  /** Emitted when the user ends the call from the strip's End control. */
177
239
  EndRequested = new EventEmitter();
240
+ /** Emitted with the new muted state whenever the user toggles the mic from the dock. */
241
+ MuteChanged = new EventEmitter();
178
242
  /** Current draft text in the dock's composer input. */
179
243
  Draft = '';
180
- /** Local mic mute state, reflected from the service. */
244
+ /**
245
+ * The mic mute state. A two-way reflection: the overlay may push it down (e.g. its
246
+ * `SetMuted()` / focus-pill toggle) so all mute affordances stay in sync, and this
247
+ * component updates it locally + emits {@link MuteChanged} when its own button is used.
248
+ */
181
249
  IsMuted = false;
182
250
  dockInput;
183
- voice = inject(RealtimeSessionService);
251
+ realtime = inject(RealtimeSessionService);
184
252
  /** True when there's non-whitespace text to send. */
185
253
  get CanSend() {
186
254
  return this.Draft.trim().length > 0;
@@ -189,25 +257,60 @@ export class RealtimeComposerComponent {
189
257
  get StripMode() {
190
258
  return !this.Open;
191
259
  }
192
- /** Toggle the local microphone mute. */
260
+ /**
261
+ * Whether the compact "•••" overflow sheet (Captions / Details / Type) is open. Only used
262
+ * in {@link Compact} strip mode; any outside click or action selection closes it.
263
+ */
264
+ MoreOpen = false;
265
+ /** Open/close the compact overflow sheet (stops propagation so the outside-click close skips it). */
266
+ ToggleMore(event) {
267
+ event.stopPropagation();
268
+ this.MoreOpen = !this.MoreOpen;
269
+ }
270
+ /** Any outside click closes the compact overflow sheet. */
271
+ OnDocumentClick() {
272
+ if (this.MoreOpen) {
273
+ this.MoreOpen = false;
274
+ }
275
+ }
276
+ /** Toggle the local microphone mute and surface the new state to the overlay. */
193
277
  ToggleMute() {
194
- this.IsMuted = this.voice.ToggleMute();
278
+ this.IsMuted = this.realtime.ToggleMute();
279
+ this.MuteChanged.emit(this.IsMuted);
195
280
  }
196
281
  /** Toggle captions visibility and notify the overlay. */
197
282
  ToggleCaptions() {
198
283
  this.CaptionsOn = !this.CaptionsOn;
199
284
  this.CaptionsToggled.emit(this.CaptionsOn);
200
285
  }
201
- /** Focuses the dock's text input (the overlay's T-to-type hotkey lands here). */
286
+ /** Focuses the dock's text input (the overlay's Type control lands here). */
202
287
  FocusInput() {
203
288
  this.dockInput?.nativeElement.focus();
204
289
  }
290
+ /**
291
+ * TYPE-TO-COMPOSE: the overlay captured a printable keystroke while nothing was focused, so seed
292
+ * the draft with that character, focus the input, and put the caret at the end — the user just
293
+ * keeps typing and their first key isn't lost. Appends (rather than replaces) so a leftover draft
294
+ * is preserved. The native value is synced inline so the caret math is correct before Angular's
295
+ * next change-detection pass reconciles ngModel.
296
+ *
297
+ * @param text the character(s) to seed (typically the single key that opened the composer).
298
+ */
299
+ AppendAndFocus(text) {
300
+ this.Draft = (this.Draft ?? '') + text;
301
+ const el = this.dockInput?.nativeElement;
302
+ if (el) {
303
+ el.value = this.Draft;
304
+ el.focus();
305
+ el.setSelectionRange(this.Draft.length, this.Draft.length);
306
+ }
307
+ }
205
308
  /** Send the typed text into the live session, then clear the input. */
206
309
  Send() {
207
310
  if (!this.CanSend) {
208
311
  return;
209
312
  }
210
- this.voice.SendText(this.Draft);
313
+ this.realtime.SendText(this.Draft);
211
314
  this.Draft = '';
212
315
  }
213
316
  /** Enter sends (Shift+Enter is free for future multiline if the input becomes a textarea). */
@@ -223,17 +326,21 @@ export class RealtimeComposerComponent {
223
326
  } if (rf & 2) {
224
327
  let _t;
225
328
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dockInput = _t.first);
226
- } }, inputs: { Open: "Open", CaptionsOn: "CaptionsOn", ShowDetails: "ShowDetails", DetailsOn: "DetailsOn" }, outputs: { OpenChanged: "OpenChanged", CaptionsToggled: "CaptionsToggled", DetailsToggled: "DetailsToggled", EndRequested: "EndRequested" }, decls: 2, vars: 1, consts: [["dockInput", ""], ["role", "group", "aria-label", "Call controls", 1, "strip"], [1, "dock"], [1, "ctrl-group"], ["type", "button", 1, "ctrl", 3, "click", "title"], ["aria-hidden", "true", 1, "fa-solid", 3, "ngClass"], [1, "ctrl-label"], ["aria-hidden", "true", 1, "fa-solid", "fa-closed-captioning"], ["type", "button", "title", "Type into the live session", "aria-label", "Open the typed-input composer", 1, "ctrl", 3, "click"], ["aria-hidden", "true", 1, "fa-regular", "fa-keyboard"], ["type", "button", "title", "End call", "aria-label", "End call", 1, "ctrl", "ctrl--end", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-phone-slash"], [1, "ctrl-label", "ctrl-label--end"], [1, "thint"], ["aria-hidden", "true", 1, "fa-solid", "fa-table-columns"], [1, "dock__minis"], ["type", "button", 1, "mini", 3, "click", "title"], ["type", "button", 1, "mini", 3, "mini--on", "title"], [1, "dock__box"], ["type", "text", "placeholder", "Type into the live session \u2014 joins this same voice call\u2026", "aria-label", "Type a message into the live voice session", 1, "dock__input", 3, "ngModelChange", "keydown", "ngModel"], ["aria-hidden", "true", 1, "dock__hint"], ["type", "button", "title", "Send into live session", "aria-label", "Send", 1, "dock__send", 3, "click", "disabled"], ["aria-hidden", "true", 1, "fa-solid", "fa-paper-plane"], ["type", "button", "title", "Hide typing \u2014 back to the voice controls", "aria-label", "Close the typed-input composer", 1, "mini", "dock__hide", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-down"]], template: function RealtimeComposerComponent_Template(rf, ctx) { if (rf & 1) {
227
- i0.ɵɵconditionalCreate(0, RealtimeComposerComponent_Conditional_0_Template, 28, 11, "div", 1)(1, RealtimeComposerComponent_Conditional_1_Template, 16, 12, "div", 2);
329
+ } }, hostBindings: function RealtimeComposerComponent_HostBindings(rf, ctx) { if (rf & 1) {
330
+ i0.ɵɵlistener("click", function RealtimeComposerComponent_click_HostBindingHandler() { return ctx.OnDocumentClick(); }, i0.ɵɵresolveDocument);
331
+ } }, inputs: { Open: "Open", Compact: "Compact", CaptionsOn: "CaptionsOn", ShowDetails: "ShowDetails", DetailsOn: "DetailsOn", IsMuted: "IsMuted" }, outputs: { OpenChanged: "OpenChanged", CaptionsToggled: "CaptionsToggled", DetailsToggled: "DetailsToggled", EndRequested: "EndRequested", MuteChanged: "MuteChanged" }, decls: 3, vars: 1, consts: [["dockInput", ""], ["role", "group", "aria-label", "Call controls", 1, "dock-lean"], ["role", "group", "aria-label", "Call controls", 1, "strip"], [1, "dock"], [1, "lean-more"], ["role", "menu", "aria-label", "More call controls", 1, "lean-sheet", 3, "click"], ["type", "button", 1, "lean-sheet__btn", 3, "lean-sheet__btn--on", "title"], ["type", "button", "title", "Type into the live session", "aria-label", "Open the typed-input composer", 1, "lean-sheet__btn", 3, "click"], ["aria-hidden", "true", 1, "fa-regular", "fa-keyboard"], ["type", "button", "title", "More controls", "aria-label", "More call controls", 1, "lean-ctrl", "lean-ctrl--more", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-ellipsis"], ["type", "button", 1, "lean-ctrl", "lean-ctrl--more", 3, "click", "title"], ["aria-hidden", "true", 1, "fa-solid", "fa-closed-captioning"], ["type", "button", 1, "lean-ctrl", "lean-ctrl--lg", 3, "click", "title"], ["aria-hidden", "true", 1, "fa-solid", 3, "ngClass"], ["type", "button", "title", "End call", "aria-label", "End call", 1, "lean-ctrl", "lean-ctrl--lg", "lean-ctrl--end", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-phone-slash"], ["type", "button", 1, "lean-sheet__btn", 3, "click", "title"], ["aria-hidden", "true", 1, "fa-solid", "fa-table-columns"], [1, "ctrl-group"], ["type", "button", 1, "ctrl", 3, "click", "title"], [1, "ctrl-label"], ["type", "button", "title", "Type into the live session", "aria-label", "Open the typed-input composer", 1, "ctrl", 3, "click"], ["type", "button", "title", "End call", "aria-label", "End call", 1, "ctrl", "ctrl--end", 3, "click"], [1, "ctrl-label", "ctrl-label--end"], [1, "dock__minis"], ["type", "button", 1, "mini", 3, "click", "title"], ["type", "button", 1, "mini", 3, "mini--on", "title"], [1, "dock__box"], ["type", "text", "placeholder", "Type into the live session \u2014 joins this same voice call\u2026", "aria-label", "Type a message into the live voice session", 1, "dock__input", 3, "ngModelChange", "keydown", "ngModel"], ["aria-hidden", "true", 1, "dock__hint"], ["type", "button", "title", "Send into live session", "aria-label", "Send", 1, "dock__send", 3, "click", "disabled"], ["aria-hidden", "true", 1, "fa-solid", "fa-paper-plane"], ["type", "button", "title", "Hide typing \u2014 back to the voice controls", "aria-label", "Close the typed-input composer", 1, "mini", "dock__hide", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-down"]], template: function RealtimeComposerComponent_Template(rf, ctx) { if (rf & 1) {
332
+ i0.ɵɵconditionalCreate(0, RealtimeComposerComponent_Conditional_0_Template, 16, 15, "div", 1)(1, RealtimeComposerComponent_Conditional_1_Template, 22, 11, "div", 2)(2, RealtimeComposerComponent_Conditional_2_Template, 16, 12, "div", 3);
228
333
  } if (rf & 2) {
229
- i0.ɵɵconditional(ctx.StripMode ? 0 : 1);
230
- } }, dependencies: [CommonModule, i1.NgClass, FormsModule, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel], styles: ["[_nghost-%COMP%] {\n display: block;\n}\n\n\n\n.strip[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n gap: 22px;\n padding: 16px 22px 20px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.ctrl-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.ctrl[_ngcontent-%COMP%] {\n width: 52px;\n height: 52px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n cursor: pointer;\n font-size: 18px;\n transition: all 150ms ease;\n}\n.ctrl[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n.ctrl--on[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse, #fff);\n}\n.ctrl--muted[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg);\n border-color: var(--mj-status-warning);\n color: var(--mj-status-warning);\n}\n.ctrl--end[_ngcontent-%COMP%] {\n width: 60px;\n height: 60px;\n background: var(--mj-status-error);\n border-color: var(--mj-status-error);\n color: var(--mj-text-inverse, #fff);\n font-size: 20px;\n box-shadow: 0 6px 20px color-mix(in srgb, var(--mj-status-error) 40%, transparent);\n}\n.ctrl--end[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n filter: brightness(0.92);\n}\n\n.ctrl-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n text-align: center;\n margin-top: 6px;\n font-weight: 500;\n}\n.ctrl-label--end[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n\n\n.thint[_ngcontent-%COMP%] {\n position: absolute;\n right: 22px;\n bottom: 20px;\n display: inline-flex;\n align-items: center;\n gap: 7px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n}\n.thint[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\nkbd[_ngcontent-%COMP%] {\n font-family: var(--mj-font-mono, ui-monospace, monospace);\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-muted);\n border: 1px solid var(--mj-border-strong);\n border-bottom-width: 2px;\n border-radius: 4px;\n padding: 0 5px;\n background: var(--mj-bg-surface-sunken);\n}\n\n\n\n.dock[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 18px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n animation: _ngcontent-%COMP%_dock-in 320ms cubic-bezier(0.2, 0.8, 0.3, 1);\n}\n@keyframes _ngcontent-%COMP%_dock-in {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.dock__minis[_ngcontent-%COMP%] {\n display: flex;\n gap: 7px;\n flex-shrink: 0;\n}\n.mini[_ngcontent-%COMP%] {\n width: 38px;\n height: 38px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n cursor: pointer;\n font-size: 13.5px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n transition: all 140ms ease;\n}\n.mini[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n.mini--on[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 16%, transparent);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-accent, var(--mj-brand-primary));\n}\n.mini--muted[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg);\n border-color: var(--mj-status-warning);\n color: var(--mj-status-warning);\n}\n\n.dock__box[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 9px;\n padding: 5px 6px 5px 14px;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-full, 9999px);\n background: var(--mj-bg-surface-card);\n transition: border-color 140ms ease, box-shadow 140ms ease;\n}\n.dock__box[_ngcontent-%COMP%]:focus-within {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.dock__input[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n background: transparent;\n border: 0;\n outline: none;\n color: var(--mj-text-primary);\n font-family: inherit;\n font-size: 13.5px;\n}\n.dock__input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n}\n\n.dock__hint[_ngcontent-%COMP%] {\n font-size: 10.5px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.dock__send[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse, #fff);\n border: 0;\n display: grid;\n place-items: center;\n cursor: pointer;\n font-size: 12px;\n flex-shrink: 0;\n transition: background 150ms ease;\n}\n.dock__send[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover, var(--mj-brand-primary));\n}\n.dock__send[_ngcontent-%COMP%]:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n\n\n.dock__hide[_ngcontent-%COMP%] {\n border-style: dashed;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n.dock__hide[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n}"] });
334
+ i0.ɵɵconditional(ctx.StripMode && ctx.Compact ? 0 : ctx.StripMode ? 1 : 2);
335
+ } }, dependencies: [CommonModule, i1.NgClass, FormsModule, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel], styles: ["[_nghost-%COMP%] {\n display: block;\n}\n\n\n\n.strip[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n gap: 22px;\n padding: 20px 22px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.ctrl-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.ctrl[_ngcontent-%COMP%] {\n width: 52px;\n height: 52px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n cursor: pointer;\n font-size: 18px;\n transition: all 150ms ease;\n}\n.ctrl[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n.ctrl--on[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse, #fff);\n}\n.ctrl--muted[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg);\n border-color: var(--mj-status-warning);\n color: var(--mj-status-warning);\n}\n.ctrl--end[_ngcontent-%COMP%] {\n width: 60px;\n height: 60px;\n background: var(--mj-status-error);\n border-color: var(--mj-status-error);\n color: var(--mj-text-inverse, #fff);\n font-size: 20px;\n box-shadow: 0 6px 20px color-mix(in srgb, var(--mj-status-error) 40%, transparent);\n}\n.ctrl--end[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n filter: brightness(0.92);\n}\n\n.ctrl-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n text-align: center;\n margin-top: 6px;\n font-weight: 500;\n}\n.ctrl-label--end[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n\n\n.dock[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 18px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n animation: _ngcontent-%COMP%_dock-in 320ms cubic-bezier(0.2, 0.8, 0.3, 1);\n}\n@keyframes _ngcontent-%COMP%_dock-in {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.dock__minis[_ngcontent-%COMP%] {\n display: flex;\n gap: 7px;\n flex-shrink: 0;\n}\n.mini[_ngcontent-%COMP%] {\n width: 38px;\n height: 38px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n cursor: pointer;\n font-size: 13.5px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n transition: all 140ms ease;\n}\n.mini[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n.mini--on[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 16%, transparent);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-accent, var(--mj-brand-primary));\n}\n.mini--muted[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg);\n border-color: var(--mj-status-warning);\n color: var(--mj-status-warning);\n}\n\n.dock__box[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 9px;\n padding: 5px 6px 5px 14px;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-full, 9999px);\n background: var(--mj-bg-surface-card);\n transition: border-color 140ms ease, box-shadow 140ms ease;\n}\n.dock__box[_ngcontent-%COMP%]:focus-within {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.dock__input[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n background: transparent;\n border: 0;\n outline: none;\n color: var(--mj-text-primary);\n font-family: inherit;\n font-size: 13.5px;\n}\n.dock__input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n}\n\n.dock__hint[_ngcontent-%COMP%] {\n font-size: 10.5px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.dock__send[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse, #fff);\n border: 0;\n display: grid;\n place-items: center;\n cursor: pointer;\n font-size: 12px;\n flex-shrink: 0;\n transition: background 150ms ease;\n}\n.dock__send[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover, var(--mj-brand-primary));\n}\n.dock__send[_ngcontent-%COMP%]:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n\n\n.dock__hide[_ngcontent-%COMP%] {\n border-style: dashed;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n.dock__hide[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n}\n\n\n\n\n\n.dock-lean[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 14px;\n padding: 16px 18px 20px;\n background: linear-gradient(180deg, transparent, color-mix(in srgb, var(--mj-bg-page) 35%, transparent));\n}\n\n.lean-ctrl[_ngcontent-%COMP%] {\n display: grid;\n place-items: center;\n border-radius: 50%;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 150ms ease;\n}\n.lean-ctrl[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n transform: translateY(-1px);\n}\n.lean-ctrl--lg[_ngcontent-%COMP%] {\n width: 58px;\n height: 58px;\n font-size: 19px;\n}\n.lean-ctrl--more[_ngcontent-%COMP%] {\n width: 46px;\n height: 46px;\n font-size: 16px;\n}\n.lean-ctrl--on[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse, #fff);\n}\n.lean-ctrl--muted[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg);\n border-color: var(--mj-status-warning);\n color: var(--mj-status-warning);\n}\n.lean-ctrl--end[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n border-color: var(--mj-status-error);\n color: var(--mj-text-inverse, #fff);\n font-size: 20px;\n box-shadow: 0 8px 24px color-mix(in srgb, var(--mj-status-error) 40%, transparent);\n}\n.lean-ctrl--end[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n filter: brightness(0.94);\n}\n\n\n\n.lean-more[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n}\n.lean-sheet[_ngcontent-%COMP%] {\n position: absolute;\n bottom: calc(100% + 12px);\n left: 50%;\n transform: translateX(-50%) translateY(8px);\n display: flex;\n gap: 10px;\n padding: 10px;\n border-radius: var(--mj-radius-lg, 16px);\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 18px 50px -22px rgba(0, 0, 0, 0.6);\n opacity: 0;\n pointer-events: none;\n transition: opacity 200ms ease, transform 200ms ease;\n z-index: 5;\n}\n.lean-more--open[_ngcontent-%COMP%] .lean-sheet[_ngcontent-%COMP%] {\n opacity: 1;\n pointer-events: auto;\n transform: translateX(-50%) translateY(0);\n}\n.lean-sheet__btn[_ngcontent-%COMP%] {\n display: grid;\n place-items: center;\n gap: 3px;\n width: 56px;\n padding: 8px 4px;\n border-radius: var(--mj-radius-md, 10px);\n border: 1px solid transparent;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 16px;\n transition: all 140ms ease;\n}\n.lean-sheet__btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.lean-sheet__btn--on[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 16%, transparent);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-accent, var(--mj-brand-primary));\n}\n.lean-sheet__btn[_ngcontent-%COMP%] small[_ngcontent-%COMP%] {\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-muted);\n}\n.lean-sheet__btn--on[_ngcontent-%COMP%] small[_ngcontent-%COMP%] {\n color: var(--mj-brand-accent, var(--mj-brand-primary));\n}"] });
231
336
  }
232
337
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RealtimeComposerComponent, [{
233
338
  type: Component,
234
- args: [{ standalone: true, selector: 'mj-realtime-composer', imports: [CommonModule, FormsModule], template: "@if (StripMode) {\n <!-- Levels 0\u20131: phone-call strip \u2014 big round controls, nothing to configure.\n Captions arrives at level 1 WITH the text it controls; Details peeks at the\n surface panels on demand; End stays the deliberate rightmost action. -->\n <div class=\"strip\" role=\"group\" aria-label=\"Call controls\">\n <div class=\"ctrl-group\">\n <button type=\"button\" class=\"ctrl\" [class.ctrl--muted]=\"IsMuted\"\n (click)=\"ToggleMute()\"\n [title]=\"IsMuted ? 'Unmute microphone' : 'Mute microphone'\"\n [attr.aria-pressed]=\"IsMuted\">\n <i class=\"fa-solid\" [ngClass]=\"IsMuted ? 'fa-microphone-slash' : 'fa-microphone'\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"ctrl-label\">{{ IsMuted ? 'Unmute' : 'Mute' }}</span>\n </div>\n\n <div class=\"ctrl-group\">\n <button type=\"button\" class=\"ctrl\" [class.ctrl--on]=\"CaptionsOn\"\n (click)=\"ToggleCaptions()\"\n [title]=\"CaptionsOn ? 'Voice-first \u2014 back to the orb' : 'Show the conversation as text'\"\n [attr.aria-pressed]=\"CaptionsOn\">\n <i class=\"fa-solid fa-closed-captioning\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"ctrl-label\">Captions</span>\n </div>\n\n @if (ShowDetails) {\n <div class=\"ctrl-group\">\n <button type=\"button\" class=\"ctrl\" [class.ctrl--on]=\"DetailsOn\"\n (click)=\"DetailsToggled.emit()\"\n [title]=\"DetailsOn ? 'Hide the session panels' : 'Peek at the session panels'\"\n [attr.aria-pressed]=\"DetailsOn\">\n <i class=\"fa-solid fa-table-columns\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"ctrl-label\">Details</span>\n </div>\n }\n\n <div class=\"ctrl-group\">\n <button type=\"button\" class=\"ctrl\" (click)=\"OpenChanged.emit(true)\"\n title=\"Type into the live session\" aria-label=\"Open the typed-input composer\">\n <i class=\"fa-regular fa-keyboard\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"ctrl-label\">Type</span>\n </div>\n\n <div class=\"ctrl-group\">\n <button type=\"button\" class=\"ctrl ctrl--end\" (click)=\"EndRequested.emit()\"\n title=\"End call\" aria-label=\"End call\">\n <i class=\"fa-solid fa-phone-slash\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"ctrl-label ctrl-label--end\">End call</span>\n </div>\n\n <span class=\"thint\"><i class=\"fa-regular fa-keyboard\" aria-hidden=\"true\"></i> press <kbd>T</kbd> to type</span>\n </div>\n} @else {\n <!-- Level 2+: the fused dock \u2014 compact minis + the in-call composer in ONE bottom bar. -->\n <div class=\"dock\">\n <div class=\"dock__minis\">\n <button type=\"button\" class=\"mini\" [class.mini--muted]=\"IsMuted\"\n (click)=\"ToggleMute()\"\n [title]=\"IsMuted ? 'Unmute microphone' : 'Mute microphone'\"\n [attr.aria-pressed]=\"IsMuted\">\n <i class=\"fa-solid\" [ngClass]=\"IsMuted ? 'fa-microphone-slash' : 'fa-microphone'\" aria-hidden=\"true\"></i>\n </button>\n <button type=\"button\" class=\"mini\" [class.mini--on]=\"CaptionsOn\"\n (click)=\"ToggleCaptions()\"\n [title]=\"CaptionsOn ? 'Voice-first \u2014 back to the orb' : 'Show the conversation as text'\"\n [attr.aria-pressed]=\"CaptionsOn\">\n <i class=\"fa-solid fa-closed-captioning\" aria-hidden=\"true\"></i>\n </button>\n @if (ShowDetails) {\n <button type=\"button\" class=\"mini\" [class.mini--on]=\"DetailsOn\"\n (click)=\"DetailsToggled.emit()\"\n [title]=\"DetailsOn ? 'Hide the session panels' : 'Show the session panels'\"\n [attr.aria-pressed]=\"DetailsOn\">\n <i class=\"fa-solid fa-table-columns\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n <div class=\"dock__box\">\n <input\n #dockInput\n type=\"text\"\n class=\"dock__input\"\n placeholder=\"Type into the live session \u2014 joins this same voice call\u2026\"\n [(ngModel)]=\"Draft\"\n (keydown)=\"OnKeydown($event)\"\n aria-label=\"Type a message into the live voice session\" />\n <span class=\"dock__hint\" aria-hidden=\"true\">\u21B5 send</span>\n <button\n class=\"dock__send\"\n type=\"button\"\n [disabled]=\"!CanSend\"\n (click)=\"Send()\"\n title=\"Send into live session\"\n aria-label=\"Send\">\n <i class=\"fa-solid fa-paper-plane\" aria-hidden=\"true\"></i>\n </button>\n </div>\n <button type=\"button\" class=\"mini dock__hide\" (click)=\"OpenChanged.emit(false)\"\n title=\"Hide typing \u2014 back to the voice controls\"\n aria-label=\"Close the typed-input composer\">\n <i class=\"fa-solid fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n}\n", styles: [":host {\n display: block;\n}\n\n/* ---------- Levels 0\u20131: phone-call strip (big round controls, centered) ---------- */\n.strip {\n position: relative;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n gap: 22px;\n padding: 16px 22px 20px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.ctrl-group {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.ctrl {\n width: 52px;\n height: 52px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n cursor: pointer;\n font-size: 18px;\n transition: all 150ms ease;\n}\n.ctrl:hover {\n background: var(--mj-bg-surface-hover);\n}\n.ctrl--on {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse, #fff);\n}\n.ctrl--muted {\n background: var(--mj-status-warning-bg);\n border-color: var(--mj-status-warning);\n color: var(--mj-status-warning);\n}\n.ctrl--end {\n width: 60px;\n height: 60px;\n background: var(--mj-status-error);\n border-color: var(--mj-status-error);\n color: var(--mj-text-inverse, #fff);\n font-size: 20px;\n box-shadow: 0 6px 20px color-mix(in srgb, var(--mj-status-error) 40%, transparent);\n}\n.ctrl--end:hover {\n background: var(--mj-status-error);\n filter: brightness(0.92);\n}\n\n.ctrl-label {\n font-size: 11px;\n color: var(--mj-text-muted);\n text-align: center;\n margin-top: 6px;\n font-weight: 500;\n}\n.ctrl-label--end {\n color: var(--mj-status-error);\n}\n\n/* The whispered type-to-text hint (level 1: typing exists, no visible composer yet). */\n.thint {\n position: absolute;\n right: 22px;\n bottom: 20px;\n display: inline-flex;\n align-items: center;\n gap: 7px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n}\n.thint i {\n font-size: 12px;\n}\nkbd {\n font-family: var(--mj-font-mono, ui-monospace, monospace);\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-muted);\n border: 1px solid var(--mj-border-strong);\n border-bottom-width: 2px;\n border-radius: 4px;\n padding: 0 5px;\n background: var(--mj-bg-surface-sunken);\n}\n\n/* ---------- Level 2+: the fused dock (minis + composer in one bar) ---------- */\n.dock {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 18px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n animation: dock-in 320ms cubic-bezier(0.2, 0.8, 0.3, 1);\n}\n@keyframes dock-in {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.dock__minis {\n display: flex;\n gap: 7px;\n flex-shrink: 0;\n}\n.mini {\n width: 38px;\n height: 38px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n cursor: pointer;\n font-size: 13.5px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n transition: all 140ms ease;\n}\n.mini:hover {\n background: var(--mj-bg-surface-hover);\n}\n.mini--on {\n background: color-mix(in srgb, var(--mj-brand-primary) 16%, transparent);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-accent, var(--mj-brand-primary));\n}\n.mini--muted {\n background: var(--mj-status-warning-bg);\n border-color: var(--mj-status-warning);\n color: var(--mj-status-warning);\n}\n\n.dock__box {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 9px;\n padding: 5px 6px 5px 14px;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-full, 9999px);\n background: var(--mj-bg-surface-card);\n transition: border-color 140ms ease, box-shadow 140ms ease;\n}\n.dock__box:focus-within {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.dock__input {\n flex: 1;\n min-width: 0;\n background: transparent;\n border: 0;\n outline: none;\n color: var(--mj-text-primary);\n font-family: inherit;\n font-size: 13.5px;\n}\n.dock__input::placeholder {\n color: var(--mj-text-muted);\n}\n\n.dock__hint {\n font-size: 10.5px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.dock__send {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse, #fff);\n border: 0;\n display: grid;\n place-items: center;\n cursor: pointer;\n font-size: 12px;\n flex-shrink: 0;\n transition: background 150ms ease;\n}\n.dock__send:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover, var(--mj-brand-primary));\n}\n.dock__send:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n/* The dock's hide control \u2014 typing is a two-way door, never permanent chrome. */\n.dock__hide {\n border-style: dashed;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n.dock__hide:hover {\n color: var(--mj-text-primary);\n}\n"] }]
339
+ args: [{ standalone: true, selector: 'mj-realtime-composer', imports: [CommonModule, FormsModule], template: "@if (StripMode && Compact) {\n <!-- COMPACT (Calm Orb \u00B7 overlay): the lean dock \u2014 Mute + End + a first-class Captions toggle\n (kept out of the \"\u2022\u2022\u2022\" so text stays ONE TAP in the overlay, where the banner no longer\n carries a duplicate CC) + a \"\u2022\u2022\u2022\" that blooms a small sheet with the remaining secondary\n actions (Details / Type). Round controls, red End \u2014 matches the mockup. -->\n <div class=\"dock-lean\" role=\"group\" aria-label=\"Call controls\">\n <div class=\"lean-more\" [class.lean-more--open]=\"MoreOpen\">\n <div class=\"lean-sheet\" (click)=\"$event.stopPropagation()\" role=\"menu\" aria-label=\"More call controls\">\n @if (ShowDetails) {\n <button type=\"button\" class=\"lean-sheet__btn\" [class.lean-sheet__btn--on]=\"DetailsOn\"\n (click)=\"DetailsToggled.emit(); MoreOpen = false\"\n [title]=\"DetailsOn ? 'Hide the session panels' : 'Peek at the session panels'\"\n [attr.aria-pressed]=\"DetailsOn\">\n <i class=\"fa-solid fa-table-columns\" aria-hidden=\"true\"></i>\n <small>Details</small>\n </button>\n }\n <button type=\"button\" class=\"lean-sheet__btn\"\n (click)=\"OpenChanged.emit(true); MoreOpen = false\"\n title=\"Type into the live session\" aria-label=\"Open the typed-input composer\">\n <i class=\"fa-regular fa-keyboard\" aria-hidden=\"true\"></i>\n <small>Type</small>\n </button>\n </div>\n <button type=\"button\" class=\"lean-ctrl lean-ctrl--more\" [class.lean-ctrl--on]=\"MoreOpen\"\n (click)=\"ToggleMore($event)\"\n title=\"More controls\" aria-label=\"More call controls\"\n [attr.aria-expanded]=\"MoreOpen\">\n <i class=\"fa-solid fa-ellipsis\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n <!-- Captions: first-class in the lean dock (the overlay's only text toggle now). -->\n <button type=\"button\" class=\"lean-ctrl lean-ctrl--more\" [class.lean-ctrl--on]=\"CaptionsOn\"\n (click)=\"ToggleCaptions()\"\n [title]=\"CaptionsOn ? 'Voice-first \u2014 back to the orb' : 'Show the conversation as text'\"\n [attr.aria-pressed]=\"CaptionsOn\">\n <i class=\"fa-solid fa-closed-captioning\" aria-hidden=\"true\"></i>\n </button>\n\n <button type=\"button\" class=\"lean-ctrl lean-ctrl--lg\" [class.lean-ctrl--muted]=\"IsMuted\"\n (click)=\"ToggleMute()\"\n [title]=\"IsMuted ? 'Unmute microphone' : 'Mute microphone'\"\n [attr.aria-pressed]=\"IsMuted\">\n <i class=\"fa-solid\" [ngClass]=\"IsMuted ? 'fa-microphone-slash' : 'fa-microphone'\" aria-hidden=\"true\"></i>\n </button>\n\n <button type=\"button\" class=\"lean-ctrl lean-ctrl--lg lean-ctrl--end\" (click)=\"EndRequested.emit()\"\n title=\"End call\" aria-label=\"End call\">\n <i class=\"fa-solid fa-phone-slash\" aria-hidden=\"true\"></i>\n </button>\n </div>\n} @else if (StripMode) {\n <!-- Levels 0\u20131: phone-call strip \u2014 big round controls, nothing to configure.\n Captions arrives at level 1 WITH the text it controls; Details peeks at the\n surface panels on demand; End stays the deliberate rightmost action. -->\n <div class=\"strip\" role=\"group\" aria-label=\"Call controls\">\n <div class=\"ctrl-group\">\n <button type=\"button\" class=\"ctrl\" [class.ctrl--muted]=\"IsMuted\"\n (click)=\"ToggleMute()\"\n [title]=\"IsMuted ? 'Unmute microphone' : 'Mute microphone'\"\n [attr.aria-pressed]=\"IsMuted\">\n <i class=\"fa-solid\" [ngClass]=\"IsMuted ? 'fa-microphone-slash' : 'fa-microphone'\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"ctrl-label\">{{ IsMuted ? 'Unmute' : 'Mute' }}</span>\n </div>\n\n <div class=\"ctrl-group\">\n <button type=\"button\" class=\"ctrl\" [class.ctrl--on]=\"CaptionsOn\"\n (click)=\"ToggleCaptions()\"\n [title]=\"CaptionsOn ? 'Voice-first \u2014 back to the orb' : 'Show the conversation as text'\"\n [attr.aria-pressed]=\"CaptionsOn\">\n <i class=\"fa-solid fa-closed-captioning\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"ctrl-label\">Captions</span>\n </div>\n\n @if (ShowDetails) {\n <div class=\"ctrl-group\">\n <button type=\"button\" class=\"ctrl\" [class.ctrl--on]=\"DetailsOn\"\n (click)=\"DetailsToggled.emit()\"\n [title]=\"DetailsOn ? 'Hide the session panels' : 'Peek at the session panels'\"\n [attr.aria-pressed]=\"DetailsOn\">\n <i class=\"fa-solid fa-table-columns\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"ctrl-label\">Details</span>\n </div>\n }\n\n <div class=\"ctrl-group\">\n <button type=\"button\" class=\"ctrl\" (click)=\"OpenChanged.emit(true)\"\n title=\"Type into the live session\" aria-label=\"Open the typed-input composer\">\n <i class=\"fa-regular fa-keyboard\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"ctrl-label\">Type</span>\n </div>\n\n <div class=\"ctrl-group\">\n <button type=\"button\" class=\"ctrl ctrl--end\" (click)=\"EndRequested.emit()\"\n title=\"End call\" aria-label=\"End call\">\n <i class=\"fa-solid fa-phone-slash\" aria-hidden=\"true\"></i>\n </button>\n <span class=\"ctrl-label ctrl-label--end\">End call</span>\n </div>\n </div>\n} @else {\n <!-- Level 2+: the fused dock \u2014 compact minis + the in-call composer in ONE bottom bar. -->\n <div class=\"dock\">\n <div class=\"dock__minis\">\n <button type=\"button\" class=\"mini\" [class.mini--muted]=\"IsMuted\"\n (click)=\"ToggleMute()\"\n [title]=\"IsMuted ? 'Unmute microphone' : 'Mute microphone'\"\n [attr.aria-pressed]=\"IsMuted\">\n <i class=\"fa-solid\" [ngClass]=\"IsMuted ? 'fa-microphone-slash' : 'fa-microphone'\" aria-hidden=\"true\"></i>\n </button>\n <button type=\"button\" class=\"mini\" [class.mini--on]=\"CaptionsOn\"\n (click)=\"ToggleCaptions()\"\n [title]=\"CaptionsOn ? 'Voice-first \u2014 back to the orb' : 'Show the conversation as text'\"\n [attr.aria-pressed]=\"CaptionsOn\">\n <i class=\"fa-solid fa-closed-captioning\" aria-hidden=\"true\"></i>\n </button>\n @if (ShowDetails) {\n <button type=\"button\" class=\"mini\" [class.mini--on]=\"DetailsOn\"\n (click)=\"DetailsToggled.emit()\"\n [title]=\"DetailsOn ? 'Hide the session panels' : 'Show the session panels'\"\n [attr.aria-pressed]=\"DetailsOn\">\n <i class=\"fa-solid fa-table-columns\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n <div class=\"dock__box\">\n <input\n #dockInput\n type=\"text\"\n class=\"dock__input\"\n placeholder=\"Type into the live session \u2014 joins this same voice call\u2026\"\n [(ngModel)]=\"Draft\"\n (keydown)=\"OnKeydown($event)\"\n aria-label=\"Type a message into the live voice session\" />\n <span class=\"dock__hint\" aria-hidden=\"true\">\u21B5 send</span>\n <button\n class=\"dock__send\"\n type=\"button\"\n [disabled]=\"!CanSend\"\n (click)=\"Send()\"\n title=\"Send into live session\"\n aria-label=\"Send\">\n <i class=\"fa-solid fa-paper-plane\" aria-hidden=\"true\"></i>\n </button>\n </div>\n <button type=\"button\" class=\"mini dock__hide\" (click)=\"OpenChanged.emit(false)\"\n title=\"Hide typing \u2014 back to the voice controls\"\n aria-label=\"Close the typed-input composer\">\n <i class=\"fa-solid fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n}\n", styles: [":host {\n display: block;\n}\n\n/* ---------- Levels 0\u20131: phone-call strip (big round controls, centered) ---------- */\n.strip {\n position: relative;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n gap: 22px;\n padding: 20px 22px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.ctrl-group {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.ctrl {\n width: 52px;\n height: 52px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n cursor: pointer;\n font-size: 18px;\n transition: all 150ms ease;\n}\n.ctrl:hover {\n background: var(--mj-bg-surface-hover);\n}\n.ctrl--on {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse, #fff);\n}\n.ctrl--muted {\n background: var(--mj-status-warning-bg);\n border-color: var(--mj-status-warning);\n color: var(--mj-status-warning);\n}\n.ctrl--end {\n width: 60px;\n height: 60px;\n background: var(--mj-status-error);\n border-color: var(--mj-status-error);\n color: var(--mj-text-inverse, #fff);\n font-size: 20px;\n box-shadow: 0 6px 20px color-mix(in srgb, var(--mj-status-error) 40%, transparent);\n}\n.ctrl--end:hover {\n background: var(--mj-status-error);\n filter: brightness(0.92);\n}\n\n.ctrl-label {\n font-size: 11px;\n color: var(--mj-text-muted);\n text-align: center;\n margin-top: 6px;\n font-weight: 500;\n}\n.ctrl-label--end {\n color: var(--mj-status-error);\n}\n\n/* ---------- Level 2+: the fused dock (minis + composer in one bar) ---------- */\n.dock {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 18px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n animation: dock-in 320ms cubic-bezier(0.2, 0.8, 0.3, 1);\n}\n@keyframes dock-in {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.dock__minis {\n display: flex;\n gap: 7px;\n flex-shrink: 0;\n}\n.mini {\n width: 38px;\n height: 38px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n cursor: pointer;\n font-size: 13.5px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n transition: all 140ms ease;\n}\n.mini:hover {\n background: var(--mj-bg-surface-hover);\n}\n.mini--on {\n background: color-mix(in srgb, var(--mj-brand-primary) 16%, transparent);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-accent, var(--mj-brand-primary));\n}\n.mini--muted {\n background: var(--mj-status-warning-bg);\n border-color: var(--mj-status-warning);\n color: var(--mj-status-warning);\n}\n\n.dock__box {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 9px;\n padding: 5px 6px 5px 14px;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-full, 9999px);\n background: var(--mj-bg-surface-card);\n transition: border-color 140ms ease, box-shadow 140ms ease;\n}\n.dock__box:focus-within {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.dock__input {\n flex: 1;\n min-width: 0;\n background: transparent;\n border: 0;\n outline: none;\n color: var(--mj-text-primary);\n font-family: inherit;\n font-size: 13.5px;\n}\n.dock__input::placeholder {\n color: var(--mj-text-muted);\n}\n\n.dock__hint {\n font-size: 10.5px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.dock__send {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse, #fff);\n border: 0;\n display: grid;\n place-items: center;\n cursor: pointer;\n font-size: 12px;\n flex-shrink: 0;\n transition: background 150ms ease;\n}\n.dock__send:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover, var(--mj-brand-primary));\n}\n.dock__send:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n/* The dock's hide control \u2014 typing is a two-way door, never permanent chrome. */\n.dock__hide {\n border-style: dashed;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n.dock__hide:hover {\n color: var(--mj-text-primary);\n}\n\n/* ============================================================= COMPACT (Calm Orb \u00B7 overlay)\n The lean dock \u2014 Mute + End + a \"\u2022\u2022\u2022\" that blooms a small sheet (Captions / Details / Type).\n Round controls, red End \u2014 matches the mockup. No 5-button bar, no overlapping hint. */\n.dock-lean {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 14px;\n padding: 16px 18px 20px;\n background: linear-gradient(180deg, transparent, color-mix(in srgb, var(--mj-bg-page) 35%, transparent));\n}\n\n.lean-ctrl {\n display: grid;\n place-items: center;\n border-radius: 50%;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 150ms ease;\n}\n.lean-ctrl:hover {\n background: var(--mj-bg-surface-hover);\n transform: translateY(-1px);\n}\n.lean-ctrl--lg {\n width: 58px;\n height: 58px;\n font-size: 19px;\n}\n.lean-ctrl--more {\n width: 46px;\n height: 46px;\n font-size: 16px;\n}\n.lean-ctrl--on {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse, #fff);\n}\n.lean-ctrl--muted {\n background: var(--mj-status-warning-bg);\n border-color: var(--mj-status-warning);\n color: var(--mj-status-warning);\n}\n.lean-ctrl--end {\n background: var(--mj-status-error);\n border-color: var(--mj-status-error);\n color: var(--mj-text-inverse, #fff);\n font-size: 20px;\n box-shadow: 0 8px 24px color-mix(in srgb, var(--mj-status-error) 40%, transparent);\n}\n.lean-ctrl--end:hover {\n background: var(--mj-status-error);\n filter: brightness(0.94);\n}\n\n/* The \"\u2022\u2022\u2022\" overflow + its blooming sheet. */\n.lean-more {\n position: relative;\n display: flex;\n align-items: center;\n}\n.lean-sheet {\n position: absolute;\n bottom: calc(100% + 12px);\n left: 50%;\n transform: translateX(-50%) translateY(8px);\n display: flex;\n gap: 10px;\n padding: 10px;\n border-radius: var(--mj-radius-lg, 16px);\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n box-shadow: 0 18px 50px -22px rgba(0, 0, 0, 0.6);\n opacity: 0;\n pointer-events: none;\n transition: opacity 200ms ease, transform 200ms ease;\n z-index: 5;\n}\n.lean-more--open .lean-sheet {\n opacity: 1;\n pointer-events: auto;\n transform: translateX(-50%) translateY(0);\n}\n.lean-sheet__btn {\n display: grid;\n place-items: center;\n gap: 3px;\n width: 56px;\n padding: 8px 4px;\n border-radius: var(--mj-radius-md, 10px);\n border: 1px solid transparent;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 16px;\n transition: all 140ms ease;\n}\n.lean-sheet__btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.lean-sheet__btn--on {\n background: color-mix(in srgb, var(--mj-brand-primary) 16%, transparent);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-accent, var(--mj-brand-primary));\n}\n.lean-sheet__btn small {\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-muted);\n}\n.lean-sheet__btn--on small {\n color: var(--mj-brand-accent, var(--mj-brand-primary));\n}\n"] }]
235
340
  }], null, { Open: [{
236
341
  type: Input
342
+ }], Compact: [{
343
+ type: Input
237
344
  }], OpenChanged: [{
238
345
  type: Output
239
346
  }], CaptionsOn: [{
@@ -248,9 +355,16 @@ export class RealtimeComposerComponent {
248
355
  type: Output
249
356
  }], EndRequested: [{
250
357
  type: Output
358
+ }], MuteChanged: [{
359
+ type: Output
360
+ }], IsMuted: [{
361
+ type: Input
251
362
  }], dockInput: [{
252
363
  type: ViewChild,
253
364
  args: ['dockInput']
365
+ }], OnDocumentClick: [{
366
+ type: HostListener,
367
+ args: ['document:click']
254
368
  }] }); })();
255
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RealtimeComposerComponent, { className: "RealtimeComposerComponent", filePath: "src/lib/components/realtime/realtime-composer.component.ts", lineNumber: 31 }); })();
369
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RealtimeComposerComponent, { className: "RealtimeComposerComponent", filePath: "src/lib/components/realtime/realtime-composer.component.ts", lineNumber: 32 }); })();
256
370
  //# sourceMappingURL=realtime-composer.component.js.map