@memberjunction/ng-conversations 6.1.4 → 6.2.0-edge.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. package/README.md +36 -3
  2. package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts +19 -3
  3. package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts.map +1 -1
  4. package/dist/lib/components/active-tasks/active-tasks-panel.component.js +39 -7
  5. package/dist/lib/components/active-tasks/active-tasks-panel.component.js.map +1 -1
  6. package/dist/lib/components/agent/active-agent-indicator.component.d.ts +74 -6
  7. package/dist/lib/components/agent/active-agent-indicator.component.d.ts.map +1 -1
  8. package/dist/lib/components/agent/active-agent-indicator.component.js +111 -21
  9. package/dist/lib/components/agent/active-agent-indicator.component.js.map +1 -1
  10. package/dist/lib/components/agent/agent-process-panel.component.d.ts +31 -5
  11. package/dist/lib/components/agent/agent-process-panel.component.d.ts.map +1 -1
  12. package/dist/lib/components/agent/agent-process-panel.component.js +71 -15
  13. package/dist/lib/components/agent/agent-process-panel.component.js.map +1 -1
  14. package/dist/lib/components/artifact/artifact-share-modal.component.d.ts +65 -9
  15. package/dist/lib/components/artifact/artifact-share-modal.component.d.ts.map +1 -1
  16. package/dist/lib/components/artifact/artifact-share-modal.component.js +169 -57
  17. package/dist/lib/components/artifact/artifact-share-modal.component.js.map +1 -1
  18. package/dist/lib/components/attachment/image-viewer.component.d.ts +77 -11
  19. package/dist/lib/components/attachment/image-viewer.component.d.ts.map +1 -1
  20. package/dist/lib/components/attachment/image-viewer.component.js +181 -47
  21. package/dist/lib/components/attachment/image-viewer.component.js.map +1 -1
  22. package/dist/lib/components/collection/artifact-collection-picker-modal.component.d.ts +129 -19
  23. package/dist/lib/components/collection/artifact-collection-picker-modal.component.d.ts.map +1 -1
  24. package/dist/lib/components/collection/artifact-collection-picker-modal.component.js +350 -116
  25. package/dist/lib/components/collection/artifact-collection-picker-modal.component.js.map +1 -1
  26. package/dist/lib/components/collection/artifact-create-modal.component.d.ts +60 -8
  27. package/dist/lib/components/collection/artifact-create-modal.component.d.ts.map +1 -1
  28. package/dist/lib/components/collection/artifact-create-modal.component.js +130 -46
  29. package/dist/lib/components/collection/artifact-create-modal.component.js.map +1 -1
  30. package/dist/lib/components/collection/collection-artifact-card.component.d.ts +63 -3
  31. package/dist/lib/components/collection/collection-artifact-card.component.d.ts.map +1 -1
  32. package/dist/lib/components/collection/collection-artifact-card.component.js +113 -19
  33. package/dist/lib/components/collection/collection-artifact-card.component.js.map +1 -1
  34. package/dist/lib/components/collection/collection-form-modal.component.d.ts +54 -8
  35. package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -1
  36. package/dist/lib/components/collection/collection-form-modal.component.js +130 -46
  37. package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -1
  38. package/dist/lib/components/collection/collection-share-modal.component.d.ts +70 -10
  39. package/dist/lib/components/collection/collection-share-modal.component.d.ts.map +1 -1
  40. package/dist/lib/components/collection/collection-share-modal.component.js +175 -53
  41. package/dist/lib/components/collection/collection-share-modal.component.js.map +1 -1
  42. package/dist/lib/components/collection/collection-tree.component.d.ts +89 -9
  43. package/dist/lib/components/collection/collection-tree.component.d.ts.map +1 -1
  44. package/dist/lib/components/collection/collection-tree.component.js +220 -70
  45. package/dist/lib/components/collection/collection-tree.component.js.map +1 -1
  46. package/dist/lib/components/collection/collection-view.component.d.ts +89 -11
  47. package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -1
  48. package/dist/lib/components/collection/collection-view.component.js +154 -40
  49. package/dist/lib/components/collection/collection-view.component.js.map +1 -1
  50. package/dist/lib/components/collection/collections-full-view.component.d.ts +390 -38
  51. package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -1
  52. package/dist/lib/components/collection/collections-full-view.component.js +951 -367
  53. package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
  54. package/dist/lib/components/composer/ai-composer.component.d.ts +213 -18
  55. package/dist/lib/components/composer/ai-composer.component.d.ts.map +1 -1
  56. package/dist/lib/components/composer/ai-composer.component.js +388 -44
  57. package/dist/lib/components/composer/ai-composer.component.js.map +1 -1
  58. package/dist/lib/components/conversation/conversation-agent-picker.component.d.ts +12 -1
  59. package/dist/lib/components/conversation/conversation-agent-picker.component.d.ts.map +1 -1
  60. package/dist/lib/components/conversation/conversation-agent-picker.component.js +26 -4
  61. package/dist/lib/components/conversation/conversation-agent-picker.component.js.map +1 -1
  62. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +1090 -123
  63. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  64. package/dist/lib/components/conversation/conversation-chat-area.component.js +2407 -731
  65. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  66. package/dist/lib/components/conversation/conversation-empty-state.component.d.ts +139 -19
  67. package/dist/lib/components/conversation/conversation-empty-state.component.d.ts.map +1 -1
  68. package/dist/lib/components/conversation/conversation-empty-state.component.js +296 -59
  69. package/dist/lib/components/conversation/conversation-empty-state.component.js.map +1 -1
  70. package/dist/lib/components/conversation/conversation-list.component.d.ts +579 -78
  71. package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
  72. package/dist/lib/components/conversation/conversation-list.component.js +2322 -823
  73. package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
  74. package/dist/lib/components/conversation/pinned-messages-panel.component.d.ts +40 -4
  75. package/dist/lib/components/conversation/pinned-messages-panel.component.d.ts.map +1 -1
  76. package/dist/lib/components/conversation/pinned-messages-panel.component.js +72 -14
  77. package/dist/lib/components/conversation/pinned-messages-panel.component.js.map +1 -1
  78. package/dist/lib/components/dialogs/input-dialog.component.d.ts +57 -11
  79. package/dist/lib/components/dialogs/input-dialog.component.d.ts.map +1 -1
  80. package/dist/lib/components/dialogs/input-dialog.component.js +128 -16
  81. package/dist/lib/components/dialogs/input-dialog.component.js.map +1 -1
  82. package/dist/lib/components/dialogs/rating-dialog.component.d.ts +68 -10
  83. package/dist/lib/components/dialogs/rating-dialog.component.d.ts.map +1 -1
  84. package/dist/lib/components/dialogs/rating-dialog.component.js +151 -27
  85. package/dist/lib/components/dialogs/rating-dialog.component.js.map +1 -1
  86. package/dist/lib/components/export/export-modal.component.d.ts +84 -10
  87. package/dist/lib/components/export/export-modal.component.d.ts.map +1 -1
  88. package/dist/lib/components/export/export-modal.component.js +173 -49
  89. package/dist/lib/components/export/export-modal.component.js.map +1 -1
  90. package/dist/lib/components/global-tasks/global-tasks-panel.component.d.ts +29 -3
  91. package/dist/lib/components/global-tasks/global-tasks-panel.component.d.ts.map +1 -1
  92. package/dist/lib/components/global-tasks/global-tasks-panel.component.js +58 -12
  93. package/dist/lib/components/global-tasks/global-tasks-panel.component.js.map +1 -1
  94. package/dist/lib/components/library/library-full-view.component.d.ts +57 -8
  95. package/dist/lib/components/library/library-full-view.component.d.ts.map +1 -1
  96. package/dist/lib/components/library/library-full-view.component.js +119 -35
  97. package/dist/lib/components/library/library-full-view.component.js.map +1 -1
  98. package/dist/lib/components/members/members-modal.component.d.ts +76 -10
  99. package/dist/lib/components/members/members-modal.component.d.ts.map +1 -1
  100. package/dist/lib/components/members/members-modal.component.js +164 -50
  101. package/dist/lib/components/members/members-modal.component.js.map +1 -1
  102. package/dist/lib/components/message/actionable-commands.component.d.ts +37 -5
  103. package/dist/lib/components/message/actionable-commands.component.d.ts.map +1 -1
  104. package/dist/lib/components/message/actionable-commands.component.js +82 -16
  105. package/dist/lib/components/message/actionable-commands.component.js.map +1 -1
  106. package/dist/lib/components/message/conversation-message-rating.component.d.ts +46 -10
  107. package/dist/lib/components/message/conversation-message-rating.component.d.ts.map +1 -1
  108. package/dist/lib/components/message/conversation-message-rating.component.js +120 -36
  109. package/dist/lib/components/message/conversation-message-rating.component.js.map +1 -1
  110. package/dist/lib/components/message/message-input.component.d.ts +549 -74
  111. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  112. package/dist/lib/components/message/message-input.component.js +1250 -421
  113. package/dist/lib/components/message/message-input.component.js.map +1 -1
  114. package/dist/lib/components/message/message-item.component.d.ts +411 -29
  115. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  116. package/dist/lib/components/message/message-item.component.js +896 -222
  117. package/dist/lib/components/message/message-item.component.js.map +1 -1
  118. package/dist/lib/components/message/message-list.component.d.ts +288 -29
  119. package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
  120. package/dist/lib/components/message/message-list.component.js +561 -123
  121. package/dist/lib/components/message/message-list.component.js.map +1 -1
  122. package/dist/lib/components/navigation/conversation-navigation.component.d.ts +64 -5
  123. package/dist/lib/components/navigation/conversation-navigation.component.d.ts.map +1 -1
  124. package/dist/lib/components/navigation/conversation-navigation.component.js +101 -11
  125. package/dist/lib/components/navigation/conversation-navigation.component.js.map +1 -1
  126. package/dist/lib/components/notification/activity-indicator.component.d.ts +6 -2
  127. package/dist/lib/components/notification/activity-indicator.component.d.ts.map +1 -1
  128. package/dist/lib/components/notification/activity-indicator.component.js +13 -3
  129. package/dist/lib/components/notification/activity-indicator.component.js.map +1 -1
  130. package/dist/lib/components/notification/notification-badge.component.d.ts +15 -3
  131. package/dist/lib/components/notification/notification-badge.component.d.ts.map +1 -1
  132. package/dist/lib/components/notification/notification-badge.component.js +36 -8
  133. package/dist/lib/components/notification/notification-badge.component.js.map +1 -1
  134. package/dist/lib/components/overlay/chat-overlay.component.d.ts +1 -1
  135. package/dist/lib/components/overlay/chat-overlay.component.js +4 -4
  136. package/dist/lib/components/overlay/chat-overlay.component.js.map +1 -1
  137. package/dist/lib/components/project/project-form-modal.component.d.ts +93 -11
  138. package/dist/lib/components/project/project-form-modal.component.d.ts.map +1 -1
  139. package/dist/lib/components/project/project-form-modal.component.js +348 -87
  140. package/dist/lib/components/project/project-form-modal.component.js.map +1 -1
  141. package/dist/lib/components/project/project-selector.component.d.ts +78 -8
  142. package/dist/lib/components/project/project-selector.component.d.ts.map +1 -1
  143. package/dist/lib/components/project/project-selector.component.js +177 -46
  144. package/dist/lib/components/project/project-selector.component.js.map +1 -1
  145. package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.d.ts +1 -1
  146. package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.d.ts.map +1 -1
  147. package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.js.map +1 -1
  148. package/dist/lib/components/realtime/channels/client-context-channel.d.ts +1 -1
  149. package/dist/lib/components/realtime/channels/client-context-channel.d.ts.map +1 -1
  150. package/dist/lib/components/realtime/channels/client-context-channel.js +1 -1
  151. package/dist/lib/components/realtime/channels/client-context-channel.js.map +1 -1
  152. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.d.ts +1 -1
  153. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.d.ts.map +1 -1
  154. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.js +3 -0
  155. package/dist/lib/components/realtime/channels/realtime-channel-pane.component.js.map +1 -1
  156. package/dist/lib/components/realtime/media/media-channel.d.ts +2 -1
  157. package/dist/lib/components/realtime/media/media-channel.d.ts.map +1 -1
  158. package/dist/lib/components/realtime/media/media-channel.js +1 -1
  159. package/dist/lib/components/realtime/media/media-channel.js.map +1 -1
  160. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts +2 -2
  161. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts.map +1 -1
  162. package/dist/lib/components/realtime/realtime-activity-rail.component.js +2 -2
  163. package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -1
  164. package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts +1 -1
  165. package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts.map +1 -1
  166. package/dist/lib/components/realtime/realtime-agent-banner.component.js.map +1 -1
  167. package/dist/lib/components/realtime/realtime-composer.component.d.ts +3 -1
  168. package/dist/lib/components/realtime/realtime-composer.component.d.ts.map +1 -1
  169. package/dist/lib/components/realtime/realtime-composer.component.js +26 -8
  170. package/dist/lib/components/realtime/realtime-composer.component.js.map +1 -1
  171. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +2 -2
  172. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts.map +1 -1
  173. package/dist/lib/components/realtime/realtime-delegation-card.component.js +2 -2
  174. package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -1
  175. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +4 -4
  176. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts.map +1 -1
  177. package/dist/lib/components/realtime/realtime-session-overlay.component.js +19 -19
  178. package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -1
  179. package/dist/lib/components/realtime/realtime-session-state.d.ts +2 -3
  180. package/dist/lib/components/realtime/realtime-session-state.d.ts.map +1 -1
  181. package/dist/lib/components/realtime/realtime-session-state.js +3 -2
  182. package/dist/lib/components/realtime/realtime-session-state.js.map +1 -1
  183. package/dist/lib/components/realtime/realtime-session-thread.component.d.ts +17 -1
  184. package/dist/lib/components/realtime/realtime-session-thread.component.d.ts.map +1 -1
  185. package/dist/lib/components/realtime/realtime-session-thread.component.js +122 -45
  186. package/dist/lib/components/realtime/realtime-session-thread.component.js.map +1 -1
  187. package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts +47 -31
  188. package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts.map +1 -1
  189. package/dist/lib/components/realtime/realtime-session-timeline-card.component.js +138 -124
  190. package/dist/lib/components/realtime/realtime-session-timeline-card.component.js.map +1 -1
  191. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +4 -4
  192. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts.map +1 -1
  193. package/dist/lib/components/realtime/realtime-surface-tabs.component.js +4 -4
  194. package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -1
  195. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +2 -2
  196. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts.map +1 -1
  197. package/dist/lib/components/realtime/realtime-surface-tabs.model.js +3 -3
  198. package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -1
  199. package/dist/lib/components/realtime/realtime-ui-config.d.ts +13 -11
  200. package/dist/lib/components/realtime/realtime-ui-config.d.ts.map +1 -1
  201. package/dist/lib/components/realtime/realtime-ui-config.js +29 -25
  202. package/dist/lib/components/realtime/realtime-ui-config.js.map +1 -1
  203. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.d.ts +1 -1
  204. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.d.ts.map +1 -1
  205. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js +1 -1
  206. package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js.map +1 -1
  207. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts +4 -2
  208. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts.map +1 -1
  209. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js +7 -3
  210. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js.map +1 -1
  211. package/dist/lib/components/search/search-panel.component.d.ts +133 -22
  212. package/dist/lib/components/search/search-panel.component.d.ts.map +1 -1
  213. package/dist/lib/components/search/search-panel.component.js +312 -83
  214. package/dist/lib/components/search/search-panel.component.js.map +1 -1
  215. package/dist/lib/components/share/share-modal.component.d.ts +69 -9
  216. package/dist/lib/components/share/share-modal.component.d.ts.map +1 -1
  217. package/dist/lib/components/share/share-modal.component.js +139 -31
  218. package/dist/lib/components/share/share-modal.component.js.map +1 -1
  219. package/dist/lib/components/shared/user-picker.component.d.ts +48 -8
  220. package/dist/lib/components/shared/user-picker.component.d.ts.map +1 -1
  221. package/dist/lib/components/shared/user-picker.component.js +110 -30
  222. package/dist/lib/components/shared/user-picker.component.js.map +1 -1
  223. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts +114 -11
  224. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts.map +1 -1
  225. package/dist/lib/components/sidebar/conversation-sidebar.component.js +199 -21
  226. package/dist/lib/components/sidebar/conversation-sidebar.component.js.map +1 -1
  227. package/dist/lib/components/sidebar/routines-section.component.d.ts +20 -1
  228. package/dist/lib/components/sidebar/routines-section.component.d.ts.map +1 -1
  229. package/dist/lib/components/sidebar/routines-section.component.js +25 -5
  230. package/dist/lib/components/sidebar/routines-section.component.js.map +1 -1
  231. package/dist/lib/components/slots/slot-interfaces.d.ts +19 -0
  232. package/dist/lib/components/slots/slot-interfaces.d.ts.map +1 -1
  233. package/dist/lib/components/slots/slot-interfaces.js.map +1 -1
  234. package/dist/lib/components/task/tasks-full-view.component.d.ts +95 -13
  235. package/dist/lib/components/task/tasks-full-view.component.d.ts.map +1 -1
  236. package/dist/lib/components/task/tasks-full-view.component.js +223 -75
  237. package/dist/lib/components/task/tasks-full-view.component.js.map +1 -1
  238. package/dist/lib/components/tasks/task-widget.component.d.ts +46 -6
  239. package/dist/lib/components/tasks/task-widget.component.d.ts.map +1 -1
  240. package/dist/lib/components/tasks/task-widget.component.js +100 -16
  241. package/dist/lib/components/tasks/task-widget.component.js.map +1 -1
  242. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts +64 -7
  243. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -1
  244. package/dist/lib/components/tasks/tasks-dropdown.component.js +127 -27
  245. package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -1
  246. package/dist/lib/components/thread/thread-panel.component.d.ts +66 -8
  247. package/dist/lib/components/thread/thread-panel.component.d.ts.map +1 -1
  248. package/dist/lib/components/thread/thread-panel.component.js +146 -36
  249. package/dist/lib/components/thread/thread-panel.component.js.map +1 -1
  250. package/dist/lib/components/toast/toast.component.d.ts +11 -1
  251. package/dist/lib/components/toast/toast.component.d.ts.map +1 -1
  252. package/dist/lib/components/toast/toast.component.js +25 -5
  253. package/dist/lib/components/toast/toast.component.js.map +1 -1
  254. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +385 -42
  255. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  256. package/dist/lib/components/workspace/conversation-workspace.component.js +887 -291
  257. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  258. package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts +8 -0
  259. package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts.map +1 -1
  260. package/dist/lib/composer-plugins/base-conversation-mention.provider.js +8 -1
  261. package/dist/lib/composer-plugins/base-conversation-mention.provider.js.map +1 -1
  262. package/dist/lib/conversations.module.d.ts.map +1 -1
  263. package/dist/lib/conversations.module.js.map +1 -1
  264. package/dist/lib/directives/chat-slot.directive.d.ts +5 -1
  265. package/dist/lib/directives/chat-slot.directive.d.ts.map +1 -1
  266. package/dist/lib/directives/chat-slot.directive.js.map +1 -1
  267. package/dist/lib/directives/search-shortcut.directive.d.ts +9 -1
  268. package/dist/lib/directives/search-shortcut.directive.d.ts.map +1 -1
  269. package/dist/lib/directives/search-shortcut.directive.js +14 -4
  270. package/dist/lib/directives/search-shortcut.directive.js.map +1 -1
  271. package/dist/lib/events/chat-events.d.ts +34 -7
  272. package/dist/lib/events/chat-events.d.ts.map +1 -1
  273. package/dist/lib/events/chat-events.js +37 -7
  274. package/dist/lib/events/chat-events.js.map +1 -1
  275. package/dist/lib/models/agent-turn.model.d.ts +103 -0
  276. package/dist/lib/models/agent-turn.model.d.ts.map +1 -0
  277. package/dist/lib/models/agent-turn.model.js +12 -0
  278. package/dist/lib/models/agent-turn.model.js.map +1 -0
  279. package/dist/lib/models/collection-view.model.js.map +1 -1
  280. package/dist/lib/models/conversation-state.model.d.ts +8 -0
  281. package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
  282. package/dist/lib/models/conversation-state.model.js.map +1 -1
  283. package/dist/lib/models/lazy-artifact-info.d.ts +44 -12
  284. package/dist/lib/models/lazy-artifact-info.d.ts.map +1 -1
  285. package/dist/lib/models/lazy-artifact-info.js +98 -34
  286. package/dist/lib/models/lazy-artifact-info.js.map +1 -1
  287. package/dist/lib/services/active-tasks.service.d.ts +30 -4
  288. package/dist/lib/services/active-tasks.service.d.ts.map +1 -1
  289. package/dist/lib/services/active-tasks.service.js +71 -19
  290. package/dist/lib/services/active-tasks.service.js.map +1 -1
  291. package/dist/lib/services/agent-state.service.d.ts +17 -1
  292. package/dist/lib/services/agent-state.service.d.ts.map +1 -1
  293. package/dist/lib/services/agent-state.service.js +48 -16
  294. package/dist/lib/services/agent-state.service.js.map +1 -1
  295. package/dist/lib/services/artifact-permission.service.d.ts +39 -0
  296. package/dist/lib/services/artifact-permission.service.d.ts.map +1 -1
  297. package/dist/lib/services/artifact-permission.service.js +152 -17
  298. package/dist/lib/services/artifact-permission.service.js.map +1 -1
  299. package/dist/lib/services/artifact-state.service.d.ts +58 -5
  300. package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
  301. package/dist/lib/services/artifact-state.service.js +135 -35
  302. package/dist/lib/services/artifact-state.service.js.map +1 -1
  303. package/dist/lib/services/browser-realtime-media-host.d.ts +24 -0
  304. package/dist/lib/services/browser-realtime-media-host.d.ts.map +1 -0
  305. package/dist/lib/services/browser-realtime-media-host.js +95 -0
  306. package/dist/lib/services/browser-realtime-media-host.js.map +1 -0
  307. package/dist/lib/services/collection-permission.service.d.ts +28 -0
  308. package/dist/lib/services/collection-permission.service.d.ts.map +1 -1
  309. package/dist/lib/services/collection-permission.service.js +88 -32
  310. package/dist/lib/services/collection-permission.service.js.map +1 -1
  311. package/dist/lib/services/collection-state.service.d.ts +11 -1
  312. package/dist/lib/services/collection-state.service.d.ts.map +1 -1
  313. package/dist/lib/services/collection-state.service.js +25 -5
  314. package/dist/lib/services/collection-state.service.js.map +1 -1
  315. package/dist/lib/services/conversation-agent.service.d.ts +26 -4
  316. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  317. package/dist/lib/services/conversation-agent.service.js +57 -18
  318. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  319. package/dist/lib/services/conversation-attachment.service.d.ts +41 -2
  320. package/dist/lib/services/conversation-attachment.service.d.ts.map +1 -1
  321. package/dist/lib/services/conversation-attachment.service.js +80 -13
  322. package/dist/lib/services/conversation-attachment.service.js.map +1 -1
  323. package/dist/lib/services/conversation-streaming.service.d.ts +22 -0
  324. package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -1
  325. package/dist/lib/services/conversation-streaming.service.js +50 -10
  326. package/dist/lib/services/conversation-streaming.service.js.map +1 -1
  327. package/dist/lib/services/data-cache.service.d.ts +31 -0
  328. package/dist/lib/services/data-cache.service.d.ts.map +1 -1
  329. package/dist/lib/services/data-cache.service.js +71 -15
  330. package/dist/lib/services/data-cache.service.js.map +1 -1
  331. package/dist/lib/services/dialog.service.d.ts +13 -0
  332. package/dist/lib/services/dialog.service.d.ts.map +1 -1
  333. package/dist/lib/services/dialog.service.js +25 -5
  334. package/dist/lib/services/dialog.service.js.map +1 -1
  335. package/dist/lib/services/export.service.d.ts +2 -0
  336. package/dist/lib/services/export.service.d.ts.map +1 -1
  337. package/dist/lib/services/export.service.js +5 -1
  338. package/dist/lib/services/export.service.js.map +1 -1
  339. package/dist/lib/services/graphql-attachment-blob-store.d.ts +44 -0
  340. package/dist/lib/services/graphql-attachment-blob-store.d.ts.map +1 -0
  341. package/dist/lib/services/graphql-attachment-blob-store.js +113 -0
  342. package/dist/lib/services/graphql-attachment-blob-store.js.map +1 -0
  343. package/dist/lib/services/mention-autocomplete.service.d.ts +17 -141
  344. package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
  345. package/dist/lib/services/mention-autocomplete.service.js +15 -460
  346. package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
  347. package/dist/lib/services/mention-parser.service.d.ts +10 -0
  348. package/dist/lib/services/mention-parser.service.d.ts.map +1 -1
  349. package/dist/lib/services/mention-parser.service.js +25 -5
  350. package/dist/lib/services/mention-parser.service.js.map +1 -1
  351. package/dist/lib/services/notification.service.d.ts +54 -6
  352. package/dist/lib/services/notification.service.d.ts.map +1 -1
  353. package/dist/lib/services/notification.service.js +123 -27
  354. package/dist/lib/services/notification.service.js.map +1 -1
  355. package/dist/lib/services/realtime-audio-recorder.d.ts +4 -4
  356. package/dist/lib/services/realtime-audio-recorder.js +12 -12
  357. package/dist/lib/services/realtime-audio-recorder.js.map +1 -1
  358. package/dist/lib/services/realtime-pcm-wav.d.ts +4 -0
  359. package/dist/lib/services/realtime-pcm-wav.d.ts.map +1 -1
  360. package/dist/lib/services/realtime-pcm-wav.js +10 -2
  361. package/dist/lib/services/realtime-pcm-wav.js.map +1 -1
  362. package/dist/lib/services/realtime-session-review.service.d.ts +1 -1
  363. package/dist/lib/services/realtime-session-review.service.d.ts.map +1 -1
  364. package/dist/lib/services/realtime-session-review.service.js +1 -1
  365. package/dist/lib/services/realtime-session-review.service.js.map +1 -1
  366. package/dist/lib/services/realtime-session.service.d.ts +16 -1150
  367. package/dist/lib/services/realtime-session.service.d.ts.map +1 -1
  368. package/dist/lib/services/realtime-session.service.js +28 -2430
  369. package/dist/lib/services/realtime-session.service.js.map +1 -1
  370. package/dist/lib/services/search.service.d.ts +42 -9
  371. package/dist/lib/services/search.service.d.ts.map +1 -1
  372. package/dist/lib/services/search.service.js +103 -23
  373. package/dist/lib/services/search.service.js.map +1 -1
  374. package/dist/lib/services/toast.service.d.ts +19 -1
  375. package/dist/lib/services/toast.service.d.ts.map +1 -1
  376. package/dist/lib/services/toast.service.js +45 -9
  377. package/dist/lib/services/toast.service.js.map +1 -1
  378. package/dist/lib/services/ui-command-handler.service.d.ts +16 -2
  379. package/dist/lib/services/ui-command-handler.service.d.ts.map +1 -1
  380. package/dist/lib/services/ui-command-handler.service.js +36 -8
  381. package/dist/lib/services/ui-command-handler.service.js.map +1 -1
  382. package/dist/lib/utils/agent-artifact-summary.d.ts +2 -2
  383. package/dist/lib/utils/agent-artifact-summary.js +3 -3
  384. package/dist/lib/utils/agent-artifact-summary.js.map +1 -1
  385. package/dist/lib/utils/agent-turn-routing.d.ts +69 -0
  386. package/dist/lib/utils/agent-turn-routing.d.ts.map +1 -0
  387. package/dist/lib/utils/agent-turn-routing.js +96 -0
  388. package/dist/lib/utils/agent-turn-routing.js.map +1 -0
  389. package/dist/lib/utils/artifact-panel-action.d.ts +15 -4
  390. package/dist/lib/utils/artifact-panel-action.d.ts.map +1 -1
  391. package/dist/lib/utils/artifact-panel-action.js +10 -2
  392. package/dist/lib/utils/artifact-panel-action.js.map +1 -1
  393. package/dist/lib/utils/distinct-artifacts.d.ts +2 -0
  394. package/dist/lib/utils/distinct-artifacts.d.ts.map +1 -1
  395. package/dist/lib/utils/distinct-artifacts.js +5 -1
  396. package/dist/lib/utils/distinct-artifacts.js.map +1 -1
  397. package/dist/lib/utils/plan-mode-preference.d.ts +2 -2
  398. package/dist/lib/utils/plan-mode-preference.js +6 -6
  399. package/dist/lib/utils/plan-mode-preference.js.map +1 -1
  400. package/dist/lib/utils/realtime-session-timeline.d.ts +8 -79
  401. package/dist/lib/utils/realtime-session-timeline.d.ts.map +1 -1
  402. package/dist/lib/utils/realtime-session-timeline.js +8 -89
  403. package/dist/lib/utils/realtime-session-timeline.js.map +1 -1
  404. package/dist/public-api.d.ts +5 -2
  405. package/dist/public-api.d.ts.map +1 -1
  406. package/dist/public-api.js +9 -2
  407. package/dist/public-api.js.map +1 -1
  408. package/package.json +33 -32
  409. package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts +0 -384
  410. package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts.map +0 -1
  411. package/dist/lib/components/realtime/channels/base-realtime-channel-client.js +0 -231
  412. package/dist/lib/components/realtime/channels/base-realtime-channel-client.js.map +0 -1
  413. package/dist/lib/services/delegation-result-parser.d.ts +0 -50
  414. package/dist/lib/services/delegation-result-parser.d.ts.map +0 -1
  415. package/dist/lib/services/delegation-result-parser.js +0 -60
  416. package/dist/lib/services/delegation-result-parser.js.map +0 -1
  417. package/dist/lib/services/narration-template.d.ts +0 -42
  418. package/dist/lib/services/narration-template.d.ts.map +0 -1
  419. package/dist/lib/services/narration-template.js +0 -73
  420. package/dist/lib/services/narration-template.js.map +0 -1
  421. package/dist/lib/services/skill-picker-narrowing.d.ts +0 -13
  422. package/dist/lib/services/skill-picker-narrowing.d.ts.map +0 -1
  423. package/dist/lib/services/skill-picker-narrowing.js +0 -13
  424. package/dist/lib/services/skill-picker-narrowing.js.map +0 -1
@@ -24,13 +24,69 @@ function ConversationSidebarComponent_Conditional_2_Template(rf, ctx) { if (rf &
24
24
  i0.ɵɵproperty("environmentId", ctx_r1.environmentId)("currentUser", ctx_r1.currentUser);
25
25
  } }
26
26
  export class ConversationSidebarComponent extends BaseAngularComponent {
27
- activeTab = 'conversations';
28
- environmentId;
29
- currentUser;
30
- selectedConversationId = null;
31
- renamedConversationId = null;
32
- isSidebarPinned = true;
33
- isMobileView = false;
27
+ ActiveTab = 'conversations';
28
+ /** @deprecated Use {@link ActiveTab}. */
29
+ set activeTab(value) {
30
+ this.ActiveTab = value;
31
+ }
32
+ /** @deprecated Use {@link ActiveTab}. */
33
+ get activeTab() {
34
+ return this.ActiveTab;
35
+ }
36
+ EnvironmentId;
37
+ /** @deprecated Use {@link EnvironmentId}. */
38
+ set environmentId(value) {
39
+ this.EnvironmentId = value;
40
+ }
41
+ /** @deprecated Use {@link EnvironmentId}. */
42
+ get environmentId() {
43
+ return this.EnvironmentId;
44
+ }
45
+ CurrentUser;
46
+ /** @deprecated Use {@link CurrentUser}. */
47
+ set currentUser(value) {
48
+ this.CurrentUser = value;
49
+ }
50
+ /** @deprecated Use {@link CurrentUser}. */
51
+ get currentUser() {
52
+ return this.CurrentUser;
53
+ }
54
+ SelectedConversationId = null;
55
+ /** @deprecated Use {@link SelectedConversationId}. */
56
+ set selectedConversationId(value) {
57
+ this.SelectedConversationId = value;
58
+ }
59
+ /** @deprecated Use {@link SelectedConversationId}. */
60
+ get selectedConversationId() {
61
+ return this.SelectedConversationId;
62
+ }
63
+ RenamedConversationId = null;
64
+ /** @deprecated Use {@link RenamedConversationId}. */
65
+ set renamedConversationId(value) {
66
+ this.RenamedConversationId = value;
67
+ }
68
+ /** @deprecated Use {@link RenamedConversationId}. */
69
+ get renamedConversationId() {
70
+ return this.RenamedConversationId;
71
+ }
72
+ IsSidebarPinned = true;
73
+ /** @deprecated Use {@link IsSidebarPinned}. */
74
+ set isSidebarPinned(value) {
75
+ this.IsSidebarPinned = value;
76
+ }
77
+ /** @deprecated Use {@link IsSidebarPinned}. */
78
+ get isSidebarPinned() {
79
+ return this.IsSidebarPinned;
80
+ }
81
+ IsMobileView = false;
82
+ /** @deprecated Use {@link IsMobileView}. */
83
+ set isMobileView(value) {
84
+ this.IsMobileView = value;
85
+ }
86
+ /** @deprecated Use {@link IsMobileView}. */
87
+ get isMobileView() {
88
+ return this.IsMobileView;
89
+ }
34
90
  /** Show the Routines section at the bottom of the sidebar (bubbled from the workspace; default true). */
35
91
  ShowRoutines = true;
36
92
  // ── White-label chrome toggles, passed through to the conversation list
@@ -38,30 +94,118 @@ export class ConversationSidebarComponent extends BaseAngularComponent {
38
94
  /** Show the list's search box. */
39
95
  showSearch = true;
40
96
  /** Show the list's "New Conversation" button. */
41
- showNewConversationButton = true;
97
+ ShowNewConversationButton = true;
98
+ /** @deprecated Use {@link ShowNewConversationButton}. */
99
+ set showNewConversationButton(value) {
100
+ this.ShowNewConversationButton = value;
101
+ }
102
+ /** @deprecated Use {@link ShowNewConversationButton}. */
103
+ get showNewConversationButton() {
104
+ return this.ShowNewConversationButton;
105
+ }
42
106
  /** Show the list's ⋯ header options menu. */
43
- showHeaderMenu = true;
107
+ ShowHeaderMenu = true;
108
+ /** @deprecated Use {@link ShowHeaderMenu}. */
109
+ set showHeaderMenu(value) {
110
+ this.ShowHeaderMenu = value;
111
+ }
112
+ /** @deprecated Use {@link ShowHeaderMenu}. */
113
+ get showHeaderMenu() {
114
+ return this.ShowHeaderMenu;
115
+ }
44
116
  /** Show the list's collapsible section headers. */
45
- showSectionHeaders = true;
46
- conversationSelected = new EventEmitter();
117
+ ShowSectionHeaders = true;
118
+ /** @deprecated Use {@link ShowSectionHeaders}. */
119
+ set showSectionHeaders(value) {
120
+ this.ShowSectionHeaders = value;
121
+ }
122
+ /** @deprecated Use {@link ShowSectionHeaders}. */
123
+ get showSectionHeaders() {
124
+ return this.ShowSectionHeaders;
125
+ }
126
+ ConversationSelected = new EventEmitter();
127
+ /**
128
+ * @deprecated Use {@link ConversationSelected}.
129
+ *
130
+ * The same emitter under the old binding name, so a template still binding
131
+ * (conversationSelected) keeps working. Must stay AFTER ConversationSelected: class fields
132
+ * initialise in order, and the other way round this captures undefined.
133
+ */
134
+ conversationSelected = this.ConversationSelected;
47
135
  /** Forwarded from the routines section — a run's linked execution record was clicked. */
48
- openEntityRecord = new EventEmitter();
49
- newConversationRequested = new EventEmitter();
50
- pinSidebarRequested = new EventEmitter();
51
- unpinSidebarRequested = new EventEmitter();
136
+ OpenEntityRecord = new EventEmitter();
137
+ /**
138
+ * @deprecated Use {@link OpenEntityRecord}.
139
+ *
140
+ * The same emitter under the old binding name, so a template still binding
141
+ * (openEntityRecord) keeps working. Must stay AFTER OpenEntityRecord: class fields
142
+ * initialise in order, and the other way round this captures undefined.
143
+ */
144
+ openEntityRecord = this.OpenEntityRecord;
145
+ NewConversationRequested = new EventEmitter();
146
+ /**
147
+ * @deprecated Use {@link NewConversationRequested}.
148
+ *
149
+ * The same emitter under the old binding name, so a template still binding
150
+ * (newConversationRequested) keeps working. Must stay AFTER NewConversationRequested: class fields
151
+ * initialise in order, and the other way round this captures undefined.
152
+ */
153
+ newConversationRequested = this.NewConversationRequested;
154
+ PinSidebarRequested = new EventEmitter();
155
+ /**
156
+ * @deprecated Use {@link PinSidebarRequested}.
157
+ *
158
+ * The same emitter under the old binding name, so a template still binding
159
+ * (pinSidebarRequested) keeps working. Must stay AFTER PinSidebarRequested: class fields
160
+ * initialise in order, and the other way round this captures undefined.
161
+ */
162
+ pinSidebarRequested = this.PinSidebarRequested;
163
+ UnpinSidebarRequested = new EventEmitter();
164
+ /**
165
+ * @deprecated Use {@link UnpinSidebarRequested}.
166
+ *
167
+ * The same emitter under the old binding name, so a template still binding
168
+ * (unpinSidebarRequested) keeps working. Must stay AFTER UnpinSidebarRequested: class fields
169
+ * initialise in order, and the other way round this captures undefined.
170
+ */
171
+ unpinSidebarRequested = this.UnpinSidebarRequested;
52
172
  /** Re-emitted from the conversation list — a conversation was deleted (payload = its ID).
53
173
  * Hosts use this to recover when the ACTIVE conversation is deleted. */
54
- conversationDeleted = new EventEmitter();
174
+ ConversationDeleted = new EventEmitter();
175
+ /**
176
+ * @deprecated Use {@link ConversationDeleted}.
177
+ *
178
+ * The same emitter under the old binding name, so a template still binding
179
+ * (conversationDeleted) keeps working. Must stay AFTER ConversationDeleted: class fields
180
+ * initialise in order, and the other way round this captures undefined.
181
+ */
182
+ conversationDeleted = this.ConversationDeleted;
55
183
  /** Re-emitted from the conversation list — the user refreshed the list. */
56
- refreshRequested = new EventEmitter();
184
+ RefreshRequested = new EventEmitter();
185
+ /**
186
+ * @deprecated Use {@link RefreshRequested}.
187
+ *
188
+ * The same emitter under the old binding name, so a template still binding
189
+ * (refreshRequested) keeps working. Must stay AFTER RefreshRequested: class fields
190
+ * initialise in order, and the other way round this captures undefined.
191
+ */
192
+ refreshRequested = this.RefreshRequested;
193
+ OnPinSidebarRequested() {
194
+ this.PinSidebarRequested.emit();
195
+ }
196
+ /** @deprecated Use {@link OnPinSidebarRequested}. */
57
197
  onPinSidebarRequested() {
58
- this.pinSidebarRequested.emit();
198
+ return this.OnPinSidebarRequested();
199
+ }
200
+ OnUnpinSidebarRequested() {
201
+ this.UnpinSidebarRequested.emit();
59
202
  }
203
+ /** @deprecated Use {@link OnUnpinSidebarRequested}. */
60
204
  onUnpinSidebarRequested() {
61
- this.unpinSidebarRequested.emit();
205
+ return this.OnUnpinSidebarRequested();
62
206
  }
63
207
  static ɵfac = /*@__PURE__*/ (() => { let ɵConversationSidebarComponent_BaseFactory; return function ConversationSidebarComponent_Factory(__ngFactoryType__) { return (ɵConversationSidebarComponent_BaseFactory || (ɵConversationSidebarComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ConversationSidebarComponent)))(__ngFactoryType__ || ConversationSidebarComponent); }; })();
64
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ConversationSidebarComponent, selectors: [["mj-conversation-sidebar"]], inputs: { activeTab: "activeTab", environmentId: "environmentId", currentUser: "currentUser", selectedConversationId: "selectedConversationId", renamedConversationId: "renamedConversationId", isSidebarPinned: "isSidebarPinned", isMobileView: "isMobileView", ShowRoutines: "ShowRoutines", showSearch: "showSearch", showNewConversationButton: "showNewConversationButton", showHeaderMenu: "showHeaderMenu", showSectionHeaders: "showSectionHeaders" }, outputs: { conversationSelected: "conversationSelected", openEntityRecord: "openEntityRecord", newConversationRequested: "newConversationRequested", pinSidebarRequested: "pinSidebarRequested", unpinSidebarRequested: "unpinSidebarRequested", conversationDeleted: "conversationDeleted", refreshRequested: "refreshRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 4, consts: [[1, "conversation-sidebar"], [1, "sidebar-content"], [3, "openEntityRecord", "openConversation", "Provider", "ShowRoutines"], [3, "conversationSelected", "conversationDeleted", "newConversationRequested", "refreshRequested", "pinSidebarRequested", "unpinSidebarRequested", "environmentId", "currentUser", "selectedConversationId", "renamedConversationId", "isSidebarPinned", "isMobileView", "showSearch", "showNewConversationButton", "showHeaderMenu", "showSectionHeaders"], [3, "environmentId", "currentUser"]], template: function ConversationSidebarComponent_Template(rf, ctx) { if (rf & 1) {
208
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ConversationSidebarComponent, selectors: [["mj-conversation-sidebar"]], inputs: { ActiveTab: "ActiveTab", activeTab: "activeTab", EnvironmentId: "EnvironmentId", environmentId: "environmentId", CurrentUser: "CurrentUser", currentUser: "currentUser", SelectedConversationId: "SelectedConversationId", selectedConversationId: "selectedConversationId", RenamedConversationId: "RenamedConversationId", renamedConversationId: "renamedConversationId", IsSidebarPinned: "IsSidebarPinned", isSidebarPinned: "isSidebarPinned", IsMobileView: "IsMobileView", isMobileView: "isMobileView", ShowRoutines: "ShowRoutines", showSearch: "showSearch", ShowNewConversationButton: "ShowNewConversationButton", showNewConversationButton: "showNewConversationButton", ShowHeaderMenu: "ShowHeaderMenu", showHeaderMenu: "showHeaderMenu", ShowSectionHeaders: "ShowSectionHeaders", showSectionHeaders: "showSectionHeaders" }, outputs: { ConversationSelected: "ConversationSelected", conversationSelected: "conversationSelected", OpenEntityRecord: "OpenEntityRecord", openEntityRecord: "openEntityRecord", NewConversationRequested: "NewConversationRequested", newConversationRequested: "newConversationRequested", PinSidebarRequested: "PinSidebarRequested", pinSidebarRequested: "pinSidebarRequested", UnpinSidebarRequested: "UnpinSidebarRequested", unpinSidebarRequested: "unpinSidebarRequested", ConversationDeleted: "ConversationDeleted", conversationDeleted: "conversationDeleted", RefreshRequested: "RefreshRequested", refreshRequested: "refreshRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 4, consts: [[1, "conversation-sidebar"], [1, "sidebar-content"], [3, "openEntityRecord", "openConversation", "Provider", "ShowRoutines"], [3, "conversationSelected", "conversationDeleted", "newConversationRequested", "refreshRequested", "pinSidebarRequested", "unpinSidebarRequested", "environmentId", "currentUser", "selectedConversationId", "renamedConversationId", "isSidebarPinned", "isMobileView", "showSearch", "showNewConversationButton", "showHeaderMenu", "showSectionHeaders"], [3, "environmentId", "currentUser"]], template: function ConversationSidebarComponent_Template(rf, ctx) { if (rf & 1) {
65
209
  i0.ɵɵelementStart(0, "div", 0);
66
210
  i0.ɵɵconditionalCreate(1, ConversationSidebarComponent_Conditional_1_Template, 2, 10, "div", 1);
67
211
  i0.ɵɵconditionalCreate(2, ConversationSidebarComponent_Conditional_2_Template, 2, 2, "div", 1);
@@ -123,42 +267,76 @@ export class ConversationSidebarComponent extends BaseAngularComponent {
123
267
  </mj-conversation-routines-section>
124
268
  </div>
125
269
  `, styles: ["\n .conversation-sidebar {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n .sidebar-content {\n flex: 1;\n overflow-y: auto;\n }\n .placeholder {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n }\n .placeholder p {\n margin: 0;\n font-size: 14px;\n }\n "] }]
126
- }], null, { activeTab: [{
270
+ }], null, { ActiveTab: [{
271
+ type: Input
272
+ }], activeTab: [{
273
+ type: Input
274
+ }], EnvironmentId: [{
127
275
  type: Input
128
276
  }], environmentId: [{
129
277
  type: Input
278
+ }], CurrentUser: [{
279
+ type: Input
130
280
  }], currentUser: [{
131
281
  type: Input
282
+ }], SelectedConversationId: [{
283
+ type: Input
132
284
  }], selectedConversationId: [{
133
285
  type: Input
286
+ }], RenamedConversationId: [{
287
+ type: Input
134
288
  }], renamedConversationId: [{
135
289
  type: Input
290
+ }], IsSidebarPinned: [{
291
+ type: Input
136
292
  }], isSidebarPinned: [{
137
293
  type: Input
294
+ }], IsMobileView: [{
295
+ type: Input
138
296
  }], isMobileView: [{
139
297
  type: Input
140
298
  }], ShowRoutines: [{
141
299
  type: Input
142
300
  }], showSearch: [{
143
301
  type: Input
302
+ }], ShowNewConversationButton: [{
303
+ type: Input
144
304
  }], showNewConversationButton: [{
145
305
  type: Input
306
+ }], ShowHeaderMenu: [{
307
+ type: Input
146
308
  }], showHeaderMenu: [{
147
309
  type: Input
310
+ }], ShowSectionHeaders: [{
311
+ type: Input
148
312
  }], showSectionHeaders: [{
149
313
  type: Input
314
+ }], ConversationSelected: [{
315
+ type: Output
150
316
  }], conversationSelected: [{
151
317
  type: Output
318
+ }], OpenEntityRecord: [{
319
+ type: Output
152
320
  }], openEntityRecord: [{
153
321
  type: Output
322
+ }], NewConversationRequested: [{
323
+ type: Output
154
324
  }], newConversationRequested: [{
155
325
  type: Output
326
+ }], PinSidebarRequested: [{
327
+ type: Output
156
328
  }], pinSidebarRequested: [{
157
329
  type: Output
330
+ }], UnpinSidebarRequested: [{
331
+ type: Output
158
332
  }], unpinSidebarRequested: [{
159
333
  type: Output
334
+ }], ConversationDeleted: [{
335
+ type: Output
160
336
  }], conversationDeleted: [{
161
337
  type: Output
338
+ }], RefreshRequested: [{
339
+ type: Output
162
340
  }], refreshRequested: [{
163
341
  type: Output
164
342
  }] }); })();
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-sidebar.component.js","sourceRoot":"","sources":["../../../../src/lib/components/sidebar/conversation-sidebar.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;;;;;;IAU3D,AADF,8BAA6B,8BAiB2B;IAApD,AADA,AADA,AADA,AADA,AADA,kPAAwB,wCAAiC,KAAC,mOACnC,uCAAgC,KAAC,uOAC5B,sCAA+B,KAAC,uNACxC,8BAAuB,KAAC,6NACrB,8BAAuB,KAAC,iOACtB,gCAAyB,KAAC;IAEvD,AADE,iBAAuB,EACnB;;;IAjBF,cAA+B;IAS/B,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,oDAA+B,mCACJ,yDACsB,uDACF,2CACZ,qCACN,iCACJ,+DAC8B,yCACtB,iDACQ;;;IAW7C,8BAA6B;IAC3B,wCAGqB;IACvB,iBAAM;;;IAHF,cAA+B;IAC/B,AADA,oDAA+B,mCACJ;;AA0CvC,MAAM,OAAO,4BAA6B,SAAQ,oBAAoB;IAC3D,SAAS,GAAkB,eAAe,CAAC;IAC3C,aAAa,CAAU;IACvB,WAAW,CAAY;IACvB,sBAAsB,GAAkB,IAAI,CAAC;IAC7C,qBAAqB,GAAkB,IAAI,CAAC;IAC5C,eAAe,GAAY,IAAI,CAAC;IAChC,YAAY,GAAY,KAAK,CAAC;IACvC,yGAAyG;IAChG,YAAY,GAAY,IAAI,CAAC;IAEtC,yEAAyE;IACzE,6EAA6E;IAC7E,kCAAkC;IACzB,UAAU,GAAY,IAAI,CAAC;IACpC,iDAAiD;IACxC,yBAAyB,GAAY,IAAI,CAAC;IACnD,6CAA6C;IACpC,cAAc,GAAY,IAAI,CAAC;IACxC,mDAAmD;IAC1C,kBAAkB,GAAY,IAAI,CAAC;IAElC,oBAAoB,GAAG,IAAI,YAAY,EAAU,CAAC;IAC5D,yFAAyF;IAC/E,gBAAgB,GAAG,IAAI,YAAY,EAAsD,CAAC;IAC1F,wBAAwB,GAAG,IAAI,YAAY,EAAQ,CAAC;IACpD,mBAAmB,GAAG,IAAI,YAAY,EAAQ,CAAC;IAC/C,qBAAqB,GAAG,IAAI,YAAY,EAAQ,CAAC;IAC3D;6EACyE;IAC/D,mBAAmB,GAAG,IAAI,YAAY,EAAU,CAAC;IAC3D,2EAA2E;IACjE,gBAAgB,GAAG,IAAI,YAAY,EAAQ,CAAC;IAEtD,qBAAqB;QACnB,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,uBAAuB;QACrB,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;6RAxCU,4BAA4B,yBAA5B,4BAA4B;6DAA5B,4BAA4B;YArErC,8BAAkC;YAChC,+FAAqC;YAsBrC,8FAAmC;YAYnC,2DAIyD;YAAvD,AADA,+JAAoB,iCAA6B,IAAC,kJAC9B,qCAAiC,IAAC;YAE1D,AADE,iBAAmC,EAC/B;;YAxCJ,cAqBC;YArBD,4DAqBC;YACD,cAOC;YAPD,0DAOC;YAMC,cAAqB;YACrB,AADA,uCAAqB,kCACQ;;;iFAgCxB,4BAA4B;cAzExC,SAAS;6BACI,KAAK,YACP,yBAAyB,YACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2CP;;kBA4BF,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBAEL,KAAK;;kBAKL,KAAK;;kBAEL,KAAK;;kBAEL,KAAK;;kBAEL,KAAK;;kBAEL,MAAM;;kBAEN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBAGN,MAAM;;kBAEN,MAAM;;kFAhCI,4BAA4B","sourcesContent":["import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CompositeKey, UserInfo } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { NavigationTab } from '../../models/conversation-state.model';\n\n@Component({\n standalone: false,\n selector: 'mj-conversation-sidebar',\n template: `\n <div class=\"conversation-sidebar\">\n @if (activeTab === 'conversations') {\n <div class=\"sidebar-content\">\n <mj-conversation-list\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [selectedConversationId]=\"selectedConversationId\"\n [renamedConversationId]=\"renamedConversationId\"\n [isSidebarPinned]=\"isSidebarPinned\"\n [isMobileView]=\"isMobileView\"\n [showSearch]=\"showSearch\"\n [showNewConversationButton]=\"showNewConversationButton\"\n [showHeaderMenu]=\"showHeaderMenu\"\n [showSectionHeaders]=\"showSectionHeaders\"\n (conversationSelected)=\"conversationSelected.emit($event)\"\n (conversationDeleted)=\"conversationDeleted.emit($event)\"\n (newConversationRequested)=\"newConversationRequested.emit()\"\n (refreshRequested)=\"refreshRequested.emit()\"\n (pinSidebarRequested)=\"onPinSidebarRequested()\"\n (unpinSidebarRequested)=\"onUnpinSidebarRequested()\">\n </mj-conversation-list>\n </div>\n }\n @if (activeTab === 'collections') {\n <div class=\"sidebar-content\">\n <mj-collection-tree\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\">\n </mj-collection-tree>\n </div>\n }\n\n <!-- Routines — pinned at the very bottom of the sidebar. Gated by the\n ShowRoutines opt-out AND the user's Read permission on\n 'MJ: User Routines' (checked inside the section component). -->\n <mj-conversation-routines-section\n [Provider]=\"Provider\"\n [ShowRoutines]=\"ShowRoutines\"\n (openEntityRecord)=\"openEntityRecord.emit($event)\"\n (openConversation)=\"conversationSelected.emit($event)\">\n </mj-conversation-routines-section>\n </div>\n `,\n styles: [`\n .conversation-sidebar {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n .sidebar-content {\n flex: 1;\n overflow-y: auto;\n }\n .placeholder {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n }\n .placeholder p {\n margin: 0;\n font-size: 14px;\n }\n `]\n})\nexport class ConversationSidebarComponent extends BaseAngularComponent {\n @Input() activeTab: NavigationTab = 'conversations';\n @Input() environmentId!: string;\n @Input() currentUser!: UserInfo;\n @Input() selectedConversationId: string | null = null;\n @Input() renamedConversationId: string | null = null;\n @Input() isSidebarPinned: boolean = true;\n @Input() isMobileView: boolean = false;\n /** Show the Routines section at the bottom of the sidebar (bubbled from the workspace; default true). */\n @Input() ShowRoutines: boolean = true;\n\n // ── White-label chrome toggles, passed through to the conversation list\n // (all default true = stock rendering; see ConversationListComponent). ──\n /** Show the list's search box. */\n @Input() showSearch: boolean = true;\n /** Show the list's \"New Conversation\" button. */\n @Input() showNewConversationButton: boolean = true;\n /** Show the list's ⋯ header options menu. */\n @Input() showHeaderMenu: boolean = true;\n /** Show the list's collapsible section headers. */\n @Input() showSectionHeaders: boolean = true;\n\n @Output() conversationSelected = new EventEmitter<string>();\n /** Forwarded from the routines section — a run's linked execution record was clicked. */\n @Output() openEntityRecord = new EventEmitter<{ entityName: string; compositeKey: CompositeKey }>();\n @Output() newConversationRequested = new EventEmitter<void>();\n @Output() pinSidebarRequested = new EventEmitter<void>();\n @Output() unpinSidebarRequested = new EventEmitter<void>();\n /** Re-emitted from the conversation list — a conversation was deleted (payload = its ID).\n * Hosts use this to recover when the ACTIVE conversation is deleted. */\n @Output() conversationDeleted = new EventEmitter<string>();\n /** Re-emitted from the conversation list — the user refreshed the list. */\n @Output() refreshRequested = new EventEmitter<void>();\n\n onPinSidebarRequested(): void {\n this.pinSidebarRequested.emit();\n }\n\n onUnpinSidebarRequested(): void {\n this.unpinSidebarRequested.emit();\n }\n}"]}
1
+ {"version":3,"file":"conversation-sidebar.component.js","sourceRoot":"","sources":["../../../../src/lib/components/sidebar/conversation-sidebar.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CompositeKey, UserInfo } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { NavigationTab } from '../../models/conversation-state.model';\n\n@Component({\n standalone: false,\n selector: 'mj-conversation-sidebar',\n template: `\n <div class=\"conversation-sidebar\">\n @if (activeTab === 'conversations') {\n <div class=\"sidebar-content\">\n <mj-conversation-list\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [selectedConversationId]=\"selectedConversationId\"\n [renamedConversationId]=\"renamedConversationId\"\n [isSidebarPinned]=\"isSidebarPinned\"\n [isMobileView]=\"isMobileView\"\n [showSearch]=\"showSearch\"\n [showNewConversationButton]=\"showNewConversationButton\"\n [showHeaderMenu]=\"showHeaderMenu\"\n [showSectionHeaders]=\"showSectionHeaders\"\n (conversationSelected)=\"conversationSelected.emit($event)\"\n (conversationDeleted)=\"conversationDeleted.emit($event)\"\n (newConversationRequested)=\"newConversationRequested.emit()\"\n (refreshRequested)=\"refreshRequested.emit()\"\n (pinSidebarRequested)=\"onPinSidebarRequested()\"\n (unpinSidebarRequested)=\"onUnpinSidebarRequested()\">\n </mj-conversation-list>\n </div>\n }\n @if (activeTab === 'collections') {\n <div class=\"sidebar-content\">\n <mj-collection-tree\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\">\n </mj-collection-tree>\n </div>\n }\n\n <!-- Routines — pinned at the very bottom of the sidebar. Gated by the\n ShowRoutines opt-out AND the user's Read permission on\n 'MJ: User Routines' (checked inside the section component). -->\n <mj-conversation-routines-section\n [Provider]=\"Provider\"\n [ShowRoutines]=\"ShowRoutines\"\n (openEntityRecord)=\"openEntityRecord.emit($event)\"\n (openConversation)=\"conversationSelected.emit($event)\">\n </mj-conversation-routines-section>\n </div>\n `,\n styles: [`\n .conversation-sidebar {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n .sidebar-content {\n flex: 1;\n overflow-y: auto;\n }\n .placeholder {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n }\n .placeholder p {\n margin: 0;\n font-size: 14px;\n }\n `]\n})\nexport class ConversationSidebarComponent extends BaseAngularComponent {\n @Input() ActiveTab: NavigationTab = 'conversations';\n\n /** @deprecated Use {@link ActiveTab}. */\n @Input() set activeTab(value: NavigationTab) {\n this.ActiveTab = value;\n }\n /** @deprecated Use {@link ActiveTab}. */\n get activeTab(): NavigationTab {\n return this.ActiveTab;\n }\n @Input() EnvironmentId!: string;\n\n /** @deprecated Use {@link EnvironmentId}. */\n @Input() set environmentId(value: string) {\n this.EnvironmentId = value;\n }\n /** @deprecated Use {@link EnvironmentId}. */\n get environmentId(): string {\n return this.EnvironmentId;\n }\n @Input() CurrentUser!: UserInfo;\n\n /** @deprecated Use {@link CurrentUser}. */\n @Input() set currentUser(value: UserInfo) {\n this.CurrentUser = value;\n }\n /** @deprecated Use {@link CurrentUser}. */\n get currentUser(): UserInfo {\n return this.CurrentUser;\n }\n @Input() SelectedConversationId: string | null = null;\n\n /** @deprecated Use {@link SelectedConversationId}. */\n @Input() set selectedConversationId(value: string | null) {\n this.SelectedConversationId = value;\n }\n /** @deprecated Use {@link SelectedConversationId}. */\n get selectedConversationId(): string | null {\n return this.SelectedConversationId;\n }\n @Input() RenamedConversationId: string | null = null;\n\n /** @deprecated Use {@link RenamedConversationId}. */\n @Input() set renamedConversationId(value: string | null) {\n this.RenamedConversationId = value;\n }\n /** @deprecated Use {@link RenamedConversationId}. */\n get renamedConversationId(): string | null {\n return this.RenamedConversationId;\n }\n @Input() IsSidebarPinned: boolean = true;\n\n /** @deprecated Use {@link IsSidebarPinned}. */\n @Input() set isSidebarPinned(value: boolean) {\n this.IsSidebarPinned = value;\n }\n /** @deprecated Use {@link IsSidebarPinned}. */\n get isSidebarPinned(): boolean {\n return this.IsSidebarPinned;\n }\n @Input() IsMobileView: boolean = false;\n\n /** @deprecated Use {@link IsMobileView}. */\n @Input() set isMobileView(value: boolean) {\n this.IsMobileView = value;\n }\n /** @deprecated Use {@link IsMobileView}. */\n get isMobileView(): boolean {\n return this.IsMobileView;\n }\n /** Show the Routines section at the bottom of the sidebar (bubbled from the workspace; default true). */\n @Input() ShowRoutines: boolean = true;\n\n // ── White-label chrome toggles, passed through to the conversation list\n // (all default true = stock rendering; see ConversationListComponent). ──\n /** Show the list's search box. */\n @Input() showSearch: boolean = true;\n /** Show the list's \"New Conversation\" button. */\n @Input() ShowNewConversationButton: boolean = true;\n\n /** @deprecated Use {@link ShowNewConversationButton}. */\n @Input() set showNewConversationButton(value: boolean) {\n this.ShowNewConversationButton = value;\n }\n /** @deprecated Use {@link ShowNewConversationButton}. */\n get showNewConversationButton(): boolean {\n return this.ShowNewConversationButton;\n }\n /** Show the list's ⋯ header options menu. */\n @Input() ShowHeaderMenu: boolean = true;\n\n /** @deprecated Use {@link ShowHeaderMenu}. */\n @Input() set showHeaderMenu(value: boolean) {\n this.ShowHeaderMenu = value;\n }\n /** @deprecated Use {@link ShowHeaderMenu}. */\n get showHeaderMenu(): boolean {\n return this.ShowHeaderMenu;\n }\n /** Show the list's collapsible section headers. */\n @Input() ShowSectionHeaders: boolean = true;\n\n /** @deprecated Use {@link ShowSectionHeaders}. */\n @Input() set showSectionHeaders(value: boolean) {\n this.ShowSectionHeaders = value;\n }\n /** @deprecated Use {@link ShowSectionHeaders}. */\n get showSectionHeaders(): boolean {\n return this.ShowSectionHeaders;\n }\n\n @Output() ConversationSelected = new EventEmitter<string>();\n\n /**\n * @deprecated Use {@link ConversationSelected}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (conversationSelected) keeps working. Must stay AFTER ConversationSelected: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() conversationSelected = this.ConversationSelected;\n /** Forwarded from the routines section — a run's linked execution record was clicked. */\n @Output() OpenEntityRecord = new EventEmitter<{ entityName: string; compositeKey: CompositeKey }>();\n\n /**\n * @deprecated Use {@link OpenEntityRecord}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (openEntityRecord) keeps working. Must stay AFTER OpenEntityRecord: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() openEntityRecord = this.OpenEntityRecord;\n @Output() NewConversationRequested = new EventEmitter<void>();\n\n /**\n * @deprecated Use {@link NewConversationRequested}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (newConversationRequested) keeps working. Must stay AFTER NewConversationRequested: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() newConversationRequested = this.NewConversationRequested;\n @Output() PinSidebarRequested = new EventEmitter<void>();\n\n /**\n * @deprecated Use {@link PinSidebarRequested}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (pinSidebarRequested) keeps working. Must stay AFTER PinSidebarRequested: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() pinSidebarRequested = this.PinSidebarRequested;\n @Output() UnpinSidebarRequested = new EventEmitter<void>();\n\n /**\n * @deprecated Use {@link UnpinSidebarRequested}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (unpinSidebarRequested) keeps working. Must stay AFTER UnpinSidebarRequested: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() unpinSidebarRequested = this.UnpinSidebarRequested;\n /** Re-emitted from the conversation list — a conversation was deleted (payload = its ID).\n * Hosts use this to recover when the ACTIVE conversation is deleted. */\n @Output() ConversationDeleted = new EventEmitter<string>();\n\n /**\n * @deprecated Use {@link ConversationDeleted}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (conversationDeleted) keeps working. Must stay AFTER ConversationDeleted: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() conversationDeleted = this.ConversationDeleted;\n /** Re-emitted from the conversation list — the user refreshed the list. */\n @Output() RefreshRequested = new EventEmitter<void>();\n\n /**\n * @deprecated Use {@link RefreshRequested}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (refreshRequested) keeps working. Must stay AFTER RefreshRequested: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() refreshRequested = this.RefreshRequested;\n\n OnPinSidebarRequested(): void {\n this.PinSidebarRequested.emit();\n }\n\n /** @deprecated Use {@link OnPinSidebarRequested}. */\n onPinSidebarRequested(): void {\n return this.OnPinSidebarRequested();\n }\n\n OnUnpinSidebarRequested(): void {\n this.UnpinSidebarRequested.emit();\n }\n\n /** @deprecated Use {@link OnUnpinSidebarRequested}. */\n onUnpinSidebarRequested(): void {\n return this.OnUnpinSidebarRequested();\n }\n}"]}
@@ -33,6 +33,17 @@ export declare class RoutinesSectionComponent extends BaseAngularComponent imple
33
33
  * was clicked. Same shape as the chat area's openEntityRecord — the host (Explorer
34
34
  * wrapper or workspace) routes it to navigation; this package never navigates itself.
35
35
  */
36
+ OpenEntityRecord: EventEmitter<{
37
+ entityName: string;
38
+ compositeKey: CompositeKey;
39
+ }>;
40
+ /**
41
+ * @deprecated Use {@link OpenEntityRecord}.
42
+ *
43
+ * The same emitter under the old binding name, so a template still binding
44
+ * (openEntityRecord) keeps working. Must stay AFTER OpenEntityRecord: class fields
45
+ * initialise in order, and the other way round this captures undefined.
46
+ */
36
47
  openEntityRecord: EventEmitter<{
37
48
  entityName: string;
38
49
  compositeKey: CompositeKey;
@@ -42,6 +53,14 @@ export declare class RoutinesSectionComponent extends BaseAngularComponent imple
42
53
  * Application-scoped thread its runs append to). Emits the conversation ID;
43
54
  * the host selects it in chat — this component closes the slide-in first.
44
55
  */
56
+ OpenConversation: EventEmitter<string>;
57
+ /**
58
+ * @deprecated Use {@link OpenConversation}.
59
+ *
60
+ * The same emitter under the old binding name, so a template still binding
61
+ * (openConversation) keeps working. Must stay AFTER OpenConversation: class fields
62
+ * initialise in order, and the other way round this captures undefined.
63
+ */
45
64
  openConversation: EventEmitter<string>;
46
65
  /** Slide-in open state. */
47
66
  SlideInVisible: boolean;
@@ -68,6 +87,6 @@ export declare class RoutinesSectionComponent extends BaseAngularComponent imple
68
87
  private initialize;
69
88
  private rebuildCounts;
70
89
  static ɵfac: i0.ɵɵFactoryDeclaration<RoutinesSectionComponent, never>;
71
- static ɵcmp: i0.ɵɵComponentDeclaration<RoutinesSectionComponent, "mj-conversation-routines-section", never, { "ShowRoutines": { "alias": "ShowRoutines"; "required": false; }; }, { "openEntityRecord": "openEntityRecord"; "openConversation": "openConversation"; }, never, never, false, never>;
90
+ static ɵcmp: i0.ɵɵComponentDeclaration<RoutinesSectionComponent, "mj-conversation-routines-section", never, { "ShowRoutines": { "alias": "ShowRoutines"; "required": false; }; }, { "OpenEntityRecord": "OpenEntityRecord"; "openEntityRecord": "openEntityRecord"; "OpenConversation": "OpenConversation"; "openConversation": "openConversation"; }, never, never, false, never>;
72
91
  }
73
92
  //# sourceMappingURL=routines-section.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"routines-section.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/sidebar/routines-section.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAgC,YAAY,EAAS,SAAS,EAAE,MAAM,EAAkB,MAAM,eAAe,CAAC;AAGrH,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;;AAE7G;;;;;;;;;;;GAWG;AACH,qBAMa,wBAAyB,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAC3F,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,QAAQ,CAAuB;IAEvC,OAAO,CAAC,aAAa,CAAQ;IAC7B,uFAAuF;IACvF,IACW,YAAY,CAAC,KAAK,EAAE,OAAO,EAQrC;IACD,IAAW,YAAY,IAAI,OAAO,CAEjC;IAED,sEAAsE;IAC/D,OAAO,UAAS;IACvB,oDAAoD;IAC7C,WAAW,SAAK;IACvB,6DAA6D;IACtD,UAAU,SAAK;IAEtB;;;;OAIG;IACO,gBAAgB;oBAAkC,MAAM;sBAAgB,YAAY;OAAM;IAEpG;;;;OAIG;IACO,gBAAgB,uBAA8B;IAExD,2BAA2B;IACpB,cAAc,UAAS;IAC9B,sDAAsD;IAC/C,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC9C,qEAAqE;IAC9D,iBAAiB,UAAS;IAEjC,OAAO,CAAC,WAAW,CAAS;IAE5B,4EAA4E;IAC5E,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED,8CAA8C;IAC9C,IAAW,WAAW,IAAI,MAAM,CAK/B;IAEK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B,WAAW,IAAI,IAAI;IAKnB,wEAAwE;IACjE,YAAY,IAAI,IAAI;IAO3B,8EAA8E;IACvE,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAQrC,wFAAwF;IACjF,oBAAoB,CAAC,IAAI,EAAE,2BAA2B,GAAG,IAAI;IAKpE,yFAAyF;IAClF,qBAAqB,CAAC,IAAI,EAAE,4BAA4B,GAAG,IAAI;IAI/D,eAAe,IAAI,IAAI;YAUhB,UAAU;IAgCxB,OAAO,CAAC,aAAa;yCAhJZ,wBAAwB;2CAAxB,wBAAwB;CAsJpC"}
1
+ {"version":3,"file":"routines-section.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/sidebar/routines-section.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAgC,YAAY,EAAS,SAAS,EAAE,MAAM,EAAkB,MAAM,eAAe,CAAC;AAGrH,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;;AAE7G;;;;;;;;;;;GAWG;AACH,qBAMa,wBAAyB,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAC3F,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,QAAQ,CAAuB;IAEvC,OAAO,CAAC,aAAa,CAAQ;IAC7B,uFAAuF;IACvF,IACW,YAAY,CAAC,KAAK,EAAE,OAAO,EAQrC;IACD,IAAW,YAAY,IAAI,OAAO,CAEjC;IAED,sEAAsE;IAC/D,OAAO,UAAS;IACvB,oDAAoD;IAC7C,WAAW,SAAK;IACvB,6DAA6D;IACtD,UAAU,SAAK;IAEtB;;;;OAIG;IACO,gBAAgB;oBAAkC,MAAM;sBAAgB,YAAY;OAAM;IAEpG;;;;;;OAMG;IACO,gBAAgB;oBATkC,MAAM;sBAAgB,YAAY;OAS3C;IAEnD;;;;OAIG;IACO,gBAAgB,uBAA8B;IAExD;;;;;;OAMG;IACO,gBAAgB,uBAAyB;IAEnD,2BAA2B;IACpB,cAAc,UAAS;IAC9B,sDAAsD;IAC/C,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC9C,qEAAqE;IAC9D,iBAAiB,UAAS;IAEjC,OAAO,CAAC,WAAW,CAAS;IAE5B,4EAA4E;IAC5E,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED,8CAA8C;IAC9C,IAAW,WAAW,IAAI,MAAM,CAK/B;IAEK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B,WAAW,IAAI,IAAI;IAKnB,wEAAwE;IACjE,YAAY,IAAI,IAAI;IAO3B,8EAA8E;IACvE,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAQrC,wFAAwF;IACjF,oBAAoB,CAAC,IAAI,EAAE,2BAA2B,GAAG,IAAI;IAKpE,yFAAyF;IAClF,qBAAqB,CAAC,IAAI,EAAE,4BAA4B,GAAG,IAAI;IAI/D,eAAe,IAAI,IAAI;YAUhB,UAAU;IAgCxB,OAAO,CAAC,aAAa;yCAlKZ,wBAAwB;2CAAxB,wBAAwB;CAwKpC"}
@@ -87,13 +87,29 @@ export class RoutinesSectionComponent extends BaseAngularComponent {
87
87
  * was clicked. Same shape as the chat area's openEntityRecord — the host (Explorer
88
88
  * wrapper or workspace) routes it to navigation; this package never navigates itself.
89
89
  */
90
- openEntityRecord = new EventEmitter();
90
+ OpenEntityRecord = new EventEmitter();
91
+ /**
92
+ * @deprecated Use {@link OpenEntityRecord}.
93
+ *
94
+ * The same emitter under the old binding name, so a template still binding
95
+ * (openEntityRecord) keeps working. Must stay AFTER OpenEntityRecord: class fields
96
+ * initialise in order, and the other way round this captures undefined.
97
+ */
98
+ openEntityRecord = this.OpenEntityRecord;
91
99
  /**
92
100
  * The user asked to open a routine's dedicated conversation (the hidden,
93
101
  * Application-scoped thread its runs append to). Emits the conversation ID;
94
102
  * the host selects it in chat — this component closes the slide-in first.
95
103
  */
96
- openConversation = new EventEmitter();
104
+ OpenConversation = new EventEmitter();
105
+ /**
106
+ * @deprecated Use {@link OpenConversation}.
107
+ *
108
+ * The same emitter under the old binding name, so a template still binding
109
+ * (openConversation) keeps working. Must stay AFTER OpenConversation: class fields
110
+ * initialise in order, and the other way round this captures undefined.
111
+ */
112
+ openConversation = this.OpenConversation;
97
113
  /** Slide-in open state. */
98
114
  SlideInVisible = false;
99
115
  /** Routine to open the slide-in on (history view). */
@@ -139,11 +155,11 @@ export class RoutinesSectionComponent extends BaseAngularComponent {
139
155
  /** Opens the routine's conversation in the host chat surface (closing the slide-in). */
140
156
  OnConversationOpened(args) {
141
157
  this.OnSlideInClosed();
142
- this.openConversation.emit(args.ConversationID);
158
+ this.OpenConversation.emit(args.ConversationID);
143
159
  }
144
160
  /** Bridges the slide-in's HistoryRecordOpened to the standard openEntityRecord chain. */
145
161
  OnHistoryRecordOpened(args) {
146
- this.openEntityRecord.emit({ entityName: args.EntityName, compositeKey: CompositeKey.FromURLSegment(this.ProviderToUse.EntityByName(args.EntityName), args.RecordID) });
162
+ this.OpenEntityRecord.emit({ entityName: args.EntityName, compositeKey: CompositeKey.FromURLSegment(this.ProviderToUse.EntityByName(args.EntityName), args.RecordID) });
147
163
  }
148
164
  OnSlideInClosed() {
149
165
  this.SlideInVisible = false;
@@ -191,7 +207,7 @@ export class RoutinesSectionComponent extends BaseAngularComponent {
191
207
  this.cdr.markForCheck();
192
208
  }
193
209
  static ɵfac = /*@__PURE__*/ (() => { let ɵRoutinesSectionComponent_BaseFactory; return function RoutinesSectionComponent_Factory(__ngFactoryType__) { return (ɵRoutinesSectionComponent_BaseFactory || (ɵRoutinesSectionComponent_BaseFactory = i0.ɵɵgetInheritedFactory(RoutinesSectionComponent)))(__ngFactoryType__ || RoutinesSectionComponent); }; })();
194
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RoutinesSectionComponent, selectors: [["mj-conversation-routines-section"]], inputs: { ShowRoutines: "ShowRoutines" }, outputs: { openEntityRecord: "openEntityRecord", openConversation: "openConversation" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [[1, "crs-section"], ["type", "button", 1, "crs-header", 3, "click", "title"], [1, "fa-solid", "fa-business-time", "crs-mark"], [1, "crs-title"], [1, "crs-count"], [1, "crs-spacer"], ["role", "button", "title", "New routine", 1, "crs-add", 3, "click"], [1, "fa-solid", "fa-plus"], ["role", "button", "title", "Open routines", 1, "crs-details"], [1, "fa-solid", "fa-chevron-right"], [3, "VisibleChange", "Closed", "HistoryRecordOpened", "ConversationOpened", "Provider", "Visible", "InitialRoutineID", "StartInNewRoutine"]], template: function RoutinesSectionComponent_Template(rf, ctx) { if (rf & 1) {
210
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RoutinesSectionComponent, selectors: [["mj-conversation-routines-section"]], inputs: { ShowRoutines: "ShowRoutines" }, outputs: { OpenEntityRecord: "OpenEntityRecord", openEntityRecord: "openEntityRecord", OpenConversation: "OpenConversation", openConversation: "openConversation" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [[1, "crs-section"], ["type", "button", 1, "crs-header", 3, "click", "title"], [1, "fa-solid", "fa-business-time", "crs-mark"], [1, "crs-title"], [1, "crs-count"], [1, "crs-spacer"], ["role", "button", "title", "New routine", 1, "crs-add", 3, "click"], [1, "fa-solid", "fa-plus"], ["role", "button", "title", "Open routines", 1, "crs-details"], [1, "fa-solid", "fa-chevron-right"], [3, "VisibleChange", "Closed", "HistoryRecordOpened", "ConversationOpened", "Provider", "Visible", "InitialRoutineID", "StartInNewRoutine"]], template: function RoutinesSectionComponent_Template(rf, ctx) { if (rf & 1) {
195
211
  i0.ɵɵconditionalCreate(0, RoutinesSectionComponent_Conditional_0_Template, 12, 6, "div", 0);
196
212
  } if (rf & 2) {
197
213
  i0.ɵɵconditional(ctx.IsVisible ? 0 : -1);
@@ -202,8 +218,12 @@ export class RoutinesSectionComponent extends BaseAngularComponent {
202
218
  args: [{ standalone: false, selector: 'mj-conversation-routines-section', template: "@if (IsVisible) {\n <div class=\"crs-section\">\n <button type=\"button\" class=\"crs-header\" [title]=\"HeaderTitle\" (click)=\"OpenRoutines()\">\n <i class=\"fa-solid fa-business-time crs-mark\"></i>\n <span class=\"crs-title\">Routines</span>\n @if (ActiveCount > 0) {\n <span class=\"crs-count\">{{ ActiveCount }}</span>\n }\n <span class=\"crs-spacer\"></span>\n <span class=\"crs-add\" role=\"button\" title=\"New routine\" (click)=\"NewRoutine($event)\">\n <i class=\"fa-solid fa-plus\"></i>\n </span>\n <span class=\"crs-details\" role=\"button\" title=\"Open routines\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </span>\n </button>\n\n <mj-user-routines-slide-in\n [Provider]=\"Provider\"\n [(Visible)]=\"SlideInVisible\"\n [InitialRoutineID]=\"SlideInRoutineID\"\n [StartInNewRoutine]=\"SlideInNewRoutine\"\n (Closed)=\"OnSlideInClosed()\"\n (HistoryRecordOpened)=\"OnHistoryRecordOpened($event)\"\n (ConversationOpened)=\"OnConversationOpened($event)\">\n </mj-user-routines-slide-in>\n </div>\n}\n", styles: [":host {\n display: block;\n}\n\n.crs-section {\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n padding: 6px 8px;\n}\n\n.crs-header {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 6px 8px;\n border: none;\n background: transparent;\n border-radius: var(--mj-radius-md, 8px);\n cursor: pointer;\n color: var(--mj-text-primary);\n}\n\n.crs-header:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.crs-mark {\n color: var(--mj-brand-primary);\n font-size: 13px;\n}\n\n.crs-title {\n font-size: 13px;\n font-weight: 600;\n}\n\n.crs-count {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n border-radius: var(--mj-radius-full, 999px);\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 10px;\n font-weight: 700;\n}\n\n.crs-spacer {\n flex: 1 1 auto;\n}\n\n.crs-add,\n.crs-details {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: var(--mj-radius-md, 6px);\n color: var(--mj-text-muted);\n font-size: 11px;\n}\n\n.crs-add:hover,\n.crs-details:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.crs-details {\n font-size: 10px;\n}\n"] }]
203
219
  }], null, { ShowRoutines: [{
204
220
  type: Input
221
+ }], OpenEntityRecord: [{
222
+ type: Output
205
223
  }], openEntityRecord: [{
206
224
  type: Output
225
+ }], OpenConversation: [{
226
+ type: Output
207
227
  }], openConversation: [{
208
228
  type: Output
209
229
  }] }); })();
@@ -1 +1 @@
1
- {"version":3,"file":"routines-section.component.js","sourceRoot":"","sources":["../../../../src/lib/components/sidebar/routines-section.component.ts","../../../../src/lib/components/sidebar/routines-section.component.html"],"names":[],"mappings":"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","sourcesContent":["import { CompositeKey } from '@memberjunction/core';\nimport { ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { MJUserRoutineEntity, UserRoutineEngine } from '@memberjunction/core-entities';\nimport { ConversationOpenedEventArgs, HistoryRecordOpenedEventArgs } from '@memberjunction/ng-user-routines';\n\n/**\n * Compact \"Routines\" entry pinned at the very bottom of the conversations left\n * sidebar: a single header row — mark, \"Routines\", the ACTIVE routine count, a \"+\"\n * (straight into the New Routine editor) and a details chevron. No routine rows —\n * the full command-center slide-in is one click away and owns all detail.\n *\n * Visibility gates (both must pass):\n * 1. `ShowRoutines` — host opt-out input bubbled from the top-level conversations\n * workspace (default true).\n * 2. The current user must have Read permission on 'MJ: User Routines'\n * (EntityInfo user-permission check) — hidden entirely otherwise.\n */\n@Component({\n standalone: false,\n selector: 'mj-conversation-routines-section',\n templateUrl: './routines-section.component.html',\n styleUrls: ['./routines-section.component.css'],\n})\nexport class RoutinesSectionComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n private cdr = inject(ChangeDetectorRef);\n private destroy$ = new Subject<void>();\n\n private _showRoutines = true;\n /** Host opt-out (bubbled from the top-level conversations component). Default true. */\n @Input()\n public set ShowRoutines(value: boolean) {\n if (value !== this._showRoutines) {\n this._showRoutines = value;\n if (value && !this.initialized) {\n void this.initialize();\n }\n this.cdr.markForCheck();\n }\n }\n public get ShowRoutines(): boolean {\n return this._showRoutines;\n }\n\n /** True when the current user may read routines (permission gate). */\n public CanRead = false;\n /** Number of Active routines — the header badge. */\n public ActiveCount = 0;\n /** Total routines of any status (for the header tooltip). */\n public TotalCount = 0;\n\n /**\n * A run history row's linked execution record (Agent Run / Prompt Run / Action Log)\n * was clicked. Same shape as the chat area's openEntityRecord — the host (Explorer\n * wrapper or workspace) routes it to navigation; this package never navigates itself.\n */\n @Output() openEntityRecord = new EventEmitter<{ entityName: string; compositeKey: CompositeKey }>();\n\n /**\n * The user asked to open a routine's dedicated conversation (the hidden,\n * Application-scoped thread its runs append to). Emits the conversation ID;\n * the host selects it in chat — this component closes the slide-in first.\n */\n @Output() openConversation = new EventEmitter<string>();\n\n /** Slide-in open state. */\n public SlideInVisible = false;\n /** Routine to open the slide-in on (history view). */\n public SlideInRoutineID: string | null = null;\n /** Whether the slide-in opens straight on the New Routine editor. */\n public SlideInNewRoutine = false;\n\n private initialized = false;\n\n /** Section renders only when the opt-out AND permission gates both pass. */\n public get IsVisible(): boolean {\n return this._showRoutines && this.CanRead;\n }\n\n /** Header tooltip: active/total breakdown. */\n public get HeaderTitle(): string {\n if (this.TotalCount === 0) {\n return 'Routines — none yet, click + to create one';\n }\n return `Routines — ${this.ActiveCount} active of ${this.TotalCount}. Click to open.`;\n }\n\n async ngOnInit(): Promise<void> {\n if (this._showRoutines) {\n await this.initialize();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /** Opens the slide-in on the routines list (header / details click). */\n public OpenRoutines(): void {\n this.SlideInRoutineID = null;\n this.SlideInNewRoutine = false;\n this.SlideInVisible = true;\n this.cdr.markForCheck();\n }\n\n /** Opens the slide-in straight on the New Routine editor (\"+\" affordance). */\n public NewRoutine(event: Event): void {\n event.stopPropagation();\n this.SlideInRoutineID = null;\n this.SlideInNewRoutine = true;\n this.SlideInVisible = true;\n this.cdr.markForCheck();\n }\n\n /** Opens the routine's conversation in the host chat surface (closing the slide-in). */\n public OnConversationOpened(args: ConversationOpenedEventArgs): void {\n this.OnSlideInClosed();\n this.openConversation.emit(args.ConversationID);\n }\n\n /** Bridges the slide-in's HistoryRecordOpened to the standard openEntityRecord chain. */\n public OnHistoryRecordOpened(args: HistoryRecordOpenedEventArgs): void {\n this.openEntityRecord.emit({ entityName: args.EntityName, compositeKey: CompositeKey.FromURLSegment(this.ProviderToUse.EntityByName(args.EntityName), args.RecordID) });\n }\n\n public OnSlideInClosed(): void {\n this.SlideInVisible = false;\n this.SlideInRoutineID = null;\n this.SlideInNewRoutine = false;\n this.cdr.markForCheck();\n }\n\n // ---------------------------------------------------------------\n // Internals\n // ---------------------------------------------------------------\n private async initialize(): Promise<void> {\n if (this.initialized) {\n return;\n }\n this.initialized = true;\n const p = this.ProviderToUse;\n\n // Permission gate: hide entirely when the user lacks Read on the entity\n // (or the entity isn't present in this instance's metadata).\n const entityInfo = p.EntityByName('MJ: User Routines');\n const permissions = entityInfo && p.CurrentUser ? entityInfo.GetUserPermisions(p.CurrentUser) : null;\n this.CanRead = permissions?.CanRead === true;\n if (!this.CanRead) {\n this.cdr.markForCheck();\n return;\n }\n\n try {\n const engine = UserRoutineEngine.GetProviderInstance<UserRoutineEngine>(p, UserRoutineEngine) as UserRoutineEngine;\n await engine.Config(false, p.CurrentUser, p);\n engine.Routines$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.rebuildCounts(engine);\n });\n this.rebuildCounts(engine);\n } catch (e) {\n console.error('[RoutinesSection] Failed to load routines:', e);\n this.ActiveCount = 0;\n this.TotalCount = 0;\n }\n this.cdr.markForCheck();\n }\n\n private rebuildCounts(engine: UserRoutineEngine): void {\n const routines = engine.Routines;\n this.TotalCount = routines.length;\n this.ActiveCount = routines.filter((r: MJUserRoutineEntity) => r.Status === 'Active').length;\n this.cdr.markForCheck();\n }\n}\n","@if (IsVisible) {\n <div class=\"crs-section\">\n <button type=\"button\" class=\"crs-header\" [title]=\"HeaderTitle\" (click)=\"OpenRoutines()\">\n <i class=\"fa-solid fa-business-time crs-mark\"></i>\n <span class=\"crs-title\">Routines</span>\n @if (ActiveCount > 0) {\n <span class=\"crs-count\">{{ ActiveCount }}</span>\n }\n <span class=\"crs-spacer\"></span>\n <span class=\"crs-add\" role=\"button\" title=\"New routine\" (click)=\"NewRoutine($event)\">\n <i class=\"fa-solid fa-plus\"></i>\n </span>\n <span class=\"crs-details\" role=\"button\" title=\"Open routines\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </span>\n </button>\n\n <mj-user-routines-slide-in\n [Provider]=\"Provider\"\n [(Visible)]=\"SlideInVisible\"\n [InitialRoutineID]=\"SlideInRoutineID\"\n [StartInNewRoutine]=\"SlideInNewRoutine\"\n (Closed)=\"OnSlideInClosed()\"\n (HistoryRecordOpened)=\"OnHistoryRecordOpened($event)\"\n (ConversationOpened)=\"OnConversationOpened($event)\">\n </mj-user-routines-slide-in>\n </div>\n}\n"]}
1
+ {"version":3,"file":"routines-section.component.js","sourceRoot":"","sources":["../../../../src/lib/components/sidebar/routines-section.component.ts","../../../../src/lib/components/sidebar/routines-section.component.html"],"names":[],"mappings":"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","sourcesContent":["import { CompositeKey } from '@memberjunction/core';\nimport { ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { MJUserRoutineEntity, UserRoutineEngine } from '@memberjunction/core-entities';\nimport { ConversationOpenedEventArgs, HistoryRecordOpenedEventArgs } from '@memberjunction/ng-user-routines';\n\n/**\n * Compact \"Routines\" entry pinned at the very bottom of the conversations left\n * sidebar: a single header row — mark, \"Routines\", the ACTIVE routine count, a \"+\"\n * (straight into the New Routine editor) and a details chevron. No routine rows —\n * the full command-center slide-in is one click away and owns all detail.\n *\n * Visibility gates (both must pass):\n * 1. `ShowRoutines` — host opt-out input bubbled from the top-level conversations\n * workspace (default true).\n * 2. The current user must have Read permission on 'MJ: User Routines'\n * (EntityInfo user-permission check) — hidden entirely otherwise.\n */\n@Component({\n standalone: false,\n selector: 'mj-conversation-routines-section',\n templateUrl: './routines-section.component.html',\n styleUrls: ['./routines-section.component.css'],\n})\nexport class RoutinesSectionComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n private cdr = inject(ChangeDetectorRef);\n private destroy$ = new Subject<void>();\n\n private _showRoutines = true;\n /** Host opt-out (bubbled from the top-level conversations component). Default true. */\n @Input()\n public set ShowRoutines(value: boolean) {\n if (value !== this._showRoutines) {\n this._showRoutines = value;\n if (value && !this.initialized) {\n void this.initialize();\n }\n this.cdr.markForCheck();\n }\n }\n public get ShowRoutines(): boolean {\n return this._showRoutines;\n }\n\n /** True when the current user may read routines (permission gate). */\n public CanRead = false;\n /** Number of Active routines — the header badge. */\n public ActiveCount = 0;\n /** Total routines of any status (for the header tooltip). */\n public TotalCount = 0;\n\n /**\n * A run history row's linked execution record (Agent Run / Prompt Run / Action Log)\n * was clicked. Same shape as the chat area's openEntityRecord — the host (Explorer\n * wrapper or workspace) routes it to navigation; this package never navigates itself.\n */\n @Output() OpenEntityRecord = new EventEmitter<{ entityName: string; compositeKey: CompositeKey }>();\n\n /**\n * @deprecated Use {@link OpenEntityRecord}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (openEntityRecord) keeps working. Must stay AFTER OpenEntityRecord: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() openEntityRecord = this.OpenEntityRecord;\n\n /**\n * The user asked to open a routine's dedicated conversation (the hidden,\n * Application-scoped thread its runs append to). Emits the conversation ID;\n * the host selects it in chat — this component closes the slide-in first.\n */\n @Output() OpenConversation = new EventEmitter<string>();\n\n /**\n * @deprecated Use {@link OpenConversation}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (openConversation) keeps working. Must stay AFTER OpenConversation: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() openConversation = this.OpenConversation;\n\n /** Slide-in open state. */\n public SlideInVisible = false;\n /** Routine to open the slide-in on (history view). */\n public SlideInRoutineID: string | null = null;\n /** Whether the slide-in opens straight on the New Routine editor. */\n public SlideInNewRoutine = false;\n\n private initialized = false;\n\n /** Section renders only when the opt-out AND permission gates both pass. */\n public get IsVisible(): boolean {\n return this._showRoutines && this.CanRead;\n }\n\n /** Header tooltip: active/total breakdown. */\n public get HeaderTitle(): string {\n if (this.TotalCount === 0) {\n return 'Routines — none yet, click + to create one';\n }\n return `Routines — ${this.ActiveCount} active of ${this.TotalCount}. Click to open.`;\n }\n\n async ngOnInit(): Promise<void> {\n if (this._showRoutines) {\n await this.initialize();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /** Opens the slide-in on the routines list (header / details click). */\n public OpenRoutines(): void {\n this.SlideInRoutineID = null;\n this.SlideInNewRoutine = false;\n this.SlideInVisible = true;\n this.cdr.markForCheck();\n }\n\n /** Opens the slide-in straight on the New Routine editor (\"+\" affordance). */\n public NewRoutine(event: Event): void {\n event.stopPropagation();\n this.SlideInRoutineID = null;\n this.SlideInNewRoutine = true;\n this.SlideInVisible = true;\n this.cdr.markForCheck();\n }\n\n /** Opens the routine's conversation in the host chat surface (closing the slide-in). */\n public OnConversationOpened(args: ConversationOpenedEventArgs): void {\n this.OnSlideInClosed();\n this.OpenConversation.emit(args.ConversationID);\n }\n\n /** Bridges the slide-in's HistoryRecordOpened to the standard openEntityRecord chain. */\n public OnHistoryRecordOpened(args: HistoryRecordOpenedEventArgs): void {\n this.OpenEntityRecord.emit({ entityName: args.EntityName, compositeKey: CompositeKey.FromURLSegment(this.ProviderToUse.EntityByName(args.EntityName), args.RecordID) });\n }\n\n public OnSlideInClosed(): void {\n this.SlideInVisible = false;\n this.SlideInRoutineID = null;\n this.SlideInNewRoutine = false;\n this.cdr.markForCheck();\n }\n\n // ---------------------------------------------------------------\n // Internals\n // ---------------------------------------------------------------\n private async initialize(): Promise<void> {\n if (this.initialized) {\n return;\n }\n this.initialized = true;\n const p = this.ProviderToUse;\n\n // Permission gate: hide entirely when the user lacks Read on the entity\n // (or the entity isn't present in this instance's metadata).\n const entityInfo = p.EntityByName('MJ: User Routines');\n const permissions = entityInfo && p.CurrentUser ? entityInfo.GetUserPermisions(p.CurrentUser) : null;\n this.CanRead = permissions?.CanRead === true;\n if (!this.CanRead) {\n this.cdr.markForCheck();\n return;\n }\n\n try {\n const engine = UserRoutineEngine.GetProviderInstance<UserRoutineEngine>(p, UserRoutineEngine) as UserRoutineEngine;\n await engine.Config(false, p.CurrentUser, p);\n engine.Routines$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.rebuildCounts(engine);\n });\n this.rebuildCounts(engine);\n } catch (e) {\n console.error('[RoutinesSection] Failed to load routines:', e);\n this.ActiveCount = 0;\n this.TotalCount = 0;\n }\n this.cdr.markForCheck();\n }\n\n private rebuildCounts(engine: UserRoutineEngine): void {\n const routines = engine.Routines;\n this.TotalCount = routines.length;\n this.ActiveCount = routines.filter((r: MJUserRoutineEntity) => r.Status === 'Active').length;\n this.cdr.markForCheck();\n }\n}\n","@if (IsVisible) {\n <div class=\"crs-section\">\n <button type=\"button\" class=\"crs-header\" [title]=\"HeaderTitle\" (click)=\"OpenRoutines()\">\n <i class=\"fa-solid fa-business-time crs-mark\"></i>\n <span class=\"crs-title\">Routines</span>\n @if (ActiveCount > 0) {\n <span class=\"crs-count\">{{ ActiveCount }}</span>\n }\n <span class=\"crs-spacer\"></span>\n <span class=\"crs-add\" role=\"button\" title=\"New routine\" (click)=\"NewRoutine($event)\">\n <i class=\"fa-solid fa-plus\"></i>\n </span>\n <span class=\"crs-details\" role=\"button\" title=\"Open routines\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </span>\n </button>\n\n <mj-user-routines-slide-in\n [Provider]=\"Provider\"\n [(Visible)]=\"SlideInVisible\"\n [InitialRoutineID]=\"SlideInRoutineID\"\n [StartInNewRoutine]=\"SlideInNewRoutine\"\n (Closed)=\"OnSlideInClosed()\"\n (HistoryRecordOpened)=\"OnHistoryRecordOpened($event)\"\n (ConversationOpened)=\"OnConversationOpened($event)\">\n </mj-user-routines-slide-in>\n </div>\n}\n"]}
@@ -73,6 +73,25 @@ export interface IMJChatHeaderActionsContext {
73
73
  /** True while an agent turn is in flight — disable actions that mutate the conversation. */
74
74
  isProcessing: boolean;
75
75
  }
76
+ /**
77
+ * Template CONTEXT for the `composerExtra` slot — host UI rendered directly ABOVE the
78
+ * composer, wherever the chat area shows one: the conversation's composer, the
79
+ * new-conversation composer, and the built-in empty state's composer.
80
+ *
81
+ * Like `headerActions` this is a template-context shape, not a component contract: project
82
+ * an ad-hoc `<ng-template mjChatSlot="composerExtra" let-conversation let-busy="IsProcessing">`.
83
+ * Nothing renders in that spot when no template is projected, so the default layout is
84
+ * unchanged. Its keys are PascalCase, per MJ's naming rules for new public members; the older
85
+ * `headerActions` context keeps its camelCase keys.
86
+ */
87
+ export interface IMJChatComposerExtraContext {
88
+ /** The active conversation (null before one exists). */
89
+ $implicit: MJConversationEntity | null;
90
+ /** The active conversation's ID (null before one exists). */
91
+ ConversationId: string | null;
92
+ /** True while an agent turn is in flight. */
93
+ IsProcessing: boolean;
94
+ }
76
95
  /**
77
96
  * Contract for the `messageExtra` slot — per-message inline decoration rendered
78
97
  * within the message bubble, after the content.
@@ -1 +1 @@
1
- {"version":3,"file":"slot-interfaces.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/slots/slot-interfaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAEtG,mEAAmE;AACnE,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC;AAEtF,mFAAmF;AACnF,MAAM,WAAW,0BAA0B;IACvC,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,kEAAkE;IAClE,cAAc,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,6BAA6B;IAC1C,KAAK,EAAE,wBAAwB,CAAC;IAChC,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;CACjC;AAED,uEAAuE;AACvE,MAAM,WAAW,sBAAsB;IACnC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,2BAA2B;IACxC,wDAAwD;IACxD,SAAS,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACvC,6DAA6D;IAC7D,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,4FAA4F;IAC5F,YAAY,EAAE,OAAO,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IACzC,OAAO,EAAE,0BAA0B,CAAC;CACvC;AAED;;;;GAIG;AACH,MAAM,WAAW,oCAAoC;IACjD,4DAA4D;IAC5D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,+BAA+B;IAC5C,6CAA6C;IAC7C,OAAO,EAAE,OAAO,+BAA+B,EAAE,0BAA0B,GAAG,IAAI,CAAC;CACtF"}
1
+ {"version":3,"file":"slot-interfaces.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/slots/slot-interfaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAEtG,mEAAmE;AACnE,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC;AAEtF,mFAAmF;AACnF,MAAM,WAAW,0BAA0B;IACvC,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,kEAAkE;IAClE,cAAc,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,6BAA6B;IAC1C,KAAK,EAAE,wBAAwB,CAAC;IAChC,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;CACjC;AAED,uEAAuE;AACvE,MAAM,WAAW,sBAAsB;IACnC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,2BAA2B;IACxC,wDAAwD;IACxD,SAAS,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACvC,6DAA6D;IAC7D,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,4FAA4F;IAC5F,YAAY,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,2BAA2B;IACxC,wDAAwD;IACxD,SAAS,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACvC,6DAA6D;IAC7D,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,6CAA6C;IAC7C,YAAY,EAAE,OAAO,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IACzC,OAAO,EAAE,0BAA0B,CAAC;CACvC;AAED;;;;GAIG;AACH,MAAM,WAAW,oCAAoC;IACjD,4DAA4D;IAC5D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,+BAA+B;IAC5C,6CAA6C;IAC7C,OAAO,EAAE,OAAO,+BAA+B,EAAE,0BAA0B,GAAG,IAAI,CAAC;CACtF"}
@@ -1 +1 @@
1
- {"version":3,"file":"slot-interfaces.js","sourceRoot":"","sources":["../../../../src/lib/components/slots/slot-interfaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG","sourcesContent":["/**\n * @fileoverview Interface contracts for the chat-area's slot system.\n *\n * Each slot has a typed interface so the widget can speak with confidence to\n * whatever component (default or consumer-supplied) is rendered into it. Each\n * interface is paired with an exported standalone default component (in\n * `*-default.component.ts` siblings) that consumers can:\n *\n * 1. **Project an ad-hoc template into**, via the `mjChatSlot` directive.\n * 2. **Wrap with a containment pattern** — render the default inside their own\n * component to add framing without losing the default behavior.\n * 3. **Subclass** — extend the default standalone component, override only what\n * they need, declare the subclass as the slot's component.\n *\n * @module @memberjunction/ng-conversations\n */\n\nimport type { EventEmitter } from '@angular/core';\nimport type { MJConversationDetailEntity, MJConversationEntity } from '@memberjunction/core-entities';\n\n/** State surfaced to the agent-presence slot for visualization. */\nexport type MJChatAgentPresenceState = 'idle' | 'listening' | 'thinking' | 'speaking';\n\n/** Contract for the `emptyState` slot — what renders before any messages exist. */\nexport interface IMJChatEmptyStateComponent {\n /** Top-line welcome text. */\n Greeting: string;\n /** Optional secondary line beneath the greeting. */\n Subtext?: string;\n /** Optional suggested prompts to render as clickable chips. */\n SuggestedPrompts?: string[];\n /** Emitted when the user selects one of the suggested prompts. */\n PromptSelected: EventEmitter<string>;\n}\n\n/**\n * Contract for the `agentPresence` slot — character / avatar / voice-state\n * visualization, rendered alongside the chat composer.\n */\nexport interface IMJChatAgentPresenceComponent {\n State: MJChatAgentPresenceState;\n /** Display name of the agent, e.g., \"Sage\" or \"Sid\". */\n AgentName?: string;\n /** Optional avatar image URL. */\n AvatarUrl?: string;\n /** Visual intensity — subtle for production chat, prominent for tutor surfaces. */\n Mode?: 'subtle' | 'prominent';\n}\n\n/** Contract for the `header` slot — top bar above the message list. */\nexport interface IMJChatHeaderComponent {\n ConversationTitle?: string | null;\n SharedBy?: string | null;\n /** Number of artifacts on the conversation (for an inline badge). */\n ArtifactCount?: number;\n /** Pass-through whether the artifact-count chip should render at all. */\n ShowArtifactIndicator?: boolean;\n}\n\n/**\n * Template CONTEXT for the `headerActions` slot — extra host buttons rendered\n * INSIDE the default header's action strip, as the last children after the\n * stock buttons (pin / artifacts / members / pickers / export / share).\n *\n * Unlike the other slot contracts this is a template-context shape, not a\n * component contract: the slot is purely additive chrome, so consumers project\n * an ad-hoc `<ng-template mjChatSlot=\"headerActions\" let-conversation>` rather\n * than implementing a component. For visual parity, projected buttons should\n * use `mjButton variant=\"flat\" size=\"sm\"` like the stock actions.\n *\n * NOT rendered when a full `header` slot is projected — that slot replaces the\n * entire header, actions included.\n */\nexport interface IMJChatHeaderActionsContext {\n /** The active conversation (null before one exists). */\n $implicit: MJConversationEntity | null;\n /** The active conversation's ID (null before one exists). */\n conversationId: string | null;\n /** True while an agent turn is in flight — disable actions that mutate the conversation. */\n isProcessing: boolean;\n}\n\n/**\n * Contract for the `messageExtra` slot — per-message inline decoration rendered\n * within the message bubble, after the content.\n */\nexport interface IMJChatMessageExtraComponent {\n Message: MJConversationDetailEntity;\n}\n\n/**\n * Contract for the `demonstrationSurface` slot — full-width adjacent surface\n * for content the agent is \"walking through\" (e.g., annotated lesson material,\n * step-by-step screenshots). Off unless a slot is supplied.\n */\nexport interface IMJChatDemonstrationSurfaceComponent {\n /** Optional content payload — shape is consumer-defined. */\n Content?: unknown;\n /** Whether the surface should be visible. */\n Visible?: boolean;\n}\n\n/**\n * Contract for the `messageRenderer` slot — per-item template applied to every\n * message in the list. Unlike the other slots (which replace a fixed positional\n * zone), `messageRenderer` is invoked once per message via `*ngTemplateOutlet`\n * with the message as the implicit context (`let-message`).\n *\n * Lets consumers swap the entire feed-vs-bubble-vs-anything-else rendering\n * decision without forking. Two default components ship:\n *\n * • `MJChatMessageFeedDefaultComponent` — the existing avatar+name+timestamp\n * feed layout (current behavior; default when no slot is supplied).\n * • `MJChatMessageBubbleDefaultComponent` — bubble layout where identity\n * comes from side + shape (user on right, agent on left), using the\n * `--mj-chat-bubble-*` tokens for color.\n *\n * Implementing components keep the contract minimal — just receive the message\n * entity and render however they want. Subclasses extend a default to inherit\n * its shell and override specific behavior.\n */\nexport interface IMJChatMessageRendererComponent {\n /** The conversation detail row to render. */\n Message: import('@memberjunction/core-entities').MJConversationDetailEntity | null;\n}\n"]}
1
+ {"version":3,"file":"slot-interfaces.js","sourceRoot":"","sources":["../../../../src/lib/components/slots/slot-interfaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG","sourcesContent":["/**\n * @fileoverview Interface contracts for the chat-area's slot system.\n *\n * Each slot has a typed interface so the widget can speak with confidence to\n * whatever component (default or consumer-supplied) is rendered into it. Each\n * interface is paired with an exported standalone default component (in\n * `*-default.component.ts` siblings) that consumers can:\n *\n * 1. **Project an ad-hoc template into**, via the `mjChatSlot` directive.\n * 2. **Wrap with a containment pattern** — render the default inside their own\n * component to add framing without losing the default behavior.\n * 3. **Subclass** — extend the default standalone component, override only what\n * they need, declare the subclass as the slot's component.\n *\n * @module @memberjunction/ng-conversations\n */\n\nimport type { EventEmitter } from '@angular/core';\nimport type { MJConversationDetailEntity, MJConversationEntity } from '@memberjunction/core-entities';\n\n/** State surfaced to the agent-presence slot for visualization. */\nexport type MJChatAgentPresenceState = 'idle' | 'listening' | 'thinking' | 'speaking';\n\n/** Contract for the `emptyState` slot — what renders before any messages exist. */\nexport interface IMJChatEmptyStateComponent {\n /** Top-line welcome text. */\n Greeting: string;\n /** Optional secondary line beneath the greeting. */\n Subtext?: string;\n /** Optional suggested prompts to render as clickable chips. */\n SuggestedPrompts?: string[];\n /** Emitted when the user selects one of the suggested prompts. */\n PromptSelected: EventEmitter<string>;\n}\n\n/**\n * Contract for the `agentPresence` slot — character / avatar / voice-state\n * visualization, rendered alongside the chat composer.\n */\nexport interface IMJChatAgentPresenceComponent {\n State: MJChatAgentPresenceState;\n /** Display name of the agent, e.g., \"Sage\" or \"Sid\". */\n AgentName?: string;\n /** Optional avatar image URL. */\n AvatarUrl?: string;\n /** Visual intensity — subtle for production chat, prominent for tutor surfaces. */\n Mode?: 'subtle' | 'prominent';\n}\n\n/** Contract for the `header` slot — top bar above the message list. */\nexport interface IMJChatHeaderComponent {\n ConversationTitle?: string | null;\n SharedBy?: string | null;\n /** Number of artifacts on the conversation (for an inline badge). */\n ArtifactCount?: number;\n /** Pass-through whether the artifact-count chip should render at all. */\n ShowArtifactIndicator?: boolean;\n}\n\n/**\n * Template CONTEXT for the `headerActions` slot — extra host buttons rendered\n * INSIDE the default header's action strip, as the last children after the\n * stock buttons (pin / artifacts / members / pickers / export / share).\n *\n * Unlike the other slot contracts this is a template-context shape, not a\n * component contract: the slot is purely additive chrome, so consumers project\n * an ad-hoc `<ng-template mjChatSlot=\"headerActions\" let-conversation>` rather\n * than implementing a component. For visual parity, projected buttons should\n * use `mjButton variant=\"flat\" size=\"sm\"` like the stock actions.\n *\n * NOT rendered when a full `header` slot is projected — that slot replaces the\n * entire header, actions included.\n */\nexport interface IMJChatHeaderActionsContext {\n /** The active conversation (null before one exists). */\n $implicit: MJConversationEntity | null;\n /** The active conversation's ID (null before one exists). */\n conversationId: string | null;\n /** True while an agent turn is in flight — disable actions that mutate the conversation. */\n isProcessing: boolean;\n}\n\n/**\n * Template CONTEXT for the `composerExtra` slot — host UI rendered directly ABOVE the\n * composer, wherever the chat area shows one: the conversation's composer, the\n * new-conversation composer, and the built-in empty state's composer.\n *\n * Like `headerActions` this is a template-context shape, not a component contract: project\n * an ad-hoc `<ng-template mjChatSlot=\"composerExtra\" let-conversation let-busy=\"IsProcessing\">`.\n * Nothing renders in that spot when no template is projected, so the default layout is\n * unchanged. Its keys are PascalCase, per MJ's naming rules for new public members; the older\n * `headerActions` context keeps its camelCase keys.\n */\nexport interface IMJChatComposerExtraContext {\n /** The active conversation (null before one exists). */\n $implicit: MJConversationEntity | null;\n /** The active conversation's ID (null before one exists). */\n ConversationId: string | null;\n /** True while an agent turn is in flight. */\n IsProcessing: boolean;\n}\n\n/**\n * Contract for the `messageExtra` slot — per-message inline decoration rendered\n * within the message bubble, after the content.\n */\nexport interface IMJChatMessageExtraComponent {\n Message: MJConversationDetailEntity;\n}\n\n/**\n * Contract for the `demonstrationSurface` slot — full-width adjacent surface\n * for content the agent is \"walking through\" (e.g., annotated lesson material,\n * step-by-step screenshots). Off unless a slot is supplied.\n */\nexport interface IMJChatDemonstrationSurfaceComponent {\n /** Optional content payload — shape is consumer-defined. */\n Content?: unknown;\n /** Whether the surface should be visible. */\n Visible?: boolean;\n}\n\n/**\n * Contract for the `messageRenderer` slot — per-item template applied to every\n * message in the list. Unlike the other slots (which replace a fixed positional\n * zone), `messageRenderer` is invoked once per message via `*ngTemplateOutlet`\n * with the message as the implicit context (`let-message`).\n *\n * Lets consumers swap the entire feed-vs-bubble-vs-anything-else rendering\n * decision without forking. Two default components ship:\n *\n * • `MJChatMessageFeedDefaultComponent` — the existing avatar+name+timestamp\n * feed layout (current behavior; default when no slot is supplied).\n * • `MJChatMessageBubbleDefaultComponent` — bubble layout where identity\n * comes from side + shape (user on right, agent on left), using the\n * `--mj-chat-bubble-*` tokens for color.\n *\n * Implementing components keep the contract minimal — just receive the message\n * entity and render however they want. Subclasses extend a default to inherit\n * its shell and override specific behavior.\n */\nexport interface IMJChatMessageRendererComponent {\n /** The conversation detail row to render. */\n Message: import('@memberjunction/core-entities').MJConversationDetailEntity | null;\n}\n"]}