@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
@@ -1 +1 @@
1
- {"version":3,"file":"chat-overlay.component.js","sourceRoot":"","sources":["../../../../src/lib/components/overlay/chat-overlay.component.ts","../../../../src/lib/components/overlay/chat-overlay.component.html"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACH,SAAS,EACT,YAAY,EACZ,KAAK,EAGL,MAAM,EACN,iBAAiB,EACjB,MAAM,EACT,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAsC,2BAA2B,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAChI,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,EAAE,yBAAyB,EAA2B,MAAM,4CAA4C,CAAC;;;;ICrBhG,+BAAiC;IAAA,YAA0C;IAAA,iBAAO;;;IAAjD,cAA0C;IAA1C,wEAA0C;;;;IATnF,8BAIiD;IAA5C,4NAAe,kCAA2B,KAAC;IAG5C,AADA,AADA,uBAAgH,WACI,WACvD;IAC7D,yHAAuB;IAIvB,iCAK+B;IAAvB,AADA,qJAAe,wBAAwB,IAAC,sMAC/B,mBAAY,KAAC;IAC1B,uBAAoD;IAE5D,AADI,iBAAS,EACP;;;IAjBD,qDAAkC;IADlC,AADA,oDAAoC,wCACE;IAMvC,eAEC;IAFD,iDAEC;;;IAyBG,gCAA2D;IAAA,YAA0C;IAAA,iBAAO;;;IAAjD,cAA0C;IAA1C,wEAA0C;;;;IAR7G,kCAK2B;IAAnB,6MAAS,eAAQ,KAAC;IACtB,wBAAgF;IAChF,0HAAuB;IAG3B,iBAAS;;;IAND,qDAAkC;IAGtC,eAEC;IAFD,iDAEC;;;;IAcG,+BACiD;IAA5C,sOAAa,6BAAsB,MAAM,CAAC,KAAC;IAAC,iBAAM;IACvD,+BACgD;IAA3C,sOAAa,6BAAsB,KAAK,CAAC,KAAC;IAAC,iBAAM;IACtD,+BACqD;IAAhD,sOAAa,6BAAsB,UAAU,CAAC,KAAC;IAAC,iBAAM;;;;IAiBnD,kCAGwC;IAApC,4NAAS,gCAAyB,KAAC;IACnC,wBAAgD;IACpD,iBAAS;;;;IAnCzB,+BAIsE;IAGlE,8GAA4B;IAWxB,AADJ,+BAAiC,cACG;IAC5B,wBAAiC;IACjC,4BAAM;IAAA,4BAAY;IACtB,AADsB,iBAAO,EACvB;IAEF,AADJ,+BAAyC,iBAIA;IAAjC,6MAAS,6BAAsB,KAAC;IAChC,wBAAgC;IACpC,iBAAS;IACT,8HAAsB;IAQtB,mCAG+B;IAA3B,8MAAS,uBAAgB,KAAC;IAC1B,yBAA8G;IAClH,iBAAS;IACT,mCAGyB;IAArB,8MAAS,iBAAU,KAAC;IACpB,yBAAiC;IAG7C,AADI,AADI,iBAAS,EACP,EACJ;IAIF,AADJ,gCAA+B,qCAsB1B;IADG,AADA,AADA,AADA,AADA,AADA,mQAAuB,oCAA6B,KAAC,sPAC9B,oCAA6B,KAAC,sPAC3B,iCAA0B,KAAC,gPACjC,iCAA0B,KAAC,kPAC1B,kCAA2B,KAAC,sOAClC,4BAAqB,KAAC;IAGjD,AADI,AADK,iBAA4B,EAC3B,EACJ;;;IAzED,AADA,AADA,sFAA4D,0EACE,4EACE;IAHhE,yDAAyC;IAM1C,cAOC;IAPD,sDAOC;IAeO,eAOC;IAPD,iDAOC;IAGG,cAA6D;IAA7D,kFAA6D;IAEzC,cAAyC;IAAC,AAA1C,yDAAyC,6CAA4C;IAc7G,eAA+B;IAa/B,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,oDAA+B,mCACJ,yCACM,qCACJ,+CACU,yCACN,iDACQ,qEACoB,qBACzC,2BACM,0BACD,gCACM,iCACN,iDACgB;;;IA/GzD,0GAA0C;IA2B1C,6GAAyC;IAezC,4GAAqD;;;IA1CrD,2EAsBC;IAKD,cAYC;IAZD,0EAYC;IAGD,cA+EC;IA/ED,sFA+EC;;AD7DL,MAAM,OAAO,0BAA2B,SAAQ,oBAAoB;IACxD,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAChC,MAAM,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAC3C,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACzC,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;IAEvC,+BAA+B;IACvB,MAAM,CAAU,gBAAgB,GAAG,kBAAkB,CAAC;IACtD,MAAM,CAAU,aAAa,GAAG,GAAG,CAAC;IACpC,MAAM,CAAU,cAAc,GAAG,GAAG,CAAC;IACrC,MAAM,CAAU,SAAS,GAAG,GAAG,CAAC;IAChC,MAAM,CAAU,UAAU,GAAG,GAAG,CAAC;IACjC,MAAM,CAAU,SAAS,GAAG,GAAG,CAAC;IAChC,MAAM,CAAU,UAAU,GAAG,IAAI,CAAC;IAE1C,gCAAgC;IAChC,uEAAuE;IAC/D,MAAM,CAAU,cAAc,GAAG,EAAE,CAAC;IAC5C,+DAA+D;IACvD,MAAM,CAAU,cAAc,GAAG,EAAE,CAAC;IAC5C,yEAAyE;IACjE,MAAM,CAAU,uBAAuB,GAAG,EAAE,CAAC;IACrD,yEAAyE;IACjE,MAAM,CAAU,wBAAwB,GAAG,CAAC,CAAC;IAErD,iBAAiB;IAEjB,8EAA8E;IACtE,UAAU,GAAG,IAAI,CAAC;IAE1B,IACI,SAAS,CAAC,KAAc;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,gHAAgH;IACvG,WAAW,CAAY;IAEhC,4GAA4G;IACnG,aAAa,CAAU;IAEhC,8GAA8G;IACrG,UAAU,GAAmC,IAAI,CAAC;IAE3D,+EAA+E;IACtE,kBAAkB,GAAW,qBAAqB,CAAC;IAE5D;;;;;OAKG;IACM,aAAa,GAAW,CAAC,CAAC;IAEnC,kBAAkB;IAElB,kDAAkD;IACxC,iBAAiB,GAAG,IAAI,YAAY,EAAoB,CAAC;IAEnE,iEAAiE;IACvD,YAAY,GAAG,IAAI,YAAY,EAAyB,CAAC;IAEnE,kEAAkE;IACxD,oBAAoB,GAAG,IAAI,YAAY,EAAoC,CAAC;IAEtF,qEAAqE;IAC3D,qBAAqB,GAAG,IAAI,YAAY,EAAiB,CAAC;IAEpE,iEAAiE;IACvD,mBAAmB,GAAG,IAAI,YAAY,EAAqB,CAAC;IAEtE,sDAAsD;IAC5C,gBAAgB,GAAG,IAAI,YAAY,EAAoD,CAAC;IAElG,qCAAqC;IAC3B,WAAW,GAAG,IAAI,YAAY,EAAgB,CAAC;IAEzD,0BAA0B;IAEnB,KAAK,GAAqB,WAAW,CAAC;IACtC,WAAW,GAAG,CAAC,CAAC;IAEvB,sDAAsD;IAC/C,UAAU,GAAG,0BAA0B,CAAC,aAAa,CAAC;IACtD,WAAW,GAAG,0BAA0B,CAAC,cAAc,CAAC;IAE/D;;;;OAIG;IACI,aAAa,GAAG,CAAC,CAAC;IAEzB,iGAAiG;IAC1F,gBAAgB,GAAG,KAAK,CAAC;IAEhC;;;;OAIG;IACI,eAAe,GAAG,KAAK,CAAC;IAE/B;;;;OAIG;IACI,QAAQ,GAAG,KAAK,CAAC;IAExB,6CAA6C;IACrC,eAAe,GAAkB,IAAI,CAAC;IAC9C,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,iCAAiC;IAC1B,YAAY,GAAgC,IAAI,CAAC;IAExD,wDAAwD;IACjD,iBAAiB,GAAG,IAAI,CAAC;IAEhC,0DAA0D;IACnD,cAAc,GAAkB,IAAI,CAAC;IAC5C;wFACoF;IAC7E,4BAA4B,GAAkB,IAAI,CAAC;IAE1D,8DAA8D;IACvD,kBAAkB,GAA+B,IAAI,CAAC;IAE7D,wBAAwB;IAChB,UAAU,GAAG,KAAK,CAAC;IACnB,UAAU,GAAuC,IAAI,CAAC;IACtD,YAAY,GAAG,CAAC,CAAC;IACjB,YAAY,GAAG,CAAC,CAAC;IACjB,gBAAgB,GAAG,CAAC,CAAC;IACrB,iBAAiB,GAAG,CAAC,CAAC;IAE9B,wBAAwB;IAChB,qBAAqB,GAAG,CAAC,CAAC;IAC1B,qBAAqB,GAAG,CAAC,CAAC;IAClC,oGAAoG;IAC5F,eAAe,GAAG,KAAK,CAAC;IAChC,2FAA2F;IACnF,qBAAqB,GAAkB,IAAI,CAAC;IACpD,kFAAkF;IAC1E,mBAAmB,GAAuB,IAAI,CAAC;IAEvD,oBAAoB;IAEpB,QAAQ;QACJ,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAED,WAAW;QACP,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACrC,CAAC;IAED,yBAAyB;IAEzB,mDAAmD;IAC5C,MAAM;QACT,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC;IACL,CAAC;IAED,gDAAgD;IACzC,MAAM;QACT,uEAAuE;QACvE,mEAAmE;QACnE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,kDAAkD;IAC3C,QAAQ;QACX,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,mDAAmD;IAC5C,cAAc;QACjB,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;QAC5B,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,6DAA6D;IACtD,uBAAuB;QAC1B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;IAED,sDAAsD;IAC/C,qBAAqB,CAAC,KAI5B;QACG,gEAAgE;QAChE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC;QACnD,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,IAAI,IAAI,CAAC;QAC3D,IAAI,CAAC,4BAA4B,GAAG,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,mDAAmD;IAC5C,wBAAwB;QAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;IAC7C,CAAC;IAED,gDAAgD;IACzC,qBAAqB,CAAC,MAAmE;QAC5F,yDAAyD;QACzD,gEAAgE;IACpE,CAAC;IAED,yCAAyC;IAClC,kBAAkB,CAAC,KAAuD;QAC7E,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,oDAAoD;IAC7C,mBAAmB,CAAC,KAAwB;QAC/C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,4CAA4C;IACrC,aAAa,CAAC,IAAkB;QACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,8CAA8C;IACvC,oBAAoB;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,yDAAyD;QACzD,gEAAgE;QAChE,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACI,IAAI,CAAC,KAAY;QACpB,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,yFAAyF;IAClF,IAAI;QACP,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC3B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,sFAAsF;IAC/E,eAAe;QAClB,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,yBAAyB;IAEzB,4CAA4C;IACrC,aAAa,CAAC,KAAiB,EAAE,IAAiC;QACrE,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC;QAE1C,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1D,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3D,CAAC;IAEO,YAAY,GAAG,CAAC,KAAiB,EAAQ,EAAE;QAC/C,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAEjD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,0CAA0C;QAC5F,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,yCAAyC;QAE3F,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YAC/D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YAC9D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC,CAAC;IAEM,WAAW,GAAG,GAAS,EAAE;QAC7B,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAC7B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;IAC3B,CAAC,CAAC;IAEM,qBAAqB;QACzB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7D,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9D,CAAC;IAEO,UAAU,CAAC,KAAa;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IACjH,CAAC;IAEO,WAAW,CAAC,KAAa;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;IACnH,CAAC;IAED,6EAA6E;IAE7E;;;;;;;;OAQG;IACI,mBAAmB,CAAC,KAAmB;QAC1C,+FAA+F;QAC/F,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAChE,kFAAkF;QAClF,IAAI,IAAI,CAAC,qBAAqB,KAAK,IAAI;YAAE,OAAO;QAChD,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,MAAM,MAAM,GAAG,KAAK,CAAC,aAA4B,CAAC;QAClD,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC;QAElC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,OAAO,CAAC;QAC3C,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC;QAChD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAChE,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7D,QAAQ,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACrE,CAAC;IAEO,gBAAgB,GAAG,CAAC,KAAmB,EAAQ,EAAE;QACrD,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,qBAAqB;YAAE,OAAO;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,yBAAyB;QACpF,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,0BAA0B,CAAC,wBAAwB;gBAAE,OAAO;YACnF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,CAAC;QAClF,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC,CAAC;IAEM,eAAe,GAAG,CAAC,KAAmB,EAAQ,EAAE;QACpD,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,qBAAqB;YAAE,OAAO;QAC3D,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEjC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,6EAA6E;YAC7E,mFAAmF;YACnF,IAAI,CAAC;gBAAC,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QACjG,CAAC;QACD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAElC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC;QACxC,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC;QACpD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;aAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC,CAAC;IAEM,yBAAyB;QAC7B,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACnE,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAChE,QAAQ,CAAC,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACxE,CAAC;IAED;;;OAGG;IACH,IAAY,aAAa;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,0BAA0B,CAAC,uBAAuB,CAAC;IAChG,CAAC;IAED,iFAAiF;IACzE,kBAAkB,CAAC,KAAa;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW;cAC9B,0BAA0B,CAAC,cAAc;cACzC,0BAA0B,CAAC,cAAc;cACzC,IAAI,CAAC,aAAa,CAAC;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,kCAAkC;IAElC,wFAAwF;IACxF,IAAW,cAAc;QACrB,MAAM,KAAK,GAAG,0BAA0B,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;QAC7E,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW;cACxB,0BAA0B,CAAC,cAAc;cACzC,IAAI,CAAC,aAAa,CAAC;QACzB,OAAO,IAAI,CAAC,GAAG,CACX,0BAA0B,CAAC,cAAc,EACzC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAC5E,CAAC;IACN,CAAC;IAED;;;;;;OAMG;IACH,IAAW,aAAa;QACpB,MAAM,KAAK,GAAG,0BAA0B,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;QAC7E,MAAM,sBAAsB,GAAG,MAAM,CAAC,WAAW;cAC3C,IAAI,CAAC,WAAW;cAChB,IAAI,CAAC,aAAa,CAAC;QACzB,OAAO,IAAI,CAAC,GAAG,CACX,0BAA0B,CAAC,cAAc,EACzC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAC1C,CAAC;IACN,CAAC;IAED,0BAA0B;IAE1B,2FAA2F;IACnF,eAAe;QACnB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YAC9B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,GAAG,2BAA2B,CAAC,oBAAoB,CAAC;QAC1E,CAAC;IACL,CAAC;IAED,oEAAoE;IAC5D,eAAe;QACnB,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC;YACvC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,0BAA0B,CAAC,gBAAgB,CAAC,CAAC;YAC3E,IAAI,GAAG,EAAE,CAAC;gBACN,MAAM,KAAK,GAAiB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC5C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAClD,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;oBAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;gBAC1D,CAAC;gBACD,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;oBAC1C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC;gBACvC,CAAC;YACL,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,wBAAwB;QAC5B,CAAC;IACL,CAAC;IAED,2EAA2E;IACnE,eAAe;QACnB,MAAM,KAAK,GAAiB;YACxB,KAAK,EAAE,IAAI,CAAC,UAAU;YACtB,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY,EAAE,IAAI,CAAC,QAAQ;SAC9B,CAAC;QACF,cAAc,CAAC,QAAQ,CAAC,mBAAmB,CACvC,0BAA0B,CAAC,gBAAgB,EAC3C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CACxB,CAAC;IACN,CAAC;IAED,6DAA6D;IACrD,uBAAuB;QAC3B,IAAI,CAAC,MAAM,CAAC,YAAY;aACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,CAAC,KAA8B,EAAE,EAAE;YAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC7B,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC;QACL,CAAC,CAAC,CAAC;QAEP,kEAAkE;QAClE,4DAA4D;QAC5D,yCAAyC;QACzC,IAAI,CAAC,MAAM,CAAC,uBAAuB;aAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,GAAG,EAAE;YACZ,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;gBAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;YAClB,CAAC;QACL,CAAC,CAAC,CAAC;QAEP,IAAI,CAAC,MAAM,CAAC,qBAAqB;aAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,CAAC,EAAiB,EAAE,EAAE;YAC7B,0DAA0D;YAC1D,IAAI,EAAE,KAAK,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;gBACpE,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;gBACpC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;gBAC1B,IAAI,CAAC,iBAAiB,GAAG,EAAE,KAAK,IAAI,CAAC;gBACrC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,8BAA8B;gBACxD,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC1C,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAC7B,CAAC;QACL,CAAC,CAAC,CAAC;IACX,CAAC;IAED,sDAAsD;IAC9C,qBAAqB;QACzB,IAAI,CAAC,WAAW,CAAC,aAAa;aACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,CAAC,KAA4B,EAAE,EAAE;YACxC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACX,CAAC;IAED,2DAA2D;IACnD,qBAAqB,CAAC,KAA8B;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC;QAC5C,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC;QACvD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,gCAAgC;QAC1D,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAChE,CAAC;IAED,yCAAyC;IACjC,wBAAwB,CAAC,MAAqB,EAAE,KAAoB;QACxE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAC3B,sBAAsB,EAAE,MAAM;YAC9B,iBAAiB,EAAE,KAAK;SAC3B,CAAC,CAAC;IACP,CAAC;qRAjmBQ,0BAA0B,yBAA1B,0BAA0B;6DAA1B,0BAA0B;YC9DvC,kFAAiB;;YAAjB,wCA4HC;;;iFD9DY,0BAA0B;cANtC,SAAS;6BACM,KAAK,YACP,wBAAwB;;kBAkCjC,KAAK;;kBAcL,KAAK;;kBAGL,KAAK;;kBAGL,KAAK;;kBAGL,KAAK;;kBAQL,KAAK;;kBAKL,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kBAGN,MAAM;;kFApFE,0BAA0B","sourcesContent":["/**\n * @fileoverview Floating Chat Overlay Component\n *\n * A collapsible floating panel (bottom-right corner) that wraps the\n * conversation-chat-area component. Provides a persistent, minimizable chat\n * experience across the application.\n *\n * This component is GENERIC -- it does NOT know about NavigationService,\n * Knowledge Hub, or any Explorer-specific concepts. It raises events that\n * the consuming application handles.\n *\n * Coordinates with the full Conversations workspace view through\n * ConversationBridgeService so that switching between overlay and workspace\n * preserves conversation continuity.\n */\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ChangeDetectorRef,\n inject\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { takeUntil } from 'rxjs/operators';\nimport { UserInfo, Metadata, CompositeKey } from '@memberjunction/core';\nimport { MJConversationEntity, MJTaskEntity, MJEnvironmentEntityExtended, UserInfoEngine } from '@memberjunction/core-entities';\nimport { AgentClientService } from '@memberjunction/ng-agent-client';\nimport { ClientToolResultEvent } from '@memberjunction/ai-agent-client';\nimport { ConversationBridgeService, ConversationSwitchEvent } from '../../services/conversation-bridge.service';\nimport { NavigationRequest } from '@memberjunction/ng-artifacts';\nimport { PendingAttachment } from '@memberjunction/ng-composer';\n\n/** Visual state of the overlay panel */\nexport type ChatOverlayState = 'collapsed' | 'expanded' | 'maximized';\n\n/** Event payload when the active conversation changes in the overlay */\nexport interface OverlayConversationSwitchedEvent {\n PreviousConversationID: string | null;\n NewConversationID: string | null;\n}\n\n/** Persisted overlay size and position preferences */\ninterface OverlayPrefs {\n width: number;\n height: number;\n /** Pixels the bubble has been dragged up from its default bottom position. Optional for back-compat with older saved prefs. */\n bubbleOffsetY?: number;\n /** When true, the bubble is hidden and only a thin sliver shows on the right edge. */\n bubbleHidden?: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-chat-agents-overlay',\n templateUrl: './chat-overlay.component.html',\n styleUrls: ['./chat-overlay.component.css']\n})\nexport class ChatAgentsOverlayComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n private cdr = inject(ChangeDetectorRef);\n private bridge = inject(ConversationBridgeService);\n private agentClient = inject(AgentClientService);\n private destroy$ = new Subject<void>();\n\n // --- Settings persistence ---\n private static readonly SIZE_SETTING_KEY = 'ChatOverlay.Size';\n private static readonly DEFAULT_WIDTH = 420;\n private static readonly DEFAULT_HEIGHT = 600;\n private static readonly MIN_WIDTH = 320;\n private static readonly MIN_HEIGHT = 350;\n private static readonly MAX_WIDTH = 900;\n private static readonly MAX_HEIGHT = 1000;\n\n // --- Bubble drag constants ---\n /** Default `bottom` for both bubble and panel (matches CSS 1.5rem). */\n private static readonly BASE_BOTTOM_PX = 24;\n /** Floating bubble diameter in pixels (matches CSS 3.5rem). */\n private static readonly BUBBLE_SIZE_PX = 56;\n /** Minimum gap to keep between the overlay and the viewport top edge. */\n private static readonly VIEWPORT_TOP_PADDING_PX = 16;\n /** Mousedown-to-mousemove distance that promotes a click into a drag. */\n private static readonly BUBBLE_DRAG_THRESHOLD_PX = 5;\n\n // --- Inputs ---\n\n /** Controls external visibility (e.g., parent hides overlay on chat route) */\n private _IsVisible = true;\n\n @Input()\n set IsVisible(value: boolean) {\n const prev = this._IsVisible;\n this._IsVisible = value;\n if (!value && prev && this.State !== 'collapsed') {\n this.Collapse();\n }\n this.cdr.detectChanges();\n }\n get IsVisible(): boolean {\n return this._IsVisible;\n }\n\n /** Current user info, passed through to conversation-chat-area. Auto-resolved from Metadata if not provided. */\n @Input() CurrentUser!: UserInfo;\n\n /** Environment ID, passed through to conversation-chat-area. Auto-resolved from default if not provided. */\n @Input() EnvironmentId!: string;\n\n /** Application context snapshot for AI agent awareness. Updated by the host app on navigation transitions. */\n @Input() AppContext: Record<string, unknown> | null = null;\n\n /** Greeting message shown in the empty state when no conversation is active */\n @Input() EmptyStateGreeting: string = 'How can I help you?';\n\n /**\n * Pixels reserved at the top of the viewport that the bubble and panel must not\n * cross. Set this from the host app to the height of any fixed top chrome (e.g.\n * Explorer's shell-header). Defaults to 0 — generic apps without top chrome\n * keep the full viewport available.\n */\n @Input() TopBoundaryPx: number = 0;\n\n // --- Outputs ---\n\n /** Emitted when the overlay visibility changes */\n @Output() VisibilityChanged = new EventEmitter<ChatOverlayState>();\n\n /** Emitted when a tool finishes executing in the agent client */\n @Output() ToolExecuted = new EventEmitter<ClientToolResultEvent>();\n\n /** Emitted when the active conversation changes in the overlay */\n @Output() ConversationSwitched = new EventEmitter<OverlayConversationSwitchedEvent>();\n\n /** Emitted when the user requests opening the full chat workspace */\n @Output() OpenFullChatWorkspace = new EventEmitter<string | null>();\n\n /** Emitted when navigation is requested (entity record, etc.) */\n @Output() NavigationRequested = new EventEmitter<NavigationRequest>();\n\n /** Emitted when an entity record open is requested */\n @Output() OpenEntityRecord = new EventEmitter<{entityName: string; compositeKey: CompositeKey}>();\n\n /** Emitted when a task is clicked */\n @Output() TaskClicked = new EventEmitter<MJTaskEntity>();\n\n // --- Component State ---\n\n public State: ChatOverlayState = 'collapsed';\n public UnreadCount = 0;\n\n /** Panel dimensions (persisted via UserInfoEngine) */\n public PanelWidth = ChatAgentsOverlayComponent.DEFAULT_WIDTH;\n public PanelHeight = ChatAgentsOverlayComponent.DEFAULT_HEIGHT;\n\n /**\n * Pixels the floating bubble has been dragged up from its default\n * bottom-right corner position. Always >= 0; clamping at render time\n * keeps the bubble on-screen even after a viewport resize.\n */\n public BubbleOffsetY = 0;\n\n /** True while the user is actively dragging the bubble; used to swap cursor + suppress click. */\n public IsBubbleDragging = false;\n\n /**\n * True from mousedown until mouseup on the bubble, regardless of whether the\n * gesture became a drag. Used to give immediate \"I'm being held\" feedback so\n * the user can see drag is possible even before crossing the move threshold.\n */\n public IsBubblePressed = false;\n\n /**\n * When true, the floating bubble is hidden and replaced by a thin sliver\n * flush with the right edge of the viewport. Persisted across sessions via\n * OverlayPrefs.bubbleHidden. Clicking the sliver restores the bubble.\n */\n public IsHidden = false;\n\n /** Active conversation ID managed locally */\n private _conversationId: string | null = null;\n public get ConversationId(): string | null {\n return this._conversationId;\n }\n\n /** Active conversation entity */\n public Conversation: MJConversationEntity | null = null;\n\n /** Whether a new unsaved conversation is in progress */\n public IsNewConversation = true;\n\n /** Pending message to send after conversation creation */\n public PendingMessage: string | null = null;\n /** The conversation {@link PendingMessage} is destined for — pins the auto-send to that\n * conversation's input so a fast conversation-swap can't redirect it elsewhere. */\n public PendingMessageConversationId: string | null = null;\n\n /** Pending attachments to send after conversation creation */\n public PendingAttachments: PendingAttachment[] | null = null;\n\n /** Resize drag state */\n private isResizing = false;\n private resizeEdge: 'left' | 'top' | 'top-left' | null = null;\n private resizeStartX = 0;\n private resizeStartY = 0;\n private resizeStartWidth = 0;\n private resizeStartHeight = 0;\n\n /** Bubble drag state */\n private bubbleDragStartMouseY = 0;\n private bubbleDragStartOffset = 0;\n /** True once the pointer has moved past BUBBLE_DRAG_THRESHOLD_PX; suppresses the implicit click. */\n private bubbleDragMoved = false;\n /** ID of the pointer currently driving the drag — guards against multi-touch confusion. */\n private activeBubblePointerId: number | null = null;\n /** Element that captured the pointer; needed to release capture on end/cancel. */\n private bubbleCaptureTarget: HTMLElement | null = null;\n\n // --- Lifecycle ---\n\n ngOnInit(): void {\n this.resolveDefaults();\n this.loadPreferences();\n this.subscribeToBridgeEvents();\n this.subscribeToToolEvents();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.removeResizeListeners();\n this.removeBubbleDragListeners();\n }\n\n // --- Public Methods ---\n\n /** Toggle between collapsed and expanded states */\n public Toggle(): void {\n if (this.State === 'collapsed') {\n this.Expand();\n } else {\n this.Collapse();\n }\n }\n\n /** Expand the overlay to show the chat panel */\n public Expand(): void {\n // Expanding implies the user wants the chat visible — clear any hidden\n // state so collapse returns to the bubble, not back to the sliver.\n if (this.IsHidden) {\n this.IsHidden = false;\n this.savePreferences();\n }\n this.State = 'expanded';\n this.UnreadCount = 0;\n this.bridge.NotifyOverlayActive(true);\n this.VisibilityChanged.emit(this.State);\n this.cdr.detectChanges();\n }\n\n /** Collapse the overlay to the floating button */\n public Collapse(): void {\n this.State = 'collapsed';\n this.bridge.NotifyOverlayActive(false);\n this.VisibilityChanged.emit(this.State);\n this.cdr.detectChanges();\n }\n\n /** Toggle between expanded and maximized states */\n public ToggleMaximize(): void {\n if (this.State === 'maximized') {\n this.State = 'expanded';\n } else {\n this.State = 'maximized';\n }\n this.bridge.NotifyOverlayActive(true);\n this.VisibilityChanged.emit(this.State);\n this.cdr.detectChanges();\n }\n\n /** Handle the user requesting to open full chat workspace */\n public OnOpenFullChatWorkspace(): void {\n this.OpenFullChatWorkspace.emit(this._conversationId);\n this.bridge.SwitchToWorkspace(this._conversationId);\n this.Collapse();\n }\n\n /** Handle conversation creation from the chat area */\n public OnConversationCreated(event: {\n conversation: MJConversationEntity;\n pendingMessage?: string;\n pendingAttachments?: PendingAttachment[];\n }): void {\n // Set ALL state atomically before Angular change detection runs\n this.PendingMessage = event.pendingMessage || null;\n this.PendingAttachments = event.pendingAttachments || null;\n this.PendingMessageConversationId = event.conversation.ID;\n const prevId = this._conversationId;\n this._conversationId = event.conversation.ID;\n this.Conversation = event.conversation;\n this.IsNewConversation = false;\n this.bridge.SetActiveFromOverlay(event.conversation.ID);\n this.emitConversationSwitched(prevId, event.conversation.ID);\n }\n\n /** Handle pending message consumed by chat area */\n public OnPendingMessageConsumed(): void {\n this.PendingMessage = null;\n this.PendingAttachments = null;\n this.PendingMessageConversationId = null;\n }\n\n /** Handle conversation rename from chat area */\n public OnConversationRenamed(_event: {conversationId: string; name: string; description: string}): void {\n // The overlay doesn't need to do anything specific here;\n // the conversation entity is updated in-place by the chat area.\n }\n\n /** Handle entity record open requests */\n public OnOpenEntityRecord(event: {entityName: string; compositeKey: CompositeKey}): void {\n this.OpenEntityRecord.emit(event);\n }\n\n /** Handle navigation requests from the chat area */\n public OnNavigationRequest(event: NavigationRequest): void {\n this.NavigationRequested.emit(event);\n }\n\n /** Handle task clicks from the chat area */\n public OnTaskClicked(task: MJTaskEntity): void {\n this.TaskClicked.emit(task);\n }\n\n /** Start a new conversation in the overlay */\n public StartNewConversation(): void {\n const prevId = this._conversationId;\n this._conversationId = null;\n this.Conversation = null;\n // Force Angular change detection by toggling off then on\n // so the setter fires even if already in new-conversation state\n this.IsNewConversation = false;\n this.cdr.detectChanges();\n this.IsNewConversation = true;\n this.bridge.SetActiveFromOverlay(null);\n this.emitConversationSwitched(prevId, null);\n this.cdr.detectChanges();\n }\n\n /**\n * Hide the floating bubble — leaves a thin sliver on the right edge as the\n * only affordance to bring it back. Invoked from the small \"×\" pill that\n * appears on hover. Stops propagation so the bubble's own click handler\n * doesn't fire and toggle the panel open.\n */\n public Hide(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n if (this.IsHidden) return;\n this.IsHidden = true;\n this.savePreferences();\n this.cdr.detectChanges();\n }\n\n /** Restore the floating bubble after it was hidden. Triggered by clicking the sliver. */\n public Show(): void {\n if (!this.IsHidden) return;\n this.IsHidden = false;\n this.savePreferences();\n this.cdr.detectChanges();\n }\n\n /** Increment unread badge (called externally when messages arrive while collapsed) */\n public IncrementUnread(): void {\n if (this.State === 'collapsed') {\n this.UnreadCount++;\n this.cdr.detectChanges();\n }\n }\n\n // --- Resize Methods ---\n\n /** Start resizing from an edge or corner */\n public OnResizeStart(event: MouseEvent, edge: 'left' | 'top' | 'top-left'): void {\n event.preventDefault();\n event.stopPropagation();\n this.isResizing = true;\n this.resizeEdge = edge;\n this.resizeStartX = event.clientX;\n this.resizeStartY = event.clientY;\n this.resizeStartWidth = this.PanelWidth;\n this.resizeStartHeight = this.PanelHeight;\n\n document.addEventListener('mousemove', this.onResizeMove);\n document.addEventListener('mouseup', this.onResizeEnd);\n }\n\n private onResizeMove = (event: MouseEvent): void => {\n if (!this.isResizing || !this.resizeEdge) return;\n\n const deltaX = this.resizeStartX - event.clientX; // Inverted: dragging left increases width\n const deltaY = this.resizeStartY - event.clientY; // Inverted: dragging up increases height\n\n if (this.resizeEdge === 'left' || this.resizeEdge === 'top-left') {\n this.PanelWidth = this.clampWidth(this.resizeStartWidth + deltaX);\n }\n if (this.resizeEdge === 'top' || this.resizeEdge === 'top-left') {\n this.PanelHeight = this.clampHeight(this.resizeStartHeight + deltaY);\n }\n this.cdr.detectChanges();\n };\n\n private onResizeEnd = (): void => {\n if (!this.isResizing) return;\n this.isResizing = false;\n this.resizeEdge = null;\n this.removeResizeListeners();\n this.savePreferences();\n };\n\n private removeResizeListeners(): void {\n document.removeEventListener('mousemove', this.onResizeMove);\n document.removeEventListener('mouseup', this.onResizeEnd);\n }\n\n private clampWidth(value: number): number {\n return Math.max(ChatAgentsOverlayComponent.MIN_WIDTH, Math.min(ChatAgentsOverlayComponent.MAX_WIDTH, value));\n }\n\n private clampHeight(value: number): number {\n return Math.max(ChatAgentsOverlayComponent.MIN_HEIGHT, Math.min(ChatAgentsOverlayComponent.MAX_HEIGHT, value));\n }\n\n // --- Bubble Drag Methods (Pointer Events — unified mouse / touch / pen) ---\n\n /**\n * Start tracking a potential bubble drag. We don't enter drag mode until\n * the pointer moves past BUBBLE_DRAG_THRESHOLD_PX — releasing before that\n * threshold is treated as a normal click/tap and opens the chat (via Toggle()).\n *\n * Pointer Events (not mousedown) so the same code path serves desktop mouse,\n * touch on phones/tablets, and pen input. setPointerCapture keeps the gesture\n * tied to this element even if the finger or cursor strays off the bubble.\n */\n public OnBubblePointerDown(event: PointerEvent): void {\n // Mouse: respect primary-button only. Touch/pen: button is always 0, so this passes naturally.\n if (event.pointerType === 'mouse' && event.button !== 0) return;\n // Don't start a second drag while one is in flight (e.g. second finger on touch).\n if (this.activeBubblePointerId !== null) return;\n event.preventDefault();\n\n const target = event.currentTarget as HTMLElement;\n target.setPointerCapture(event.pointerId);\n this.bubbleCaptureTarget = target;\n\n this.activeBubblePointerId = event.pointerId;\n this.bubbleDragStartMouseY = event.clientY;\n this.bubbleDragStartOffset = this.BubbleOffsetY;\n this.bubbleDragMoved = false;\n this.IsBubblePressed = true;\n this.cdr.detectChanges();\n\n document.addEventListener('pointermove', this.onBubbleDragMove);\n document.addEventListener('pointerup', this.onBubbleDragEnd);\n document.addEventListener('pointercancel', this.onBubbleDragEnd);\n }\n\n private onBubbleDragMove = (event: PointerEvent): void => {\n if (event.pointerId !== this.activeBubblePointerId) return;\n const deltaY = this.bubbleDragStartMouseY - event.clientY; // dragging up = positive\n if (!this.bubbleDragMoved) {\n if (Math.abs(deltaY) < ChatAgentsOverlayComponent.BUBBLE_DRAG_THRESHOLD_PX) return;\n this.bubbleDragMoved = true;\n this.IsBubbleDragging = true;\n }\n this.BubbleOffsetY = this.clampBubbleOffsetY(this.bubbleDragStartOffset + deltaY);\n this.cdr.detectChanges();\n };\n\n private onBubbleDragEnd = (event: PointerEvent): void => {\n if (event.pointerId !== this.activeBubblePointerId) return;\n this.removeBubbleDragListeners();\n\n if (this.bubbleCaptureTarget) {\n // Browser may have implicitly released capture on pointerup already (per the\n // Pointer Events spec). releasePointerCapture throws in that race; safe to ignore.\n try { this.bubbleCaptureTarget.releasePointerCapture(event.pointerId); } catch { /* noop */ }\n }\n this.bubbleCaptureTarget = null;\n this.activeBubblePointerId = null;\n\n const wasDragged = this.bubbleDragMoved;\n const wasCancelled = event.type === 'pointercancel';\n this.bubbleDragMoved = false;\n this.IsBubbleDragging = false;\n this.IsBubblePressed = false;\n if (wasDragged) {\n this.savePreferences();\n this.cdr.detectChanges();\n } else if (!wasCancelled) {\n this.Toggle();\n } else {\n this.cdr.detectChanges();\n }\n };\n\n private removeBubbleDragListeners(): void {\n document.removeEventListener('pointermove', this.onBubbleDragMove);\n document.removeEventListener('pointerup', this.onBubbleDragEnd);\n document.removeEventListener('pointercancel', this.onBubbleDragEnd);\n }\n\n /**\n * Reserved space at the top of the viewport — host-supplied chrome plus\n * the padding gap we always keep above the bubble/panel.\n */\n private get topReservedPx(): number {\n return Math.max(0, this.TopBoundaryPx) + ChatAgentsOverlayComponent.VIEWPORT_TOP_PADDING_PX;\n }\n\n /** Clamp the offset so the bubble stays fully visible below the top boundary. */\n private clampBubbleOffsetY(value: number): number {\n const maxOffset = window.innerHeight\n - ChatAgentsOverlayComponent.BUBBLE_SIZE_PX\n - ChatAgentsOverlayComponent.BASE_BOTTOM_PX\n - this.topReservedPx;\n return Math.max(0, Math.min(Math.max(0, maxOffset), value));\n }\n\n // --- Render Position Getters ---\n\n /** Effective `bottom` (px) for the floating bubble, clamped to the current viewport. */\n public get BubbleBottomPx(): number {\n const ideal = ChatAgentsOverlayComponent.BASE_BOTTOM_PX + this.BubbleOffsetY;\n const max = window.innerHeight\n - ChatAgentsOverlayComponent.BUBBLE_SIZE_PX\n - this.topReservedPx;\n return Math.max(\n ChatAgentsOverlayComponent.BASE_BOTTOM_PX,\n Math.min(ideal, Math.max(ChatAgentsOverlayComponent.BASE_BOTTOM_PX, max))\n );\n }\n\n /**\n * Effective `bottom` (px) for the expanded panel. Anchors to the bubble's\n * current bottom edge so the panel grows up from where the user parked the\n * bubble, but clamps downward whenever the panel would otherwise extend\n * past the viewport's top boundary — that's the \"reposition lower so the\n * chat interface stays visible\" behavior.\n */\n public get PanelBottomPx(): number {\n const ideal = ChatAgentsOverlayComponent.BASE_BOTTOM_PX + this.BubbleOffsetY;\n const maxBottomForVisibility = window.innerHeight\n - this.PanelHeight\n - this.topReservedPx;\n return Math.max(\n ChatAgentsOverlayComponent.BASE_BOTTOM_PX,\n Math.min(ideal, maxBottomForVisibility)\n );\n }\n\n // --- Private Methods ---\n\n /** Auto-resolve CurrentUser and EnvironmentId from Metadata when not provided as inputs */\n private resolveDefaults(): void {\n if (!this.CurrentUser) {\n const md = this.ProviderToUse;\n this.CurrentUser = md.CurrentUser;\n }\n if (!this.EnvironmentId) {\n this.EnvironmentId = MJEnvironmentEntityExtended.DefaultEnvironmentID;\n }\n }\n\n /** Load saved panel size and bubble position from UserInfoEngine */\n private loadPreferences(): void {\n try {\n const engine = UserInfoEngine.Instance;\n const raw = engine.GetSetting(ChatAgentsOverlayComponent.SIZE_SETTING_KEY);\n if (raw) {\n const prefs: OverlayPrefs = JSON.parse(raw);\n this.PanelWidth = this.clampWidth(prefs.width);\n this.PanelHeight = this.clampHeight(prefs.height);\n if (typeof prefs.bubbleOffsetY === 'number') {\n this.BubbleOffsetY = Math.max(0, prefs.bubbleOffsetY);\n }\n if (typeof prefs.bubbleHidden === 'boolean') {\n this.IsHidden = prefs.bubbleHidden;\n }\n }\n } catch {\n // Use defaults on error\n }\n }\n\n /** Persist panel size and bubble position to UserInfoEngine (debounced) */\n private savePreferences(): void {\n const prefs: OverlayPrefs = {\n width: this.PanelWidth,\n height: this.PanelHeight,\n bubbleOffsetY: this.BubbleOffsetY,\n bubbleHidden: this.IsHidden\n };\n UserInfoEngine.Instance.SetSettingDebounced(\n ChatAgentsOverlayComponent.SIZE_SETTING_KEY,\n JSON.stringify(prefs)\n );\n }\n\n /** Subscribe to bridge events for cross-view coordination */\n private subscribeToBridgeEvents(): void {\n this.bridge.SwitchEvent$\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: ConversationSwitchEvent) => {\n if (event.Target === 'overlay') {\n this.handleSwitchToOverlay(event);\n }\n });\n\n // Allow arbitrary callers (Form Builder cockpit, etc.) to ask the\n // overlay to expand. Idempotent if we're already expanded —\n // Expand() is safe to call in any state.\n this.bridge.ExpandOverlayRequested$\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n if (this.State === 'collapsed') {\n this.Expand();\n }\n });\n\n this.bridge.ActiveConversationID$\n .pipe(takeUntil(this.destroy$))\n .subscribe((id: string | null) => {\n // Only update if the change came from outside (workspace)\n if (id !== this._conversationId && this.bridge.WorkspaceActive$.value) {\n const prevId = this._conversationId;\n this._conversationId = id;\n this.IsNewConversation = id === null;\n this.Conversation = null; // Will be loaded by chat area\n this.emitConversationSwitched(prevId, id);\n this.cdr.detectChanges();\n }\n });\n }\n\n /** Subscribe to agent client tool execution events */\n private subscribeToToolEvents(): void {\n this.agentClient.ToolExecuted$\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: ClientToolResultEvent) => {\n this.ToolExecuted.emit(event);\n });\n }\n\n /** Handle request to switch conversation to the overlay */\n private handleSwitchToOverlay(event: ConversationSwitchEvent): void {\n const prevId = this._conversationId;\n this._conversationId = event.ConversationID;\n this.IsNewConversation = event.ConversationID === null;\n this.Conversation = null; // Will be reloaded by chat area\n this.Expand();\n this.emitConversationSwitched(prevId, event.ConversationID);\n }\n\n /** Emit a conversation switched event */\n private emitConversationSwitched(prevId: string | null, newId: string | null): void {\n this.ConversationSwitched.emit({\n PreviousConversationID: prevId,\n NewConversationID: newId\n });\n }\n}\n","@if (IsVisible) {\n <!-- Floating Button (collapsed state, not hidden) -->\n @if (State === 'collapsed' && !IsHidden) {\n <div class=\"chat-overlay-bubble\"\n [class.is-pressed]=\"IsBubblePressed\"\n [class.is-dragging]=\"IsBubbleDragging\"\n [style.bottom.px]=\"BubbleBottomPx\"\n (pointerdown)=\"OnBubblePointerDown($event)\">\n <i class=\"fa-solid fa-chevron-up chat-overlay-bubble-arrow chat-overlay-bubble-arrow-up\" aria-hidden=\"true\"></i>\n <i class=\"fa-solid fa-chevron-down chat-overlay-bubble-arrow chat-overlay-bubble-arrow-down\" aria-hidden=\"true\"></i>\n <i class=\"fa-solid fa-comments chat-overlay-bubble-icon\"></i>\n @if (UnreadCount > 0) {\n <span class=\"chat-overlay-badge\">{{ UnreadCount > 9 ? '9+' : UnreadCount }}</span>\n }\n <!-- Hide affordance: revealed on hover. pointerdown stops drag from starting; click hides the bubble. -->\n <button type=\"button\"\n class=\"chat-overlay-bubble-close\"\n title=\"Hide chat — a thin sliver will remain on the right edge\"\n aria-label=\"Hide chat overlay\"\n (pointerdown)=\"$event.stopPropagation()\"\n (click)=\"Hide($event)\">\n <i class=\"fa-solid fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n\n <!-- Collapsed sliver — flush with the right edge when the bubble is hidden.\n Click opens the chat directly; closing returns to the bubble (not the\n sliver). To re-enter hidden mode the user clicks the × pill again. -->\n @if (State === 'collapsed' && IsHidden) {\n <button type=\"button\"\n class=\"chat-overlay-sliver\"\n title=\"Open chat\"\n aria-label=\"Open chat\"\n [style.bottom.px]=\"BubbleBottomPx\"\n (click)=\"Expand()\">\n <i class=\"fa-solid fa-comments chat-overlay-sliver-icon\" aria-hidden=\"true\"></i>\n @if (UnreadCount > 0) {\n <span class=\"chat-overlay-badge chat-overlay-sliver-badge\">{{ UnreadCount > 9 ? '9+' : UnreadCount }}</span>\n }\n </button>\n }\n\n <!-- Expanded / Maximized Chat Panel -->\n @if (State === 'expanded' || State === 'maximized') {\n <div class=\"chat-overlay-panel\"\n [class.maximized]=\"State === 'maximized'\"\n [style.width.px]=\"State === 'maximized' ? null : PanelWidth\"\n [style.height.px]=\"State === 'maximized' ? null : PanelHeight\"\n [style.bottom.px]=\"State === 'maximized' ? null : PanelBottomPx\">\n\n <!-- Resize handles (only in expanded, not maximized) -->\n @if (State === 'expanded') {\n <div class=\"resize-handle resize-left\"\n (mousedown)=\"OnResizeStart($event, 'left')\"></div>\n <div class=\"resize-handle resize-top\"\n (mousedown)=\"OnResizeStart($event, 'top')\"></div>\n <div class=\"resize-handle resize-top-left\"\n (mousedown)=\"OnResizeStart($event, 'top-left')\"></div>\n }\n\n <!-- Panel Header -->\n <div class=\"chat-overlay-header\">\n <div class=\"chat-overlay-title\">\n <i class=\"fa-solid fa-robot\"></i>\n <span>AI Assistant</span>\n </div>\n <div class=\"chat-overlay-header-actions\">\n <button\n class=\"chat-overlay-header-btn\"\n title=\"New conversation\"\n (click)=\"StartNewConversation()\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n @if (ConversationId) {\n <button\n class=\"chat-overlay-header-btn\"\n title=\"Open in full chat workspace\"\n (click)=\"OnOpenFullChatWorkspace()\">\n <i class=\"fa-solid fa-up-right-from-square\"></i>\n </button>\n }\n <button\n class=\"chat-overlay-header-btn\"\n [title]=\"State === 'maximized' ? 'Restore size' : 'Maximize'\"\n (click)=\"ToggleMaximize()\">\n <i class=\"fa-solid\" [class.fa-expand]=\"State !== 'maximized'\" [class.fa-compress]=\"State === 'maximized'\"></i>\n </button>\n <button\n class=\"chat-overlay-header-btn\"\n title=\"Minimize\"\n (click)=\"Collapse()\">\n <i class=\"fa-solid fa-minus\"></i>\n </button>\n </div>\n </div>\n\n <!-- Chat Content — wraps conversation-chat-area -->\n <div class=\"chat-overlay-body\">\n <mj-conversation-chat-area\n [environmentId]=\"EnvironmentId\"\n [currentUser]=\"CurrentUser\"\n [conversationId]=\"ConversationId\"\n [conversation]=\"Conversation\"\n [isNewConversation]=\"IsNewConversation\"\n [pendingMessage]=\"PendingMessage\"\n [pendingAttachments]=\"PendingAttachments\"\n [pendingMessageConversationId]=\"PendingMessageConversationId\"\n [overlayMode]=\"true\"\n [showExportButton]=\"false\"\n [showShareButton]=\"false\"\n [showArtifactIndicator]=\"false\"\n [appContext]=\"AppContext\"\n [emptyStateGreeting]=\"EmptyStateGreeting\"\n (conversationCreated)=\"OnConversationCreated($event)\"\n (conversationRenamed)=\"OnConversationRenamed($event)\"\n (pendingMessageConsumed)=\"OnPendingMessageConsumed()\"\n (openEntityRecord)=\"OnOpenEntityRecord($event)\"\n (navigationRequest)=\"OnNavigationRequest($event)\"\n (taskClicked)=\"OnTaskClicked($event)\"\n ></mj-conversation-chat-area>\n </div>\n </div>\n }\n}\n"]}
1
+ {"version":3,"file":"chat-overlay.component.js","sourceRoot":"","sources":["../../../../src/lib/components/overlay/chat-overlay.component.ts","../../../../src/lib/components/overlay/chat-overlay.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Floating Chat Overlay Component\n *\n * A collapsible floating panel (bottom-right corner) that wraps the\n * conversation-chat-area component. Provides a persistent, minimizable chat\n * experience across the application.\n *\n * This component is GENERIC -- it does NOT know about NavigationService,\n * Knowledge Hub, or any Explorer-specific concepts. It raises events that\n * the consuming application handles.\n *\n * Coordinates with the full Conversations workspace view through\n * ConversationBridgeService so that switching between overlay and workspace\n * preserves conversation continuity.\n */\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ChangeDetectorRef,\n inject\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { takeUntil } from 'rxjs/operators';\nimport { UserInfo, Metadata, CompositeKey } from '@memberjunction/core';\nimport { MJConversationEntity, MJTaskEntity, MJEnvironmentEntityExtended, UserInfoEngine } from '@memberjunction/core-entities';\nimport { AgentClientService } from '@memberjunction/ng-agent-client';\nimport { ClientToolResultEvent } from '@memberjunction/ai-agent-client';\nimport { ConversationBridgeService, ConversationSwitchEvent } from '../../services/conversation-bridge.service';\nimport { NavigationRequest } from '@memberjunction/ng-artifacts';\nimport { PendingAttachment } from '@memberjunction/ng-composer';\n\n/** Visual state of the overlay panel */\nexport type ChatOverlayState = 'collapsed' | 'expanded' | 'maximized';\n\n/** Event payload when the active conversation changes in the overlay */\nexport interface OverlayConversationSwitchedEvent {\n PreviousConversationID: string | null;\n NewConversationID: string | null;\n}\n\n/** Persisted overlay size and position preferences */\ninterface OverlayPrefs {\n width: number;\n height: number;\n /** Pixels the bubble has been dragged up from its default bottom position. Optional for back-compat with older saved prefs. */\n bubbleOffsetY?: number;\n /** When true, the bubble is hidden and only a thin sliver shows on the right edge. */\n bubbleHidden?: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-chat-agents-overlay',\n templateUrl: './chat-overlay.component.html',\n styleUrls: ['./chat-overlay.component.css']\n})\nexport class ChatAgentsOverlayComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n private cdr = inject(ChangeDetectorRef);\n private bridge = inject(ConversationBridgeService);\n private agentClient = inject(AgentClientService);\n private destroy$ = new Subject<void>();\n\n // --- Settings persistence ---\n private static readonly SIZE_SETTING_KEY = 'ChatOverlay.Size';\n private static readonly DEFAULT_WIDTH = 420;\n private static readonly DEFAULT_HEIGHT = 600;\n private static readonly MIN_WIDTH = 320;\n private static readonly MIN_HEIGHT = 350;\n private static readonly MAX_WIDTH = 900;\n private static readonly MAX_HEIGHT = 1000;\n\n // --- Bubble drag constants ---\n /** Default `bottom` for both bubble and panel (matches CSS 1.5rem). */\n private static readonly BASE_BOTTOM_PX = 24;\n /** Floating bubble diameter in pixels (matches CSS 3.5rem). */\n private static readonly BUBBLE_SIZE_PX = 56;\n /** Minimum gap to keep between the overlay and the viewport top edge. */\n private static readonly VIEWPORT_TOP_PADDING_PX = 16;\n /** Mousedown-to-mousemove distance that promotes a click into a drag. */\n private static readonly BUBBLE_DRAG_THRESHOLD_PX = 5;\n\n // --- Inputs ---\n\n /** Controls external visibility (e.g., parent hides overlay on chat route) */\n private _isVisible = true;\n\n @Input()\n set IsVisible(value: boolean) {\n const prev = this._isVisible;\n this._isVisible = value;\n if (!value && prev && this.State !== 'collapsed') {\n this.Collapse();\n }\n this.cdr.detectChanges();\n }\n get IsVisible(): boolean {\n return this._isVisible;\n }\n\n /** Current user info, passed through to conversation-chat-area. Auto-resolved from Metadata if not provided. */\n @Input() CurrentUser!: UserInfo;\n\n /** Environment ID, passed through to conversation-chat-area. Auto-resolved from default if not provided. */\n @Input() EnvironmentId!: string;\n\n /** Application context snapshot for AI agent awareness. Updated by the host app on navigation transitions. */\n @Input() AppContext: Record<string, unknown> | null = null;\n\n /** Greeting message shown in the empty state when no conversation is active */\n @Input() EmptyStateGreeting: string = 'How can I help you?';\n\n /**\n * Pixels reserved at the top of the viewport that the bubble and panel must not\n * cross. Set this from the host app to the height of any fixed top chrome (e.g.\n * Explorer's shell-header). Defaults to 0 — generic apps without top chrome\n * keep the full viewport available.\n */\n @Input() TopBoundaryPx: number = 0;\n\n // --- Outputs ---\n\n /** Emitted when the overlay visibility changes */\n @Output() VisibilityChanged = new EventEmitter<ChatOverlayState>();\n\n /** Emitted when a tool finishes executing in the agent client */\n @Output() ToolExecuted = new EventEmitter<ClientToolResultEvent>();\n\n /** Emitted when the active conversation changes in the overlay */\n @Output() ConversationSwitched = new EventEmitter<OverlayConversationSwitchedEvent>();\n\n /** Emitted when the user requests opening the full chat workspace */\n @Output() OpenFullChatWorkspace = new EventEmitter<string | null>();\n\n /** Emitted when navigation is requested (entity record, etc.) */\n @Output() NavigationRequested = new EventEmitter<NavigationRequest>();\n\n /** Emitted when an entity record open is requested */\n @Output() OpenEntityRecord = new EventEmitter<{entityName: string; compositeKey: CompositeKey}>();\n\n /** Emitted when a task is clicked */\n @Output() TaskClicked = new EventEmitter<MJTaskEntity>();\n\n // --- Component State ---\n\n public State: ChatOverlayState = 'collapsed';\n public UnreadCount = 0;\n\n /** Panel dimensions (persisted via UserInfoEngine) */\n public PanelWidth = ChatAgentsOverlayComponent.DEFAULT_WIDTH;\n public PanelHeight = ChatAgentsOverlayComponent.DEFAULT_HEIGHT;\n\n /**\n * Pixels the floating bubble has been dragged up from its default\n * bottom-right corner position. Always >= 0; clamping at render time\n * keeps the bubble on-screen even after a viewport resize.\n */\n public BubbleOffsetY = 0;\n\n /** True while the user is actively dragging the bubble; used to swap cursor + suppress click. */\n public IsBubbleDragging = false;\n\n /**\n * True from mousedown until mouseup on the bubble, regardless of whether the\n * gesture became a drag. Used to give immediate \"I'm being held\" feedback so\n * the user can see drag is possible even before crossing the move threshold.\n */\n public IsBubblePressed = false;\n\n /**\n * When true, the floating bubble is hidden and replaced by a thin sliver\n * flush with the right edge of the viewport. Persisted across sessions via\n * OverlayPrefs.bubbleHidden. Clicking the sliver restores the bubble.\n */\n public IsHidden = false;\n\n /** Active conversation ID managed locally */\n private _conversationId: string | null = null;\n public get ConversationId(): string | null {\n return this._conversationId;\n }\n\n /** Active conversation entity */\n public Conversation: MJConversationEntity | null = null;\n\n /** Whether a new unsaved conversation is in progress */\n public IsNewConversation = true;\n\n /** Pending message to send after conversation creation */\n public PendingMessage: string | null = null;\n /** The conversation {@link PendingMessage} is destined for — pins the auto-send to that\n * conversation's input so a fast conversation-swap can't redirect it elsewhere. */\n public PendingMessageConversationId: string | null = null;\n\n /** Pending attachments to send after conversation creation */\n public PendingAttachments: PendingAttachment[] | null = null;\n\n /** Resize drag state */\n private isResizing = false;\n private resizeEdge: 'left' | 'top' | 'top-left' | null = null;\n private resizeStartX = 0;\n private resizeStartY = 0;\n private resizeStartWidth = 0;\n private resizeStartHeight = 0;\n\n /** Bubble drag state */\n private bubbleDragStartMouseY = 0;\n private bubbleDragStartOffset = 0;\n /** True once the pointer has moved past BUBBLE_DRAG_THRESHOLD_PX; suppresses the implicit click. */\n private bubbleDragMoved = false;\n /** ID of the pointer currently driving the drag — guards against multi-touch confusion. */\n private activeBubblePointerId: number | null = null;\n /** Element that captured the pointer; needed to release capture on end/cancel. */\n private bubbleCaptureTarget: HTMLElement | null = null;\n\n // --- Lifecycle ---\n\n ngOnInit(): void {\n this.resolveDefaults();\n this.loadPreferences();\n this.subscribeToBridgeEvents();\n this.subscribeToToolEvents();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.removeResizeListeners();\n this.removeBubbleDragListeners();\n }\n\n // --- Public Methods ---\n\n /** Toggle between collapsed and expanded states */\n public Toggle(): void {\n if (this.State === 'collapsed') {\n this.Expand();\n } else {\n this.Collapse();\n }\n }\n\n /** Expand the overlay to show the chat panel */\n public Expand(): void {\n // Expanding implies the user wants the chat visible — clear any hidden\n // state so collapse returns to the bubble, not back to the sliver.\n if (this.IsHidden) {\n this.IsHidden = false;\n this.savePreferences();\n }\n this.State = 'expanded';\n this.UnreadCount = 0;\n this.bridge.NotifyOverlayActive(true);\n this.VisibilityChanged.emit(this.State);\n this.cdr.detectChanges();\n }\n\n /** Collapse the overlay to the floating button */\n public Collapse(): void {\n this.State = 'collapsed';\n this.bridge.NotifyOverlayActive(false);\n this.VisibilityChanged.emit(this.State);\n this.cdr.detectChanges();\n }\n\n /** Toggle between expanded and maximized states */\n public ToggleMaximize(): void {\n if (this.State === 'maximized') {\n this.State = 'expanded';\n } else {\n this.State = 'maximized';\n }\n this.bridge.NotifyOverlayActive(true);\n this.VisibilityChanged.emit(this.State);\n this.cdr.detectChanges();\n }\n\n /** Handle the user requesting to open full chat workspace */\n public OnOpenFullChatWorkspace(): void {\n this.OpenFullChatWorkspace.emit(this._conversationId);\n this.bridge.SwitchToWorkspace(this._conversationId);\n this.Collapse();\n }\n\n /** Handle conversation creation from the chat area */\n public OnConversationCreated(event: {\n conversation: MJConversationEntity;\n pendingMessage?: string;\n pendingAttachments?: PendingAttachment[];\n }): void {\n // Set ALL state atomically before Angular change detection runs\n this.PendingMessage = event.pendingMessage || null;\n this.PendingAttachments = event.pendingAttachments || null;\n this.PendingMessageConversationId = event.conversation.ID;\n const prevId = this._conversationId;\n this._conversationId = event.conversation.ID;\n this.Conversation = event.conversation;\n this.IsNewConversation = false;\n this.bridge.SetActiveFromOverlay(event.conversation.ID);\n this.emitConversationSwitched(prevId, event.conversation.ID);\n }\n\n /** Handle pending message consumed by chat area */\n public OnPendingMessageConsumed(): void {\n this.PendingMessage = null;\n this.PendingAttachments = null;\n this.PendingMessageConversationId = null;\n }\n\n /** Handle conversation rename from chat area */\n public OnConversationRenamed(_event: {conversationId: string; name: string; description: string}): void {\n // The overlay doesn't need to do anything specific here;\n // the conversation entity is updated in-place by the chat area.\n }\n\n /** Handle entity record open requests */\n public OnOpenEntityRecord(event: {entityName: string; compositeKey: CompositeKey}): void {\n this.OpenEntityRecord.emit(event);\n }\n\n /** Handle navigation requests from the chat area */\n public OnNavigationRequest(event: NavigationRequest): void {\n this.NavigationRequested.emit(event);\n }\n\n /** Handle task clicks from the chat area */\n public OnTaskClicked(task: MJTaskEntity): void {\n this.TaskClicked.emit(task);\n }\n\n /** Start a new conversation in the overlay */\n public StartNewConversation(): void {\n const prevId = this._conversationId;\n this._conversationId = null;\n this.Conversation = null;\n // Force Angular change detection by toggling off then on\n // so the setter fires even if already in new-conversation state\n this.IsNewConversation = false;\n this.cdr.detectChanges();\n this.IsNewConversation = true;\n this.bridge.SetActiveFromOverlay(null);\n this.emitConversationSwitched(prevId, null);\n this.cdr.detectChanges();\n }\n\n /**\n * Hide the floating bubble — leaves a thin sliver on the right edge as the\n * only affordance to bring it back. Invoked from the small \"×\" pill that\n * appears on hover. Stops propagation so the bubble's own click handler\n * doesn't fire and toggle the panel open.\n */\n public Hide(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n if (this.IsHidden) return;\n this.IsHidden = true;\n this.savePreferences();\n this.cdr.detectChanges();\n }\n\n /** Restore the floating bubble after it was hidden. Triggered by clicking the sliver. */\n public Show(): void {\n if (!this.IsHidden) return;\n this.IsHidden = false;\n this.savePreferences();\n this.cdr.detectChanges();\n }\n\n /** Increment unread badge (called externally when messages arrive while collapsed) */\n public IncrementUnread(): void {\n if (this.State === 'collapsed') {\n this.UnreadCount++;\n this.cdr.detectChanges();\n }\n }\n\n // --- Resize Methods ---\n\n /** Start resizing from an edge or corner */\n public OnResizeStart(event: MouseEvent, edge: 'left' | 'top' | 'top-left'): void {\n event.preventDefault();\n event.stopPropagation();\n this.isResizing = true;\n this.resizeEdge = edge;\n this.resizeStartX = event.clientX;\n this.resizeStartY = event.clientY;\n this.resizeStartWidth = this.PanelWidth;\n this.resizeStartHeight = this.PanelHeight;\n\n document.addEventListener('mousemove', this.onResizeMove);\n document.addEventListener('mouseup', this.onResizeEnd);\n }\n\n private onResizeMove = (event: MouseEvent): void => {\n if (!this.isResizing || !this.resizeEdge) return;\n\n const deltaX = this.resizeStartX - event.clientX; // Inverted: dragging left increases width\n const deltaY = this.resizeStartY - event.clientY; // Inverted: dragging up increases height\n\n if (this.resizeEdge === 'left' || this.resizeEdge === 'top-left') {\n this.PanelWidth = this.clampWidth(this.resizeStartWidth + deltaX);\n }\n if (this.resizeEdge === 'top' || this.resizeEdge === 'top-left') {\n this.PanelHeight = this.clampHeight(this.resizeStartHeight + deltaY);\n }\n this.cdr.detectChanges();\n };\n\n private onResizeEnd = (): void => {\n if (!this.isResizing) return;\n this.isResizing = false;\n this.resizeEdge = null;\n this.removeResizeListeners();\n this.savePreferences();\n };\n\n private removeResizeListeners(): void {\n document.removeEventListener('mousemove', this.onResizeMove);\n document.removeEventListener('mouseup', this.onResizeEnd);\n }\n\n private clampWidth(value: number): number {\n return Math.max(ChatAgentsOverlayComponent.MIN_WIDTH, Math.min(ChatAgentsOverlayComponent.MAX_WIDTH, value));\n }\n\n private clampHeight(value: number): number {\n return Math.max(ChatAgentsOverlayComponent.MIN_HEIGHT, Math.min(ChatAgentsOverlayComponent.MAX_HEIGHT, value));\n }\n\n // --- Bubble Drag Methods (Pointer Events — unified mouse / touch / pen) ---\n\n /**\n * Start tracking a potential bubble drag. We don't enter drag mode until\n * the pointer moves past BUBBLE_DRAG_THRESHOLD_PX — releasing before that\n * threshold is treated as a normal click/tap and opens the chat (via Toggle()).\n *\n * Pointer Events (not mousedown) so the same code path serves desktop mouse,\n * touch on phones/tablets, and pen input. setPointerCapture keeps the gesture\n * tied to this element even if the finger or cursor strays off the bubble.\n */\n public OnBubblePointerDown(event: PointerEvent): void {\n // Mouse: respect primary-button only. Touch/pen: button is always 0, so this passes naturally.\n if (event.pointerType === 'mouse' && event.button !== 0) return;\n // Don't start a second drag while one is in flight (e.g. second finger on touch).\n if (this.activeBubblePointerId !== null) return;\n event.preventDefault();\n\n const target = event.currentTarget as HTMLElement;\n target.setPointerCapture(event.pointerId);\n this.bubbleCaptureTarget = target;\n\n this.activeBubblePointerId = event.pointerId;\n this.bubbleDragStartMouseY = event.clientY;\n this.bubbleDragStartOffset = this.BubbleOffsetY;\n this.bubbleDragMoved = false;\n this.IsBubblePressed = true;\n this.cdr.detectChanges();\n\n document.addEventListener('pointermove', this.onBubbleDragMove);\n document.addEventListener('pointerup', this.onBubbleDragEnd);\n document.addEventListener('pointercancel', this.onBubbleDragEnd);\n }\n\n private onBubbleDragMove = (event: PointerEvent): void => {\n if (event.pointerId !== this.activeBubblePointerId) return;\n const deltaY = this.bubbleDragStartMouseY - event.clientY; // dragging up = positive\n if (!this.bubbleDragMoved) {\n if (Math.abs(deltaY) < ChatAgentsOverlayComponent.BUBBLE_DRAG_THRESHOLD_PX) return;\n this.bubbleDragMoved = true;\n this.IsBubbleDragging = true;\n }\n this.BubbleOffsetY = this.clampBubbleOffsetY(this.bubbleDragStartOffset + deltaY);\n this.cdr.detectChanges();\n };\n\n private onBubbleDragEnd = (event: PointerEvent): void => {\n if (event.pointerId !== this.activeBubblePointerId) return;\n this.removeBubbleDragListeners();\n\n if (this.bubbleCaptureTarget) {\n // Browser may have implicitly released capture on pointerup already (per the\n // Pointer Events spec). releasePointerCapture throws in that race; safe to ignore.\n try { this.bubbleCaptureTarget.releasePointerCapture(event.pointerId); } catch { /* noop */ }\n }\n this.bubbleCaptureTarget = null;\n this.activeBubblePointerId = null;\n\n const wasDragged = this.bubbleDragMoved;\n const wasCancelled = event.type === 'pointercancel';\n this.bubbleDragMoved = false;\n this.IsBubbleDragging = false;\n this.IsBubblePressed = false;\n if (wasDragged) {\n this.savePreferences();\n this.cdr.detectChanges();\n } else if (!wasCancelled) {\n this.Toggle();\n } else {\n this.cdr.detectChanges();\n }\n };\n\n private removeBubbleDragListeners(): void {\n document.removeEventListener('pointermove', this.onBubbleDragMove);\n document.removeEventListener('pointerup', this.onBubbleDragEnd);\n document.removeEventListener('pointercancel', this.onBubbleDragEnd);\n }\n\n /**\n * Reserved space at the top of the viewport — host-supplied chrome plus\n * the padding gap we always keep above the bubble/panel.\n */\n private get topReservedPx(): number {\n return Math.max(0, this.TopBoundaryPx) + ChatAgentsOverlayComponent.VIEWPORT_TOP_PADDING_PX;\n }\n\n /** Clamp the offset so the bubble stays fully visible below the top boundary. */\n private clampBubbleOffsetY(value: number): number {\n const maxOffset = window.innerHeight\n - ChatAgentsOverlayComponent.BUBBLE_SIZE_PX\n - ChatAgentsOverlayComponent.BASE_BOTTOM_PX\n - this.topReservedPx;\n return Math.max(0, Math.min(Math.max(0, maxOffset), value));\n }\n\n // --- Render Position Getters ---\n\n /** Effective `bottom` (px) for the floating bubble, clamped to the current viewport. */\n public get BubbleBottomPx(): number {\n const ideal = ChatAgentsOverlayComponent.BASE_BOTTOM_PX + this.BubbleOffsetY;\n const max = window.innerHeight\n - ChatAgentsOverlayComponent.BUBBLE_SIZE_PX\n - this.topReservedPx;\n return Math.max(\n ChatAgentsOverlayComponent.BASE_BOTTOM_PX,\n Math.min(ideal, Math.max(ChatAgentsOverlayComponent.BASE_BOTTOM_PX, max))\n );\n }\n\n /**\n * Effective `bottom` (px) for the expanded panel. Anchors to the bubble's\n * current bottom edge so the panel grows up from where the user parked the\n * bubble, but clamps downward whenever the panel would otherwise extend\n * past the viewport's top boundary — that's the \"reposition lower so the\n * chat interface stays visible\" behavior.\n */\n public get PanelBottomPx(): number {\n const ideal = ChatAgentsOverlayComponent.BASE_BOTTOM_PX + this.BubbleOffsetY;\n const maxBottomForVisibility = window.innerHeight\n - this.PanelHeight\n - this.topReservedPx;\n return Math.max(\n ChatAgentsOverlayComponent.BASE_BOTTOM_PX,\n Math.min(ideal, maxBottomForVisibility)\n );\n }\n\n // --- Private Methods ---\n\n /** Auto-resolve CurrentUser and EnvironmentId from Metadata when not provided as inputs */\n private resolveDefaults(): void {\n if (!this.CurrentUser) {\n const md = this.ProviderToUse;\n this.CurrentUser = md.CurrentUser;\n }\n if (!this.EnvironmentId) {\n this.EnvironmentId = MJEnvironmentEntityExtended.DefaultEnvironmentID;\n }\n }\n\n /** Load saved panel size and bubble position from UserInfoEngine */\n private loadPreferences(): void {\n try {\n const engine = UserInfoEngine.Instance;\n const raw = engine.GetSetting(ChatAgentsOverlayComponent.SIZE_SETTING_KEY);\n if (raw) {\n const prefs: OverlayPrefs = JSON.parse(raw);\n this.PanelWidth = this.clampWidth(prefs.width);\n this.PanelHeight = this.clampHeight(prefs.height);\n if (typeof prefs.bubbleOffsetY === 'number') {\n this.BubbleOffsetY = Math.max(0, prefs.bubbleOffsetY);\n }\n if (typeof prefs.bubbleHidden === 'boolean') {\n this.IsHidden = prefs.bubbleHidden;\n }\n }\n } catch {\n // Use defaults on error\n }\n }\n\n /** Persist panel size and bubble position to UserInfoEngine (debounced) */\n private savePreferences(): void {\n const prefs: OverlayPrefs = {\n width: this.PanelWidth,\n height: this.PanelHeight,\n bubbleOffsetY: this.BubbleOffsetY,\n bubbleHidden: this.IsHidden\n };\n UserInfoEngine.Instance.SetSettingDebounced(\n ChatAgentsOverlayComponent.SIZE_SETTING_KEY,\n JSON.stringify(prefs)\n );\n }\n\n /** Subscribe to bridge events for cross-view coordination */\n private subscribeToBridgeEvents(): void {\n this.bridge.SwitchEvent$\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: ConversationSwitchEvent) => {\n if (event.Target === 'overlay') {\n this.handleSwitchToOverlay(event);\n }\n });\n\n // Allow arbitrary callers (Form Builder cockpit, etc.) to ask the\n // overlay to expand. Idempotent if we're already expanded —\n // Expand() is safe to call in any state.\n this.bridge.ExpandOverlayRequested$\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n if (this.State === 'collapsed') {\n this.Expand();\n }\n });\n\n this.bridge.ActiveConversationID$\n .pipe(takeUntil(this.destroy$))\n .subscribe((id: string | null) => {\n // Only update if the change came from outside (workspace)\n if (id !== this._conversationId && this.bridge.WorkspaceActive$.value) {\n const prevId = this._conversationId;\n this._conversationId = id;\n this.IsNewConversation = id === null;\n this.Conversation = null; // Will be loaded by chat area\n this.emitConversationSwitched(prevId, id);\n this.cdr.detectChanges();\n }\n });\n }\n\n /** Subscribe to agent client tool execution events */\n private subscribeToToolEvents(): void {\n this.agentClient.ToolExecuted$\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: ClientToolResultEvent) => {\n this.ToolExecuted.emit(event);\n });\n }\n\n /** Handle request to switch conversation to the overlay */\n private handleSwitchToOverlay(event: ConversationSwitchEvent): void {\n const prevId = this._conversationId;\n this._conversationId = event.ConversationID;\n this.IsNewConversation = event.ConversationID === null;\n this.Conversation = null; // Will be reloaded by chat area\n this.Expand();\n this.emitConversationSwitched(prevId, event.ConversationID);\n }\n\n /** Emit a conversation switched event */\n private emitConversationSwitched(prevId: string | null, newId: string | null): void {\n this.ConversationSwitched.emit({\n PreviousConversationID: prevId,\n NewConversationID: newId\n });\n }\n}\n","@if (IsVisible) {\n <!-- Floating Button (collapsed state, not hidden) -->\n @if (State === 'collapsed' && !IsHidden) {\n <div class=\"chat-overlay-bubble\"\n [class.is-pressed]=\"IsBubblePressed\"\n [class.is-dragging]=\"IsBubbleDragging\"\n [style.bottom.px]=\"BubbleBottomPx\"\n (pointerdown)=\"OnBubblePointerDown($event)\">\n <i class=\"fa-solid fa-chevron-up chat-overlay-bubble-arrow chat-overlay-bubble-arrow-up\" aria-hidden=\"true\"></i>\n <i class=\"fa-solid fa-chevron-down chat-overlay-bubble-arrow chat-overlay-bubble-arrow-down\" aria-hidden=\"true\"></i>\n <i class=\"fa-solid fa-comments chat-overlay-bubble-icon\"></i>\n @if (UnreadCount > 0) {\n <span class=\"chat-overlay-badge\">{{ UnreadCount > 9 ? '9+' : UnreadCount }}</span>\n }\n <!-- Hide affordance: revealed on hover. pointerdown stops drag from starting; click hides the bubble. -->\n <button type=\"button\"\n class=\"chat-overlay-bubble-close\"\n title=\"Hide chat — a thin sliver will remain on the right edge\"\n aria-label=\"Hide chat overlay\"\n (pointerdown)=\"$event.stopPropagation()\"\n (click)=\"Hide($event)\">\n <i class=\"fa-solid fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n\n <!-- Collapsed sliver — flush with the right edge when the bubble is hidden.\n Click opens the chat directly; closing returns to the bubble (not the\n sliver). To re-enter hidden mode the user clicks the × pill again. -->\n @if (State === 'collapsed' && IsHidden) {\n <button type=\"button\"\n class=\"chat-overlay-sliver\"\n title=\"Open chat\"\n aria-label=\"Open chat\"\n [style.bottom.px]=\"BubbleBottomPx\"\n (click)=\"Expand()\">\n <i class=\"fa-solid fa-comments chat-overlay-sliver-icon\" aria-hidden=\"true\"></i>\n @if (UnreadCount > 0) {\n <span class=\"chat-overlay-badge chat-overlay-sliver-badge\">{{ UnreadCount > 9 ? '9+' : UnreadCount }}</span>\n }\n </button>\n }\n\n <!-- Expanded / Maximized Chat Panel -->\n @if (State === 'expanded' || State === 'maximized') {\n <div class=\"chat-overlay-panel\"\n [class.maximized]=\"State === 'maximized'\"\n [style.width.px]=\"State === 'maximized' ? null : PanelWidth\"\n [style.height.px]=\"State === 'maximized' ? null : PanelHeight\"\n [style.bottom.px]=\"State === 'maximized' ? null : PanelBottomPx\">\n\n <!-- Resize handles (only in expanded, not maximized) -->\n @if (State === 'expanded') {\n <div class=\"resize-handle resize-left\"\n (mousedown)=\"OnResizeStart($event, 'left')\"></div>\n <div class=\"resize-handle resize-top\"\n (mousedown)=\"OnResizeStart($event, 'top')\"></div>\n <div class=\"resize-handle resize-top-left\"\n (mousedown)=\"OnResizeStart($event, 'top-left')\"></div>\n }\n\n <!-- Panel Header -->\n <div class=\"chat-overlay-header\">\n <div class=\"chat-overlay-title\">\n <i class=\"fa-solid fa-robot\"></i>\n <span>AI Assistant</span>\n </div>\n <div class=\"chat-overlay-header-actions\">\n <button\n class=\"chat-overlay-header-btn\"\n title=\"New conversation\"\n (click)=\"StartNewConversation()\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n @if (ConversationId) {\n <button\n class=\"chat-overlay-header-btn\"\n title=\"Open in full chat workspace\"\n (click)=\"OnOpenFullChatWorkspace()\">\n <i class=\"fa-solid fa-up-right-from-square\"></i>\n </button>\n }\n <button\n class=\"chat-overlay-header-btn\"\n [title]=\"State === 'maximized' ? 'Restore size' : 'Maximize'\"\n (click)=\"ToggleMaximize()\">\n <i class=\"fa-solid\" [class.fa-expand]=\"State !== 'maximized'\" [class.fa-compress]=\"State === 'maximized'\"></i>\n </button>\n <button\n class=\"chat-overlay-header-btn\"\n title=\"Minimize\"\n (click)=\"Collapse()\">\n <i class=\"fa-solid fa-minus\"></i>\n </button>\n </div>\n </div>\n\n <!-- Chat Content — wraps conversation-chat-area -->\n <div class=\"chat-overlay-body\">\n <mj-conversation-chat-area\n [environmentId]=\"EnvironmentId\"\n [currentUser]=\"CurrentUser\"\n [conversationId]=\"ConversationId\"\n [conversation]=\"Conversation\"\n [isNewConversation]=\"IsNewConversation\"\n [pendingMessage]=\"PendingMessage\"\n [pendingAttachments]=\"PendingAttachments\"\n [pendingMessageConversationId]=\"PendingMessageConversationId\"\n [overlayMode]=\"true\"\n [showExportButton]=\"false\"\n [showShareButton]=\"false\"\n [showArtifactIndicator]=\"false\"\n [appContext]=\"AppContext\"\n [emptyStateGreeting]=\"EmptyStateGreeting\"\n (conversationCreated)=\"OnConversationCreated($event)\"\n (conversationRenamed)=\"OnConversationRenamed($event)\"\n (pendingMessageConsumed)=\"OnPendingMessageConsumed()\"\n (openEntityRecord)=\"OnOpenEntityRecord($event)\"\n (navigationRequest)=\"OnNavigationRequest($event)\"\n (taskClicked)=\"OnTaskClicked($event)\"\n ></mj-conversation-chat-area>\n </div>\n </div>\n }\n}\n"]}
@@ -9,31 +9,113 @@ export interface ProjectFormData {
9
9
  description: string;
10
10
  color: string;
11
11
  icon: string;
12
+ /** true = only the owner sees it; false = everyone in the environment does. */
13
+ isPersonal: boolean;
12
14
  }
13
15
  export declare class ProjectFormModalComponent extends BaseAngularComponent implements OnInit {
14
16
  private cdr;
15
- dialogRef: MJDialogRef;
16
- project: MJProjectEntity | null;
17
- environmentId: string;
18
- currentUser: UserInfo;
17
+ DialogRef: MJDialogRef;
18
+ /** @deprecated Use {@link DialogRef}. */
19
+ set dialogRef(value: MJDialogRef);
20
+ /** @deprecated Use {@link DialogRef}. */
21
+ get dialogRef(): MJDialogRef;
22
+ Project: MJProjectEntity | null;
23
+ /** @deprecated Use {@link Project}. */
24
+ set project(value: MJProjectEntity | null);
25
+ /** @deprecated Use {@link Project}. */
26
+ get project(): MJProjectEntity | null;
27
+ EnvironmentId: string;
28
+ /** @deprecated Use {@link EnvironmentId}. */
29
+ set environmentId(value: string);
30
+ /** @deprecated Use {@link EnvironmentId}. */
31
+ get environmentId(): string;
32
+ CurrentUser: UserInfo;
33
+ /** @deprecated Use {@link CurrentUser}. */
34
+ set currentUser(value: UserInfo);
35
+ /** @deprecated Use {@link CurrentUser}. */
36
+ get currentUser(): UserInfo;
19
37
  /** When creating a new folder, the parent folder ID for nesting (null = top level). */
20
- parentId: string | null;
38
+ ParentId: string | null;
39
+ /** @deprecated Use {@link ParentId}. */
40
+ set parentId(value: string | null);
41
+ /** @deprecated Use {@link ParentId}. */
42
+ get parentId(): string | null;
43
+ ProjectSaved: EventEmitter<MJProjectEntity>;
44
+ /**
45
+ * @deprecated Use {@link ProjectSaved}.
46
+ *
47
+ * The same emitter under the old binding name, so a template still binding
48
+ * (projectSaved) keeps working. Must stay AFTER ProjectSaved: class fields
49
+ * initialise in order, and the other way round this captures undefined.
50
+ */
21
51
  projectSaved: EventEmitter<MJProjectEntity>;
22
- formData: ProjectFormData;
23
- showNameError: boolean;
24
- isEditMode: boolean;
25
- availableColors: string[];
26
- availableIcons: string[];
52
+ FormData: ProjectFormData;
53
+ /** @deprecated Use {@link FormData}. */
54
+ get formData(): ProjectFormData;
55
+ /** @deprecated Use {@link FormData}. */
56
+ set formData(value: ProjectFormData);
57
+ ShowNameError: boolean;
58
+ /** @deprecated Use {@link ShowNameError}. */
59
+ get showNameError(): boolean;
60
+ /** @deprecated Use {@link ShowNameError}. */
61
+ set showNameError(value: boolean);
62
+ IsEditMode: boolean;
63
+ /** @deprecated Use {@link IsEditMode}. */
64
+ get isEditMode(): boolean;
65
+ /** @deprecated Use {@link IsEditMode}. */
66
+ set isEditMode(value: boolean);
67
+ AvailableColors: string[];
68
+ /** @deprecated Use {@link AvailableColors}. */
69
+ get availableColors(): string[];
70
+ /** @deprecated Use {@link AvailableColors}. */
71
+ set availableColors(value: string[]);
72
+ AvailableIcons: string[];
73
+ /** @deprecated Use {@link AvailableIcons}. */
74
+ get availableIcons(): string[];
75
+ /** @deprecated Use {@link AvailableIcons}. */
76
+ set availableIcons(value: string[]);
77
+ /**
78
+ * True when this dialog is editing a folder that is currently SHARED — in which case
79
+ * visibility is shown as a statement rather than a control.
80
+ *
81
+ * Sharing is one-way by design, and the reason is in the data model rather than the UI.
82
+ * NULL-means-shared conflates "shared" with "unowned": the moment a folder is shared its
83
+ * `OwnerUserID` goes to NULL and there is no column anywhere recording who created it
84
+ * (`Project` has `__mj_CreatedAt`, but no created-by). So `OwnerUserID = currentUser.ID`
85
+ * on a shared folder is indistinguishable from any other user claiming it — the system
86
+ * cannot tell reclaiming from appropriating, which makes "take it back" an affordance
87
+ * that was never really there.
88
+ *
89
+ * What that would cost on day one is the deciding argument. Every folder that exists
90
+ * today carries NULL, so without this the whole team's folder structure — subfolders
91
+ * included — is one radio button away from belonging to whichever person opens its
92
+ * settings first. A confirm does not fix that; it only narrates it.
93
+ *
94
+ * Personal -> shared stays available, because it only ever adds. Someone who wants a
95
+ * private copy makes a private folder. If personal folders later grow features that need
96
+ * a stable creator (sharing with named users, transfer, recovering a departed employee's
97
+ * folders), the fix is a separate IsShared flag so ownership stops being erased by
98
+ * sharing — a bigger change, and deliberately not this one.
99
+ */
100
+ get VisibilityIsLocked(): boolean;
27
101
  /** Translucent tint of the selected color, used behind the preview/icon glyph. */
102
+ get ChipBackground(): string;
103
+ /** @deprecated Use {@link ChipBackground}. */
28
104
  get chipBackground(): string;
29
105
  constructor(cdr: ChangeDetectorRef);
30
106
  ngOnInit(): void;
31
107
  private loadProjectData;
108
+ SelectColor(color: string): void;
109
+ /** @deprecated Use {@link SelectColor}. */
32
110
  selectColor(color: string): void;
111
+ SelectIcon(icon: string): void;
112
+ /** @deprecated Use {@link SelectIcon}. */
33
113
  selectIcon(icon: string): void;
114
+ OnSave(): Promise<void>;
115
+ /** @deprecated Use {@link OnSave}. */
34
116
  onSave(): Promise<void>;
35
117
  onCancel(): void;
36
118
  static ɵfac: i0.ɵɵFactoryDeclaration<ProjectFormModalComponent, never>;
37
- static ɵcmp: i0.ɵɵComponentDeclaration<ProjectFormModalComponent, "mj-project-form-modal", never, { "dialogRef": { "alias": "dialogRef"; "required": false; }; "project": { "alias": "project"; "required": false; }; "environmentId": { "alias": "environmentId"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; "parentId": { "alias": "parentId"; "required": false; }; }, { "projectSaved": "projectSaved"; }, never, never, false, never>;
119
+ static ɵcmp: i0.ɵɵComponentDeclaration<ProjectFormModalComponent, "mj-project-form-modal", never, { "DialogRef": { "alias": "DialogRef"; "required": false; }; "dialogRef": { "alias": "dialogRef"; "required": false; }; "Project": { "alias": "Project"; "required": false; }; "project": { "alias": "project"; "required": false; }; "EnvironmentId": { "alias": "EnvironmentId"; "required": false; }; "environmentId": { "alias": "environmentId"; "required": false; }; "CurrentUser": { "alias": "CurrentUser"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; "ParentId": { "alias": "ParentId"; "required": false; }; "parentId": { "alias": "parentId"; "required": false; }; }, { "ProjectSaved": "ProjectSaved"; "projectSaved": "projectSaved"; }, never, never, false, never>;
38
120
  }
39
121
  //# sourceMappingURL=project-form-modal.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-form-modal.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/project/project-form-modal.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAa,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC7G,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAY,MAAM,sBAAsB,CAAC;;AAE1D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAgDD,qBAkSa,yBAA0B,SAAQ,oBAAqB,YAAW,MAAM;IA6BvE,OAAO,CAAC,GAAG;IA5Bd,SAAS,EAAG,WAAW,CAAC;IACxB,OAAO,EAAE,eAAe,GAAG,IAAI,CAAQ;IACvC,aAAa,EAAG,MAAM,CAAC;IACvB,WAAW,EAAG,QAAQ,CAAC;IAChC,uFAAuF;IAC9E,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE9B,YAAY,gCAAuC;IAEtD,QAAQ,EAAE,eAAe,CAK9B;IAEK,aAAa,UAAS;IACtB,UAAU,UAAS;IACnB,eAAe,WAA0B;IACzC,cAAc,WAAyB;IAE9C,kFAAkF;IAClF,IAAW,cAAc,IAAI,MAAM,CAIlC;gBAEmB,GAAG,EAAE,iBAAiB;IAG1C,QAAQ,IAAI,IAAI;IAQhB,OAAO,CAAC,eAAe;IAWvB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKhC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAwC7B,QAAQ,IAAI,IAAI;yCArGL,yBAAyB;2CAAzB,yBAAyB;CAwGrC"}
1
+ {"version":3,"file":"project-form-modal.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/project/project-form-modal.component.ts"],"names":[],"mappings":"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"}