@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
@@ -170,19 +170,67 @@ function ConversationWorkspaceComponent_Conditional_4_Template(rf, ctx) { if (rf
170
170
  * is the preferred approach for MJExplorer integration.
171
171
  */
172
172
  export class ConversationWorkspaceComponent extends BaseAngularComponent {
173
- artifactState;
174
- collectionState;
173
+ ArtifactState;
174
+ CollectionState;
175
175
  artifactPermissionService;
176
176
  notificationService;
177
177
  streamingService;
178
178
  uiCommandHandler;
179
179
  cdr;
180
- environmentId;
181
- initialConversationId;
182
- layout = 'full';
183
- currentUser;
184
- activeContext;
185
- contextItemId;
180
+ EnvironmentId;
181
+ /** @deprecated Use {@link EnvironmentId}. */
182
+ set environmentId(value) {
183
+ this.EnvironmentId = value;
184
+ }
185
+ /** @deprecated Use {@link EnvironmentId}. */
186
+ get environmentId() {
187
+ return this.EnvironmentId;
188
+ }
189
+ InitialConversationId;
190
+ /** @deprecated Use {@link InitialConversationId}. */
191
+ set initialConversationId(value) {
192
+ this.InitialConversationId = value;
193
+ }
194
+ /** @deprecated Use {@link InitialConversationId}. */
195
+ get initialConversationId() {
196
+ return this.InitialConversationId;
197
+ }
198
+ Layout = 'full';
199
+ /** @deprecated Use {@link Layout}. */
200
+ set layout(value) {
201
+ this.Layout = value;
202
+ }
203
+ /** @deprecated Use {@link Layout}. */
204
+ get layout() {
205
+ return this.Layout;
206
+ }
207
+ CurrentUser;
208
+ /** @deprecated Use {@link CurrentUser}. */
209
+ set currentUser(value) {
210
+ this.CurrentUser = value;
211
+ }
212
+ /** @deprecated Use {@link CurrentUser}. */
213
+ get currentUser() {
214
+ return this.CurrentUser;
215
+ }
216
+ ActiveContext;
217
+ /** @deprecated Use {@link ActiveContext}. */
218
+ set activeContext(value) {
219
+ this.ActiveContext = value;
220
+ }
221
+ /** @deprecated Use {@link ActiveContext}. */
222
+ get activeContext() {
223
+ return this.ActiveContext;
224
+ }
225
+ ContextItemId;
226
+ /** @deprecated Use {@link ContextItemId}. */
227
+ set contextItemId(value) {
228
+ this.ContextItemId = value;
229
+ }
230
+ /** @deprecated Use {@link ContextItemId}. */
231
+ get contextItemId() {
232
+ return this.ContextItemId;
233
+ }
186
234
  /**
187
235
  * Show the Routines section at the very bottom of the left sidebar. Default true;
188
236
  * hosts that don't want routines (or embed a reduced chat surface) set false.
@@ -191,79 +239,327 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
191
239
  */
192
240
  ShowRoutines = true;
193
241
  // Navigation properties for external control (deep linking from URL)
194
- set activeTabInput(value) {
195
- if (value && value !== this.activeTab) {
196
- this.activeTab = value;
242
+ set ActiveTabInput(value) {
243
+ if (value && value !== this.ActiveTab) {
244
+ this.ActiveTab = value;
197
245
  }
198
246
  }
199
- set activeConversationInput(value) {
200
- if (value && value !== this.selectedConversationId) {
247
+ /** @deprecated Use {@link ActiveTabInput}. */
248
+ set activeTabInput(value) {
249
+ this.ActiveTabInput = value;
250
+ }
251
+ set ActiveConversationInput(value) {
252
+ if (value && value !== this.SelectedConversationId) {
201
253
  console.log('🔗 Deep link to conversation:', value);
202
- this.activeTab = 'conversations';
203
- this.setActiveConversation(value);
254
+ this.ActiveTab = 'conversations';
255
+ this.SetActiveConversation(value);
204
256
  }
205
257
  }
206
- set activeCollectionInput(value) {
207
- if (value && value !== this.collectionState.activeCollectionId) {
258
+ /** @deprecated Use {@link ActiveConversationInput}. */
259
+ set activeConversationInput(value) {
260
+ this.ActiveConversationInput = value;
261
+ }
262
+ set ActiveCollectionInput(value) {
263
+ if (value && value !== this.CollectionState.activeCollectionId) {
208
264
  console.log('🔗 Deep link to collection:', value);
209
- this.activeTab = 'collections';
210
- this.collectionState.setActiveCollection(value);
265
+ this.ActiveTab = 'collections';
266
+ this.CollectionState.setActiveCollection(value);
211
267
  }
212
268
  }
213
- set activeVersionIdInput(value) {
214
- if (value && value !== this.activeVersionId) {
269
+ /** @deprecated Use {@link ActiveCollectionInput}. */
270
+ set activeCollectionInput(value) {
271
+ this.ActiveCollectionInput = value;
272
+ }
273
+ set ActiveVersionIdInput(value) {
274
+ if (value && value !== this.ActiveVersionId) {
215
275
  console.log('🔗 Deep link to version:', value);
216
- this.activeTab = 'collections';
276
+ this.ActiveTab = 'collections';
217
277
  // Store the version ID immediately to prevent ngDoCheck from clearing it
218
- this.activeVersionId = value;
278
+ this.ActiveVersionId = value;
219
279
  // Open artifact by version ID
220
- this.artifactState.openArtifactByVersionId(value);
280
+ this.ArtifactState.openArtifactByVersionId(value);
221
281
  }
222
282
  }
223
- set activeTaskInput(value) {
283
+ /** @deprecated Use {@link ActiveVersionIdInput}. */
284
+ set activeVersionIdInput(value) {
285
+ this.ActiveVersionIdInput = value;
286
+ }
287
+ set ActiveTaskInput(value) {
224
288
  if (value && value !== this._activeTaskId) {
225
289
  this._activeTaskId = value;
226
290
  }
227
291
  }
292
+ /** @deprecated Use {@link ActiveTaskInput}. */
293
+ set activeTaskInput(value) {
294
+ this.ActiveTaskInput = value;
295
+ }
228
296
  _activeTaskId;
229
- get activeTaskId() {
297
+ get ActiveTaskId() {
230
298
  return this._activeTaskId;
231
299
  }
232
- conversationChanged = new EventEmitter();
233
- artifactOpened = new EventEmitter();
234
- navigationChanged = new EventEmitter();
235
- newConversationStarted = new EventEmitter();
236
- actionableCommandExecuted = new EventEmitter();
237
- automaticCommandExecuted = new EventEmitter();
238
- navigationRequested = new EventEmitter();
239
- activeTab = 'conversations';
240
- isSidebarVisible = true;
241
- isArtifactPanelOpen = false;
242
- isSearchPanelOpen = false;
243
- isWorkspaceReady = false;
244
- renamedConversationId = null;
245
- activeArtifactId = null;
246
- activeVersionNumber = null;
247
- activeVersionId = null;
248
- isMobileView = false;
249
- isSidebarPinned = false; // Default unpinned until settings load (prevents flicker)
300
+ /** @deprecated Use {@link ActiveTaskId}. */
301
+ get activeTaskId() {
302
+ return this.ActiveTaskId;
303
+ }
304
+ ConversationChanged = new EventEmitter();
305
+ /**
306
+ * @deprecated Use {@link ConversationChanged}.
307
+ *
308
+ * The same emitter under the old binding name, so a template still binding
309
+ * (conversationChanged) keeps working. Must stay AFTER ConversationChanged: class fields
310
+ * initialise in order, and the other way round this captures undefined.
311
+ */
312
+ conversationChanged = this.ConversationChanged;
313
+ ArtifactOpened = new EventEmitter();
314
+ /**
315
+ * @deprecated Use {@link ArtifactOpened}.
316
+ *
317
+ * The same emitter under the old binding name, so a template still binding
318
+ * (artifactOpened) keeps working. Must stay AFTER ArtifactOpened: class fields
319
+ * initialise in order, and the other way round this captures undefined.
320
+ */
321
+ artifactOpened = this.ArtifactOpened;
322
+ NavigationChanged = new EventEmitter();
323
+ /**
324
+ * @deprecated Use {@link NavigationChanged}.
325
+ *
326
+ * The same emitter under the old binding name, so a template still binding
327
+ * (navigationChanged) keeps working. Must stay AFTER NavigationChanged: class fields
328
+ * initialise in order, and the other way round this captures undefined.
329
+ */
330
+ navigationChanged = this.NavigationChanged;
331
+ NewConversationStarted = new EventEmitter();
332
+ /**
333
+ * @deprecated Use {@link NewConversationStarted}.
334
+ *
335
+ * The same emitter under the old binding name, so a template still binding
336
+ * (newConversationStarted) keeps working. Must stay AFTER NewConversationStarted: class fields
337
+ * initialise in order, and the other way round this captures undefined.
338
+ */
339
+ newConversationStarted = this.NewConversationStarted;
340
+ ActionableCommandExecuted = new EventEmitter();
341
+ /**
342
+ * @deprecated Use {@link ActionableCommandExecuted}.
343
+ *
344
+ * The same emitter under the old binding name, so a template still binding
345
+ * (actionableCommandExecuted) keeps working. Must stay AFTER ActionableCommandExecuted: class fields
346
+ * initialise in order, and the other way round this captures undefined.
347
+ */
348
+ actionableCommandExecuted = this.ActionableCommandExecuted;
349
+ AutomaticCommandExecuted = new EventEmitter();
350
+ /**
351
+ * @deprecated Use {@link AutomaticCommandExecuted}.
352
+ *
353
+ * The same emitter under the old binding name, so a template still binding
354
+ * (automaticCommandExecuted) keeps working. Must stay AFTER AutomaticCommandExecuted: class fields
355
+ * initialise in order, and the other way round this captures undefined.
356
+ */
357
+ automaticCommandExecuted = this.AutomaticCommandExecuted;
358
+ NavigationRequested = new EventEmitter();
359
+ /**
360
+ * @deprecated Use {@link NavigationRequested}.
361
+ *
362
+ * The same emitter under the old binding name, so a template still binding
363
+ * (navigationRequested) keeps working. Must stay AFTER NavigationRequested: class fields
364
+ * initialise in order, and the other way round this captures undefined.
365
+ */
366
+ navigationRequested = this.NavigationRequested;
367
+ ActiveTab = 'conversations';
368
+ /** @deprecated Use {@link ActiveTab}. */
369
+ get activeTab() {
370
+ return this.ActiveTab;
371
+ }
372
+ /** @deprecated Use {@link ActiveTab}. */
373
+ set activeTab(value) {
374
+ this.ActiveTab = value;
375
+ }
376
+ IsSidebarVisible = true;
377
+ /** @deprecated Use {@link IsSidebarVisible}. */
378
+ get isSidebarVisible() {
379
+ return this.IsSidebarVisible;
380
+ }
381
+ /** @deprecated Use {@link IsSidebarVisible}. */
382
+ set isSidebarVisible(value) {
383
+ this.IsSidebarVisible = value;
384
+ }
385
+ IsArtifactPanelOpen = false;
386
+ /** @deprecated Use {@link IsArtifactPanelOpen}. */
387
+ get isArtifactPanelOpen() {
388
+ return this.IsArtifactPanelOpen;
389
+ }
390
+ /** @deprecated Use {@link IsArtifactPanelOpen}. */
391
+ set isArtifactPanelOpen(value) {
392
+ this.IsArtifactPanelOpen = value;
393
+ }
394
+ IsSearchPanelOpen = false;
395
+ /** @deprecated Use {@link IsSearchPanelOpen}. */
396
+ get isSearchPanelOpen() {
397
+ return this.IsSearchPanelOpen;
398
+ }
399
+ /** @deprecated Use {@link IsSearchPanelOpen}. */
400
+ set isSearchPanelOpen(value) {
401
+ this.IsSearchPanelOpen = value;
402
+ }
403
+ IsWorkspaceReady = false;
404
+ /** @deprecated Use {@link IsWorkspaceReady}. */
405
+ get isWorkspaceReady() {
406
+ return this.IsWorkspaceReady;
407
+ }
408
+ /** @deprecated Use {@link IsWorkspaceReady}. */
409
+ set isWorkspaceReady(value) {
410
+ this.IsWorkspaceReady = value;
411
+ }
412
+ RenamedConversationId = null;
413
+ /** @deprecated Use {@link RenamedConversationId}. */
414
+ get renamedConversationId() {
415
+ return this.RenamedConversationId;
416
+ }
417
+ /** @deprecated Use {@link RenamedConversationId}. */
418
+ set renamedConversationId(value) {
419
+ this.RenamedConversationId = value;
420
+ }
421
+ ActiveArtifactId = null;
422
+ /** @deprecated Use {@link ActiveArtifactId}. */
423
+ get activeArtifactId() {
424
+ return this.ActiveArtifactId;
425
+ }
426
+ /** @deprecated Use {@link ActiveArtifactId}. */
427
+ set activeArtifactId(value) {
428
+ this.ActiveArtifactId = value;
429
+ }
430
+ ActiveVersionNumber = null;
431
+ /** @deprecated Use {@link ActiveVersionNumber}. */
432
+ get activeVersionNumber() {
433
+ return this.ActiveVersionNumber;
434
+ }
435
+ /** @deprecated Use {@link ActiveVersionNumber}. */
436
+ set activeVersionNumber(value) {
437
+ this.ActiveVersionNumber = value;
438
+ }
439
+ ActiveVersionId = null;
440
+ /** @deprecated Use {@link ActiveVersionId}. */
441
+ get activeVersionId() {
442
+ return this.ActiveVersionId;
443
+ }
444
+ /** @deprecated Use {@link ActiveVersionId}. */
445
+ set activeVersionId(value) {
446
+ this.ActiveVersionId = value;
447
+ }
448
+ IsMobileView = false;
449
+ /** @deprecated Use {@link IsMobileView}. */
450
+ get isMobileView() {
451
+ return this.IsMobileView;
452
+ }
453
+ /** @deprecated Use {@link IsMobileView}. */
454
+ set isMobileView(value) {
455
+ this.IsMobileView = value;
456
+ }
457
+ IsSidebarPinned = false;
458
+ /** @deprecated Use {@link IsSidebarPinned}. */
459
+ get isSidebarPinned() {
460
+ return this.IsSidebarPinned;
461
+ }
462
+ /** @deprecated Use {@link IsSidebarPinned}. */
463
+ set isSidebarPinned(value) {
464
+ this.IsSidebarPinned = value;
465
+ } // Default unpinned until settings load (prevents flicker)
250
466
  // Artifact permissions
251
- canShareActiveArtifact = false;
252
- canEditActiveArtifact = false;
467
+ CanShareActiveArtifact = false;
468
+ /** @deprecated Use {@link CanShareActiveArtifact}. */
469
+ get canShareActiveArtifact() {
470
+ return this.CanShareActiveArtifact;
471
+ }
472
+ /** @deprecated Use {@link CanShareActiveArtifact}. */
473
+ set canShareActiveArtifact(value) {
474
+ this.CanShareActiveArtifact = value;
475
+ }
476
+ CanEditActiveArtifact = false;
477
+ /** @deprecated Use {@link CanEditActiveArtifact}. */
478
+ get canEditActiveArtifact() {
479
+ return this.CanEditActiveArtifact;
480
+ }
481
+ /** @deprecated Use {@link CanEditActiveArtifact}. */
482
+ set canEditActiveArtifact(value) {
483
+ this.CanEditActiveArtifact = value;
484
+ }
253
485
  // Share modal state
254
- isArtifactShareModalOpen = false;
255
- artifactToShare = null;
486
+ IsArtifactShareModalOpen = false;
487
+ /** @deprecated Use {@link IsArtifactShareModalOpen}. */
488
+ get isArtifactShareModalOpen() {
489
+ return this.IsArtifactShareModalOpen;
490
+ }
491
+ /** @deprecated Use {@link IsArtifactShareModalOpen}. */
492
+ set isArtifactShareModalOpen(value) {
493
+ this.IsArtifactShareModalOpen = value;
494
+ }
495
+ ArtifactToShare = null;
496
+ /** @deprecated Use {@link ArtifactToShare}. */
497
+ get artifactToShare() {
498
+ return this.ArtifactToShare;
499
+ }
500
+ /** @deprecated Use {@link ArtifactToShare}. */
501
+ set artifactToShare(value) {
502
+ this.ArtifactToShare = value;
503
+ }
256
504
  // Resize state - Sidebar
257
- sidebarWidth = 260; // Default width
258
- isSidebarCollapsed = true; // Default collapsed until settings load (prevents flicker)
259
- sidebarTransitionsEnabled = false; // Disabled during initial load to prevent jarring animation
260
- isSidebarSettingsLoaded = false; // Tracks whether settings have been loaded (prevents render before state is known)
505
+ SidebarWidth = 260;
506
+ /** @deprecated Use {@link SidebarWidth}. */
507
+ get sidebarWidth() {
508
+ return this.SidebarWidth;
509
+ }
510
+ /** @deprecated Use {@link SidebarWidth}. */
511
+ set sidebarWidth(value) {
512
+ this.SidebarWidth = value;
513
+ } // Default width
514
+ IsSidebarCollapsed = true;
515
+ /** @deprecated Use {@link IsSidebarCollapsed}. */
516
+ get isSidebarCollapsed() {
517
+ return this.IsSidebarCollapsed;
518
+ }
519
+ /** @deprecated Use {@link IsSidebarCollapsed}. */
520
+ set isSidebarCollapsed(value) {
521
+ this.IsSidebarCollapsed = value;
522
+ } // Default collapsed until settings load (prevents flicker)
523
+ SidebarTransitionsEnabled = false;
524
+ /** @deprecated Use {@link SidebarTransitionsEnabled}. */
525
+ get sidebarTransitionsEnabled() {
526
+ return this.SidebarTransitionsEnabled;
527
+ }
528
+ /** @deprecated Use {@link SidebarTransitionsEnabled}. */
529
+ set sidebarTransitionsEnabled(value) {
530
+ this.SidebarTransitionsEnabled = value;
531
+ } // Disabled during initial load to prevent jarring animation
532
+ IsSidebarSettingsLoaded = false;
533
+ /** @deprecated Use {@link IsSidebarSettingsLoaded}. */
534
+ get isSidebarSettingsLoaded() {
535
+ return this.IsSidebarSettingsLoaded;
536
+ }
537
+ /** @deprecated Use {@link IsSidebarSettingsLoaded}. */
538
+ set isSidebarSettingsLoaded(value) {
539
+ this.IsSidebarSettingsLoaded = value;
540
+ } // Tracks whether settings have been loaded (prevents render before state is known)
261
541
  isSidebarResizing = false;
262
542
  sidebarResizeStartX = 0;
263
543
  sidebarResizeStartWidth = 0;
264
544
  // Resize state - Artifact Panel
265
- artifactPanelWidth = 40; // Default 40% width
266
- isArtifactPanelMaximized = false;
545
+ ArtifactPanelWidth = 40;
546
+ /** @deprecated Use {@link ArtifactPanelWidth}. */
547
+ get artifactPanelWidth() {
548
+ return this.ArtifactPanelWidth;
549
+ }
550
+ /** @deprecated Use {@link ArtifactPanelWidth}. */
551
+ set artifactPanelWidth(value) {
552
+ this.ArtifactPanelWidth = value;
553
+ } // Default 40% width
554
+ IsArtifactPanelMaximized = false;
555
+ /** @deprecated Use {@link IsArtifactPanelMaximized}. */
556
+ get isArtifactPanelMaximized() {
557
+ return this.IsArtifactPanelMaximized;
558
+ }
559
+ /** @deprecated Use {@link IsArtifactPanelMaximized}. */
560
+ set isArtifactPanelMaximized(value) {
561
+ this.IsArtifactPanelMaximized = value;
562
+ }
267
563
  artifactPanelWidthBeforeMaximize = 40; // Store width before maximizing
268
564
  isArtifactPanelResizing = false;
269
565
  artifactPanelResizeStartX = 0;
@@ -283,35 +579,139 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
283
579
  saveSettingsTimeout = null;
284
580
  isLoadingSettings = false;
285
581
  // Task filter for conversation-specific filtering
286
- tasksFilter = '1=1';
582
+ TasksFilter = '1=1';
583
+ /** @deprecated Use {@link TasksFilter}. */
584
+ get tasksFilter() {
585
+ return this.TasksFilter;
586
+ }
587
+ /** @deprecated Use {@link TasksFilter}. */
588
+ set tasksFilter(value) {
589
+ this.TasksFilter = value;
590
+ }
287
591
  // LOCAL CONVERSATION STATE - enables multiple workspace instances
288
592
  // Each workspace manages its own selection state independently
289
- selectedConversationId = null;
290
- selectedConversation = null;
291
- selectedThreadId = null;
292
- isNewUnsavedConversation = false;
293
- pendingMessageToSend = null;
294
- pendingAttachmentsToSend = null;
593
+ SelectedConversationId = null;
594
+ /** @deprecated Use {@link SelectedConversationId}. */
595
+ get selectedConversationId() {
596
+ return this.SelectedConversationId;
597
+ }
598
+ /** @deprecated Use {@link SelectedConversationId}. */
599
+ set selectedConversationId(value) {
600
+ this.SelectedConversationId = value;
601
+ }
602
+ SelectedConversation = null;
603
+ /** @deprecated Use {@link SelectedConversation}. */
604
+ get selectedConversation() {
605
+ return this.SelectedConversation;
606
+ }
607
+ /** @deprecated Use {@link SelectedConversation}. */
608
+ set selectedConversation(value) {
609
+ this.SelectedConversation = value;
610
+ }
611
+ SelectedThreadId = null;
612
+ /** @deprecated Use {@link SelectedThreadId}. */
613
+ get selectedThreadId() {
614
+ return this.SelectedThreadId;
615
+ }
616
+ /** @deprecated Use {@link SelectedThreadId}. */
617
+ set selectedThreadId(value) {
618
+ this.SelectedThreadId = value;
619
+ }
620
+ IsNewUnsavedConversation = false;
621
+ /** @deprecated Use {@link IsNewUnsavedConversation}. */
622
+ get isNewUnsavedConversation() {
623
+ return this.IsNewUnsavedConversation;
624
+ }
625
+ /** @deprecated Use {@link IsNewUnsavedConversation}. */
626
+ set isNewUnsavedConversation(value) {
627
+ this.IsNewUnsavedConversation = value;
628
+ }
629
+ PendingMessageToSend = null;
630
+ /** @deprecated Use {@link PendingMessageToSend}. */
631
+ get pendingMessageToSend() {
632
+ return this.PendingMessageToSend;
633
+ }
634
+ /** @deprecated Use {@link PendingMessageToSend}. */
635
+ set pendingMessageToSend(value) {
636
+ this.PendingMessageToSend = value;
637
+ }
638
+ PendingAttachmentsToSend = null;
639
+ /** @deprecated Use {@link PendingAttachmentsToSend}. */
640
+ get pendingAttachmentsToSend() {
641
+ return this.PendingAttachmentsToSend;
642
+ }
643
+ /** @deprecated Use {@link PendingAttachmentsToSend}. */
644
+ set pendingAttachmentsToSend(value) {
645
+ this.PendingAttachmentsToSend = value;
646
+ }
295
647
  /** The conversation pendingMessageToSend is destined for — bound to the chat-area so the
296
648
  * auto-send reaches only that conversation's input, even if the user swaps conversations
297
649
  * during the async send window (prevents the message bleeding into the swapped-to conversation). */
298
- pendingMessageConversationId = null;
299
- pendingArtifactId = null;
300
- pendingArtifactConversationId = null;
301
- pendingArtifactVersionNumber = null;
650
+ PendingMessageConversationId = null;
651
+ /** @deprecated Use {@link PendingMessageConversationId}. */
652
+ get pendingMessageConversationId() {
653
+ return this.PendingMessageConversationId;
654
+ }
655
+ /** @deprecated Use {@link PendingMessageConversationId}. */
656
+ set pendingMessageConversationId(value) {
657
+ this.PendingMessageConversationId = value;
658
+ }
659
+ PendingArtifactId = null;
660
+ /** @deprecated Use {@link PendingArtifactId}. */
661
+ get pendingArtifactId() {
662
+ return this.PendingArtifactId;
663
+ }
664
+ /** @deprecated Use {@link PendingArtifactId}. */
665
+ set pendingArtifactId(value) {
666
+ this.PendingArtifactId = value;
667
+ }
668
+ PendingArtifactConversationId = null;
669
+ /** @deprecated Use {@link PendingArtifactConversationId}. */
670
+ get pendingArtifactConversationId() {
671
+ return this.PendingArtifactConversationId;
672
+ }
673
+ /** @deprecated Use {@link PendingArtifactConversationId}. */
674
+ set pendingArtifactConversationId(value) {
675
+ this.PendingArtifactConversationId = value;
676
+ }
677
+ PendingArtifactVersionNumber = null;
678
+ /** @deprecated Use {@link PendingArtifactVersionNumber}. */
679
+ get pendingArtifactVersionNumber() {
680
+ return this.PendingArtifactVersionNumber;
681
+ }
682
+ /** @deprecated Use {@link PendingArtifactVersionNumber}. */
683
+ set pendingArtifactVersionNumber(value) {
684
+ this.PendingArtifactVersionNumber = value;
685
+ }
302
686
  engine = ConversationEngine.Instance;
303
687
  // Shared AI mention/suggestion engine (BaseSingleton — same instance the composer plugins use)
304
688
  mentionAutocompleteService = MentionAutocompleteService.Instance;
305
- constructor(artifactState, collectionState, artifactPermissionService, notificationService, streamingService, uiCommandHandler, cdr) {
689
+ constructor(ArtifactState, CollectionState, artifactPermissionService, notificationService, streamingService, uiCommandHandler, cdr) {
306
690
  super();
307
- this.artifactState = artifactState;
308
- this.collectionState = collectionState;
691
+ this.ArtifactState = ArtifactState;
692
+ this.CollectionState = CollectionState;
309
693
  this.artifactPermissionService = artifactPermissionService;
310
694
  this.notificationService = notificationService;
311
695
  this.streamingService = streamingService;
312
696
  this.uiCommandHandler = uiCommandHandler;
313
697
  this.cdr = cdr;
314
698
  }
699
+ /** @deprecated Use {@link ArtifactState}. */
700
+ get artifactState() {
701
+ return this.ArtifactState;
702
+ }
703
+ /** @deprecated Use {@link ArtifactState}. */
704
+ set artifactState(value) {
705
+ this.ArtifactState = value;
706
+ }
707
+ /** @deprecated Use {@link CollectionState}. */
708
+ get collectionState() {
709
+ return this.CollectionState;
710
+ }
711
+ /** @deprecated Use {@link CollectionState}. */
712
+ set collectionState(value) {
713
+ this.CollectionState = value;
714
+ }
315
715
  // =========================================================================
316
716
  // LOCAL CONVERSATION STATE MANAGEMENT
317
717
  // These methods manage the workspace's local selection state
@@ -320,62 +720,86 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
320
720
  * Sets the active conversation for this workspace instance
321
721
  * @param id The conversation ID to activate (or null to clear)
322
722
  */
323
- setActiveConversation(id) {
723
+ SetActiveConversation(id) {
324
724
  console.log('🎯 Setting active conversation:', id);
325
- this.selectedConversationId = id;
326
- this.selectedConversation = id ? (this.engine.GetConversation(id) ?? null) : null;
725
+ this.SelectedConversationId = id;
726
+ this.SelectedConversation = id ? (this.engine.GetConversation(id) ?? null) : null;
327
727
  // Clear unsaved state when switching to an existing conversation
328
728
  if (id) {
329
- this.isNewUnsavedConversation = false;
729
+ this.IsNewUnsavedConversation = false;
330
730
  }
331
731
  }
732
+ /** @deprecated Use {@link SetActiveConversation}. */
733
+ setActiveConversation(id) {
734
+ return this.SetActiveConversation(id);
735
+ }
332
736
  /**
333
737
  * Initiates a new unsaved conversation (doesn't create DB record yet)
334
738
  * This shows the welcome screen and delays DB creation until first message
335
739
  */
336
- startNewConversation() {
740
+ StartNewConversation() {
337
741
  console.log('✨ Starting new unsaved conversation');
338
- this.selectedConversationId = null;
339
- this.selectedConversation = null;
340
- this.isNewUnsavedConversation = true;
341
- this.pendingMessageToSend = null;
342
- this.pendingAttachmentsToSend = null;
343
- this.pendingMessageConversationId = null;
742
+ this.SelectedConversationId = null;
743
+ this.SelectedConversation = null;
744
+ this.IsNewUnsavedConversation = true;
745
+ this.PendingMessageToSend = null;
746
+ this.PendingAttachmentsToSend = null;
747
+ this.PendingMessageConversationId = null;
344
748
  // Auto-collapse if mobile OR if sidebar is not pinned
345
- if (this.isMobileView || !this.isSidebarPinned) {
346
- this.collapseSidebar();
749
+ if (this.IsMobileView || !this.IsSidebarPinned) {
750
+ this.CollapseSidebar();
347
751
  }
348
752
  }
753
+ /** @deprecated Use {@link StartNewConversation}. */
754
+ startNewConversation() {
755
+ return this.StartNewConversation();
756
+ }
349
757
  /**
350
758
  * Clears the new unsaved conversation state
351
759
  * Called when the conversation is actually created or cancelled
352
760
  */
761
+ ClearNewConversationState() {
762
+ this.IsNewUnsavedConversation = false;
763
+ }
764
+ /** @deprecated Use {@link ClearNewConversationState}. */
353
765
  clearNewConversationState() {
354
- this.isNewUnsavedConversation = false;
766
+ return this.ClearNewConversationState();
355
767
  }
356
768
  /**
357
769
  * Opens a thread panel for a specific message
358
770
  * @param messageId The parent message ID
359
771
  */
772
+ OpenThread(messageId) {
773
+ this.SelectedThreadId = messageId;
774
+ }
775
+ /** @deprecated Use {@link OpenThread}. */
360
776
  openThread(messageId) {
361
- this.selectedThreadId = messageId;
777
+ return this.OpenThread(messageId);
362
778
  }
363
779
  /**
364
780
  * Closes the currently open thread panel
365
781
  */
782
+ CloseThread() {
783
+ this.SelectedThreadId = null;
784
+ }
785
+ /** @deprecated Use {@link CloseThread}. */
366
786
  closeThread() {
367
- this.selectedThreadId = null;
787
+ return this.CloseThread();
368
788
  }
369
789
  /**
370
790
  * Handler for conversation selection from sidebar/list
371
791
  */
372
- onConversationSelected(conversationId) {
373
- this.setActiveConversation(conversationId);
792
+ OnConversationSelected(conversationId) {
793
+ this.SetActiveConversation(conversationId);
374
794
  // Auto-collapse if mobile OR if sidebar is not pinned
375
- if (this.isMobileView || !this.isSidebarPinned) {
376
- this.collapseSidebar();
795
+ if (this.IsMobileView || !this.IsSidebarPinned) {
796
+ this.CollapseSidebar();
377
797
  }
378
798
  }
799
+ /** @deprecated Use {@link OnConversationSelected}. */
800
+ onConversationSelected(conversationId) {
801
+ return this.OnConversationSelected(conversationId);
802
+ }
379
803
  /**
380
804
  * Handler for new conversation creation from chat area
381
805
  * Now includes pending message and attachments to ensure atomic state update
@@ -387,15 +811,15 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
387
811
  * spec: the user may have the sidebar hidden; don't yank their context if so —
388
812
  * the refreshed cache makes it appear whenever the list is reopened).
389
813
  */
390
- async onRealtimeConversationReady(event) {
814
+ async OnRealtimeConversationReady(event) {
391
815
  try {
392
- await ConversationEngine.Instance.LoadConversations(this.environmentId, this.currentUser, true);
393
- if (event.select && this.isSidebarVisible) {
816
+ await ConversationEngine.Instance.LoadConversations(this.EnvironmentId, this.CurrentUser, true);
817
+ if (event.select && this.IsSidebarVisible) {
394
818
  const conversation = ConversationEngine.Instance.Conversations.find(c => UUIDsEqual(c.ID, event.conversationId));
395
819
  if (conversation) {
396
- this.selectedConversationId = conversation.ID;
397
- this.selectedConversation = conversation;
398
- this.isNewUnsavedConversation = false;
820
+ this.SelectedConversationId = conversation.ID;
821
+ this.SelectedConversation = conversation;
822
+ this.IsNewUnsavedConversation = false;
399
823
  }
400
824
  }
401
825
  }
@@ -403,50 +827,66 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
403
827
  console.error('onRealtimeConversationReady ERROR:', error);
404
828
  }
405
829
  }
406
- onConversationCreated(event) {
830
+ /** @deprecated Use {@link OnRealtimeConversationReady}. */
831
+ async onRealtimeConversationReady(event) {
832
+ return this.OnRealtimeConversationReady(event);
833
+ }
834
+ OnConversationCreated(event) {
407
835
  try {
408
836
  // Set ALL state atomically before Angular change detection runs
409
837
  // This ensures the new message-input component receives the pending data
410
- this.pendingMessageToSend = event.pendingMessage || null;
411
- this.pendingAttachmentsToSend = event.pendingAttachments || null;
838
+ this.PendingMessageToSend = event.pendingMessage || null;
839
+ this.PendingAttachmentsToSend = event.pendingAttachments || null;
412
840
  // Pin the pending message to THIS conversation so a fast conversation-swap can't
413
841
  // redirect its auto-send into a different conversation.
414
- this.pendingMessageConversationId = event.conversation.ID;
415
- this.selectedConversationId = event.conversation.ID;
416
- this.selectedConversation = event.conversation;
417
- this.isNewUnsavedConversation = false;
842
+ this.PendingMessageConversationId = event.conversation.ID;
843
+ this.SelectedConversationId = event.conversation.ID;
844
+ this.SelectedConversation = event.conversation;
845
+ this.IsNewUnsavedConversation = false;
418
846
  // The conversation is already added to ConversationEngine by the chat area
419
847
  }
420
848
  catch (error) {
421
849
  console.error('onConversationCreated ERROR:', error);
422
850
  }
423
851
  }
852
+ /** @deprecated Use {@link OnConversationCreated}. */
853
+ onConversationCreated(event) {
854
+ return this.OnConversationCreated(event);
855
+ }
424
856
  /**
425
857
  * Handler for pending message requested from chat area (empty state)
426
858
  * @deprecated Use onConversationCreated with pendingMessage instead
427
859
  */
428
860
  onPendingMessageRequested(event) {
429
- this.pendingMessageToSend = event.text;
430
- this.pendingAttachmentsToSend = event.attachments;
431
- this.pendingMessageConversationId = this.selectedConversationId;
861
+ this.PendingMessageToSend = event.text;
862
+ this.PendingAttachmentsToSend = event.attachments;
863
+ this.PendingMessageConversationId = this.SelectedConversationId;
432
864
  }
433
865
  /**
434
866
  * Handler for thread opened from chat area
435
867
  */
868
+ OnThreadOpened(threadId) {
869
+ this.SelectedThreadId = threadId;
870
+ }
871
+ /** @deprecated Use {@link OnThreadOpened}. */
436
872
  onThreadOpened(threadId) {
437
- this.selectedThreadId = threadId;
873
+ return this.OnThreadOpened(threadId);
438
874
  }
439
875
  /**
440
876
  * Handler for thread closed from chat area
441
877
  */
878
+ OnThreadClosed() {
879
+ this.SelectedThreadId = null;
880
+ }
881
+ /** @deprecated Use {@link OnThreadClosed}. */
442
882
  onThreadClosed() {
443
- this.selectedThreadId = null;
883
+ return this.OnThreadClosed();
444
884
  }
445
885
  async ngOnInit() {
446
886
  // Bind provider-aware services to this component's provider so multi-server
447
887
  // browser apps don't silently fall back to the global Metadata.Provider.
448
888
  // ArtifactStateService cascades to ArtifactPermissionService and CollectionPermissionService.
449
- this.artifactState.Provider = this.ProviderToUse;
889
+ this.ArtifactState.Provider = this.ProviderToUse;
450
890
  this.artifactPermissionService.Provider = this.ProviderToUse;
451
891
  // Initialize global streaming service FIRST
452
892
  // This establishes the single PubSub connection for all conversations
@@ -457,23 +897,23 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
457
897
  this.uiCommandHandler.actionableCommandRequested
458
898
  .pipe(takeUntil(this.destroy$))
459
899
  .subscribe(request => {
460
- this.onActionableCommand(request.command);
900
+ this.OnActionableCommand(request.command);
461
901
  });
462
902
  this.uiCommandHandler.automaticCommandRequested
463
903
  .pipe(takeUntil(this.destroy$))
464
904
  .subscribe(command => {
465
- this.onAutomaticCommand(command);
905
+ this.OnAutomaticCommand(command);
466
906
  });
467
907
  // Check initial mobile state FIRST
468
908
  this.checkMobileView();
469
909
  // Load sidebar state - but on mobile, always default to collapsed
470
- if (this.isMobileView) {
471
- this.isSidebarCollapsed = true;
472
- this.isSidebarVisible = false;
473
- this.isSidebarSettingsLoaded = true; // Mobile doesn't need to load settings
910
+ if (this.IsMobileView) {
911
+ this.IsSidebarCollapsed = true;
912
+ this.IsSidebarVisible = false;
913
+ this.IsSidebarSettingsLoaded = true; // Mobile doesn't need to load settings
474
914
  // Enable transitions after a brief delay to ensure initial state is applied
475
915
  setTimeout(() => {
476
- this.sidebarTransitionsEnabled = true;
916
+ this.SidebarTransitionsEnabled = true;
477
917
  }, 50);
478
918
  }
479
919
  else {
@@ -482,7 +922,7 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
482
922
  this.cdr.detectChanges();
483
923
  // Enable transitions after state is loaded and applied
484
924
  setTimeout(() => {
485
- this.sidebarTransitionsEnabled = true;
925
+ this.SidebarTransitionsEnabled = true;
486
926
  }, 50);
487
927
  }
488
928
  // Setup resize listeners
@@ -505,51 +945,51 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
505
945
  console.log('✅ Artifact Metadata Engine initialized with', ArtifactMetadataEngine.Instance.ArtifactTypes?.length || 0, 'artifact types');
506
946
  // Initialize mention autocomplete service immediately after AI engine
507
947
  // This ensures the cache is built from the fully-loaded agent list
508
- await this.mentionAutocompleteService.initialize(this.currentUser);
948
+ await this.mentionAutocompleteService.initialize(this.CurrentUser);
509
949
  console.log('✅ Mention autocomplete initialized');
510
950
  // Mark workspace as ready - this allows UI to render
511
- this.isWorkspaceReady = true;
951
+ this.IsWorkspaceReady = true;
512
952
  this.cdr.detectChanges();
513
953
  }
514
954
  catch (error) {
515
955
  console.error('❌ Failed to initialize engines:', error);
516
956
  // Still mark as ready so UI isn't blocked forever
517
- this.isWorkspaceReady = true;
957
+ this.IsWorkspaceReady = true;
518
958
  this.cdr.detectChanges();
519
959
  }
520
960
  // Subscribe to artifact panel state
521
- this.artifactState.isPanelOpen$
961
+ this.ArtifactState.isPanelOpen$
522
962
  .pipe(takeUntil(this.destroy$))
523
963
  .subscribe(isOpen => {
524
- this.isArtifactPanelOpen = isOpen;
964
+ this.IsArtifactPanelOpen = isOpen;
525
965
  });
526
966
  // Subscribe to active artifact ID
527
- this.artifactState.activeArtifactId$
967
+ this.ArtifactState.activeArtifactId$
528
968
  .pipe(takeUntil(this.destroy$))
529
969
  .subscribe(async (id) => {
530
- this.activeArtifactId = id;
970
+ this.ActiveArtifactId = id;
531
971
  // Load permissions when artifact changes
532
972
  if (id) {
533
973
  await this.loadArtifactPermissions(id);
534
974
  }
535
975
  else {
536
- this.canShareActiveArtifact = false;
537
- this.canEditActiveArtifact = false;
976
+ this.CanShareActiveArtifact = false;
977
+ this.CanEditActiveArtifact = false;
538
978
  }
539
979
  });
540
980
  // Subscribe to active version number
541
- this.artifactState.activeVersionNumber$
981
+ this.ArtifactState.activeVersionNumber$
542
982
  .pipe(takeUntil(this.destroy$))
543
983
  .subscribe(versionNumber => {
544
- this.activeVersionNumber = versionNumber;
984
+ this.ActiveVersionNumber = versionNumber;
545
985
  });
546
986
  // Set initial conversation if provided
547
- if (this.initialConversationId) {
548
- this.setActiveConversation(this.initialConversationId);
987
+ if (this.InitialConversationId) {
988
+ this.SetActiveConversation(this.InitialConversationId);
549
989
  }
550
990
  // Handle context-based navigation
551
- if (this.activeContext === 'library') {
552
- this.activeTab = 'collections';
991
+ if (this.ActiveContext === 'library') {
992
+ this.ActiveTab = 'collections';
553
993
  }
554
994
  // Task context will be handled by chat header dropdown, not navigation tabs
555
995
  // Build task filter for conversations domain
@@ -566,43 +1006,43 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
566
1006
  const c = md.EntityByName('MJ: Conversations');
567
1007
  if (!cd || !c) {
568
1008
  console.warn('⚠️ Missing metadata for Conversations or Conversation Details');
569
- this.tasksFilter = `ParentID IS NULL AND UserID = '${this.currentUser.ID}'`; // Fallback to user-owned tasks only
1009
+ this.TasksFilter = `ParentID IS NULL AND UserID = '${this.CurrentUser.ID}'`; // Fallback to user-owned tasks only
570
1010
  return;
571
1011
  }
572
- this.tasksFilter = `ParentID IS NULL AND (UserID = '${this.currentUser.ID}' OR ConversationDetailID IN (
1012
+ this.TasksFilter = `ParentID IS NULL AND (UserID = '${this.CurrentUser.ID}' OR ConversationDetailID IN (
573
1013
  SELECT ID FROM [${cd.SchemaName}].[${cd.BaseView}]
574
1014
  WHERE
575
- UserID ='${this.currentUser.ID}' OR
1015
+ UserID ='${this.CurrentUser.ID}' OR
576
1016
  ConversationID IN (
577
- SELECT ID FROM [${c.SchemaName}].[${c.BaseView}] WHERE UserID='${this.currentUser.ID}'
1017
+ SELECT ID FROM [${c.SchemaName}].[${c.BaseView}] WHERE UserID='${this.CurrentUser.ID}'
578
1018
  )
579
1019
  ))`;
580
- console.log('📝 Conversations domain tasks filter built:', this.tasksFilter);
1020
+ console.log('📝 Conversations domain tasks filter built:', this.TasksFilter);
581
1021
  }
582
1022
  ngDoCheck() {
583
1023
  // Detect new unsaved conversation state changes
584
- const currentIsNewConversation = this.isNewUnsavedConversation;
1024
+ const currentIsNewConversation = this.IsNewUnsavedConversation;
585
1025
  if (currentIsNewConversation !== this.previousIsNewConversation) {
586
1026
  this.previousIsNewConversation = currentIsNewConversation;
587
1027
  if (currentIsNewConversation) {
588
1028
  // Emit event to clear URL conversation parameter
589
1029
  Promise.resolve().then(() => {
590
- this.newConversationStarted.emit();
1030
+ this.NewConversationStarted.emit();
591
1031
  });
592
1032
  }
593
1033
  }
594
1034
  // Detect conversation changes and emit event
595
- const currentId = this.selectedConversationId;
1035
+ const currentId = this.SelectedConversationId;
596
1036
  if (currentId !== this.previousConversationId) {
597
1037
  this.previousConversationId = currentId;
598
- const conversation = this.selectedConversation;
1038
+ const conversation = this.SelectedConversation;
599
1039
  if (conversation) {
600
- this.conversationChanged.emit(conversation);
1040
+ this.ConversationChanged.emit(conversation);
601
1041
  // Also emit navigationChanged for URL updates (only if on conversations tab)
602
- if (this.activeTab === 'conversations' && currentId) {
1042
+ if (this.ActiveTab === 'conversations' && currentId) {
603
1043
  // Defer emission until after change detection completes
604
1044
  Promise.resolve().then(() => {
605
- this.navigationChanged.emit({
1045
+ this.NavigationChanged.emit({
606
1046
  tab: 'conversations',
607
1047
  conversationId: currentId
608
1048
  });
@@ -611,14 +1051,14 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
611
1051
  }
612
1052
  }
613
1053
  // Detect task selection changes (when on tasks tab)
614
- if (this.activeTab === 'tasks') {
615
- const currentTaskId = this.activeTaskId;
1054
+ if (this.ActiveTab === 'tasks') {
1055
+ const currentTaskId = this.ActiveTaskId;
616
1056
  if (currentTaskId !== this.previousTaskId) {
617
1057
  this.previousTaskId = currentTaskId;
618
1058
  if (currentTaskId) {
619
1059
  // Defer emission until after change detection completes
620
1060
  Promise.resolve().then(() => {
621
- this.navigationChanged.emit({
1061
+ this.NavigationChanged.emit({
622
1062
  tab: 'tasks',
623
1063
  taskId: currentTaskId
624
1064
  });
@@ -650,7 +1090,7 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
650
1090
  */
651
1091
  onDocumentClick(event) {
652
1092
  // Only handle when sidebar is expanded but unpinned
653
- if (this.isSidebarCollapsed || this.isSidebarPinned) {
1093
+ if (this.IsSidebarCollapsed || this.IsSidebarPinned) {
654
1094
  return;
655
1095
  }
656
1096
  // Check if click is outside the sidebar
@@ -659,20 +1099,20 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
659
1099
  const expandHandle = target.closest('.sidebar-expand-handle');
660
1100
  // If click is outside sidebar and expand handle, collapse it
661
1101
  if (!sidebarElement && !expandHandle) {
662
- this.collapseSidebar();
1102
+ this.CollapseSidebar();
663
1103
  }
664
1104
  }
665
1105
  checkMobileView() {
666
- const wasMobile = this.isMobileView;
667
- this.isMobileView = window.innerWidth < 768;
668
- if (this.isMobileView && !wasMobile) {
1106
+ const wasMobile = this.IsMobileView;
1107
+ this.IsMobileView = window.innerWidth < 768;
1108
+ if (this.IsMobileView && !wasMobile) {
669
1109
  // Switched to mobile - hide sidebar and default to collapsed
670
- this.isSidebarVisible = false;
671
- this.isSidebarCollapsed = true;
1110
+ this.IsSidebarVisible = false;
1111
+ this.IsSidebarCollapsed = true;
672
1112
  }
673
- else if (!this.isMobileView && wasMobile) {
1113
+ else if (!this.IsMobileView && wasMobile) {
674
1114
  // Switched to desktop - show sidebar, restore state from User Settings
675
- this.isSidebarVisible = true;
1115
+ this.IsSidebarVisible = true;
676
1116
  this.loadSidebarState().then(() => {
677
1117
  this.cdr.detectChanges();
678
1118
  });
@@ -681,34 +1121,50 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
681
1121
  /**
682
1122
  * Collapse sidebar
683
1123
  */
684
- collapseSidebar() {
685
- this.isSidebarCollapsed = true;
686
- if (this.isMobileView) {
687
- this.isSidebarVisible = false;
1124
+ CollapseSidebar() {
1125
+ this.IsSidebarCollapsed = true;
1126
+ if (this.IsMobileView) {
1127
+ this.IsSidebarVisible = false;
688
1128
  }
689
1129
  }
1130
+ /** @deprecated Use {@link CollapseSidebar}. */
1131
+ collapseSidebar() {
1132
+ return this.CollapseSidebar();
1133
+ }
690
1134
  /**
691
1135
  * Expand sidebar (unpinned - will auto-collapse on selection)
692
1136
  */
1137
+ ExpandSidebar() {
1138
+ this.IsSidebarCollapsed = false;
1139
+ this.IsSidebarPinned = false;
1140
+ }
1141
+ /** @deprecated Use {@link ExpandSidebar}. */
693
1142
  expandSidebar() {
694
- this.isSidebarCollapsed = false;
695
- this.isSidebarPinned = false;
1143
+ return this.ExpandSidebar();
696
1144
  }
697
1145
  /**
698
1146
  * Pin sidebar - keep it open after selection
699
1147
  */
700
- pinSidebar() {
701
- this.isSidebarPinned = true;
1148
+ PinSidebar() {
1149
+ this.IsSidebarPinned = true;
702
1150
  this.saveSidebarState();
703
1151
  }
1152
+ /** @deprecated Use {@link PinSidebar}. */
1153
+ pinSidebar() {
1154
+ return this.PinSidebar();
1155
+ }
704
1156
  /**
705
1157
  * Unpin sidebar - will auto-collapse on next selection
706
1158
  */
707
- unpinSidebar() {
708
- this.isSidebarPinned = false;
709
- this.collapseSidebar();
1159
+ UnpinSidebar() {
1160
+ this.IsSidebarPinned = false;
1161
+ this.CollapseSidebar();
710
1162
  this.saveSidebarState();
711
1163
  }
1164
+ /** @deprecated Use {@link UnpinSidebar}. */
1165
+ unpinSidebar() {
1166
+ return this.UnpinSidebar();
1167
+ }
712
1168
  /**
713
1169
  * Save sidebar state to User Settings (server)
714
1170
  * Uses debouncing to avoid excessive database writes
@@ -728,15 +1184,15 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
728
1184
  */
729
1185
  async saveSidebarStateToServer() {
730
1186
  try {
731
- const userId = this.currentUser?.ID;
1187
+ const userId = this.CurrentUser?.ID;
732
1188
  if (!userId) {
733
1189
  return;
734
1190
  }
735
1191
  const stateToSave = {
736
- collapsed: this.isSidebarCollapsed,
737
- pinned: this.isSidebarPinned,
738
- sidebarWidth: this.sidebarWidth,
739
- artifactPanelWidth: this.artifactPanelWidth
1192
+ collapsed: this.IsSidebarCollapsed,
1193
+ pinned: this.IsSidebarPinned,
1194
+ sidebarWidth: this.SidebarWidth,
1195
+ artifactPanelWidth: this.ArtifactPanelWidth
740
1196
  };
741
1197
  const engine = UserInfoEngine.Instance;
742
1198
  const md = this.ProviderToUse;
@@ -763,21 +1219,21 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
763
1219
  async loadSidebarState() {
764
1220
  this.isLoadingSettings = true;
765
1221
  try {
766
- const userId = this.currentUser?.ID;
1222
+ const userId = this.CurrentUser?.ID;
767
1223
  if (userId) {
768
1224
  // Try loading from cached User Settings
769
1225
  const engine = UserInfoEngine.Instance;
770
1226
  const setting = engine.UserSettings.find(s => s.Setting === this.USER_SETTING_SIDEBAR_KEY);
771
1227
  if (setting?.Value) {
772
1228
  const state = JSON.parse(setting.Value);
773
- this.isSidebarCollapsed = state.collapsed ?? true;
774
- this.isSidebarPinned = state.pinned ?? false;
1229
+ this.IsSidebarCollapsed = state.collapsed ?? true;
1230
+ this.IsSidebarPinned = state.pinned ?? false;
775
1231
  // Load width values if present (with validation)
776
1232
  if (typeof state.sidebarWidth === 'number' && state.sidebarWidth >= 200 && state.sidebarWidth <= 500) {
777
- this.sidebarWidth = state.sidebarWidth;
1233
+ this.SidebarWidth = state.sidebarWidth;
778
1234
  }
779
1235
  if (typeof state.artifactPanelWidth === 'number' && state.artifactPanelWidth >= 20 && state.artifactPanelWidth <= 70) {
780
- this.artifactPanelWidth = state.artifactPanelWidth;
1236
+ this.ArtifactPanelWidth = state.artifactPanelWidth;
781
1237
  }
782
1238
  this.isLoadingSettings = false;
783
1239
  return;
@@ -785,79 +1241,103 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
785
1241
  }
786
1242
  // No saved state found - NEW USER DEFAULT:
787
1243
  // Start with sidebar collapsed and show new conversation screen
788
- this.isSidebarCollapsed = true;
789
- this.isSidebarPinned = false;
790
- this.isNewUnsavedConversation = true;
1244
+ this.IsSidebarCollapsed = true;
1245
+ this.IsSidebarPinned = false;
1246
+ this.IsNewUnsavedConversation = true;
791
1247
  }
792
1248
  catch (error) {
793
1249
  console.warn('Failed to load sidebar state:', error);
794
1250
  // Default to collapsed for new users on error
795
- this.isSidebarCollapsed = true;
796
- this.isSidebarPinned = false;
1251
+ this.IsSidebarCollapsed = true;
1252
+ this.IsSidebarPinned = false;
797
1253
  }
798
1254
  finally {
799
1255
  this.isLoadingSettings = false;
800
- this.isSidebarSettingsLoaded = true;
1256
+ this.IsSidebarSettingsLoaded = true;
801
1257
  }
802
1258
  }
803
- onTabChanged(tab) {
804
- const wasOnDifferentTab = this.activeTab !== tab;
805
- this.activeTab = tab;
1259
+ OnTabChanged(tab) {
1260
+ const wasOnDifferentTab = this.ActiveTab !== tab;
1261
+ this.ActiveTab = tab;
806
1262
  // Emit navigation change event with current state
807
1263
  const navEvent = {
808
1264
  tab: tab
809
1265
  };
810
1266
  if (tab === 'conversations') {
811
- navEvent.conversationId = this.selectedConversationId || undefined;
1267
+ navEvent.conversationId = this.SelectedConversationId || undefined;
812
1268
  }
813
1269
  else if (tab === 'collections') {
814
1270
  // If switching TO collections tab from another tab, clear to root level
815
1271
  if (wasOnDifferentTab) {
816
- this.collectionState.setActiveCollection(null);
817
- this.activeVersionId = null;
1272
+ this.CollectionState.setActiveCollection(null);
1273
+ this.ActiveVersionId = null;
818
1274
  // Don't include collectionId or versionId - go to root
819
1275
  }
820
1276
  else {
821
1277
  // Already on collections tab, preserve current state
822
- if (this.collectionState.activeCollectionId) {
823
- navEvent.collectionId = this.collectionState.activeCollectionId;
1278
+ if (this.CollectionState.activeCollectionId) {
1279
+ navEvent.collectionId = this.CollectionState.activeCollectionId;
824
1280
  }
825
- if (this.activeVersionId && this.collectionState.activeCollectionId) {
826
- navEvent.versionId = this.activeVersionId;
1281
+ if (this.ActiveVersionId && this.CollectionState.activeCollectionId) {
1282
+ navEvent.versionId = this.ActiveVersionId;
827
1283
  }
828
1284
  }
829
1285
  }
830
1286
  else if (tab === 'tasks') {
831
- navEvent.taskId = this.activeTaskId || undefined;
1287
+ navEvent.taskId = this.ActiveTaskId || undefined;
832
1288
  }
833
- this.navigationChanged.emit(navEvent);
1289
+ this.NavigationChanged.emit(navEvent);
834
1290
  // Auto-close artifact panel when switching away from collections
835
1291
  if (tab === 'conversations' || tab === 'tasks') {
836
- this.artifactState.closeArtifact();
1292
+ this.ArtifactState.closeArtifact();
837
1293
  }
838
1294
  }
1295
+ /** @deprecated Use {@link OnTabChanged}. */
1296
+ onTabChanged(tab) {
1297
+ return this.OnTabChanged(tab);
1298
+ }
1299
+ ToggleSidebar() {
1300
+ this.IsSidebarVisible = !this.IsSidebarVisible;
1301
+ }
1302
+ /** @deprecated Use {@link ToggleSidebar}. */
839
1303
  toggleSidebar() {
840
- this.isSidebarVisible = !this.isSidebarVisible;
1304
+ return this.ToggleSidebar();
841
1305
  }
842
- closeSidebar() {
843
- if (this.isMobileView && this.isSidebarVisible) {
844
- this.isSidebarVisible = false;
1306
+ CloseSidebar() {
1307
+ if (this.IsMobileView && this.IsSidebarVisible) {
1308
+ this.IsSidebarVisible = false;
845
1309
  }
846
1310
  }
1311
+ /** @deprecated Use {@link CloseSidebar}. */
1312
+ closeSidebar() {
1313
+ return this.CloseSidebar();
1314
+ }
1315
+ CloseArtifactPanel() {
1316
+ this.ArtifactState.closeArtifact();
1317
+ }
1318
+ /** @deprecated Use {@link CloseArtifactPanel}. */
847
1319
  closeArtifactPanel() {
848
- this.artifactState.closeArtifact();
1320
+ return this.CloseArtifactPanel();
1321
+ }
1322
+ OpenSearch() {
1323
+ this.IsSearchPanelOpen = true;
849
1324
  }
1325
+ /** @deprecated Use {@link OpenSearch}. */
850
1326
  openSearch() {
851
- this.isSearchPanelOpen = true;
1327
+ return this.OpenSearch();
852
1328
  }
1329
+ CloseSearch() {
1330
+ this.IsSearchPanelOpen = false;
1331
+ }
1332
+ /** @deprecated Use {@link CloseSearch}. */
853
1333
  closeSearch() {
854
- this.isSearchPanelOpen = false;
1334
+ return this.CloseSearch();
855
1335
  }
856
- async onRefreshAgentCache() {
1336
+ async OnRefreshAgentCache() {
857
1337
  try {
858
1338
  await AIEngineBase.Instance.Config(true);
859
1339
  // Refresh the mention autocomplete service to pick up new agents
860
- await this.mentionAutocompleteService.refresh(this.currentUser);
1340
+ await this.mentionAutocompleteService.refresh(this.CurrentUser);
861
1341
  const agentCount = AIEngineBase.Instance.Agents?.length || 0;
862
1342
  this.notificationService.CreateSimpleNotification(`Agent cache refreshed (${agentCount} agents)`, 'success', 3000);
863
1343
  this.cdr.detectChanges();
@@ -867,24 +1347,28 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
867
1347
  console.error('Failed to refresh AI Engine:', error);
868
1348
  }
869
1349
  }
870
- handleSearchResult(result) {
1350
+ /** @deprecated Use {@link OnRefreshAgentCache}. */
1351
+ async onRefreshAgentCache() {
1352
+ return this.OnRefreshAgentCache();
1353
+ }
1354
+ HandleSearchResult(result) {
871
1355
  console.log('🔍 Navigating to search result:', result);
872
1356
  switch (result.type) {
873
1357
  case 'conversation':
874
1358
  // Switch to conversations tab and select conversation
875
- this.activeTab = 'conversations';
876
- this.setActiveConversation(result.id);
877
- this.navigationChanged.emit({
1359
+ this.ActiveTab = 'conversations';
1360
+ this.SetActiveConversation(result.id);
1361
+ this.NavigationChanged.emit({
878
1362
  tab: 'conversations',
879
1363
  conversationId: result.id
880
1364
  });
881
1365
  break;
882
1366
  case 'message':
883
1367
  // Switch to conversations tab, open conversation, and scroll to message (future enhancement)
884
- this.activeTab = 'conversations';
1368
+ this.ActiveTab = 'conversations';
885
1369
  if (result.conversationId) {
886
- this.setActiveConversation(result.conversationId);
887
- this.navigationChanged.emit({
1370
+ this.SetActiveConversation(result.conversationId);
1371
+ this.NavigationChanged.emit({
888
1372
  tab: 'conversations',
889
1373
  conversationId: result.conversationId
890
1374
  // TODO: Add messageId for scroll-to support in future
@@ -893,68 +1377,80 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
893
1377
  break;
894
1378
  case 'artifact':
895
1379
  // Switch to collections tab and open artifact
896
- this.activeTab = 'collections';
897
- this.artifactState.openArtifact(result.id);
1380
+ this.ActiveTab = 'collections';
1381
+ this.ArtifactState.openArtifact(result.id);
898
1382
  // If artifact is in a collection, navigate to that collection
899
1383
  const collectionId = result.collectionId || undefined;
900
1384
  // Search results don't have version ID, so just navigate to collection
901
1385
  // The artifact will open with latest version
902
- this.navigationChanged.emit({
1386
+ this.NavigationChanged.emit({
903
1387
  tab: 'collections',
904
1388
  collectionId
905
1389
  });
906
1390
  break;
907
1391
  case 'collection':
908
1392
  // Switch to collections tab and navigate to collection
909
- this.activeTab = 'collections';
910
- this.collectionState.setActiveCollection(result.id);
911
- this.navigationChanged.emit({
1393
+ this.ActiveTab = 'collections';
1394
+ this.CollectionState.setActiveCollection(result.id);
1395
+ this.NavigationChanged.emit({
912
1396
  tab: 'collections',
913
1397
  collectionId: result.id
914
1398
  });
915
1399
  break;
916
1400
  case 'task':
917
1401
  // Switch to tasks tab and select task
918
- this.activeTab = 'tasks';
1402
+ this.ActiveTab = 'tasks';
919
1403
  this._activeTaskId = result.id;
920
- this.navigationChanged.emit({
1404
+ this.NavigationChanged.emit({
921
1405
  tab: 'tasks',
922
1406
  taskId: result.id
923
1407
  });
924
1408
  break;
925
1409
  }
926
1410
  // Close search panel after navigation
927
- this.closeSearch();
1411
+ this.CloseSearch();
1412
+ }
1413
+ /** @deprecated Use {@link HandleSearchResult}. */
1414
+ handleSearchResult(result) {
1415
+ return this.HandleSearchResult(result);
928
1416
  }
929
1417
  /**
930
1418
  * Sidebar resize methods
931
1419
  */
932
- onSidebarResizeStart(event) {
1420
+ OnSidebarResizeStart(event) {
933
1421
  this.isSidebarResizing = true;
934
1422
  this.sidebarResizeStartX = event.clientX;
935
- this.sidebarResizeStartWidth = this.sidebarWidth;
1423
+ this.sidebarResizeStartWidth = this.SidebarWidth;
936
1424
  event.preventDefault();
937
1425
  document.body.style.cursor = 'col-resize';
938
1426
  document.body.style.userSelect = 'none';
939
1427
  }
1428
+ /** @deprecated Use {@link OnSidebarResizeStart}. */
1429
+ onSidebarResizeStart(event) {
1430
+ return this.OnSidebarResizeStart(event);
1431
+ }
940
1432
  /**
941
1433
  * Artifact panel resize methods
942
1434
  */
943
- onArtifactPanelResizeStart(event) {
1435
+ OnArtifactPanelResizeStart(event) {
944
1436
  this.isArtifactPanelResizing = true;
945
1437
  this.artifactPanelResizeStartX = event.clientX;
946
- this.artifactPanelResizeStartWidth = this.artifactPanelWidth;
1438
+ this.artifactPanelResizeStartWidth = this.ArtifactPanelWidth;
947
1439
  event.preventDefault();
948
1440
  document.body.style.cursor = 'col-resize';
949
1441
  document.body.style.userSelect = 'none';
950
1442
  }
1443
+ /** @deprecated Use {@link OnArtifactPanelResizeStart}. */
1444
+ onArtifactPanelResizeStart(event) {
1445
+ return this.OnArtifactPanelResizeStart(event);
1446
+ }
951
1447
  onResizeMove(event) {
952
1448
  if (this.isSidebarResizing) {
953
1449
  const deltaX = event.clientX - this.sidebarResizeStartX;
954
1450
  let newWidth = this.sidebarResizeStartWidth + deltaX;
955
1451
  // Constrain between 200px and 500px
956
1452
  newWidth = Math.max(200, Math.min(500, newWidth));
957
- this.sidebarWidth = newWidth;
1453
+ this.SidebarWidth = newWidth;
958
1454
  }
959
1455
  else if (this.isArtifactPanelResizing) {
960
1456
  const container = document.querySelector('.workspace-content');
@@ -966,7 +1462,7 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
966
1462
  let newWidth = this.artifactPanelResizeStartWidth + deltaPercent;
967
1463
  // Constrain between 20% and 70%
968
1464
  newWidth = Math.max(20, Math.min(70, newWidth));
969
- this.artifactPanelWidth = newWidth;
1465
+ this.ArtifactPanelWidth = newWidth;
970
1466
  }
971
1467
  }
972
1468
  onResizeEnd(event) {
@@ -986,27 +1482,35 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
986
1482
  /**
987
1483
  * Touch event handlers for mobile resize support
988
1484
  */
989
- onSidebarResizeTouchStart(event) {
1485
+ OnSidebarResizeTouchStart(event) {
990
1486
  this.isSidebarResizing = true;
991
1487
  const touch = event.touches[0];
992
1488
  this.sidebarResizeStartX = touch.clientX;
993
- this.sidebarResizeStartWidth = this.sidebarWidth;
1489
+ this.sidebarResizeStartWidth = this.SidebarWidth;
994
1490
  event.preventDefault();
995
1491
  }
996
- onArtifactPanelResizeTouchStart(event) {
1492
+ /** @deprecated Use {@link OnSidebarResizeTouchStart}. */
1493
+ onSidebarResizeTouchStart(event) {
1494
+ return this.OnSidebarResizeTouchStart(event);
1495
+ }
1496
+ OnArtifactPanelResizeTouchStart(event) {
997
1497
  this.isArtifactPanelResizing = true;
998
1498
  const touch = event.touches[0];
999
1499
  this.artifactPanelResizeStartX = touch.clientX;
1000
- this.artifactPanelResizeStartWidth = this.artifactPanelWidth;
1500
+ this.artifactPanelResizeStartWidth = this.ArtifactPanelWidth;
1001
1501
  event.preventDefault();
1002
1502
  }
1503
+ /** @deprecated Use {@link OnArtifactPanelResizeTouchStart}. */
1504
+ onArtifactPanelResizeTouchStart(event) {
1505
+ return this.OnArtifactPanelResizeTouchStart(event);
1506
+ }
1003
1507
  onResizeTouchMove(event) {
1004
1508
  if (this.isSidebarResizing) {
1005
1509
  const touch = event.touches[0];
1006
1510
  const deltaX = touch.clientX - this.sidebarResizeStartX;
1007
1511
  let newWidth = this.sidebarResizeStartWidth + deltaX;
1008
1512
  newWidth = Math.max(200, Math.min(500, newWidth));
1009
- this.sidebarWidth = newWidth;
1513
+ this.SidebarWidth = newWidth;
1010
1514
  }
1011
1515
  else if (this.isArtifactPanelResizing) {
1012
1516
  const container = document.querySelector('.workspace-content');
@@ -1018,7 +1522,7 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
1018
1522
  const deltaPercent = (deltaX / containerWidth) * -100;
1019
1523
  let newWidth = this.artifactPanelResizeStartWidth + deltaPercent;
1020
1524
  newWidth = Math.max(20, Math.min(70, newWidth));
1021
- this.artifactPanelWidth = newWidth;
1525
+ this.ArtifactPanelWidth = newWidth;
1022
1526
  }
1023
1527
  }
1024
1528
  onResizeTouchEnd(event) {
@@ -1041,32 +1545,44 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
1041
1545
  * binding compiles. New consumers should use the resource components in
1042
1546
  * @memberjunction/ng-explorer-core instead of this workspace.
1043
1547
  */
1044
- onApplyFormRequested(_event) {
1548
+ OnApplyFormRequested(_event) {
1045
1549
  console.warn('Workspace.onApplyFormRequested: workspace is deprecated; use the per-feature resource components instead.');
1046
1550
  }
1047
- toggleMaximizeArtifactPanel() {
1048
- if (this.isArtifactPanelMaximized) {
1551
+ /** @deprecated Use {@link OnApplyFormRequested}. */
1552
+ onApplyFormRequested(_event) {
1553
+ return this.OnApplyFormRequested(_event);
1554
+ }
1555
+ ToggleMaximizeArtifactPanel() {
1556
+ if (this.IsArtifactPanelMaximized) {
1049
1557
  // Restore to previous width
1050
- this.artifactPanelWidth = this.artifactPanelWidthBeforeMaximize;
1051
- this.isArtifactPanelMaximized = false;
1558
+ this.ArtifactPanelWidth = this.artifactPanelWidthBeforeMaximize;
1559
+ this.IsArtifactPanelMaximized = false;
1052
1560
  }
1053
1561
  else {
1054
1562
  // Maximize - store current width and set to 100%
1055
- this.artifactPanelWidthBeforeMaximize = this.artifactPanelWidth;
1056
- this.artifactPanelWidth = 100;
1057
- this.isArtifactPanelMaximized = true;
1563
+ this.artifactPanelWidthBeforeMaximize = this.ArtifactPanelWidth;
1564
+ this.ArtifactPanelWidth = 100;
1565
+ this.IsArtifactPanelMaximized = true;
1058
1566
  }
1059
1567
  }
1060
- onConversationRenamed(event) {
1568
+ /** @deprecated Use {@link ToggleMaximizeArtifactPanel}. */
1569
+ toggleMaximizeArtifactPanel() {
1570
+ return this.ToggleMaximizeArtifactPanel();
1571
+ }
1572
+ OnConversationRenamed(event) {
1061
1573
  console.log('✨ Workspace received rename event:', event);
1062
1574
  // Trigger animation in sidebar by setting the ID
1063
- this.renamedConversationId = event.conversationId;
1575
+ this.RenamedConversationId = event.conversationId;
1064
1576
  // Clear after animation completes (1500ms)
1065
1577
  setTimeout(() => {
1066
- this.renamedConversationId = null;
1578
+ this.RenamedConversationId = null;
1067
1579
  }, 1500);
1068
1580
  }
1069
- onOpenEntityRecord(event) {
1581
+ /** @deprecated Use {@link OnConversationRenamed}. */
1582
+ onConversationRenamed(event) {
1583
+ return this.OnConversationRenamed(event);
1584
+ }
1585
+ OnOpenEntityRecord(event) {
1070
1586
  const pairs = event.compositeKey.KeyValuePairs || [];
1071
1587
  const keys = {};
1072
1588
  for (const p of pairs) {
@@ -1082,12 +1598,20 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
1082
1598
  keys,
1083
1599
  mode: 'view'
1084
1600
  };
1085
- this.actionableCommandExecuted.emit(command);
1601
+ this.ActionableCommandExecuted.emit(command);
1602
+ }
1603
+ /** @deprecated Use {@link OnOpenEntityRecord}. */
1604
+ onOpenEntityRecord(event) {
1605
+ return this.OnOpenEntityRecord(event);
1086
1606
  }
1607
+ OnNavigationRequest(event) {
1608
+ this.NavigationRequested.emit(event);
1609
+ }
1610
+ /** @deprecated Use {@link OnNavigationRequest}. */
1087
1611
  onNavigationRequest(event) {
1088
- this.navigationRequested.emit(event);
1612
+ return this.OnNavigationRequest(event);
1089
1613
  }
1090
- onOpenEntityRecordFromTasks(event) {
1614
+ OnOpenEntityRecordFromTasks(event) {
1091
1615
  // Convert to actionable command and emit
1092
1616
  const command = {
1093
1617
  type: 'open:resource',
@@ -1097,28 +1621,36 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
1097
1621
  resourceId: event.recordId,
1098
1622
  mode: 'view'
1099
1623
  };
1100
- this.actionableCommandExecuted.emit(command);
1624
+ this.ActionableCommandExecuted.emit(command);
1101
1625
  }
1102
- onTaskClicked(task) {
1626
+ /** @deprecated Use {@link OnOpenEntityRecordFromTasks}. */
1627
+ onOpenEntityRecordFromTasks(event) {
1628
+ return this.OnOpenEntityRecordFromTasks(event);
1629
+ }
1630
+ OnTaskClicked(task) {
1103
1631
  // Switch to Tasks tab and set active task ID
1104
- this.activeTab = 'tasks';
1632
+ this.ActiveTab = 'tasks';
1105
1633
  this._activeTaskId = task.ID;
1106
1634
  // Emit navigation change
1107
- this.navigationChanged.emit({
1635
+ this.NavigationChanged.emit({
1108
1636
  tab: 'tasks',
1109
1637
  taskId: task.ID
1110
1638
  });
1111
1639
  }
1640
+ /** @deprecated Use {@link OnTaskClicked}. */
1641
+ onTaskClicked(task) {
1642
+ return this.OnTaskClicked(task);
1643
+ }
1112
1644
  /**
1113
1645
  * Handle collection navigation events
1114
1646
  */
1115
- onCollectionNavigated(event) {
1647
+ OnCollectionNavigated(event) {
1116
1648
  console.log('📁 Collection navigated:', event);
1117
1649
  // Store the version ID for URL sync
1118
1650
  // CRITICAL: Only update activeVersionId if versionId was explicitly provided in the event
1119
1651
  // If versionId is undefined (not provided), keep the current activeVersionId
1120
1652
  if (event.versionId !== undefined) {
1121
- this.activeVersionId = event.versionId;
1653
+ this.ActiveVersionId = event.versionId;
1122
1654
  }
1123
1655
  // Otherwise: versionId not provided in event, preserve current activeVersionId
1124
1656
  // IMPORTANT: Don't emit navigationChanged here when doing programmatic navigation (deep linking)
@@ -1126,15 +1658,15 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
1126
1658
  // Only emit if the event explicitly includes a versionId, or if we're intentionally closing the artifact
1127
1659
  if (event.versionId !== undefined) {
1128
1660
  // Event explicitly specifies artifact state (user clicked artifact or intentionally closed it)
1129
- this.navigationChanged.emit({
1661
+ this.NavigationChanged.emit({
1130
1662
  tab: 'collections',
1131
1663
  collectionId: event.collectionId || undefined,
1132
1664
  versionId: event.versionId || undefined
1133
1665
  });
1134
1666
  }
1135
- else if (!this.activeVersionId) {
1667
+ else if (!this.ActiveVersionId) {
1136
1668
  // No artifact currently open, safe to emit collection-only navigation
1137
- this.navigationChanged.emit({
1669
+ this.NavigationChanged.emit({
1138
1670
  tab: 'collections',
1139
1671
  collectionId: event.collectionId || undefined
1140
1672
  });
@@ -1142,124 +1674,152 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
1142
1674
  // Otherwise: artifact is open but event doesn't specify versionId
1143
1675
  // Don't emit - preserve current URL state with artifact
1144
1676
  }
1677
+ /** @deprecated Use {@link OnCollectionNavigated}. */
1678
+ onCollectionNavigated(event) {
1679
+ return this.OnCollectionNavigated(event);
1680
+ }
1145
1681
  /**
1146
1682
  * Handle navigation from artifact links
1147
1683
  */
1148
- onArtifactLinkNavigation(event) {
1684
+ OnArtifactLinkNavigation(event) {
1149
1685
  console.log('🔗 Navigating from artifact link:', event);
1150
1686
  if (event.type === 'conversation') {
1151
- this.activeTab = 'conversations';
1687
+ this.ActiveTab = 'conversations';
1152
1688
  // Close collection artifact viewer if it's open
1153
- this.artifactState.closeArtifact();
1689
+ this.ArtifactState.closeArtifact();
1154
1690
  // Store pending artifact info so chat area can show it and scroll to message
1155
1691
  if (event.artifactId) {
1156
- this.pendingArtifactId = event.artifactId;
1157
- this.pendingArtifactConversationId = event.id;
1158
- this.pendingArtifactVersionNumber = event.versionNumber || null;
1692
+ this.PendingArtifactId = event.artifactId;
1693
+ this.PendingArtifactConversationId = event.id;
1694
+ this.PendingArtifactVersionNumber = event.versionNumber || null;
1159
1695
  console.log('📦 Pending artifact set:', event.artifactId, 'v' + event.versionNumber);
1160
1696
  }
1161
- this.setActiveConversation(event.id);
1162
- this.navigationChanged.emit({
1697
+ this.SetActiveConversation(event.id);
1698
+ this.NavigationChanged.emit({
1163
1699
  tab: 'conversations',
1164
1700
  conversationId: event.id
1165
1701
  });
1166
1702
  }
1167
1703
  else if (event.type === 'collection') {
1168
- this.activeTab = 'collections';
1169
- this.collectionState.setActiveCollection(event.id);
1704
+ this.ActiveTab = 'collections';
1705
+ this.CollectionState.setActiveCollection(event.id);
1170
1706
  // Open the artifact automatically when navigating to the collection
1171
1707
  if (event.artifactId) {
1172
- this.artifactState.openArtifact(event.artifactId, event.versionNumber);
1708
+ this.ArtifactState.openArtifact(event.artifactId, event.versionNumber);
1173
1709
  }
1174
1710
  // Store version ID for URL sync (same as viewArtifact does)
1175
1711
  if (event.versionId) {
1176
- this.activeVersionId = event.versionId;
1712
+ this.ActiveVersionId = event.versionId;
1177
1713
  }
1178
1714
  // Emit navigation with version ID so URL includes it
1179
- this.navigationChanged.emit({
1715
+ this.NavigationChanged.emit({
1180
1716
  tab: 'collections',
1181
1717
  collectionId: event.id,
1182
1718
  versionId: event.versionId
1183
1719
  });
1184
1720
  }
1185
1721
  }
1722
+ /** @deprecated Use {@link OnArtifactLinkNavigation}. */
1723
+ onArtifactLinkNavigation(event) {
1724
+ return this.OnArtifactLinkNavigation(event);
1725
+ }
1186
1726
  /**
1187
1727
  * Load permissions for the given artifact
1188
1728
  */
1189
1729
  async loadArtifactPermissions(artifactId) {
1190
1730
  // Guard against null/undefined
1191
1731
  if (!artifactId) {
1192
- this.canShareActiveArtifact = false;
1193
- this.canEditActiveArtifact = false;
1732
+ this.CanShareActiveArtifact = false;
1733
+ this.CanEditActiveArtifact = false;
1194
1734
  return;
1195
1735
  }
1196
1736
  try {
1197
- const permissions = await this.artifactPermissionService.getUserPermissions(artifactId, this.currentUser);
1198
- this.canShareActiveArtifact = permissions.canShare;
1199
- this.canEditActiveArtifact = permissions.canEdit;
1737
+ const permissions = await this.artifactPermissionService.getUserPermissions(artifactId, this.CurrentUser);
1738
+ this.CanShareActiveArtifact = permissions.canShare;
1739
+ this.CanEditActiveArtifact = permissions.canEdit;
1200
1740
  }
1201
1741
  catch (error) {
1202
1742
  console.error('Failed to load artifact permissions:', error);
1203
- this.canShareActiveArtifact = false;
1204
- this.canEditActiveArtifact = false;
1743
+ this.CanShareActiveArtifact = false;
1744
+ this.CanEditActiveArtifact = false;
1205
1745
  }
1206
1746
  }
1207
1747
  /**
1208
1748
  * Handle share request from artifact viewer
1209
1749
  */
1210
- async onArtifactShareRequested(artifactId) {
1750
+ async OnArtifactShareRequested(artifactId) {
1211
1751
  // Load the artifact entity to pass to the modal
1212
1752
  const md = this.ProviderToUse;
1213
1753
  const artifact = await md.GetEntityObject('MJ: Artifacts');
1214
1754
  await artifact.Load(artifactId);
1215
1755
  if (artifact) {
1216
- this.artifactToShare = artifact;
1217
- this.isArtifactShareModalOpen = true;
1756
+ this.ArtifactToShare = artifact;
1757
+ this.IsArtifactShareModalOpen = true;
1218
1758
  }
1219
1759
  }
1760
+ /** @deprecated Use {@link OnArtifactShareRequested}. */
1761
+ async onArtifactShareRequested(artifactId) {
1762
+ return this.OnArtifactShareRequested(artifactId);
1763
+ }
1220
1764
  /**
1221
1765
  * Handle close of artifact share modal
1222
1766
  */
1767
+ OnArtifactShareModalClose() {
1768
+ this.IsArtifactShareModalOpen = false;
1769
+ this.ArtifactToShare = null;
1770
+ }
1771
+ /** @deprecated Use {@link OnArtifactShareModalClose}. */
1223
1772
  onArtifactShareModalClose() {
1224
- this.isArtifactShareModalOpen = false;
1225
- this.artifactToShare = null;
1773
+ return this.OnArtifactShareModalClose();
1226
1774
  }
1227
1775
  /**
1228
1776
  * Handle successful share - refresh permissions
1229
1777
  */
1230
- async onArtifactShared() {
1231
- this.isArtifactShareModalOpen = false;
1232
- this.artifactToShare = null;
1778
+ async OnArtifactShared() {
1779
+ this.IsArtifactShareModalOpen = false;
1780
+ this.ArtifactToShare = null;
1233
1781
  // Refresh permissions for the active artifact
1234
- if (this.activeArtifactId) {
1235
- await this.loadArtifactPermissions(this.activeArtifactId);
1782
+ if (this.ActiveArtifactId) {
1783
+ await this.loadArtifactPermissions(this.ActiveArtifactId);
1236
1784
  }
1237
1785
  }
1786
+ /** @deprecated Use {@link OnArtifactShared}. */
1787
+ async onArtifactShared() {
1788
+ return this.OnArtifactShared();
1789
+ }
1238
1790
  /**
1239
1791
  * Handle actionable command execution from child components
1240
1792
  * Bubbles up to host application for handling
1241
1793
  */
1242
- onActionableCommand(command) {
1794
+ OnActionableCommand(command) {
1243
1795
  if (command.type === 'open:resource' && command.resourceType === 'Record') {
1244
1796
  // chat-area converts Record commands to openEntityRecord; onOpenEntityRecord
1245
1797
  // re-emits them as actionableCommandExecuted. Skip the raw command to avoid a double open.
1246
1798
  return;
1247
1799
  }
1248
1800
  console.log('📤 Bubbling up actionable command:', command);
1249
- this.actionableCommandExecuted.emit(command);
1801
+ this.ActionableCommandExecuted.emit(command);
1802
+ }
1803
+ /** @deprecated Use {@link OnActionableCommand}. */
1804
+ onActionableCommand(command) {
1805
+ return this.OnActionableCommand(command);
1250
1806
  }
1251
1807
  /**
1252
1808
  * Handle automatic command execution from child components
1253
1809
  * Bubbles up to host application for handling
1254
1810
  */
1255
- onAutomaticCommand(command) {
1811
+ OnAutomaticCommand(command) {
1256
1812
  console.log('📤 Bubbling up automatic command:', command);
1257
- this.automaticCommandExecuted.emit(command);
1813
+ this.AutomaticCommandExecuted.emit(command);
1814
+ }
1815
+ /** @deprecated Use {@link OnAutomaticCommand}. */
1816
+ onAutomaticCommand(command) {
1817
+ return this.OnAutomaticCommand(command);
1258
1818
  }
1259
1819
  static ɵfac = function ConversationWorkspaceComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ConversationWorkspaceComponent)(i0.ɵɵdirectiveInject(i1.ArtifactStateService), i0.ɵɵdirectiveInject(i2.CollectionStateService), i0.ɵɵdirectiveInject(i3.ArtifactPermissionService), i0.ɵɵdirectiveInject(i4.MJNotificationService), i0.ɵɵdirectiveInject(i5.ConversationStreamingService), i0.ɵɵdirectiveInject(i6.UICommandHandlerService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
1260
1820
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ConversationWorkspaceComponent, selectors: [["mj-conversation-workspace"]], hostBindings: function ConversationWorkspaceComponent_HostBindings(rf, ctx) { if (rf & 1) {
1261
1821
  i0.ɵɵlistener("resize", function ConversationWorkspaceComponent_resize_HostBindingHandler() { return ctx.onWindowResize(); }, i0.ɵɵresolveWindow)("click", function ConversationWorkspaceComponent_click_HostBindingHandler($event) { return ctx.onDocumentClick($event); }, i0.ɵɵresolveDocument);
1262
- } }, inputs: { environmentId: "environmentId", initialConversationId: "initialConversationId", layout: "layout", currentUser: "currentUser", activeContext: "activeContext", contextItemId: "contextItemId", ShowRoutines: "ShowRoutines", activeTabInput: "activeTabInput", activeConversationInput: "activeConversationInput", activeCollectionInput: "activeCollectionInput", activeVersionIdInput: "activeVersionIdInput", activeTaskInput: "activeTaskInput" }, outputs: { conversationChanged: "conversationChanged", artifactOpened: "artifactOpened", navigationChanged: "navigationChanged", newConversationStarted: "newConversationStarted", actionableCommandExecuted: "actionableCommandExecuted", automaticCommandExecuted: "automaticCommandExecuted", navigationRequested: "navigationRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 8, vars: 13, consts: [["mjSearchShortcut", "", 1, "conversation-workspace", 3, "searchTriggered"], [1, "workspace-navigation"], [3, "tabChanged", "sidebarToggled", "searchTriggered", "refreshTriggered", "activeTab", "environmentId", "currentUser", "conversationId"], [1, "workspace-loading"], [1, "workspace-content"], [3, "close", "resultSelected", "isOpen", "environmentId", "currentUser"], [3, "saved", "cancelled", "isOpen", "artifact", "currentUser"], ["text", "Loading agents...", "size", "large"], [1, "mobile-sidebar-backdrop", "visible"], [1, "workspace-sidebar", 3, "open", "collapsed", "no-transition", "width"], ["title", "Show conversations", 1, "sidebar-floating-toggle"], [1, "sidebar-resize-handle"], [1, "workspace-main"], [1, "mobile-sidebar-backdrop", "visible", 3, "click"], [1, "workspace-sidebar"], [3, "conversationSelected", "newConversationRequested", "openEntityRecord", "pinSidebarRequested", "unpinSidebarRequested", "activeTab", "environmentId", "currentUser", "selectedConversationId", "renamedConversationId", "isSidebarPinned", "isMobileView", "ShowRoutines", "Provider"], ["title", "Show conversations", 1, "sidebar-floating-toggle", 3, "click"], [1, "fas", "fa-table-columns"], [1, "sidebar-resize-handle", 3, "mousedown"], [3, "collectionNavigated", "environmentId", "currentUser"], [3, "openEntityRecord", "environmentId", "currentUser", "baseFilter", "activeTaskId"], [3, "conversationRenamed", "openEntityRecord", "navigationRequest", "taskClicked", "artifactLinkClicked", "conversationCreated", "realtimeConversationReady", "threadOpened", "threadClosed", "pendingArtifactConsumed", "pendingMessageConsumed", "pendingMessageRequested", "environmentId", "currentUser", "conversationId", "conversation", "threadId", "isNewConversation", "pendingMessage", "pendingAttachments", "pendingMessageConversationId", "pendingArtifactId", "pendingArtifactConversationId", "pendingArtifactVersionNumber"], [1, "artifact-panel-resize-handle"], [1, "workspace-artifact-panel"], [3, "closed", "navigateToLink", "shareRequested", "maximizeToggled", "applyFormRequested", "artifactId", "currentUser", "environmentId", "versionNumber", "showSaveToCollection", "viewContext", "contextCollectionId", "canShare", "canEdit", "isMaximized"], [1, "artifact-panel-resize-handle", 3, "mousedown"]], template: function ConversationWorkspaceComponent_Template(rf, ctx) { if (rf & 1) {
1822
+ } }, inputs: { EnvironmentId: "EnvironmentId", environmentId: "environmentId", InitialConversationId: "InitialConversationId", initialConversationId: "initialConversationId", Layout: "Layout", layout: "layout", CurrentUser: "CurrentUser", currentUser: "currentUser", ActiveContext: "ActiveContext", activeContext: "activeContext", ContextItemId: "ContextItemId", contextItemId: "contextItemId", ShowRoutines: "ShowRoutines", ActiveTabInput: "ActiveTabInput", activeTabInput: "activeTabInput", ActiveConversationInput: "ActiveConversationInput", activeConversationInput: "activeConversationInput", ActiveCollectionInput: "ActiveCollectionInput", activeCollectionInput: "activeCollectionInput", ActiveVersionIdInput: "ActiveVersionIdInput", activeVersionIdInput: "activeVersionIdInput", ActiveTaskInput: "ActiveTaskInput", activeTaskInput: "activeTaskInput" }, outputs: { ConversationChanged: "ConversationChanged", conversationChanged: "conversationChanged", ArtifactOpened: "ArtifactOpened", artifactOpened: "artifactOpened", NavigationChanged: "NavigationChanged", navigationChanged: "navigationChanged", NewConversationStarted: "NewConversationStarted", newConversationStarted: "newConversationStarted", ActionableCommandExecuted: "ActionableCommandExecuted", actionableCommandExecuted: "actionableCommandExecuted", AutomaticCommandExecuted: "AutomaticCommandExecuted", automaticCommandExecuted: "automaticCommandExecuted", NavigationRequested: "NavigationRequested", navigationRequested: "navigationRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 8, vars: 13, consts: [["mjSearchShortcut", "", 1, "conversation-workspace", 3, "searchTriggered"], [1, "workspace-navigation"], [3, "tabChanged", "sidebarToggled", "searchTriggered", "refreshTriggered", "activeTab", "environmentId", "currentUser", "conversationId"], [1, "workspace-loading"], [1, "workspace-content"], [3, "close", "resultSelected", "isOpen", "environmentId", "currentUser"], [3, "saved", "cancelled", "isOpen", "artifact", "currentUser"], ["text", "Loading agents...", "size", "large"], [1, "mobile-sidebar-backdrop", "visible"], [1, "workspace-sidebar", 3, "open", "collapsed", "no-transition", "width"], ["title", "Show conversations", 1, "sidebar-floating-toggle"], [1, "sidebar-resize-handle"], [1, "workspace-main"], [1, "mobile-sidebar-backdrop", "visible", 3, "click"], [1, "workspace-sidebar"], [3, "conversationSelected", "newConversationRequested", "openEntityRecord", "pinSidebarRequested", "unpinSidebarRequested", "activeTab", "environmentId", "currentUser", "selectedConversationId", "renamedConversationId", "isSidebarPinned", "isMobileView", "ShowRoutines", "Provider"], ["title", "Show conversations", 1, "sidebar-floating-toggle", 3, "click"], [1, "fas", "fa-table-columns"], [1, "sidebar-resize-handle", 3, "mousedown"], [3, "collectionNavigated", "environmentId", "currentUser"], [3, "openEntityRecord", "environmentId", "currentUser", "baseFilter", "activeTaskId"], [3, "conversationRenamed", "openEntityRecord", "navigationRequest", "taskClicked", "artifactLinkClicked", "conversationCreated", "realtimeConversationReady", "threadOpened", "threadClosed", "pendingArtifactConsumed", "pendingMessageConsumed", "pendingMessageRequested", "environmentId", "currentUser", "conversationId", "conversation", "threadId", "isNewConversation", "pendingMessage", "pendingAttachments", "pendingMessageConversationId", "pendingArtifactId", "pendingArtifactConversationId", "pendingArtifactVersionNumber"], [1, "artifact-panel-resize-handle"], [1, "workspace-artifact-panel"], [3, "closed", "navigateToLink", "shareRequested", "maximizeToggled", "applyFormRequested", "artifactId", "currentUser", "environmentId", "versionNumber", "showSaveToCollection", "viewContext", "contextCollectionId", "canShare", "canEdit", "isMaximized"], [1, "artifact-panel-resize-handle", 3, "mousedown"]], template: function ConversationWorkspaceComponent_Template(rf, ctx) { if (rf & 1) {
1263
1823
  i0.ɵɵelementStart(0, "div", 0);
1264
1824
  i0.ɵɵlistener("searchTriggered", function ConversationWorkspaceComponent_Template_div_searchTriggered_0_listener() { return ctx.openSearch(); });
1265
1825
  i0.ɵɵelementStart(1, "div", 1)(2, "mj-conversation-navigation", 2);
@@ -1291,42 +1851,78 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
1291
1851
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConversationWorkspaceComponent, [{
1292
1852
  type: Component,
1293
1853
  args: [{ standalone: false, selector: 'mj-conversation-workspace', template: "<div class=\"conversation-workspace\" [attr.data-layout]=\"layout\" mjSearchShortcut (searchTriggered)=\"openSearch()\">\n <!-- Top Navigation Bar -->\n <div class=\"workspace-navigation\">\n <mj-conversation-navigation\n [activeTab]=\"activeTab\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [conversationId]=\"selectedConversationId\"\n (tabChanged)=\"onTabChanged($event)\"\n (sidebarToggled)=\"toggleSidebar()\"\n (searchTriggered)=\"openSearch()\"\n (refreshTriggered)=\"onRefreshAgentCache()\">\n </mj-conversation-navigation>\n </div>\n\n <!-- Loading spinner while initializing agents -->\n @if (!isWorkspaceReady) {\n <div class=\"workspace-loading\">\n <mj-loading text=\"Loading agents...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Main workspace content - only renders when agents are ready -->\n @if (isWorkspaceReady) {\n <div class=\"workspace-content\">\n <!-- Mobile sidebar backdrop -->\n @if (isMobileView && isSidebarVisible && activeTab !== 'collections' && activeTab !== 'tasks') {\n <div class=\"mobile-sidebar-backdrop visible\" (click)=\"closeSidebar()\"></div>\n }\n\n <!-- Left Sidebar (hidden when Collections or Tasks view is active) -->\n @if (activeTab !== 'collections' && activeTab !== 'tasks' && isSidebarSettingsLoaded) {\n <div class=\"workspace-sidebar\"\n [class.open]=\"isSidebarVisible\"\n [class.collapsed]=\"isSidebarCollapsed\"\n [class.no-transition]=\"!sidebarTransitionsEnabled\"\n [style.width.px]=\"isSidebarCollapsed ? 0 : sidebarWidth\">\n <mj-conversation-sidebar\n [activeTab]=\"activeTab\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [selectedConversationId]=\"selectedConversationId\"\n [renamedConversationId]=\"renamedConversationId\"\n [isSidebarPinned]=\"isSidebarPinned\"\n [isMobileView]=\"isMobileView\"\n [ShowRoutines]=\"ShowRoutines\"\n [Provider]=\"Provider\"\n (conversationSelected)=\"onConversationSelected($event)\"\n (newConversationRequested)=\"startNewConversation()\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (pinSidebarRequested)=\"pinSidebar()\"\n (unpinSidebarRequested)=\"unpinSidebar()\">\n </mj-conversation-sidebar>\n </div>\n }\n\n <!-- Floating toggle button (only visible when sidebar is collapsed and settings loaded) -->\n @if (activeTab !== 'collections' && activeTab !== 'tasks' && isSidebarCollapsed && isSidebarSettingsLoaded) {\n <button class=\"sidebar-floating-toggle\"\n (click)=\"expandSidebar()\"\n title=\"Show conversations\">\n <i class=\"fas fa-table-columns\"></i>\n </button>\n }\n\n <!-- Resize handle for sidebar (only when expanded and settings loaded) -->\n @if (isSidebarVisible && !isSidebarCollapsed && activeTab !== 'collections' && activeTab !== 'tasks' && isSidebarSettingsLoaded) {\n <div class=\"sidebar-resize-handle\"\n (mousedown)=\"onSidebarResizeStart($event)\"></div>\n }\n\n <!-- Collections Full-Panel View -->\n @if (activeTab === 'collections') {\n <div class=\"workspace-main\">\n <mj-collections-full-view\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n (collectionNavigated)=\"onCollectionNavigated($event)\">\n </mj-collections-full-view>\n </div>\n }\n\n <!-- Tasks Full-Panel View -->\n @if (activeTab === 'tasks') {\n <div class=\"workspace-main\">\n <mj-tasks-full-view\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [baseFilter]=\"tasksFilter\"\n [activeTaskId]=\"activeTaskId\"\n (openEntityRecord)=\"onOpenEntityRecordFromTasks($event)\">\n </mj-tasks-full-view>\n </div>\n }\n\n <!-- Main Chat Area (only shown when not in Collections or Tasks view) -->\n @if (activeTab !== 'collections' && activeTab !== 'tasks') {\n <div class=\"workspace-main\">\n <mj-conversation-chat-area\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [conversationId]=\"selectedConversationId\"\n [conversation]=\"selectedConversation\"\n [threadId]=\"selectedThreadId\"\n [isNewConversation]=\"isNewUnsavedConversation\"\n [pendingMessage]=\"pendingMessageToSend\"\n [pendingAttachments]=\"pendingAttachmentsToSend\"\n [pendingMessageConversationId]=\"pendingMessageConversationId\"\n [pendingArtifactId]=\"pendingArtifactId\"\n [pendingArtifactConversationId]=\"pendingArtifactConversationId\"\n [pendingArtifactVersionNumber]=\"pendingArtifactVersionNumber\"\n (conversationRenamed)=\"onConversationRenamed($event)\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (navigationRequest)=\"onNavigationRequest($event)\"\n (taskClicked)=\"onTaskClicked($event)\"\n (artifactLinkClicked)=\"onArtifactLinkNavigation($event)\"\n (conversationCreated)=\"onConversationCreated($event)\"\n (realtimeConversationReady)=\"onRealtimeConversationReady($event)\"\n (threadOpened)=\"onThreadOpened($event)\"\n (threadClosed)=\"onThreadClosed()\"\n (pendingArtifactConsumed)=\"pendingArtifactId = null; pendingArtifactConversationId = null; pendingArtifactVersionNumber = null\"\n (pendingMessageConsumed)=\"pendingMessageToSend = null; pendingAttachmentsToSend = null; pendingMessageConversationId = null\"\n (pendingMessageRequested)=\"onPendingMessageRequested($event)\">\n </mj-conversation-chat-area>\n </div>\n }\n\n <!-- Right Artifact Panel -->\n @if (isArtifactPanelOpen && activeArtifactId) {\n @if (!isArtifactPanelMaximized) {\n <div class=\"artifact-panel-resize-handle\" (mousedown)=\"onArtifactPanelResizeStart($event)\"></div>\n }\n <div class=\"workspace-artifact-panel\"\n [style.width.%]=\"artifactPanelWidth\"\n [class.maximized]=\"isArtifactPanelMaximized\">\n <mj-artifact-viewer-panel\n [artifactId]=\"activeArtifactId\"\n [currentUser]=\"currentUser\"\n [environmentId]=\"environmentId\"\n [versionNumber]=\"activeVersionNumber ?? undefined\"\n [showSaveToCollection]=\"activeTab !== 'collections'\"\n [viewContext]=\"activeTab === 'collections' ? 'collection' : 'conversation'\"\n [contextCollectionId]=\"collectionState.activeCollectionId ?? undefined\"\n [canShare]=\"canShareActiveArtifact\"\n [canEdit]=\"canEditActiveArtifact\"\n [isMaximized]=\"isArtifactPanelMaximized\"\n (closed)=\"closeArtifactPanel()\"\n (navigateToLink)=\"onArtifactLinkNavigation($event)\"\n (shareRequested)=\"onArtifactShareRequested($event)\"\n (maximizeToggled)=\"toggleMaximizeArtifactPanel()\"\n (applyFormRequested)=\"onApplyFormRequested($event)\">\n </mj-artifact-viewer-panel>\n </div>\n }\n </div>\n }\n\n <!-- Global Search Panel -->\n <mj-search-panel\n [isOpen]=\"isSearchPanelOpen\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n (close)=\"closeSearch()\"\n (resultSelected)=\"handleSearchResult($event)\">\n </mj-search-panel>\n\n <!-- Toast Notifications -->\n <mj-toast></mj-toast>\n\n <!-- Artifact Share Modal -->\n <mj-artifact-share-modal\n [isOpen]=\"isArtifactShareModalOpen\"\n [artifact]=\"artifactToShare\"\n [currentUser]=\"currentUser\"\n (saved)=\"onArtifactShared()\"\n (cancelled)=\"onArtifactShareModalClose()\">\n </mj-artifact-share-modal>\n</div>", styles: [".conversation-workspace {\n display: flex;\n flex-direction: column;\n height: 100%; /* Fill parent container - works in any context (tabs, embedded, etc.) */\n min-height: 0; /* Allow flex shrinking in nested flex containers */\n background-color: var(--mj-bg-surface-sunken);\n position: relative;\n}\n\n.workspace-navigation {\n flex-shrink: 0;\n height: 48px;\n background-color: var(--mj-text-primary);\n border-bottom: 1px solid color-mix(in srgb, var(--mj-text-inverse) 10%, transparent);\n}\n\n.workspace-content {\n flex: 1;\n display: flex;\n overflow: hidden;\n min-height: 0;\n position: relative;\n}\n\n.workspace-sidebar {\n flex-shrink: 0;\n background-color: var(--mj-text-primary);\n border-right: 1px solid var(--mj-border-default);\n overflow-y: auto;\n transition: width 0.3s ease;\n}\n\n/* Disable transitions during initial load to prevent jarring animation */\n.workspace-sidebar.no-transition {\n transition: none !important;\n}\n\n.workspace-sidebar.collapsed {\n width: 0 !important;\n min-width: 0;\n border-right: none;\n overflow: hidden;\n}\n\n/* Floating toggle button (only visible when sidebar is collapsed) */\n.sidebar-floating-toggle {\n position: absolute;\n top: 12px;\n left: 12px;\n z-index: 100;\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-text-primary);\n border: 1px solid color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border-radius: 8px;\n cursor: pointer;\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-text-primary) 15%, transparent);\n transition: all 0.2s ease;\n}\n\n.sidebar-floating-toggle:hover {\n background: var(--mj-text-primary);\n border-color: color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 20%, transparent);\n transform: scale(1.05);\n}\n\n.sidebar-floating-toggle:active {\n transform: scale(0.98);\n}\n\n.sidebar-floating-toggle i {\n color: color-mix(in srgb, var(--mj-text-inverse) 85%, transparent);\n font-size: 16px;\n transition: color 0.15s ease;\n}\n\n.sidebar-floating-toggle:hover i {\n color: var(--mj-text-inverse);\n}\n\n.sidebar-resize-handle {\n width: 4px;\n background: transparent;\n cursor: ew-resize;\n flex-shrink: 0;\n position: relative;\n transition: background-color 0.2s;\n}\n\n.sidebar-resize-handle:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.sidebar-resize-handle:active {\n background: var(--mj-brand-primary-hover);\n}\n\n.sidebar-resize-handle::before {\n content: '';\n position: absolute;\n left: -4px;\n right: -4px;\n top: 0;\n bottom: 0;\n cursor: ew-resize;\n}\n\n.workspace-main {\n flex: 1;\n display: flex;\n flex-direction: column;\n background-color: var(--mj-bg-surface-card);\n overflow: hidden;\n min-height: 0;\n}\n\n.workspace-main > mj-conversation-chat-area {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n\n.workspace-artifact-panel {\n flex-shrink: 0;\n background-color: var(--mj-bg-surface-card);\n overflow: hidden;\n min-width: 300px;\n max-width: 70%;\n}\n\n.artifact-panel-resize-handle {\n width: 4px;\n background-color: transparent;\n cursor: ew-resize;\n flex-shrink: 0;\n transition: background-color 0.2s;\n position: relative;\n z-index: 10;\n}\n\n/* Wider hit area for easier grabbing */\n.artifact-panel-resize-handle::before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: -4px;\n right: -4px;\n cursor: ew-resize;\n}\n\n.artifact-panel-resize-handle:hover {\n background-color: var(--mj-brand-primary-hover);\n}\n\n.artifact-panel-resize-handle:active {\n background-color: var(--mj-brand-primary-hover);\n}\n\n/* Maximized artifact panel */\n.workspace-artifact-panel.maximized {\n width: 100% !important;\n max-width: 100%;\n}\n\n/* Compact layout */\n.conversation-workspace[data-layout=\"compact\"] .workspace-sidebar {\n width: 240px;\n}\n\n.conversation-workspace[data-layout=\"compact\"] .workspace-artifact-panel {\n width: 400px;\n}\n\n/* Embedded layout */\n.conversation-workspace[data-layout=\"embedded\"] {\n height: 100%;\n}\n\n.conversation-workspace[data-layout=\"embedded\"] .workspace-navigation {\n height: 48px;\n}\n\n/* Responsive */\n@media (max-width: 1024px) {\n .workspace-sidebar {\n position: absolute;\n left: 0;\n top: 60px;\n bottom: 0;\n z-index: 100;\n box-shadow: 2px 0 8px color-mix(in srgb, var(--mj-text-primary) 10%, transparent);\n }\n\n .workspace-artifact-panel {\n position: fixed;\n right: 0;\n top: 60px;\n bottom: 0;\n z-index: 100;\n box-shadow: -2px 0 8px color-mix(in srgb, var(--mj-text-primary) 10%, transparent);\n }\n}\n\n/* Desktop sidebar toggle animation */\n@media (min-width: 769px) {\n .workspace-sidebar {\n transition: width 0.3s ease, min-width 0.3s ease;\n overflow: hidden;\n }\n\n .workspace-sidebar:not(.open) {\n width: 0 !important;\n min-width: 0;\n border-right: none;\n }\n\n .sidebar-resize-handle {\n transition: opacity 0.3s ease, width 0.3s ease;\n }\n\n .workspace-sidebar:not(.open) ~ .sidebar-resize-handle {\n opacity: 0;\n width: 0;\n pointer-events: none;\n }\n}\n\n/* Mobile adjustments: 481px - 768px */\n@media (max-width: 768px) {\n .workspace-sidebar {\n position: fixed;\n left: 0;\n top: 80px;\n z-index: 1000;\n width: 260px !important;\n height: calc(100vh - 80px);\n transform: translateX(-100%);\n transition: transform 0.3s ease;\n }\n\n .workspace-sidebar.open {\n transform: translateX(0);\n }\n\n .workspace-artifact-panel {\n position: fixed;\n width: 100%;\n left: 0;\n right: 0;\n top: 56px; /* 48px nav + 8px dark strip above blue border */\n bottom: 0;\n z-index: 1000;\n max-width: 100%;\n height: auto;\n }\n\n .sidebar-resize-handle,\n .artifact-panel-resize-handle,\n .sidebar-floating-toggle {\n display: none;\n }\n\n /* Mobile sidebar backdrop */\n .mobile-sidebar-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.3s ease;\n z-index: 999;\n }\n\n .mobile-sidebar-backdrop.visible {\n opacity: 1;\n pointer-events: auto;\n }\n}\n\n/* Small Phone adjustments: <= 480px */\n@media (max-width: 480px) {\n .workspace-navigation {\n height: 48px;\n }\n\n .workspace-sidebar {\n width: 100%;\n }\n}\n\n/* Loading spinner (shown while initializing agents) */\n.workspace-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n width: 100%;\n background: var(--mj-bg-surface-card);\n gap: 1rem;\n}\n\n.loading-spinner {\n font-size: 3rem;\n color: var(--mj-brand-primary);\n}\n\n.workspace-loading p {\n font-size: 1rem;\n color: var(--mj-text-secondary);\n margin: 0;\n}"] }]
1294
- }], () => [{ type: i1.ArtifactStateService }, { type: i2.CollectionStateService }, { type: i3.ArtifactPermissionService }, { type: i4.MJNotificationService }, { type: i5.ConversationStreamingService }, { type: i6.UICommandHandlerService }, { type: i0.ChangeDetectorRef }], { environmentId: [{
1854
+ }], () => [{ type: i1.ArtifactStateService }, { type: i2.CollectionStateService }, { type: i3.ArtifactPermissionService }, { type: i4.MJNotificationService }, { type: i5.ConversationStreamingService }, { type: i6.UICommandHandlerService }, { type: i0.ChangeDetectorRef }], { EnvironmentId: [{
1855
+ type: Input
1856
+ }], environmentId: [{
1857
+ type: Input
1858
+ }], InitialConversationId: [{
1295
1859
  type: Input
1296
1860
  }], initialConversationId: [{
1297
1861
  type: Input
1862
+ }], Layout: [{
1863
+ type: Input
1298
1864
  }], layout: [{
1299
1865
  type: Input
1866
+ }], CurrentUser: [{
1867
+ type: Input
1300
1868
  }], currentUser: [{
1301
1869
  type: Input
1870
+ }], ActiveContext: [{
1871
+ type: Input
1302
1872
  }], activeContext: [{
1303
1873
  type: Input
1874
+ }], ContextItemId: [{
1875
+ type: Input
1304
1876
  }], contextItemId: [{
1305
1877
  type: Input
1306
1878
  }], ShowRoutines: [{
1307
1879
  type: Input
1880
+ }], ActiveTabInput: [{
1881
+ type: Input
1308
1882
  }], activeTabInput: [{
1309
1883
  type: Input
1884
+ }], ActiveConversationInput: [{
1885
+ type: Input
1310
1886
  }], activeConversationInput: [{
1311
1887
  type: Input
1888
+ }], ActiveCollectionInput: [{
1889
+ type: Input
1312
1890
  }], activeCollectionInput: [{
1313
1891
  type: Input
1892
+ }], ActiveVersionIdInput: [{
1893
+ type: Input
1314
1894
  }], activeVersionIdInput: [{
1315
1895
  type: Input
1896
+ }], ActiveTaskInput: [{
1897
+ type: Input
1316
1898
  }], activeTaskInput: [{
1317
1899
  type: Input
1900
+ }], ConversationChanged: [{
1901
+ type: Output
1318
1902
  }], conversationChanged: [{
1319
1903
  type: Output
1904
+ }], ArtifactOpened: [{
1905
+ type: Output
1320
1906
  }], artifactOpened: [{
1321
1907
  type: Output
1908
+ }], NavigationChanged: [{
1909
+ type: Output
1322
1910
  }], navigationChanged: [{
1323
1911
  type: Output
1912
+ }], NewConversationStarted: [{
1913
+ type: Output
1324
1914
  }], newConversationStarted: [{
1325
1915
  type: Output
1916
+ }], ActionableCommandExecuted: [{
1917
+ type: Output
1326
1918
  }], actionableCommandExecuted: [{
1327
1919
  type: Output
1920
+ }], AutomaticCommandExecuted: [{
1921
+ type: Output
1328
1922
  }], automaticCommandExecuted: [{
1329
1923
  type: Output
1924
+ }], NavigationRequested: [{
1925
+ type: Output
1330
1926
  }], navigationRequested: [{
1331
1927
  type: Output
1332
1928
  }], onWindowResize: [{