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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. package/README.md +43 -2
  2. package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts +19 -3
  3. package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts.map +1 -1
  4. package/dist/lib/components/active-tasks/active-tasks-panel.component.js +39 -7
  5. package/dist/lib/components/active-tasks/active-tasks-panel.component.js.map +1 -1
  6. package/dist/lib/components/agent/active-agent-indicator.component.d.ts +74 -6
  7. package/dist/lib/components/agent/active-agent-indicator.component.d.ts.map +1 -1
  8. package/dist/lib/components/agent/active-agent-indicator.component.js +111 -21
  9. package/dist/lib/components/agent/active-agent-indicator.component.js.map +1 -1
  10. package/dist/lib/components/agent/agent-process-panel.component.d.ts +31 -5
  11. package/dist/lib/components/agent/agent-process-panel.component.d.ts.map +1 -1
  12. package/dist/lib/components/agent/agent-process-panel.component.js +71 -15
  13. package/dist/lib/components/agent/agent-process-panel.component.js.map +1 -1
  14. package/dist/lib/components/artifact/artifact-share-modal.component.d.ts +65 -9
  15. package/dist/lib/components/artifact/artifact-share-modal.component.d.ts.map +1 -1
  16. package/dist/lib/components/artifact/artifact-share-modal.component.js +169 -57
  17. package/dist/lib/components/artifact/artifact-share-modal.component.js.map +1 -1
  18. package/dist/lib/components/attachment/image-viewer.component.d.ts +77 -11
  19. package/dist/lib/components/attachment/image-viewer.component.d.ts.map +1 -1
  20. package/dist/lib/components/attachment/image-viewer.component.js +181 -47
  21. package/dist/lib/components/attachment/image-viewer.component.js.map +1 -1
  22. package/dist/lib/components/collection/artifact-collection-picker-modal.component.d.ts +129 -19
  23. package/dist/lib/components/collection/artifact-collection-picker-modal.component.d.ts.map +1 -1
  24. package/dist/lib/components/collection/artifact-collection-picker-modal.component.js +350 -116
  25. package/dist/lib/components/collection/artifact-collection-picker-modal.component.js.map +1 -1
  26. package/dist/lib/components/collection/artifact-create-modal.component.d.ts +60 -8
  27. package/dist/lib/components/collection/artifact-create-modal.component.d.ts.map +1 -1
  28. package/dist/lib/components/collection/artifact-create-modal.component.js +130 -46
  29. package/dist/lib/components/collection/artifact-create-modal.component.js.map +1 -1
  30. package/dist/lib/components/collection/collection-artifact-card.component.d.ts +63 -3
  31. package/dist/lib/components/collection/collection-artifact-card.component.d.ts.map +1 -1
  32. package/dist/lib/components/collection/collection-artifact-card.component.js +113 -19
  33. package/dist/lib/components/collection/collection-artifact-card.component.js.map +1 -1
  34. package/dist/lib/components/collection/collection-form-modal.component.d.ts +54 -8
  35. package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -1
  36. package/dist/lib/components/collection/collection-form-modal.component.js +130 -46
  37. package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -1
  38. package/dist/lib/components/collection/collection-share-modal.component.d.ts +70 -10
  39. package/dist/lib/components/collection/collection-share-modal.component.d.ts.map +1 -1
  40. package/dist/lib/components/collection/collection-share-modal.component.js +175 -53
  41. package/dist/lib/components/collection/collection-share-modal.component.js.map +1 -1
  42. package/dist/lib/components/collection/collection-tree.component.d.ts +89 -9
  43. package/dist/lib/components/collection/collection-tree.component.d.ts.map +1 -1
  44. package/dist/lib/components/collection/collection-tree.component.js +220 -70
  45. package/dist/lib/components/collection/collection-tree.component.js.map +1 -1
  46. package/dist/lib/components/collection/collection-view.component.d.ts +89 -11
  47. package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -1
  48. package/dist/lib/components/collection/collection-view.component.js +154 -40
  49. package/dist/lib/components/collection/collection-view.component.js.map +1 -1
  50. package/dist/lib/components/collection/collections-full-view.component.d.ts +390 -38
  51. package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -1
  52. package/dist/lib/components/collection/collections-full-view.component.js +951 -367
  53. package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
  54. package/dist/lib/components/composer/ai-composer.component.d.ts +213 -18
  55. package/dist/lib/components/composer/ai-composer.component.d.ts.map +1 -1
  56. package/dist/lib/components/composer/ai-composer.component.js +388 -44
  57. package/dist/lib/components/composer/ai-composer.component.js.map +1 -1
  58. package/dist/lib/components/conversation/conversation-agent-picker.component.d.ts +12 -1
  59. package/dist/lib/components/conversation/conversation-agent-picker.component.d.ts.map +1 -1
  60. package/dist/lib/components/conversation/conversation-agent-picker.component.js +26 -4
  61. package/dist/lib/components/conversation/conversation-agent-picker.component.js.map +1 -1
  62. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +1191 -124
  63. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  64. package/dist/lib/components/conversation/conversation-chat-area.component.js +2816 -785
  65. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  66. package/dist/lib/components/conversation/conversation-empty-state.component.d.ts +139 -19
  67. package/dist/lib/components/conversation/conversation-empty-state.component.d.ts.map +1 -1
  68. package/dist/lib/components/conversation/conversation-empty-state.component.js +296 -59
  69. package/dist/lib/components/conversation/conversation-empty-state.component.js.map +1 -1
  70. package/dist/lib/components/conversation/conversation-list.component.d.ts +579 -78
  71. package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
  72. package/dist/lib/components/conversation/conversation-list.component.js +2322 -823
  73. package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
  74. package/dist/lib/components/conversation/pinned-messages-panel.component.d.ts +42 -4
  75. package/dist/lib/components/conversation/pinned-messages-panel.component.d.ts.map +1 -1
  76. package/dist/lib/components/conversation/pinned-messages-panel.component.js +93 -21
  77. package/dist/lib/components/conversation/pinned-messages-panel.component.js.map +1 -1
  78. package/dist/lib/components/dialogs/input-dialog.component.d.ts +57 -11
  79. package/dist/lib/components/dialogs/input-dialog.component.d.ts.map +1 -1
  80. package/dist/lib/components/dialogs/input-dialog.component.js +128 -16
  81. package/dist/lib/components/dialogs/input-dialog.component.js.map +1 -1
  82. package/dist/lib/components/dialogs/rating-dialog.component.d.ts +68 -10
  83. package/dist/lib/components/dialogs/rating-dialog.component.d.ts.map +1 -1
  84. package/dist/lib/components/dialogs/rating-dialog.component.js +151 -27
  85. package/dist/lib/components/dialogs/rating-dialog.component.js.map +1 -1
  86. package/dist/lib/components/export/export-modal.component.d.ts +84 -10
  87. package/dist/lib/components/export/export-modal.component.d.ts.map +1 -1
  88. package/dist/lib/components/export/export-modal.component.js +173 -49
  89. package/dist/lib/components/export/export-modal.component.js.map +1 -1
  90. package/dist/lib/components/global-tasks/global-tasks-panel.component.d.ts +29 -3
  91. package/dist/lib/components/global-tasks/global-tasks-panel.component.d.ts.map +1 -1
  92. package/dist/lib/components/global-tasks/global-tasks-panel.component.js +58 -12
  93. package/dist/lib/components/global-tasks/global-tasks-panel.component.js.map +1 -1
  94. package/dist/lib/components/library/library-full-view.component.d.ts +57 -8
  95. package/dist/lib/components/library/library-full-view.component.d.ts.map +1 -1
  96. package/dist/lib/components/library/library-full-view.component.js +119 -35
  97. package/dist/lib/components/library/library-full-view.component.js.map +1 -1
  98. package/dist/lib/components/members/members-modal.component.d.ts +76 -10
  99. package/dist/lib/components/members/members-modal.component.d.ts.map +1 -1
  100. package/dist/lib/components/members/members-modal.component.js +164 -50
  101. package/dist/lib/components/members/members-modal.component.js.map +1 -1
  102. package/dist/lib/components/message/actionable-commands.component.d.ts +49 -5
  103. package/dist/lib/components/message/actionable-commands.component.d.ts.map +1 -1
  104. package/dist/lib/components/message/actionable-commands.component.js +140 -26
  105. package/dist/lib/components/message/actionable-commands.component.js.map +1 -1
  106. package/dist/lib/components/message/conversation-message-rating.component.d.ts +46 -10
  107. package/dist/lib/components/message/conversation-message-rating.component.d.ts.map +1 -1
  108. package/dist/lib/components/message/conversation-message-rating.component.js +120 -36
  109. package/dist/lib/components/message/conversation-message-rating.component.js.map +1 -1
  110. package/dist/lib/components/message/message-input.component.d.ts +613 -74
  111. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  112. package/dist/lib/components/message/message-input.component.js +1390 -422
  113. package/dist/lib/components/message/message-input.component.js.map +1 -1
  114. package/dist/lib/components/message/message-item.component.d.ts +490 -29
  115. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  116. package/dist/lib/components/message/message-item.component.js +1088 -244
  117. package/dist/lib/components/message/message-item.component.js.map +1 -1
  118. package/dist/lib/components/message/message-list.component.d.ts +297 -29
  119. package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
  120. package/dist/lib/components/message/message-list.component.js +598 -123
  121. package/dist/lib/components/message/message-list.component.js.map +1 -1
  122. package/dist/lib/components/navigation/conversation-navigation.component.d.ts +64 -5
  123. package/dist/lib/components/navigation/conversation-navigation.component.d.ts.map +1 -1
  124. package/dist/lib/components/navigation/conversation-navigation.component.js +101 -11
  125. package/dist/lib/components/navigation/conversation-navigation.component.js.map +1 -1
  126. package/dist/lib/components/notification/activity-indicator.component.d.ts +6 -2
  127. package/dist/lib/components/notification/activity-indicator.component.d.ts.map +1 -1
  128. package/dist/lib/components/notification/activity-indicator.component.js +13 -3
  129. package/dist/lib/components/notification/activity-indicator.component.js.map +1 -1
  130. package/dist/lib/components/notification/notification-badge.component.d.ts +15 -3
  131. package/dist/lib/components/notification/notification-badge.component.d.ts.map +1 -1
  132. package/dist/lib/components/notification/notification-badge.component.js +36 -8
  133. package/dist/lib/components/notification/notification-badge.component.js.map +1 -1
  134. package/dist/lib/components/overlay/chat-overlay.component.d.ts +1 -1
  135. package/dist/lib/components/overlay/chat-overlay.component.js +4 -4
  136. package/dist/lib/components/overlay/chat-overlay.component.js.map +1 -1
  137. package/dist/lib/components/project/project-form-modal.component.d.ts +93 -11
  138. package/dist/lib/components/project/project-form-modal.component.d.ts.map +1 -1
  139. package/dist/lib/components/project/project-form-modal.component.js +348 -87
  140. package/dist/lib/components/project/project-form-modal.component.js.map +1 -1
  141. package/dist/lib/components/project/project-selector.component.d.ts +78 -8
  142. package/dist/lib/components/project/project-selector.component.d.ts.map +1 -1
  143. package/dist/lib/components/project/project-selector.component.js +177 -46
  144. package/dist/lib/components/project/project-selector.component.js.map +1 -1
  145. package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts +1 -1
  146. package/dist/lib/components/realtime/realtime-activity-rail.component.js +2 -2
  147. package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -1
  148. package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +1 -1
  149. package/dist/lib/components/realtime/realtime-delegation-card.component.js +2 -2
  150. package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -1
  151. package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +2 -2
  152. package/dist/lib/components/realtime/realtime-session-overlay.component.js +18 -18
  153. package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -1
  154. package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts +47 -23
  155. package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts.map +1 -1
  156. package/dist/lib/components/realtime/realtime-session-timeline-card.component.js +136 -92
  157. package/dist/lib/components/realtime/realtime-session-timeline-card.component.js.map +1 -1
  158. package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +2 -2
  159. package/dist/lib/components/realtime/realtime-surface-tabs.component.js +4 -4
  160. package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -1
  161. package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +1 -1
  162. package/dist/lib/components/realtime/realtime-surface-tabs.model.js +3 -3
  163. package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -1
  164. package/dist/lib/components/realtime/realtime-ui-config.d.ts +13 -11
  165. package/dist/lib/components/realtime/realtime-ui-config.d.ts.map +1 -1
  166. package/dist/lib/components/realtime/realtime-ui-config.js +29 -25
  167. package/dist/lib/components/realtime/realtime-ui-config.js.map +1 -1
  168. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts +3 -1
  169. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts.map +1 -1
  170. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js +6 -2
  171. package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js.map +1 -1
  172. package/dist/lib/components/search/search-panel.component.d.ts +133 -22
  173. package/dist/lib/components/search/search-panel.component.d.ts.map +1 -1
  174. package/dist/lib/components/search/search-panel.component.js +312 -83
  175. package/dist/lib/components/search/search-panel.component.js.map +1 -1
  176. package/dist/lib/components/share/share-modal.component.d.ts +69 -9
  177. package/dist/lib/components/share/share-modal.component.d.ts.map +1 -1
  178. package/dist/lib/components/share/share-modal.component.js +139 -31
  179. package/dist/lib/components/share/share-modal.component.js.map +1 -1
  180. package/dist/lib/components/shared/user-picker.component.d.ts +48 -8
  181. package/dist/lib/components/shared/user-picker.component.d.ts.map +1 -1
  182. package/dist/lib/components/shared/user-picker.component.js +110 -30
  183. package/dist/lib/components/shared/user-picker.component.js.map +1 -1
  184. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts +114 -11
  185. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts.map +1 -1
  186. package/dist/lib/components/sidebar/conversation-sidebar.component.js +199 -21
  187. package/dist/lib/components/sidebar/conversation-sidebar.component.js.map +1 -1
  188. package/dist/lib/components/sidebar/routines-section.component.d.ts +20 -1
  189. package/dist/lib/components/sidebar/routines-section.component.d.ts.map +1 -1
  190. package/dist/lib/components/sidebar/routines-section.component.js +25 -5
  191. package/dist/lib/components/sidebar/routines-section.component.js.map +1 -1
  192. package/dist/lib/components/slots/slot-interfaces.d.ts +19 -0
  193. package/dist/lib/components/slots/slot-interfaces.d.ts.map +1 -1
  194. package/dist/lib/components/slots/slot-interfaces.js.map +1 -1
  195. package/dist/lib/components/task/tasks-full-view.component.d.ts +95 -13
  196. package/dist/lib/components/task/tasks-full-view.component.d.ts.map +1 -1
  197. package/dist/lib/components/task/tasks-full-view.component.js +223 -75
  198. package/dist/lib/components/task/tasks-full-view.component.js.map +1 -1
  199. package/dist/lib/components/tasks/task-widget.component.d.ts +46 -6
  200. package/dist/lib/components/tasks/task-widget.component.d.ts.map +1 -1
  201. package/dist/lib/components/tasks/task-widget.component.js +100 -16
  202. package/dist/lib/components/tasks/task-widget.component.js.map +1 -1
  203. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts +64 -7
  204. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -1
  205. package/dist/lib/components/tasks/tasks-dropdown.component.js +127 -27
  206. package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -1
  207. package/dist/lib/components/thread/thread-panel.component.d.ts +66 -8
  208. package/dist/lib/components/thread/thread-panel.component.d.ts.map +1 -1
  209. package/dist/lib/components/thread/thread-panel.component.js +146 -36
  210. package/dist/lib/components/thread/thread-panel.component.js.map +1 -1
  211. package/dist/lib/components/toast/toast.component.d.ts +11 -1
  212. package/dist/lib/components/toast/toast.component.d.ts.map +1 -1
  213. package/dist/lib/components/toast/toast.component.js +25 -5
  214. package/dist/lib/components/toast/toast.component.js.map +1 -1
  215. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +385 -42
  216. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  217. package/dist/lib/components/workspace/conversation-workspace.component.js +891 -292
  218. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  219. package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts +8 -0
  220. package/dist/lib/composer-plugins/base-conversation-mention.provider.d.ts.map +1 -1
  221. package/dist/lib/composer-plugins/base-conversation-mention.provider.js +8 -1
  222. package/dist/lib/composer-plugins/base-conversation-mention.provider.js.map +1 -1
  223. package/dist/lib/directives/chat-slot.directive.d.ts +5 -1
  224. package/dist/lib/directives/chat-slot.directive.d.ts.map +1 -1
  225. package/dist/lib/directives/chat-slot.directive.js.map +1 -1
  226. package/dist/lib/directives/search-shortcut.directive.d.ts +9 -1
  227. package/dist/lib/directives/search-shortcut.directive.d.ts.map +1 -1
  228. package/dist/lib/directives/search-shortcut.directive.js +14 -4
  229. package/dist/lib/directives/search-shortcut.directive.js.map +1 -1
  230. package/dist/lib/events/chat-events.d.ts +34 -7
  231. package/dist/lib/events/chat-events.d.ts.map +1 -1
  232. package/dist/lib/events/chat-events.js +37 -7
  233. package/dist/lib/events/chat-events.js.map +1 -1
  234. package/dist/lib/models/agent-turn.model.d.ts +113 -0
  235. package/dist/lib/models/agent-turn.model.d.ts.map +1 -0
  236. package/dist/lib/models/agent-turn.model.js +12 -0
  237. package/dist/lib/models/agent-turn.model.js.map +1 -0
  238. package/dist/lib/models/collection-view.model.js.map +1 -1
  239. package/dist/lib/models/conversation-state.model.d.ts +8 -0
  240. package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
  241. package/dist/lib/models/conversation-state.model.js.map +1 -1
  242. package/dist/lib/models/lazy-artifact-info.d.ts +44 -12
  243. package/dist/lib/models/lazy-artifact-info.d.ts.map +1 -1
  244. package/dist/lib/models/lazy-artifact-info.js +98 -34
  245. package/dist/lib/models/lazy-artifact-info.js.map +1 -1
  246. package/dist/lib/services/active-tasks.service.d.ts +30 -4
  247. package/dist/lib/services/active-tasks.service.d.ts.map +1 -1
  248. package/dist/lib/services/active-tasks.service.js +71 -19
  249. package/dist/lib/services/active-tasks.service.js.map +1 -1
  250. package/dist/lib/services/agent-state.service.d.ts +17 -1
  251. package/dist/lib/services/agent-state.service.d.ts.map +1 -1
  252. package/dist/lib/services/agent-state.service.js +48 -16
  253. package/dist/lib/services/agent-state.service.js.map +1 -1
  254. package/dist/lib/services/artifact-permission.service.d.ts +39 -0
  255. package/dist/lib/services/artifact-permission.service.d.ts.map +1 -1
  256. package/dist/lib/services/artifact-permission.service.js +152 -17
  257. package/dist/lib/services/artifact-permission.service.js.map +1 -1
  258. package/dist/lib/services/artifact-state.service.d.ts +58 -5
  259. package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
  260. package/dist/lib/services/artifact-state.service.js +135 -35
  261. package/dist/lib/services/artifact-state.service.js.map +1 -1
  262. package/dist/lib/services/collection-permission.service.d.ts +28 -0
  263. package/dist/lib/services/collection-permission.service.d.ts.map +1 -1
  264. package/dist/lib/services/collection-permission.service.js +88 -32
  265. package/dist/lib/services/collection-permission.service.js.map +1 -1
  266. package/dist/lib/services/collection-state.service.d.ts +11 -1
  267. package/dist/lib/services/collection-state.service.d.ts.map +1 -1
  268. package/dist/lib/services/collection-state.service.js +25 -5
  269. package/dist/lib/services/collection-state.service.js.map +1 -1
  270. package/dist/lib/services/conversation-agent.service.d.ts +47 -4
  271. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  272. package/dist/lib/services/conversation-agent.service.js +85 -20
  273. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  274. package/dist/lib/services/conversation-attachment.service.d.ts +17 -0
  275. package/dist/lib/services/conversation-attachment.service.d.ts.map +1 -1
  276. package/dist/lib/services/conversation-attachment.service.js +38 -10
  277. package/dist/lib/services/conversation-attachment.service.js.map +1 -1
  278. package/dist/lib/services/conversation-liveness-dom.service.d.ts +42 -0
  279. package/dist/lib/services/conversation-liveness-dom.service.d.ts.map +1 -0
  280. package/dist/lib/services/conversation-liveness-dom.service.js +74 -0
  281. package/dist/lib/services/conversation-liveness-dom.service.js.map +1 -0
  282. package/dist/lib/services/conversation-streaming.service.d.ts +22 -0
  283. package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -1
  284. package/dist/lib/services/conversation-streaming.service.js +50 -10
  285. package/dist/lib/services/conversation-streaming.service.js.map +1 -1
  286. package/dist/lib/services/data-cache.service.d.ts +31 -0
  287. package/dist/lib/services/data-cache.service.d.ts.map +1 -1
  288. package/dist/lib/services/data-cache.service.js +71 -15
  289. package/dist/lib/services/data-cache.service.js.map +1 -1
  290. package/dist/lib/services/dialog.service.d.ts +13 -0
  291. package/dist/lib/services/dialog.service.d.ts.map +1 -1
  292. package/dist/lib/services/dialog.service.js +25 -5
  293. package/dist/lib/services/dialog.service.js.map +1 -1
  294. package/dist/lib/services/export.service.d.ts +2 -0
  295. package/dist/lib/services/export.service.d.ts.map +1 -1
  296. package/dist/lib/services/export.service.js +5 -1
  297. package/dist/lib/services/export.service.js.map +1 -1
  298. package/dist/lib/services/mention-parser.service.d.ts +10 -0
  299. package/dist/lib/services/mention-parser.service.d.ts.map +1 -1
  300. package/dist/lib/services/mention-parser.service.js +25 -5
  301. package/dist/lib/services/mention-parser.service.js.map +1 -1
  302. package/dist/lib/services/notification.service.d.ts +54 -6
  303. package/dist/lib/services/notification.service.d.ts.map +1 -1
  304. package/dist/lib/services/notification.service.js +123 -27
  305. package/dist/lib/services/notification.service.js.map +1 -1
  306. package/dist/lib/services/realtime-audio-recorder.d.ts +4 -4
  307. package/dist/lib/services/realtime-audio-recorder.js +12 -12
  308. package/dist/lib/services/realtime-audio-recorder.js.map +1 -1
  309. package/dist/lib/services/realtime-pcm-wav.d.ts +4 -0
  310. package/dist/lib/services/realtime-pcm-wav.d.ts.map +1 -1
  311. package/dist/lib/services/realtime-pcm-wav.js +10 -2
  312. package/dist/lib/services/realtime-pcm-wav.js.map +1 -1
  313. package/dist/lib/services/search.service.d.ts +42 -9
  314. package/dist/lib/services/search.service.d.ts.map +1 -1
  315. package/dist/lib/services/search.service.js +103 -23
  316. package/dist/lib/services/search.service.js.map +1 -1
  317. package/dist/lib/services/toast.service.d.ts +19 -1
  318. package/dist/lib/services/toast.service.d.ts.map +1 -1
  319. package/dist/lib/services/toast.service.js +45 -9
  320. package/dist/lib/services/toast.service.js.map +1 -1
  321. package/dist/lib/services/ui-command-handler.service.d.ts +56 -5
  322. package/dist/lib/services/ui-command-handler.service.d.ts.map +1 -1
  323. package/dist/lib/services/ui-command-handler.service.js +113 -16
  324. package/dist/lib/services/ui-command-handler.service.js.map +1 -1
  325. package/dist/lib/utils/agent-artifact-summary.d.ts +2 -2
  326. package/dist/lib/utils/agent-artifact-summary.js +3 -3
  327. package/dist/lib/utils/agent-artifact-summary.js.map +1 -1
  328. package/dist/lib/utils/agent-turn-routing.d.ts +70 -0
  329. package/dist/lib/utils/agent-turn-routing.d.ts.map +1 -0
  330. package/dist/lib/utils/agent-turn-routing.js +84 -0
  331. package/dist/lib/utils/agent-turn-routing.js.map +1 -0
  332. package/dist/lib/utils/artifact-panel-action.d.ts +15 -4
  333. package/dist/lib/utils/artifact-panel-action.d.ts.map +1 -1
  334. package/dist/lib/utils/artifact-panel-action.js +10 -2
  335. package/dist/lib/utils/artifact-panel-action.js.map +1 -1
  336. package/dist/lib/utils/decision-routing.d.ts +68 -0
  337. package/dist/lib/utils/decision-routing.d.ts.map +1 -0
  338. package/dist/lib/utils/decision-routing.js +101 -0
  339. package/dist/lib/utils/decision-routing.js.map +1 -0
  340. package/dist/lib/utils/distinct-artifacts.d.ts +2 -0
  341. package/dist/lib/utils/distinct-artifacts.d.ts.map +1 -1
  342. package/dist/lib/utils/distinct-artifacts.js +5 -1
  343. package/dist/lib/utils/distinct-artifacts.js.map +1 -1
  344. package/dist/lib/utils/plan-mode-preference.d.ts +2 -2
  345. package/dist/lib/utils/plan-mode-preference.js +6 -6
  346. package/dist/lib/utils/plan-mode-preference.js.map +1 -1
  347. package/dist/public-api.d.ts +5 -0
  348. package/dist/public-api.d.ts.map +1 -1
  349. package/dist/public-api.js +8 -0
  350. package/dist/public-api.js.map +1 -1
  351. package/package.json +32 -32
@@ -7,19 +7,57 @@ export declare class PinnedMessagesPanelComponent {
7
7
  * a stable reference between real changes is what keeps this input from re-firing every
8
8
  * change detection cycle. The panel renders it; it never mutates it.
9
9
  */
10
- pinnedMessages: readonly MJConversationDetailEntity[];
10
+ PinnedMessages: readonly MJConversationDetailEntity[];
11
+ /** @deprecated Use {@link PinnedMessages}. */
12
+ set pinnedMessages(value: readonly MJConversationDetailEntity[]);
13
+ /** @deprecated Use {@link PinnedMessages}. */
14
+ get pinnedMessages(): readonly MJConversationDetailEntity[];
11
15
  /**
12
16
  * True during the panel's first open, while its rows are being fetched.
13
17
  *
14
18
  * Pins are no longer loaded during conversation open — the open path reads only a count —
15
19
  * so the panel can now render before its contents exist.
16
20
  */
17
- isLoading: boolean;
21
+ IsLoading: boolean;
22
+ /** @deprecated Use {@link IsLoading}. */
23
+ set isLoading(value: PinnedMessagesPanelComponent['IsLoading']);
24
+ /** @deprecated Use {@link IsLoading}. */
25
+ get isLoading(): PinnedMessagesPanelComponent['IsLoading'];
26
+ /** When false, pins stay listed and jumpable but Unpin is hidden. */
27
+ AllowUnpin: boolean;
28
+ Closed: EventEmitter<void>;
29
+ /**
30
+ * @deprecated Use {@link Closed}.
31
+ *
32
+ * The same emitter under the old binding name, so a template still binding
33
+ * (closed) keeps working. Must stay AFTER Closed: class fields
34
+ * initialise in order, and the other way round this captures undefined.
35
+ */
18
36
  closed: EventEmitter<void>;
37
+ JumpRequested: EventEmitter<string>;
38
+ /**
39
+ * @deprecated Use {@link JumpRequested}.
40
+ *
41
+ * The same emitter under the old binding name, so a template still binding
42
+ * (jumpRequested) keeps working. Must stay AFTER JumpRequested: class fields
43
+ * initialise in order, and the other way round this captures undefined.
44
+ */
19
45
  jumpRequested: EventEmitter<string>;
46
+ UnpinRequested: EventEmitter<MJConversationDetailEntity>;
47
+ /**
48
+ * @deprecated Use {@link UnpinRequested}.
49
+ *
50
+ * The same emitter under the old binding name, so a template still binding
51
+ * (unpinRequested) keeps working. Must stay AFTER UnpinRequested: class fields
52
+ * initialise in order, and the other way round this captures undefined.
53
+ */
20
54
  unpinRequested: EventEmitter<MJConversationDetailEntity>;
21
55
  /** IDs currently being removed (for fade-out animation) */
22
- unpinningIds: Set<string>;
56
+ UnpinningIds: Set<string>;
57
+ /** @deprecated Use {@link UnpinningIds}. */
58
+ get unpinningIds(): Set<string>;
59
+ /** @deprecated Use {@link UnpinningIds}. */
60
+ set unpinningIds(value: Set<string>);
23
61
  Close(): void;
24
62
  OnJump(message: MJConversationDetailEntity): void;
25
63
  OnUnpin(message: MJConversationDetailEntity): void;
@@ -31,6 +69,6 @@ export declare class PinnedMessagesPanelComponent {
31
69
  /** Display name for the message sender */
32
70
  GetSenderName(message: MJConversationDetailEntity): string;
33
71
  static ɵfac: i0.ɵɵFactoryDeclaration<PinnedMessagesPanelComponent, never>;
34
- static ɵcmp: i0.ɵɵComponentDeclaration<PinnedMessagesPanelComponent, "mj-pinned-messages-panel", never, { "pinnedMessages": { "alias": "pinnedMessages"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; }, { "closed": "closed"; "jumpRequested": "jumpRequested"; "unpinRequested": "unpinRequested"; }, never, never, false, never>;
72
+ static ɵcmp: i0.ɵɵComponentDeclaration<PinnedMessagesPanelComponent, "mj-pinned-messages-panel", never, { "PinnedMessages": { "alias": "PinnedMessages"; "required": false; }; "pinnedMessages": { "alias": "pinnedMessages"; "required": false; }; "IsLoading": { "alias": "IsLoading"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "AllowUnpin": { "alias": "AllowUnpin"; "required": false; }; }, { "Closed": "Closed"; "closed": "closed"; "JumpRequested": "JumpRequested"; "jumpRequested": "jumpRequested"; "UnpinRequested": "UnpinRequested"; "unpinRequested": "unpinRequested"; }, never, never, false, never>;
35
73
  }
36
74
  //# sourceMappingURL=pinned-messages-panel.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pinned-messages-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/conversation/pinned-messages-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;;AAE3E,qBAMa,4BAA4B;IACvC;;;;OAIG;IACa,cAAc,EAAE,SAAS,0BAA0B,EAAE,CAAM;IAE3E;;;;;OAKG;IACa,SAAS,UAAS;IAEjB,MAAM,qBAA4B;IAClC,aAAa,uBAA8B;IAC3C,cAAc,2CAAkD;IAEjF,2DAA2D;IACpD,YAAY,cAAqB;IAEjC,KAAK,IAAI,IAAI;IAIb,MAAM,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IAIjD,OAAO,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IASlD,WAAW,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO;IAIhE,qDAAqD;IAC9C,cAAc,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM;IAgBlE,wCAAwC;IACjC,eAAe,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM;IAenE,0CAA0C;IACnC,aAAa,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM;yCA9EtD,4BAA4B;2CAA5B,4BAA4B;CAkFxC"}
1
+ {"version":3,"file":"pinned-messages-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/conversation/pinned-messages-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;;AAE3E,qBAMa,4BAA4B;IACvC;;;;OAIG;IACa,cAAc,EAAE,SAAS,0BAA0B,EAAE,CAAM;IAE3E,8CAA8C;IAC9C,IAAoB,cAAc,CAAC,KAAK,EAAE,SAAS,0BAA0B,EAAE,EAE9E;IACD,8CAA8C;IAC9C,IAAW,cAAc,IAAI,SAAS,0BAA0B,EAAE,CAEjE;IAED;;;;;OAKG;IACa,SAAS,UAAS;IAElC,yCAAyC;IACzC,IAAoB,SAAS,CAAC,KAAK,EAAE,4BAA4B,CAAC,WAAW,CAAC,EAE7E;IACD,yCAAyC;IACzC,IAAW,SAAS,IAAI,4BAA4B,CAAC,WAAW,CAAC,CAEhE;IAED,qEAAqE;IACrD,UAAU,UAAQ;IAEjB,MAAM,qBAA4B;IAEnD;;;;;;OAMG;IACc,MAAM,qBAAe;IACrB,aAAa,uBAA8B;IAE5D;;;;;;OAMG;IACc,aAAa,uBAAsB;IACnC,cAAc,2CAAkD;IAEjF;;;;;;OAMG;IACc,cAAc,2CAAuB;IAEtD,2DAA2D;IACpD,YAAY,cAAqB;IAExC,4CAA4C;IAC5C,IAAW,YAAY,gBAEtB;IACD,4CAA4C;IAC5C,IAAW,YAAY,CAAC,KAAK,aAAA,EAE5B;IAEM,KAAK,IAAI,IAAI;IAIb,MAAM,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IAIjD,OAAO,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IAYlD,WAAW,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO;IAIhE,qDAAqD;IAC9C,cAAc,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM;IAgBlE,wCAAwC;IACjC,eAAe,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM;IAenE,0CAA0C;IACnC,aAAa,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM;yCA1ItD,4BAA4B;2CAA5B,4BAA4B;CA8IxC"}
@@ -9,6 +9,14 @@ function PinnedMessagesPanelComponent_Conditional_11_Template(rf, ctx) { if (rf
9
9
  function PinnedMessagesPanelComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
10
10
  i0.ɵɵelement(0, "mj-empty-state", 9);
11
11
  } }
12
+ function PinnedMessagesPanelComponent_For_14_Conditional_15_Template(rf, ctx) { if (rf & 1) {
13
+ const _r4 = i0.ɵɵgetCurrentView();
14
+ i0.ɵɵelementStart(0, "button", 23);
15
+ i0.ɵɵlistener("click", function PinnedMessagesPanelComponent_For_14_Conditional_15_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const message_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnUnpin(message_r2)); });
16
+ i0.ɵɵelement(1, "i", 3);
17
+ i0.ɵɵtext(2, " Unpin ");
18
+ i0.ɵɵelementEnd();
19
+ } }
12
20
  function PinnedMessagesPanelComponent_For_14_Template(rf, ctx) { if (rf & 1) {
13
21
  const _r1 = i0.ɵɵgetCurrentView();
14
22
  i0.ɵɵelementStart(0, "div", 11)(1, "div", 12)(2, "div", 13)(3, "div", 14);
@@ -28,11 +36,8 @@ function PinnedMessagesPanelComponent_For_14_Template(rf, ctx) { if (rf & 1) {
28
36
  i0.ɵɵelement(13, "i", 21);
29
37
  i0.ɵɵtext(14, " Jump to message ");
30
38
  i0.ɵɵelementEnd();
31
- i0.ɵɵelementStart(15, "button", 22);
32
- i0.ɵɵlistener("click", function PinnedMessagesPanelComponent_For_14_Template_button_click_15_listener() { const message_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnUnpin(message_r2)); });
33
- i0.ɵɵelement(16, "i", 3);
34
- i0.ɵɵtext(17, " Unpin ");
35
- i0.ɵɵelementEnd()()();
39
+ i0.ɵɵconditionalCreate(15, PinnedMessagesPanelComponent_For_14_Conditional_15_Template, 3, 0, "button", 22);
40
+ i0.ɵɵelementEnd()();
36
41
  } if (rf & 2) {
37
42
  const message_r2 = ctx.$implicit;
38
43
  const ctx_r2 = i0.ɵɵnextContext();
@@ -43,6 +48,8 @@ function PinnedMessagesPanelComponent_For_14_Template(rf, ctx) { if (rf & 1) {
43
48
  i0.ɵɵtextInterpolate(ctx_r2.GetRelativeTime(message_r2));
44
49
  i0.ɵɵadvance(2);
45
50
  i0.ɵɵtextInterpolate(ctx_r2.GetPreviewText(message_r2));
51
+ i0.ɵɵadvance(5);
52
+ i0.ɵɵconditional(ctx_r2.AllowUnpin ? 15 : -1);
46
53
  } }
47
54
  export class PinnedMessagesPanelComponent {
48
55
  /**
@@ -50,35 +57,88 @@ export class PinnedMessagesPanelComponent {
50
57
  * a stable reference between real changes is what keeps this input from re-firing every
51
58
  * change detection cycle. The panel renders it; it never mutates it.
52
59
  */
53
- pinnedMessages = [];
60
+ PinnedMessages = [];
61
+ /** @deprecated Use {@link PinnedMessages}. */
62
+ set pinnedMessages(value) {
63
+ this.PinnedMessages = value;
64
+ }
65
+ /** @deprecated Use {@link PinnedMessages}. */
66
+ get pinnedMessages() {
67
+ return this.PinnedMessages;
68
+ }
54
69
  /**
55
70
  * True during the panel's first open, while its rows are being fetched.
56
71
  *
57
72
  * Pins are no longer loaded during conversation open — the open path reads only a count —
58
73
  * so the panel can now render before its contents exist.
59
74
  */
60
- isLoading = false;
61
- closed = new EventEmitter();
62
- jumpRequested = new EventEmitter(); // emits messageId
63
- unpinRequested = new EventEmitter();
75
+ IsLoading = false;
76
+ /** @deprecated Use {@link IsLoading}. */
77
+ set isLoading(value) {
78
+ this.IsLoading = value;
79
+ }
80
+ /** @deprecated Use {@link IsLoading}. */
81
+ get isLoading() {
82
+ return this.IsLoading;
83
+ }
84
+ /** When false, pins stay listed and jumpable but Unpin is hidden. */
85
+ AllowUnpin = true;
86
+ Closed = new EventEmitter();
87
+ /**
88
+ * @deprecated Use {@link Closed}.
89
+ *
90
+ * The same emitter under the old binding name, so a template still binding
91
+ * (closed) keeps working. Must stay AFTER Closed: class fields
92
+ * initialise in order, and the other way round this captures undefined.
93
+ */
94
+ closed = this.Closed;
95
+ JumpRequested = new EventEmitter();
96
+ /**
97
+ * @deprecated Use {@link JumpRequested}.
98
+ *
99
+ * The same emitter under the old binding name, so a template still binding
100
+ * (jumpRequested) keeps working. Must stay AFTER JumpRequested: class fields
101
+ * initialise in order, and the other way round this captures undefined.
102
+ */
103
+ jumpRequested = this.JumpRequested; // emits messageId
104
+ UnpinRequested = new EventEmitter();
105
+ /**
106
+ * @deprecated Use {@link UnpinRequested}.
107
+ *
108
+ * The same emitter under the old binding name, so a template still binding
109
+ * (unpinRequested) keeps working. Must stay AFTER UnpinRequested: class fields
110
+ * initialise in order, and the other way round this captures undefined.
111
+ */
112
+ unpinRequested = this.UnpinRequested;
64
113
  /** IDs currently being removed (for fade-out animation) */
65
- unpinningIds = new Set();
114
+ UnpinningIds = new Set();
115
+ /** @deprecated Use {@link UnpinningIds}. */
116
+ get unpinningIds() {
117
+ return this.UnpinningIds;
118
+ }
119
+ /** @deprecated Use {@link UnpinningIds}. */
120
+ set unpinningIds(value) {
121
+ this.UnpinningIds = value;
122
+ }
66
123
  Close() {
67
- this.closed.emit();
124
+ this.Closed.emit();
68
125
  }
69
126
  OnJump(message) {
70
- this.jumpRequested.emit(message.ID);
127
+ this.JumpRequested.emit(message.ID);
71
128
  }
72
129
  OnUnpin(message) {
73
- this.unpinningIds.add(message.ID);
130
+ if (!this.AllowUnpin) {
131
+ return;
132
+ }
133
+ this.UnpinningIds.add(message.ID);
74
134
  // Let the card animate out before the parent removes it from the list
75
135
  setTimeout(() => {
76
- this.unpinningIds.delete(message.ID);
77
- this.unpinRequested.emit(message);
136
+ this.UnpinningIds.delete(message.ID);
137
+ this.UnpinRequested.emit(message);
78
138
  }, 200);
79
139
  }
80
140
  IsUnpinning(message) {
81
- return this.unpinningIds.has(message.ID);
141
+ return this.UnpinningIds.has(message.ID);
82
142
  }
83
143
  /** Strip markdown to plain prose for card preview */
84
144
  GetPreviewText(message) {
@@ -124,7 +184,7 @@ export class PinnedMessagesPanelComponent {
124
184
  return 'AI Response';
125
185
  }
126
186
  static ɵfac = function PinnedMessagesPanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PinnedMessagesPanelComponent)(); };
127
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PinnedMessagesPanelComponent, selectors: [["mj-pinned-messages-panel"]], inputs: { pinnedMessages: "pinnedMessages", isLoading: "isLoading" }, outputs: { closed: "closed", jumpRequested: "jumpRequested", unpinRequested: "unpinRequested" }, standalone: false, decls: 15, vars: 2, consts: [[1, "pins-panel"], [1, "pins-header"], [1, "pins-title"], [1, "fas", "fa-thumbtack"], [1, "pins-count"], ["title", "Close", 1, "pins-close-btn", 3, "click"], [1, "fas", "fa-times"], [1, "pins-body"], ["text", "Loading pinned messages\u2026", "size", "small"], ["Size", "compact", "Icon", "fa-solid fa-thumbtack", "Title", "No pinned messages", 1, "pins-empty"], [1, "pin-card", 3, "unpinning"], [1, "pin-card"], [1, "pin-card-meta"], [1, "pin-sender"], [1, "pin-avatar"], [1, "fas", "fa-robot"], [1, "pin-sender-name"], [1, "pin-time"], [1, "pin-preview"], [1, "pin-actions"], ["title", "Jump to message", 1, "pin-action-btn", "jump-btn", 3, "click"], [1, "fas", "fa-arrow-up-right-from-square"], ["title", "Unpin this message", 1, "pin-action-btn", "unpin-btn", 3, "click"]], template: function PinnedMessagesPanelComponent_Template(rf, ctx) { if (rf & 1) {
187
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PinnedMessagesPanelComponent, selectors: [["mj-pinned-messages-panel"]], inputs: { PinnedMessages: "PinnedMessages", pinnedMessages: "pinnedMessages", IsLoading: "IsLoading", isLoading: "isLoading", AllowUnpin: "AllowUnpin" }, outputs: { Closed: "Closed", closed: "closed", JumpRequested: "JumpRequested", jumpRequested: "jumpRequested", UnpinRequested: "UnpinRequested", unpinRequested: "unpinRequested" }, standalone: false, decls: 15, vars: 2, consts: [[1, "pins-panel"], [1, "pins-header"], [1, "pins-title"], [1, "fas", "fa-thumbtack"], [1, "pins-count"], ["title", "Close", 1, "pins-close-btn", 3, "click"], [1, "fas", "fa-times"], [1, "pins-body"], ["text", "Loading pinned messages\u2026", "size", "small"], ["Size", "compact", "Icon", "fa-solid fa-thumbtack", "Title", "No pinned messages", 1, "pins-empty"], [1, "pin-card", 3, "unpinning"], [1, "pin-card"], [1, "pin-card-meta"], [1, "pin-sender"], [1, "pin-avatar"], [1, "fas", "fa-robot"], [1, "pin-sender-name"], [1, "pin-time"], [1, "pin-preview"], [1, "pin-actions"], ["title", "Jump to message", 1, "pin-action-btn", "jump-btn", 3, "click"], [1, "fas", "fa-arrow-up-right-from-square"], ["title", "Unpin this message", 1, "pin-action-btn", "unpin-btn"], ["title", "Unpin this message", 1, "pin-action-btn", "unpin-btn", 3, "click"]], template: function PinnedMessagesPanelComponent_Template(rf, ctx) { if (rf & 1) {
128
188
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2);
129
189
  i0.ɵɵelement(3, "i", 3);
130
190
  i0.ɵɵelementStart(4, "span");
@@ -139,7 +199,7 @@ export class PinnedMessagesPanelComponent {
139
199
  i0.ɵɵelementEnd()();
140
200
  i0.ɵɵelementStart(10, "div", 7);
141
201
  i0.ɵɵconditionalCreate(11, PinnedMessagesPanelComponent_Conditional_11_Template, 1, 0, "mj-loading", 8)(12, PinnedMessagesPanelComponent_Conditional_12_Template, 1, 0, "mj-empty-state", 9);
142
- i0.ɵɵrepeaterCreate(13, PinnedMessagesPanelComponent_For_14_Template, 18, 5, "div", 10, _forTrack0);
202
+ i0.ɵɵrepeaterCreate(13, PinnedMessagesPanelComponent_For_14_Template, 16, 6, "div", 10, _forTrack0);
143
203
  i0.ɵɵelementEnd()();
144
204
  } if (rf & 2) {
145
205
  i0.ɵɵadvance(7);
@@ -152,15 +212,27 @@ export class PinnedMessagesPanelComponent {
152
212
  }
153
213
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PinnedMessagesPanelComponent, [{
154
214
  type: Component,
155
- args: [{ standalone: false, selector: 'mj-pinned-messages-panel', template: "<div class=\"pins-panel\">\n <div class=\"pins-header\">\n <div class=\"pins-title\">\n <i class=\"fas fa-thumbtack\"></i>\n <span>Pinned Messages</span>\n <span class=\"pins-count\">{{ pinnedMessages.length }}</span>\n </div>\n <button class=\"pins-close-btn\" (click)=\"Close()\" title=\"Close\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n\n <div class=\"pins-body\">\n <!-- Rows are fetched on first open now, so \"empty\" and \"not loaded yet\" are different\n states \u2014 showing the empty state during the fetch would claim there are no pins. -->\n @if (isLoading) {\n <mj-loading text=\"Loading pinned messages\u2026\" size=\"small\"></mj-loading>\n } @else if (pinnedMessages.length === 0) {\n <mj-empty-state class=\"pins-empty\" Size=\"compact\"\n Icon=\"fa-solid fa-thumbtack\"\n Title=\"No pinned messages\" />\n }\n\n @for (message of pinnedMessages; track message.ID) {\n <div class=\"pin-card\" [class.unpinning]=\"IsUnpinning(message)\">\n <div class=\"pin-card-meta\">\n <div class=\"pin-sender\">\n <div class=\"pin-avatar\">\n <i class=\"fas fa-robot\"></i>\n </div>\n <span class=\"pin-sender-name\">{{ GetSenderName(message) }}</span>\n </div>\n <span class=\"pin-time\">{{ GetRelativeTime(message) }}</span>\n </div>\n\n <p class=\"pin-preview\">{{ GetPreviewText(message) }}</p>\n\n <div class=\"pin-actions\">\n <button class=\"pin-action-btn jump-btn\" (click)=\"OnJump(message)\" title=\"Jump to message\">\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n Jump to message\n </button>\n <button class=\"pin-action-btn unpin-btn\" (click)=\"OnUnpin(message)\" title=\"Unpin this message\">\n <i class=\"fas fa-thumbtack\"></i>\n Unpin\n </button>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: ["/* ============================================================\n Pinned Messages Panel \u2014 overlays the right edge of the chat\n ============================================================ */\n\n:host {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 340px;\n z-index: 50;\n pointer-events: auto;\n animation: slideInPanel 0.22s cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n@keyframes slideInPanel {\n from {\n opacity: 0;\n transform: translateX(24px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n.pins-panel {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);\n}\n\n/* \u2500\u2500 Header \u2500\u2500 */\n.pins-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n background: var(--mj-bg-surface-card);\n}\n\n.pins-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.pins-title > i.fa-thumbtack {\n color: var(--mj-status-warning);\n font-size: 13px;\n}\n\n.pins-count {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 40%, transparent);\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n font-size: 11px;\n font-weight: 700;\n}\n\n.pins-close-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.pins-close-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n/* \u2500\u2500 Body / Scrollable list \u2500\u2500 */\n.pins-body {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n/* \u2500\u2500 Empty state \u2500\u2500 */\n.pins-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 12px;\n color: var(--mj-text-muted);\n}\n\n.pins-empty i {\n font-size: 32px;\n opacity: 0.4;\n}\n\n.pins-empty p {\n font-size: 14px;\n margin: 0;\n}\n\n/* \u2500\u2500 Pin Card \u2500\u2500 */\n.pin-card {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px;\n border-radius: 8px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-left: 3px solid var(--mj-status-warning);\n transition: opacity 0.2s, transform 0.2s;\n}\n\n.pin-card.unpinning {\n opacity: 0;\n transform: translateX(12px);\n}\n\n.pin-card:hover {\n border-color: var(--mj-border-strong);\n border-left-color: var(--mj-status-warning);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n}\n\n/* Card meta row: avatar+name on left, time on right */\n.pin-card-meta {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.pin-sender {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.pin-avatar {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.pin-avatar i {\n font-size: 10px;\n color: var(--mj-brand-primary);\n}\n\n.pin-sender-name {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.pin-time {\n font-size: 11px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n/* Preview text */\n.pin-preview {\n margin: 0;\n font-size: 13px;\n line-height: 1.5;\n color: var(--mj-text-primary);\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n/* Card action buttons */\n.pin-actions {\n display: flex;\n gap: 6px;\n margin-top: 2px;\n}\n\n.pin-action-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 10px;\n border-radius: 5px;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n border: 1px solid var(--mj-border-default);\n}\n\n.pin-action-btn i {\n font-size: 11px;\n}\n\n.jump-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.jump-btn:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.unpin-btn {\n background: transparent;\n color: var(--mj-text-secondary);\n}\n\n.unpin-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* \u2500\u2500 Scrollbar styling \u2500\u2500 */\n.pins-body::-webkit-scrollbar { width: 4px; }\n.pins-body::-webkit-scrollbar-track { background: transparent; }\n.pins-body::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 2px;\n}\n"] }]
156
- }], null, { pinnedMessages: [{
215
+ args: [{ standalone: false, selector: 'mj-pinned-messages-panel', template: "<div class=\"pins-panel\">\n <div class=\"pins-header\">\n <div class=\"pins-title\">\n <i class=\"fas fa-thumbtack\"></i>\n <span>Pinned Messages</span>\n <span class=\"pins-count\">{{ pinnedMessages.length }}</span>\n </div>\n <button class=\"pins-close-btn\" (click)=\"Close()\" title=\"Close\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n\n <div class=\"pins-body\">\n <!-- Rows are fetched on first open now, so \"empty\" and \"not loaded yet\" are different\n states \u2014 showing the empty state during the fetch would claim there are no pins. -->\n @if (isLoading) {\n <mj-loading text=\"Loading pinned messages\u2026\" size=\"small\"></mj-loading>\n } @else if (pinnedMessages.length === 0) {\n <mj-empty-state class=\"pins-empty\" Size=\"compact\"\n Icon=\"fa-solid fa-thumbtack\"\n Title=\"No pinned messages\" />\n }\n\n @for (message of pinnedMessages; track message.ID) {\n <div class=\"pin-card\" [class.unpinning]=\"IsUnpinning(message)\">\n <div class=\"pin-card-meta\">\n <div class=\"pin-sender\">\n <div class=\"pin-avatar\">\n <i class=\"fas fa-robot\"></i>\n </div>\n <span class=\"pin-sender-name\">{{ GetSenderName(message) }}</span>\n </div>\n <span class=\"pin-time\">{{ GetRelativeTime(message) }}</span>\n </div>\n\n <p class=\"pin-preview\">{{ GetPreviewText(message) }}</p>\n\n <div class=\"pin-actions\">\n <button class=\"pin-action-btn jump-btn\" (click)=\"OnJump(message)\" title=\"Jump to message\">\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n Jump to message\n </button>\n @if (AllowUnpin) {\n <button class=\"pin-action-btn unpin-btn\" (click)=\"OnUnpin(message)\" title=\"Unpin this message\">\n <i class=\"fas fa-thumbtack\"></i>\n Unpin\n </button>\n }\n </div>\n </div>\n }\n </div>\n</div>\n", styles: ["/* ============================================================\n Pinned Messages Panel \u2014 overlays the right edge of the chat\n ============================================================ */\n\n:host {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 340px;\n z-index: 50;\n pointer-events: auto;\n animation: slideInPanel 0.22s cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n@keyframes slideInPanel {\n from {\n opacity: 0;\n transform: translateX(24px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n.pins-panel {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);\n}\n\n/* \u2500\u2500 Header \u2500\u2500 */\n.pins-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n background: var(--mj-bg-surface-card);\n}\n\n.pins-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.pins-title > i.fa-thumbtack {\n color: var(--mj-status-warning);\n font-size: 13px;\n}\n\n.pins-count {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 40%, transparent);\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n font-size: 11px;\n font-weight: 700;\n}\n\n.pins-close-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.pins-close-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n/* \u2500\u2500 Body / Scrollable list \u2500\u2500 */\n.pins-body {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n/* \u2500\u2500 Empty state \u2500\u2500 */\n.pins-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 12px;\n color: var(--mj-text-muted);\n}\n\n.pins-empty i {\n font-size: 32px;\n opacity: 0.4;\n}\n\n.pins-empty p {\n font-size: 14px;\n margin: 0;\n}\n\n/* \u2500\u2500 Pin Card \u2500\u2500 */\n.pin-card {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px;\n border-radius: 8px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-left: 3px solid var(--mj-status-warning);\n transition: opacity 0.2s, transform 0.2s;\n}\n\n.pin-card.unpinning {\n opacity: 0;\n transform: translateX(12px);\n}\n\n.pin-card:hover {\n border-color: var(--mj-border-strong);\n border-left-color: var(--mj-status-warning);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n}\n\n/* Card meta row: avatar+name on left, time on right */\n.pin-card-meta {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.pin-sender {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.pin-avatar {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.pin-avatar i {\n font-size: 10px;\n color: var(--mj-brand-primary);\n}\n\n.pin-sender-name {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.pin-time {\n font-size: 11px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n/* Preview text */\n.pin-preview {\n margin: 0;\n font-size: 13px;\n line-height: 1.5;\n color: var(--mj-text-primary);\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n/* Card action buttons */\n.pin-actions {\n display: flex;\n gap: 6px;\n margin-top: 2px;\n}\n\n.pin-action-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 10px;\n border-radius: 5px;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n border: 1px solid var(--mj-border-default);\n}\n\n.pin-action-btn i {\n font-size: 11px;\n}\n\n.jump-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.jump-btn:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.unpin-btn {\n background: transparent;\n color: var(--mj-text-secondary);\n}\n\n.unpin-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* \u2500\u2500 Scrollbar styling \u2500\u2500 */\n.pins-body::-webkit-scrollbar { width: 4px; }\n.pins-body::-webkit-scrollbar-track { background: transparent; }\n.pins-body::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 2px;\n}\n"] }]
216
+ }], null, { PinnedMessages: [{
217
+ type: Input
218
+ }], pinnedMessages: [{
219
+ type: Input
220
+ }], IsLoading: [{
157
221
  type: Input
158
222
  }], isLoading: [{
159
223
  type: Input
224
+ }], AllowUnpin: [{
225
+ type: Input
226
+ }], Closed: [{
227
+ type: Output
160
228
  }], closed: [{
161
229
  type: Output
230
+ }], JumpRequested: [{
231
+ type: Output
162
232
  }], jumpRequested: [{
163
233
  type: Output
234
+ }], UnpinRequested: [{
235
+ type: Output
164
236
  }], unpinRequested: [{
165
237
  type: Output
166
238
  }] }); })();
@@ -1 +1 @@
1
- {"version":3,"file":"pinned-messages-panel.component.js","sourceRoot":"","sources":["../../../../src/lib/components/conversation/pinned-messages-panel.component.ts","../../../../src/lib/components/conversation/pinned-messages-panel.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;;;;;;ICgBjE,gCAAsE;;;IAEtE,oCAE+B;;;;IAOzB,AADF,AADF,AADF,+BAA+D,cAClC,cACD,cACE;IACtB,wBAA4B;IAC9B,iBAAM;IACN,gCAA8B;IAAA,YAA4B;IAC5D,AAD4D,iBAAO,EAC7D;IACN,gCAAuB;IAAA,YAA8B;IACvD,AADuD,iBAAO,EACxD;IAEN,6BAAuB;IAAA,aAA6B;IAAA,iBAAI;IAGtD,AADF,gCAAyB,kBACmE;IAAlD,uNAAS,yBAAe,KAAC;IAC/D,yBAAiD;IACjD,kCACF;IAAA,iBAAS;IACT,mCAA+F;IAAtD,uNAAS,0BAAgB,KAAC;IACjE,wBAAgC;IAChC,wBACF;IAEJ,AADE,AADE,iBAAS,EACL,EACF;;;;IAvBgB,2DAAwC;IAM1B,eAA4B;IAA5B,sDAA4B;IAErC,eAA8B;IAA9B,wDAA8B;IAGhC,eAA6B;IAA7B,uDAA6B;;AD1B5D,MAAM,OAAO,4BAA4B;IACvC;;;;OAIG;IACa,cAAc,GAA0C,EAAE,CAAC;IAE3E;;;;;OAKG;IACa,SAAS,GAAG,KAAK,CAAC;IAEjB,MAAM,GAAG,IAAI,YAAY,EAAQ,CAAC;IAClC,aAAa,GAAG,IAAI,YAAY,EAAU,CAAC,CAAC,kBAAkB;IAC9D,cAAc,GAAG,IAAI,YAAY,EAA8B,CAAC;IAEjF,2DAA2D;IACpD,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAEjC,KAAK;QACV,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAEM,MAAM,CAAC,OAAmC;QAC/C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;IAEM,OAAO,CAAC,OAAmC;QAChD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAClC,sEAAsE;QACtE,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;IAEM,WAAW,CAAC,OAAmC;QACpD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,qDAAqD;IAC9C,cAAc,CAAC,OAAmC;QACvD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,GAAG;aACjB,OAAO,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAG,qBAAqB;aAC5D,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAW,cAAc;aACtD,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAe,WAAW;aACnD,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAS,OAAO;aAC/C,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAa,SAAS;aACjD,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC,QAAQ;aAChD,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAE,SAAS;aACjD,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAoB,cAAc;aACtD,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAoB,oBAAoB;aAC5D,IAAI,EAAE,CAAC;QACV,OAAO,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC7E,CAAC;IAED,wCAAwC;IACjC,eAAe,CAAC,OAAmC;QACxD,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;QACvC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;QAC7C,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO,UAAU,CAAC;QAChC,IAAI,IAAI,GAAG,EAAE;YAAE,OAAO,GAAG,IAAI,OAAO,CAAC;QACrC,IAAI,KAAK,GAAG,EAAE;YAAE,OAAO,GAAG,KAAK,OAAO,CAAC;QACvC,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,WAAW,CAAC;QACnC,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO,GAAG,IAAI,WAAW,CAAC;QACxC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,0CAA0C;IACnC,aAAa,CAAC,OAAmC;QACtD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1C,OAAO,aAAa,CAAC;IACvB,CAAC;sHAjFU,4BAA4B;6DAA5B,4BAA4B;YCPrC,AADF,AADF,8BAAwB,aACG,aACC;YACtB,uBAAgC;YAChC,4BAAM;YAAA,+BAAe;YAAA,iBAAO;YAC5B,+BAAyB;YAAA,YAA2B;YACtD,AADsD,iBAAO,EACvD;YACN,iCAA+D;YAAhC,yGAAS,WAAO,IAAC;YAC9C,uBAA4B;YAEhC,AADE,iBAAS,EACL;YAEN,+BAAuB;YAKnB,AAFF,uGAAiB,qFAEyB;YAM1C,mGAyBC;YAEL,AADE,iBAAM,EACF;;YA7CyB,eAA2B;YAA3B,+CAA2B;YAUtD,eAMC;YAND,gFAMC;YAED,eAyBC;YAzBD,iCAyBC;;;iFDvCQ,4BAA4B;cANxC,SAAS;6BACI,KAAK,YACP,0BAA0B;;kBAUnC,KAAK;;kBAQL,KAAK;;kBAEL,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kFAlBI,4BAA4B","sourcesContent":["import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { MJConversationDetailEntity } from '@memberjunction/core-entities';\n\n@Component({\n standalone: false,\n selector: 'mj-pinned-messages-panel',\n templateUrl: './pinned-messages-panel.component.html',\n styleUrls: ['./pinned-messages-panel.component.css']\n})\nexport class PinnedMessagesPanelComponent {\n /**\n * Readonly because the chat area hands over the window store's own pin array by reference —\n * a stable reference between real changes is what keeps this input from re-firing every\n * change detection cycle. The panel renders it; it never mutates it.\n */\n @Input() public pinnedMessages: readonly MJConversationDetailEntity[] = [];\n\n /**\n * True during the panel's first open, while its rows are being fetched.\n *\n * Pins are no longer loaded during conversation open — the open path reads only a count —\n * so the panel can now render before its contents exist.\n */\n @Input() public isLoading = false;\n\n @Output() public closed = new EventEmitter<void>();\n @Output() public jumpRequested = new EventEmitter<string>(); // emits messageId\n @Output() public unpinRequested = new EventEmitter<MJConversationDetailEntity>();\n\n /** IDs currently being removed (for fade-out animation) */\n public unpinningIds = new Set<string>();\n\n public Close(): void {\n this.closed.emit();\n }\n\n public OnJump(message: MJConversationDetailEntity): void {\n this.jumpRequested.emit(message.ID);\n }\n\n public OnUnpin(message: MJConversationDetailEntity): void {\n this.unpinningIds.add(message.ID);\n // Let the card animate out before the parent removes it from the list\n setTimeout(() => {\n this.unpinningIds.delete(message.ID);\n this.unpinRequested.emit(message);\n }, 200);\n }\n\n public IsUnpinning(message: MJConversationDetailEntity): boolean {\n return this.unpinningIds.has(message.ID);\n }\n\n /** Strip markdown to plain prose for card preview */\n public GetPreviewText(message: MJConversationDetailEntity): string {\n const raw = message.Message || '';\n const stripped = raw\n .replace(/```[\\s\\S]*?```/g, '[code]') // fenced code blocks\n .replace(/`[^`]*`/g, '[code]') // inline code\n .replace(/#{1,6}\\s+/g, '') // headings\n .replace(/\\*\\*(.+?)\\*\\*/g, '$1') // bold\n .replace(/\\*(.+?)\\*/g, '$1') // italic\n .replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1') // links\n .replace(/!\\[([^\\]]*)\\]\\([^)]+\\)/g, '') // images\n .replace(/>\\s+/g, '') // blockquotes\n .replace(/\\n+/g, ' ') // newlines → spaces\n .trim();\n return stripped.length > 200 ? stripped.substring(0, 197) + '…' : stripped;\n }\n\n /** Human-readable relative timestamp */\n public GetRelativeTime(message: MJConversationDetailEntity): string {\n const created = message.__mj_CreatedAt;\n if (!created) return '';\n const diffMs = Date.now() - new Date(created).getTime();\n const mins = Math.floor(diffMs / 60_000);\n const hours = Math.floor(diffMs / 3_600_000);\n const days = Math.floor(diffMs / 86_400_000);\n if (mins < 1) return 'just now';\n if (mins < 60) return `${mins}m ago`;\n if (hours < 24) return `${hours}h ago`;\n if (days === 1) return 'Yesterday';\n if (days < 7) return `${days} days ago`;\n return new Date(created).toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\n }\n\n /** Display name for the message sender */\n public GetSenderName(message: MJConversationDetailEntity): string {\n if (message.Role === 'User') return 'You';\n return 'AI Response';\n }\n}\n","<div class=\"pins-panel\">\n <div class=\"pins-header\">\n <div class=\"pins-title\">\n <i class=\"fas fa-thumbtack\"></i>\n <span>Pinned Messages</span>\n <span class=\"pins-count\">{{ pinnedMessages.length }}</span>\n </div>\n <button class=\"pins-close-btn\" (click)=\"Close()\" title=\"Close\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n\n <div class=\"pins-body\">\n <!-- Rows are fetched on first open now, so \"empty\" and \"not loaded yet\" are different\n states — showing the empty state during the fetch would claim there are no pins. -->\n @if (isLoading) {\n <mj-loading text=\"Loading pinned messages…\" size=\"small\"></mj-loading>\n } @else if (pinnedMessages.length === 0) {\n <mj-empty-state class=\"pins-empty\" Size=\"compact\"\n Icon=\"fa-solid fa-thumbtack\"\n Title=\"No pinned messages\" />\n }\n\n @for (message of pinnedMessages; track message.ID) {\n <div class=\"pin-card\" [class.unpinning]=\"IsUnpinning(message)\">\n <div class=\"pin-card-meta\">\n <div class=\"pin-sender\">\n <div class=\"pin-avatar\">\n <i class=\"fas fa-robot\"></i>\n </div>\n <span class=\"pin-sender-name\">{{ GetSenderName(message) }}</span>\n </div>\n <span class=\"pin-time\">{{ GetRelativeTime(message) }}</span>\n </div>\n\n <p class=\"pin-preview\">{{ GetPreviewText(message) }}</p>\n\n <div class=\"pin-actions\">\n <button class=\"pin-action-btn jump-btn\" (click)=\"OnJump(message)\" title=\"Jump to message\">\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n Jump to message\n </button>\n <button class=\"pin-action-btn unpin-btn\" (click)=\"OnUnpin(message)\" title=\"Unpin this message\">\n <i class=\"fas fa-thumbtack\"></i>\n Unpin\n </button>\n </div>\n </div>\n }\n </div>\n</div>\n"]}
1
+ {"version":3,"file":"pinned-messages-panel.component.js","sourceRoot":"","sources":["../../../../src/lib/components/conversation/pinned-messages-panel.component.ts","../../../../src/lib/components/conversation/pinned-messages-panel.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { MJConversationDetailEntity } from '@memberjunction/core-entities';\n\n@Component({\n standalone: false,\n selector: 'mj-pinned-messages-panel',\n templateUrl: './pinned-messages-panel.component.html',\n styleUrls: ['./pinned-messages-panel.component.css']\n})\nexport class PinnedMessagesPanelComponent {\n /**\n * Readonly because the chat area hands over the window store's own pin array by reference —\n * a stable reference between real changes is what keeps this input from re-firing every\n * change detection cycle. The panel renders it; it never mutates it.\n */\n @Input() public PinnedMessages: readonly MJConversationDetailEntity[] = [];\n\n /** @deprecated Use {@link PinnedMessages}. */\n @Input() public set pinnedMessages(value: readonly MJConversationDetailEntity[]) {\n this.PinnedMessages = value;\n }\n /** @deprecated Use {@link PinnedMessages}. */\n public get pinnedMessages(): readonly MJConversationDetailEntity[] {\n return this.PinnedMessages;\n }\n\n /**\n * True during the panel's first open, while its rows are being fetched.\n *\n * Pins are no longer loaded during conversation open — the open path reads only a count —\n * so the panel can now render before its contents exist.\n */\n @Input() public IsLoading = false;\n\n /** @deprecated Use {@link IsLoading}. */\n @Input() public set isLoading(value: PinnedMessagesPanelComponent['IsLoading']) {\n this.IsLoading = value;\n }\n /** @deprecated Use {@link IsLoading}. */\n public get isLoading(): PinnedMessagesPanelComponent['IsLoading'] {\n return this.IsLoading;\n }\n\n /** When false, pins stay listed and jumpable but Unpin is hidden. */\n @Input() public AllowUnpin = true;\n\n @Output() public Closed = new EventEmitter<void>();\n\n /**\n * @deprecated Use {@link Closed}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (closed) keeps working. Must stay AFTER Closed: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() public closed = this.Closed;\n @Output() public JumpRequested = new EventEmitter<string>();\n\n /**\n * @deprecated Use {@link JumpRequested}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (jumpRequested) keeps working. Must stay AFTER JumpRequested: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() public jumpRequested = this.JumpRequested; // emits messageId\n @Output() public UnpinRequested = new EventEmitter<MJConversationDetailEntity>();\n\n /**\n * @deprecated Use {@link UnpinRequested}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (unpinRequested) keeps working. Must stay AFTER UnpinRequested: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() public unpinRequested = this.UnpinRequested;\n\n /** IDs currently being removed (for fade-out animation) */\n public UnpinningIds = new Set<string>();\n\n /** @deprecated Use {@link UnpinningIds}. */\n public get unpinningIds() {\n return this.UnpinningIds;\n }\n /** @deprecated Use {@link UnpinningIds}. */\n public set unpinningIds(value) {\n this.UnpinningIds = value;\n }\n\n public Close(): void {\n this.Closed.emit();\n }\n\n public OnJump(message: MJConversationDetailEntity): void {\n this.JumpRequested.emit(message.ID);\n }\n\n public OnUnpin(message: MJConversationDetailEntity): void {\n if (!this.AllowUnpin) {\n return;\n }\n this.UnpinningIds.add(message.ID);\n // Let the card animate out before the parent removes it from the list\n setTimeout(() => {\n this.UnpinningIds.delete(message.ID);\n this.UnpinRequested.emit(message);\n }, 200);\n }\n\n public IsUnpinning(message: MJConversationDetailEntity): boolean {\n return this.UnpinningIds.has(message.ID);\n }\n\n /** Strip markdown to plain prose for card preview */\n public GetPreviewText(message: MJConversationDetailEntity): string {\n const raw = message.Message || '';\n const stripped = raw\n .replace(/```[\\s\\S]*?```/g, '[code]') // fenced code blocks\n .replace(/`[^`]*`/g, '[code]') // inline code\n .replace(/#{1,6}\\s+/g, '') // headings\n .replace(/\\*\\*(.+?)\\*\\*/g, '$1') // bold\n .replace(/\\*(.+?)\\*/g, '$1') // italic\n .replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1') // links\n .replace(/!\\[([^\\]]*)\\]\\([^)]+\\)/g, '') // images\n .replace(/>\\s+/g, '') // blockquotes\n .replace(/\\n+/g, ' ') // newlines → spaces\n .trim();\n return stripped.length > 200 ? stripped.substring(0, 197) + '…' : stripped;\n }\n\n /** Human-readable relative timestamp */\n public GetRelativeTime(message: MJConversationDetailEntity): string {\n const created = message.__mj_CreatedAt;\n if (!created) return '';\n const diffMs = Date.now() - new Date(created).getTime();\n const mins = Math.floor(diffMs / 60_000);\n const hours = Math.floor(diffMs / 3_600_000);\n const days = Math.floor(diffMs / 86_400_000);\n if (mins < 1) return 'just now';\n if (mins < 60) return `${mins}m ago`;\n if (hours < 24) return `${hours}h ago`;\n if (days === 1) return 'Yesterday';\n if (days < 7) return `${days} days ago`;\n return new Date(created).toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\n }\n\n /** Display name for the message sender */\n public GetSenderName(message: MJConversationDetailEntity): string {\n if (message.Role === 'User') return 'You';\n return 'AI Response';\n }\n}\n","<div class=\"pins-panel\">\n <div class=\"pins-header\">\n <div class=\"pins-title\">\n <i class=\"fas fa-thumbtack\"></i>\n <span>Pinned Messages</span>\n <span class=\"pins-count\">{{ pinnedMessages.length }}</span>\n </div>\n <button class=\"pins-close-btn\" (click)=\"Close()\" title=\"Close\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n\n <div class=\"pins-body\">\n <!-- Rows are fetched on first open now, so \"empty\" and \"not loaded yet\" are different\n states — showing the empty state during the fetch would claim there are no pins. -->\n @if (isLoading) {\n <mj-loading text=\"Loading pinned messages…\" size=\"small\"></mj-loading>\n } @else if (pinnedMessages.length === 0) {\n <mj-empty-state class=\"pins-empty\" Size=\"compact\"\n Icon=\"fa-solid fa-thumbtack\"\n Title=\"No pinned messages\" />\n }\n\n @for (message of pinnedMessages; track message.ID) {\n <div class=\"pin-card\" [class.unpinning]=\"IsUnpinning(message)\">\n <div class=\"pin-card-meta\">\n <div class=\"pin-sender\">\n <div class=\"pin-avatar\">\n <i class=\"fas fa-robot\"></i>\n </div>\n <span class=\"pin-sender-name\">{{ GetSenderName(message) }}</span>\n </div>\n <span class=\"pin-time\">{{ GetRelativeTime(message) }}</span>\n </div>\n\n <p class=\"pin-preview\">{{ GetPreviewText(message) }}</p>\n\n <div class=\"pin-actions\">\n <button class=\"pin-action-btn jump-btn\" (click)=\"OnJump(message)\" title=\"Jump to message\">\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n Jump to message\n </button>\n @if (AllowUnpin) {\n <button class=\"pin-action-btn unpin-btn\" (click)=\"OnUnpin(message)\" title=\"Unpin this message\">\n <i class=\"fas fa-thumbtack\"></i>\n Unpin\n </button>\n }\n </div>\n </div>\n }\n </div>\n</div>\n"]}
@@ -1,19 +1,65 @@
1
1
  import * as i0 from "@angular/core";
2
2
  export declare class InputDialogComponent {
3
- message: string;
4
- inputLabel: string;
5
- inputType: 'text' | 'textarea' | 'number' | 'email';
6
- placeholder: string;
7
- required: boolean;
8
- value: string;
9
- secondInputLabel: string;
10
- secondInputPlaceholder: string;
11
- secondInputRequired: boolean;
12
- secondValue: string;
3
+ Message: string;
4
+ /** @deprecated Use {@link Message}. */
5
+ set message(value: string);
6
+ /** @deprecated Use {@link Message}. */
7
+ get message(): string;
8
+ InputLabel: string;
9
+ /** @deprecated Use {@link InputLabel}. */
10
+ set inputLabel(value: string);
11
+ /** @deprecated Use {@link InputLabel}. */
12
+ get inputLabel(): string;
13
+ InputType: 'text' | 'textarea' | 'number' | 'email';
14
+ /** @deprecated Use {@link InputType}. */
15
+ set inputType(value: 'text' | 'textarea' | 'number' | 'email');
16
+ /** @deprecated Use {@link InputType}. */
17
+ get inputType(): 'text' | 'textarea' | 'number' | 'email';
18
+ Placeholder: string;
19
+ /** @deprecated Use {@link Placeholder}. */
20
+ set placeholder(value: string);
21
+ /** @deprecated Use {@link Placeholder}. */
22
+ get placeholder(): string;
23
+ Required: boolean;
24
+ /** @deprecated Use {@link Required}. */
25
+ set required(value: boolean);
26
+ /** @deprecated Use {@link Required}. */
27
+ get required(): boolean;
28
+ Value: string;
29
+ /** @deprecated Use {@link Value}. */
30
+ set value(value: string);
31
+ /** @deprecated Use {@link Value}. */
32
+ get value(): string;
33
+ SecondInputLabel: string;
34
+ /** @deprecated Use {@link SecondInputLabel}. */
35
+ set secondInputLabel(value: string);
36
+ /** @deprecated Use {@link SecondInputLabel}. */
37
+ get secondInputLabel(): string;
38
+ SecondInputPlaceholder: string;
39
+ /** @deprecated Use {@link SecondInputPlaceholder}. */
40
+ set secondInputPlaceholder(value: string);
41
+ /** @deprecated Use {@link SecondInputPlaceholder}. */
42
+ get secondInputPlaceholder(): string;
43
+ SecondInputRequired: boolean;
44
+ /** @deprecated Use {@link SecondInputRequired}. */
45
+ set secondInputRequired(value: boolean);
46
+ /** @deprecated Use {@link SecondInputRequired}. */
47
+ get secondInputRequired(): boolean;
48
+ SecondValue: string;
49
+ /** @deprecated Use {@link SecondValue}. */
50
+ set secondValue(value: string);
51
+ /** @deprecated Use {@link SecondValue}. */
52
+ get secondValue(): string;
53
+ OnEnterKey(event: Event): void;
54
+ /** @deprecated Use {@link OnEnterKey}. */
13
55
  onEnterKey(event: Event): void;
56
+ GetValue(): string;
57
+ /** @deprecated Use {@link GetValue}. */
14
58
  getValue(): string;
59
+ GetSecondValue(): string;
60
+ /** @deprecated Use {@link GetSecondValue}. */
15
61
  getSecondValue(): string;
16
62
  static ɵfac: i0.ɵɵFactoryDeclaration<InputDialogComponent, never>;
17
- static ɵcmp: i0.ɵɵComponentDeclaration<InputDialogComponent, "mj-input-dialog", never, { "message": { "alias": "message"; "required": false; }; "inputLabel": { "alias": "inputLabel"; "required": false; }; "inputType": { "alias": "inputType"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "value": { "alias": "value"; "required": false; }; "secondInputLabel": { "alias": "secondInputLabel"; "required": false; }; "secondInputPlaceholder": { "alias": "secondInputPlaceholder"; "required": false; }; "secondInputRequired": { "alias": "secondInputRequired"; "required": false; }; "secondValue": { "alias": "secondValue"; "required": false; }; }, {}, never, never, false, never>;
63
+ static ɵcmp: i0.ɵɵComponentDeclaration<InputDialogComponent, "mj-input-dialog", never, { "Message": { "alias": "Message"; "required": false; }; "message": { "alias": "message"; "required": false; }; "InputLabel": { "alias": "InputLabel"; "required": false; }; "inputLabel": { "alias": "inputLabel"; "required": false; }; "InputType": { "alias": "InputType"; "required": false; }; "inputType": { "alias": "inputType"; "required": false; }; "Placeholder": { "alias": "Placeholder"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "Required": { "alias": "Required"; "required": false; }; "required": { "alias": "required"; "required": false; }; "Value": { "alias": "Value"; "required": false; }; "value": { "alias": "value"; "required": false; }; "SecondInputLabel": { "alias": "SecondInputLabel"; "required": false; }; "secondInputLabel": { "alias": "secondInputLabel"; "required": false; }; "SecondInputPlaceholder": { "alias": "SecondInputPlaceholder"; "required": false; }; "secondInputPlaceholder": { "alias": "secondInputPlaceholder"; "required": false; }; "SecondInputRequired": { "alias": "SecondInputRequired"; "required": false; }; "secondInputRequired": { "alias": "secondInputRequired"; "required": false; }; "SecondValue": { "alias": "SecondValue"; "required": false; }; "secondValue": { "alias": "secondValue"; "required": false; }; }, {}, never, never, false, never>;
18
64
  }
19
65
  //# sourceMappingURL=input-dialog.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"input-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/dialogs/input-dialog.component.ts"],"names":[],"mappings":";AAEA,qBAsGa,oBAAoB;IACtB,OAAO,EAAE,MAAM,CAAM;IACrB,UAAU,EAAE,MAAM,CAAM;IACxB,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAU;IAC7D,WAAW,EAAE,MAAM,CAAM;IACzB,QAAQ,EAAE,OAAO,CAAS;IAC1B,KAAK,EAAE,MAAM,CAAM;IACnB,gBAAgB,EAAE,MAAM,CAAM;IAC9B,sBAAsB,EAAE,MAAM,CAAM;IACpC,mBAAmB,EAAE,OAAO,CAAS;IACrC,WAAW,EAAE,MAAM,CAAM;IAElC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAY9B,QAAQ,IAAI,MAAM;IAIlB,cAAc,IAAI,MAAM;yCA5Bb,oBAAoB;2CAApB,oBAAoB;CA+BhC"}
1
+ {"version":3,"file":"input-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/dialogs/input-dialog.component.ts"],"names":[],"mappings":";AAEA,qBAsGa,oBAAoB;IACtB,OAAO,EAAE,MAAM,CAAM;IAE9B,uCAAuC;IACvC,IAAa,OAAO,CAAC,KAAK,EAAE,MAAM,EAEjC;IACD,uCAAuC;IACvC,IAAI,OAAO,IAAI,MAAM,CAEpB;IACQ,UAAU,EAAE,MAAM,CAAM;IAEjC,0CAA0C;IAC1C,IAAa,UAAU,CAAC,KAAK,EAAE,MAAM,EAEpC;IACD,0CAA0C;IAC1C,IAAI,UAAU,IAAI,MAAM,CAEvB;IACQ,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAU;IAEtE,yCAAyC;IACzC,IAAa,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,EAErE;IACD,yCAAyC;IACzC,IAAI,SAAS,IAAI,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAExD;IACQ,WAAW,EAAE,MAAM,CAAM;IAElC,2CAA2C;IAC3C,IAAa,WAAW,CAAC,KAAK,EAAE,MAAM,EAErC;IACD,2CAA2C;IAC3C,IAAI,WAAW,IAAI,MAAM,CAExB;IACQ,QAAQ,EAAE,OAAO,CAAS;IAEnC,wCAAwC;IACxC,IAAa,QAAQ,CAAC,KAAK,EAAE,OAAO,EAEnC;IACD,wCAAwC;IACxC,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACQ,KAAK,EAAE,MAAM,CAAM;IAE5B,qCAAqC;IACrC,IAAa,KAAK,CAAC,KAAK,EAAE,MAAM,EAE/B;IACD,qCAAqC;IACrC,IAAI,KAAK,IAAI,MAAM,CAElB;IACQ,gBAAgB,EAAE,MAAM,CAAM;IAEvC,gDAAgD;IAChD,IAAa,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAE1C;IACD,gDAAgD;IAChD,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IACQ,sBAAsB,EAAE,MAAM,CAAM;IAE7C,sDAAsD;IACtD,IAAa,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAEhD;IACD,sDAAsD;IACtD,IAAI,sBAAsB,IAAI,MAAM,CAEnC;IACQ,mBAAmB,EAAE,OAAO,CAAS;IAE9C,mDAAmD;IACnD,IAAa,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAE9C;IACD,mDAAmD;IACnD,IAAI,mBAAmB,IAAI,OAAO,CAEjC;IACQ,WAAW,EAAE,MAAM,CAAM;IAElC,2CAA2C;IAC3C,IAAa,WAAW,CAAC,KAAK,EAAE,MAAM,EAErC;IACD,2CAA2C;IAC3C,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAY9B,0CAA0C;IAC1C,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI9B,QAAQ,IAAI,MAAM;IAIlB,wCAAwC;IACxC,QAAQ,IAAI,MAAM;IAIlB,cAAc,IAAI,MAAM;IAIxB,8CAA8C;IAC9C,cAAc,IAAI,MAAM;yCArIb,oBAAoB;2CAApB,oBAAoB;CAwIhC"}