@memberjunction/ng-conversations 6.2.0-edge.0 → 6.2.0-edge.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. package/README.md +43 -2
  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 +1191 -124
  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 +2816 -785
  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 +42 -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 +93 -21
  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 +49 -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 +140 -26
  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 +613 -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 +1390 -422
  113. package/dist/lib/components/message/message-input.component.js.map +1 -1
  114. package/dist/lib/components/message/message-item.component.d.ts +490 -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 +1088 -244
  117. package/dist/lib/components/message/message-item.component.js.map +1 -1
  118. package/dist/lib/components/message/message-list.component.d.ts +297 -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 +598 -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/realtime-activity-rail.component.d.ts +1 -1
  146. package/dist/lib/components/realtime/realtime-activity-rail.component.js +2 -2
  147. package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -1
  148. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +1 -1
  149. package/dist/lib/components/realtime/realtime-delegation-card.component.js +2 -2
  150. package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -1
  151. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +2 -2
  152. package/dist/lib/components/realtime/realtime-session-overlay.component.js +18 -18
  153. package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -1
  154. package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts +47 -23
  155. package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts.map +1 -1
  156. package/dist/lib/components/realtime/realtime-session-timeline-card.component.js +136 -92
  157. package/dist/lib/components/realtime/realtime-session-timeline-card.component.js.map +1 -1
  158. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +2 -2
  159. package/dist/lib/components/realtime/realtime-surface-tabs.component.js +4 -4
  160. package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -1
  161. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +1 -1
  162. package/dist/lib/components/realtime/realtime-surface-tabs.model.js +3 -3
  163. package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -1
  164. package/dist/lib/components/realtime/realtime-ui-config.d.ts +13 -11
  165. package/dist/lib/components/realtime/realtime-ui-config.d.ts.map +1 -1
  166. package/dist/lib/components/realtime/realtime-ui-config.js +29 -25
  167. package/dist/lib/components/realtime/realtime-ui-config.js.map +1 -1
  168. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts +3 -1
  169. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts.map +1 -1
  170. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js +6 -2
  171. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js.map +1 -1
  172. package/dist/lib/components/search/search-panel.component.d.ts +133 -22
  173. package/dist/lib/components/search/search-panel.component.d.ts.map +1 -1
  174. package/dist/lib/components/search/search-panel.component.js +312 -83
  175. package/dist/lib/components/search/search-panel.component.js.map +1 -1
  176. package/dist/lib/components/share/share-modal.component.d.ts +69 -9
  177. package/dist/lib/components/share/share-modal.component.d.ts.map +1 -1
  178. package/dist/lib/components/share/share-modal.component.js +139 -31
  179. package/dist/lib/components/share/share-modal.component.js.map +1 -1
  180. package/dist/lib/components/shared/user-picker.component.d.ts +48 -8
  181. package/dist/lib/components/shared/user-picker.component.d.ts.map +1 -1
  182. package/dist/lib/components/shared/user-picker.component.js +110 -30
  183. package/dist/lib/components/shared/user-picker.component.js.map +1 -1
  184. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts +114 -11
  185. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts.map +1 -1
  186. package/dist/lib/components/sidebar/conversation-sidebar.component.js +199 -21
  187. package/dist/lib/components/sidebar/conversation-sidebar.component.js.map +1 -1
  188. package/dist/lib/components/sidebar/routines-section.component.d.ts +20 -1
  189. package/dist/lib/components/sidebar/routines-section.component.d.ts.map +1 -1
  190. package/dist/lib/components/sidebar/routines-section.component.js +25 -5
  191. package/dist/lib/components/sidebar/routines-section.component.js.map +1 -1
  192. package/dist/lib/components/slots/slot-interfaces.d.ts +19 -0
  193. package/dist/lib/components/slots/slot-interfaces.d.ts.map +1 -1
  194. package/dist/lib/components/slots/slot-interfaces.js.map +1 -1
  195. package/dist/lib/components/task/tasks-full-view.component.d.ts +95 -13
  196. package/dist/lib/components/task/tasks-full-view.component.d.ts.map +1 -1
  197. package/dist/lib/components/task/tasks-full-view.component.js +223 -75
  198. package/dist/lib/components/task/tasks-full-view.component.js.map +1 -1
  199. package/dist/lib/components/tasks/task-widget.component.d.ts +46 -6
  200. package/dist/lib/components/tasks/task-widget.component.d.ts.map +1 -1
  201. package/dist/lib/components/tasks/task-widget.component.js +100 -16
  202. package/dist/lib/components/tasks/task-widget.component.js.map +1 -1
  203. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts +64 -7
  204. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -1
  205. package/dist/lib/components/tasks/tasks-dropdown.component.js +127 -27
  206. package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -1
  207. package/dist/lib/components/thread/thread-panel.component.d.ts +66 -8
  208. package/dist/lib/components/thread/thread-panel.component.d.ts.map +1 -1
  209. package/dist/lib/components/thread/thread-panel.component.js +146 -36
  210. package/dist/lib/components/thread/thread-panel.component.js.map +1 -1
  211. package/dist/lib/components/toast/toast.component.d.ts +11 -1
  212. package/dist/lib/components/toast/toast.component.d.ts.map +1 -1
  213. package/dist/lib/components/toast/toast.component.js +25 -5
  214. package/dist/lib/components/toast/toast.component.js.map +1 -1
  215. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +385 -42
  216. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  217. package/dist/lib/components/workspace/conversation-workspace.component.js +891 -292
  218. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  219. package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts +8 -0
  220. package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts.map +1 -1
  221. package/dist/lib/composer-plugins/base-conversation-mention.provider.js +8 -1
  222. package/dist/lib/composer-plugins/base-conversation-mention.provider.js.map +1 -1
  223. package/dist/lib/directives/chat-slot.directive.d.ts +5 -1
  224. package/dist/lib/directives/chat-slot.directive.d.ts.map +1 -1
  225. package/dist/lib/directives/chat-slot.directive.js.map +1 -1
  226. package/dist/lib/directives/search-shortcut.directive.d.ts +9 -1
  227. package/dist/lib/directives/search-shortcut.directive.d.ts.map +1 -1
  228. package/dist/lib/directives/search-shortcut.directive.js +14 -4
  229. package/dist/lib/directives/search-shortcut.directive.js.map +1 -1
  230. package/dist/lib/events/chat-events.d.ts +34 -7
  231. package/dist/lib/events/chat-events.d.ts.map +1 -1
  232. package/dist/lib/events/chat-events.js +37 -7
  233. package/dist/lib/events/chat-events.js.map +1 -1
  234. package/dist/lib/models/agent-turn.model.d.ts +113 -0
  235. package/dist/lib/models/agent-turn.model.d.ts.map +1 -0
  236. package/dist/lib/models/agent-turn.model.js +12 -0
  237. package/dist/lib/models/agent-turn.model.js.map +1 -0
  238. package/dist/lib/models/collection-view.model.js.map +1 -1
  239. package/dist/lib/models/conversation-state.model.d.ts +8 -0
  240. package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
  241. package/dist/lib/models/conversation-state.model.js.map +1 -1
  242. package/dist/lib/models/lazy-artifact-info.d.ts +44 -12
  243. package/dist/lib/models/lazy-artifact-info.d.ts.map +1 -1
  244. package/dist/lib/models/lazy-artifact-info.js +98 -34
  245. package/dist/lib/models/lazy-artifact-info.js.map +1 -1
  246. package/dist/lib/services/active-tasks.service.d.ts +30 -4
  247. package/dist/lib/services/active-tasks.service.d.ts.map +1 -1
  248. package/dist/lib/services/active-tasks.service.js +71 -19
  249. package/dist/lib/services/active-tasks.service.js.map +1 -1
  250. package/dist/lib/services/agent-state.service.d.ts +17 -1
  251. package/dist/lib/services/agent-state.service.d.ts.map +1 -1
  252. package/dist/lib/services/agent-state.service.js +48 -16
  253. package/dist/lib/services/agent-state.service.js.map +1 -1
  254. package/dist/lib/services/artifact-permission.service.d.ts +39 -0
  255. package/dist/lib/services/artifact-permission.service.d.ts.map +1 -1
  256. package/dist/lib/services/artifact-permission.service.js +152 -17
  257. package/dist/lib/services/artifact-permission.service.js.map +1 -1
  258. package/dist/lib/services/artifact-state.service.d.ts +58 -5
  259. package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
  260. package/dist/lib/services/artifact-state.service.js +135 -35
  261. package/dist/lib/services/artifact-state.service.js.map +1 -1
  262. package/dist/lib/services/collection-permission.service.d.ts +28 -0
  263. package/dist/lib/services/collection-permission.service.d.ts.map +1 -1
  264. package/dist/lib/services/collection-permission.service.js +88 -32
  265. package/dist/lib/services/collection-permission.service.js.map +1 -1
  266. package/dist/lib/services/collection-state.service.d.ts +11 -1
  267. package/dist/lib/services/collection-state.service.d.ts.map +1 -1
  268. package/dist/lib/services/collection-state.service.js +25 -5
  269. package/dist/lib/services/collection-state.service.js.map +1 -1
  270. package/dist/lib/services/conversation-agent.service.d.ts +47 -4
  271. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  272. package/dist/lib/services/conversation-agent.service.js +85 -20
  273. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  274. package/dist/lib/services/conversation-attachment.service.d.ts +17 -0
  275. package/dist/lib/services/conversation-attachment.service.d.ts.map +1 -1
  276. package/dist/lib/services/conversation-attachment.service.js +38 -10
  277. package/dist/lib/services/conversation-attachment.service.js.map +1 -1
  278. package/dist/lib/services/conversation-liveness-dom.service.d.ts +42 -0
  279. package/dist/lib/services/conversation-liveness-dom.service.d.ts.map +1 -0
  280. package/dist/lib/services/conversation-liveness-dom.service.js +74 -0
  281. package/dist/lib/services/conversation-liveness-dom.service.js.map +1 -0
  282. package/dist/lib/services/conversation-streaming.service.d.ts +22 -0
  283. package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -1
  284. package/dist/lib/services/conversation-streaming.service.js +50 -10
  285. package/dist/lib/services/conversation-streaming.service.js.map +1 -1
  286. package/dist/lib/services/data-cache.service.d.ts +31 -0
  287. package/dist/lib/services/data-cache.service.d.ts.map +1 -1
  288. package/dist/lib/services/data-cache.service.js +71 -15
  289. package/dist/lib/services/data-cache.service.js.map +1 -1
  290. package/dist/lib/services/dialog.service.d.ts +13 -0
  291. package/dist/lib/services/dialog.service.d.ts.map +1 -1
  292. package/dist/lib/services/dialog.service.js +25 -5
  293. package/dist/lib/services/dialog.service.js.map +1 -1
  294. package/dist/lib/services/export.service.d.ts +2 -0
  295. package/dist/lib/services/export.service.d.ts.map +1 -1
  296. package/dist/lib/services/export.service.js +5 -1
  297. package/dist/lib/services/export.service.js.map +1 -1
  298. package/dist/lib/services/mention-parser.service.d.ts +10 -0
  299. package/dist/lib/services/mention-parser.service.d.ts.map +1 -1
  300. package/dist/lib/services/mention-parser.service.js +25 -5
  301. package/dist/lib/services/mention-parser.service.js.map +1 -1
  302. package/dist/lib/services/notification.service.d.ts +54 -6
  303. package/dist/lib/services/notification.service.d.ts.map +1 -1
  304. package/dist/lib/services/notification.service.js +123 -27
  305. package/dist/lib/services/notification.service.js.map +1 -1
  306. package/dist/lib/services/realtime-audio-recorder.d.ts +4 -4
  307. package/dist/lib/services/realtime-audio-recorder.js +12 -12
  308. package/dist/lib/services/realtime-audio-recorder.js.map +1 -1
  309. package/dist/lib/services/realtime-pcm-wav.d.ts +4 -0
  310. package/dist/lib/services/realtime-pcm-wav.d.ts.map +1 -1
  311. package/dist/lib/services/realtime-pcm-wav.js +10 -2
  312. package/dist/lib/services/realtime-pcm-wav.js.map +1 -1
  313. package/dist/lib/services/search.service.d.ts +42 -9
  314. package/dist/lib/services/search.service.d.ts.map +1 -1
  315. package/dist/lib/services/search.service.js +103 -23
  316. package/dist/lib/services/search.service.js.map +1 -1
  317. package/dist/lib/services/toast.service.d.ts +19 -1
  318. package/dist/lib/services/toast.service.d.ts.map +1 -1
  319. package/dist/lib/services/toast.service.js +45 -9
  320. package/dist/lib/services/toast.service.js.map +1 -1
  321. package/dist/lib/services/ui-command-handler.service.d.ts +56 -5
  322. package/dist/lib/services/ui-command-handler.service.d.ts.map +1 -1
  323. package/dist/lib/services/ui-command-handler.service.js +113 -16
  324. package/dist/lib/services/ui-command-handler.service.js.map +1 -1
  325. package/dist/lib/utils/agent-artifact-summary.d.ts +2 -2
  326. package/dist/lib/utils/agent-artifact-summary.js +3 -3
  327. package/dist/lib/utils/agent-artifact-summary.js.map +1 -1
  328. package/dist/lib/utils/agent-turn-routing.d.ts +70 -0
  329. package/dist/lib/utils/agent-turn-routing.d.ts.map +1 -0
  330. package/dist/lib/utils/agent-turn-routing.js +84 -0
  331. package/dist/lib/utils/agent-turn-routing.js.map +1 -0
  332. package/dist/lib/utils/artifact-panel-action.d.ts +15 -4
  333. package/dist/lib/utils/artifact-panel-action.d.ts.map +1 -1
  334. package/dist/lib/utils/artifact-panel-action.js +10 -2
  335. package/dist/lib/utils/artifact-panel-action.js.map +1 -1
  336. package/dist/lib/utils/decision-routing.d.ts +68 -0
  337. package/dist/lib/utils/decision-routing.d.ts.map +1 -0
  338. package/dist/lib/utils/decision-routing.js +101 -0
  339. package/dist/lib/utils/decision-routing.js.map +1 -0
  340. package/dist/lib/utils/distinct-artifacts.d.ts +2 -0
  341. package/dist/lib/utils/distinct-artifacts.d.ts.map +1 -1
  342. package/dist/lib/utils/distinct-artifacts.js +5 -1
  343. package/dist/lib/utils/distinct-artifacts.js.map +1 -1
  344. package/dist/lib/utils/plan-mode-preference.d.ts +2 -2
  345. package/dist/lib/utils/plan-mode-preference.js +6 -6
  346. package/dist/lib/utils/plan-mode-preference.js.map +1 -1
  347. package/dist/public-api.d.ts +5 -0
  348. package/dist/public-api.d.ts.map +1 -1
  349. package/dist/public-api.js +8 -0
  350. package/dist/public-api.js.map +1 -1
  351. package/package.json +32 -32
@@ -1,34 +1,51 @@
1
1
  import { Component, Input, Output, EventEmitter } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  import * as i1 from "@memberjunction/ng-ui-components";
4
- function ActionableCommandsComponent_Conditional_0_For_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
5
- i0.ɵɵelement(0, "i", 6);
4
+ function ActionableCommandsComponent_Conditional_0_For_5_Conditional_3_Template(rf, ctx) { if (rf & 1) {
5
+ i0.ɵɵelement(0, "i", 7);
6
6
  } if (rf & 2) {
7
7
  const command_r2 = i0.ɵɵnextContext().$implicit;
8
8
  i0.ɵɵclassMap(i0.ɵɵinterpolate1("fa ", command_r2.icon));
9
9
  } }
10
+ function ActionableCommandsComponent_Conditional_0_For_5_Conditional_5_Template(rf, ctx) { if (rf & 1) {
11
+ i0.ɵɵelementStart(0, "div", 6);
12
+ i0.ɵɵtext(1);
13
+ i0.ɵɵelementEnd();
14
+ } if (rf & 2) {
15
+ i0.ɵɵnextContext();
16
+ const recipients_r4 = i0.ɵɵreadContextLet(0);
17
+ i0.ɵɵadvance();
18
+ i0.ɵɵtextInterpolate(recipients_r4);
19
+ } }
10
20
  function ActionableCommandsComponent_Conditional_0_For_5_Template(rf, ctx) { if (rf & 1) {
11
21
  const _r1 = i0.ɵɵgetCurrentView();
12
- i0.ɵɵelementStart(0, "button", 4);
13
- i0.ɵɵlistener("click", function ActionableCommandsComponent_Conditional_0_For_5_Template_button_click_0_listener() { const command_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onCommandClick(command_r2)); });
14
- i0.ɵɵconditionalCreate(1, ActionableCommandsComponent_Conditional_0_For_5_Conditional_1_Template, 1, 3, "i", 5);
15
- i0.ɵɵtext(2);
22
+ i0.ɵɵdeclareLet(0);
23
+ i0.ɵɵelementStart(1, "div", 3)(2, "button", 4);
24
+ i0.ɵɵlistener("click", function ActionableCommandsComponent_Conditional_0_For_5_Template_button_click_2_listener() { const command_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onCommandClick(command_r2)); });
25
+ i0.ɵɵconditionalCreate(3, ActionableCommandsComponent_Conditional_0_For_5_Conditional_3_Template, 1, 3, "i", 5);
26
+ i0.ɵɵtext(4);
27
+ i0.ɵɵelementEnd();
28
+ i0.ɵɵconditionalCreate(5, ActionableCommandsComponent_Conditional_0_For_5_Conditional_5_Template, 2, 1, "div", 6);
16
29
  i0.ɵɵelementEnd();
17
30
  } if (rf & 2) {
18
31
  const command_r2 = ctx.$implicit;
19
32
  const ctx_r2 = i0.ɵɵnextContext(2);
33
+ const recipients_r5 = i0.ɵɵstoreLet(ctx_r2.ComposeEmailRecipients(command_r2));
34
+ i0.ɵɵadvance(2);
20
35
  i0.ɵɵproperty("variant", ctx_r2.getButtonVariant(command_r2))("disabled", ctx_r2.disabled);
21
36
  i0.ɵɵadvance();
22
- i0.ɵɵconditional(command_r2.icon ? 1 : -1);
37
+ i0.ɵɵconditional(command_r2.icon ? 3 : -1);
23
38
  i0.ɵɵadvance();
24
39
  i0.ɵɵtextInterpolate1(" ", command_r2.label, " ");
40
+ i0.ɵɵadvance();
41
+ i0.ɵɵconditional(recipients_r5 ? 5 : -1);
25
42
  } }
26
43
  function ActionableCommandsComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
27
44
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
28
45
  i0.ɵɵtext(2, "Actions:");
29
46
  i0.ɵɵelementEnd();
30
47
  i0.ɵɵelementStart(3, "div", 2);
31
- i0.ɵɵrepeaterCreate(4, ActionableCommandsComponent_Conditional_0_For_5_Template, 3, 4, "button", 3, i0.ɵɵcomponentInstance().trackByCommand, true);
48
+ i0.ɵɵrepeaterCreate(4, ActionableCommandsComponent_Conditional_0_For_5_Template, 6, 6, "div", 3, i0.ɵɵcomponentInstance().trackByCommand, true);
32
49
  i0.ɵɵelementEnd()();
33
50
  } if (rf & 2) {
34
51
  const ctx_r2 = i0.ɵɵnextContext();
@@ -40,33 +57,112 @@ function ActionableCommandsComponent_Conditional_0_Template(rf, ctx) { if (rf &
40
57
  * These are actions the user can trigger after an agent completes a task
41
58
  */
42
59
  export class ActionableCommandsComponent {
43
- commands = [];
44
- disabled = false;
45
- isLastMessage = false;
46
- isConversationOwner = false;
47
- commandExecuted = new EventEmitter();
60
+ Commands = [];
61
+ /** @deprecated Use {@link Commands}. */
62
+ set commands(value) {
63
+ this.Commands = value;
64
+ }
65
+ /** @deprecated Use {@link Commands}. */
66
+ get commands() {
67
+ return this.Commands;
68
+ }
69
+ Disabled = false;
70
+ /** @deprecated Use {@link Disabled}. */
71
+ set disabled(value) {
72
+ this.Disabled = value;
73
+ }
74
+ /** @deprecated Use {@link Disabled}. */
75
+ get disabled() {
76
+ return this.Disabled;
77
+ }
78
+ IsLastMessage = false;
79
+ /** @deprecated Use {@link IsLastMessage}. */
80
+ set isLastMessage(value) {
81
+ this.IsLastMessage = value;
82
+ }
83
+ /** @deprecated Use {@link IsLastMessage}. */
84
+ get isLastMessage() {
85
+ return this.IsLastMessage;
86
+ }
87
+ IsConversationOwner = false;
88
+ /** @deprecated Use {@link IsConversationOwner}. */
89
+ set isConversationOwner(value) {
90
+ this.IsConversationOwner = value;
91
+ }
92
+ /** @deprecated Use {@link IsConversationOwner}. */
93
+ get isConversationOwner() {
94
+ return this.IsConversationOwner;
95
+ }
96
+ CommandExecuted = new EventEmitter();
97
+ /**
98
+ * @deprecated Use {@link CommandExecuted}.
99
+ *
100
+ * The same emitter under the old binding name, so a template still binding
101
+ * (commandExecuted) keeps working. Must stay AFTER CommandExecuted: class fields
102
+ * initialise in order, and the other way round this captures undefined.
103
+ */
104
+ commandExecuted = this.CommandExecuted;
48
105
  /**
49
106
  * Check if component should be visible
50
107
  */
108
+ get IsVisible() {
109
+ return (this.IsLastMessage &&
110
+ this.IsConversationOwner &&
111
+ this.Commands &&
112
+ this.Commands.length > 0);
113
+ }
114
+ /** @deprecated Use {@link IsVisible}. */
51
115
  get isVisible() {
52
- return (this.isLastMessage &&
53
- this.isConversationOwner &&
54
- this.commands &&
55
- this.commands.length > 0);
116
+ return this.IsVisible;
56
117
  }
57
118
  /**
58
119
  * Handle command button click
59
120
  */
121
+ OnCommandClick(command) {
122
+ if (!this.Disabled) {
123
+ this.CommandExecuted.emit(command);
124
+ }
125
+ }
126
+ /** @deprecated Use {@link OnCommandClick}. */
60
127
  onCommandClick(command) {
61
- if (!this.disabled) {
62
- this.commandExecuted.emit(command);
128
+ return this.OnCommandClick(command);
129
+ }
130
+ /**
131
+ * Recipients to show BESIDE a compose:email button, or null for any other command.
132
+ *
133
+ * SECURITY, not decoration. The button renders only the agent-authored `label`, so without this
134
+ * the user cannot see who a draft is addressed to until their mail client is already open and
135
+ * populated. An agent influenced by injected content in retrieved material could pair a benign
136
+ * label ("Open draft in Mail") with an attacker's address and the conversation's context as the
137
+ * body; showing the address is what lets the user notice before they send from their real
138
+ * mailbox. Empty recipients read as "no recipient" rather than rendering nothing, so an address
139
+ * the agent never supplied cannot be mistaken for one it did.
140
+ */
141
+ ComposeEmailRecipients(command) {
142
+ if (command.type !== 'compose:email') {
143
+ return null;
63
144
  }
145
+ const to = (command.to ?? []).map((r) => r.trim()).filter((r) => r.length > 0);
146
+ const cc = (command.cc ?? []).map((r) => r.trim()).filter((r) => r.length > 0);
147
+ const bcc = (command.bcc ?? []).map((r) => r.trim()).filter((r) => r.length > 0);
148
+ if (to.length === 0 && cc.length === 0 && bcc.length === 0) {
149
+ return 'no recipient — you\'ll add one';
150
+ }
151
+ const parts = [];
152
+ if (to.length > 0)
153
+ parts.push(`To ${to.join(', ')}`);
154
+ if (cc.length > 0)
155
+ parts.push(`Cc ${cc.join(', ')}`);
156
+ if (bcc.length > 0)
157
+ parts.push(`Bcc ${bcc.join(', ')}`);
158
+ return parts.join(' · ');
64
159
  }
65
160
  /**
66
161
  * Get button variant based on command type
67
162
  */
68
- getButtonVariant(command) {
69
- if (command.type === 'open:resource') {
163
+ GetButtonVariant(command) {
164
+ // A drafted email leads the turn the same way an opened resource does.
165
+ if (command.type === 'open:resource' || command.type === 'compose:email') {
70
166
  return 'primary';
71
167
  }
72
168
  else if (command.type === 'open:url') {
@@ -74,30 +170,48 @@ export class ActionableCommandsComponent {
74
170
  }
75
171
  return 'secondary';
76
172
  }
173
+ /** @deprecated Use {@link GetButtonVariant}. */
174
+ getButtonVariant(command) {
175
+ return this.GetButtonVariant(command);
176
+ }
77
177
  /**
78
178
  * Track by function for commands list
79
179
  */
80
- trackByCommand(index, command) {
180
+ TrackByCommand(index, command) {
81
181
  return `${command.type}_${index}`;
82
182
  }
183
+ /** @deprecated Use {@link TrackByCommand}. */
184
+ trackByCommand(index, command) {
185
+ return this.TrackByCommand(index, command);
186
+ }
83
187
  static ɵfac = function ActionableCommandsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ActionableCommandsComponent)(); };
84
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionableCommandsComponent, selectors: [["mj-actionable-commands"]], inputs: { commands: "commands", disabled: "disabled", isLastMessage: "isLastMessage", isConversationOwner: "isConversationOwner" }, outputs: { commandExecuted: "commandExecuted" }, standalone: false, decls: 1, vars: 1, consts: [[1, "actionable-commands"], [1, "commands-label"], [1, "commands-buttons"], ["mjButton", "", 1, "command-button", 3, "variant", "disabled"], ["mjButton", "", 1, "command-button", 3, "click", "variant", "disabled"], ["aria-hidden", "true", 3, "class"], ["aria-hidden", "true"]], template: function ActionableCommandsComponent_Template(rf, ctx) { if (rf & 1) {
188
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionableCommandsComponent, selectors: [["mj-actionable-commands"]], inputs: { Commands: "Commands", commands: "commands", Disabled: "Disabled", disabled: "disabled", IsLastMessage: "IsLastMessage", isLastMessage: "isLastMessage", IsConversationOwner: "IsConversationOwner", isConversationOwner: "isConversationOwner" }, outputs: { CommandExecuted: "CommandExecuted", commandExecuted: "commandExecuted" }, standalone: false, decls: 1, vars: 1, consts: [[1, "actionable-commands"], [1, "commands-label"], [1, "commands-buttons"], [1, "command-item"], ["mjButton", "", 1, "command-button", 3, "click", "variant", "disabled"], ["aria-hidden", "true", 3, "class"], [1, "command-recipients"], ["aria-hidden", "true"]], template: function ActionableCommandsComponent_Template(rf, ctx) { if (rf & 1) {
85
189
  i0.ɵɵconditionalCreate(0, ActionableCommandsComponent_Conditional_0_Template, 6, 0, "div", 0);
86
190
  } if (rf & 2) {
87
191
  i0.ɵɵconditional(ctx.isVisible ? 0 : -1);
88
- } }, dependencies: [i1.MJButtonDirective], styles: [".actionable-commands[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-left: 3px solid var(--mj-brand-primary);\n border-radius: 4px;\n}\n\n.commands-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 10px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.commands-buttons[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n}\n\n.command-button[_ngcontent-%COMP%] {\n padding: 8px 16px;\n font-size: 14px;\n}\n\n.command-button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n}\n\n\n@media (max-width: 768px) {\n .commands-buttons[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .command-button[_ngcontent-%COMP%] {\n width: 100%;\n }\n}"] });
192
+ } }, dependencies: [i1.MJButtonDirective], styles: [".actionable-commands[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-left: 3px solid var(--mj-brand-primary);\n border-radius: 4px;\n}\n\n.commands-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 10px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.commands-buttons[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n}\n\n.command-button[_ngcontent-%COMP%] {\n padding: 8px 16px;\n font-size: 14px;\n}\n\n.command-button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n}\n\n\n@media (max-width: 768px) {\n .commands-buttons[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .command-button[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n\n\n\n.command-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n\n\n.command-recipients[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted, #6b6b6b);\n max-width: 320px;\n white-space: normal;\n overflow-wrap: anywhere;\n}"] });
89
193
  }
90
194
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ActionableCommandsComponent, [{
91
195
  type: Component,
92
- args: [{ standalone: false, selector: 'mj-actionable-commands', template: "@if (isVisible) {\n <div class=\"actionable-commands\">\n <div class=\"commands-label\">Actions:</div>\n <div class=\"commands-buttons\">\n @for (command of commands; track trackByCommand($index, command)) {\n <button mjButton\n [variant]=\"getButtonVariant(command)\"\n [disabled]=\"disabled\"\n (click)=\"onCommandClick(command)\"\n class=\"command-button\"\n >\n @if (command.icon) {\n <i class=\"fa {{ command.icon }}\" aria-hidden=\"true\"></i>\n }\n {{ command.label }}\n </button>\n }\n </div>\n </div>\n}\n", styles: [".actionable-commands {\n margin-top: 16px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-left: 3px solid var(--mj-brand-primary);\n border-radius: 4px;\n}\n\n.commands-label {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 10px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.commands-buttons {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n}\n\n.command-button {\n padding: 8px 16px;\n font-size: 14px;\n}\n\n.command-button i {\n margin-right: 6px;\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n .commands-buttons {\n flex-direction: column;\n }\n\n .command-button {\n width: 100%;\n }\n}\n"] }]
93
- }], null, { commands: [{
196
+ args: [{ standalone: false, selector: 'mj-actionable-commands', template: "@if (isVisible) {\n <div class=\"actionable-commands\">\n <div class=\"commands-label\">Actions:</div>\n <div class=\"commands-buttons\">\n @for (command of commands; track trackByCommand($index, command)) {\n @let recipients = ComposeEmailRecipients(command);\n <div class=\"command-item\">\n <button mjButton\n [variant]=\"getButtonVariant(command)\"\n [disabled]=\"disabled\"\n (click)=\"onCommandClick(command)\"\n class=\"command-button\"\n >\n @if (command.icon) {\n <i class=\"fa {{ command.icon }}\" aria-hidden=\"true\"></i>\n }\n {{ command.label }}\n </button>\n @if (recipients) {\n <!-- Shown so the user can see WHO a draft is addressed to before their mail client\n opens already populated \u2014 see ComposeEmailRecipients(). -->\n <div class=\"command-recipients\">{{ recipients }}</div>\n }\n </div>\n }\n </div>\n </div>\n}\n", styles: [".actionable-commands {\n margin-top: 16px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-left: 3px solid var(--mj-brand-primary);\n border-radius: 4px;\n}\n\n.commands-label {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 10px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.commands-buttons {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n}\n\n.command-button {\n padding: 8px 16px;\n font-size: 14px;\n}\n\n.command-button i {\n margin-right: 6px;\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n .commands-buttons {\n flex-direction: column;\n }\n\n .command-button {\n width: 100%;\n }\n}\n\n/* compose:email shows its recipients under the button so the address is visible\n before the mail client opens. */\n.command-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n/* Wraps rather than truncating: Bcc is listed LAST, so an ellipsis would cut off exactly the\n address this line exists to expose. overflow-wrap breaks a long address that has no spaces. */\n.command-recipients {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted, #6b6b6b);\n max-width: 320px;\n white-space: normal;\n overflow-wrap: anywhere;\n}\n"] }]
197
+ }], null, { Commands: [{
198
+ type: Input
199
+ }], commands: [{
200
+ type: Input
201
+ }], Disabled: [{
94
202
  type: Input
95
203
  }], disabled: [{
96
204
  type: Input
205
+ }], IsLastMessage: [{
206
+ type: Input
97
207
  }], isLastMessage: [{
98
208
  type: Input
209
+ }], IsConversationOwner: [{
210
+ type: Input
99
211
  }], isConversationOwner: [{
100
212
  type: Input
213
+ }], CommandExecuted: [{
214
+ type: Output
101
215
  }], commandExecuted: [{
102
216
  type: Output
103
217
  }] }); })();
@@ -1 +1 @@
1
- {"version":3,"file":"actionable-commands.component.js","sourceRoot":"","sources":["../../../../src/lib/components/message/actionable-commands.component.ts","../../../../src/lib/components/message/actionable-commands.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;;;;ICY3D,uBAAwD;;;IAArD,cAAA,yCAA6B,CAAA;;;;IAPpC,iCAKG;IAFD,mOAAS,iCAAuB,KAAC;IAGjC,+GAAoB;IAGpB,YACF;IAAA,iBAAS;;;;IARP,AADA,6DAAqC,6BAChB;IAIrB,cAEC;IAFD,0CAEC;IACD,cACF;IADE,iDACF;;;IAbJ,AADF,8BAAiC,aACH;IAAA,wBAAQ;IAAA,iBAAM;IAC1C,8BAA8B;IAC5B,kJAYC;IAEL,AADE,iBAAM,EACF;;;IAdF,eAYC;IAZD,8BAYC;;ADbP;;;GAGG;AAOH,MAAM,OAAO,2BAA2B;IAC7B,QAAQ,GAAwB,EAAE,CAAC;IACnC,QAAQ,GAAY,KAAK,CAAC;IAC1B,aAAa,GAAY,KAAK,CAAC;IAC/B,mBAAmB,GAAY,KAAK,CAAC;IAEpC,eAAe,GAAG,IAAI,YAAY,EAAqB,CAAC;IAElE;;OAEG;IACH,IAAW,SAAS;QAClB,OAAO,CACL,IAAI,CAAC,aAAa;YAClB,IAAI,CAAC,mBAAmB;YACxB,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CACzB,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,cAAc,CAAC,OAA0B;QAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;OAEG;IACI,gBAAgB,CAAC,OAA0B;QAChD,IAAI,OAAO,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACrC,OAAO,SAAS,CAAC;QACnB,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACvC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACI,cAAc,CAAC,KAAa,EAAE,OAA0B;QAC7D,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC;IACpC,CAAC;qHA9CU,2BAA2B;6DAA3B,2BAA2B;YCbxC,6FAAiB;;YAAjB,wCAmBC;;;iFDNY,2BAA2B;cANvC,SAAS;6BACI,KAAK,YACP,wBAAwB;;kBAKjC,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBAEL,MAAM;;kFANI,2BAA2B","sourcesContent":["import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { ActionableCommand } from '@memberjunction/ai-core-plus';\n\n/**\n * Component for displaying actionable command buttons\n * These are actions the user can trigger after an agent completes a task\n */\n@Component({\n standalone: false,\n selector: 'mj-actionable-commands',\n templateUrl: './actionable-commands.component.html',\n styleUrls: ['./actionable-commands.component.css']\n})\nexport class ActionableCommandsComponent {\n @Input() commands: ActionableCommand[] = [];\n @Input() disabled: boolean = false;\n @Input() isLastMessage: boolean = false;\n @Input() isConversationOwner: boolean = false;\n\n @Output() commandExecuted = new EventEmitter<ActionableCommand>();\n\n /**\n * Check if component should be visible\n */\n public get isVisible(): boolean {\n return (\n this.isLastMessage &&\n this.isConversationOwner &&\n this.commands &&\n this.commands.length > 0\n );\n }\n\n /**\n * Handle command button click\n */\n public onCommandClick(command: ActionableCommand): void {\n if (!this.disabled) {\n this.commandExecuted.emit(command);\n }\n }\n\n /**\n * Get button variant based on command type\n */\n public getButtonVariant(command: ActionableCommand): 'primary' | 'secondary' | 'outline' | 'flat' {\n if (command.type === 'open:resource') {\n return 'primary';\n } else if (command.type === 'open:url') {\n return 'outline';\n }\n return 'secondary';\n }\n\n /**\n * Track by function for commands list\n */\n public trackByCommand(index: number, command: ActionableCommand): string {\n return `${command.type}_${index}`;\n }\n}\n","@if (isVisible) {\n <div class=\"actionable-commands\">\n <div class=\"commands-label\">Actions:</div>\n <div class=\"commands-buttons\">\n @for (command of commands; track trackByCommand($index, command)) {\n <button mjButton\n [variant]=\"getButtonVariant(command)\"\n [disabled]=\"disabled\"\n (click)=\"onCommandClick(command)\"\n class=\"command-button\"\n >\n @if (command.icon) {\n <i class=\"fa {{ command.icon }}\" aria-hidden=\"true\"></i>\n }\n {{ command.label }}\n </button>\n }\n </div>\n </div>\n}\n"]}
1
+ {"version":3,"file":"actionable-commands.component.js","sourceRoot":"","sources":["../../../../src/lib/components/message/actionable-commands.component.ts","../../../../src/lib/components/message/actionable-commands.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { ActionableCommand } from '@memberjunction/ai-core-plus';\n\n/**\n * Component for displaying actionable command buttons\n * These are actions the user can trigger after an agent completes a task\n */\n@Component({\n standalone: false,\n selector: 'mj-actionable-commands',\n templateUrl: './actionable-commands.component.html',\n styleUrls: ['./actionable-commands.component.css']\n})\nexport class ActionableCommandsComponent {\n @Input() Commands: ActionableCommand[] = [];\n\n /** @deprecated Use {@link Commands}. */\n @Input() set commands(value: ActionableCommand[]) {\n this.Commands = value;\n }\n /** @deprecated Use {@link Commands}. */\n get commands(): ActionableCommand[] {\n return this.Commands;\n }\n @Input() Disabled: boolean = false;\n\n /** @deprecated Use {@link Disabled}. */\n @Input() set disabled(value: boolean) {\n this.Disabled = value;\n }\n /** @deprecated Use {@link Disabled}. */\n get disabled(): boolean {\n return this.Disabled;\n }\n @Input() IsLastMessage: boolean = false;\n\n /** @deprecated Use {@link IsLastMessage}. */\n @Input() set isLastMessage(value: boolean) {\n this.IsLastMessage = value;\n }\n /** @deprecated Use {@link IsLastMessage}. */\n get isLastMessage(): boolean {\n return this.IsLastMessage;\n }\n @Input() IsConversationOwner: boolean = false;\n\n /** @deprecated Use {@link IsConversationOwner}. */\n @Input() set isConversationOwner(value: boolean) {\n this.IsConversationOwner = value;\n }\n /** @deprecated Use {@link IsConversationOwner}. */\n get isConversationOwner(): boolean {\n return this.IsConversationOwner;\n }\n\n @Output() CommandExecuted = new EventEmitter<ActionableCommand>();\n\n /**\n * @deprecated Use {@link CommandExecuted}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (commandExecuted) keeps working. Must stay AFTER CommandExecuted: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() commandExecuted = this.CommandExecuted;\n\n /**\n * Check if component should be visible\n */\n public get IsVisible(): boolean {\n return (\n this.IsLastMessage &&\n this.IsConversationOwner &&\n this.Commands &&\n this.Commands.length > 0\n );\n }\n\n /** @deprecated Use {@link IsVisible}. */\n public get isVisible(): boolean {\n return this.IsVisible;\n }\n\n /**\n * Handle command button click\n */\n public OnCommandClick(command: ActionableCommand): void {\n if (!this.Disabled) {\n this.CommandExecuted.emit(command);\n }\n }\n\n /** @deprecated Use {@link OnCommandClick}. */\n public onCommandClick(command: ActionableCommand): void {\n return this.OnCommandClick(command);\n }\n\n /**\n * Recipients to show BESIDE a compose:email button, or null for any other command.\n *\n * SECURITY, not decoration. The button renders only the agent-authored `label`, so without this\n * the user cannot see who a draft is addressed to until their mail client is already open and\n * populated. An agent influenced by injected content in retrieved material could pair a benign\n * label (\"Open draft in Mail\") with an attacker's address and the conversation's context as the\n * body; showing the address is what lets the user notice before they send from their real\n * mailbox. Empty recipients read as \"no recipient\" rather than rendering nothing, so an address\n * the agent never supplied cannot be mistaken for one it did.\n */\n public ComposeEmailRecipients(command: ActionableCommand): string | null {\n if (command.type !== 'compose:email') {\n return null;\n }\n const to = (command.to ?? []).map((r) => r.trim()).filter((r) => r.length > 0);\n const cc = (command.cc ?? []).map((r) => r.trim()).filter((r) => r.length > 0);\n const bcc = (command.bcc ?? []).map((r) => r.trim()).filter((r) => r.length > 0);\n if (to.length === 0 && cc.length === 0 && bcc.length === 0) {\n return 'no recipient — you\\'ll add one';\n }\n const parts: string[] = [];\n if (to.length > 0) parts.push(`To ${to.join(', ')}`);\n if (cc.length > 0) parts.push(`Cc ${cc.join(', ')}`);\n if (bcc.length > 0) parts.push(`Bcc ${bcc.join(', ')}`);\n return parts.join(' · ');\n }\n\n /**\n * Get button variant based on command type\n */\n public GetButtonVariant(command: ActionableCommand): 'primary' | 'secondary' | 'outline' | 'flat' {\n // A drafted email leads the turn the same way an opened resource does.\n if (command.type === 'open:resource' || command.type === 'compose:email') {\n return 'primary';\n } else if (command.type === 'open:url') {\n return 'outline';\n }\n return 'secondary';\n }\n\n /** @deprecated Use {@link GetButtonVariant}. */\n public getButtonVariant(command: ActionableCommand): 'primary' | 'secondary' | 'outline' | 'flat' {\n return this.GetButtonVariant(command);\n }\n\n /**\n * Track by function for commands list\n */\n public TrackByCommand(index: number, command: ActionableCommand): string {\n return `${command.type}_${index}`;\n }\n\n /** @deprecated Use {@link TrackByCommand}. */\n public trackByCommand(index: number, command: ActionableCommand): string {\n return this.TrackByCommand(index, command);\n }\n}\n","@if (isVisible) {\n <div class=\"actionable-commands\">\n <div class=\"commands-label\">Actions:</div>\n <div class=\"commands-buttons\">\n @for (command of commands; track trackByCommand($index, command)) {\n @let recipients = ComposeEmailRecipients(command);\n <div class=\"command-item\">\n <button mjButton\n [variant]=\"getButtonVariant(command)\"\n [disabled]=\"disabled\"\n (click)=\"onCommandClick(command)\"\n class=\"command-button\"\n >\n @if (command.icon) {\n <i class=\"fa {{ command.icon }}\" aria-hidden=\"true\"></i>\n }\n {{ command.label }}\n </button>\n @if (recipients) {\n <!-- Shown so the user can see WHO a draft is addressed to before their mail client\n opens already populated — see ComposeEmailRecipients(). -->\n <div class=\"command-recipients\">{{ recipients }}</div>\n }\n </div>\n }\n </div>\n </div>\n}\n"]}
@@ -16,8 +16,16 @@ import * as i0 from "@angular/core";
16
16
  export declare class ConversationMessageRatingComponent extends BaseAngularComponent implements OnInit {
17
17
  private cdr;
18
18
  private dialogService;
19
- conversationDetailId: string;
20
- currentUser: UserInfo;
19
+ ConversationDetailId: string;
20
+ /** @deprecated Use {@link ConversationDetailId}. */
21
+ set conversationDetailId(value: string);
22
+ /** @deprecated Use {@link ConversationDetailId}. */
23
+ get conversationDetailId(): string;
24
+ CurrentUser: UserInfo;
25
+ /** @deprecated Use {@link CurrentUser}. */
26
+ set currentUser(value: UserInfo);
27
+ /** @deprecated Use {@link CurrentUser}. */
28
+ get currentUser(): UserInfo;
21
29
  /**
22
30
  * When false, the rating UI renders as a read-only badge instead of an editable
23
31
  * button. Set by the parent (MessageItemComponent) to `false` when the current
@@ -30,20 +38,48 @@ export declare class ConversationMessageRatingComponent extends BaseAngularCompo
30
38
  * `MJ: Conversation Details` (which has `UserRating`/`UserFeedback`).
31
39
  * Skip-Brain hosts pass `'Conversation Details__Skip'`.
32
40
  */
33
- ratingEntityName: string;
41
+ RatingEntityName: string;
42
+ /** @deprecated Use {@link RatingEntityName}. */
43
+ set ratingEntityName(value: string);
44
+ /** @deprecated Use {@link RatingEntityName}. */
45
+ get ratingEntityName(): string;
34
46
  /** Column on the entity that stores the 1-10 rating. */
35
- ratingField: string;
47
+ RatingField: string;
48
+ /** @deprecated Use {@link RatingField}. */
49
+ set ratingField(value: string);
50
+ /** @deprecated Use {@link RatingField}. */
51
+ get ratingField(): string;
36
52
  /** Column on the entity that stores the free-form feedback. */
37
- ratingCommentField: string;
53
+ RatingCommentField: string;
54
+ /** @deprecated Use {@link RatingCommentField}. */
55
+ set ratingCommentField(value: string);
56
+ /** @deprecated Use {@link RatingCommentField}. */
57
+ get ratingCommentField(): string;
38
58
  /**
39
59
  * Optional: legacy pre-loaded ratings array (no longer used by storage; kept
40
60
  * to preserve the input shape used by existing call sites like
41
61
  * MessageItemComponent).
42
62
  */
43
- ratingsData?: RatingJSON[];
44
- currentUserRating: number | null;
45
- currentUserComments: string;
46
- isSaving: boolean;
63
+ RatingsData?: RatingJSON[];
64
+ /** @deprecated Use {@link RatingsData}. */
65
+ set ratingsData(value: RatingJSON[] | undefined);
66
+ /** @deprecated Use {@link RatingsData}. */
67
+ get ratingsData(): RatingJSON[] | undefined;
68
+ CurrentUserRating: number | null;
69
+ /** @deprecated Use {@link CurrentUserRating}. */
70
+ get currentUserRating(): number | null;
71
+ /** @deprecated Use {@link CurrentUserRating}. */
72
+ set currentUserRating(value: number | null);
73
+ CurrentUserComments: string;
74
+ /** @deprecated Use {@link CurrentUserComments}. */
75
+ get currentUserComments(): string;
76
+ /** @deprecated Use {@link CurrentUserComments}. */
77
+ set currentUserComments(value: string);
78
+ IsSaving: boolean;
79
+ /** @deprecated Use {@link IsSaving}. */
80
+ get isSaving(): boolean;
81
+ /** @deprecated Use {@link IsSaving}. */
82
+ set isSaving(value: boolean);
47
83
  constructor(cdr: ChangeDetectorRef, dialogService: DialogService);
48
84
  ngOnInit(): Promise<void>;
49
85
  OpenRatingDialog(): Promise<void>;
@@ -57,6 +93,6 @@ export declare class ConversationMessageRatingComponent extends BaseAngularCompo
57
93
  private loadRating;
58
94
  private saveRating;
59
95
  static ɵfac: i0.ɵɵFactoryDeclaration<ConversationMessageRatingComponent, never>;
60
- static ɵcmp: i0.ɵɵComponentDeclaration<ConversationMessageRatingComponent, "mj-conversation-message-rating", never, { "conversationDetailId": { "alias": "conversationDetailId"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; "canEdit": { "alias": "canEdit"; "required": false; }; "ratingEntityName": { "alias": "ratingEntityName"; "required": false; }; "ratingField": { "alias": "ratingField"; "required": false; }; "ratingCommentField": { "alias": "ratingCommentField"; "required": false; }; "ratingsData": { "alias": "ratingsData"; "required": false; }; }, {}, never, never, false, never>;
96
+ static ɵcmp: i0.ɵɵComponentDeclaration<ConversationMessageRatingComponent, "mj-conversation-message-rating", never, { "ConversationDetailId": { "alias": "ConversationDetailId"; "required": false; }; "conversationDetailId": { "alias": "conversationDetailId"; "required": false; }; "CurrentUser": { "alias": "CurrentUser"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; "canEdit": { "alias": "canEdit"; "required": false; }; "RatingEntityName": { "alias": "RatingEntityName"; "required": false; }; "ratingEntityName": { "alias": "ratingEntityName"; "required": false; }; "RatingField": { "alias": "RatingField"; "required": false; }; "ratingField": { "alias": "ratingField"; "required": false; }; "RatingCommentField": { "alias": "RatingCommentField"; "required": false; }; "ratingCommentField": { "alias": "ratingCommentField"; "required": false; }; "RatingsData": { "alias": "RatingsData"; "required": false; }; "ratingsData": { "alias": "ratingsData"; "required": false; }; }, {}, never, never, false, never>;
61
97
  }
62
98
  //# sourceMappingURL=conversation-message-rating.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-message-rating.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/message/conversation-message-rating.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAqC,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAkB,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;;AAiB9D;;;;;;;;GAQG;AACH,qBA+Fa,kCAAmC,SAAQ,oBAAqB,YAAW,MAAM;IAqC1F,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,aAAa;IArCd,oBAAoB,EAAG,MAAM,CAAC;IAC9B,WAAW,EAAG,QAAQ,CAAC;IAEhC;;;;;OAKG;IACM,OAAO,EAAE,OAAO,CAAQ;IAEjC;;;;OAIG;IACM,gBAAgB,EAAE,MAAM,CAA8B;IAE/D,wDAAwD;IAC/C,WAAW,EAAE,MAAM,CAAgB;IAE5C,+DAA+D;IACtD,kBAAkB,EAAE,MAAM,CAAkB;IAErD;;;;OAIG;IACM,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAEpC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACxC,mBAAmB,EAAE,MAAM,CAAM;IACjC,QAAQ,UAAS;gBAGP,GAAG,EAAE,iBAAiB,EACtB,aAAa,EAAE,aAAa;IAKhC,QAAQ;IAIR,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IA6CvC;;;;;OAKG;YACW,uBAAuB;YAoCvB,UAAU;YAkBV,UAAU;yCAxJb,kCAAkC;2CAAlC,kCAAkC;CA+L9C"}
1
+ {"version":3,"file":"conversation-message-rating.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/message/conversation-message-rating.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAqC,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAkB,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;;AAiB9D;;;;;;;;GAQG;AACH,qBA+Fa,kCAAmC,SAAQ,oBAAqB,YAAW,MAAM;IAsH1F,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,aAAa;IAtHd,oBAAoB,EAAG,MAAM,CAAC;IAEvC,oDAAoD;IACpD,IAAa,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAE9C;IACD,oDAAoD;IACpD,IAAI,oBAAoB,IAAI,MAAM,CAEjC;IACQ,WAAW,EAAG,QAAQ,CAAC;IAEhC,2CAA2C;IAC3C,IAAa,WAAW,CAAC,KAAK,EAAE,QAAQ,EAEvC;IACD,2CAA2C;IAC3C,IAAI,WAAW,IAAI,QAAQ,CAE1B;IAED;;;;;OAKG;IACM,OAAO,EAAE,OAAO,CAAQ;IAEjC;;;;OAIG;IACM,gBAAgB,EAAE,MAAM,CAA8B;IAE/D,gDAAgD;IAChD,IAAa,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAE1C;IACD,gDAAgD;IAChD,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,wDAAwD;IAC/C,WAAW,EAAE,MAAM,CAAgB;IAE5C,2CAA2C;IAC3C,IAAa,WAAW,CAAC,KAAK,EAAE,MAAM,EAErC;IACD,2CAA2C;IAC3C,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,+DAA+D;IACtD,kBAAkB,EAAE,MAAM,CAAkB;IAErD,kDAAkD;IAClD,IAAa,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAE5C;IACD,kDAAkD;IAClD,IAAI,kBAAkB,IAAI,MAAM,CAE/B;IAED;;;;OAIG;IACM,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAEpC,2CAA2C;IAC3C,IAAa,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,EAEvD;IACD,2CAA2C;IAC3C,IAAI,WAAW,IAAI,UAAU,EAAE,GAAG,SAAS,CAE1C;IAED,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAExC,iDAAiD;IACjD,IAAI,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAErC;IACD,iDAAiD;IACjD,IAAI,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAEzC;IACD,mBAAmB,EAAE,MAAM,CAAM;IAEjC,mDAAmD;IACnD,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IACD,mDAAmD;IACnD,IAAI,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAEpC;IACD,QAAQ,UAAS;IAEjB,wCAAwC;IACxC,IAAI,QAAQ,YAEX;IACD,wCAAwC;IACxC,IAAI,QAAQ,CAAC,KAAK,SAAA,EAEjB;gBAGS,GAAG,EAAE,iBAAiB,EACtB,aAAa,EAAE,aAAa;IAKhC,QAAQ;IAIR,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IA6CvC;;;;;OAKG;YACW,uBAAuB;YAoCvB,UAAU;YAkBV,UAAU;yCAzOb,kCAAkC;2CAAlC,kCAAkC;CAgR9C"}
@@ -62,8 +62,24 @@ const FEEDBACK_ROLE_IDS = [
62
62
  export class ConversationMessageRatingComponent extends BaseAngularComponent {
63
63
  cdr;
64
64
  dialogService;
65
- conversationDetailId;
66
- currentUser;
65
+ ConversationDetailId;
66
+ /** @deprecated Use {@link ConversationDetailId}. */
67
+ set conversationDetailId(value) {
68
+ this.ConversationDetailId = value;
69
+ }
70
+ /** @deprecated Use {@link ConversationDetailId}. */
71
+ get conversationDetailId() {
72
+ return this.ConversationDetailId;
73
+ }
74
+ CurrentUser;
75
+ /** @deprecated Use {@link CurrentUser}. */
76
+ set currentUser(value) {
77
+ this.CurrentUser = value;
78
+ }
79
+ /** @deprecated Use {@link CurrentUser}. */
80
+ get currentUser() {
81
+ return this.CurrentUser;
82
+ }
67
83
  /**
68
84
  * When false, the rating UI renders as a read-only badge instead of an editable
69
85
  * button. Set by the parent (MessageItemComponent) to `false` when the current
@@ -76,20 +92,76 @@ export class ConversationMessageRatingComponent extends BaseAngularComponent {
76
92
  * `MJ: Conversation Details` (which has `UserRating`/`UserFeedback`).
77
93
  * Skip-Brain hosts pass `'Conversation Details__Skip'`.
78
94
  */
79
- ratingEntityName = 'MJ: Conversation Details';
95
+ RatingEntityName = 'MJ: Conversation Details';
96
+ /** @deprecated Use {@link RatingEntityName}. */
97
+ set ratingEntityName(value) {
98
+ this.RatingEntityName = value;
99
+ }
100
+ /** @deprecated Use {@link RatingEntityName}. */
101
+ get ratingEntityName() {
102
+ return this.RatingEntityName;
103
+ }
80
104
  /** Column on the entity that stores the 1-10 rating. */
81
- ratingField = 'UserRating';
105
+ RatingField = 'UserRating';
106
+ /** @deprecated Use {@link RatingField}. */
107
+ set ratingField(value) {
108
+ this.RatingField = value;
109
+ }
110
+ /** @deprecated Use {@link RatingField}. */
111
+ get ratingField() {
112
+ return this.RatingField;
113
+ }
82
114
  /** Column on the entity that stores the free-form feedback. */
83
- ratingCommentField = 'UserFeedback';
115
+ RatingCommentField = 'UserFeedback';
116
+ /** @deprecated Use {@link RatingCommentField}. */
117
+ set ratingCommentField(value) {
118
+ this.RatingCommentField = value;
119
+ }
120
+ /** @deprecated Use {@link RatingCommentField}. */
121
+ get ratingCommentField() {
122
+ return this.RatingCommentField;
123
+ }
84
124
  /**
85
125
  * Optional: legacy pre-loaded ratings array (no longer used by storage; kept
86
126
  * to preserve the input shape used by existing call sites like
87
127
  * MessageItemComponent).
88
128
  */
89
- ratingsData;
90
- currentUserRating = null;
91
- currentUserComments = '';
92
- isSaving = false;
129
+ RatingsData;
130
+ /** @deprecated Use {@link RatingsData}. */
131
+ set ratingsData(value) {
132
+ this.RatingsData = value;
133
+ }
134
+ /** @deprecated Use {@link RatingsData}. */
135
+ get ratingsData() {
136
+ return this.RatingsData;
137
+ }
138
+ CurrentUserRating = null;
139
+ /** @deprecated Use {@link CurrentUserRating}. */
140
+ get currentUserRating() {
141
+ return this.CurrentUserRating;
142
+ }
143
+ /** @deprecated Use {@link CurrentUserRating}. */
144
+ set currentUserRating(value) {
145
+ this.CurrentUserRating = value;
146
+ }
147
+ CurrentUserComments = '';
148
+ /** @deprecated Use {@link CurrentUserComments}. */
149
+ get currentUserComments() {
150
+ return this.CurrentUserComments;
151
+ }
152
+ /** @deprecated Use {@link CurrentUserComments}. */
153
+ set currentUserComments(value) {
154
+ this.CurrentUserComments = value;
155
+ }
156
+ IsSaving = false;
157
+ /** @deprecated Use {@link IsSaving}. */
158
+ get isSaving() {
159
+ return this.IsSaving;
160
+ }
161
+ /** @deprecated Use {@link IsSaving}. */
162
+ set isSaving(value) {
163
+ this.IsSaving = value;
164
+ }
93
165
  constructor(cdr, dialogService) {
94
166
  super();
95
167
  this.cdr = cdr;
@@ -99,7 +171,7 @@ export class ConversationMessageRatingComponent extends BaseAngularComponent {
99
171
  await this.loadRating();
100
172
  }
101
173
  async OpenRatingDialog() {
102
- if (this.isSaving)
174
+ if (this.IsSaving)
103
175
  return;
104
176
  if (!this.canEdit)
105
177
  return;
@@ -112,10 +184,10 @@ export class ConversationMessageRatingComponent extends BaseAngularComponent {
112
184
  console.warn('[Rating] Could not read consent flag, will require acknowledgement', e);
113
185
  }
114
186
  const result = await this.dialogService.rating({
115
- title: this.currentUserRating != null ? 'Edit your rating' : 'Rate this response',
187
+ title: this.CurrentUserRating != null ? 'Edit your rating' : 'Rate this response',
116
188
  message: 'Rate the response on a 1-10 scale and (optionally) describe what was good or bad.',
117
- initialRating: this.currentUserRating,
118
- initialComments: this.currentUserComments,
189
+ initialRating: this.CurrentUserRating,
190
+ initialComments: this.CurrentUserComments,
119
191
  okText: 'Submit',
120
192
  requireConsent: !consentAcknowledged
121
193
  });
@@ -178,16 +250,16 @@ export class ConversationMessageRatingComponent extends BaseAngularComponent {
178
250
  }
179
251
  }
180
252
  async loadRating() {
181
- if (!this.conversationDetailId)
253
+ if (!this.ConversationDetailId)
182
254
  return;
183
255
  try {
184
256
  const md = this.ProviderToUse;
185
- const entity = (await md.GetEntityObject(this.ratingEntityName));
186
- const loaded = await entity.Load(this.conversationDetailId);
257
+ const entity = (await md.GetEntityObject(this.RatingEntityName));
258
+ const loaded = await entity.Load(this.ConversationDetailId);
187
259
  if (loaded) {
188
- const rating = entity.Get(this.ratingField);
189
- this.currentUserRating = rating != null ? Number(rating) : null;
190
- this.currentUserComments = (entity.Get(this.ratingCommentField) ?? '');
260
+ const rating = entity.Get(this.RatingField);
261
+ this.CurrentUserRating = rating != null ? Number(rating) : null;
262
+ this.CurrentUserComments = (entity.Get(this.RatingCommentField) ?? '');
191
263
  this.cdr.detectChanges();
192
264
  }
193
265
  }
@@ -197,27 +269,27 @@ export class ConversationMessageRatingComponent extends BaseAngularComponent {
197
269
  }
198
270
  }
199
271
  async saveRating(rating, comments) {
200
- if (this.isSaving)
272
+ if (this.IsSaving)
201
273
  return null;
202
274
  if (rating < 1 || rating > 10)
203
275
  return null;
204
- if (!this.conversationDetailId)
276
+ if (!this.ConversationDetailId)
205
277
  return null;
206
- const prevRating = this.currentUserRating;
207
- const prevComments = this.currentUserComments;
208
- this.isSaving = true;
209
- this.currentUserRating = rating;
210
- this.currentUserComments = comments;
278
+ const prevRating = this.CurrentUserRating;
279
+ const prevComments = this.CurrentUserComments;
280
+ this.IsSaving = true;
281
+ this.CurrentUserRating = rating;
282
+ this.CurrentUserComments = comments;
211
283
  this.cdr.detectChanges();
212
284
  try {
213
285
  const md = this.ProviderToUse;
214
- const entity = (await md.GetEntityObject(this.ratingEntityName));
215
- const loaded = await entity.Load(this.conversationDetailId);
286
+ const entity = (await md.GetEntityObject(this.RatingEntityName));
287
+ const loaded = await entity.Load(this.ConversationDetailId);
216
288
  if (!loaded) {
217
- throw new Error(`ConversationDetail ${this.conversationDetailId} not found in ${this.ratingEntityName}`);
289
+ throw new Error(`ConversationDetail ${this.ConversationDetailId} not found in ${this.RatingEntityName}`);
218
290
  }
219
- entity.Set(this.ratingField, rating);
220
- entity.Set(this.ratingCommentField, comments || null);
291
+ entity.Set(this.RatingField, rating);
292
+ entity.Set(this.RatingCommentField, comments || null);
221
293
  const saveResult = await entity.Save();
222
294
  if (!saveResult) {
223
295
  throw new Error(`Save failed: ${entity.LatestResult?.Message ?? 'unknown'}`);
@@ -227,18 +299,18 @@ export class ConversationMessageRatingComponent extends BaseAngularComponent {
227
299
  }
228
300
  catch (error) {
229
301
  console.error('[Rating] save failed:', error);
230
- this.currentUserRating = prevRating;
231
- this.currentUserComments = prevComments;
302
+ this.CurrentUserRating = prevRating;
303
+ this.CurrentUserComments = prevComments;
232
304
  this.cdr.detectChanges();
233
305
  return null;
234
306
  }
235
307
  finally {
236
- this.isSaving = false;
308
+ this.IsSaving = false;
237
309
  this.cdr.detectChanges();
238
310
  }
239
311
  }
240
312
  static ɵfac = function ConversationMessageRatingComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ConversationMessageRatingComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.DialogService)); };
241
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ConversationMessageRatingComponent, selectors: [["mj-conversation-message-rating"]], inputs: { conversationDetailId: "conversationDetailId", currentUser: "currentUser", canEdit: "canEdit", ratingEntityName: "ratingEntityName", ratingField: "ratingField", ratingCommentField: "ratingCommentField", ratingsData: "ratingsData" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 1, consts: [[1, "rating-container"], [1, "user-rating"], ["type", "button", 1, "rating-button", 3, "has-rated", "disabled", "title"], ["title", "Rating left by the conversation owner \u2014 read-only", 1, "rating-readonly"], ["type", "button", 1, "rating-button", 3, "click", "disabled", "title"], [1, "fa-solid", "fa-pen-to-square"], [1, "my-rating"], [1, "fa-regular", "fa-comment-dots"], [1, "fa-solid", "fa-comment-dots"]], template: function ConversationMessageRatingComponent_Template(rf, ctx) { if (rf & 1) {
313
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ConversationMessageRatingComponent, selectors: [["mj-conversation-message-rating"]], inputs: { ConversationDetailId: "ConversationDetailId", conversationDetailId: "conversationDetailId", CurrentUser: "CurrentUser", currentUser: "currentUser", canEdit: "canEdit", RatingEntityName: "RatingEntityName", ratingEntityName: "ratingEntityName", RatingField: "RatingField", ratingField: "ratingField", RatingCommentField: "RatingCommentField", ratingCommentField: "ratingCommentField", RatingsData: "RatingsData", ratingsData: "ratingsData" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 1, consts: [[1, "rating-container"], [1, "user-rating"], ["type", "button", 1, "rating-button", 3, "has-rated", "disabled", "title"], ["title", "Rating left by the conversation owner \u2014 read-only", 1, "rating-readonly"], ["type", "button", 1, "rating-button", 3, "click", "disabled", "title"], [1, "fa-solid", "fa-pen-to-square"], [1, "my-rating"], [1, "fa-regular", "fa-comment-dots"], [1, "fa-solid", "fa-comment-dots"]], template: function ConversationMessageRatingComponent_Template(rf, ctx) { if (rf & 1) {
242
314
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
243
315
  i0.ɵɵconditionalCreate(2, ConversationMessageRatingComponent_Conditional_2_Template, 3, 5, "button", 2)(3, ConversationMessageRatingComponent_Conditional_3_Template, 4, 1, "span", 3);
244
316
  i0.ɵɵelementEnd()();
@@ -278,18 +350,30 @@ export class ConversationMessageRatingComponent extends BaseAngularComponent {
278
350
  </div>
279
351
  </div>
280
352
  `, styles: ["\n .rating-container {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 4px 0;\n }\n\n .user-rating {\n display: flex;\n gap: 4px;\n margin-left: auto;\n }\n\n .rating-button {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n padding: 6px 12px;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n opacity: 0.85;\n transition: all 0.15s ease;\n }\n\n .rating-button:hover:not(:disabled) {\n opacity: 1;\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n }\n\n .rating-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .rating-button.has-rated {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n }\n\n .my-rating {\n font-weight: 500;\n }\n\n .rating-readonly {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n cursor: default;\n }\n "] }]
281
- }], () => [{ type: i0.ChangeDetectorRef }, { type: i1.DialogService }], { conversationDetailId: [{
353
+ }], () => [{ type: i0.ChangeDetectorRef }, { type: i1.DialogService }], { ConversationDetailId: [{
354
+ type: Input
355
+ }], conversationDetailId: [{
356
+ type: Input
357
+ }], CurrentUser: [{
282
358
  type: Input
283
359
  }], currentUser: [{
284
360
  type: Input
285
361
  }], canEdit: [{
286
362
  type: Input
363
+ }], RatingEntityName: [{
364
+ type: Input
287
365
  }], ratingEntityName: [{
288
366
  type: Input
367
+ }], RatingField: [{
368
+ type: Input
289
369
  }], ratingField: [{
290
370
  type: Input
371
+ }], RatingCommentField: [{
372
+ type: Input
291
373
  }], ratingCommentField: [{
292
374
  type: Input
375
+ }], RatingsData: [{
376
+ type: Input
293
377
  }], ratingsData: [{
294
378
  type: Input
295
379
  }] }); })();