@memberjunction/ng-conversations 5.43.0 → 5.45.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 (405) 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.d.ts +3 -1
  6. package/dist/lib/components/artifact/artifact-share-modal.component.d.ts.map +1 -1
  7. package/dist/lib/components/artifact/artifact-share-modal.component.js +52 -52
  8. package/dist/lib/components/artifact/artifact-share-modal.component.js.map +1 -1
  9. package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -1
  10. package/dist/lib/components/collection/collection-form-modal.component.js +10 -14
  11. package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -1
  12. package/dist/lib/components/collection/collection-share-modal.component.d.ts +3 -1
  13. package/dist/lib/components/collection/collection-share-modal.component.d.ts.map +1 -1
  14. package/dist/lib/components/collection/collection-share-modal.component.js +56 -56
  15. package/dist/lib/components/collection/collection-share-modal.component.js.map +1 -1
  16. package/dist/lib/components/collection/collection-tree.component.d.ts +3 -1
  17. package/dist/lib/components/collection/collection-tree.component.d.ts.map +1 -1
  18. package/dist/lib/components/collection/collection-tree.component.js +10 -7
  19. package/dist/lib/components/collection/collection-tree.component.js.map +1 -1
  20. package/dist/lib/components/collection/collection-view.component.d.ts +3 -1
  21. package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -1
  22. package/dist/lib/components/collection/collection-view.component.js +29 -41
  23. package/dist/lib/components/collection/collection-view.component.js.map +1 -1
  24. package/dist/lib/components/collection/collections-full-view.component.d.ts +4 -0
  25. package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -1
  26. package/dist/lib/components/collection/collections-full-view.component.js +134 -166
  27. package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
  28. package/dist/lib/components/composer/ai-composer.component.d.ts +103 -0
  29. package/dist/lib/components/composer/ai-composer.component.d.ts.map +1 -0
  30. package/dist/lib/components/composer/ai-composer.component.js +263 -0
  31. package/dist/lib/components/composer/ai-composer.component.js.map +1 -0
  32. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +76 -12
  33. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  34. package/dist/lib/components/conversation/conversation-chat-area.component.js +522 -158
  35. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  36. package/dist/lib/components/conversation/conversation-empty-state.component.d.ts +1 -1
  37. package/dist/lib/components/conversation/conversation-empty-state.component.d.ts.map +1 -1
  38. package/dist/lib/components/conversation/conversation-empty-state.component.js.map +1 -1
  39. package/dist/lib/components/conversation/pinned-messages-panel.component.js +6 -9
  40. package/dist/lib/components/conversation/pinned-messages-panel.component.js.map +1 -1
  41. package/dist/lib/components/library/library-full-view.component.d.ts.map +1 -1
  42. package/dist/lib/components/library/library-full-view.component.js +20 -24
  43. package/dist/lib/components/library/library-full-view.component.js.map +1 -1
  44. package/dist/lib/components/members/members-modal.component.d.ts.map +1 -1
  45. package/dist/lib/components/members/members-modal.component.js +10 -11
  46. package/dist/lib/components/members/members-modal.component.js.map +1 -1
  47. package/dist/lib/components/message/message-input.component.d.ts +87 -23
  48. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  49. package/dist/lib/components/message/message-input.component.js +245 -158
  50. package/dist/lib/components/message/message-input.component.js.map +1 -1
  51. package/dist/lib/components/message/message-item.component.d.ts +11 -3
  52. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  53. package/dist/lib/components/message/message-item.component.js +73 -21
  54. package/dist/lib/components/message/message-item.component.js.map +1 -1
  55. package/dist/lib/components/message/message-list.component.js +6 -9
  56. package/dist/lib/components/message/message-list.component.js.map +1 -1
  57. package/dist/lib/components/overlay/chat-overlay.component.d.ts +4 -1
  58. package/dist/lib/components/overlay/chat-overlay.component.d.ts.map +1 -1
  59. package/dist/lib/components/overlay/chat-overlay.component.js +9 -4
  60. package/dist/lib/components/overlay/chat-overlay.component.js.map +1 -1
  61. package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts +45 -0
  62. package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts.map +1 -1
  63. package/dist/lib/components/realtime/channels/base-realtime-channel-client.js +10 -0
  64. package/dist/lib/components/realtime/channels/base-realtime-channel-client.js.map +1 -1
  65. package/dist/lib/components/realtime/channels/client-context-channel.d.ts +46 -0
  66. package/dist/lib/components/realtime/channels/client-context-channel.d.ts.map +1 -0
  67. package/dist/lib/components/realtime/channels/client-context-channel.js +174 -0
  68. package/dist/lib/components/realtime/channels/client-context-channel.js.map +1 -0
  69. package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.d.ts +123 -0
  70. package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.d.ts.map +1 -0
  71. package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.js +397 -0
  72. package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.js.map +1 -0
  73. package/dist/lib/components/realtime/media/media-channel-state.d.ts +103 -0
  74. package/dist/lib/components/realtime/media/media-channel-state.d.ts.map +1 -0
  75. package/dist/lib/components/realtime/media/media-channel-state.js +143 -0
  76. package/dist/lib/components/realtime/media/media-channel-state.js.map +1 -0
  77. package/dist/lib/components/realtime/media/media-channel-tools.d.ts +24 -0
  78. package/dist/lib/components/realtime/media/media-channel-tools.d.ts.map +1 -0
  79. package/dist/lib/components/realtime/media/media-channel-tools.js +107 -0
  80. package/dist/lib/components/realtime/media/media-channel-tools.js.map +1 -0
  81. package/dist/lib/components/realtime/media/media-channel.d.ts +89 -0
  82. package/dist/lib/components/realtime/media/media-channel.d.ts.map +1 -0
  83. package/dist/lib/components/realtime/media/media-channel.js +253 -0
  84. package/dist/lib/components/realtime/media/media-channel.js.map +1 -0
  85. package/dist/lib/components/realtime/media/realtime-media-surface.component.d.ts +141 -0
  86. package/dist/lib/components/realtime/media/realtime-media-surface.component.d.ts.map +1 -0
  87. package/dist/lib/components/realtime/media/realtime-media-surface.component.js +574 -0
  88. package/dist/lib/components/realtime/media/realtime-media-surface.component.js.map +1 -0
  89. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts +59 -14
  90. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts.map +1 -1
  91. package/dist/lib/components/realtime/realtime-activity-rail.component.js +277 -74
  92. package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -1
  93. package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts +28 -27
  94. package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts.map +1 -1
  95. package/dist/lib/components/realtime/realtime-agent-banner.component.js +144 -143
  96. package/dist/lib/components/realtime/realtime-agent-banner.component.js.map +1 -1
  97. package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts +12 -0
  98. package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts.map +1 -1
  99. package/dist/lib/components/realtime/realtime-agent-picker.component.js +105 -43
  100. package/dist/lib/components/realtime/realtime-agent-picker.component.js.map +1 -1
  101. package/dist/lib/components/realtime/realtime-audio-visuals.d.ts +2 -2
  102. package/dist/lib/components/realtime/realtime-audio-visuals.d.ts.map +1 -1
  103. package/dist/lib/components/realtime/realtime-audio-visuals.js.map +1 -1
  104. package/dist/lib/components/realtime/realtime-composer.component.d.ts +41 -7
  105. package/dist/lib/components/realtime/realtime-composer.component.d.ts.map +1 -1
  106. package/dist/lib/components/realtime/realtime-composer.component.js +216 -102
  107. package/dist/lib/components/realtime/realtime-composer.component.js.map +1 -1
  108. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +0 -2
  109. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts.map +1 -1
  110. package/dist/lib/components/realtime/realtime-delegation-card.component.js +67 -71
  111. package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -1
  112. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +364 -44
  113. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts.map +1 -1
  114. package/dist/lib/components/realtime/realtime-session-overlay.component.js +839 -153
  115. package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -1
  116. package/dist/lib/components/realtime/realtime-session-state.d.ts +5 -5
  117. package/dist/lib/components/realtime/realtime-session-state.d.ts.map +1 -1
  118. package/dist/lib/components/realtime/realtime-session-state.js.map +1 -1
  119. package/dist/lib/components/realtime/realtime-surface-tab-style.d.ts +70 -0
  120. package/dist/lib/components/realtime/realtime-surface-tab-style.d.ts.map +1 -0
  121. package/dist/lib/components/realtime/realtime-surface-tab-style.js +115 -0
  122. package/dist/lib/components/realtime/realtime-surface-tab-style.js.map +1 -0
  123. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +55 -57
  124. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts.map +1 -1
  125. package/dist/lib/components/realtime/realtime-surface-tabs.component.js +165 -143
  126. package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -1
  127. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +80 -71
  128. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts.map +1 -1
  129. package/dist/lib/components/realtime/realtime-surface-tabs.model.js +83 -113
  130. package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -1
  131. package/dist/lib/components/realtime/realtime-ui-config.d.ts +270 -0
  132. package/dist/lib/components/realtime/realtime-ui-config.d.ts.map +1 -0
  133. package/dist/lib/components/realtime/realtime-ui-config.js +212 -0
  134. package/dist/lib/components/realtime/realtime-ui-config.js.map +1 -0
  135. package/dist/lib/components/search/search-panel.component.d.ts +2 -0
  136. package/dist/lib/components/search/search-panel.component.d.ts.map +1 -1
  137. package/dist/lib/components/search/search-panel.component.js +92 -101
  138. package/dist/lib/components/search/search-panel.component.js.map +1 -1
  139. package/dist/lib/components/share/share-modal.component.d.ts.map +1 -1
  140. package/dist/lib/components/share/share-modal.component.js +10 -11
  141. package/dist/lib/components/share/share-modal.component.js.map +1 -1
  142. package/dist/lib/components/shared/user-picker.component.d.ts.map +1 -1
  143. package/dist/lib/components/shared/user-picker.component.js +12 -15
  144. package/dist/lib/components/shared/user-picker.component.js.map +1 -1
  145. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts +11 -3
  146. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts.map +1 -1
  147. package/dist/lib/components/sidebar/conversation-sidebar.component.js +34 -10
  148. package/dist/lib/components/sidebar/conversation-sidebar.component.js.map +1 -1
  149. package/dist/lib/components/sidebar/routines-section.component.d.ts +73 -0
  150. package/dist/lib/components/sidebar/routines-section.component.d.ts.map +1 -0
  151. package/dist/lib/components/sidebar/routines-section.component.js +211 -0
  152. package/dist/lib/components/sidebar/routines-section.component.js.map +1 -0
  153. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts +12 -0
  154. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -1
  155. package/dist/lib/components/tasks/tasks-dropdown.component.js +37 -1
  156. package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -1
  157. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +16 -5
  158. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  159. package/dist/lib/components/workspace/conversation-workspace.component.js +51 -31
  160. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  161. package/dist/lib/composer-plugins/agent-mention.provider.d.ts +16 -0
  162. package/dist/lib/composer-plugins/agent-mention.provider.d.ts.map +1 -0
  163. package/dist/lib/composer-plugins/agent-mention.provider.js +28 -0
  164. package/dist/lib/composer-plugins/agent-mention.provider.js.map +1 -0
  165. package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts +20 -0
  166. package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts.map +1 -0
  167. package/dist/lib/composer-plugins/base-conversation-mention.provider.js +32 -0
  168. package/dist/lib/composer-plugins/base-conversation-mention.provider.js.map +1 -0
  169. package/dist/lib/composer-plugins/load-composer-plugins.d.ts +9 -0
  170. package/dist/lib/composer-plugins/load-composer-plugins.d.ts.map +1 -0
  171. package/dist/lib/composer-plugins/load-composer-plugins.js +17 -0
  172. package/dist/lib/composer-plugins/load-composer-plugins.js.map +1 -0
  173. package/dist/lib/composer-plugins/record-mention.provider.d.ts +14 -0
  174. package/dist/lib/composer-plugins/record-mention.provider.d.ts.map +1 -0
  175. package/dist/lib/composer-plugins/record-mention.provider.js +26 -0
  176. package/dist/lib/composer-plugins/record-mention.provider.js.map +1 -0
  177. package/dist/lib/composer-plugins/skill-command.provider.d.ts +15 -0
  178. package/dist/lib/composer-plugins/skill-command.provider.d.ts.map +1 -0
  179. package/dist/lib/composer-plugins/skill-command.provider.js +27 -0
  180. package/dist/lib/composer-plugins/skill-command.provider.js.map +1 -0
  181. package/dist/lib/conversations.module.d.ts +68 -64
  182. package/dist/lib/conversations.module.d.ts.map +1 -1
  183. package/dist/lib/conversations.module.js +69 -18
  184. package/dist/lib/conversations.module.js.map +1 -1
  185. package/dist/lib/models/conversation-state.model.d.ts +6 -3
  186. package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
  187. package/dist/lib/models/conversation-state.model.js.map +1 -1
  188. package/dist/lib/services/conversation-agent.service.d.ts +9 -2
  189. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  190. package/dist/lib/services/conversation-agent.service.js +26 -2
  191. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  192. package/dist/lib/services/conversation-attachment.service.d.ts +1 -1
  193. package/dist/lib/services/conversation-attachment.service.d.ts.map +1 -1
  194. package/dist/lib/services/conversation-attachment.service.js.map +1 -1
  195. package/dist/lib/services/mention-autocomplete.service.d.ts +42 -19
  196. package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
  197. package/dist/lib/services/mention-autocomplete.service.js +113 -18
  198. package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
  199. package/dist/lib/services/realtime-audio-recorder.d.ts +143 -0
  200. package/dist/lib/services/realtime-audio-recorder.d.ts.map +1 -0
  201. package/dist/lib/services/realtime-audio-recorder.js +379 -0
  202. package/dist/lib/services/realtime-audio-recorder.js.map +1 -0
  203. package/dist/lib/services/realtime-pcm-wav.d.ts +75 -0
  204. package/dist/lib/services/realtime-pcm-wav.d.ts.map +1 -0
  205. package/dist/lib/services/realtime-pcm-wav.js +205 -0
  206. package/dist/lib/services/realtime-pcm-wav.js.map +1 -0
  207. package/dist/lib/services/realtime-session-review.service.d.ts +28 -1
  208. package/dist/lib/services/realtime-session-review.service.d.ts.map +1 -1
  209. package/dist/lib/services/realtime-session-review.service.js +12 -3
  210. package/dist/lib/services/realtime-session-review.service.js.map +1 -1
  211. package/dist/lib/services/realtime-session.service.d.ts +210 -20
  212. package/dist/lib/services/realtime-session.service.d.ts.map +1 -1
  213. package/dist/lib/services/realtime-session.service.js +452 -21
  214. package/dist/lib/services/realtime-session.service.js.map +1 -1
  215. package/dist/lib/services/realtime-sessions-adapter.js +1 -1
  216. package/dist/lib/services/realtime-sessions-adapter.js.map +1 -1
  217. package/dist/lib/services/ui-command-handler.service.d.ts +7 -2
  218. package/dist/lib/services/ui-command-handler.service.d.ts.map +1 -1
  219. package/dist/lib/services/ui-command-handler.service.js +6 -2
  220. package/dist/lib/services/ui-command-handler.service.js.map +1 -1
  221. package/dist/lib/utils/plan-mode-preference.d.ts +62 -0
  222. package/dist/lib/utils/plan-mode-preference.d.ts.map +1 -0
  223. package/dist/lib/utils/plan-mode-preference.js +130 -0
  224. package/dist/lib/utils/plan-mode-preference.js.map +1 -0
  225. package/dist/public-api.d.ts +29 -3
  226. package/dist/public-api.d.ts.map +1 -1
  227. package/dist/public-api.js +46 -3
  228. package/dist/public-api.js.map +1 -1
  229. package/package.json +30 -26
  230. package/dist/__tests__/attachment-badge.test.d.ts +0 -2
  231. package/dist/__tests__/attachment-badge.test.d.ts.map +0 -1
  232. package/dist/__tests__/attachment-badge.test.js +0 -66
  233. package/dist/__tests__/attachment-badge.test.js.map +0 -1
  234. package/dist/__tests__/channel-optional-surface.test.d.ts +0 -2
  235. package/dist/__tests__/channel-optional-surface.test.d.ts.map +0 -1
  236. package/dist/__tests__/channel-optional-surface.test.js +0 -53
  237. package/dist/__tests__/channel-optional-surface.test.js.map +0 -1
  238. package/dist/__tests__/chat-events.test.d.ts +0 -14
  239. package/dist/__tests__/chat-events.test.d.ts.map +0 -1
  240. package/dist/__tests__/chat-events.test.js +0 -109
  241. package/dist/__tests__/chat-events.test.js.map +0 -1
  242. package/dist/__tests__/collections-full-view.test.d.ts +0 -2
  243. package/dist/__tests__/collections-full-view.test.d.ts.map +0 -1
  244. package/dist/__tests__/collections-full-view.test.js +0 -225
  245. package/dist/__tests__/collections-full-view.test.js.map +0 -1
  246. package/dist/__tests__/conversation-cache.test.d.ts +0 -2
  247. package/dist/__tests__/conversation-cache.test.d.ts.map +0 -1
  248. package/dist/__tests__/conversation-cache.test.js +0 -233
  249. package/dist/__tests__/conversation-cache.test.js.map +0 -1
  250. package/dist/__tests__/conversation-naming.test.d.ts +0 -2
  251. package/dist/__tests__/conversation-naming.test.d.ts.map +0 -1
  252. package/dist/__tests__/conversation-naming.test.js +0 -110
  253. package/dist/__tests__/conversation-naming.test.js.map +0 -1
  254. package/dist/__tests__/delegation-result-parser.test.d.ts +0 -2
  255. package/dist/__tests__/delegation-result-parser.test.d.ts.map +0 -1
  256. package/dist/__tests__/delegation-result-parser.test.js +0 -107
  257. package/dist/__tests__/delegation-result-parser.test.js.map +0 -1
  258. package/dist/__tests__/distinct-artifacts.test.d.ts +0 -2
  259. package/dist/__tests__/distinct-artifacts.test.d.ts.map +0 -1
  260. package/dist/__tests__/distinct-artifacts.test.js +0 -56
  261. package/dist/__tests__/distinct-artifacts.test.js.map +0 -1
  262. package/dist/__tests__/event-wiring.test.d.ts +0 -15
  263. package/dist/__tests__/event-wiring.test.d.ts.map +0 -1
  264. package/dist/__tests__/event-wiring.test.js +0 -100
  265. package/dist/__tests__/event-wiring.test.js.map +0 -1
  266. package/dist/__tests__/index.test.d.ts +0 -2
  267. package/dist/__tests__/index.test.d.ts.map +0 -1
  268. package/dist/__tests__/index.test.js +0 -7
  269. package/dist/__tests__/index.test.js.map +0 -1
  270. package/dist/__tests__/narration-template.test.d.ts +0 -2
  271. package/dist/__tests__/narration-template.test.d.ts.map +0 -1
  272. package/dist/__tests__/narration-template.test.js +0 -76
  273. package/dist/__tests__/narration-template.test.js.map +0 -1
  274. package/dist/__tests__/notification-model.test.d.ts +0 -2
  275. package/dist/__tests__/notification-model.test.d.ts.map +0 -1
  276. package/dist/__tests__/notification-model.test.js +0 -68
  277. package/dist/__tests__/notification-model.test.js.map +0 -1
  278. package/dist/__tests__/realtime-agent-picker-models.test.d.ts +0 -2
  279. package/dist/__tests__/realtime-agent-picker-models.test.d.ts.map +0 -1
  280. package/dist/__tests__/realtime-agent-picker-models.test.js +0 -49
  281. package/dist/__tests__/realtime-agent-picker-models.test.js.map +0 -1
  282. package/dist/__tests__/realtime-audio-visuals.test.d.ts +0 -2
  283. package/dist/__tests__/realtime-audio-visuals.test.d.ts.map +0 -1
  284. package/dist/__tests__/realtime-audio-visuals.test.js +0 -123
  285. package/dist/__tests__/realtime-audio-visuals.test.js.map +0 -1
  286. package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts +0 -2
  287. package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts.map +0 -1
  288. package/dist/__tests__/realtime-delegation-card-cancel.test.js +0 -48
  289. package/dist/__tests__/realtime-delegation-card-cancel.test.js.map +0 -1
  290. package/dist/__tests__/realtime-disclosure.test.d.ts +0 -2
  291. package/dist/__tests__/realtime-disclosure.test.d.ts.map +0 -1
  292. package/dist/__tests__/realtime-disclosure.test.js +0 -164
  293. package/dist/__tests__/realtime-disclosure.test.js.map +0 -1
  294. package/dist/__tests__/realtime-pairing.test.d.ts +0 -2
  295. package/dist/__tests__/realtime-pairing.test.d.ts.map +0 -1
  296. package/dist/__tests__/realtime-pairing.test.js +0 -207
  297. package/dist/__tests__/realtime-pairing.test.js.map +0 -1
  298. package/dist/__tests__/realtime-review-lifecycle.test.d.ts +0 -2
  299. package/dist/__tests__/realtime-review-lifecycle.test.d.ts.map +0 -1
  300. package/dist/__tests__/realtime-review-lifecycle.test.js +0 -154
  301. package/dist/__tests__/realtime-review-lifecycle.test.js.map +0 -1
  302. package/dist/__tests__/realtime-session-cancel-usage.test.d.ts +0 -2
  303. package/dist/__tests__/realtime-session-cancel-usage.test.d.ts.map +0 -1
  304. package/dist/__tests__/realtime-session-cancel-usage.test.js +0 -230
  305. package/dist/__tests__/realtime-session-cancel-usage.test.js.map +0 -1
  306. package/dist/__tests__/realtime-session-channels.test.d.ts +0 -2
  307. package/dist/__tests__/realtime-session-channels.test.d.ts.map +0 -1
  308. package/dist/__tests__/realtime-session-channels.test.js +0 -252
  309. package/dist/__tests__/realtime-session-channels.test.js.map +0 -1
  310. package/dist/__tests__/realtime-session-client-tools.test.d.ts +0 -2
  311. package/dist/__tests__/realtime-session-client-tools.test.d.ts.map +0 -1
  312. package/dist/__tests__/realtime-session-client-tools.test.js +0 -103
  313. package/dist/__tests__/realtime-session-client-tools.test.js.map +0 -1
  314. package/dist/__tests__/realtime-session-minimized.test.d.ts +0 -2
  315. package/dist/__tests__/realtime-session-minimized.test.d.ts.map +0 -1
  316. package/dist/__tests__/realtime-session-minimized.test.js +0 -32
  317. package/dist/__tests__/realtime-session-minimized.test.js.map +0 -1
  318. package/dist/__tests__/realtime-session-mint.test.d.ts +0 -2
  319. package/dist/__tests__/realtime-session-mint.test.d.ts.map +0 -1
  320. package/dist/__tests__/realtime-session-mint.test.js +0 -69
  321. package/dist/__tests__/realtime-session-mint.test.js.map +0 -1
  322. package/dist/__tests__/realtime-session-policy.test.d.ts +0 -2
  323. package/dist/__tests__/realtime-session-policy.test.d.ts.map +0 -1
  324. package/dist/__tests__/realtime-session-policy.test.js +0 -303
  325. package/dist/__tests__/realtime-session-policy.test.js.map +0 -1
  326. package/dist/__tests__/realtime-session-review.service.test.d.ts +0 -2
  327. package/dist/__tests__/realtime-session-review.service.test.d.ts.map +0 -1
  328. package/dist/__tests__/realtime-session-review.service.test.js +0 -743
  329. package/dist/__tests__/realtime-session-review.service.test.js.map +0 -1
  330. package/dist/__tests__/realtime-session-state.test.d.ts +0 -2
  331. package/dist/__tests__/realtime-session-state.test.d.ts.map +0 -1
  332. package/dist/__tests__/realtime-session-state.test.js +0 -83
  333. package/dist/__tests__/realtime-session-state.test.js.map +0 -1
  334. package/dist/__tests__/realtime-session-timeline-card.test.d.ts +0 -2
  335. package/dist/__tests__/realtime-session-timeline-card.test.d.ts.map +0 -1
  336. package/dist/__tests__/realtime-session-timeline-card.test.js +0 -106
  337. package/dist/__tests__/realtime-session-timeline-card.test.js.map +0 -1
  338. package/dist/__tests__/realtime-session-timeline.test.d.ts +0 -2
  339. package/dist/__tests__/realtime-session-timeline.test.d.ts.map +0 -1
  340. package/dist/__tests__/realtime-session-timeline.test.js +0 -142
  341. package/dist/__tests__/realtime-session-timeline.test.js.map +0 -1
  342. package/dist/__tests__/realtime-sessions-adapter.test.d.ts +0 -19
  343. package/dist/__tests__/realtime-sessions-adapter.test.d.ts.map +0 -1
  344. package/dist/__tests__/realtime-sessions-adapter.test.js +0 -188
  345. package/dist/__tests__/realtime-sessions-adapter.test.js.map +0 -1
  346. package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts +0 -2
  347. package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts.map +0 -1
  348. package/dist/__tests__/realtime-surface-panel-prefs.test.js +0 -100
  349. package/dist/__tests__/realtime-surface-panel-prefs.test.js.map +0 -1
  350. package/dist/__tests__/realtime-surface-tabs-model.test.d.ts +0 -2
  351. package/dist/__tests__/realtime-surface-tabs-model.test.d.ts.map +0 -1
  352. package/dist/__tests__/realtime-surface-tabs-model.test.js +0 -193
  353. package/dist/__tests__/realtime-surface-tabs-model.test.js.map +0 -1
  354. package/dist/__tests__/remote-browser-audio-player.test.d.ts +0 -2
  355. package/dist/__tests__/remote-browser-audio-player.test.d.ts.map +0 -1
  356. package/dist/__tests__/remote-browser-audio-player.test.js +0 -137
  357. package/dist/__tests__/remote-browser-audio-player.test.js.map +0 -1
  358. package/dist/__tests__/remote-browser-channel.test.d.ts +0 -2
  359. package/dist/__tests__/remote-browser-channel.test.d.ts.map +0 -1
  360. package/dist/__tests__/remote-browser-channel.test.js +0 -585
  361. package/dist/__tests__/remote-browser-channel.test.js.map +0 -1
  362. package/dist/__tests__/search-service.test.d.ts +0 -2
  363. package/dist/__tests__/search-service.test.d.ts.map +0 -1
  364. package/dist/__tests__/search-service.test.js +0 -114
  365. package/dist/__tests__/search-service.test.js.map +0 -1
  366. package/dist/__tests__/slot-defaults.test.d.ts +0 -24
  367. package/dist/__tests__/slot-defaults.test.d.ts.map +0 -1
  368. package/dist/__tests__/slot-defaults.test.js +0 -63
  369. package/dist/__tests__/slot-defaults.test.js.map +0 -1
  370. package/dist/__tests__/toast-service.test.d.ts +0 -2
  371. package/dist/__tests__/toast-service.test.d.ts.map +0 -1
  372. package/dist/__tests__/toast-service.test.js +0 -143
  373. package/dist/__tests__/toast-service.test.js.map +0 -1
  374. package/dist/__tests__/user-authorization.test.d.ts +0 -2
  375. package/dist/__tests__/user-authorization.test.d.ts.map +0 -1
  376. package/dist/__tests__/user-authorization.test.js +0 -97
  377. package/dist/__tests__/user-authorization.test.js.map +0 -1
  378. package/dist/__tests__/voice-session-narration.test.d.ts +0 -2
  379. package/dist/__tests__/voice-session-narration.test.d.ts.map +0 -1
  380. package/dist/__tests__/voice-session-narration.test.js +0 -609
  381. package/dist/__tests__/voice-session-narration.test.js.map +0 -1
  382. package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts +0 -2
  383. package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts.map +0 -1
  384. package/dist/__tests__/whiteboard-artifact-viewer.test.js +0 -101
  385. package/dist/__tests__/whiteboard-artifact-viewer.test.js.map +0 -1
  386. package/dist/__tests__/whiteboard-channel.test.d.ts +0 -2
  387. package/dist/__tests__/whiteboard-channel.test.d.ts.map +0 -1
  388. package/dist/__tests__/whiteboard-channel.test.js +0 -260
  389. package/dist/__tests__/whiteboard-channel.test.js.map +0 -1
  390. package/dist/__tests__/whiteboard-restore-state.test.d.ts +0 -2
  391. package/dist/__tests__/whiteboard-restore-state.test.d.ts.map +0 -1
  392. package/dist/__tests__/whiteboard-restore-state.test.js +0 -108
  393. package/dist/__tests__/whiteboard-restore-state.test.js.map +0 -1
  394. package/dist/lib/components/mention/mention-dropdown.component.d.ts +0 -53
  395. package/dist/lib/components/mention/mention-dropdown.component.d.ts.map +0 -1
  396. package/dist/lib/components/mention/mention-dropdown.component.js +0 -276
  397. package/dist/lib/components/mention/mention-dropdown.component.js.map +0 -1
  398. package/dist/lib/components/mention/mention-editor.component.d.ts +0 -256
  399. package/dist/lib/components/mention/mention-editor.component.d.ts.map +0 -1
  400. package/dist/lib/components/mention/mention-editor.component.js +0 -1233
  401. package/dist/lib/components/mention/mention-editor.component.js.map +0 -1
  402. package/dist/lib/components/message/message-input-box.component.d.ts +0 -137
  403. package/dist/lib/components/message/message-input-box.component.d.ts.map +0 -1
  404. package/dist/lib/components/message/message-input-box.component.js +0 -321
  405. package/dist/lib/components/message/message-input-box.component.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"realtime-composer.component.js","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-composer.component.ts","../../../../src/lib/components/realtime/realtime-composer.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, ElementRef, EventEmitter, Input, Output, ViewChild, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { RealtimeSessionService } from '../../services/realtime-session.service';\n\n/**\n * The call overlay's BOTTOM DOCK — the progressive-disclosure composer\n * (`plans/realtime/mockups/redesign-a-progressive.html`). One component, two shapes,\n * keyed off the overlay's disclosure {@link Level}:\n *\n * - **Levels 0–1 (phone-call strip)** — big round call controls, centered: Mute, the\n * Captions toggle (level 1+, arriving WITH the text it controls), the Details peek\n * (level 0 paths where the surface panel isn't earned yet — lets the user look at the\n * Activity/Whiteboard panels on demand), and End call. Level 1 adds the whispered\n * \"press T to type\" hint — typing exists, but there's no visible composer yet.\n * - **Level 2+ (the dock)** — mute/captions shrink to compact minis and the in-call text\n * input docks beside them (one bottom bar, per Redesign A's fused composer+controls).\n * Submit calls {@link RealtimeSessionService.SendText}, which injects the text as a user\n * turn into the SAME live voice call.\n *\n * Mute talks to the session service directly (pure local toggle); captions / Details /\n * End are emitted up so the overlay shell owns that state and lifecycle.\n */\n@Component({\n standalone: true,\n selector: 'mj-realtime-composer',\n imports: [CommonModule, FormsModule],\n templateUrl: './realtime-composer.component.html',\n styleUrl: './realtime-composer.component.css'\n})\nexport class RealtimeComposerComponent {\n /**\n * Whether the typed-input dock is OPEN. A two-way door owned by the user: the strip's\n * Type control (or the T hotkey) opens it; the dock's hide control closes it — typing\n * never becomes permanent chrome. Default closed (voice-first), reset per session.\n */\n @Input() Open = false;\n\n /** Emitted when the user opens (Type control / typing) or closes (hide control) the dock. */\n @Output() OpenChanged = new EventEmitter<boolean>();\n\n /** Whether captions are currently shown (drives the captions control's active state). */\n @Input() CaptionsOn = true;\n\n /** Whether the Details peek control renders (true until the surface panel is earned). */\n @Input() ShowDetails = false;\n\n /** Whether the Details peek is currently open (active state on the control). */\n @Input() DetailsOn = false;\n\n /** Emitted when the user toggles captions; the overlay flips its caption state. */\n @Output() CaptionsToggled = new EventEmitter<boolean>();\n\n /** Emitted when the user toggles the Details peek (the on-demand surface panel). */\n @Output() DetailsToggled = new EventEmitter<void>();\n\n /** Emitted when the user ends the call from the strip's End control. */\n @Output() EndRequested = new EventEmitter<void>();\n\n /** Current draft text in the dock's composer input. */\n public Draft = '';\n\n /** Local mic mute state, reflected from the service. */\n public IsMuted = false;\n\n @ViewChild('dockInput') private dockInput?: ElementRef<HTMLInputElement>;\n\n private voice = inject(RealtimeSessionService);\n\n /** True when there's non-whitespace text to send. */\n public get CanSend(): boolean {\n return this.Draft.trim().length > 0;\n }\n\n /** True while the big-controls phone-call strip renders (instead of the dock). */\n public get StripMode(): boolean {\n return !this.Open;\n }\n\n /** Toggle the local microphone mute. */\n public ToggleMute(): void {\n this.IsMuted = this.voice.ToggleMute();\n }\n\n /** Toggle captions visibility and notify the overlay. */\n public ToggleCaptions(): void {\n this.CaptionsOn = !this.CaptionsOn;\n this.CaptionsToggled.emit(this.CaptionsOn);\n }\n\n /** Focuses the dock's text input (the overlay's T-to-type hotkey lands here). */\n public FocusInput(): void {\n this.dockInput?.nativeElement.focus();\n }\n\n /** Send the typed text into the live session, then clear the input. */\n public Send(): void {\n if (!this.CanSend) {\n return;\n }\n this.voice.SendText(this.Draft);\n this.Draft = '';\n }\n\n /** Enter sends (Shift+Enter is free for future multiline if the input becomes a textarea). */\n public OnKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n this.Send();\n }\n }\n}\n","@if (StripMode) {\n <!-- Levels 0–1: phone-call strip — 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 — 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 — 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 — 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 — joins this same voice call…\"\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\">↵ 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 — 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"]}
1
+ {"version":3,"file":"realtime-composer.component.js","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-composer.component.ts","../../../../src/lib/components/realtime/realtime-composer.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { RealtimeSessionService } from '../../services/realtime-session.service';\n\n/**\n * The call overlay's BOTTOM DOCK — the progressive-disclosure composer\n * (`plans/realtime/mockups/redesign-a-progressive.html`). One component, two shapes,\n * keyed off the overlay's disclosure {@link Level}:\n *\n * - **Levels 0–1 (phone-call strip)** — big round call controls, centered: Mute, the\n * Captions toggle (level 1+, arriving WITH the text it controls), the Details peek\n * (level 0 paths where the surface panel isn't earned yet — lets the user look at the\n * Activity/Whiteboard panels on demand), the Type control, and End call. There's no visible\n * composer yet — the Type control opens it, and so does simply starting to type (the overlay\n * captures the first printable keystroke and seeds it via {@link AppendAndFocus}).\n * - **Level 2+ (the dock)** — mute/captions shrink to compact minis and the in-call text\n * input docks beside them (one bottom bar, per Redesign A's fused composer+controls).\n * Submit calls {@link RealtimeSessionService.SendText}, which injects the text as a user\n * turn into the SAME live voice call.\n *\n * Mute talks to the session service directly (pure local toggle); captions / Details /\n * End are emitted up so the overlay shell owns that state and lifecycle.\n */\n@Component({\n standalone: true,\n selector: 'mj-realtime-composer',\n imports: [CommonModule, FormsModule],\n templateUrl: './realtime-composer.component.html',\n styleUrl: './realtime-composer.component.css'\n})\nexport class RealtimeComposerComponent {\n /**\n * Whether the typed-input dock is OPEN. A two-way door owned by the user: the strip's\n * Type control (or the T hotkey) opens it; the dock's hide control closes it — typing\n * never becomes permanent chrome. Default closed (voice-first), reset per session.\n */\n @Input() Open = false;\n\n /**\n * COMPACT (Calm Orb · overlay) presentation: collapse the phone-call strip to the\n * mockup's lean dock — **Mute + End + a \"•••\"** overflow button. The \"•••\" blooms a small\n * sheet hosting the secondary actions (Captions / Details / Type). The fused level-2 dock\n * (minis + text input) is unchanged. Fed from the overlay's resolved `Ui.compact`.\n * Default `false` (the full 5-button strip is unchanged).\n */\n @Input() Compact = false;\n\n /** Emitted when the user opens (Type control / typing) or closes (hide control) the dock. */\n @Output() OpenChanged = new EventEmitter<boolean>();\n\n /** Whether captions are currently shown (drives the captions control's active state). */\n @Input() CaptionsOn = true;\n\n /** Whether the Details peek control renders (true until the surface panel is earned). */\n @Input() ShowDetails = false;\n\n /** Whether the Details peek is currently open (active state on the control). */\n @Input() DetailsOn = false;\n\n /** Emitted when the user toggles captions; the overlay flips its caption state. */\n @Output() CaptionsToggled = new EventEmitter<boolean>();\n\n /** Emitted when the user toggles the Details peek (the on-demand surface panel). */\n @Output() DetailsToggled = new EventEmitter<void>();\n\n /** Emitted when the user ends the call from the strip's End control. */\n @Output() EndRequested = new EventEmitter<void>();\n\n /** Emitted with the new muted state whenever the user toggles the mic from the dock. */\n @Output() MuteChanged = new EventEmitter<boolean>();\n\n /** Current draft text in the dock's composer input. */\n public Draft = '';\n\n /**\n * The mic mute state. A two-way reflection: the overlay may push it down (e.g. its\n * `SetMuted()` / focus-pill toggle) so all mute affordances stay in sync, and this\n * component updates it locally + emits {@link MuteChanged} when its own button is used.\n */\n @Input() IsMuted = false;\n\n @ViewChild('dockInput') private dockInput?: ElementRef<HTMLInputElement>;\n\n private realtime = inject(RealtimeSessionService);\n\n /** True when there's non-whitespace text to send. */\n public get CanSend(): boolean {\n return this.Draft.trim().length > 0;\n }\n\n /** True while the big-controls phone-call strip renders (instead of the dock). */\n public get StripMode(): boolean {\n return !this.Open;\n }\n\n /**\n * Whether the compact \"•••\" overflow sheet (Captions / Details / Type) is open. Only used\n * in {@link Compact} strip mode; any outside click or action selection closes it.\n */\n public MoreOpen = false;\n\n /** Open/close the compact overflow sheet (stops propagation so the outside-click close skips it). */\n public ToggleMore(event: MouseEvent): void {\n event.stopPropagation();\n this.MoreOpen = !this.MoreOpen;\n }\n\n /** Any outside click closes the compact overflow sheet. */\n @HostListener('document:click')\n public OnDocumentClick(): void {\n if (this.MoreOpen) {\n this.MoreOpen = false;\n }\n }\n\n /** Toggle the local microphone mute and surface the new state to the overlay. */\n public ToggleMute(): void {\n this.IsMuted = this.realtime.ToggleMute();\n this.MuteChanged.emit(this.IsMuted);\n }\n\n /** Toggle captions visibility and notify the overlay. */\n public ToggleCaptions(): void {\n this.CaptionsOn = !this.CaptionsOn;\n this.CaptionsToggled.emit(this.CaptionsOn);\n }\n\n /** Focuses the dock's text input (the overlay's Type control lands here). */\n public FocusInput(): void {\n this.dockInput?.nativeElement.focus();\n }\n\n /**\n * TYPE-TO-COMPOSE: the overlay captured a printable keystroke while nothing was focused, so seed\n * the draft with that character, focus the input, and put the caret at the end — the user just\n * keeps typing and their first key isn't lost. Appends (rather than replaces) so a leftover draft\n * is preserved. The native value is synced inline so the caret math is correct before Angular's\n * next change-detection pass reconciles ngModel.\n *\n * @param text the character(s) to seed (typically the single key that opened the composer).\n */\n public AppendAndFocus(text: string): void {\n this.Draft = (this.Draft ?? '') + text;\n const el = this.dockInput?.nativeElement;\n if (el) {\n el.value = this.Draft;\n el.focus();\n el.setSelectionRange(this.Draft.length, this.Draft.length);\n }\n }\n\n /** Send the typed text into the live session, then clear the input. */\n public Send(): void {\n if (!this.CanSend) {\n return;\n }\n this.realtime.SendText(this.Draft);\n this.Draft = '';\n }\n\n /** Enter sends (Shift+Enter is free for future multiline if the input becomes a textarea). */\n public OnKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n this.Send();\n }\n }\n}\n","@if (StripMode && Compact) {\n <!-- COMPACT (Calm Orb · overlay): the lean dock — Mute + End + a first-class Captions toggle\n (kept out of the \"•••\" so text stays ONE TAP in the overlay, where the banner no longer\n carries a duplicate CC) + a \"•••\" that blooms a small sheet with the remaining secondary\n actions (Details / Type). Round controls, red End — 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 — 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–1: phone-call strip — 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 — 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 — 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 — 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 — joins this same voice call…\"\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\">↵ 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 — 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"]}
@@ -63,8 +63,6 @@ export declare class RealtimeDelegationCardComponent {
63
63
  get ResultPreview(): string;
64
64
  /** Tooltip text for the provenance shield icon. */
65
65
  get ProvenanceTitle(): string;
66
- /** Toggles the done chip's inline expansion. */
67
- ToggleExpanded(): void;
68
66
  static ɵfac: i0.ɵɵFactoryDeclaration<RealtimeDelegationCardComponent, never>;
69
67
  static ɵcmp: i0.ɵɵComponentDeclaration<RealtimeDelegationCardComponent, "mj-realtime-delegation-card", never, { "Card": { "alias": "Card"; "required": true; }; "DevMode": { "alias": "DevMode"; "required": false; }; }, { "OpenRunRequested": "OpenRunRequested"; "OpenArtifactRequested": "OpenArtifactRequested"; "CancelRequested": "CancelRequested"; }, never, never, true, never>;
70
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"realtime-delegation-card.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-delegation-card.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAiB,MAAM,eAAe,CAAC;AAEvE,OAAO,EAAE,wBAAwB,EAAqB,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;;AAEnF;;;;;;;;;;;;;;;;GAgBG;AACH,qBAOa,+BAA+B;IAC1C,yEAAyE;IACzE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAO;IAE9C,uFAAuF;IAC5D,IAAI,EAAG,wBAAwB,CAAC;IAE3D,wEAAwE;IAC/D,OAAO,UAAS;IAEzB,mFAAmF;IACzE,gBAAgB,uBAA8B;IAExD,+FAA+F;IACrF,qBAAqB,yCAAgD;IAE/E;;;;;;OAMG;IACO,eAAe,uBAA8B;IAEvD,6EAA6E;IACtE,QAAQ,UAAS;IAExB,6FAA6F;IAC7F,IAAW,SAAS,IAAI,wBAAwB,EAAE,CAEjD;IAED,iFAAiF;IAC1E,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,wBAAwB,GAAG,IAAI;IAKhF,gFAAgF;IAChF,IAAW,WAAW,IAAI,OAAO,CAEhC;IAED,gEAAgE;IACzD,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAOvC,oEAAoE;IAC7D,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAO1C,gFAAgF;IAChF,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED;;;OAGG;IACH,IAAW,cAAc,IAAI,OAAO,CAEnC;IAED,mFAAmF;IACnF,IAAW,UAAU,IAAI,MAAM,CAI9B;IAED,wEAAwE;IACxE,IAAW,aAAa,IAAI,MAAM,CAIjC;IAED,mDAAmD;IACnD,IAAW,eAAe,IAAI,MAAM,CAGnC;IAED,gDAAgD;IACzC,cAAc,IAAI,IAAI;yCA9FlB,+BAA+B;2CAA/B,+BAA+B;CAiG3C"}
1
+ {"version":3,"file":"realtime-delegation-card.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-delegation-card.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAiB,MAAM,eAAe,CAAC;AAGvE,OAAO,EAAE,wBAAwB,EAAqB,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;;AAEnF;;;;;;;;;;;;;;;;GAgBG;AACH,qBAOa,+BAA+B;IAC1C,yEAAyE;IACzE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAO;IAE9C,uFAAuF;IAC5D,IAAI,EAAG,wBAAwB,CAAC;IAE3D,wEAAwE;IAC/D,OAAO,UAAS;IAEzB,mFAAmF;IACzE,gBAAgB,uBAA8B;IAExD,+FAA+F;IACrF,qBAAqB,yCAAgD;IAE/E;;;;;;OAMG;IACO,eAAe,uBAA8B;IAEvD,6EAA6E;IACtE,QAAQ,UAAS;IAExB,6FAA6F;IAC7F,IAAW,SAAS,IAAI,wBAAwB,EAAE,CAEjD;IAED,iFAAiF;IAC1E,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,wBAAwB,GAAG,IAAI;IAKhF,gFAAgF;IAChF,IAAW,WAAW,IAAI,OAAO,CAEhC;IAED,gEAAgE;IACzD,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAOvC,oEAAoE;IAC7D,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAO1C,gFAAgF;IAChF,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED;;;OAGG;IACH,IAAW,cAAc,IAAI,OAAO,CAEnC;IAED,mFAAmF;IACnF,IAAW,UAAU,IAAI,MAAM,CAI9B;IAED,wEAAwE;IACxE,IAAW,aAAa,IAAI,MAAM,CAIjC;IAED,mDAAmD;IACnD,IAAW,eAAe,IAAI,MAAM,CAGnC;yCA3FU,+BAA+B;2CAA/B,+BAA+B;CA4F3C"}
@@ -1,8 +1,10 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
+ import { MJAccordionModule } from '@memberjunction/ng-ui-components';
3
4
  import { FriendlyStepLabel } from './realtime-session-state';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@angular/common";
7
+ import * as i2 from "@memberjunction/ng-ui-components";
6
8
  const _forTrack0 = ($index, $item) => $item.ArtifactVersionID;
7
9
  function RealtimeDelegationCardComponent_Conditional_0_Conditional_9_Template(rf, ctx) { if (rf & 1) {
8
10
  const _r2 = i0.ɵɵgetCurrentView();
@@ -72,10 +74,37 @@ function RealtimeDelegationCardComponent_Conditional_0_Template(rf, ctx) { if (r
72
74
  i0.ɵɵadvance();
73
75
  i0.ɵɵconditional(ctx_r2.Card.Percentage != null ? 16 : 17);
74
76
  } }
75
- function RealtimeDelegationCardComponent_Conditional_1_For_15_Template(rf, ctx) { if (rf & 1) {
77
+ function RealtimeDelegationCardComponent_Conditional_1_ng_template_1_Template(rf, ctx) { if (rf & 1) {
78
+ i0.ɵɵelement(0, "i", 22);
79
+ i0.ɵɵelementStart(1, "span", 23);
80
+ i0.ɵɵtext(2);
81
+ i0.ɵɵelementEnd();
82
+ i0.ɵɵelementStart(3, "span", 24);
83
+ i0.ɵɵtext(4, "\u00B7");
84
+ i0.ɵɵelementEnd();
85
+ i0.ɵɵelementStart(5, "span", 25);
86
+ i0.ɵɵtext(6);
87
+ i0.ɵɵelementEnd();
88
+ i0.ɵɵelementStart(7, "span", 26);
89
+ i0.ɵɵelement(8, "i", 27);
90
+ i0.ɵɵtext(9);
91
+ i0.ɵɵelementEnd();
92
+ } if (rf & 2) {
93
+ const ctx_r2 = i0.ɵɵnextContext(2);
94
+ i0.ɵɵproperty("ngClass", ctx_r2.Card.Success ? "fa-check" : "fa-xmark");
95
+ i0.ɵɵadvance(2);
96
+ i0.ɵɵtextInterpolate(ctx_r2.Card.AgentName);
97
+ i0.ɵɵadvance(4);
98
+ i0.ɵɵtextInterpolate(ctx_r2.ResultPreview);
99
+ i0.ɵɵadvance(2);
100
+ i0.ɵɵproperty("title", ctx_r2.ProvenanceTitle);
101
+ i0.ɵɵadvance();
102
+ i0.ɵɵtextInterpolate1(" via ", ctx_r2.Card.AgentName, " ");
103
+ } }
104
+ function RealtimeDelegationCardComponent_Conditional_1_ng_template_2_For_1_Template(rf, ctx) { if (rf & 1) {
76
105
  const _r5 = i0.ɵɵgetCurrentView();
77
106
  i0.ɵɵelementStart(0, "button", 29);
78
- i0.ɵɵlistener("click", function RealtimeDelegationCardComponent_Conditional_1_For_15_Template_button_click_0_listener($event) { const artifact_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenArtifact($event, artifact_r6)); });
107
+ i0.ɵɵlistener("click", function RealtimeDelegationCardComponent_Conditional_1_ng_template_2_For_1_Template_button_click_0_listener($event) { const artifact_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenArtifact($event, artifact_r6)); });
79
108
  i0.ɵɵelement(1, "i", 30);
80
109
  i0.ɵɵelementStart(2, "span");
81
110
  i0.ɵɵtext(3, "View");
@@ -86,19 +115,28 @@ function RealtimeDelegationCardComponent_Conditional_1_For_15_Template(rf, ctx)
86
115
  const artifact_r6 = ctx.$implicit;
87
116
  i0.ɵɵproperty("title", "View " + artifact_r6.Name);
88
117
  } }
89
- function RealtimeDelegationCardComponent_Conditional_1_Conditional_16_Template(rf, ctx) { if (rf & 1) {
118
+ function RealtimeDelegationCardComponent_Conditional_1_ng_template_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
90
119
  const _r7 = i0.ɵɵgetCurrentView();
91
120
  i0.ɵɵelementStart(0, "button", 15);
92
- i0.ɵɵlistener("click", function RealtimeDelegationCardComponent_Conditional_1_Conditional_16_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenRun($event)); });
121
+ i0.ɵɵlistener("click", function RealtimeDelegationCardComponent_Conditional_1_ng_template_2_Conditional_2_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenRun($event)); });
93
122
  i0.ɵɵelement(1, "i", 16);
94
123
  i0.ɵɵelementStart(2, "span");
95
124
  i0.ɵɵtext(3, "Open run");
96
125
  i0.ɵɵelementEnd()();
97
126
  } }
98
- function RealtimeDelegationCardComponent_Conditional_1_Conditional_17_For_4_Template(rf, ctx) { if (rf & 1) {
127
+ function RealtimeDelegationCardComponent_Conditional_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
128
+ i0.ɵɵrepeaterCreate(0, RealtimeDelegationCardComponent_Conditional_1_ng_template_2_For_1_Template, 5, 1, "button", 28, _forTrack0);
129
+ i0.ɵɵconditionalCreate(2, RealtimeDelegationCardComponent_Conditional_1_ng_template_2_Conditional_2_Template, 4, 0, "button", 7);
130
+ } if (rf & 2) {
131
+ const ctx_r2 = i0.ɵɵnextContext(2);
132
+ i0.ɵɵrepeater(ctx_r2.Artifacts);
133
+ i0.ɵɵadvance(2);
134
+ i0.ɵɵconditional(ctx_r2.ShowOpenRun ? 2 : -1);
135
+ } }
136
+ function RealtimeDelegationCardComponent_Conditional_1_ng_template_3_For_4_Template(rf, ctx) { if (rf & 1) {
99
137
  const _r8 = i0.ɵɵgetCurrentView();
100
- i0.ɵɵelementStart(0, "button", 35);
101
- i0.ɵɵlistener("click", function RealtimeDelegationCardComponent_Conditional_1_Conditional_17_For_4_Template_button_click_0_listener($event) { const artifact_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenArtifact($event, artifact_r9)); });
138
+ i0.ɵɵelementStart(0, "button", 36);
139
+ i0.ɵɵlistener("click", function RealtimeDelegationCardComponent_Conditional_1_ng_template_3_For_4_Template_button_click_0_listener($event) { const artifact_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenArtifact($event, artifact_r9)); });
102
140
  i0.ɵɵelement(1, "i", 30);
103
141
  i0.ɵɵelementStart(2, "span");
104
142
  i0.ɵɵtext(3);
@@ -111,20 +149,20 @@ function RealtimeDelegationCardComponent_Conditional_1_Conditional_17_For_4_Temp
111
149
  i0.ɵɵadvance(3);
112
150
  i0.ɵɵtextInterpolate(artifact_r9.Name);
113
151
  } }
114
- function RealtimeDelegationCardComponent_Conditional_1_Conditional_17_Conditional_5_Conditional_3_Template(rf, ctx) { if (rf & 1) {
152
+ function RealtimeDelegationCardComponent_Conditional_1_ng_template_3_Conditional_5_Conditional_3_Template(rf, ctx) { if (rf & 1) {
115
153
  const _r10 = i0.ɵɵgetCurrentView();
116
- i0.ɵɵelementStart(0, "button", 37);
117
- i0.ɵɵlistener("click", function RealtimeDelegationCardComponent_Conditional_1_Conditional_17_Conditional_5_Conditional_3_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OpenRun($event)); });
154
+ i0.ɵɵelementStart(0, "button", 38);
155
+ i0.ɵɵlistener("click", function RealtimeDelegationCardComponent_Conditional_1_ng_template_3_Conditional_5_Conditional_3_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OpenRun($event)); });
118
156
  i0.ɵɵelement(1, "i", 16);
119
157
  i0.ɵɵelementStart(2, "span");
120
158
  i0.ɵɵtext(3, "Open run");
121
159
  i0.ɵɵelementEnd()();
122
160
  } }
123
- function RealtimeDelegationCardComponent_Conditional_1_Conditional_17_Conditional_5_Template(rf, ctx) { if (rf & 1) {
124
- i0.ɵɵelementStart(0, "div", 34);
125
- i0.ɵɵelement(1, "i", 25);
161
+ function RealtimeDelegationCardComponent_Conditional_1_ng_template_3_Conditional_5_Template(rf, ctx) { if (rf & 1) {
162
+ i0.ɵɵelementStart(0, "div", 35);
163
+ i0.ɵɵelement(1, "i", 27);
126
164
  i0.ɵɵtext(2);
127
- i0.ɵɵconditionalCreate(3, RealtimeDelegationCardComponent_Conditional_1_Conditional_17_Conditional_5_Conditional_3_Template, 4, 0, "button", 36);
165
+ i0.ɵɵconditionalCreate(3, RealtimeDelegationCardComponent_Conditional_1_ng_template_3_Conditional_5_Conditional_3_Template, 4, 0, "button", 37);
128
166
  i0.ɵɵelementEnd();
129
167
  } if (rf & 2) {
130
168
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -135,12 +173,12 @@ function RealtimeDelegationCardComponent_Conditional_1_Conditional_17_Conditiona
135
173
  i0.ɵɵadvance();
136
174
  i0.ɵɵconditional(ctx_r2.ShowOpenRun ? 3 : -1);
137
175
  } }
138
- function RealtimeDelegationCardComponent_Conditional_1_Conditional_17_Template(rf, ctx) { if (rf & 1) {
139
- i0.ɵɵelementStart(0, "div", 28)(1, "div", 32);
176
+ function RealtimeDelegationCardComponent_Conditional_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {
177
+ i0.ɵɵelementStart(0, "div", 32)(1, "div", 33);
140
178
  i0.ɵɵtext(2);
141
179
  i0.ɵɵelementEnd();
142
- i0.ɵɵrepeaterCreate(3, RealtimeDelegationCardComponent_Conditional_1_Conditional_17_For_4_Template, 5, 2, "button", 33, _forTrack0);
143
- i0.ɵɵconditionalCreate(5, RealtimeDelegationCardComponent_Conditional_1_Conditional_17_Conditional_5_Template, 4, 4, "div", 34);
180
+ i0.ɵɵrepeaterCreate(3, RealtimeDelegationCardComponent_Conditional_1_ng_template_3_For_4_Template, 5, 2, "button", 34, _forTrack0);
181
+ i0.ɵɵconditionalCreate(5, RealtimeDelegationCardComponent_Conditional_1_ng_template_3_Conditional_5_Template, 4, 4, "div", 35);
144
182
  i0.ɵɵelementEnd();
145
183
  } if (rf & 2) {
146
184
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -153,53 +191,15 @@ function RealtimeDelegationCardComponent_Conditional_1_Conditional_17_Template(r
153
191
  } }
154
192
  function RealtimeDelegationCardComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
155
193
  const _r4 = i0.ɵɵgetCurrentView();
156
- i0.ɵɵelementStart(0, "div", 1)(1, "div", 18)(2, "button", 19);
157
- i0.ɵɵlistener("click", function RealtimeDelegationCardComponent_Conditional_1_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ToggleExpanded()); });
158
- i0.ɵɵelement(3, "i", 20);
159
- i0.ɵɵelementStart(4, "span", 21);
160
- i0.ɵɵtext(5);
161
- i0.ɵɵelementEnd();
162
- i0.ɵɵelementStart(6, "span", 22);
163
- i0.ɵɵtext(7, "\u00B7");
164
- i0.ɵɵelementEnd();
165
- i0.ɵɵelementStart(8, "span", 23);
166
- i0.ɵɵtext(9);
167
- i0.ɵɵelementEnd();
168
- i0.ɵɵelementStart(10, "span", 24);
169
- i0.ɵɵelement(11, "i", 25);
170
- i0.ɵɵtext(12);
171
- i0.ɵɵelementEnd();
172
- i0.ɵɵelement(13, "i", 26);
173
- i0.ɵɵelementEnd();
174
- i0.ɵɵrepeaterCreate(14, RealtimeDelegationCardComponent_Conditional_1_For_15_Template, 5, 1, "button", 27, _forTrack0);
175
- i0.ɵɵconditionalCreate(16, RealtimeDelegationCardComponent_Conditional_1_Conditional_16_Template, 4, 0, "button", 7);
176
- i0.ɵɵelementEnd();
177
- i0.ɵɵconditionalCreate(17, RealtimeDelegationCardComponent_Conditional_1_Conditional_17_Template, 6, 2, "div", 28);
194
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 18);
195
+ i0.ɵɵtwoWayListener("ExpandedChange", function RealtimeDelegationCardComponent_Conditional_1_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.Expanded, $event) || (ctx_r2.Expanded = $event); return i0.ɵɵresetView($event); });
196
+ i0.ɵɵtemplate(1, RealtimeDelegationCardComponent_Conditional_1_ng_template_1_Template, 10, 5, "ng-template", 19)(2, RealtimeDelegationCardComponent_Conditional_1_ng_template_2_Template, 3, 1, "ng-template", 20)(3, RealtimeDelegationCardComponent_Conditional_1_ng_template_3_Template, 6, 2, "ng-template", 21);
178
197
  i0.ɵɵelementEnd();
179
198
  } if (rf & 2) {
180
199
  const ctx_r2 = i0.ɵɵnextContext();
181
- i0.ɵɵadvance(2);
182
- i0.ɵɵclassProp("done-chip--failed", !ctx_r2.Card.Success);
183
- i0.ɵɵproperty("title", ctx_r2.Expanded ? "Collapse result" : "Expand result");
184
- i0.ɵɵattribute("aria-expanded", ctx_r2.Expanded);
185
- i0.ɵɵadvance();
186
- i0.ɵɵproperty("ngClass", ctx_r2.Card.Success ? "fa-check" : "fa-xmark");
187
- i0.ɵɵadvance(2);
188
- i0.ɵɵtextInterpolate(ctx_r2.Card.AgentName);
189
- i0.ɵɵadvance(4);
190
- i0.ɵɵtextInterpolate(ctx_r2.ResultPreview);
191
- i0.ɵɵadvance(2);
192
- i0.ɵɵproperty("title", ctx_r2.ProvenanceTitle);
193
- i0.ɵɵadvance();
194
- i0.ɵɵtextInterpolate1(" via ", ctx_r2.Card.AgentName, " ");
195
- i0.ɵɵadvance();
196
- i0.ɵɵproperty("ngClass", ctx_r2.Expanded ? "fa-chevron-up" : "fa-chevron-down");
197
- i0.ɵɵadvance();
198
- i0.ɵɵrepeater(ctx_r2.Artifacts);
199
- i0.ɵɵadvance(2);
200
- i0.ɵɵconditional(ctx_r2.ShowOpenRun ? 16 : -1);
201
- i0.ɵɵadvance();
202
- i0.ɵɵconditional(ctx_r2.Expanded ? 17 : -1);
200
+ i0.ɵɵclassProp("done-accordion--failed", !ctx_r2.Card.Success);
201
+ i0.ɵɵproperty("FlushBody", true);
202
+ i0.ɵɵtwoWayProperty("Expanded", ctx_r2.Expanded);
203
203
  } }
204
204
  /**
205
205
  * Renders a single delegation in the live session thread:
@@ -294,20 +294,16 @@ export class RealtimeDelegationCardComponent {
294
294
  const run = this.Card.RunRef ? ` (run ${this.Card.RunRef})` : '';
295
295
  return `Result produced by ${this.Card.AgentName}'s own agent run${run} — not invented by the voice co-agent.`;
296
296
  }
297
- /** Toggles the done chip's inline expansion. */
298
- ToggleExpanded() {
299
- this.Expanded = !this.Expanded;
300
- }
301
297
  static ɵfac = function RealtimeDelegationCardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || RealtimeDelegationCardComponent)(); };
302
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RealtimeDelegationCardComponent, selectors: [["mj-realtime-delegation-card"]], inputs: { Card: "Card", DevMode: "DevMode" }, outputs: { OpenRunRequested: "OpenRunRequested", OpenArtifactRequested: "OpenArtifactRequested", CancelRequested: "CancelRequested" }, decls: 2, vars: 1, consts: [["role", "status", "aria-live", "polite", 1, "work-card"], [1, "done"], [1, "work-card__head"], ["aria-hidden", "true", 1, "avatar"], [1, "work-card__title"], [1, "pill", "pill--running"], ["aria-hidden", "true", 1, "fa-solid", "fa-spinner", "spin"], ["type", "button", "title", "Open the delegated agent run record", 1, "dev-link"], ["type", "button", "title", "Cancel this work", "aria-label", "Cancel this work", 1, "cancel-work", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-xmark"], [1, "work-card__step"], [1, "work-card__detail"], [1, "work-progress"], [1, "work-progress__fill", 3, "width"], [1, "work-progress__fill", "work-progress__fill--slide"], ["type", "button", "title", "Open the delegated agent run record", 1, "dev-link", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "work-progress__fill"], [1, "done-row"], ["type", "button", 1, "done-chip", 3, "click", "title"], ["aria-hidden", "true", 1, "fa-solid", "done-chip__mark", 3, "ngClass"], [1, "done-chip__agent"], ["aria-hidden", "true", 1, "done-chip__sep"], [1, "done-chip__preview"], [1, "via-badge"], ["aria-hidden", "true", 1, "fa-solid", "fa-shield-halved", 3, "title"], ["aria-hidden", "true", 1, "fa-solid", "done-chip__chev", 3, "ngClass"], ["type", "button", 1, "artifact-link", 3, "title"], [1, "done-detail"], ["type", "button", 1, "artifact-link", 3, "click", "title"], ["aria-hidden", "true", 1, "fa-solid", "fa-file-lines"], ["aria-hidden", "true", 1, "fa-solid", "fa-arrow-right"], [1, "done-detail__body"], ["type", "button", 1, "artifact-link", "artifact-link--detail", 3, "title"], [1, "done-detail__meta"], ["type", "button", 1, "artifact-link", "artifact-link--detail", 3, "click", "title"], ["type", "button", "title", "Open the delegated agent run record", 1, "dev-link", "dev-link--inline"], ["type", "button", "title", "Open the delegated agent run record", 1, "dev-link", "dev-link--inline", 3, "click"]], template: function RealtimeDelegationCardComponent_Template(rf, ctx) { if (rf & 1) {
303
- i0.ɵɵconditionalCreate(0, RealtimeDelegationCardComponent_Conditional_0_Template, 18, 8, "div", 0)(1, RealtimeDelegationCardComponent_Conditional_1_Template, 18, 12, "div", 1);
298
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RealtimeDelegationCardComponent, selectors: [["mj-realtime-delegation-card"]], inputs: { Card: "Card", DevMode: "DevMode" }, outputs: { OpenRunRequested: "OpenRunRequested", OpenArtifactRequested: "OpenArtifactRequested", CancelRequested: "CancelRequested" }, decls: 2, vars: 1, consts: [["role", "status", "aria-live", "polite", 1, "work-card"], ["Size", "sm", 1, "done-accordion", 3, "done-accordion--failed", "FlushBody", "Expanded"], [1, "work-card__head"], ["aria-hidden", "true", 1, "avatar"], [1, "work-card__title"], [1, "pill", "pill--running"], ["aria-hidden", "true", 1, "fa-solid", "fa-spinner", "spin"], ["type", "button", "title", "Open the delegated agent run record", 1, "dev-link"], ["type", "button", "title", "Cancel this work", "aria-label", "Cancel this work", 1, "cancel-work", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-xmark"], [1, "work-card__step"], [1, "work-card__detail"], [1, "work-progress"], [1, "work-progress__fill", 3, "width"], [1, "work-progress__fill", "work-progress__fill--slide"], ["type", "button", "title", "Open the delegated agent run record", 1, "dev-link", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "work-progress__fill"], ["Size", "sm", 1, "done-accordion", 3, "ExpandedChange", "FlushBody", "Expanded"], ["mjAccordionTitle", ""], ["mjAccordionActions", ""], ["mjAccordionBody", ""], ["aria-hidden", "true", 1, "fa-solid", "done-chip__mark", 3, "ngClass"], [1, "done-chip__agent"], ["aria-hidden", "true", 1, "done-chip__sep"], [1, "done-chip__preview"], [1, "via-badge"], ["aria-hidden", "true", 1, "fa-solid", "fa-shield-halved", 3, "title"], ["type", "button", 1, "artifact-link", 3, "title"], ["type", "button", 1, "artifact-link", 3, "click", "title"], ["aria-hidden", "true", 1, "fa-solid", "fa-file-lines"], ["aria-hidden", "true", 1, "fa-solid", "fa-arrow-right"], [1, "done-detail"], [1, "done-detail__body"], ["type", "button", 1, "artifact-link", "artifact-link--detail", 3, "title"], [1, "done-detail__meta"], ["type", "button", 1, "artifact-link", "artifact-link--detail", 3, "click", "title"], ["type", "button", "title", "Open the delegated agent run record", 1, "dev-link", "dev-link--inline"], ["type", "button", "title", "Open the delegated agent run record", 1, "dev-link", "dev-link--inline", 3, "click"]], template: function RealtimeDelegationCardComponent_Template(rf, ctx) { if (rf & 1) {
299
+ i0.ɵɵconditionalCreate(0, RealtimeDelegationCardComponent_Conditional_0_Template, 18, 8, "div", 0)(1, RealtimeDelegationCardComponent_Conditional_1_Template, 4, 4, "mj-accordion-panel", 1);
304
300
  } if (rf & 2) {
305
301
  i0.ɵɵconditional(!ctx.Card.Done ? 0 : 1);
306
- } }, dependencies: [CommonModule, i1.NgClass], styles: ["[_nghost-%COMP%] {\n display: block;\n \n\n --sage: var(--mj-color-violet-400, #a78bfa);\n --sage-bg: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 12%, transparent);\n --sage-border: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 40%, transparent);\n}\n\n.avatar[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n font-weight: 600;\n font-size: 11px;\n flex-shrink: 0;\n background: var(--sage-bg);\n color: var(--mj-color-violet-300, var(--mj-text-primary));\n border: 1px solid var(--sage-border);\n}\n\n\n\n.work-card[_ngcontent-%COMP%] {\n border: 1px solid var(--sage-border);\n background: var(--sage-bg);\n border-radius: var(--mj-radius-lg, 12px);\n padding: 10px 14px;\n max-width: 560px;\n}\n.work-card__head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n}\n.work-card__title[_ngcontent-%COMP%] {\n font-weight: 700;\n font-size: 13px;\n color: var(--mj-text-primary);\n flex: 1;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.work-card__step[_ngcontent-%COMP%] {\n font-size: 12.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.work-card__detail[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n padding-left: 14px;\n margin-top: 3px;\n border-left: 2px solid var(--sage-border);\n}\n\n.pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 9999px);\n font-size: 10.5px;\n font-weight: 700;\n flex-shrink: 0;\n line-height: 1.5;\n}\n.pill--running[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--sage) 18%, transparent);\n color: var(--mj-color-violet-300, var(--mj-text-secondary));\n border: 1px solid var(--sage-border);\n}\n.pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 9px; }\n.spin[_ngcontent-%COMP%] { animation: _ngcontent-%COMP%_rt-spin 1.1s linear infinite; }\n\n\n\n.work-progress[_ngcontent-%COMP%] {\n height: 3px;\n border-radius: var(--mj-radius-full, 9999px);\n background: color-mix(in srgb, var(--sage) 18%, transparent);\n overflow: hidden;\n margin-top: 9px;\n position: relative;\n}\n.work-progress__fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: var(--mj-radius-full, 9999px);\n background: var(--sage);\n transition: width 240ms ease;\n}\n.work-progress__fill--slide[_ngcontent-%COMP%] {\n position: absolute;\n width: 35%;\n animation: _ngcontent-%COMP%_rt-slide 1.6s ease-in-out infinite;\n}\n\n\n\n.done[_ngcontent-%COMP%] {\n max-width: 560px;\n}\n.done-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.done-row[_ngcontent-%COMP%] .done-chip[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n\n\n.dev-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 9px;\n border-radius: var(--mj-radius-full, 9999px);\n border: 1px dashed var(--mj-border-strong);\n background: transparent;\n color: var(--mj-text-muted);\n font-family: inherit;\n font-size: 10.5px;\n font-weight: 700;\n white-space: nowrap;\n flex-shrink: 0;\n cursor: pointer;\n transition: color 140ms ease, border-color 140ms ease, background 140ms ease;\n}\n.dev-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-link, var(--mj-brand-primary));\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n.dev-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n.dev-link--inline[_ngcontent-%COMP%] {\n margin-left: 8px;\n}\n\n\n\n.artifact-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 10px;\n border-radius: var(--mj-radius-full, 9999px);\n border: 1px solid var(--sage-border);\n background: var(--sage-bg);\n color: var(--mj-color-violet-300, var(--mj-text-secondary));\n font-family: inherit;\n font-size: 10.5px;\n font-weight: 700;\n white-space: nowrap;\n flex-shrink: 0;\n cursor: pointer;\n transition: color 140ms ease, border-color 140ms ease, background 140ms ease;\n}\n.artifact-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n border-color: var(--sage);\n background: color-mix(in srgb, var(--sage) 18%, transparent);\n}\n.artifact-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n.artifact-link--detail[_ngcontent-%COMP%] {\n margin-top: 8px;\n max-width: 100%;\n}\n.artifact-link--detail[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.done-chip[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 7px;\n width: 100%;\n text-align: left;\n font-family: inherit;\n font-size: 12.5px;\n padding: 6px 12px;\n border-radius: var(--mj-radius-full, 9999px);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: border-color 140ms ease, background 140ms ease;\n}\n.done-chip[_ngcontent-%COMP%]:hover {\n border-color: var(--sage-border);\n background: var(--mj-bg-surface-hover, var(--mj-bg-surface));\n}\n.done-chip__mark[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-status-success);\n flex-shrink: 0;\n}\n.done-chip--failed[_ngcontent-%COMP%] .done-chip__mark[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n.done-chip--failed[_ngcontent-%COMP%] {\n border-color: var(--mj-status-error-border, var(--mj-border-default));\n}\n.done-chip__agent[_ngcontent-%COMP%] {\n font-weight: 700;\n color: var(--mj-text-primary);\n flex-shrink: 0;\n}\n.done-chip__sep[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n}\n.done-chip__preview[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--mj-text-secondary);\n}\n.via-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-color-violet-300, var(--mj-text-muted));\n flex-shrink: 0;\n}\n.via-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n cursor: help;\n}\n.done-chip__chev[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n\n\n.done-detail[_ngcontent-%COMP%] {\n margin-top: 6px;\n margin-left: 12px;\n padding: 10px 14px;\n border-left: 2px solid var(--sage);\n background: var(--mj-bg-surface);\n border-radius: 0 var(--mj-radius-lg, 12px) var(--mj-radius-lg, 12px) 0;\n border-top: 1px solid var(--mj-border-subtle, var(--mj-border-default));\n border-right: 1px solid var(--mj-border-subtle, var(--mj-border-default));\n border-bottom: 1px solid var(--mj-border-subtle, var(--mj-border-default));\n}\n.done-detail__body[_ngcontent-%COMP%] {\n font-size: 13px;\n line-height: 1.55;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n}\n.done-detail__meta[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 10.5px;\n font-weight: 700;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 5px;\n}\n.done-detail__meta[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n cursor: help;\n}\n\n@keyframes _ngcontent-%COMP%_rt-spin {\n to { transform: rotate(360deg); }\n}\n@keyframes _ngcontent-%COMP%_rt-slide {\n 0% { left: -35%; }\n 100% { left: 100%; }\n}\n\n\n\n.cancel-work[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n padding: 0;\n border-radius: var(--mj-radius-full, 9999px);\n border: 1px solid transparent;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n flex-shrink: 0;\n}\n.cancel-work[_ngcontent-%COMP%]:hover {\n color: var(--mj-status-error);\n border-color: var(--mj-status-error-border, var(--mj-status-error));\n background: color-mix(in srgb, var(--mj-status-error) 8%, transparent);\n}\n.cancel-work[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}"] });
302
+ } }, dependencies: [CommonModule, i1.NgClass, MJAccordionModule, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i2.MJAccordionActionsDirective, i2.MJAccordionBodyDirective], styles: ["[_nghost-%COMP%] {\n display: block;\n \n\n --sage: var(--mj-color-violet-400, #a78bfa);\n --sage-bg: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 12%, transparent);\n --sage-border: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 40%, transparent);\n}\n\n.avatar[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n font-weight: 600;\n font-size: 11px;\n flex-shrink: 0;\n background: var(--sage-bg);\n color: var(--mj-color-violet-300, var(--mj-text-primary));\n border: 1px solid var(--sage-border);\n}\n\n\n\n.work-card[_ngcontent-%COMP%] {\n border: 1px solid var(--sage-border);\n background: var(--sage-bg);\n border-radius: var(--mj-radius-lg, 12px);\n padding: 10px 14px;\n max-width: 560px;\n}\n.work-card__head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n}\n.work-card__title[_ngcontent-%COMP%] {\n font-weight: 700;\n font-size: 13px;\n color: var(--mj-text-primary);\n flex: 1;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.work-card__step[_ngcontent-%COMP%] {\n font-size: 12.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.work-card__detail[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n padding-left: 14px;\n margin-top: 3px;\n border-left: 2px solid var(--sage-border);\n}\n\n.pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 9999px);\n font-size: 10.5px;\n font-weight: 700;\n flex-shrink: 0;\n line-height: 1.5;\n}\n.pill--running[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--sage) 18%, transparent);\n color: var(--mj-color-violet-300, var(--mj-text-secondary));\n border: 1px solid var(--sage-border);\n}\n.pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 9px; }\n.spin[_ngcontent-%COMP%] { animation: _ngcontent-%COMP%_rt-spin 1.1s linear infinite; }\n\n\n\n.work-progress[_ngcontent-%COMP%] {\n height: 3px;\n border-radius: var(--mj-radius-full, 9999px);\n background: color-mix(in srgb, var(--sage) 18%, transparent);\n overflow: hidden;\n margin-top: 9px;\n position: relative;\n}\n.work-progress__fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: var(--mj-radius-full, 9999px);\n background: var(--sage);\n transition: width 240ms ease;\n}\n.work-progress__fill--slide[_ngcontent-%COMP%] {\n position: absolute;\n width: 35%;\n animation: _ngcontent-%COMP%_rt-slide 1.6s ease-in-out infinite;\n}\n\n\n\n\n\n.done-accordion[_ngcontent-%COMP%] {\n display: block;\n max-width: 560px;\n}\n\n\n\n\n\n\n.dev-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 9px;\n border-radius: var(--mj-radius-full, 9999px);\n border: 1px dashed var(--mj-border-strong);\n background: transparent;\n color: var(--mj-text-muted);\n font-family: inherit;\n font-size: 10.5px;\n font-weight: 700;\n white-space: nowrap;\n flex-shrink: 0;\n cursor: pointer;\n transition: color 140ms ease, border-color 140ms ease, background 140ms ease;\n}\n.dev-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-link, var(--mj-brand-primary));\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n.dev-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n.dev-link--inline[_ngcontent-%COMP%] {\n margin-left: 8px;\n}\n\n\n\n.artifact-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 10px;\n border-radius: var(--mj-radius-full, 9999px);\n border: 1px solid var(--sage-border);\n background: var(--sage-bg);\n color: var(--mj-color-violet-300, var(--mj-text-secondary));\n font-family: inherit;\n font-size: 10.5px;\n font-weight: 700;\n white-space: nowrap;\n flex-shrink: 0;\n cursor: pointer;\n transition: color 140ms ease, border-color 140ms ease, background 140ms ease;\n}\n.artifact-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n border-color: var(--sage);\n background: color-mix(in srgb, var(--sage) 18%, transparent);\n}\n.artifact-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n.artifact-link--detail[_ngcontent-%COMP%] {\n margin-top: 8px;\n max-width: 100%;\n}\n.artifact-link--detail[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n\n\n\n.done-chip__mark[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-status-success);\n flex-shrink: 0;\n}\n.done-accordion--failed[_ngcontent-%COMP%] .done-chip__mark[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n.done-chip__agent[_ngcontent-%COMP%] {\n font-weight: 700;\n color: var(--mj-text-primary);\n flex-shrink: 0;\n}\n.done-chip__sep[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n}\n.done-chip__preview[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--mj-text-secondary);\n}\n.via-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-color-violet-300, var(--mj-text-muted));\n flex-shrink: 0;\n}\n.via-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n cursor: help;\n}\n\n\n\n\n\n.done-detail[_ngcontent-%COMP%] {\n margin-top: 6px;\n margin-left: 12px;\n padding: 10px 14px;\n border-left: 2px solid var(--sage);\n background: var(--mj-bg-surface);\n border-radius: 0 var(--mj-radius-lg, 12px) var(--mj-radius-lg, 12px) 0;\n border-top: 1px solid var(--mj-border-subtle, var(--mj-border-default));\n border-right: 1px solid var(--mj-border-subtle, var(--mj-border-default));\n border-bottom: 1px solid var(--mj-border-subtle, var(--mj-border-default));\n}\n.done-detail__body[_ngcontent-%COMP%] {\n font-size: 13px;\n line-height: 1.55;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n}\n.done-detail__meta[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 10.5px;\n font-weight: 700;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 5px;\n}\n.done-detail__meta[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n cursor: help;\n}\n\n@keyframes _ngcontent-%COMP%_rt-spin {\n to { transform: rotate(360deg); }\n}\n@keyframes _ngcontent-%COMP%_rt-slide {\n 0% { left: -35%; }\n 100% { left: 100%; }\n}\n\n\n\n.cancel-work[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n padding: 0;\n border-radius: var(--mj-radius-full, 9999px);\n border: 1px solid transparent;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n flex-shrink: 0;\n}\n.cancel-work[_ngcontent-%COMP%]:hover {\n color: var(--mj-status-error);\n border-color: var(--mj-status-error-border, var(--mj-status-error));\n background: color-mix(in srgb, var(--mj-status-error) 8%, transparent);\n}\n.cancel-work[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}"] });
307
303
  }
308
304
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RealtimeDelegationCardComponent, [{
309
305
  type: Component,
310
- args: [{ standalone: true, selector: 'mj-realtime-delegation-card', imports: [CommonModule], template: "@if (!Card.Done) {\n <!-- WORKING \u2014 compact live card -->\n <div class=\"work-card\" role=\"status\" aria-live=\"polite\">\n <div class=\"work-card__head\">\n <div class=\"avatar\" aria-hidden=\"true\">{{ Card.AgentName.charAt(0) }}</div>\n <div class=\"work-card__title\">{{ Card.AgentName }} is working\u2026</div>\n <span class=\"pill pill--running\">\n <i class=\"fa-solid fa-spinner spin\" aria-hidden=\"true\"></i> Running\n </span>\n @if (ShowOpenRun) {\n <button type=\"button\" class=\"dev-link\" (click)=\"OpenRun($event)\"\n title=\"Open the delegated agent run record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\" aria-hidden=\"true\"></i>\n <span>Open run</span>\n </button>\n }\n <button type=\"button\" class=\"cancel-work\" (click)=\"CancelWork($event)\"\n title=\"Cancel this work\" aria-label=\"Cancel this work\">\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </button>\n </div>\n <div class=\"work-card__step\">{{ StepLabel }}</div>\n @if (ShowDetailLine) {\n <div class=\"work-card__detail\">{{ Card.LatestMessage }}</div>\n }\n <div class=\"work-progress\" [class.work-progress--indeterminate]=\"Card.Percentage == null\">\n @if (Card.Percentage != null) {\n <div class=\"work-progress__fill\" [style.width.%]=\"Card.Percentage\"></div>\n } @else {\n <div class=\"work-progress__fill work-progress__fill--slide\"></div>\n }\n </div>\n </div>\n} @else {\n <!-- DONE / FAILED \u2014 collapsed single-line chip, expandable inline -->\n <div class=\"done\">\n <div class=\"done-row\">\n <button type=\"button\"\n class=\"done-chip\"\n [class.done-chip--failed]=\"!Card.Success\"\n (click)=\"ToggleExpanded()\"\n [attr.aria-expanded]=\"Expanded\"\n [title]=\"Expanded ? 'Collapse result' : 'Expand result'\">\n <i class=\"fa-solid done-chip__mark\" [ngClass]=\"Card.Success ? 'fa-check' : 'fa-xmark'\" aria-hidden=\"true\"></i>\n <span class=\"done-chip__agent\">{{ Card.AgentName }}</span>\n <span class=\"done-chip__sep\" aria-hidden=\"true\">\u00B7</span>\n <span class=\"done-chip__preview\">{{ ResultPreview }}</span>\n <span class=\"via-badge\">\n <i class=\"fa-solid fa-shield-halved\" [title]=\"ProvenanceTitle\" aria-hidden=\"true\"></i>\n via {{ Card.AgentName }}\n </span>\n <i class=\"fa-solid done-chip__chev\" [ngClass]=\"Expanded ? 'fa-chevron-up' : 'fa-chevron-down'\" aria-hidden=\"true\"></i>\n </button>\n @for (artifact of Artifacts; track artifact.ArtifactVersionID) {\n <button type=\"button\" class=\"artifact-link\" (click)=\"OpenArtifact($event, artifact)\"\n [title]=\"'View ' + artifact.Name\">\n <i class=\"fa-solid fa-file-lines\" aria-hidden=\"true\"></i>\n <span>View</span>\n <i class=\"fa-solid fa-arrow-right\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (ShowOpenRun) {\n <button type=\"button\" class=\"dev-link\" (click)=\"OpenRun($event)\"\n title=\"Open the delegated agent run record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\" aria-hidden=\"true\"></i>\n <span>Open run</span>\n </button>\n }\n </div>\n @if (Expanded) {\n <div class=\"done-detail\">\n <div class=\"done-detail__body\">{{ ResultText }}</div>\n @for (artifact of Artifacts; track artifact.ArtifactVersionID) {\n <button type=\"button\" class=\"artifact-link artifact-link--detail\" (click)=\"OpenArtifact($event, artifact)\"\n [title]=\"'View ' + artifact.Name\">\n <i class=\"fa-solid fa-file-lines\" aria-hidden=\"true\"></i>\n <span>{{ artifact.Name }}</span>\n <i class=\"fa-solid fa-arrow-right\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (Card.RunRef) {\n <div class=\"done-detail__meta\">\n <i class=\"fa-solid fa-shield-halved\" [title]=\"ProvenanceTitle\" aria-hidden=\"true\"></i>\n via {{ Card.AgentName }} \u00B7 run {{ Card.RunRef }}\n @if (ShowOpenRun) {\n <button type=\"button\" class=\"dev-link dev-link--inline\" (click)=\"OpenRun($event)\"\n title=\"Open the delegated agent run record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\" aria-hidden=\"true\"></i>\n <span>Open run</span>\n </button>\n }\n </div>\n }\n </div>\n }\n </div>\n}\n", styles: [":host {\n display: block;\n /* sage / delegated-agent accent (distinct from the co-agent brand blue) */\n --sage: var(--mj-color-violet-400, #a78bfa);\n --sage-bg: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 12%, transparent);\n --sage-border: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 40%, transparent);\n}\n\n.avatar {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n font-weight: 600;\n font-size: 11px;\n flex-shrink: 0;\n background: var(--sage-bg);\n color: var(--mj-color-violet-300, var(--mj-text-primary));\n border: 1px solid var(--sage-border);\n}\n\n/* ---------- Working card (compact) ---------- */\n.work-card {\n border: 1px solid var(--sage-border);\n background: var(--sage-bg);\n border-radius: var(--mj-radius-lg, 12px);\n padding: 10px 14px;\n max-width: 560px;\n}\n.work-card__head {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n}\n.work-card__title {\n font-weight: 700;\n font-size: 13px;\n color: var(--mj-text-primary);\n flex: 1;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.work-card__step {\n font-size: 12.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.work-card__detail {\n font-size: 12px;\n color: var(--mj-text-muted);\n padding-left: 14px;\n margin-top: 3px;\n border-left: 2px solid var(--sage-border);\n}\n\n.pill {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 9999px);\n font-size: 10.5px;\n font-weight: 700;\n flex-shrink: 0;\n line-height: 1.5;\n}\n.pill--running {\n background: color-mix(in srgb, var(--sage) 18%, transparent);\n color: var(--mj-color-violet-300, var(--mj-text-secondary));\n border: 1px solid var(--sage-border);\n}\n.pill i { font-size: 9px; }\n.spin { animation: rt-spin 1.1s linear infinite; }\n\n/* Thin progress bar \u2014 determinate (server %) or indeterminate slide */\n.work-progress {\n height: 3px;\n border-radius: var(--mj-radius-full, 9999px);\n background: color-mix(in srgb, var(--sage) 18%, transparent);\n overflow: hidden;\n margin-top: 9px;\n position: relative;\n}\n.work-progress__fill {\n height: 100%;\n border-radius: var(--mj-radius-full, 9999px);\n background: var(--sage);\n transition: width 240ms ease;\n}\n.work-progress__fill--slide {\n position: absolute;\n width: 35%;\n animation: rt-slide 1.6s ease-in-out infinite;\n}\n\n/* ---------- Done chip (collapsed single line) ---------- */\n.done {\n max-width: 560px;\n}\n.done-row {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.done-row .done-chip {\n flex: 1;\n min-width: 0;\n}\n\n/* ---------- Developer link (gear-gated \"Open run\") ---------- */\n.dev-link {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 9px;\n border-radius: var(--mj-radius-full, 9999px);\n border: 1px dashed var(--mj-border-strong);\n background: transparent;\n color: var(--mj-text-muted);\n font-family: inherit;\n font-size: 10.5px;\n font-weight: 700;\n white-space: nowrap;\n flex-shrink: 0;\n cursor: pointer;\n transition: color 140ms ease, border-color 140ms ease, background 140ms ease;\n}\n.dev-link:hover {\n color: var(--mj-text-link, var(--mj-brand-primary));\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n.dev-link i {\n font-size: 9px;\n}\n.dev-link--inline {\n margin-left: 8px;\n}\n\n/* ---------- \"View \u2192\" artifact chip (focuses the artifact's surface tab) ---------- */\n.artifact-link {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 10px;\n border-radius: var(--mj-radius-full, 9999px);\n border: 1px solid var(--sage-border);\n background: var(--sage-bg);\n color: var(--mj-color-violet-300, var(--mj-text-secondary));\n font-family: inherit;\n font-size: 10.5px;\n font-weight: 700;\n white-space: nowrap;\n flex-shrink: 0;\n cursor: pointer;\n transition: color 140ms ease, border-color 140ms ease, background 140ms ease;\n}\n.artifact-link:hover {\n color: var(--mj-text-primary);\n border-color: var(--sage);\n background: color-mix(in srgb, var(--sage) 18%, transparent);\n}\n.artifact-link i {\n font-size: 9px;\n}\n.artifact-link--detail {\n margin-top: 8px;\n max-width: 100%;\n}\n.artifact-link--detail span {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.done-chip {\n display: flex;\n align-items: center;\n gap: 7px;\n width: 100%;\n text-align: left;\n font-family: inherit;\n font-size: 12.5px;\n padding: 6px 12px;\n border-radius: var(--mj-radius-full, 9999px);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: border-color 140ms ease, background 140ms ease;\n}\n.done-chip:hover {\n border-color: var(--sage-border);\n background: var(--mj-bg-surface-hover, var(--mj-bg-surface));\n}\n.done-chip__mark {\n font-size: 11px;\n color: var(--mj-status-success);\n flex-shrink: 0;\n}\n.done-chip--failed .done-chip__mark {\n color: var(--mj-status-error);\n}\n.done-chip--failed {\n border-color: var(--mj-status-error-border, var(--mj-border-default));\n}\n.done-chip__agent {\n font-weight: 700;\n color: var(--mj-text-primary);\n flex-shrink: 0;\n}\n.done-chip__sep {\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n}\n.done-chip__preview {\n flex: 1;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--mj-text-secondary);\n}\n.via-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-color-violet-300, var(--mj-text-muted));\n flex-shrink: 0;\n}\n.via-badge i {\n font-size: 9px;\n cursor: help;\n}\n.done-chip__chev {\n font-size: 10px;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n/* ---------- Expanded result detail ---------- */\n.done-detail {\n margin-top: 6px;\n margin-left: 12px;\n padding: 10px 14px;\n border-left: 2px solid var(--sage);\n background: var(--mj-bg-surface);\n border-radius: 0 var(--mj-radius-lg, 12px) var(--mj-radius-lg, 12px) 0;\n border-top: 1px solid var(--mj-border-subtle, var(--mj-border-default));\n border-right: 1px solid var(--mj-border-subtle, var(--mj-border-default));\n border-bottom: 1px solid var(--mj-border-subtle, var(--mj-border-default));\n}\n.done-detail__body {\n font-size: 13px;\n line-height: 1.55;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n}\n.done-detail__meta {\n margin-top: 8px;\n font-size: 10.5px;\n font-weight: 700;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 5px;\n}\n.done-detail__meta i {\n cursor: help;\n}\n\n@keyframes rt-spin {\n to { transform: rotate(360deg); }\n}\n@keyframes rt-slide {\n 0% { left: -35%; }\n 100% { left: 100%; }\n}\n\n/* ---------- \u2715 cancel affordance on the WORKING card (explicit user cancel) ---------- */\n.cancel-work {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n padding: 0;\n border-radius: var(--mj-radius-full, 9999px);\n border: 1px solid transparent;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n flex-shrink: 0;\n}\n.cancel-work:hover {\n color: var(--mj-status-error);\n border-color: var(--mj-status-error-border, var(--mj-status-error));\n background: color-mix(in srgb, var(--mj-status-error) 8%, transparent);\n}\n.cancel-work i {\n font-size: 11px;\n}\n"] }]
306
+ args: [{ standalone: true, selector: 'mj-realtime-delegation-card', imports: [CommonModule, MJAccordionModule], template: "@if (!Card.Done) {\n <!-- WORKING \u2014 compact live card -->\n <div class=\"work-card\" role=\"status\" aria-live=\"polite\">\n <div class=\"work-card__head\">\n <div class=\"avatar\" aria-hidden=\"true\">{{ Card.AgentName.charAt(0) }}</div>\n <div class=\"work-card__title\">{{ Card.AgentName }} is working\u2026</div>\n <span class=\"pill pill--running\">\n <i class=\"fa-solid fa-spinner spin\" aria-hidden=\"true\"></i> Running\n </span>\n @if (ShowOpenRun) {\n <button type=\"button\" class=\"dev-link\" (click)=\"OpenRun($event)\"\n title=\"Open the delegated agent run record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\" aria-hidden=\"true\"></i>\n <span>Open run</span>\n </button>\n }\n <button type=\"button\" class=\"cancel-work\" (click)=\"CancelWork($event)\"\n title=\"Cancel this work\" aria-label=\"Cancel this work\">\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </button>\n </div>\n <div class=\"work-card__step\">{{ StepLabel }}</div>\n @if (ShowDetailLine) {\n <div class=\"work-card__detail\">{{ Card.LatestMessage }}</div>\n }\n <div class=\"work-progress\" [class.work-progress--indeterminate]=\"Card.Percentage == null\">\n @if (Card.Percentage != null) {\n <div class=\"work-progress__fill\" [style.width.%]=\"Card.Percentage\"></div>\n } @else {\n <div class=\"work-progress__fill work-progress__fill--slide\"></div>\n }\n </div>\n </div>\n} @else {\n <!-- DONE / FAILED \u2014 collapsed single-line chip, expandable inline.\n Migrated from a bespoke done-chip button + chevron + @if(Expanded) detail to\n mj-accordion-panel: title = result chip (mark/agent/preview/via-badge),\n actions = artifact \"View\" + dev \"Open run\" chips, body = full result detail.\n Failed state is carried via .done-accordion--failed on the panel. -->\n <mj-accordion-panel class=\"done-accordion\" [class.done-accordion--failed]=\"!Card.Success\"\n Size=\"sm\" [FlushBody]=\"true\" [(Expanded)]=\"Expanded\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid done-chip__mark\" [ngClass]=\"Card.Success ? 'fa-check' : 'fa-xmark'\" aria-hidden=\"true\"></i>\n <span class=\"done-chip__agent\">{{ Card.AgentName }}</span>\n <span class=\"done-chip__sep\" aria-hidden=\"true\">\u00B7</span>\n <span class=\"done-chip__preview\">{{ ResultPreview }}</span>\n <span class=\"via-badge\">\n <i class=\"fa-solid fa-shield-halved\" [title]=\"ProvenanceTitle\" aria-hidden=\"true\"></i>\n via {{ Card.AgentName }}\n </span>\n </ng-template>\n <ng-template mjAccordionActions>\n @for (artifact of Artifacts; track artifact.ArtifactVersionID) {\n <button type=\"button\" class=\"artifact-link\" (click)=\"OpenArtifact($event, artifact)\"\n [title]=\"'View ' + artifact.Name\">\n <i class=\"fa-solid fa-file-lines\" aria-hidden=\"true\"></i>\n <span>View</span>\n <i class=\"fa-solid fa-arrow-right\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (ShowOpenRun) {\n <button type=\"button\" class=\"dev-link\" (click)=\"OpenRun($event)\"\n title=\"Open the delegated agent run record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\" aria-hidden=\"true\"></i>\n <span>Open run</span>\n </button>\n }\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"done-detail\">\n <div class=\"done-detail__body\">{{ ResultText }}</div>\n @for (artifact of Artifacts; track artifact.ArtifactVersionID) {\n <button type=\"button\" class=\"artifact-link artifact-link--detail\" (click)=\"OpenArtifact($event, artifact)\"\n [title]=\"'View ' + artifact.Name\">\n <i class=\"fa-solid fa-file-lines\" aria-hidden=\"true\"></i>\n <span>{{ artifact.Name }}</span>\n <i class=\"fa-solid fa-arrow-right\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (Card.RunRef) {\n <div class=\"done-detail__meta\">\n <i class=\"fa-solid fa-shield-halved\" [title]=\"ProvenanceTitle\" aria-hidden=\"true\"></i>\n via {{ Card.AgentName }} \u00B7 run {{ Card.RunRef }}\n @if (ShowOpenRun) {\n <button type=\"button\" class=\"dev-link dev-link--inline\" (click)=\"OpenRun($event)\"\n title=\"Open the delegated agent run record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\" aria-hidden=\"true\"></i>\n <span>Open run</span>\n </button>\n }\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n}\n", styles: [":host {\n display: block;\n /* sage / delegated-agent accent (distinct from the co-agent brand blue) */\n --sage: var(--mj-color-violet-400, #a78bfa);\n --sage-bg: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 12%, transparent);\n --sage-border: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 40%, transparent);\n}\n\n.avatar {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n display: grid;\n place-items: center;\n font-weight: 600;\n font-size: 11px;\n flex-shrink: 0;\n background: var(--sage-bg);\n color: var(--mj-color-violet-300, var(--mj-text-primary));\n border: 1px solid var(--sage-border);\n}\n\n/* ---------- Working card (compact) ---------- */\n.work-card {\n border: 1px solid var(--sage-border);\n background: var(--sage-bg);\n border-radius: var(--mj-radius-lg, 12px);\n padding: 10px 14px;\n max-width: 560px;\n}\n.work-card__head {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n}\n.work-card__title {\n font-weight: 700;\n font-size: 13px;\n color: var(--mj-text-primary);\n flex: 1;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.work-card__step {\n font-size: 12.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.work-card__detail {\n font-size: 12px;\n color: var(--mj-text-muted);\n padding-left: 14px;\n margin-top: 3px;\n border-left: 2px solid var(--sage-border);\n}\n\n.pill {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 9999px);\n font-size: 10.5px;\n font-weight: 700;\n flex-shrink: 0;\n line-height: 1.5;\n}\n.pill--running {\n background: color-mix(in srgb, var(--sage) 18%, transparent);\n color: var(--mj-color-violet-300, var(--mj-text-secondary));\n border: 1px solid var(--sage-border);\n}\n.pill i { font-size: 9px; }\n.spin { animation: rt-spin 1.1s linear infinite; }\n\n/* Thin progress bar \u2014 determinate (server %) or indeterminate slide */\n.work-progress {\n height: 3px;\n border-radius: var(--mj-radius-full, 9999px);\n background: color-mix(in srgb, var(--sage) 18%, transparent);\n overflow: hidden;\n margin-top: 9px;\n position: relative;\n}\n.work-progress__fill {\n height: 100%;\n border-radius: var(--mj-radius-full, 9999px);\n background: var(--sage);\n transition: width 240ms ease;\n}\n.work-progress__fill--slide {\n position: absolute;\n width: 35%;\n animation: rt-slide 1.6s ease-in-out infinite;\n}\n\n/* ---------- Done state (collapsed single line) ---------- */\n/* Width constraint preserved on the migrated accordion panel. */\n.done-accordion {\n display: block;\n max-width: 560px;\n}\n/* Removed bespoke .done / .done-row / .done-row .done-chip layout chrome \u2014 the header\n row layout is now owned by mj-accordion-panel (header-row + actions slot). */\n\n/* ---------- Developer link (gear-gated \"Open run\") ---------- */\n.dev-link {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 9px;\n border-radius: var(--mj-radius-full, 9999px);\n border: 1px dashed var(--mj-border-strong);\n background: transparent;\n color: var(--mj-text-muted);\n font-family: inherit;\n font-size: 10.5px;\n font-weight: 700;\n white-space: nowrap;\n flex-shrink: 0;\n cursor: pointer;\n transition: color 140ms ease, border-color 140ms ease, background 140ms ease;\n}\n.dev-link:hover {\n color: var(--mj-text-link, var(--mj-brand-primary));\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n.dev-link i {\n font-size: 9px;\n}\n.dev-link--inline {\n margin-left: 8px;\n}\n\n/* ---------- \"View \u2192\" artifact chip (focuses the artifact's surface tab) ---------- */\n.artifact-link {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 10px;\n border-radius: var(--mj-radius-full, 9999px);\n border: 1px solid var(--sage-border);\n background: var(--sage-bg);\n color: var(--mj-color-violet-300, var(--mj-text-secondary));\n font-family: inherit;\n font-size: 10.5px;\n font-weight: 700;\n white-space: nowrap;\n flex-shrink: 0;\n cursor: pointer;\n transition: color 140ms ease, border-color 140ms ease, background 140ms ease;\n}\n.artifact-link:hover {\n color: var(--mj-text-primary);\n border-color: var(--sage);\n background: color-mix(in srgb, var(--sage) 18%, transparent);\n}\n.artifact-link i {\n font-size: 9px;\n}\n.artifact-link--detail {\n margin-top: 8px;\n max-width: 100%;\n}\n.artifact-link--detail span {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n/* Removed bespoke .done-chip button chrome (background/border/radius/hover) \u2014 the\n clickable header is now the mj-accordion-panel toggle. The chip's inner content\n styling (mark/agent/sep/preview/via-badge) is retained as accordion title content. */\n.done-chip__mark {\n font-size: 11px;\n color: var(--mj-status-success);\n flex-shrink: 0;\n}\n.done-accordion--failed .done-chip__mark {\n color: var(--mj-status-error);\n}\n.done-chip__agent {\n font-weight: 700;\n color: var(--mj-text-primary);\n flex-shrink: 0;\n}\n.done-chip__sep {\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n}\n.done-chip__preview {\n flex: 1;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--mj-text-secondary);\n}\n.via-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-color-violet-300, var(--mj-text-muted));\n flex-shrink: 0;\n}\n.via-badge i {\n font-size: 9px;\n cursor: help;\n}\n/* Removed .done-chip__chev \u2014 mj-accordion-panel provides its own chevron. */\n\n/* ---------- Expanded result detail ---------- */\n.done-detail {\n margin-top: 6px;\n margin-left: 12px;\n padding: 10px 14px;\n border-left: 2px solid var(--sage);\n background: var(--mj-bg-surface);\n border-radius: 0 var(--mj-radius-lg, 12px) var(--mj-radius-lg, 12px) 0;\n border-top: 1px solid var(--mj-border-subtle, var(--mj-border-default));\n border-right: 1px solid var(--mj-border-subtle, var(--mj-border-default));\n border-bottom: 1px solid var(--mj-border-subtle, var(--mj-border-default));\n}\n.done-detail__body {\n font-size: 13px;\n line-height: 1.55;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n}\n.done-detail__meta {\n margin-top: 8px;\n font-size: 10.5px;\n font-weight: 700;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 5px;\n}\n.done-detail__meta i {\n cursor: help;\n}\n\n@keyframes rt-spin {\n to { transform: rotate(360deg); }\n}\n@keyframes rt-slide {\n 0% { left: -35%; }\n 100% { left: 100%; }\n}\n\n/* ---------- \u2715 cancel affordance on the WORKING card (explicit user cancel) ---------- */\n.cancel-work {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n padding: 0;\n border-radius: var(--mj-radius-full, 9999px);\n border: 1px solid transparent;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n flex-shrink: 0;\n}\n.cancel-work:hover {\n color: var(--mj-status-error);\n border-color: var(--mj-status-error-border, var(--mj-status-error));\n background: color-mix(in srgb, var(--mj-status-error) 8%, transparent);\n}\n.cancel-work i {\n font-size: 11px;\n}\n"] }]
311
307
  }], null, { Card: [{
312
308
  type: Input,
313
309
  args: [{ required: true }]
@@ -320,5 +316,5 @@ export class RealtimeDelegationCardComponent {
320
316
  }], CancelRequested: [{
321
317
  type: Output
322
318
  }] }); })();
323
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RealtimeDelegationCardComponent, { className: "RealtimeDelegationCardComponent", filePath: "src/lib/components/realtime/realtime-delegation-card.component.ts", lineNumber: 30 }); })();
319
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RealtimeDelegationCardComponent, { className: "RealtimeDelegationCardComponent", filePath: "src/lib/components/realtime/realtime-delegation-card.component.ts", lineNumber: 31 }); })();
324
320
  //# sourceMappingURL=realtime-delegation-card.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"realtime-delegation-card.component.js","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-delegation-card.component.ts","../../../../src/lib/components/realtime/realtime-delegation-card.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RealtimeDelegationCardVM, FriendlyStepLabel } from './realtime-session-state';\nimport { ParsedDelegationArtifact } from '../../services/delegation-result-parser';\n\n/**\n * Renders a single delegation in the live session thread:\n * - **Working**: a compact card — agent avatar, \"<agent> is working…\", the CURRENT\n * friendly step label, the latest raw message indented + muted beneath it, and a\n * thin progress bar (determinate when the server supplies a percentage,\n * indeterminate shimmer otherwise).\n * - **Done**: COLLAPSED to a single-line chip — `✓ <agent> · <one-line result preview>\n * · via <agent>` — expandable inline (click / chevron) to the full result text.\n * Failures render the `✗` variant.\n *\n * Provenance is a small `via <agent>` badge + a shield icon whose `title` tooltip\n * carries the full provenance sentence (no repeated sentence under every card).\n *\n * DEVELOPER MODE (gear-gated by the overlay shell): when {@link DevMode} is on and the\n * card knows its delegated run id, an \"Open run\" link is revealed that emits\n * {@link OpenRunRequested} so the shell can navigate to the `MJ: AI Agent Runs` record.\n */\n@Component({\n standalone: true,\n selector: 'mj-realtime-delegation-card',\n imports: [CommonModule],\n templateUrl: './realtime-delegation-card.component.html',\n styleUrl: './realtime-delegation-card.component.css'\n})\nexport class RealtimeDelegationCardComponent {\n /** Maximum characters of the result shown in the collapsed done chip. */\n private static readonly PreviewMaxChars = 120;\n\n /** The delegation card view-model to render (immutable — replaced on every update). */\n @Input({ required: true }) Card!: RealtimeDelegationCardVM;\n\n /** Whether developer affordances (the \"Open run\" link) are revealed. */\n @Input() DevMode = false;\n\n /** Emitted with the delegated run's ID when the dev \"Open run\" link is clicked. */\n @Output() OpenRunRequested = new EventEmitter<string>();\n\n /** Emitted when a \"View\" artifact chip is clicked (the overlay focuses the artifact's tab). */\n @Output() OpenArtifactRequested = new EventEmitter<ParsedDelegationArtifact>();\n\n /**\n * Emitted with the call's ID when the WORKING card's ✕ cancel affordance is clicked —\n * EXPLICIT user intent to kill the in-flight delegated run (by deliberate host policy,\n * barge-in alone never cancels delegations; only this button does). The overlay routes\n * it to `RealtimeSessionService.CancelDelegation`, which flips this card to a failed\n * \"Cancelled by user\" result.\n */\n @Output() CancelRequested = new EventEmitter<string>();\n\n /** Whether the done chip is expanded inline to show the full result text. */\n public Expanded = false;\n\n /** The artifacts this (done) delegation produced (empty array while running / when none). */\n public get Artifacts(): ParsedDelegationArtifact[] {\n return this.Card.Done && this.Card.Artifacts ? this.Card.Artifacts : [];\n }\n\n /** Emits the open-artifact request for one of this card's produced artifacts. */\n public OpenArtifact(event: MouseEvent, artifact: ParsedDelegationArtifact): void {\n event.stopPropagation();\n this.OpenArtifactRequested.emit(artifact);\n }\n\n /** True when the dev \"Open run\" link should render (gear on + run id known). */\n public get ShowOpenRun(): boolean {\n return this.DevMode && !!this.Card.RunID;\n }\n\n /** Emits the open-run request for this card's delegated run. */\n public OpenRun(event: MouseEvent): void {\n event.stopPropagation();\n if (this.Card.RunID) {\n this.OpenRunRequested.emit(this.Card.RunID);\n }\n }\n\n /** Emits the cancel request for this (still-working) delegation. */\n public CancelWork(event: MouseEvent): void {\n event.stopPropagation();\n if (!this.Card.Done) {\n this.CancelRequested.emit(this.Card.CallID);\n }\n }\n\n /** Friendly label for the current delegation step (raw message as fallback). */\n public get StepLabel(): string {\n return FriendlyStepLabel(this.Card.LatestStep, this.Card.LatestMessage);\n }\n\n /**\n * Whether to render the latest raw message as the indented detail line. Hidden when\n * it would just repeat the step label (the unknown-step fallback maps label = message).\n */\n public get ShowDetailLine(): boolean {\n return !!this.Card.LatestMessage && this.Card.LatestMessage !== this.StepLabel;\n }\n\n /** Full result text (falls back to the last progress message / a generic line). */\n public get ResultText(): string {\n return this.Card.Result\n || this.Card.LatestMessage\n || `${this.Card.AgentName} completed the delegated work.`;\n }\n\n /** One-line, ~120-char preview of the result for the collapsed chip. */\n public get ResultPreview(): string {\n const oneLine = this.ResultText.replace(/\\s+/g, ' ').trim();\n const max = RealtimeDelegationCardComponent.PreviewMaxChars;\n return oneLine.length > max ? `${oneLine.slice(0, max).trimEnd()}…` : oneLine;\n }\n\n /** Tooltip text for the provenance shield icon. */\n public get ProvenanceTitle(): string {\n const run = this.Card.RunRef ? ` (run ${this.Card.RunRef})` : '';\n return `Result produced by ${this.Card.AgentName}'s own agent run${run} — not invented by the voice co-agent.`;\n }\n\n /** Toggles the done chip's inline expansion. */\n public ToggleExpanded(): void {\n this.Expanded = !this.Expanded;\n }\n}\n","@if (!Card.Done) {\n <!-- WORKING — compact live card -->\n <div class=\"work-card\" role=\"status\" aria-live=\"polite\">\n <div class=\"work-card__head\">\n <div class=\"avatar\" aria-hidden=\"true\">{{ Card.AgentName.charAt(0) }}</div>\n <div class=\"work-card__title\">{{ Card.AgentName }} is working…</div>\n <span class=\"pill pill--running\">\n <i class=\"fa-solid fa-spinner spin\" aria-hidden=\"true\"></i> Running\n </span>\n @if (ShowOpenRun) {\n <button type=\"button\" class=\"dev-link\" (click)=\"OpenRun($event)\"\n title=\"Open the delegated agent run record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\" aria-hidden=\"true\"></i>\n <span>Open run</span>\n </button>\n }\n <button type=\"button\" class=\"cancel-work\" (click)=\"CancelWork($event)\"\n title=\"Cancel this work\" aria-label=\"Cancel this work\">\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </button>\n </div>\n <div class=\"work-card__step\">{{ StepLabel }}</div>\n @if (ShowDetailLine) {\n <div class=\"work-card__detail\">{{ Card.LatestMessage }}</div>\n }\n <div class=\"work-progress\" [class.work-progress--indeterminate]=\"Card.Percentage == null\">\n @if (Card.Percentage != null) {\n <div class=\"work-progress__fill\" [style.width.%]=\"Card.Percentage\"></div>\n } @else {\n <div class=\"work-progress__fill work-progress__fill--slide\"></div>\n }\n </div>\n </div>\n} @else {\n <!-- DONE / FAILED — collapsed single-line chip, expandable inline -->\n <div class=\"done\">\n <div class=\"done-row\">\n <button type=\"button\"\n class=\"done-chip\"\n [class.done-chip--failed]=\"!Card.Success\"\n (click)=\"ToggleExpanded()\"\n [attr.aria-expanded]=\"Expanded\"\n [title]=\"Expanded ? 'Collapse result' : 'Expand result'\">\n <i class=\"fa-solid done-chip__mark\" [ngClass]=\"Card.Success ? 'fa-check' : 'fa-xmark'\" aria-hidden=\"true\"></i>\n <span class=\"done-chip__agent\">{{ Card.AgentName }}</span>\n <span class=\"done-chip__sep\" aria-hidden=\"true\">·</span>\n <span class=\"done-chip__preview\">{{ ResultPreview }}</span>\n <span class=\"via-badge\">\n <i class=\"fa-solid fa-shield-halved\" [title]=\"ProvenanceTitle\" aria-hidden=\"true\"></i>\n via {{ Card.AgentName }}\n </span>\n <i class=\"fa-solid done-chip__chev\" [ngClass]=\"Expanded ? 'fa-chevron-up' : 'fa-chevron-down'\" aria-hidden=\"true\"></i>\n </button>\n @for (artifact of Artifacts; track artifact.ArtifactVersionID) {\n <button type=\"button\" class=\"artifact-link\" (click)=\"OpenArtifact($event, artifact)\"\n [title]=\"'View ' + artifact.Name\">\n <i class=\"fa-solid fa-file-lines\" aria-hidden=\"true\"></i>\n <span>View</span>\n <i class=\"fa-solid fa-arrow-right\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (ShowOpenRun) {\n <button type=\"button\" class=\"dev-link\" (click)=\"OpenRun($event)\"\n title=\"Open the delegated agent run record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\" aria-hidden=\"true\"></i>\n <span>Open run</span>\n </button>\n }\n </div>\n @if (Expanded) {\n <div class=\"done-detail\">\n <div class=\"done-detail__body\">{{ ResultText }}</div>\n @for (artifact of Artifacts; track artifact.ArtifactVersionID) {\n <button type=\"button\" class=\"artifact-link artifact-link--detail\" (click)=\"OpenArtifact($event, artifact)\"\n [title]=\"'View ' + artifact.Name\">\n <i class=\"fa-solid fa-file-lines\" aria-hidden=\"true\"></i>\n <span>{{ artifact.Name }}</span>\n <i class=\"fa-solid fa-arrow-right\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (Card.RunRef) {\n <div class=\"done-detail__meta\">\n <i class=\"fa-solid fa-shield-halved\" [title]=\"ProvenanceTitle\" aria-hidden=\"true\"></i>\n via {{ Card.AgentName }} · run {{ Card.RunRef }}\n @if (ShowOpenRun) {\n <button type=\"button\" class=\"dev-link dev-link--inline\" (click)=\"OpenRun($event)\"\n title=\"Open the delegated agent run record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\" aria-hidden=\"true\"></i>\n <span>Open run</span>\n </button>\n }\n </div>\n }\n </div>\n }\n </div>\n}\n"]}
1
+ {"version":3,"file":"realtime-delegation-card.component.js","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-delegation-card.component.ts","../../../../src/lib/components/realtime/realtime-delegation-card.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MJAccordionModule } from '@memberjunction/ng-ui-components';\nimport { RealtimeDelegationCardVM, FriendlyStepLabel } from './realtime-session-state';\nimport { ParsedDelegationArtifact } from '../../services/delegation-result-parser';\n\n/**\n * Renders a single delegation in the live session thread:\n * - **Working**: a compact card — agent avatar, \"<agent> is working…\", the CURRENT\n * friendly step label, the latest raw message indented + muted beneath it, and a\n * thin progress bar (determinate when the server supplies a percentage,\n * indeterminate shimmer otherwise).\n * - **Done**: COLLAPSED to a single-line chip — `✓ <agent> · <one-line result preview>\n * · via <agent>` — expandable inline (click / chevron) to the full result text.\n * Failures render the `✗` variant.\n *\n * Provenance is a small `via <agent>` badge + a shield icon whose `title` tooltip\n * carries the full provenance sentence (no repeated sentence under every card).\n *\n * DEVELOPER MODE (gear-gated by the overlay shell): when {@link DevMode} is on and the\n * card knows its delegated run id, an \"Open run\" link is revealed that emits\n * {@link OpenRunRequested} so the shell can navigate to the `MJ: AI Agent Runs` record.\n */\n@Component({\n standalone: true,\n selector: 'mj-realtime-delegation-card',\n imports: [CommonModule, MJAccordionModule],\n templateUrl: './realtime-delegation-card.component.html',\n styleUrl: './realtime-delegation-card.component.css'\n})\nexport class RealtimeDelegationCardComponent {\n /** Maximum characters of the result shown in the collapsed done chip. */\n private static readonly PreviewMaxChars = 120;\n\n /** The delegation card view-model to render (immutable — replaced on every update). */\n @Input({ required: true }) Card!: RealtimeDelegationCardVM;\n\n /** Whether developer affordances (the \"Open run\" link) are revealed. */\n @Input() DevMode = false;\n\n /** Emitted with the delegated run's ID when the dev \"Open run\" link is clicked. */\n @Output() OpenRunRequested = new EventEmitter<string>();\n\n /** Emitted when a \"View\" artifact chip is clicked (the overlay focuses the artifact's tab). */\n @Output() OpenArtifactRequested = new EventEmitter<ParsedDelegationArtifact>();\n\n /**\n * Emitted with the call's ID when the WORKING card's ✕ cancel affordance is clicked —\n * EXPLICIT user intent to kill the in-flight delegated run (by deliberate host policy,\n * barge-in alone never cancels delegations; only this button does). The overlay routes\n * it to `RealtimeSessionService.CancelDelegation`, which flips this card to a failed\n * \"Cancelled by user\" result.\n */\n @Output() CancelRequested = new EventEmitter<string>();\n\n /** Whether the done chip is expanded inline to show the full result text. */\n public Expanded = false;\n\n /** The artifacts this (done) delegation produced (empty array while running / when none). */\n public get Artifacts(): ParsedDelegationArtifact[] {\n return this.Card.Done && this.Card.Artifacts ? this.Card.Artifacts : [];\n }\n\n /** Emits the open-artifact request for one of this card's produced artifacts. */\n public OpenArtifact(event: MouseEvent, artifact: ParsedDelegationArtifact): void {\n event.stopPropagation();\n this.OpenArtifactRequested.emit(artifact);\n }\n\n /** True when the dev \"Open run\" link should render (gear on + run id known). */\n public get ShowOpenRun(): boolean {\n return this.DevMode && !!this.Card.RunID;\n }\n\n /** Emits the open-run request for this card's delegated run. */\n public OpenRun(event: MouseEvent): void {\n event.stopPropagation();\n if (this.Card.RunID) {\n this.OpenRunRequested.emit(this.Card.RunID);\n }\n }\n\n /** Emits the cancel request for this (still-working) delegation. */\n public CancelWork(event: MouseEvent): void {\n event.stopPropagation();\n if (!this.Card.Done) {\n this.CancelRequested.emit(this.Card.CallID);\n }\n }\n\n /** Friendly label for the current delegation step (raw message as fallback). */\n public get StepLabel(): string {\n return FriendlyStepLabel(this.Card.LatestStep, this.Card.LatestMessage);\n }\n\n /**\n * Whether to render the latest raw message as the indented detail line. Hidden when\n * it would just repeat the step label (the unknown-step fallback maps label = message).\n */\n public get ShowDetailLine(): boolean {\n return !!this.Card.LatestMessage && this.Card.LatestMessage !== this.StepLabel;\n }\n\n /** Full result text (falls back to the last progress message / a generic line). */\n public get ResultText(): string {\n return this.Card.Result\n || this.Card.LatestMessage\n || `${this.Card.AgentName} completed the delegated work.`;\n }\n\n /** One-line, ~120-char preview of the result for the collapsed chip. */\n public get ResultPreview(): string {\n const oneLine = this.ResultText.replace(/\\s+/g, ' ').trim();\n const max = RealtimeDelegationCardComponent.PreviewMaxChars;\n return oneLine.length > max ? `${oneLine.slice(0, max).trimEnd()}…` : oneLine;\n }\n\n /** Tooltip text for the provenance shield icon. */\n public get ProvenanceTitle(): string {\n const run = this.Card.RunRef ? ` (run ${this.Card.RunRef})` : '';\n return `Result produced by ${this.Card.AgentName}'s own agent run${run} — not invented by the voice co-agent.`;\n }\n}\n","@if (!Card.Done) {\n <!-- WORKING — compact live card -->\n <div class=\"work-card\" role=\"status\" aria-live=\"polite\">\n <div class=\"work-card__head\">\n <div class=\"avatar\" aria-hidden=\"true\">{{ Card.AgentName.charAt(0) }}</div>\n <div class=\"work-card__title\">{{ Card.AgentName }} is working…</div>\n <span class=\"pill pill--running\">\n <i class=\"fa-solid fa-spinner spin\" aria-hidden=\"true\"></i> Running\n </span>\n @if (ShowOpenRun) {\n <button type=\"button\" class=\"dev-link\" (click)=\"OpenRun($event)\"\n title=\"Open the delegated agent run record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\" aria-hidden=\"true\"></i>\n <span>Open run</span>\n </button>\n }\n <button type=\"button\" class=\"cancel-work\" (click)=\"CancelWork($event)\"\n title=\"Cancel this work\" aria-label=\"Cancel this work\">\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </button>\n </div>\n <div class=\"work-card__step\">{{ StepLabel }}</div>\n @if (ShowDetailLine) {\n <div class=\"work-card__detail\">{{ Card.LatestMessage }}</div>\n }\n <div class=\"work-progress\" [class.work-progress--indeterminate]=\"Card.Percentage == null\">\n @if (Card.Percentage != null) {\n <div class=\"work-progress__fill\" [style.width.%]=\"Card.Percentage\"></div>\n } @else {\n <div class=\"work-progress__fill work-progress__fill--slide\"></div>\n }\n </div>\n </div>\n} @else {\n <!-- DONE / FAILED — collapsed single-line chip, expandable inline.\n Migrated from a bespoke done-chip button + chevron + @if(Expanded) detail to\n mj-accordion-panel: title = result chip (mark/agent/preview/via-badge),\n actions = artifact \"View\" + dev \"Open run\" chips, body = full result detail.\n Failed state is carried via .done-accordion--failed on the panel. -->\n <mj-accordion-panel class=\"done-accordion\" [class.done-accordion--failed]=\"!Card.Success\"\n Size=\"sm\" [FlushBody]=\"true\" [(Expanded)]=\"Expanded\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid done-chip__mark\" [ngClass]=\"Card.Success ? 'fa-check' : 'fa-xmark'\" aria-hidden=\"true\"></i>\n <span class=\"done-chip__agent\">{{ Card.AgentName }}</span>\n <span class=\"done-chip__sep\" aria-hidden=\"true\">·</span>\n <span class=\"done-chip__preview\">{{ ResultPreview }}</span>\n <span class=\"via-badge\">\n <i class=\"fa-solid fa-shield-halved\" [title]=\"ProvenanceTitle\" aria-hidden=\"true\"></i>\n via {{ Card.AgentName }}\n </span>\n </ng-template>\n <ng-template mjAccordionActions>\n @for (artifact of Artifacts; track artifact.ArtifactVersionID) {\n <button type=\"button\" class=\"artifact-link\" (click)=\"OpenArtifact($event, artifact)\"\n [title]=\"'View ' + artifact.Name\">\n <i class=\"fa-solid fa-file-lines\" aria-hidden=\"true\"></i>\n <span>View</span>\n <i class=\"fa-solid fa-arrow-right\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (ShowOpenRun) {\n <button type=\"button\" class=\"dev-link\" (click)=\"OpenRun($event)\"\n title=\"Open the delegated agent run record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\" aria-hidden=\"true\"></i>\n <span>Open run</span>\n </button>\n }\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"done-detail\">\n <div class=\"done-detail__body\">{{ ResultText }}</div>\n @for (artifact of Artifacts; track artifact.ArtifactVersionID) {\n <button type=\"button\" class=\"artifact-link artifact-link--detail\" (click)=\"OpenArtifact($event, artifact)\"\n [title]=\"'View ' + artifact.Name\">\n <i class=\"fa-solid fa-file-lines\" aria-hidden=\"true\"></i>\n <span>{{ artifact.Name }}</span>\n <i class=\"fa-solid fa-arrow-right\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (Card.RunRef) {\n <div class=\"done-detail__meta\">\n <i class=\"fa-solid fa-shield-halved\" [title]=\"ProvenanceTitle\" aria-hidden=\"true\"></i>\n via {{ Card.AgentName }} · run {{ Card.RunRef }}\n @if (ShowOpenRun) {\n <button type=\"button\" class=\"dev-link dev-link--inline\" (click)=\"OpenRun($event)\"\n title=\"Open the delegated agent run record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\" aria-hidden=\"true\"></i>\n <span>Open run</span>\n </button>\n }\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n}\n"]}