@memberjunction/ng-conversations 5.40.1 → 5.41.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 (378) hide show
  1. package/README.md +57 -0
  2. package/dist/__tests__/channel-optional-surface.test.d.ts +2 -0
  3. package/dist/__tests__/channel-optional-surface.test.d.ts.map +1 -0
  4. package/dist/__tests__/channel-optional-surface.test.js +53 -0
  5. package/dist/__tests__/channel-optional-surface.test.js.map +1 -0
  6. package/dist/__tests__/chat-events.test.d.ts +14 -0
  7. package/dist/__tests__/chat-events.test.d.ts.map +1 -0
  8. package/dist/__tests__/chat-events.test.js +109 -0
  9. package/dist/__tests__/chat-events.test.js.map +1 -0
  10. package/dist/__tests__/conversation-naming.test.d.ts +2 -0
  11. package/dist/__tests__/conversation-naming.test.d.ts.map +1 -0
  12. package/dist/__tests__/conversation-naming.test.js +110 -0
  13. package/dist/__tests__/conversation-naming.test.js.map +1 -0
  14. package/dist/__tests__/delegation-result-parser.test.d.ts +2 -0
  15. package/dist/__tests__/delegation-result-parser.test.d.ts.map +1 -0
  16. package/dist/__tests__/delegation-result-parser.test.js +107 -0
  17. package/dist/__tests__/delegation-result-parser.test.js.map +1 -0
  18. package/dist/__tests__/event-wiring.test.d.ts +15 -0
  19. package/dist/__tests__/event-wiring.test.d.ts.map +1 -0
  20. package/dist/__tests__/event-wiring.test.js +100 -0
  21. package/dist/__tests__/event-wiring.test.js.map +1 -0
  22. package/dist/__tests__/narration-template.test.d.ts +2 -0
  23. package/dist/__tests__/narration-template.test.d.ts.map +1 -0
  24. package/dist/__tests__/narration-template.test.js +76 -0
  25. package/dist/__tests__/narration-template.test.js.map +1 -0
  26. package/dist/__tests__/realtime-agent-picker-models.test.d.ts +2 -0
  27. package/dist/__tests__/realtime-agent-picker-models.test.d.ts.map +1 -0
  28. package/dist/__tests__/realtime-agent-picker-models.test.js +49 -0
  29. package/dist/__tests__/realtime-agent-picker-models.test.js.map +1 -0
  30. package/dist/__tests__/realtime-audio-visuals.test.d.ts +2 -0
  31. package/dist/__tests__/realtime-audio-visuals.test.d.ts.map +1 -0
  32. package/dist/__tests__/realtime-audio-visuals.test.js +123 -0
  33. package/dist/__tests__/realtime-audio-visuals.test.js.map +1 -0
  34. package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts +2 -0
  35. package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts.map +1 -0
  36. package/dist/__tests__/realtime-delegation-card-cancel.test.js +48 -0
  37. package/dist/__tests__/realtime-delegation-card-cancel.test.js.map +1 -0
  38. package/dist/__tests__/realtime-disclosure.test.d.ts +2 -0
  39. package/dist/__tests__/realtime-disclosure.test.d.ts.map +1 -0
  40. package/dist/__tests__/realtime-disclosure.test.js +164 -0
  41. package/dist/__tests__/realtime-disclosure.test.js.map +1 -0
  42. package/dist/__tests__/realtime-pairing.test.d.ts +2 -0
  43. package/dist/__tests__/realtime-pairing.test.d.ts.map +1 -0
  44. package/dist/__tests__/realtime-pairing.test.js +207 -0
  45. package/dist/__tests__/realtime-pairing.test.js.map +1 -0
  46. package/dist/__tests__/realtime-review-lifecycle.test.d.ts +2 -0
  47. package/dist/__tests__/realtime-review-lifecycle.test.d.ts.map +1 -0
  48. package/dist/__tests__/realtime-review-lifecycle.test.js +154 -0
  49. package/dist/__tests__/realtime-review-lifecycle.test.js.map +1 -0
  50. package/dist/__tests__/realtime-session-cancel-usage.test.d.ts +2 -0
  51. package/dist/__tests__/realtime-session-cancel-usage.test.d.ts.map +1 -0
  52. package/dist/__tests__/realtime-session-cancel-usage.test.js +230 -0
  53. package/dist/__tests__/realtime-session-cancel-usage.test.js.map +1 -0
  54. package/dist/__tests__/realtime-session-channels.test.d.ts +2 -0
  55. package/dist/__tests__/realtime-session-channels.test.d.ts.map +1 -0
  56. package/dist/__tests__/realtime-session-channels.test.js +252 -0
  57. package/dist/__tests__/realtime-session-channels.test.js.map +1 -0
  58. package/dist/__tests__/realtime-session-client-tools.test.d.ts +2 -0
  59. package/dist/__tests__/realtime-session-client-tools.test.d.ts.map +1 -0
  60. package/dist/__tests__/realtime-session-client-tools.test.js +103 -0
  61. package/dist/__tests__/realtime-session-client-tools.test.js.map +1 -0
  62. package/dist/__tests__/realtime-session-minimized.test.d.ts +2 -0
  63. package/dist/__tests__/realtime-session-minimized.test.d.ts.map +1 -0
  64. package/dist/__tests__/realtime-session-minimized.test.js +32 -0
  65. package/dist/__tests__/realtime-session-minimized.test.js.map +1 -0
  66. package/dist/__tests__/realtime-session-mint.test.d.ts +2 -0
  67. package/dist/__tests__/realtime-session-mint.test.d.ts.map +1 -0
  68. package/dist/__tests__/realtime-session-mint.test.js +69 -0
  69. package/dist/__tests__/realtime-session-mint.test.js.map +1 -0
  70. package/dist/__tests__/realtime-session-policy.test.d.ts +2 -0
  71. package/dist/__tests__/realtime-session-policy.test.d.ts.map +1 -0
  72. package/dist/__tests__/realtime-session-policy.test.js +303 -0
  73. package/dist/__tests__/realtime-session-policy.test.js.map +1 -0
  74. package/dist/__tests__/realtime-session-review.service.test.d.ts +2 -0
  75. package/dist/__tests__/realtime-session-review.service.test.d.ts.map +1 -0
  76. package/dist/__tests__/realtime-session-review.service.test.js +743 -0
  77. package/dist/__tests__/realtime-session-review.service.test.js.map +1 -0
  78. package/dist/__tests__/realtime-session-state.test.d.ts +2 -0
  79. package/dist/__tests__/realtime-session-state.test.d.ts.map +1 -0
  80. package/dist/__tests__/realtime-session-state.test.js +83 -0
  81. package/dist/__tests__/realtime-session-state.test.js.map +1 -0
  82. package/dist/__tests__/realtime-session-timeline-card.test.d.ts +2 -0
  83. package/dist/__tests__/realtime-session-timeline-card.test.d.ts.map +1 -0
  84. package/dist/__tests__/realtime-session-timeline-card.test.js +106 -0
  85. package/dist/__tests__/realtime-session-timeline-card.test.js.map +1 -0
  86. package/dist/__tests__/realtime-session-timeline.test.d.ts +2 -0
  87. package/dist/__tests__/realtime-session-timeline.test.d.ts.map +1 -0
  88. package/dist/__tests__/realtime-session-timeline.test.js +142 -0
  89. package/dist/__tests__/realtime-session-timeline.test.js.map +1 -0
  90. package/dist/__tests__/realtime-sessions-adapter.test.d.ts +19 -0
  91. package/dist/__tests__/realtime-sessions-adapter.test.d.ts.map +1 -0
  92. package/dist/__tests__/realtime-sessions-adapter.test.js +188 -0
  93. package/dist/__tests__/realtime-sessions-adapter.test.js.map +1 -0
  94. package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts +2 -0
  95. package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts.map +1 -0
  96. package/dist/__tests__/realtime-surface-panel-prefs.test.js +100 -0
  97. package/dist/__tests__/realtime-surface-panel-prefs.test.js.map +1 -0
  98. package/dist/__tests__/realtime-surface-tabs-model.test.d.ts +2 -0
  99. package/dist/__tests__/realtime-surface-tabs-model.test.d.ts.map +1 -0
  100. package/dist/__tests__/realtime-surface-tabs-model.test.js +193 -0
  101. package/dist/__tests__/realtime-surface-tabs-model.test.js.map +1 -0
  102. package/dist/__tests__/remote-browser-audio-player.test.d.ts +2 -0
  103. package/dist/__tests__/remote-browser-audio-player.test.d.ts.map +1 -0
  104. package/dist/__tests__/remote-browser-audio-player.test.js +137 -0
  105. package/dist/__tests__/remote-browser-audio-player.test.js.map +1 -0
  106. package/dist/__tests__/remote-browser-channel.test.d.ts +2 -0
  107. package/dist/__tests__/remote-browser-channel.test.d.ts.map +1 -0
  108. package/dist/__tests__/remote-browser-channel.test.js +423 -0
  109. package/dist/__tests__/remote-browser-channel.test.js.map +1 -0
  110. package/dist/__tests__/slot-defaults.test.d.ts +24 -0
  111. package/dist/__tests__/slot-defaults.test.d.ts.map +1 -0
  112. package/dist/__tests__/slot-defaults.test.js +63 -0
  113. package/dist/__tests__/slot-defaults.test.js.map +1 -0
  114. package/dist/__tests__/user-authorization.test.d.ts +2 -0
  115. package/dist/__tests__/user-authorization.test.d.ts.map +1 -0
  116. package/dist/__tests__/user-authorization.test.js +97 -0
  117. package/dist/__tests__/user-authorization.test.js.map +1 -0
  118. package/dist/__tests__/voice-session-narration.test.d.ts +2 -0
  119. package/dist/__tests__/voice-session-narration.test.d.ts.map +1 -0
  120. package/dist/__tests__/voice-session-narration.test.js +609 -0
  121. package/dist/__tests__/voice-session-narration.test.js.map +1 -0
  122. package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts +2 -0
  123. package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts.map +1 -0
  124. package/dist/__tests__/whiteboard-artifact-viewer.test.js +101 -0
  125. package/dist/__tests__/whiteboard-artifact-viewer.test.js.map +1 -0
  126. package/dist/__tests__/whiteboard-channel.test.d.ts +2 -0
  127. package/dist/__tests__/whiteboard-channel.test.d.ts.map +1 -0
  128. package/dist/__tests__/whiteboard-channel.test.js +260 -0
  129. package/dist/__tests__/whiteboard-channel.test.js.map +1 -0
  130. package/dist/__tests__/whiteboard-restore-state.test.d.ts +2 -0
  131. package/dist/__tests__/whiteboard-restore-state.test.d.ts.map +1 -0
  132. package/dist/__tests__/whiteboard-restore-state.test.js +108 -0
  133. package/dist/__tests__/whiteboard-restore-state.test.js.map +1 -0
  134. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +205 -3
  135. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  136. package/dist/lib/components/conversation/conversation-chat-area.component.js +911 -342
  137. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  138. package/dist/lib/components/mention/mention-dropdown.component.js +35 -17
  139. package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -1
  140. package/dist/lib/components/mention/mention-editor.component.d.ts +4 -0
  141. package/dist/lib/components/mention/mention-editor.component.d.ts.map +1 -1
  142. package/dist/lib/components/mention/mention-editor.component.js +43 -19
  143. package/dist/lib/components/mention/mention-editor.component.js.map +1 -1
  144. package/dist/lib/components/message/message-input-box.component.d.ts +17 -1
  145. package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
  146. package/dist/lib/components/message/message-input-box.component.js +73 -15
  147. package/dist/lib/components/message/message-input-box.component.js.map +1 -1
  148. package/dist/lib/components/message/message-input.component.d.ts +142 -6
  149. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  150. package/dist/lib/components/message/message-input.component.js +328 -82
  151. package/dist/lib/components/message/message-input.component.js.map +1 -1
  152. package/dist/lib/components/message/message-item.component.d.ts +28 -3
  153. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  154. package/dist/lib/components/message/message-item.component.js +180 -108
  155. package/dist/lib/components/message/message-item.component.js.map +1 -1
  156. package/dist/lib/components/message/message-list.component.d.ts +81 -2
  157. package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
  158. package/dist/lib/components/message/message-list.component.js +252 -87
  159. package/dist/lib/components/message/message-list.component.js.map +1 -1
  160. package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts +282 -0
  161. package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts.map +1 -0
  162. package/dist/lib/components/realtime/channels/base-realtime-channel-client.js +158 -0
  163. package/dist/lib/components/realtime/channels/base-realtime-channel-client.js.map +1 -0
  164. package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.d.ts +25 -0
  165. package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.d.ts.map +1 -0
  166. package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.js +140 -0
  167. package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.js.map +1 -0
  168. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.d.ts +35 -0
  169. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.d.ts.map +1 -0
  170. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.js +58 -0
  171. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.js.map +1 -0
  172. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts +63 -0
  173. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts.map +1 -0
  174. package/dist/lib/components/realtime/realtime-activity-rail.component.js +260 -0
  175. package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -0
  176. package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts +117 -0
  177. package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts.map +1 -0
  178. package/dist/lib/components/realtime/realtime-agent-banner.component.js +504 -0
  179. package/dist/lib/components/realtime/realtime-agent-banner.component.js.map +1 -0
  180. package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts +168 -0
  181. package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts.map +1 -0
  182. package/dist/lib/components/realtime/realtime-agent-picker.component.js +556 -0
  183. package/dist/lib/components/realtime/realtime-agent-picker.component.js.map +1 -0
  184. package/dist/lib/components/realtime/realtime-audio-visuals.d.ts +97 -0
  185. package/dist/lib/components/realtime/realtime-audio-visuals.d.ts.map +1 -0
  186. package/dist/lib/components/realtime/realtime-audio-visuals.js +139 -0
  187. package/dist/lib/components/realtime/realtime-audio-visuals.js.map +1 -0
  188. package/dist/lib/components/realtime/realtime-channel-strip.component.d.ts +29 -0
  189. package/dist/lib/components/realtime/realtime-channel-strip.component.d.ts.map +1 -0
  190. package/dist/lib/components/realtime/realtime-channel-strip.component.js +69 -0
  191. package/dist/lib/components/realtime/realtime-channel-strip.component.js.map +1 -0
  192. package/dist/lib/components/realtime/realtime-composer.component.d.ts +65 -0
  193. package/dist/lib/components/realtime/realtime-composer.component.d.ts.map +1 -0
  194. package/dist/lib/components/realtime/realtime-composer.component.js +256 -0
  195. package/dist/lib/components/realtime/realtime-composer.component.js.map +1 -0
  196. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +71 -0
  197. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts.map +1 -0
  198. package/dist/lib/components/realtime/realtime-delegation-card.component.js +324 -0
  199. package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -0
  200. package/dist/lib/components/realtime/realtime-disclosure.d.ts +135 -0
  201. package/dist/lib/components/realtime/realtime-disclosure.d.ts.map +1 -0
  202. package/dist/lib/components/realtime/realtime-disclosure.js +188 -0
  203. package/dist/lib/components/realtime/realtime-disclosure.js.map +1 -0
  204. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +491 -0
  205. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts.map +1 -0
  206. package/dist/lib/components/realtime/realtime-session-overlay.component.js +1274 -0
  207. package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -0
  208. package/dist/lib/components/realtime/realtime-session-state.d.ts +191 -0
  209. package/dist/lib/components/realtime/realtime-session-state.d.ts.map +1 -0
  210. package/dist/lib/components/realtime/realtime-session-state.js +244 -0
  211. package/dist/lib/components/realtime/realtime-session-state.js.map +1 -0
  212. package/dist/lib/components/realtime/realtime-session-thread.component.d.ts +56 -0
  213. package/dist/lib/components/realtime/realtime-session-thread.component.d.ts.map +1 -0
  214. package/dist/lib/components/realtime/realtime-session-thread.component.js +246 -0
  215. package/dist/lib/components/realtime/realtime-session-thread.component.js.map +1 -0
  216. package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts +51 -0
  217. package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts.map +1 -0
  218. package/dist/lib/components/realtime/realtime-session-timeline-card.component.js +193 -0
  219. package/dist/lib/components/realtime/realtime-session-timeline-card.component.js.map +1 -0
  220. package/dist/lib/components/realtime/realtime-surface-panel-prefs.d.ts +77 -0
  221. package/dist/lib/components/realtime/realtime-surface-panel-prefs.d.ts.map +1 -0
  222. package/dist/lib/components/realtime/realtime-surface-panel-prefs.js +114 -0
  223. package/dist/lib/components/realtime/realtime-surface-panel-prefs.js.map +1 -0
  224. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +173 -0
  225. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts.map +1 -0
  226. package/dist/lib/components/realtime/realtime-surface-tabs.component.js +496 -0
  227. package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -0
  228. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +181 -0
  229. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts.map +1 -0
  230. package/dist/lib/components/realtime/realtime-surface-tabs.model.js +223 -0
  231. package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -0
  232. package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.d.ts +163 -0
  233. package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.d.ts.map +1 -0
  234. package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.js +309 -0
  235. package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.js.map +1 -0
  236. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.d.ts +168 -0
  237. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.d.ts.map +1 -0
  238. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js +524 -0
  239. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js.map +1 -0
  240. package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.d.ts +346 -0
  241. package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.d.ts.map +1 -0
  242. package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.js +851 -0
  243. package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.js.map +1 -0
  244. package/dist/lib/components/realtime/remote-browser/remote-browser-tools.d.ts +86 -0
  245. package/dist/lib/components/realtime/remote-browser/remote-browser-tools.d.ts.map +1 -0
  246. package/dist/lib/components/realtime/remote-browser/remote-browser-tools.js +210 -0
  247. package/dist/lib/components/realtime/remote-browser/remote-browser-tools.js.map +1 -0
  248. package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.d.ts +48 -0
  249. package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.d.ts.map +1 -0
  250. package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.js +180 -0
  251. package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.js.map +1 -0
  252. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts +119 -0
  253. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts.map +1 -0
  254. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js +274 -0
  255. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js.map +1 -0
  256. package/dist/lib/components/slots/mj-chat-agent-presence-default.component.d.ts +11 -0
  257. package/dist/lib/components/slots/mj-chat-agent-presence-default.component.d.ts.map +1 -0
  258. package/dist/lib/components/slots/mj-chat-agent-presence-default.component.js +98 -0
  259. package/dist/lib/components/slots/mj-chat-agent-presence-default.component.js.map +1 -0
  260. package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.d.ts +9 -0
  261. package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.d.ts.map +1 -0
  262. package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.js +35 -0
  263. package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.js.map +1 -0
  264. package/dist/lib/components/slots/mj-chat-empty-state-default.component.d.ts +28 -0
  265. package/dist/lib/components/slots/mj-chat-empty-state-default.component.d.ts.map +1 -0
  266. package/dist/lib/components/slots/mj-chat-empty-state-default.component.js +104 -0
  267. package/dist/lib/components/slots/mj-chat-empty-state-default.component.js.map +1 -0
  268. package/dist/lib/components/slots/mj-chat-header-default.component.d.ts +11 -0
  269. package/dist/lib/components/slots/mj-chat-header-default.component.d.ts.map +1 -0
  270. package/dist/lib/components/slots/mj-chat-header-default.component.js +103 -0
  271. package/dist/lib/components/slots/mj-chat-header-default.component.js.map +1 -0
  272. package/dist/lib/components/slots/mj-chat-message-bubble-default.component.d.ts +15 -0
  273. package/dist/lib/components/slots/mj-chat-message-bubble-default.component.d.ts.map +1 -0
  274. package/dist/lib/components/slots/mj-chat-message-bubble-default.component.js +73 -0
  275. package/dist/lib/components/slots/mj-chat-message-bubble-default.component.js.map +1 -0
  276. package/dist/lib/components/slots/mj-chat-message-extra-default.component.d.ts +9 -0
  277. package/dist/lib/components/slots/mj-chat-message-extra-default.component.d.ts.map +1 -0
  278. package/dist/lib/components/slots/mj-chat-message-extra-default.component.js +34 -0
  279. package/dist/lib/components/slots/mj-chat-message-extra-default.component.js.map +1 -0
  280. package/dist/lib/components/slots/slot-interfaces.d.ts +95 -0
  281. package/dist/lib/components/slots/slot-interfaces.d.ts.map +1 -0
  282. package/dist/lib/components/slots/slot-interfaces.js +18 -0
  283. package/dist/lib/components/slots/slot-interfaces.js.map +1 -0
  284. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +11 -0
  285. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  286. package/dist/lib/components/workspace/conversation-workspace.component.js +28 -4
  287. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  288. package/dist/lib/conversations.module.d.ts +12 -1
  289. package/dist/lib/conversations.module.d.ts.map +1 -1
  290. package/dist/lib/conversations.module.js +93 -5
  291. package/dist/lib/conversations.module.js.map +1 -1
  292. package/dist/lib/directives/chat-slot.directive.d.ts +44 -0
  293. package/dist/lib/directives/chat-slot.directive.d.ts.map +1 -0
  294. package/dist/lib/directives/chat-slot.directive.js +54 -0
  295. package/dist/lib/directives/chat-slot.directive.js.map +1 -0
  296. package/dist/lib/events/chat-events.d.ts +137 -0
  297. package/dist/lib/events/chat-events.d.ts.map +1 -0
  298. package/dist/lib/events/chat-events.js +189 -0
  299. package/dist/lib/events/chat-events.js.map +1 -0
  300. package/dist/lib/models/conversation-state.model.d.ts +2 -1
  301. package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
  302. package/dist/lib/models/conversation-state.model.js.map +1 -1
  303. package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
  304. package/dist/lib/services/artifact-state.service.js +23 -6
  305. package/dist/lib/services/artifact-state.service.js.map +1 -1
  306. package/dist/lib/services/conversation-agent.service.d.ts +60 -74
  307. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  308. package/dist/lib/services/conversation-agent.service.js +100 -313
  309. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  310. package/dist/lib/services/conversation-bridge.service.d.ts +11 -70
  311. package/dist/lib/services/conversation-bridge.service.d.ts.map +1 -1
  312. package/dist/lib/services/conversation-bridge.service.js +51 -85
  313. package/dist/lib/services/conversation-bridge.service.js.map +1 -1
  314. package/dist/lib/services/conversation-naming.d.ts +63 -0
  315. package/dist/lib/services/conversation-naming.d.ts.map +1 -0
  316. package/dist/lib/services/conversation-naming.js +58 -0
  317. package/dist/lib/services/conversation-naming.js.map +1 -0
  318. package/dist/lib/services/conversation-streaming.service.d.ts +24 -154
  319. package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -1
  320. package/dist/lib/services/conversation-streaming.service.js +39 -361
  321. package/dist/lib/services/conversation-streaming.service.js.map +1 -1
  322. package/dist/lib/services/conversations-runtime-bootstrap.service.d.ts +10 -0
  323. package/dist/lib/services/conversations-runtime-bootstrap.service.d.ts.map +1 -0
  324. package/dist/lib/services/conversations-runtime-bootstrap.service.js +104 -0
  325. package/dist/lib/services/conversations-runtime-bootstrap.service.js.map +1 -0
  326. package/dist/lib/services/delegation-result-parser.d.ts +45 -0
  327. package/dist/lib/services/delegation-result-parser.d.ts.map +1 -0
  328. package/dist/lib/services/delegation-result-parser.js +48 -0
  329. package/dist/lib/services/delegation-result-parser.js.map +1 -0
  330. package/dist/lib/services/mention-autocomplete.service.d.ts +19 -4
  331. package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
  332. package/dist/lib/services/mention-autocomplete.service.js +65 -4
  333. package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
  334. package/dist/lib/services/mention-parser.service.d.ts +8 -53
  335. package/dist/lib/services/mention-parser.service.d.ts.map +1 -1
  336. package/dist/lib/services/mention-parser.service.js +32 -243
  337. package/dist/lib/services/mention-parser.service.js.map +1 -1
  338. package/dist/lib/services/narration-template.d.ts +42 -0
  339. package/dist/lib/services/narration-template.d.ts.map +1 -0
  340. package/dist/lib/services/narration-template.js +73 -0
  341. package/dist/lib/services/narration-template.js.map +1 -0
  342. package/dist/lib/services/realtime-pairing.d.ts +120 -0
  343. package/dist/lib/services/realtime-pairing.d.ts.map +1 -0
  344. package/dist/lib/services/realtime-pairing.js +150 -0
  345. package/dist/lib/services/realtime-pairing.js.map +1 -0
  346. package/dist/lib/services/realtime-session-review.service.d.ts +233 -0
  347. package/dist/lib/services/realtime-session-review.service.d.ts.map +1 -0
  348. package/dist/lib/services/realtime-session-review.service.js +417 -0
  349. package/dist/lib/services/realtime-session-review.service.js.map +1 -0
  350. package/dist/lib/services/realtime-session.service.d.ts +739 -0
  351. package/dist/lib/services/realtime-session.service.d.ts.map +1 -0
  352. package/dist/lib/services/realtime-session.service.js +1647 -0
  353. package/dist/lib/services/realtime-session.service.js.map +1 -0
  354. package/dist/lib/services/realtime-sessions-adapter.d.ts +54 -0
  355. package/dist/lib/services/realtime-sessions-adapter.d.ts.map +1 -0
  356. package/dist/lib/services/realtime-sessions-adapter.js +154 -0
  357. package/dist/lib/services/realtime-sessions-adapter.js.map +1 -0
  358. package/dist/lib/services/user-authorization.d.ts +67 -0
  359. package/dist/lib/services/user-authorization.d.ts.map +1 -0
  360. package/dist/lib/services/user-authorization.js +66 -0
  361. package/dist/lib/services/user-authorization.js.map +1 -0
  362. package/dist/lib/utils/realtime-session-timeline.d.ts +84 -0
  363. package/dist/lib/utils/realtime-session-timeline.d.ts.map +1 -0
  364. package/dist/lib/utils/realtime-session-timeline.js +94 -0
  365. package/dist/lib/utils/realtime-session-timeline.js.map +1 -0
  366. package/dist/public-api.d.ts +41 -0
  367. package/dist/public-api.d.ts.map +1 -1
  368. package/dist/public-api.js +50 -0
  369. package/dist/public-api.js.map +1 -1
  370. package/package.json +27 -24
  371. package/dist/__tests__/conversation-bridge.service.test.d.ts +0 -2
  372. package/dist/__tests__/conversation-bridge.service.test.d.ts.map +0 -1
  373. package/dist/__tests__/conversation-bridge.service.test.js +0 -98
  374. package/dist/__tests__/conversation-bridge.service.test.js.map +0 -1
  375. package/dist/__tests__/mention-parser.test.d.ts +0 -2
  376. package/dist/__tests__/mention-parser.test.d.ts.map +0 -1
  377. package/dist/__tests__/mention-parser.test.js +0 -154
  378. package/dist/__tests__/mention-parser.test.js.map +0 -1
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Name of the MJ Authorization that gates ADVANCED realtime session controls — explicit
3
+ * voice-model selection and any other `configOverridesJson` content on the
4
+ * `StartRealtimeClientSession` mint. The server enforces this authorization on the
5
+ * mutation itself; client-side checks (see {@link UserHoldsAuthorization}) are pure UX
6
+ * disclosure — unauthorized users simply never see the override controls.
7
+ */
8
+ export declare const REALTIME_ADVANCED_SESSION_CONTROLS = "Realtime: Advanced Session Controls";
9
+ /**
10
+ * The narrow slice of an `MJ: Authorizations` metadata row the holds-authorization check
11
+ * reads. `AuthorizationInfo` (from `@memberjunction/core`) is structurally assignable.
12
+ */
13
+ export interface AuthorizationRecordLike {
14
+ ID: string;
15
+ Name: string;
16
+ IsActive: boolean;
17
+ }
18
+ /**
19
+ * The narrow slice of an `MJ: Authorization Roles` metadata row the check reads.
20
+ * `AuthorizationRoleInfo` (from `@memberjunction/core`) is structurally assignable.
21
+ */
22
+ export interface AuthorizationRoleRecordLike {
23
+ AuthorizationID: string;
24
+ RoleID: string;
25
+ /** `'Allow'` grants; anything else (including `'Deny'`, empty, or missing) denies. */
26
+ Type: string | null;
27
+ }
28
+ /**
29
+ * The metadata surface the check resolves against — `IMetadataProvider` (whose cached
30
+ * metadata exposes both collections) is structurally assignable, so callers can pass
31
+ * `this.ProviderToUse` directly.
32
+ */
33
+ export interface AuthorizationMetadataSource {
34
+ Authorizations?: ReadonlyArray<AuthorizationRecordLike> | null;
35
+ AuthorizationRoles?: ReadonlyArray<AuthorizationRoleRecordLike> | null;
36
+ }
37
+ /** The narrow slice of a `UserInfo` the check reads — just the user's role assignments. */
38
+ export interface AuthorizationUserLike {
39
+ UserRoles?: ReadonlyArray<{
40
+ RoleID: string;
41
+ }> | null;
42
+ }
43
+ /**
44
+ * PURE client-side check of whether `user` holds the named MJ Authorization, resolved
45
+ * entirely from cached metadata: Authorizations ↔ Authorization Roles ↔ the user's roles.
46
+ *
47
+ * Semantics mirror `AuthorizationInfo.UserCanExecute` (the canonical server/core
48
+ * evaluation): the authorization must exist and be ACTIVE; any matching **Deny** row on
49
+ * one of the user's roles vetoes globally; otherwise at least one matching **Allow** row
50
+ * is required. Name matching is trim + case-insensitive; UUID comparisons use
51
+ * `UUIDsEqual` (SQL Server vs PostgreSQL casing safe).
52
+ *
53
+ * **Defensive by design**: any missing piece — no user, no roles, no provider, missing
54
+ * metadata collections, unknown/inactive authorization, null `Type` — resolves to
55
+ * `false`. This helper is a *disclosure* gate only; the server independently enforces
56
+ * the authorization on the protected mutation.
57
+ *
58
+ * @param user The user to evaluate (e.g. `provider.CurrentUser`).
59
+ * @param authorizationName The `MJ: Authorizations.Name` to check (e.g.
60
+ * {@link REALTIME_ADVANCED_SESSION_CONTROLS}).
61
+ * @param metadataSource The cached-metadata source — typically the component's
62
+ * `ProviderToUse` (`IMetadataProvider`).
63
+ * @returns `true` only when an active authorization of that name grants the user via an
64
+ * Allow role with no Deny veto; `false` in every other (including degraded) case.
65
+ */
66
+ export declare function UserHoldsAuthorization(user: AuthorizationUserLike | null | undefined, authorizationName: string, metadataSource: AuthorizationMetadataSource | null | undefined): boolean;
67
+ //# sourceMappingURL=user-authorization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-authorization.d.ts","sourceRoot":"","sources":["../../../src/lib/services/user-authorization.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,eAAO,MAAM,kCAAkC,wCAAwC,CAAC;AAExF;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IAC1C,cAAc,CAAC,EAAE,aAAa,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC;IAC/D,kBAAkB,CAAC,EAAE,aAAa,CAAC,2BAA2B,CAAC,GAAG,IAAI,CAAC;CACxE;AAED,2FAA2F;AAC3F,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,aAAa,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;CACtD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,EAC9C,iBAAiB,EAAE,MAAM,EACzB,cAAc,EAAE,2BAA2B,GAAG,IAAI,GAAG,SAAS,GAC7D,OAAO,CAmCT"}
@@ -0,0 +1,66 @@
1
+ import { UUIDsEqual } from '@memberjunction/global';
2
+ /**
3
+ * Name of the MJ Authorization that gates ADVANCED realtime session controls — explicit
4
+ * voice-model selection and any other `configOverridesJson` content on the
5
+ * `StartRealtimeClientSession` mint. The server enforces this authorization on the
6
+ * mutation itself; client-side checks (see {@link UserHoldsAuthorization}) are pure UX
7
+ * disclosure — unauthorized users simply never see the override controls.
8
+ */
9
+ export const REALTIME_ADVANCED_SESSION_CONTROLS = 'Realtime: Advanced Session Controls';
10
+ /**
11
+ * PURE client-side check of whether `user` holds the named MJ Authorization, resolved
12
+ * entirely from cached metadata: Authorizations ↔ Authorization Roles ↔ the user's roles.
13
+ *
14
+ * Semantics mirror `AuthorizationInfo.UserCanExecute` (the canonical server/core
15
+ * evaluation): the authorization must exist and be ACTIVE; any matching **Deny** row on
16
+ * one of the user's roles vetoes globally; otherwise at least one matching **Allow** row
17
+ * is required. Name matching is trim + case-insensitive; UUID comparisons use
18
+ * `UUIDsEqual` (SQL Server vs PostgreSQL casing safe).
19
+ *
20
+ * **Defensive by design**: any missing piece — no user, no roles, no provider, missing
21
+ * metadata collections, unknown/inactive authorization, null `Type` — resolves to
22
+ * `false`. This helper is a *disclosure* gate only; the server independently enforces
23
+ * the authorization on the protected mutation.
24
+ *
25
+ * @param user The user to evaluate (e.g. `provider.CurrentUser`).
26
+ * @param authorizationName The `MJ: Authorizations.Name` to check (e.g.
27
+ * {@link REALTIME_ADVANCED_SESSION_CONTROLS}).
28
+ * @param metadataSource The cached-metadata source — typically the component's
29
+ * `ProviderToUse` (`IMetadataProvider`).
30
+ * @returns `true` only when an active authorization of that name grants the user via an
31
+ * Allow role with no Deny veto; `false` in every other (including degraded) case.
32
+ */
33
+ export function UserHoldsAuthorization(user, authorizationName, metadataSource) {
34
+ const userRoles = user?.UserRoles ?? [];
35
+ const authorizations = metadataSource?.Authorizations ?? [];
36
+ const authorizationRoles = metadataSource?.AuthorizationRoles ?? [];
37
+ const targetName = authorizationName?.trim().toLowerCase() ?? '';
38
+ if (userRoles.length === 0 || authorizations.length === 0 || authorizationRoles.length === 0 || targetName.length === 0) {
39
+ return false;
40
+ }
41
+ const matchingAuths = authorizations.filter(a => a.IsActive === true && (a.Name ?? '').trim().toLowerCase() === targetName);
42
+ if (matchingAuths.length === 0) {
43
+ return false;
44
+ }
45
+ let hasAllow = false;
46
+ for (const auth of matchingAuths) {
47
+ const authRoles = authorizationRoles.filter(ar => UUIDsEqual(ar.AuthorizationID, auth.ID));
48
+ for (const userRole of userRoles) {
49
+ for (const ar of authRoles) {
50
+ if (!UUIDsEqual(ar.RoleID, userRole.RoleID)) {
51
+ continue;
52
+ }
53
+ // Mirror AuthorizationRoleInfo.AuthorizationType(): 'allow' grants, anything
54
+ // else — including 'Deny', empty, or null — is a Deny, and Deny wins globally.
55
+ if ((ar.Type ?? '').trim().toLowerCase() === 'allow') {
56
+ hasAllow = true;
57
+ }
58
+ else {
59
+ return false;
60
+ }
61
+ }
62
+ }
63
+ }
64
+ return hasAllow;
65
+ }
66
+ //# sourceMappingURL=user-authorization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-authorization.js","sourceRoot":"","sources":["../../../src/lib/services/user-authorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,qCAAqC,CAAC;AAsCxF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAA8C,EAC9C,iBAAyB,EACzB,cAA8D;IAE9D,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC;IACxC,MAAM,cAAc,GAAG,cAAc,EAAE,cAAc,IAAI,EAAE,CAAC;IAC5D,MAAM,kBAAkB,GAAG,cAAc,EAAE,kBAAkB,IAAI,EAAE,CAAC;IACpE,MAAM,UAAU,GAAG,iBAAiB,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IACjE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CACzC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,UAAU,CAC/E,CAAC;IACF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3F,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;gBAC3B,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5C,SAAS;gBACX,CAAC;gBACD,6EAA6E;gBAC7E,+EAA+E;gBAC/E,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;oBACrD,QAAQ,GAAG,IAAI,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACN,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["import { UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Name of the MJ Authorization that gates ADVANCED realtime session controls — explicit\n * voice-model selection and any other `configOverridesJson` content on the\n * `StartRealtimeClientSession` mint. The server enforces this authorization on the\n * mutation itself; client-side checks (see {@link UserHoldsAuthorization}) are pure UX\n * disclosure — unauthorized users simply never see the override controls.\n */\nexport const REALTIME_ADVANCED_SESSION_CONTROLS = 'Realtime: Advanced Session Controls';\n\n/**\n * The narrow slice of an `MJ: Authorizations` metadata row the holds-authorization check\n * reads. `AuthorizationInfo` (from `@memberjunction/core`) is structurally assignable.\n */\nexport interface AuthorizationRecordLike {\n ID: string;\n Name: string;\n IsActive: boolean;\n}\n\n/**\n * The narrow slice of an `MJ: Authorization Roles` metadata row the check reads.\n * `AuthorizationRoleInfo` (from `@memberjunction/core`) is structurally assignable.\n */\nexport interface AuthorizationRoleRecordLike {\n AuthorizationID: string;\n RoleID: string;\n /** `'Allow'` grants; anything else (including `'Deny'`, empty, or missing) denies. */\n Type: string | null;\n}\n\n/**\n * The metadata surface the check resolves against — `IMetadataProvider` (whose cached\n * metadata exposes both collections) is structurally assignable, so callers can pass\n * `this.ProviderToUse` directly.\n */\nexport interface AuthorizationMetadataSource {\n Authorizations?: ReadonlyArray<AuthorizationRecordLike> | null;\n AuthorizationRoles?: ReadonlyArray<AuthorizationRoleRecordLike> | null;\n}\n\n/** The narrow slice of a `UserInfo` the check reads — just the user's role assignments. */\nexport interface AuthorizationUserLike {\n UserRoles?: ReadonlyArray<{ RoleID: string }> | null;\n}\n\n/**\n * PURE client-side check of whether `user` holds the named MJ Authorization, resolved\n * entirely from cached metadata: Authorizations ↔ Authorization Roles ↔ the user's roles.\n *\n * Semantics mirror `AuthorizationInfo.UserCanExecute` (the canonical server/core\n * evaluation): the authorization must exist and be ACTIVE; any matching **Deny** row on\n * one of the user's roles vetoes globally; otherwise at least one matching **Allow** row\n * is required. Name matching is trim + case-insensitive; UUID comparisons use\n * `UUIDsEqual` (SQL Server vs PostgreSQL casing safe).\n *\n * **Defensive by design**: any missing piece — no user, no roles, no provider, missing\n * metadata collections, unknown/inactive authorization, null `Type` — resolves to\n * `false`. This helper is a *disclosure* gate only; the server independently enforces\n * the authorization on the protected mutation.\n *\n * @param user The user to evaluate (e.g. `provider.CurrentUser`).\n * @param authorizationName The `MJ: Authorizations.Name` to check (e.g.\n * {@link REALTIME_ADVANCED_SESSION_CONTROLS}).\n * @param metadataSource The cached-metadata source — typically the component's\n * `ProviderToUse` (`IMetadataProvider`).\n * @returns `true` only when an active authorization of that name grants the user via an\n * Allow role with no Deny veto; `false` in every other (including degraded) case.\n */\nexport function UserHoldsAuthorization(\n user: AuthorizationUserLike | null | undefined,\n authorizationName: string,\n metadataSource: AuthorizationMetadataSource | null | undefined\n): boolean {\n const userRoles = user?.UserRoles ?? [];\n const authorizations = metadataSource?.Authorizations ?? [];\n const authorizationRoles = metadataSource?.AuthorizationRoles ?? [];\n const targetName = authorizationName?.trim().toLowerCase() ?? '';\n if (userRoles.length === 0 || authorizations.length === 0 || authorizationRoles.length === 0 || targetName.length === 0) {\n return false;\n }\n\n const matchingAuths = authorizations.filter(\n a => a.IsActive === true && (a.Name ?? '').trim().toLowerCase() === targetName\n );\n if (matchingAuths.length === 0) {\n return false;\n }\n\n let hasAllow = false;\n for (const auth of matchingAuths) {\n const authRoles = authorizationRoles.filter(ar => UUIDsEqual(ar.AuthorizationID, auth.ID));\n for (const userRole of userRoles) {\n for (const ar of authRoles) {\n if (!UUIDsEqual(ar.RoleID, userRole.RoleID)) {\n continue;\n }\n // Mirror AuthorizationRoleInfo.AuthorizationType(): 'allow' grants, anything\n // else — including 'Deny', empty, or null — is a Deny, and Deny wins globally.\n if ((ar.Type ?? '').trim().toLowerCase() === 'allow') {\n hasAllow = true;\n } else {\n return false;\n }\n }\n }\n }\n return hasAllow;\n}\n"]}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Realtime-session timeline grouping for the standard conversation message list.
3
+ *
4
+ * `MJ: Conversation Details` rows persisted DURING a live realtime session are stamped
5
+ * with `AgentSessionID` (the transcript relay stamps every caption turn; the artifact
6
+ * junction-anchor rows are stamped too). Rendering those rows as the normal back/forth
7
+ * chat bubbles is wrong — a 40-turn voice call would flood the timeline. Instead the
8
+ * message list collapses each session's stamped rows into ONE distinct timeline element
9
+ * (a session card) at the session's chronological position, from which the user can
10
+ * reopen the existing SESSION REVIEW overlay.
11
+ *
12
+ * This module is PURE (no Angular, no entities) so the grouping pass is unit-testable:
13
+ * the source shape is a minimal structural interface that `MJConversationDetailEntity`
14
+ * satisfies via its getters.
15
+ */
16
+ /** The minimal detail-row shape the grouping pass reads (satisfied by `MJConversationDetailEntity`). */
17
+ export interface RealtimeTimelineSourceDetail {
18
+ ID: string;
19
+ /** Stamped session id for rows persisted during a live realtime session; null for normal chat rows. */
20
+ AgentSessionID: string | null;
21
+ /** `User` | `AI` | `Error` on the entity; widened to string for structural compatibility. */
22
+ Role: string;
23
+ Message: string | null;
24
+ /** Hidden rows (system/junction-anchor details) never count as visible turns. */
25
+ HiddenToUser: boolean;
26
+ __mj_CreatedAt: Date | null;
27
+ }
28
+ /**
29
+ * One realtime session's collapsed block: everything the timeline card renders that can
30
+ * be computed from the conversation's already-loaded detail rows (no extra queries).
31
+ */
32
+ export interface RealtimeSessionTimelineGroup {
33
+ /** `MJ: AI Agent Sessions.ID` the block's rows are stamped with (original casing of the first row). */
34
+ SessionID: string;
35
+ /** Timestamp of the session's first stamped row (≈ when the session's transcript began). */
36
+ StartedAt: Date | null;
37
+ /** Timestamp of the session's last stamped row (≈ when the transcript ended). */
38
+ EndedAt: Date | null;
39
+ /** VISIBLE caption turns: non-hidden `User`/`AI` rows with text (mirrors review-mode's turn mapping). */
40
+ TurnCount: number;
41
+ /** ALL stamped rows folded into this block, hidden anchors included. */
42
+ DetailCount: number;
43
+ /** Who spoke the last visible turn (AI → `Assistant`), or null when no visible turn exists. */
44
+ LastTurnRole: 'User' | 'Assistant' | null;
45
+ /** The last visible turn's text (untruncated — the card ellipsizes), or null. */
46
+ LastTurnPreview: string | null;
47
+ }
48
+ /**
49
+ * Session-row metadata the card enriches itself with when the host has it (one batched
50
+ * `MJ: AI Agent Sessions` lookup per conversation). All-optional by design: a missing
51
+ * meta entry degrades the card to its generic label with no status chip.
52
+ */
53
+ export interface RealtimeSessionTimelineMeta {
54
+ /** `MJ: AI Agent Sessions.ID`. */
55
+ SessionID: string;
56
+ /** Denormalized agent display name from the session view (usually the co-agent). */
57
+ AgentName: string | null;
58
+ Status: 'Active' | 'Closed' | 'Idle' | null;
59
+ /** Why the session closed (`Error` | `Explicit` | `Janitor` | `Shutdown`), when closed. */
60
+ CloseReason: string | null;
61
+ ClosedAt: Date | null;
62
+ }
63
+ /** One renderable timeline entry: a normal chat message OR a collapsed session block. */
64
+ export type ConversationTimelineItem<T extends RealtimeTimelineSourceDetail> = {
65
+ Kind: 'message';
66
+ Detail: T;
67
+ } | {
68
+ Kind: 'session';
69
+ Group: RealtimeSessionTimelineGroup;
70
+ };
71
+ /**
72
+ * Builds the renderable conversation timeline from the loaded detail rows (chronological,
73
+ * as the engine returns them):
74
+ * - rows WITHOUT an `AgentSessionID` pass through unchanged, in order;
75
+ * - rows WITH one collapse into ONE session block per session id, positioned where the
76
+ * session's FIRST stamped row sits. Later stamped rows of the same session (even when
77
+ * interleaved with normal messages) fold into that same block — one element per
78
+ * session, period.
79
+ *
80
+ * Session-id comparison is case-insensitive ({@link NormalizeUUID}) so SQL Server
81
+ * (uppercase) and PostgreSQL (lowercase) ids group identically.
82
+ */
83
+ export declare function BuildConversationTimeline<T extends RealtimeTimelineSourceDetail>(details: readonly T[]): ConversationTimelineItem<T>[];
84
+ //# sourceMappingURL=realtime-session-timeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime-session-timeline.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/realtime-session-timeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,wGAAwG;AACxG,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,uGAAuG;IACvG,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,6FAA6F;IAC7F,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,iFAAiF;IACjF,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,IAAI,GAAG,IAAI,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IAC3C,uGAAuG;IACvG,SAAS,EAAE,MAAM,CAAC;IAClB,4FAA4F;IAC5F,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,iFAAiF;IACjF,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,yGAAyG;IACzG,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;IACpB,+FAA+F;IAC/F,YAAY,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IAC1C,iFAAiF;IACjF,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IAC1C,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5C,2FAA2F;IAC3F,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;CACvB;AAED,yFAAyF;AACzF,MAAM,MAAM,wBAAwB,CAAC,CAAC,SAAS,4BAA4B,IACvE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,CAAC,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,4BAA4B,CAAA;CAAE,CAAC;AAE7D;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,4BAA4B,EAC9E,OAAO,EAAE,SAAS,CAAC,EAAE,GACpB,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAoB/B"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Realtime-session timeline grouping for the standard conversation message list.
3
+ *
4
+ * `MJ: Conversation Details` rows persisted DURING a live realtime session are stamped
5
+ * with `AgentSessionID` (the transcript relay stamps every caption turn; the artifact
6
+ * junction-anchor rows are stamped too). Rendering those rows as the normal back/forth
7
+ * chat bubbles is wrong — a 40-turn voice call would flood the timeline. Instead the
8
+ * message list collapses each session's stamped rows into ONE distinct timeline element
9
+ * (a session card) at the session's chronological position, from which the user can
10
+ * reopen the existing SESSION REVIEW overlay.
11
+ *
12
+ * This module is PURE (no Angular, no entities) so the grouping pass is unit-testable:
13
+ * the source shape is a minimal structural interface that `MJConversationDetailEntity`
14
+ * satisfies via its getters.
15
+ */
16
+ import { NormalizeUUID } from '@memberjunction/global';
17
+ /**
18
+ * Builds the renderable conversation timeline from the loaded detail rows (chronological,
19
+ * as the engine returns them):
20
+ * - rows WITHOUT an `AgentSessionID` pass through unchanged, in order;
21
+ * - rows WITH one collapse into ONE session block per session id, positioned where the
22
+ * session's FIRST stamped row sits. Later stamped rows of the same session (even when
23
+ * interleaved with normal messages) fold into that same block — one element per
24
+ * session, period.
25
+ *
26
+ * Session-id comparison is case-insensitive ({@link NormalizeUUID}) so SQL Server
27
+ * (uppercase) and PostgreSQL (lowercase) ids group identically.
28
+ */
29
+ export function BuildConversationTimeline(details) {
30
+ const items = [];
31
+ const groupsBySessionKey = new Map();
32
+ for (const detail of details) {
33
+ const sessionId = normalizeSessionId(detail.AgentSessionID);
34
+ if (!sessionId) {
35
+ items.push({ Kind: 'message', Detail: detail });
36
+ continue;
37
+ }
38
+ const key = NormalizeUUID(sessionId);
39
+ let group = groupsBySessionKey.get(key);
40
+ if (!group) {
41
+ group = createGroup(sessionId);
42
+ groupsBySessionKey.set(key, group);
43
+ items.push({ Kind: 'session', Group: group });
44
+ }
45
+ foldDetailIntoGroup(group, detail);
46
+ }
47
+ return items;
48
+ }
49
+ /** Trims the stamped session id; empty/whitespace ids are treated as unstamped. */
50
+ function normalizeSessionId(raw) {
51
+ const trimmed = raw?.trim() ?? '';
52
+ return trimmed.length > 0 ? trimmed : null;
53
+ }
54
+ /** A fresh, empty session block for the given session id. */
55
+ function createGroup(sessionId) {
56
+ return {
57
+ SessionID: sessionId,
58
+ StartedAt: null,
59
+ EndedAt: null,
60
+ TurnCount: 0,
61
+ DetailCount: 0,
62
+ LastTurnRole: null,
63
+ LastTurnPreview: null
64
+ };
65
+ }
66
+ /** Folds one stamped detail row into its session block (range, counts, last-turn preview). */
67
+ function foldDetailIntoGroup(group, detail) {
68
+ group.DetailCount++;
69
+ const at = toDate(detail.__mj_CreatedAt);
70
+ if (at) {
71
+ if (!group.StartedAt || at.getTime() < group.StartedAt.getTime()) {
72
+ group.StartedAt = at;
73
+ }
74
+ if (!group.EndedAt || at.getTime() > group.EndedAt.getTime()) {
75
+ group.EndedAt = at;
76
+ }
77
+ }
78
+ const text = detail.Message?.trim() ?? '';
79
+ const isVisibleTurn = !detail.HiddenToUser && text.length > 0 && (detail.Role === 'User' || detail.Role === 'AI');
80
+ if (isVisibleTurn) {
81
+ group.TurnCount++;
82
+ group.LastTurnRole = detail.Role === 'AI' ? 'Assistant' : 'User';
83
+ group.LastTurnPreview = text;
84
+ }
85
+ }
86
+ /** Tolerant date conversion — raw cache rows can carry ISO strings instead of Dates. */
87
+ function toDate(value) {
88
+ if (value == null) {
89
+ return null;
90
+ }
91
+ const date = value instanceof Date ? value : new Date(value);
92
+ return isNaN(date.getTime()) ? null : date;
93
+ }
94
+ //# sourceMappingURL=realtime-session-timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime-session-timeline.js","sourceRoot":"","sources":["../../../src/lib/utils/realtime-session-timeline.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Realtime-session timeline grouping for the standard conversation message list.\n *\n * `MJ: Conversation Details` rows persisted DURING a live realtime session are stamped\n * with `AgentSessionID` (the transcript relay stamps every caption turn; the artifact\n * junction-anchor rows are stamped too). Rendering those rows as the normal back/forth\n * chat bubbles is wrong — a 40-turn voice call would flood the timeline. Instead the\n * message list collapses each session's stamped rows into ONE distinct timeline element\n * (a session card) at the session's chronological position, from which the user can\n * reopen the existing SESSION REVIEW overlay.\n *\n * This module is PURE (no Angular, no entities) so the grouping pass is unit-testable:\n * the source shape is a minimal structural interface that `MJConversationDetailEntity`\n * satisfies via its getters.\n */\n\nimport { NormalizeUUID } from '@memberjunction/global';\n\n/** The minimal detail-row shape the grouping pass reads (satisfied by `MJConversationDetailEntity`). */\nexport interface RealtimeTimelineSourceDetail {\n ID: string;\n /** Stamped session id for rows persisted during a live realtime session; null for normal chat rows. */\n AgentSessionID: string | null;\n /** `User` | `AI` | `Error` on the entity; widened to string for structural compatibility. */\n Role: string;\n Message: string | null;\n /** Hidden rows (system/junction-anchor details) never count as visible turns. */\n HiddenToUser: boolean;\n __mj_CreatedAt: Date | null;\n}\n\n/**\n * One realtime session's collapsed block: everything the timeline card renders that can\n * be computed from the conversation's already-loaded detail rows (no extra queries).\n */\nexport interface RealtimeSessionTimelineGroup {\n /** `MJ: AI Agent Sessions.ID` the block's rows are stamped with (original casing of the first row). */\n SessionID: string;\n /** Timestamp of the session's first stamped row (≈ when the session's transcript began). */\n StartedAt: Date | null;\n /** Timestamp of the session's last stamped row (≈ when the transcript ended). */\n EndedAt: Date | null;\n /** VISIBLE caption turns: non-hidden `User`/`AI` rows with text (mirrors review-mode's turn mapping). */\n TurnCount: number;\n /** ALL stamped rows folded into this block, hidden anchors included. */\n DetailCount: number;\n /** Who spoke the last visible turn (AI → `Assistant`), or null when no visible turn exists. */\n LastTurnRole: 'User' | 'Assistant' | null;\n /** The last visible turn's text (untruncated — the card ellipsizes), or null. */\n LastTurnPreview: string | null;\n}\n\n/**\n * Session-row metadata the card enriches itself with when the host has it (one batched\n * `MJ: AI Agent Sessions` lookup per conversation). All-optional by design: a missing\n * meta entry degrades the card to its generic label with no status chip.\n */\nexport interface RealtimeSessionTimelineMeta {\n /** `MJ: AI Agent Sessions.ID`. */\n SessionID: string;\n /** Denormalized agent display name from the session view (usually the co-agent). */\n AgentName: string | null;\n Status: 'Active' | 'Closed' | 'Idle' | null;\n /** Why the session closed (`Error` | `Explicit` | `Janitor` | `Shutdown`), when closed. */\n CloseReason: string | null;\n ClosedAt: Date | null;\n}\n\n/** One renderable timeline entry: a normal chat message OR a collapsed session block. */\nexport type ConversationTimelineItem<T extends RealtimeTimelineSourceDetail> =\n | { Kind: 'message'; Detail: T }\n | { Kind: 'session'; Group: RealtimeSessionTimelineGroup };\n\n/**\n * Builds the renderable conversation timeline from the loaded detail rows (chronological,\n * as the engine returns them):\n * - rows WITHOUT an `AgentSessionID` pass through unchanged, in order;\n * - rows WITH one collapse into ONE session block per session id, positioned where the\n * session's FIRST stamped row sits. Later stamped rows of the same session (even when\n * interleaved with normal messages) fold into that same block — one element per\n * session, period.\n *\n * Session-id comparison is case-insensitive ({@link NormalizeUUID}) so SQL Server\n * (uppercase) and PostgreSQL (lowercase) ids group identically.\n */\nexport function BuildConversationTimeline<T extends RealtimeTimelineSourceDetail>(\n details: readonly T[]\n): ConversationTimelineItem<T>[] {\n const items: ConversationTimelineItem<T>[] = [];\n const groupsBySessionKey = new Map<string, RealtimeSessionTimelineGroup>();\n\n for (const detail of details) {\n const sessionId = normalizeSessionId(detail.AgentSessionID);\n if (!sessionId) {\n items.push({ Kind: 'message', Detail: detail });\n continue;\n }\n const key = NormalizeUUID(sessionId);\n let group = groupsBySessionKey.get(key);\n if (!group) {\n group = createGroup(sessionId);\n groupsBySessionKey.set(key, group);\n items.push({ Kind: 'session', Group: group });\n }\n foldDetailIntoGroup(group, detail);\n }\n return items;\n}\n\n/** Trims the stamped session id; empty/whitespace ids are treated as unstamped. */\nfunction normalizeSessionId(raw: string | null): string | null {\n const trimmed = raw?.trim() ?? '';\n return trimmed.length > 0 ? trimmed : null;\n}\n\n/** A fresh, empty session block for the given session id. */\nfunction createGroup(sessionId: string): RealtimeSessionTimelineGroup {\n return {\n SessionID: sessionId,\n StartedAt: null,\n EndedAt: null,\n TurnCount: 0,\n DetailCount: 0,\n LastTurnRole: null,\n LastTurnPreview: null\n };\n}\n\n/** Folds one stamped detail row into its session block (range, counts, last-turn preview). */\nfunction foldDetailIntoGroup(group: RealtimeSessionTimelineGroup, detail: RealtimeTimelineSourceDetail): void {\n group.DetailCount++;\n\n const at = toDate(detail.__mj_CreatedAt);\n if (at) {\n if (!group.StartedAt || at.getTime() < group.StartedAt.getTime()) {\n group.StartedAt = at;\n }\n if (!group.EndedAt || at.getTime() > group.EndedAt.getTime()) {\n group.EndedAt = at;\n }\n }\n\n const text = detail.Message?.trim() ?? '';\n const isVisibleTurn = !detail.HiddenToUser && text.length > 0 && (detail.Role === 'User' || detail.Role === 'AI');\n if (isVisibleTurn) {\n group.TurnCount++;\n group.LastTurnRole = detail.Role === 'AI' ? 'Assistant' : 'User';\n group.LastTurnPreview = text;\n }\n}\n\n/** Tolerant date conversion — raw cache rows can carry ISO strings instead of Dates. */\nfunction toDate(value: Date | string | null | undefined): Date | null {\n if (value == null) {\n return null;\n }\n const date = value instanceof Date ? value : new Date(value);\n return isNaN(date.getTime()) ? null : date;\n}\n"]}
@@ -22,6 +22,12 @@ export * from './lib/services/collection-state.service';
22
22
  export * from './lib/services/conversation-attachment.service';
23
23
  export * from './lib/services/ui-command-handler.service';
24
24
  export * from './lib/services/conversation-bridge.service';
25
+ export * from './lib/services/realtime-session.service';
26
+ export * from './lib/services/realtime-pairing';
27
+ export * from './lib/services/user-authorization';
28
+ export * from './lib/services/realtime-sessions-adapter';
29
+ export * from './lib/services/realtime-session-review.service';
30
+ export * from './lib/services/delegation-result-parser';
25
31
  export * from './lib/components/workspace/conversation-workspace.component';
26
32
  export * from './lib/components/navigation/conversation-navigation.component';
27
33
  export * from './lib/components/sidebar/conversation-sidebar.component';
@@ -56,4 +62,39 @@ export * from './lib/components/toast/toast.component';
56
62
  export * from './lib/components/global-tasks/global-tasks-panel.component';
57
63
  export * from './lib/components/attachment/image-viewer.component';
58
64
  export * from './lib/components/overlay/chat-overlay.component';
65
+ export * from './lib/services/conversations-runtime-bootstrap.service';
66
+ export * from './lib/directives/chat-slot.directive';
67
+ export * from './lib/components/slots/slot-interfaces';
68
+ export * from './lib/components/slots/mj-chat-empty-state-default.component';
69
+ export * from './lib/components/slots/mj-chat-agent-presence-default.component';
70
+ export * from './lib/components/slots/mj-chat-header-default.component';
71
+ export * from './lib/components/slots/mj-chat-message-extra-default.component';
72
+ export * from './lib/components/slots/mj-chat-demonstration-surface-default.component';
73
+ export * from './lib/components/slots/mj-chat-message-bubble-default.component';
74
+ export * from './lib/events/chat-events';
75
+ export * from './lib/components/realtime/realtime-agent-picker.component';
76
+ export * from './lib/components/realtime/realtime-session-overlay.component';
77
+ export * from './lib/components/realtime/realtime-session-state';
78
+ export * from './lib/components/realtime/realtime-agent-banner.component';
79
+ export * from './lib/components/realtime/realtime-session-thread.component';
80
+ export * from './lib/components/realtime/realtime-delegation-card.component';
81
+ export * from './lib/components/realtime/realtime-activity-rail.component';
82
+ export * from './lib/components/realtime/realtime-surface-tabs.component';
83
+ export * from './lib/components/realtime/realtime-surface-tabs.model';
84
+ export * from './lib/components/realtime/realtime-surface-panel-prefs';
85
+ export * from './lib/components/realtime/realtime-disclosure';
86
+ export * from './lib/components/realtime/realtime-audio-visuals';
87
+ export * from './lib/components/realtime/realtime-composer.component';
88
+ export * from './lib/components/realtime/realtime-channel-strip.component';
89
+ export * from './lib/components/realtime/realtime-session-timeline-card.component';
90
+ export * from './lib/utils/realtime-session-timeline';
91
+ export * from './lib/components/realtime/channels/base-realtime-channel-client';
92
+ export * from './lib/components/realtime/channels/realtime-channel-pane.component';
93
+ export * from './lib/components/realtime/channels/channel-onboarding-panel.component';
94
+ export * from './lib/components/realtime/whiteboard/whiteboard-channel';
95
+ export * from './lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component';
96
+ export * from './lib/components/realtime/remote-browser/remote-browser-channel';
97
+ export * from './lib/components/realtime/remote-browser/remote-browser-surface.component';
98
+ export * from './lib/components/realtime/remote-browser/remote-browser-tools';
99
+ export * from './lib/components/realtime/remote-browser/remote-browser-audio-player';
59
100
  //# sourceMappingURL=public-api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAKA,cAAc,4BAA4B,CAAC;AAG3C,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AAGtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,oCAAoC,CAAC;AACnD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,yCAAyC,CAAC;AACxD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,4CAA4C,CAAC;AAG3D,cAAc,6DAA6D,CAAC;AAC5E,cAAc,+DAA+D,CAAC;AAC9E,cAAc,yDAAyD,CAAC;AACxE,cAAc,2DAA2D,CAAC;AAC1E,cAAc,gEAAgE,CAAC;AAC/E,cAAc,kEAAkE,CAAC;AACjF,cAAc,iDAAiD,CAAC;AAChE,cAAc,iDAAiD,CAAC;AAChE,cAAc,kDAAkD,CAAC;AACjE,cAAc,sDAAsD,CAAC;AACrE,cAAc,gEAAgE,CAAC;AAC/E,cAAc,qDAAqD,CAAC;AACpE,cAAc,mDAAmD,CAAC;AAClE,cAAc,uDAAuD,CAAC;AACtE,cAAc,uDAAuD,CAAC;AACtE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,gEAAgE,CAAC;AAC/E,cAAc,wEAAwE,CAAC;AACvF,cAAc,8DAA8D,CAAC;AAC7E,cAAc,0DAA0D,CAAC;AACzE,cAAc,qDAAqD,CAAC;AACpE,cAAc,uDAAuD,CAAC;AACtE,cAAc,iDAAiD,CAAC;AAChE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,sDAAsD,CAAC;AACrE,cAAc,yDAAyD,CAAC;AACxE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,8CAA8C,CAAC;AAC7D,cAAc,4DAA4D,CAAC;AAC3E,cAAc,4DAA4D,CAAC;AAC3E,cAAc,wCAAwC,CAAC;AACvD,cAAc,4DAA4D,CAAC;AAC3E,cAAc,oDAAoD,CAAC;AACnE,cAAc,iDAAiD,CAAC"}
1
+ {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,12 @@ export * from './lib/services/collection-state.service';
28
28
  export * from './lib/services/conversation-attachment.service';
29
29
  export * from './lib/services/ui-command-handler.service';
30
30
  export * from './lib/services/conversation-bridge.service';
31
+ export * from './lib/services/realtime-session.service';
32
+ export * from './lib/services/realtime-pairing';
33
+ export * from './lib/services/user-authorization';
34
+ export * from './lib/services/realtime-sessions-adapter';
35
+ export * from './lib/services/realtime-session-review.service';
36
+ export * from './lib/services/delegation-result-parser';
31
37
  // Components
32
38
  export * from './lib/components/workspace/conversation-workspace.component';
33
39
  export * from './lib/components/navigation/conversation-navigation.component';
@@ -63,4 +69,48 @@ export * from './lib/components/toast/toast.component';
63
69
  export * from './lib/components/global-tasks/global-tasks-panel.component';
64
70
  export * from './lib/components/attachment/image-viewer.component';
65
71
  export * from './lib/components/overlay/chat-overlay.component';
72
+ // PR 2c — Widget extension surface (slots, events, design tokens)
73
+ export * from './lib/services/conversations-runtime-bootstrap.service';
74
+ export * from './lib/directives/chat-slot.directive';
75
+ export * from './lib/components/slots/slot-interfaces';
76
+ export * from './lib/components/slots/mj-chat-empty-state-default.component';
77
+ export * from './lib/components/slots/mj-chat-agent-presence-default.component';
78
+ export * from './lib/components/slots/mj-chat-header-default.component';
79
+ export * from './lib/components/slots/mj-chat-message-extra-default.component';
80
+ export * from './lib/components/slots/mj-chat-demonstration-surface-default.component';
81
+ export * from './lib/components/slots/mj-chat-message-bubble-default.component';
82
+ export * from './lib/events/chat-events';
83
+ // Realtime / voice (PR #2787 — co-agent realtime sessions)
84
+ export * from './lib/components/realtime/realtime-agent-picker.component';
85
+ // Real-time "call mode" overlay + its componentized parts
86
+ export * from './lib/components/realtime/realtime-session-overlay.component';
87
+ export * from './lib/components/realtime/realtime-session-state';
88
+ export * from './lib/components/realtime/realtime-agent-banner.component';
89
+ export * from './lib/components/realtime/realtime-session-thread.component';
90
+ export * from './lib/components/realtime/realtime-delegation-card.component';
91
+ export * from './lib/components/realtime/realtime-activity-rail.component';
92
+ export * from './lib/components/realtime/realtime-surface-tabs.component';
93
+ export * from './lib/components/realtime/realtime-surface-tabs.model';
94
+ export * from './lib/components/realtime/realtime-surface-panel-prefs';
95
+ export * from './lib/components/realtime/realtime-disclosure';
96
+ export * from './lib/components/realtime/realtime-audio-visuals';
97
+ export * from './lib/components/realtime/realtime-composer.component';
98
+ export * from './lib/components/realtime/realtime-channel-strip.component';
99
+ // Conversation-timeline collapse of past realtime sessions (one card per session) + its pure grouping pass
100
+ export * from './lib/components/realtime/realtime-session-timeline-card.component';
101
+ export * from './lib/utils/realtime-session-timeline';
102
+ // Pluggable interactive-channel contract (registry-resolved client plugins) + pane host
103
+ export * from './lib/components/realtime/channels/base-realtime-channel-client';
104
+ export * from './lib/components/realtime/channels/realtime-channel-pane.component';
105
+ export * from './lib/components/realtime/channels/channel-onboarding-panel.component';
106
+ // Live whiteboard channel plugin + artifact viewer (thin consumers of the generic board).
107
+ // NOTE: the whiteboard itself (engine, tools, components, export builders) lives in
108
+ // @memberjunction/ng-whiteboard — import board types/components from there directly.
109
+ export * from './lib/components/realtime/whiteboard/whiteboard-channel';
110
+ export * from './lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component';
111
+ // Remote Browser channel plugin (client-direct, server-hosted browser) + its live surface + tools.
112
+ export * from './lib/components/realtime/remote-browser/remote-browser-channel';
113
+ export * from './lib/components/realtime/remote-browser/remote-browser-surface.component';
114
+ export * from './lib/components/realtime/remote-browser/remote-browser-tools';
115
+ export * from './lib/components/realtime/remote-browser/remote-browser-audio-player';
66
116
  //# sourceMappingURL=public-api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"public-api.js","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,SAAS;AACT,cAAc,4BAA4B,CAAC;AAE3C,SAAS;AACT,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AAEtD,mBAAmB;AACnB,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,oCAAoC,CAAC;AACnD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,yCAAyC,CAAC;AACxD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,4CAA4C,CAAC;AAE3D,aAAa;AACb,cAAc,6DAA6D,CAAC;AAC5E,cAAc,+DAA+D,CAAC;AAC9E,cAAc,yDAAyD,CAAC;AACxE,cAAc,2DAA2D,CAAC;AAC1E,cAAc,gEAAgE,CAAC;AAC/E,cAAc,kEAAkE,CAAC;AACjF,cAAc,iDAAiD,CAAC;AAChE,cAAc,iDAAiD,CAAC;AAChE,cAAc,kDAAkD,CAAC;AACjE,cAAc,sDAAsD,CAAC;AACrE,cAAc,gEAAgE,CAAC;AAC/E,cAAc,qDAAqD,CAAC;AACpE,cAAc,mDAAmD,CAAC;AAClE,cAAc,uDAAuD,CAAC;AACtE,cAAc,uDAAuD,CAAC;AACtE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,gEAAgE,CAAC;AAC/E,cAAc,wEAAwE,CAAC;AACvF,cAAc,8DAA8D,CAAC;AAC7E,cAAc,0DAA0D,CAAC;AACzE,cAAc,qDAAqD,CAAC;AACpE,cAAc,uDAAuD,CAAC;AACtE,cAAc,iDAAiD,CAAC;AAChE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,sDAAsD,CAAC;AACrE,cAAc,yDAAyD,CAAC;AACxE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,8CAA8C,CAAC;AAC7D,cAAc,4DAA4D,CAAC;AAC3E,cAAc,4DAA4D,CAAC;AAC3E,cAAc,wCAAwC,CAAC;AACvD,cAAc,4DAA4D,CAAC;AAC3E,cAAc,oDAAoD,CAAC;AACnE,cAAc,iDAAiD,CAAC","sourcesContent":["/*\n * Public API Surface of @memberjunction/ng-conversations\n */\n\n// Module\nexport * from './lib/conversations.module';\n\n// Models\nexport * from './lib/models/conversation-state.model';\nexport * from './lib/models/notification.model';\nexport * from './lib/models/lazy-artifact-info';\nexport * from './lib/models/navigation-request.model';\n\n// Services - State\nexport * from './lib/services/data-cache.service';\nexport * from './lib/services/artifact-state.service';\nexport * from './lib/services/agent-state.service';\nexport * from './lib/services/conversation-agent.service';\nexport * from './lib/services/active-tasks.service';\nexport * from './lib/services/conversation-streaming.service';\nexport * from './lib/services/dialog.service';\nexport * from './lib/services/export.service';\nexport * from './lib/services/notification.service';\nexport * from './lib/services/toast.service';\nexport * from './lib/services/mention-parser.service';\nexport * from './lib/services/mention-autocomplete.service';\nexport * from './lib/services/collection-permission.service';\nexport * from './lib/services/artifact-permission.service';\nexport * from './lib/services/artifact-use-tracking.service';\nexport * from './lib/services/collection-state.service';\nexport * from './lib/services/conversation-attachment.service';\nexport * from './lib/services/ui-command-handler.service';\nexport * from './lib/services/conversation-bridge.service';\n\n// Components\nexport * from './lib/components/workspace/conversation-workspace.component';\nexport * from './lib/components/navigation/conversation-navigation.component';\nexport * from './lib/components/sidebar/conversation-sidebar.component';\nexport * from './lib/components/conversation/conversation-list.component';\nexport * from './lib/components/conversation/conversation-chat-area.component';\nexport * from './lib/components/conversation/conversation-empty-state.component';\nexport * from './lib/components/message/message-item.component';\nexport * from './lib/components/message/message-list.component';\nexport * from './lib/components/message/message-input.component';\nexport * from './lib/components/message/message-input-box.component';\nexport * from './lib/components/message/conversation-message-rating.component';\nexport * from './lib/components/mention/mention-dropdown.component';\nexport * from './lib/components/mention/mention-editor.component';\nexport * from './lib/components/collection/collection-tree.component';\nexport * from './lib/components/collection/collection-view.component';\nexport * from './lib/components/collection/collections-full-view.component';\nexport * from './lib/components/collection/collection-artifact-card.component';\nexport * from './lib/components/collection/artifact-collection-picker-modal.component';\nexport * from './lib/components/collection/collection-share-modal.component';\nexport * from './lib/components/artifact/artifact-share-modal.component';\nexport * from './lib/components/project/project-selector.component';\nexport * from './lib/components/project/project-form-modal.component';\nexport * from './lib/components/task/tasks-full-view.component';\nexport * from './lib/components/tasks/task-widget.component';\nexport * from './lib/components/agent/agent-process-panel.component';\nexport * from './lib/components/agent/active-agent-indicator.component';\nexport * from './lib/components/active-tasks/active-tasks-panel.component';\nexport * from './lib/components/share/share-modal.component';\nexport * from './lib/components/notification/notification-badge.component';\nexport * from './lib/components/notification/activity-indicator.component';\nexport * from './lib/components/toast/toast.component';\nexport * from './lib/components/global-tasks/global-tasks-panel.component';\nexport * from './lib/components/attachment/image-viewer.component';\nexport * from './lib/components/overlay/chat-overlay.component';\n"]}
1
+ {"version":3,"file":"public-api.js","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Public API Surface of @memberjunction/ng-conversations\n */\n\n// Module\nexport * from './lib/conversations.module';\n\n// Models\nexport * from './lib/models/conversation-state.model';\nexport * from './lib/models/notification.model';\nexport * from './lib/models/lazy-artifact-info';\nexport * from './lib/models/navigation-request.model';\n\n// Services - State\nexport * from './lib/services/data-cache.service';\nexport * from './lib/services/artifact-state.service';\nexport * from './lib/services/agent-state.service';\nexport * from './lib/services/conversation-agent.service';\nexport * from './lib/services/active-tasks.service';\nexport * from './lib/services/conversation-streaming.service';\nexport * from './lib/services/dialog.service';\nexport * from './lib/services/export.service';\nexport * from './lib/services/notification.service';\nexport * from './lib/services/toast.service';\nexport * from './lib/services/mention-parser.service';\nexport * from './lib/services/mention-autocomplete.service';\nexport * from './lib/services/collection-permission.service';\nexport * from './lib/services/artifact-permission.service';\nexport * from './lib/services/artifact-use-tracking.service';\nexport * from './lib/services/collection-state.service';\nexport * from './lib/services/conversation-attachment.service';\nexport * from './lib/services/ui-command-handler.service';\nexport * from './lib/services/conversation-bridge.service';\nexport * from './lib/services/realtime-session.service';\nexport * from './lib/services/realtime-pairing';\nexport * from './lib/services/user-authorization';\nexport * from './lib/services/realtime-sessions-adapter';\nexport * from './lib/services/realtime-session-review.service';\nexport * from './lib/services/delegation-result-parser';\n\n// Components\nexport * from './lib/components/workspace/conversation-workspace.component';\nexport * from './lib/components/navigation/conversation-navigation.component';\nexport * from './lib/components/sidebar/conversation-sidebar.component';\nexport * from './lib/components/conversation/conversation-list.component';\nexport * from './lib/components/conversation/conversation-chat-area.component';\nexport * from './lib/components/conversation/conversation-empty-state.component';\nexport * from './lib/components/message/message-item.component';\nexport * from './lib/components/message/message-list.component';\nexport * from './lib/components/message/message-input.component';\nexport * from './lib/components/message/message-input-box.component';\nexport * from './lib/components/message/conversation-message-rating.component';\nexport * from './lib/components/mention/mention-dropdown.component';\nexport * from './lib/components/mention/mention-editor.component';\nexport * from './lib/components/collection/collection-tree.component';\nexport * from './lib/components/collection/collection-view.component';\nexport * from './lib/components/collection/collections-full-view.component';\nexport * from './lib/components/collection/collection-artifact-card.component';\nexport * from './lib/components/collection/artifact-collection-picker-modal.component';\nexport * from './lib/components/collection/collection-share-modal.component';\nexport * from './lib/components/artifact/artifact-share-modal.component';\nexport * from './lib/components/project/project-selector.component';\nexport * from './lib/components/project/project-form-modal.component';\nexport * from './lib/components/task/tasks-full-view.component';\nexport * from './lib/components/tasks/task-widget.component';\nexport * from './lib/components/agent/agent-process-panel.component';\nexport * from './lib/components/agent/active-agent-indicator.component';\nexport * from './lib/components/active-tasks/active-tasks-panel.component';\nexport * from './lib/components/share/share-modal.component';\nexport * from './lib/components/notification/notification-badge.component';\nexport * from './lib/components/notification/activity-indicator.component';\nexport * from './lib/components/toast/toast.component';\nexport * from './lib/components/global-tasks/global-tasks-panel.component';\nexport * from './lib/components/attachment/image-viewer.component';\nexport * from './lib/components/overlay/chat-overlay.component';\n\n// PR 2c — Widget extension surface (slots, events, design tokens)\nexport * from './lib/services/conversations-runtime-bootstrap.service';\nexport * from './lib/directives/chat-slot.directive';\nexport * from './lib/components/slots/slot-interfaces';\nexport * from './lib/components/slots/mj-chat-empty-state-default.component';\nexport * from './lib/components/slots/mj-chat-agent-presence-default.component';\nexport * from './lib/components/slots/mj-chat-header-default.component';\nexport * from './lib/components/slots/mj-chat-message-extra-default.component';\nexport * from './lib/components/slots/mj-chat-demonstration-surface-default.component';\nexport * from './lib/components/slots/mj-chat-message-bubble-default.component';\nexport * from './lib/events/chat-events';\n\n// Realtime / voice (PR #2787 — co-agent realtime sessions)\nexport * from './lib/components/realtime/realtime-agent-picker.component';\n// Real-time \"call mode\" overlay + its componentized parts\nexport * from './lib/components/realtime/realtime-session-overlay.component';\nexport * from './lib/components/realtime/realtime-session-state';\nexport * from './lib/components/realtime/realtime-agent-banner.component';\nexport * from './lib/components/realtime/realtime-session-thread.component';\nexport * from './lib/components/realtime/realtime-delegation-card.component';\nexport * from './lib/components/realtime/realtime-activity-rail.component';\nexport * from './lib/components/realtime/realtime-surface-tabs.component';\nexport * from './lib/components/realtime/realtime-surface-tabs.model';\nexport * from './lib/components/realtime/realtime-surface-panel-prefs';\nexport * from './lib/components/realtime/realtime-disclosure';\nexport * from './lib/components/realtime/realtime-audio-visuals';\nexport * from './lib/components/realtime/realtime-composer.component';\nexport * from './lib/components/realtime/realtime-channel-strip.component';\n// Conversation-timeline collapse of past realtime sessions (one card per session) + its pure grouping pass\nexport * from './lib/components/realtime/realtime-session-timeline-card.component';\nexport * from './lib/utils/realtime-session-timeline';\n// Pluggable interactive-channel contract (registry-resolved client plugins) + pane host\nexport * from './lib/components/realtime/channels/base-realtime-channel-client';\nexport * from './lib/components/realtime/channels/realtime-channel-pane.component';\nexport * from './lib/components/realtime/channels/channel-onboarding-panel.component';\n// Live whiteboard channel plugin + artifact viewer (thin consumers of the generic board).\n// NOTE: the whiteboard itself (engine, tools, components, export builders) lives in\n// @memberjunction/ng-whiteboard — import board types/components from there directly.\nexport * from './lib/components/realtime/whiteboard/whiteboard-channel';\nexport * from './lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component';\n// Remote Browser channel plugin (client-direct, server-hosted browser) + its live surface + tools.\nexport * from './lib/components/realtime/remote-browser/remote-browser-channel';\nexport * from './lib/components/realtime/remote-browser/remote-browser-surface.component';\nexport * from './lib/components/realtime/remote-browser/remote-browser-tools';\nexport * from './lib/components/realtime/remote-browser/remote-browser-audio-player';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/ng-conversations",
3
- "version": "5.40.1",
3
+ "version": "5.41.0",
4
4
  "description": "MemberJunction: Conversation, Collection, and Artifact management components for any Angular application",
5
5
  "main": "./dist/public-api.js",
6
6
  "typings": "./dist/public-api.d.ts",
@@ -8,7 +8,7 @@
8
8
  "/dist"
9
9
  ],
10
10
  "scripts": {
11
- "test": "echo \"No tests configured yet\"",
11
+ "test": "vitest run",
12
12
  "build": "ngc",
13
13
  "test:watch": "vitest"
14
14
  },
@@ -31,28 +31,31 @@
31
31
  "dependencies": {
32
32
  "@angular/animations": "21.1.3",
33
33
  "@angular/cdk": "21.1.3",
34
- "@memberjunction/ai": "5.40.1",
35
- "@memberjunction/ai-agent-client": "5.40.1",
36
- "@memberjunction/ai-core-plus": "5.40.1",
37
- "@memberjunction/ai-engine-base": "5.40.1",
38
- "@memberjunction/core": "5.40.1",
39
- "@memberjunction/core-entities": "5.40.1",
40
- "@memberjunction/global": "5.40.1",
41
- "@memberjunction/graphql-dataprovider": "5.40.1",
42
- "@memberjunction/interactive-component-types": "5.40.1",
43
- "@memberjunction/ng-agent-client": "5.40.1",
44
- "@memberjunction/ng-artifacts": "5.40.1",
45
- "@memberjunction/ng-base-types": "5.40.1",
46
- "@memberjunction/ng-code-editor": "5.40.1",
47
- "@memberjunction/ng-container-directives": "5.40.1",
48
- "@memberjunction/ng-forms": "5.40.1",
49
- "@memberjunction/ng-markdown": "5.40.1",
50
- "@memberjunction/ng-notifications": "5.40.1",
51
- "@memberjunction/ng-resource-permissions": "5.40.1",
52
- "@memberjunction/ng-shared-generic": "5.40.1",
53
- "@memberjunction/ng-tasks": "5.40.1",
54
- "@memberjunction/ng-testing": "5.40.1",
55
- "@memberjunction/ng-ui-components": "5.40.1",
34
+ "@memberjunction/ai": "5.41.0",
35
+ "@memberjunction/ai-agent-client": "5.41.0",
36
+ "@memberjunction/ai-core-plus": "5.41.0",
37
+ "@memberjunction/ai-engine-base": "5.41.0",
38
+ "@memberjunction/ai-realtime-client": "5.41.0",
39
+ "@memberjunction/conversations-runtime": "5.41.0",
40
+ "@memberjunction/core": "5.41.0",
41
+ "@memberjunction/core-entities": "5.41.0",
42
+ "@memberjunction/global": "5.41.0",
43
+ "@memberjunction/graphql-dataprovider": "5.41.0",
44
+ "@memberjunction/interactive-component-types": "5.41.0",
45
+ "@memberjunction/ng-agent-client": "5.41.0",
46
+ "@memberjunction/ng-artifacts": "5.41.0",
47
+ "@memberjunction/ng-base-types": "5.41.0",
48
+ "@memberjunction/ng-code-editor": "5.41.0",
49
+ "@memberjunction/ng-container-directives": "5.41.0",
50
+ "@memberjunction/ng-forms": "5.41.0",
51
+ "@memberjunction/ng-markdown": "5.41.0",
52
+ "@memberjunction/ng-notifications": "5.41.0",
53
+ "@memberjunction/ng-resource-permissions": "5.41.0",
54
+ "@memberjunction/ng-shared-generic": "5.41.0",
55
+ "@memberjunction/ng-tasks": "5.41.0",
56
+ "@memberjunction/ng-testing": "5.41.0",
57
+ "@memberjunction/ng-ui-components": "5.41.0",
58
+ "@memberjunction/ng-whiteboard": "5.41.0",
56
59
  "rxjs": "^7.8.2",
57
60
  "tslib": "^2.8.1"
58
61
  },
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=conversation-bridge.service.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conversation-bridge.service.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/conversation-bridge.service.test.ts"],"names":[],"mappings":""}