@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":"search.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/search.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/search.service.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { BehaviorSubject, Subject } from 'rxjs';
3
3
  import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
4
+ import { ConversationEngine } from '@memberjunction/core-entities';
4
5
  import { RunView, Metadata } from '@memberjunction/core';
5
6
  import { EscapeSQLString } from '@memberjunction/global';
6
7
  import * as i0 from "@angular/core";
8
+ import * as i1 from "./artifact-permission.service";
7
9
  /**
8
10
  * Service for searching across conversations, messages, and artifacts
9
11
  * Provides debounced search with result ranking and filtering
@@ -19,6 +21,7 @@ import * as i0 from "@angular/core";
19
21
  * `escapeLikeValue()` in `@memberjunction/core`, `generic/runQuerySQLFilterImplementations.ts`).
20
22
  */
21
23
  export class SearchService {
24
+ artifactPermissions;
22
25
  _searchQuery$ = new Subject();
23
26
  _searchFilter$ = new BehaviorSubject('all');
24
27
  _dateRange$ = new BehaviorSubject({ start: null, end: null });
@@ -35,21 +38,46 @@ export class SearchService {
35
38
  recentSearches = [];
36
39
  MAX_RECENT_SEARCHES = 10;
37
40
  // Public observables
38
- searchQuery$ = this._searchQuery$.asObservable();
39
- searchFilter$ = this._searchFilter$.asObservable();
40
- dateRange$ = this._dateRange$.asObservable();
41
- isSearching$ = this._isSearching$.asObservable();
42
- searchResults$ = this._searchResults$.asObservable();
41
+ SearchQuery$ = this._searchQuery$.asObservable();
42
+ /** @deprecated Use {@link SearchQuery$}. */
43
+ get searchQuery$() {
44
+ return this.SearchQuery$;
45
+ }
46
+ SearchFilter$ = this._searchFilter$.asObservable();
47
+ /** @deprecated Use {@link SearchFilter$}. */
48
+ get searchFilter$() {
49
+ return this.SearchFilter$;
50
+ }
51
+ DateRange$ = this._dateRange$.asObservable();
52
+ /** @deprecated Use {@link DateRange$}. */
53
+ get dateRange$() {
54
+ return this.DateRange$;
55
+ }
56
+ IsSearching$ = this._isSearching$.asObservable();
57
+ /** @deprecated Use {@link IsSearching$}. */
58
+ get isSearching$() {
59
+ return this.IsSearching$;
60
+ }
61
+ SearchResults$ = this._searchResults$.asObservable();
62
+ /** @deprecated Use {@link SearchResults$}. */
63
+ get searchResults$() {
64
+ return this.SearchResults$;
65
+ }
43
66
  _provider = null;
44
- constructor() {
67
+ constructor(artifactPermissions) {
68
+ this.artifactPermissions = artifactPermissions;
45
69
  this.initializeSearch();
46
70
  this.loadRecentSearches();
47
71
  }
48
72
  /**
49
73
  * Set the metadata provider this service should use. When unset, falls back to Metadata.Provider.
74
+ * Setting it also propagates to the artifact-permission service this depends on.
50
75
  */
51
76
  set Provider(value) {
52
77
  this._provider = value;
78
+ if (value !== null) {
79
+ this.artifactPermissions.Provider = value;
80
+ }
53
81
  }
54
82
  get Provider() {
55
83
  return this._provider ?? Metadata.Provider;
@@ -67,7 +95,7 @@ export class SearchService {
67
95
  /**
68
96
  * Search across all content types
69
97
  */
70
- async search(query, environmentId, currentUser) {
98
+ async Search(query, environmentId, currentUser) {
71
99
  if (!query || query.trim().length === 0) {
72
100
  const emptyResults = {
73
101
  conversations: [],
@@ -118,13 +146,18 @@ export class SearchService {
118
146
  this._isSearching$.next(false);
119
147
  }
120
148
  }
149
+ /** @deprecated Use {@link Search}. */
150
+ async search(query, environmentId, currentUser) {
151
+ return this.Search(query, environmentId, currentUser);
152
+ }
121
153
  /**
122
- * Search conversations by name and description
154
+ * Search conversations by name and description, limited to the conversations the
155
+ * conversation list shows the user
123
156
  */
124
157
  async searchConversations(query, environmentId, currentUser, dateRange) {
125
158
  const rv = RunView.FromMetadataProvider(this.Provider);
126
159
  const lowerQuery = query.toLowerCase();
127
- let filter = `EnvironmentID='${environmentId}' AND (IsArchived IS NULL OR IsArchived=0)`;
160
+ let filter = await ConversationEngine.Instance.GetVisibleConversationsFilter(environmentId, currentUser);
128
161
  filter += ` AND (LOWER(Name) LIKE '%${EscapeSQLString(lowerQuery)}%' OR LOWER(Description) LIKE '%${EscapeSQLString(lowerQuery)}%')`;
129
162
  if (dateRange.start) {
130
163
  filter += ` AND __mj_CreatedAt >= '${dateRange.start.toISOString()}'`;
@@ -146,13 +179,18 @@ export class SearchService {
146
179
  return result.Results.map(conv => this.mapConversationToSearchResult(conv, query));
147
180
  }
148
181
  /**
149
- * Search message content
182
+ * Search message content inside the conversations the conversation list shows the user
150
183
  */
151
184
  async searchMessages(query, environmentId, currentUser, dateRange) {
185
+ const conversationIds = await this.getVisibleConversationIds(environmentId, currentUser);
186
+ if (conversationIds.length === 0) {
187
+ return [];
188
+ }
152
189
  const rv = RunView.FromMetadataProvider(this.Provider);
153
190
  const lowerQuery = query.toLowerCase();
154
- // First get conversations in this environment
155
- let filter = `ConversationID IN (SELECT ID FROM vwConversations WHERE EnvironmentID='${environmentId}' AND (IsArchived IS NULL OR IsArchived=0))`;
191
+ // The IDs come from a separate query so this filter names only Conversation Details
192
+ // columns, which every provider can quote.
193
+ let filter = `ConversationID IN (${conversationIds.map(id => `'${id}'`).join(',')})`;
156
194
  filter += ` AND LOWER(Message) LIKE '%${EscapeSQLString(lowerQuery)}%'`;
157
195
  filter += ` AND (HiddenToUser IS NULL OR HiddenToUser=0)`;
158
196
  if (dateRange.start) {
@@ -175,14 +213,32 @@ export class SearchService {
175
213
  return result.Results.map(msg => this.mapMessageToSearchResult(msg, query));
176
214
  }
177
215
  /**
178
- * Search artifacts by name and description
216
+ * IDs of every conversation the conversation list shows the user. Not capped, so older
217
+ * conversations stay searchable.
218
+ */
219
+ async getVisibleConversationIds(environmentId, currentUser) {
220
+ const rv = RunView.FromMetadataProvider(this.Provider);
221
+ const result = await rv.RunView({
222
+ EntityName: 'MJ: Conversations',
223
+ ExtraFilter: await ConversationEngine.Instance.GetVisibleConversationsFilter(environmentId, currentUser),
224
+ Fields: ['ID'],
225
+ ResultType: 'simple'
226
+ }, currentUser);
227
+ if (!result.Success || !result.Results) {
228
+ console.error('Failed to load conversations to search messages in:', result.ErrorMessage);
229
+ return [];
230
+ }
231
+ return result.Results.map(c => c.ID);
232
+ }
233
+ /**
234
+ * Search artifacts by name and description, limited to the artifacts the user can read
179
235
  * Includes artifacts from both conversations and collections
180
236
  */
181
237
  async searchArtifacts(query, environmentId, currentUser, dateRange) {
182
238
  const rv = RunView.FromMetadataProvider(this.Provider);
183
239
  const lowerQuery = query.toLowerCase();
184
- // Search artifacts directly by name and description
185
- let filter = `EnvironmentID='${environmentId}'`;
240
+ const readableFilter = await this.artifactPermissions.GetReadableArtifactsFilter(currentUser.ID, currentUser);
241
+ let filter = `EnvironmentID='${environmentId}' AND ${readableFilter}`;
186
242
  filter += ` AND (LOWER(Name) LIKE '%${EscapeSQLString(lowerQuery)}%' OR LOWER(Description) LIKE '%${EscapeSQLString(lowerQuery)}%')`;
187
243
  if (dateRange.start) {
188
244
  filter += ` AND __mj_CreatedAt >= '${dateRange.start.toISOString()}'`;
@@ -450,26 +506,38 @@ export class SearchService {
450
506
  /**
451
507
  * Set search filter
452
508
  */
453
- setSearchFilter(filter) {
509
+ SetSearchFilter(filter) {
454
510
  this._searchFilter$.next(filter);
455
511
  }
512
+ /** @deprecated Use {@link SetSearchFilter}. */
513
+ setSearchFilter(filter) {
514
+ return this.SetSearchFilter(filter);
515
+ }
456
516
  /**
457
517
  * Set date range filter
458
518
  */
459
- setDateRange(range) {
519
+ SetDateRange(range) {
460
520
  this._dateRange$.next(range);
461
521
  }
522
+ /** @deprecated Use {@link SetDateRange}. */
523
+ setDateRange(range) {
524
+ return this.SetDateRange(range);
525
+ }
462
526
  /**
463
527
  * Clear all filters
464
528
  */
465
- clearFilters() {
529
+ ClearFilters() {
466
530
  this._searchFilter$.next('all');
467
531
  this._dateRange$.next({ start: null, end: null });
468
532
  }
533
+ /** @deprecated Use {@link ClearFilters}. */
534
+ clearFilters() {
535
+ return this.ClearFilters();
536
+ }
469
537
  /**
470
538
  * Clear search results
471
539
  */
472
- clearResults() {
540
+ ClearResults() {
473
541
  this._searchResults$.next({
474
542
  conversations: [],
475
543
  messages: [],
@@ -479,12 +547,20 @@ export class SearchService {
479
547
  total: 0
480
548
  });
481
549
  }
550
+ /** @deprecated Use {@link ClearResults}. */
551
+ clearResults() {
552
+ return this.ClearResults();
553
+ }
482
554
  /**
483
555
  * Get recent searches
484
556
  */
485
- getRecentSearches() {
557
+ GetRecentSearches() {
486
558
  return [...this.recentSearches];
487
559
  }
560
+ /** @deprecated Use {@link GetRecentSearches}. */
561
+ getRecentSearches() {
562
+ return this.GetRecentSearches();
563
+ }
488
564
  /**
489
565
  * Add to recent searches
490
566
  */
@@ -505,10 +581,14 @@ export class SearchService {
505
581
  /**
506
582
  * Clear recent searches
507
583
  */
508
- clearRecentSearches() {
584
+ ClearRecentSearches() {
509
585
  this.recentSearches = [];
510
586
  this.saveRecentSearches();
511
587
  }
588
+ /** @deprecated Use {@link ClearRecentSearches}. */
589
+ clearRecentSearches() {
590
+ return this.ClearRecentSearches();
591
+ }
512
592
  /**
513
593
  * Load recent searches from localStorage
514
594
  */
@@ -535,7 +615,7 @@ export class SearchService {
535
615
  console.error('Failed to save recent searches:', error);
536
616
  }
537
617
  }
538
- static ɵfac = function SearchService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SearchService)(); };
618
+ static ɵfac = function SearchService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SearchService)(i0.ɵɵinject(i1.ArtifactPermissionService)); };
539
619
  static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: SearchService, factory: SearchService.ɵfac, providedIn: 'root' });
540
620
  }
541
621
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SearchService, [{
@@ -543,5 +623,5 @@ export class SearchService {
543
623
  args: [{
544
624
  providedIn: 'root'
545
625
  }]
546
- }], () => [], null); })();
626
+ }], () => [{ type: i1.ArtifactPermissionService }], null); })();
547
627
  //# sourceMappingURL=search.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.service.js","sourceRoot":"","sources":["../../../src/lib/services/search.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject, of } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, switchMap, map } from 'rxjs/operators';\nimport {\n MJConversationEntity,\n MJConversationDetailEntity,\n MJConversationArtifactEntity,\n MJCollectionEntity,\n MJCollectionArtifactEntity,\n MJTaskEntity,\n MJArtifactEntity\n} from '@memberjunction/core-entities';\nimport { RunView, UserInfo, Metadata, IMetadataProvider } from '@memberjunction/core';\nimport { EscapeSQLString } from '@memberjunction/global';\n\n/**\n * Types of searchable content\n */\nexport type SearchResultType = 'conversation' | 'message' | 'artifact' | 'collection' | 'task';\n\n/**\n * Filter options for search\n */\nexport type SearchFilter = 'all' | 'conversations' | 'messages' | 'artifacts' | 'collections' | 'tasks';\n\n/**\n * Unified search result\n */\nexport interface SearchResult {\n id: string;\n type: SearchResultType;\n title: string;\n preview: string;\n matchedText?: string;\n conversationId?: string;\n conversationName?: string;\n artifactType?: string;\n collectionId?: string;\n collectionName?: string;\n createdAt: Date;\n relevanceScore: number;\n}\n\n/**\n * Search results grouped by type\n */\nexport interface GroupedSearchResults {\n conversations: SearchResult[];\n messages: SearchResult[];\n artifacts: SearchResult[];\n collections: SearchResult[];\n tasks: SearchResult[];\n total: number;\n}\n\n/**\n * Date range filter\n */\nexport interface DateRange {\n start: Date | null;\n end: Date | null;\n}\n\n/**\n * Service for searching across conversations, messages, and artifacts\n * Provides debounced search with result ranking and filtering\n */\n/**\n * NOTE ON `LIKE` ESCAPING\n *\n * The predicates below interpolate the user's query into `LIKE '%…%'` via `EscapeSQLString`, which\n * neutralises quotes but NOT LIKE metacharacters — `%`, `_` and `[` in a search term are still\n * treated as wildcards rather than literal text. That is this service's long-standing search\n * behaviour, so it is left as-is deliberately; changing it would change what users' searches match.\n * If literal matching is wanted, escape the metacharacters and append `ESCAPE '\\\\'` (see\n * `escapeLikeValue()` in `@memberjunction/core`, `generic/runQuerySQLFilterImplementations.ts`).\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SearchService {\n private _searchQuery$ = new Subject<string>();\n private _searchFilter$ = new BehaviorSubject<SearchFilter>('all');\n private _dateRange$ = new BehaviorSubject<DateRange>({ start: null, end: null });\n private _isSearching$ = new BehaviorSubject<boolean>(false);\n private _searchResults$ = new BehaviorSubject<GroupedSearchResults>({\n conversations: [],\n messages: [],\n artifacts: [],\n collections: [],\n tasks: [],\n total: 0\n });\n\n // Recent searches stored in memory (could be persisted to localStorage)\n private recentSearches: string[] = [];\n private readonly MAX_RECENT_SEARCHES = 10;\n\n // Public observables\n public readonly searchQuery$ = this._searchQuery$.asObservable();\n public readonly searchFilter$ = this._searchFilter$.asObservable();\n public readonly dateRange$ = this._dateRange$.asObservable();\n public readonly isSearching$ = this._isSearching$.asObservable();\n public readonly searchResults$ = this._searchResults$.asObservable();\n\n private _provider: IMetadataProvider | null = null;\n\n constructor() {\n this.initializeSearch();\n this.loadRecentSearches();\n }\n\n /**\n * Set the metadata provider this service should use. When unset, falls back to Metadata.Provider.\n */\n public set Provider(value: IMetadataProvider | null) {\n this._provider = value;\n }\n\n public get Provider(): IMetadataProvider {\n return this._provider ?? Metadata.Provider;\n }\n\n /**\n * Initialize debounced search\n */\n private initializeSearch(): void {\n this._searchQuery$.pipe(\n debounceTime(300),\n distinctUntilChanged()\n ).subscribe(query => {\n if (query && query.trim().length > 0) {\n this.addToRecentSearches(query);\n }\n });\n }\n\n /**\n * Search across all content types\n */\n public async search(\n query: string,\n environmentId: string,\n currentUser: UserInfo\n ): Promise<GroupedSearchResults> {\n if (!query || query.trim().length === 0) {\n const emptyResults: GroupedSearchResults = {\n conversations: [],\n messages: [],\n artifacts: [],\n collections: [],\n tasks: [],\n total: 0\n };\n this._searchResults$.next(emptyResults);\n return emptyResults;\n }\n\n this._isSearching$.next(true);\n this._searchQuery$.next(query);\n\n try {\n const filter = this._searchFilter$.value;\n const dateRange = this._dateRange$.value;\n\n // Search based on active filter\n const [conversations, messages, artifacts, collections, tasks] = await Promise.all([\n filter === 'all' || filter === 'conversations'\n ? this.searchConversations(query, environmentId, currentUser, dateRange)\n : Promise.resolve([]),\n filter === 'all' || filter === 'messages'\n ? this.searchMessages(query, environmentId, currentUser, dateRange)\n : Promise.resolve([]),\n filter === 'all' || filter === 'artifacts'\n ? this.searchArtifacts(query, environmentId, currentUser, dateRange)\n : Promise.resolve([]),\n filter === 'all' || filter === 'collections'\n ? this.searchCollections(query, environmentId, currentUser, dateRange)\n : Promise.resolve([]),\n filter === 'all' || filter === 'tasks'\n ? this.searchTasks(query, environmentId, currentUser, dateRange)\n : Promise.resolve([])\n ]);\n\n const results: GroupedSearchResults = {\n conversations,\n messages,\n artifacts,\n collections,\n tasks,\n total: conversations.length + messages.length + artifacts.length + collections.length + tasks.length\n };\n\n this._searchResults$.next(results);\n return results;\n } finally {\n this._isSearching$.next(false);\n }\n }\n\n /**\n * Search conversations by name and description\n */\n private async searchConversations(\n query: string,\n environmentId: string,\n currentUser: UserInfo,\n dateRange: DateRange\n ): Promise<SearchResult[]> {\n const rv = RunView.FromMetadataProvider(this.Provider);\n const lowerQuery = query.toLowerCase();\n\n let filter = `EnvironmentID='${environmentId}' AND (IsArchived IS NULL OR IsArchived=0)`;\n filter += ` AND (LOWER(Name) LIKE '%${EscapeSQLString(lowerQuery)}%' OR LOWER(Description) LIKE '%${EscapeSQLString(lowerQuery)}%')`;\n\n if (dateRange.start) {\n filter += ` AND __mj_CreatedAt >= '${dateRange.start.toISOString()}'`;\n }\n if (dateRange.end) {\n filter += ` AND __mj_CreatedAt <= '${dateRange.end.toISOString()}'`;\n }\n\n const result = await rv.RunView<MJConversationEntity>(\n {\n EntityName: 'MJ: Conversations',\n ExtraFilter: filter,\n OrderBy: '__mj_UpdatedAt DESC',\n MaxRows: 100,\n ResultType: 'entity_object'\n },\n currentUser\n );\n\n if (!result.Success || !result.Results) {\n console.error('Failed to search conversations:', result.ErrorMessage);\n return [];\n }\n\n return result.Results.map(conv => this.mapConversationToSearchResult(conv, query));\n }\n\n /**\n * Search message content\n */\n private async searchMessages(\n query: string,\n environmentId: string,\n currentUser: UserInfo,\n dateRange: DateRange\n ): Promise<SearchResult[]> {\n const rv = RunView.FromMetadataProvider(this.Provider);\n const lowerQuery = query.toLowerCase();\n\n // First get conversations in this environment\n let filter = `ConversationID IN (SELECT ID FROM vwConversations WHERE EnvironmentID='${environmentId}' AND (IsArchived IS NULL OR IsArchived=0))`;\n filter += ` AND LOWER(Message) LIKE '%${EscapeSQLString(lowerQuery)}%'`;\n filter += ` AND (HiddenToUser IS NULL OR HiddenToUser=0)`;\n\n if (dateRange.start) {\n filter += ` AND __mj_CreatedAt >= '${dateRange.start.toISOString()}'`;\n }\n if (dateRange.end) {\n filter += ` AND __mj_CreatedAt <= '${dateRange.end.toISOString()}'`;\n }\n\n const result = await rv.RunView<MJConversationDetailEntity>(\n {\n EntityName: 'MJ: Conversation Details',\n ExtraFilter: filter,\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: 100,\n ResultType: 'entity_object'\n },\n currentUser\n );\n\n if (!result.Success || !result.Results) {\n console.error('Failed to search messages:', result.ErrorMessage);\n return [];\n }\n\n return result.Results.map(msg => this.mapMessageToSearchResult(msg, query));\n }\n\n /**\n * Search artifacts by name and description\n * Includes artifacts from both conversations and collections\n */\n private async searchArtifacts(\n query: string,\n environmentId: string,\n currentUser: UserInfo,\n dateRange: DateRange\n ): Promise<SearchResult[]> {\n const rv = RunView.FromMetadataProvider(this.Provider);\n const lowerQuery = query.toLowerCase();\n\n // Search artifacts directly by name and description\n let filter = `EnvironmentID='${environmentId}'`;\n filter += ` AND (LOWER(Name) LIKE '%${EscapeSQLString(lowerQuery)}%' OR LOWER(Description) LIKE '%${EscapeSQLString(lowerQuery)}%')`;\n\n if (dateRange.start) {\n filter += ` AND __mj_CreatedAt >= '${dateRange.start.toISOString()}'`;\n }\n if (dateRange.end) {\n filter += ` AND __mj_CreatedAt <= '${dateRange.end.toISOString()}'`;\n }\n\n const result = await rv.RunView<MJArtifactEntity>(\n {\n EntityName: 'MJ: Artifacts',\n ExtraFilter: `${filter} AND (Visibility IS NULL OR Visibility='Always')`,\n OrderBy: '__mj_UpdatedAt DESC',\n MaxRows: 100,\n ResultType: 'entity_object'\n },\n currentUser\n );\n\n if (!result.Success || !result.Results) {\n console.error('Failed to search artifacts:', result.ErrorMessage);\n return [];\n }\n\n const searchResults: SearchResult[] = [];\n\n // For each artifact, check if it's in a collection for context\n for (const artifact of result.Results) {\n // Check for collection associations\n const collResult = await rv.RunView<MJCollectionArtifactEntity>(\n {\n EntityName: 'MJ: Collection Artifacts',\n ExtraFilter: `ArtifactVersionID IN (\n SELECT ID FROM [__mj].[vwArtifactVersions] WHERE ArtifactID='${artifact.ID}'\n )`,\n MaxRows: 1,\n ResultType: 'entity_object'\n },\n currentUser\n );\n\n if (collResult.Success && collResult.Results && collResult.Results.length > 0) {\n const collArtifact = collResult.Results[0];\n searchResults.push(\n this.mapArtifactToSearchResult(\n artifact,\n query,\n collArtifact.CollectionID,\n collArtifact.Collection\n )\n );\n } else {\n // No collection association\n searchResults.push(this.mapArtifactToSearchResult(artifact, query));\n }\n }\n\n return searchResults;\n }\n\n /**\n * Search collections by name and description\n * Includes both owned collections and shared collections user has access to\n */\n private async searchCollections(\n query: string,\n environmentId: string,\n currentUser: UserInfo,\n dateRange: DateRange\n ): Promise<SearchResult[]> {\n const rv = RunView.FromMetadataProvider(this.Provider);\n const lowerQuery = query.toLowerCase();\n\n const ownerFilter = `OwnerID='${currentUser.ID}'`;\n const permissionSubquery = `ID IN (\n SELECT CollectionID\n FROM [__mj].[vwCollectionPermissions]\n WHERE UserID='${currentUser.ID}'\n )`;\n\n let filter = `EnvironmentID='${environmentId}'`;\n filter += ` AND (OwnerID IS NULL OR ${ownerFilter} OR ${permissionSubquery})`;\n filter += ` AND (LOWER(Name) LIKE '%${EscapeSQLString(lowerQuery)}%' OR LOWER(Description) LIKE '%${EscapeSQLString(lowerQuery)}%')`;\n\n if (dateRange.start) {\n filter += ` AND __mj_CreatedAt >= '${dateRange.start.toISOString()}'`;\n }\n if (dateRange.end) {\n filter += ` AND __mj_CreatedAt <= '${dateRange.end.toISOString()}'`;\n }\n\n const result = await rv.RunView<MJCollectionEntity>(\n {\n EntityName: 'MJ: Collections',\n ExtraFilter: filter,\n OrderBy: '__mj_UpdatedAt DESC',\n MaxRows: 100,\n ResultType: 'entity_object'\n },\n currentUser\n );\n\n if (!result.Success || !result.Results) {\n console.error('Failed to search collections:', result.ErrorMessage);\n return [];\n }\n\n return result.Results.map(coll => this.mapCollectionToSearchResult(coll, query));\n }\n\n /**\n * Search tasks by name, description, and notes\n * Only includes tasks in conversations user has access to\n */\n private async searchTasks(\n query: string,\n environmentId: string,\n currentUser: UserInfo,\n dateRange: DateRange\n ): Promise<SearchResult[]> {\n const rv = RunView.FromMetadataProvider(this.Provider);\n const lowerQuery = query.toLowerCase();\n\n // Build filter using same logic as TasksFullViewComponent\n const md = this.Provider;\n const cd = md.EntityByName('MJ: Conversation Details');\n const c = md.EntityByName('MJ: Conversations');\n\n if (!cd || !c) {\n console.warn('⚠️ Missing metadata for Conversations or Conversation Details');\n return [];\n }\n\n let filter = `ParentID IS NULL AND (UserID = '${currentUser.ID}' OR ConversationDetailID IN (\n SELECT ID FROM [${cd.SchemaName}].[${cd.BaseView}]\n WHERE\n UserID ='${currentUser.ID}' OR\n ConversationID IN (\n SELECT ID FROM [${c.SchemaName}].[${c.BaseView}] WHERE UserID='${currentUser.ID}'\n )\n ))`;\n\n filter += ` AND (LOWER(Name) LIKE '%${EscapeSQLString(lowerQuery)}%' OR LOWER(Description) LIKE '%${EscapeSQLString(lowerQuery)}%')`;\n\n if (dateRange.start) {\n filter += ` AND __mj_CreatedAt >= '${dateRange.start.toISOString()}'`;\n }\n if (dateRange.end) {\n filter += ` AND __mj_CreatedAt <= '${dateRange.end.toISOString()}'`;\n }\n\n const result = await rv.RunView<MJTaskEntity>(\n {\n EntityName: 'MJ: Tasks',\n ExtraFilter: filter,\n OrderBy: '__mj_UpdatedAt DESC',\n MaxRows: 100,\n ResultType: 'entity_object'\n },\n currentUser\n );\n\n if (!result.Success || !result.Results) {\n console.error('Failed to search tasks:', result.ErrorMessage);\n return [];\n }\n\n return result.Results.map(task => this.mapTaskToSearchResult(task, query));\n }\n\n /**\n * Map conversation entity to search result\n */\n private mapConversationToSearchResult(conversation: MJConversationEntity, query: string): SearchResult {\n const lowerQuery = query.toLowerCase();\n const name = conversation.Name || 'Untitled Conversation';\n const description = conversation.Description || '';\n\n // Calculate relevance score\n let score = 0;\n if (name.toLowerCase().includes(lowerQuery)) score += 10;\n if (description.toLowerCase().includes(lowerQuery)) score += 5;\n\n // Find matched text\n const matchedText = this.extractMatchContext(\n name.toLowerCase().includes(lowerQuery) ? name : description,\n query\n );\n\n return {\n id: conversation.ID,\n type: 'conversation',\n title: name,\n preview: description || 'No description',\n matchedText,\n conversationId: conversation.ID,\n conversationName: name,\n createdAt: conversation.__mj_CreatedAt,\n relevanceScore: score\n };\n }\n\n /**\n * Map message entity to search result\n */\n private mapMessageToSearchResult(message: MJConversationDetailEntity, query: string): SearchResult {\n const messageText = message.Message || '';\n const matchedText = this.extractMatchContext(messageText, query);\n\n return {\n id: message.ID,\n type: 'message',\n title: `Message in ${message.Conversation || 'Unknown Conversation'}`,\n preview: this.truncateText(messageText, 150),\n matchedText,\n conversationId: message.ConversationID,\n conversationName: message.Conversation || undefined,\n createdAt: message.__mj_CreatedAt,\n relevanceScore: 5\n };\n }\n\n /**\n * Map artifact entity to search result\n */\n private mapArtifactToSearchResult(\n artifact: MJArtifactEntity,\n query: string,\n collectionId?: string,\n collectionName?: string\n ): SearchResult {\n const name = artifact.Name || 'Untitled Artifact';\n const description = artifact.Description || '';\n const lowerQuery = query.toLowerCase();\n\n let score = 0;\n if (name.toLowerCase().includes(lowerQuery)) score += 10;\n if (description.toLowerCase().includes(lowerQuery)) score += 5;\n\n const matchedText = this.extractMatchContext(\n name.toLowerCase().includes(lowerQuery) ? name : description,\n query\n );\n\n return {\n id: artifact.ID,\n type: 'artifact',\n title: name,\n preview: description || 'No description',\n matchedText,\n collectionId,\n collectionName,\n artifactType: artifact.Type || undefined,\n createdAt: artifact.__mj_CreatedAt,\n relevanceScore: score\n };\n }\n\n /**\n * Map collection entity to search result\n */\n private mapCollectionToSearchResult(collection: MJCollectionEntity, query: string): SearchResult {\n const lowerQuery = query.toLowerCase();\n const name = collection.Name || 'Untitled Collection';\n const description = collection.Description || '';\n\n let score = 0;\n if (name.toLowerCase().includes(lowerQuery)) score += 10;\n if (description.toLowerCase().includes(lowerQuery)) score += 5;\n\n const matchedText = this.extractMatchContext(\n name.toLowerCase().includes(lowerQuery) ? name : description,\n query\n );\n\n return {\n id: collection.ID,\n type: 'collection',\n title: name,\n preview: description || 'No description',\n matchedText,\n collectionId: collection.ID,\n collectionName: name,\n createdAt: collection.__mj_CreatedAt,\n relevanceScore: score\n };\n }\n\n /**\n * Map task entity to search result\n */\n private mapTaskToSearchResult(task: MJTaskEntity, query: string): SearchResult {\n const lowerQuery = query.toLowerCase();\n const name = task.Name || 'Untitled Task';\n const description = task.Description || '';\n\n let score = 0;\n if (name.toLowerCase().includes(lowerQuery)) score += 10;\n if (description.toLowerCase().includes(lowerQuery)) score += 5;\n\n const matchedText = this.extractMatchContext(\n name.toLowerCase().includes(lowerQuery) ? name : description,\n query\n );\n\n return {\n id: task.ID,\n type: 'task',\n title: name,\n preview: description || 'No description',\n matchedText,\n createdAt: task.__mj_CreatedAt,\n relevanceScore: score\n };\n }\n\n /**\n * Extract context around matched text\n */\n private extractMatchContext(text: string, query: string, contextLength: number = 100): string {\n const lowerText = text.toLowerCase();\n const lowerQuery = query.toLowerCase();\n const index = lowerText.indexOf(lowerQuery);\n\n if (index === -1) return this.truncateText(text, contextLength);\n\n const start = Math.max(0, index - contextLength / 2);\n const end = Math.min(text.length, index + query.length + contextLength / 2);\n\n let context = text.substring(start, end);\n if (start > 0) context = '...' + context;\n if (end < text.length) context = context + '...';\n\n return context;\n }\n\n /**\n * Truncate text to specified length\n */\n private truncateText(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return text.substring(0, maxLength) + '...';\n }\n\n /**\n * Set search filter\n */\n public setSearchFilter(filter: SearchFilter): void {\n this._searchFilter$.next(filter);\n }\n\n /**\n * Set date range filter\n */\n public setDateRange(range: DateRange): void {\n this._dateRange$.next(range);\n }\n\n /**\n * Clear all filters\n */\n public clearFilters(): void {\n this._searchFilter$.next('all');\n this._dateRange$.next({ start: null, end: null });\n }\n\n /**\n * Clear search results\n */\n public clearResults(): void {\n this._searchResults$.next({\n conversations: [],\n messages: [],\n artifacts: [],\n collections: [],\n tasks: [],\n total: 0\n });\n }\n\n /**\n * Get recent searches\n */\n public getRecentSearches(): string[] {\n return [...this.recentSearches];\n }\n\n /**\n * Add to recent searches\n */\n private addToRecentSearches(query: string): void {\n const trimmed = query.trim();\n if (!trimmed) return;\n\n // Remove if already exists\n this.recentSearches = this.recentSearches.filter(q => q !== trimmed);\n\n // Add to front\n this.recentSearches.unshift(trimmed);\n\n // Keep only MAX_RECENT_SEARCHES\n if (this.recentSearches.length > this.MAX_RECENT_SEARCHES) {\n this.recentSearches = this.recentSearches.slice(0, this.MAX_RECENT_SEARCHES);\n }\n\n this.saveRecentSearches();\n }\n\n /**\n * Clear recent searches\n */\n public clearRecentSearches(): void {\n this.recentSearches = [];\n this.saveRecentSearches();\n }\n\n /**\n * Load recent searches from localStorage\n */\n private loadRecentSearches(): void {\n try {\n const stored = localStorage.getItem('mj-recent-searches');\n if (stored) {\n this.recentSearches = JSON.parse(stored);\n }\n } catch (error) {\n console.error('Failed to load recent searches:', error);\n this.recentSearches = [];\n }\n }\n\n /**\n * Save recent searches to localStorage\n */\n private saveRecentSearches(): void {\n try {\n localStorage.setItem('mj-recent-searches', JSON.stringify(this.recentSearches));\n } catch (error) {\n console.error('Failed to save recent searches:', error);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"search.service.js","sourceRoot":"","sources":["../../../src/lib/services/search.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAc,OAAO,EAAM,MAAM,MAAM,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAkB,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAQL,kBAAkB,EACnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,OAAO,EAAY,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;;;AAmDzD;;;GAGG;AACH;;;;;;;;;GASG;AAIH,MAAM,OAAO,aAAa;IAoDJ;IAnDZ,aAAa,GAAG,IAAI,OAAO,EAAU,CAAC;IACtC,cAAc,GAAG,IAAI,eAAe,CAAe,KAAK,CAAC,CAAC;IAC1D,WAAW,GAAG,IAAI,eAAe,CAAY,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,aAAa,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;IACpD,eAAe,GAAG,IAAI,eAAe,CAAuB;QAClE,aAAa,EAAE,EAAE;QACjB,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE;QACb,WAAW,EAAE,EAAE;QACf,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,CAAC;KACT,CAAC,CAAC;IAEH,wEAAwE;IAChE,cAAc,GAAa,EAAE,CAAC;IACrB,mBAAmB,GAAG,EAAE,CAAC;IAE1C,qBAAqB;IACL,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;IAEjE,4CAA4C;IAC5C,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IACe,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;IAEnE,6CAA6C;IAC7C,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IACe,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;IAE7D,0CAA0C;IAC1C,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACe,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;IAEjE,4CAA4C;IAC5C,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IACe,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;IAErE,8CAA8C;IAC9C,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEO,SAAS,GAA6B,IAAI,CAAC;IAEnD,YAAoB,mBAA8C;QAA9C,wBAAmB,GAAnB,mBAAmB,CAA2B;QAChE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,IAAW,QAAQ,CAAC,KAA+B;QAC/C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,mBAAmB,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC9C,CAAC;IACL,CAAC;IAED,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC;IAC/C,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,CACvB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAClB,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,MAAM,CACjB,KAAa,EACb,aAAqB,EACrB,WAAqB;QAErB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,YAAY,GAAyB;gBACzC,aAAa,EAAE,EAAE;gBACjB,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,EAAE;gBACb,WAAW,EAAE,EAAE;gBACf,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,CAAC;aACT,CAAC;YACF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACxC,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;YACzC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAEzC,gCAAgC;YAChC,MAAM,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACjF,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,eAAe;oBAC5C,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC;oBACxE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvB,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,UAAU;oBACvC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC;oBACnE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvB,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,WAAW;oBACxC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC;oBACpE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvB,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,aAAa;oBAC1C,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC;oBACtE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvB,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,OAAO;oBACpC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC;oBAChE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;aACxB,CAAC,CAAC;YAEH,MAAM,OAAO,GAAyB;gBACpC,aAAa;gBACb,QAAQ;gBACR,SAAS;gBACT,WAAW;gBACX,KAAK;gBACL,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;aACrG,CAAC;YAEF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,OAAO,CAAC;QACjB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,sCAAsC;IAC/B,KAAK,CAAC,MAAM,CACjB,KAAa,EACb,aAAqB,EACrB,WAAqB;QAErB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IACxD,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,mBAAmB,CAC/B,KAAa,EACb,aAAqB,EACrB,WAAqB,EACrB,SAAoB;QAEpB,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEvC,IAAI,MAAM,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,6BAA6B,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QACzG,MAAM,IAAI,4BAA4B,eAAe,CAAC,UAAU,CAAC,mCAAmC,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC;QAErI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,IAAI,2BAA2B,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC;QACxE,CAAC;QACD,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC;YAClB,MAAM,IAAI,2BAA2B,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC;QACtE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAC7B;YACE,UAAU,EAAE,mBAAmB;YAC/B,WAAW,EAAE,MAAM;YACnB,OAAO,EAAE,qBAAqB;YAC9B,OAAO,EAAE,GAAG;YACZ,UAAU,EAAE,eAAe;SAC5B,EACD,WAAW,CACZ,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YACtE,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACrF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAC1B,KAAa,EACb,aAAqB,EACrB,WAAqB,EACrB,SAAoB;QAEpB,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QACzF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEvC,oFAAoF;QACpF,2CAA2C;QAC3C,IAAI,MAAM,GAAG,sBAAsB,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACrF,MAAM,IAAI,8BAA8B,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC;QACxE,MAAM,IAAI,+CAA+C,CAAC;QAE1D,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,IAAI,2BAA2B,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC;QACxE,CAAC;QACD,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC;YAClB,MAAM,IAAI,2BAA2B,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC;QACtE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAC7B;YACE,UAAU,EAAE,0BAA0B;YACtC,WAAW,EAAE,MAAM;YACnB,OAAO,EAAE,qBAAqB;YAC9B,OAAO,EAAE,GAAG;YACZ,UAAU,EAAE,eAAe;SAC5B,EACD,WAAW,CACZ,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YACjE,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,yBAAyB,CAAC,aAAqB,EAAE,WAAqB;QAClF,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAC7B;YACE,UAAU,EAAE,mBAAmB;YAC/B,WAAW,EAAE,MAAM,kBAAkB,CAAC,QAAQ,CAAC,6BAA6B,CAAC,aAAa,EAAE,WAAW,CAAC;YACxG,MAAM,EAAE,CAAC,IAAI,CAAC;YACd,UAAU,EAAE,QAAQ;SACrB,EACD,WAAW,CACZ,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC1F,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,eAAe,CAC3B,KAAa,EACb,aAAqB,EACrB,WAAqB,EACrB,SAAoB;QAEpB,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEvC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAC9G,IAAI,MAAM,GAAG,kBAAkB,aAAa,SAAS,cAAc,EAAE,CAAC;QACtE,MAAM,IAAI,4BAA4B,eAAe,CAAC,UAAU,CAAC,mCAAmC,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC;QAErI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,IAAI,2BAA2B,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC;QACxE,CAAC;QACD,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC;YAClB,MAAM,IAAI,2BAA2B,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC;QACtE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAC7B;YACE,UAAU,EAAE,eAAe;YAC3B,WAAW,EAAE,GAAG,MAAM,kDAAkD;YACxE,OAAO,EAAE,qBAAqB;YAC9B,OAAO,EAAE,GAAG;YACZ,UAAU,EAAE,eAAe;SAC5B,EACD,WAAW,CACZ,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAClE,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,aAAa,GAAmB,EAAE,CAAC;QAEzC,+DAA+D;QAC/D,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACtC,oCAAoC;YACpC,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,OAAO,CACjC;gBACE,UAAU,EAAE,0BAA0B;gBACtC,WAAW,EAAE;2EACoD,QAAQ,CAAC,EAAE;YAC1E;gBACF,OAAO,EAAE,CAAC;gBACV,UAAU,EAAE,eAAe;aAC5B,EACD,WAAW,CACZ,CAAC;YAEF,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9E,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC3C,aAAa,CAAC,IAAI,CAChB,IAAI,CAAC,yBAAyB,CAC5B,QAAQ,EACR,KAAK,EACL,YAAY,CAAC,YAAY,EACzB,YAAY,CAAC,UAAU,CACxB,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,4BAA4B;gBAC5B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,iBAAiB,CAC7B,KAAa,EACb,aAAqB,EACrB,WAAqB,EACrB,SAAoB;QAEpB,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEvC,MAAM,WAAW,GAAG,YAAY,WAAW,CAAC,EAAE,GAAG,CAAC;QAClD,MAAM,kBAAkB,GAAG;;;sBAGT,WAAW,CAAC,EAAE;MAC9B,CAAC;QAEH,IAAI,MAAM,GAAG,kBAAkB,aAAa,GAAG,CAAC;QAChD,MAAM,IAAI,4BAA4B,WAAW,OAAO,kBAAkB,GAAG,CAAC;QAC9E,MAAM,IAAI,4BAA4B,eAAe,CAAC,UAAU,CAAC,mCAAmC,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC;QAErI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,IAAI,2BAA2B,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC;QACxE,CAAC;QACD,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC;YAClB,MAAM,IAAI,2BAA2B,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC;QACtE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAC7B;YACE,UAAU,EAAE,iBAAiB;YAC7B,WAAW,EAAE,MAAM;YACnB,OAAO,EAAE,qBAAqB;YAC9B,OAAO,EAAE,GAAG;YACZ,UAAU,EAAE,eAAe;SAC5B,EACD,WAAW,CACZ,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YACpE,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACnF,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,WAAW,CACvB,KAAa,EACb,aAAqB,EACrB,WAAqB,EACrB,SAAoB;QAEpB,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEvC,0DAA0D;QAC1D,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QACzB,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;QACvD,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;QAE/C,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;YAC9E,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,MAAM,GAAG,mCAAmC,WAAW,CAAC,EAAE;wBAC1C,EAAE,CAAC,UAAU,MAAM,EAAE,CAAC,QAAQ;;iBAErC,WAAW,CAAC,EAAE;;0BAEL,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,QAAQ,mBAAmB,WAAW,CAAC,EAAE;;OAEhF,CAAC;QAEJ,MAAM,IAAI,4BAA4B,eAAe,CAAC,UAAU,CAAC,mCAAmC,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC;QAErI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,IAAI,2BAA2B,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC;QACxE,CAAC;QACD,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC;YAClB,MAAM,IAAI,2BAA2B,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC;QACtE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAC7B;YACE,UAAU,EAAE,WAAW;YACvB,WAAW,EAAE,MAAM;YACnB,OAAO,EAAE,qBAAqB;YAC9B,OAAO,EAAE,GAAG;YACZ,UAAU,EAAE,eAAe;SAC5B,EACD,WAAW,CACZ,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9D,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED;;OAEG;IACK,6BAA6B,CAAC,YAAkC,EAAE,KAAa;QACrF,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,uBAAuB,CAAC;QAC1D,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,IAAI,EAAE,CAAC;QAEnD,4BAA4B;QAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,KAAK,IAAI,EAAE,CAAC;QACzD,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;QAE/D,oBAAoB;QACpB,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAC1C,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAC5D,KAAK,CACN,CAAC;QAEF,OAAO;YACL,EAAE,EAAE,YAAY,CAAC,EAAE;YACnB,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,WAAW,IAAI,gBAAgB;YACxC,WAAW;YACX,cAAc,EAAE,YAAY,CAAC,EAAE;YAC/B,gBAAgB,EAAE,IAAI;YACtB,SAAS,EAAE,YAAY,CAAC,cAAc;YACtC,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,wBAAwB,CAAC,OAAmC,EAAE,KAAa;QACjF,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAEjE,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,cAAc,OAAO,CAAC,YAAY,IAAI,sBAAsB,EAAE;YACrE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC;YAC5C,WAAW;YACX,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,gBAAgB,EAAE,OAAO,CAAC,YAAY,IAAI,SAAS;YACnD,SAAS,EAAE,OAAO,CAAC,cAAc;YACjC,cAAc,EAAE,CAAC;SAClB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,yBAAyB,CAC/B,QAA0B,EAC1B,KAAa,EACb,YAAqB,EACrB,cAAuB;QAEvB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,mBAAmB,CAAC;QAClD,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;QAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEvC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,KAAK,IAAI,EAAE,CAAC;QACzD,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;QAE/D,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAC1C,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAC5D,KAAK,CACN,CAAC;QAEF,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,WAAW,IAAI,gBAAgB;YACxC,WAAW;YACX,YAAY;YACZ,cAAc;YACd,YAAY,EAAE,QAAQ,CAAC,IAAI,IAAI,SAAS;YACxC,SAAS,EAAE,QAAQ,CAAC,cAAc;YAClC,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,2BAA2B,CAAC,UAA8B,EAAE,KAAa;QAC/E,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,qBAAqB,CAAC;QACtD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,IAAI,EAAE,CAAC;QAEjD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,KAAK,IAAI,EAAE,CAAC;QACzD,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;QAE/D,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAC1C,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAC5D,KAAK,CACN,CAAC;QAEF,OAAO;YACL,EAAE,EAAE,UAAU,CAAC,EAAE;YACjB,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,WAAW,IAAI,gBAAgB;YACxC,WAAW;YACX,YAAY,EAAE,UAAU,CAAC,EAAE;YAC3B,cAAc,EAAE,IAAI;YACpB,SAAS,EAAE,UAAU,CAAC,cAAc;YACpC,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,IAAkB,EAAE,KAAa;QAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,eAAe,CAAC;QAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;QAE3C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,KAAK,IAAI,EAAE,CAAC;QACzD,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;QAE/D,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAC1C,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAC5D,KAAK,CACN,CAAC;QAEF,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,WAAW,IAAI,gBAAgB;YACxC,WAAW;YACX,SAAS,EAAE,IAAI,CAAC,cAAc;YAC9B,cAAc,EAAE,KAAK;SACtB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,IAAY,EAAE,KAAa,EAAE,gBAAwB,GAAG;QAClF,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE5C,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAEhE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC;QAE5E,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACzC,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC;QACzC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM;YAAE,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;QAEjD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,IAAY,EAAE,SAAiB;QAClD,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS;YAAE,OAAO,IAAI,CAAC;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC;IAC9C,CAAC;IAED;;OAEG;IACI,eAAe,CAAC,MAAoB;QACzC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,+CAA+C;IACxC,eAAe,CAAC,MAAoB;QACzC,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACI,YAAY,CAAC,KAAgB;QAClC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,4CAA4C;IACrC,YAAY,CAAC,KAAgB;QAClC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACI,YAAY;QACjB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,4CAA4C;IACrC,YAAY;QACjB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,YAAY;QACjB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YACxB,aAAa,EAAE,EAAE;YACjB,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,EAAE;YACb,WAAW,EAAE,EAAE;YACf,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;IACL,CAAC;IAED,4CAA4C;IACrC,YAAY;QACjB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,iBAAiB;QACtB,OAAO,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;IAED,iDAAiD;IAC1C,iBAAiB;QACtB,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,KAAa;QACvC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,2BAA2B;QAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;QAErE,eAAe;QACf,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAErC,gCAAgC;QAChC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC1D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC/E,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACI,mBAAmB;QACxB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,mDAAmD;IAC5C,mBAAmB;QACxB,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAC1D,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;YACxD,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,IAAI,CAAC;YACH,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAClF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;uGAtvBU,aAAa;gEAAb,aAAa,WAAb,aAAa,mBAFZ,MAAM;;iFAEP,aAAa;cAHzB,UAAU;eAAC;gBACV,UAAU,EAAE,MAAM;aACnB","sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject, of } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, switchMap, map } from 'rxjs/operators';\nimport {\n MJConversationEntity,\n MJConversationDetailEntity,\n MJConversationArtifactEntity,\n MJCollectionEntity,\n MJCollectionArtifactEntity,\n MJTaskEntity,\n MJArtifactEntity,\n ConversationEngine\n} from '@memberjunction/core-entities';\nimport { RunView, UserInfo, Metadata, IMetadataProvider } from '@memberjunction/core';\nimport { EscapeSQLString } from '@memberjunction/global';\nimport { ArtifactPermissionService } from './artifact-permission.service';\n\n/**\n * Types of searchable content\n */\nexport type SearchResultType = 'conversation' | 'message' | 'artifact' | 'collection' | 'task';\n\n/**\n * Filter options for search\n */\nexport type SearchFilter = 'all' | 'conversations' | 'messages' | 'artifacts' | 'collections' | 'tasks';\n\n/**\n * Unified search result\n */\nexport interface SearchResult {\n id: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n type: SearchResultType; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n title: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n preview: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n matchedText?: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n conversationId?: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n conversationName?: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n artifactType?: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n collectionId?: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n collectionName?: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n createdAt: Date; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n relevanceScore: number; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n}\n\n/**\n * Search results grouped by type\n */\nexport interface GroupedSearchResults {\n conversations: SearchResult[]; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n messages: SearchResult[]; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n artifacts: SearchResult[]; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n collections: SearchResult[]; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n tasks: SearchResult[]; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n total: number; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n}\n\n/**\n * Date range filter\n */\nexport interface DateRange {\n start: Date | null; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n end: Date | null; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n}\n\n/**\n * Service for searching across conversations, messages, and artifacts\n * Provides debounced search with result ranking and filtering\n */\n/**\n * NOTE ON `LIKE` ESCAPING\n *\n * The predicates below interpolate the user's query into `LIKE '%…%'` via `EscapeSQLString`, which\n * neutralises quotes but NOT LIKE metacharacters — `%`, `_` and `[` in a search term are still\n * treated as wildcards rather than literal text. That is this service's long-standing search\n * behaviour, so it is left as-is deliberately; changing it would change what users' searches match.\n * If literal matching is wanted, escape the metacharacters and append `ESCAPE '\\\\'` (see\n * `escapeLikeValue()` in `@memberjunction/core`, `generic/runQuerySQLFilterImplementations.ts`).\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SearchService {\n private _searchQuery$ = new Subject<string>();\n private _searchFilter$ = new BehaviorSubject<SearchFilter>('all');\n private _dateRange$ = new BehaviorSubject<DateRange>({ start: null, end: null });\n private _isSearching$ = new BehaviorSubject<boolean>(false);\n private _searchResults$ = new BehaviorSubject<GroupedSearchResults>({\n conversations: [],\n messages: [],\n artifacts: [],\n collections: [],\n tasks: [],\n total: 0\n });\n\n // Recent searches stored in memory (could be persisted to localStorage)\n private recentSearches: string[] = [];\n private readonly MAX_RECENT_SEARCHES = 10;\n\n // Public observables\n public readonly SearchQuery$ = this._searchQuery$.asObservable();\n\n /** @deprecated Use {@link SearchQuery$}. */\n public get searchQuery$() {\n return this.SearchQuery$;\n }\n public readonly SearchFilter$ = this._searchFilter$.asObservable();\n\n /** @deprecated Use {@link SearchFilter$}. */\n public get searchFilter$() {\n return this.SearchFilter$;\n }\n public readonly DateRange$ = this._dateRange$.asObservable();\n\n /** @deprecated Use {@link DateRange$}. */\n public get dateRange$() {\n return this.DateRange$;\n }\n public readonly IsSearching$ = this._isSearching$.asObservable();\n\n /** @deprecated Use {@link IsSearching$}. */\n public get isSearching$() {\n return this.IsSearching$;\n }\n public readonly SearchResults$ = this._searchResults$.asObservable();\n\n /** @deprecated Use {@link SearchResults$}. */\n public get searchResults$() {\n return this.SearchResults$;\n }\n\n private _provider: IMetadataProvider | null = null;\n\n constructor(private artifactPermissions: ArtifactPermissionService) {\n this.initializeSearch();\n this.loadRecentSearches();\n }\n\n /**\n * Set the metadata provider this service should use. When unset, falls back to Metadata.Provider.\n * Setting it also propagates to the artifact-permission service this depends on.\n */\n public set Provider(value: IMetadataProvider | null) {\n this._provider = value;\n if (value !== null) {\n this.artifactPermissions.Provider = value;\n }\n }\n\n public get Provider(): IMetadataProvider {\n return this._provider ?? Metadata.Provider;\n }\n\n /**\n * Initialize debounced search\n */\n private initializeSearch(): void {\n this._searchQuery$.pipe(\n debounceTime(300),\n distinctUntilChanged()\n ).subscribe(query => {\n if (query && query.trim().length > 0) {\n this.addToRecentSearches(query);\n }\n });\n }\n\n /**\n * Search across all content types\n */\n public async Search(\n query: string,\n environmentId: string,\n currentUser: UserInfo\n ): Promise<GroupedSearchResults> {\n if (!query || query.trim().length === 0) {\n const emptyResults: GroupedSearchResults = {\n conversations: [],\n messages: [],\n artifacts: [],\n collections: [],\n tasks: [],\n total: 0\n };\n this._searchResults$.next(emptyResults);\n return emptyResults;\n }\n\n this._isSearching$.next(true);\n this._searchQuery$.next(query);\n\n try {\n const filter = this._searchFilter$.value;\n const dateRange = this._dateRange$.value;\n\n // Search based on active filter\n const [conversations, messages, artifacts, collections, tasks] = await Promise.all([\n filter === 'all' || filter === 'conversations'\n ? this.searchConversations(query, environmentId, currentUser, dateRange)\n : Promise.resolve([]),\n filter === 'all' || filter === 'messages'\n ? this.searchMessages(query, environmentId, currentUser, dateRange)\n : Promise.resolve([]),\n filter === 'all' || filter === 'artifacts'\n ? this.searchArtifacts(query, environmentId, currentUser, dateRange)\n : Promise.resolve([]),\n filter === 'all' || filter === 'collections'\n ? this.searchCollections(query, environmentId, currentUser, dateRange)\n : Promise.resolve([]),\n filter === 'all' || filter === 'tasks'\n ? this.searchTasks(query, environmentId, currentUser, dateRange)\n : Promise.resolve([])\n ]);\n\n const results: GroupedSearchResults = {\n conversations,\n messages,\n artifacts,\n collections,\n tasks,\n total: conversations.length + messages.length + artifacts.length + collections.length + tasks.length\n };\n\n this._searchResults$.next(results);\n return results;\n } finally {\n this._isSearching$.next(false);\n }\n }\n\n /** @deprecated Use {@link Search}. */\n public async search(\n query: string,\n environmentId: string,\n currentUser: UserInfo\n ): Promise<GroupedSearchResults> {\n return this.Search(query, environmentId, currentUser);\n }\n\n /**\n * Search conversations by name and description, limited to the conversations the\n * conversation list shows the user\n */\n private async searchConversations(\n query: string,\n environmentId: string,\n currentUser: UserInfo,\n dateRange: DateRange\n ): Promise<SearchResult[]> {\n const rv = RunView.FromMetadataProvider(this.Provider);\n const lowerQuery = query.toLowerCase();\n\n let filter = await ConversationEngine.Instance.GetVisibleConversationsFilter(environmentId, currentUser);\n filter += ` AND (LOWER(Name) LIKE '%${EscapeSQLString(lowerQuery)}%' OR LOWER(Description) LIKE '%${EscapeSQLString(lowerQuery)}%')`;\n\n if (dateRange.start) {\n filter += ` AND __mj_CreatedAt >= '${dateRange.start.toISOString()}'`;\n }\n if (dateRange.end) {\n filter += ` AND __mj_CreatedAt <= '${dateRange.end.toISOString()}'`;\n }\n\n const result = await rv.RunView<MJConversationEntity>(\n {\n EntityName: 'MJ: Conversations',\n ExtraFilter: filter,\n OrderBy: '__mj_UpdatedAt DESC',\n MaxRows: 100,\n ResultType: 'entity_object'\n },\n currentUser\n );\n\n if (!result.Success || !result.Results) {\n console.error('Failed to search conversations:', result.ErrorMessage);\n return [];\n }\n\n return result.Results.map(conv => this.mapConversationToSearchResult(conv, query));\n }\n\n /**\n * Search message content inside the conversations the conversation list shows the user\n */\n private async searchMessages(\n query: string,\n environmentId: string,\n currentUser: UserInfo,\n dateRange: DateRange\n ): Promise<SearchResult[]> {\n const conversationIds = await this.getVisibleConversationIds(environmentId, currentUser);\n if (conversationIds.length === 0) {\n return [];\n }\n\n const rv = RunView.FromMetadataProvider(this.Provider);\n const lowerQuery = query.toLowerCase();\n\n // The IDs come from a separate query so this filter names only Conversation Details\n // columns, which every provider can quote.\n let filter = `ConversationID IN (${conversationIds.map(id => `'${id}'`).join(',')})`;\n filter += ` AND LOWER(Message) LIKE '%${EscapeSQLString(lowerQuery)}%'`;\n filter += ` AND (HiddenToUser IS NULL OR HiddenToUser=0)`;\n\n if (dateRange.start) {\n filter += ` AND __mj_CreatedAt >= '${dateRange.start.toISOString()}'`;\n }\n if (dateRange.end) {\n filter += ` AND __mj_CreatedAt <= '${dateRange.end.toISOString()}'`;\n }\n\n const result = await rv.RunView<MJConversationDetailEntity>(\n {\n EntityName: 'MJ: Conversation Details',\n ExtraFilter: filter,\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: 100,\n ResultType: 'entity_object'\n },\n currentUser\n );\n\n if (!result.Success || !result.Results) {\n console.error('Failed to search messages:', result.ErrorMessage);\n return [];\n }\n\n return result.Results.map(msg => this.mapMessageToSearchResult(msg, query));\n }\n\n /**\n * IDs of every conversation the conversation list shows the user. Not capped, so older\n * conversations stay searchable.\n */\n private async getVisibleConversationIds(environmentId: string, currentUser: UserInfo): Promise<string[]> {\n const rv = RunView.FromMetadataProvider(this.Provider);\n const result = await rv.RunView<Pick<MJConversationEntity, 'ID'>>(\n {\n EntityName: 'MJ: Conversations',\n ExtraFilter: await ConversationEngine.Instance.GetVisibleConversationsFilter(environmentId, currentUser),\n Fields: ['ID'],\n ResultType: 'simple'\n },\n currentUser\n );\n\n if (!result.Success || !result.Results) {\n console.error('Failed to load conversations to search messages in:', result.ErrorMessage);\n return [];\n }\n return result.Results.map(c => c.ID);\n }\n\n /**\n * Search artifacts by name and description, limited to the artifacts the user can read\n * Includes artifacts from both conversations and collections\n */\n private async searchArtifacts(\n query: string,\n environmentId: string,\n currentUser: UserInfo,\n dateRange: DateRange\n ): Promise<SearchResult[]> {\n const rv = RunView.FromMetadataProvider(this.Provider);\n const lowerQuery = query.toLowerCase();\n\n const readableFilter = await this.artifactPermissions.GetReadableArtifactsFilter(currentUser.ID, currentUser);\n let filter = `EnvironmentID='${environmentId}' AND ${readableFilter}`;\n filter += ` AND (LOWER(Name) LIKE '%${EscapeSQLString(lowerQuery)}%' OR LOWER(Description) LIKE '%${EscapeSQLString(lowerQuery)}%')`;\n\n if (dateRange.start) {\n filter += ` AND __mj_CreatedAt >= '${dateRange.start.toISOString()}'`;\n }\n if (dateRange.end) {\n filter += ` AND __mj_CreatedAt <= '${dateRange.end.toISOString()}'`;\n }\n\n const result = await rv.RunView<MJArtifactEntity>(\n {\n EntityName: 'MJ: Artifacts',\n ExtraFilter: `${filter} AND (Visibility IS NULL OR Visibility='Always')`,\n OrderBy: '__mj_UpdatedAt DESC',\n MaxRows: 100,\n ResultType: 'entity_object'\n },\n currentUser\n );\n\n if (!result.Success || !result.Results) {\n console.error('Failed to search artifacts:', result.ErrorMessage);\n return [];\n }\n\n const searchResults: SearchResult[] = [];\n\n // For each artifact, check if it's in a collection for context\n for (const artifact of result.Results) {\n // Check for collection associations\n const collResult = await rv.RunView<MJCollectionArtifactEntity>(\n {\n EntityName: 'MJ: Collection Artifacts',\n ExtraFilter: `ArtifactVersionID IN (\n SELECT ID FROM [__mj].[vwArtifactVersions] WHERE ArtifactID='${artifact.ID}'\n )`,\n MaxRows: 1,\n ResultType: 'entity_object'\n },\n currentUser\n );\n\n if (collResult.Success && collResult.Results && collResult.Results.length > 0) {\n const collArtifact = collResult.Results[0];\n searchResults.push(\n this.mapArtifactToSearchResult(\n artifact,\n query,\n collArtifact.CollectionID,\n collArtifact.Collection\n )\n );\n } else {\n // No collection association\n searchResults.push(this.mapArtifactToSearchResult(artifact, query));\n }\n }\n\n return searchResults;\n }\n\n /**\n * Search collections by name and description\n * Includes both owned collections and shared collections user has access to\n */\n private async searchCollections(\n query: string,\n environmentId: string,\n currentUser: UserInfo,\n dateRange: DateRange\n ): Promise<SearchResult[]> {\n const rv = RunView.FromMetadataProvider(this.Provider);\n const lowerQuery = query.toLowerCase();\n\n const ownerFilter = `OwnerID='${currentUser.ID}'`;\n const permissionSubquery = `ID IN (\n SELECT CollectionID\n FROM [__mj].[vwCollectionPermissions]\n WHERE UserID='${currentUser.ID}'\n )`;\n\n let filter = `EnvironmentID='${environmentId}'`;\n filter += ` AND (OwnerID IS NULL OR ${ownerFilter} OR ${permissionSubquery})`;\n filter += ` AND (LOWER(Name) LIKE '%${EscapeSQLString(lowerQuery)}%' OR LOWER(Description) LIKE '%${EscapeSQLString(lowerQuery)}%')`;\n\n if (dateRange.start) {\n filter += ` AND __mj_CreatedAt >= '${dateRange.start.toISOString()}'`;\n }\n if (dateRange.end) {\n filter += ` AND __mj_CreatedAt <= '${dateRange.end.toISOString()}'`;\n }\n\n const result = await rv.RunView<MJCollectionEntity>(\n {\n EntityName: 'MJ: Collections',\n ExtraFilter: filter,\n OrderBy: '__mj_UpdatedAt DESC',\n MaxRows: 100,\n ResultType: 'entity_object'\n },\n currentUser\n );\n\n if (!result.Success || !result.Results) {\n console.error('Failed to search collections:', result.ErrorMessage);\n return [];\n }\n\n return result.Results.map(coll => this.mapCollectionToSearchResult(coll, query));\n }\n\n /**\n * Search tasks by name, description, and notes\n * Only includes tasks in conversations user has access to\n */\n private async searchTasks(\n query: string,\n environmentId: string,\n currentUser: UserInfo,\n dateRange: DateRange\n ): Promise<SearchResult[]> {\n const rv = RunView.FromMetadataProvider(this.Provider);\n const lowerQuery = query.toLowerCase();\n\n // Build filter using same logic as TasksFullViewComponent\n const md = this.Provider;\n const cd = md.EntityByName('MJ: Conversation Details');\n const c = md.EntityByName('MJ: Conversations');\n\n if (!cd || !c) {\n console.warn('⚠️ Missing metadata for Conversations or Conversation Details');\n return [];\n }\n\n let filter = `ParentID IS NULL AND (UserID = '${currentUser.ID}' OR ConversationDetailID IN (\n SELECT ID FROM [${cd.SchemaName}].[${cd.BaseView}]\n WHERE\n UserID ='${currentUser.ID}' OR\n ConversationID IN (\n SELECT ID FROM [${c.SchemaName}].[${c.BaseView}] WHERE UserID='${currentUser.ID}'\n )\n ))`;\n\n filter += ` AND (LOWER(Name) LIKE '%${EscapeSQLString(lowerQuery)}%' OR LOWER(Description) LIKE '%${EscapeSQLString(lowerQuery)}%')`;\n\n if (dateRange.start) {\n filter += ` AND __mj_CreatedAt >= '${dateRange.start.toISOString()}'`;\n }\n if (dateRange.end) {\n filter += ` AND __mj_CreatedAt <= '${dateRange.end.toISOString()}'`;\n }\n\n const result = await rv.RunView<MJTaskEntity>(\n {\n EntityName: 'MJ: Tasks',\n ExtraFilter: filter,\n OrderBy: '__mj_UpdatedAt DESC',\n MaxRows: 100,\n ResultType: 'entity_object'\n },\n currentUser\n );\n\n if (!result.Success || !result.Results) {\n console.error('Failed to search tasks:', result.ErrorMessage);\n return [];\n }\n\n return result.Results.map(task => this.mapTaskToSearchResult(task, query));\n }\n\n /**\n * Map conversation entity to search result\n */\n private mapConversationToSearchResult(conversation: MJConversationEntity, query: string): SearchResult {\n const lowerQuery = query.toLowerCase();\n const name = conversation.Name || 'Untitled Conversation';\n const description = conversation.Description || '';\n\n // Calculate relevance score\n let score = 0;\n if (name.toLowerCase().includes(lowerQuery)) score += 10;\n if (description.toLowerCase().includes(lowerQuery)) score += 5;\n\n // Find matched text\n const matchedText = this.extractMatchContext(\n name.toLowerCase().includes(lowerQuery) ? name : description,\n query\n );\n\n return {\n id: conversation.ID,\n type: 'conversation',\n title: name,\n preview: description || 'No description',\n matchedText,\n conversationId: conversation.ID,\n conversationName: name,\n createdAt: conversation.__mj_CreatedAt,\n relevanceScore: score\n };\n }\n\n /**\n * Map message entity to search result\n */\n private mapMessageToSearchResult(message: MJConversationDetailEntity, query: string): SearchResult {\n const messageText = message.Message || '';\n const matchedText = this.extractMatchContext(messageText, query);\n\n return {\n id: message.ID,\n type: 'message',\n title: `Message in ${message.Conversation || 'Unknown Conversation'}`,\n preview: this.truncateText(messageText, 150),\n matchedText,\n conversationId: message.ConversationID,\n conversationName: message.Conversation || undefined,\n createdAt: message.__mj_CreatedAt,\n relevanceScore: 5\n };\n }\n\n /**\n * Map artifact entity to search result\n */\n private mapArtifactToSearchResult(\n artifact: MJArtifactEntity,\n query: string,\n collectionId?: string,\n collectionName?: string\n ): SearchResult {\n const name = artifact.Name || 'Untitled Artifact';\n const description = artifact.Description || '';\n const lowerQuery = query.toLowerCase();\n\n let score = 0;\n if (name.toLowerCase().includes(lowerQuery)) score += 10;\n if (description.toLowerCase().includes(lowerQuery)) score += 5;\n\n const matchedText = this.extractMatchContext(\n name.toLowerCase().includes(lowerQuery) ? name : description,\n query\n );\n\n return {\n id: artifact.ID,\n type: 'artifact',\n title: name,\n preview: description || 'No description',\n matchedText,\n collectionId,\n collectionName,\n artifactType: artifact.Type || undefined,\n createdAt: artifact.__mj_CreatedAt,\n relevanceScore: score\n };\n }\n\n /**\n * Map collection entity to search result\n */\n private mapCollectionToSearchResult(collection: MJCollectionEntity, query: string): SearchResult {\n const lowerQuery = query.toLowerCase();\n const name = collection.Name || 'Untitled Collection';\n const description = collection.Description || '';\n\n let score = 0;\n if (name.toLowerCase().includes(lowerQuery)) score += 10;\n if (description.toLowerCase().includes(lowerQuery)) score += 5;\n\n const matchedText = this.extractMatchContext(\n name.toLowerCase().includes(lowerQuery) ? name : description,\n query\n );\n\n return {\n id: collection.ID,\n type: 'collection',\n title: name,\n preview: description || 'No description',\n matchedText,\n collectionId: collection.ID,\n collectionName: name,\n createdAt: collection.__mj_CreatedAt,\n relevanceScore: score\n };\n }\n\n /**\n * Map task entity to search result\n */\n private mapTaskToSearchResult(task: MJTaskEntity, query: string): SearchResult {\n const lowerQuery = query.toLowerCase();\n const name = task.Name || 'Untitled Task';\n const description = task.Description || '';\n\n let score = 0;\n if (name.toLowerCase().includes(lowerQuery)) score += 10;\n if (description.toLowerCase().includes(lowerQuery)) score += 5;\n\n const matchedText = this.extractMatchContext(\n name.toLowerCase().includes(lowerQuery) ? name : description,\n query\n );\n\n return {\n id: task.ID,\n type: 'task',\n title: name,\n preview: description || 'No description',\n matchedText,\n createdAt: task.__mj_CreatedAt,\n relevanceScore: score\n };\n }\n\n /**\n * Extract context around matched text\n */\n private extractMatchContext(text: string, query: string, contextLength: number = 100): string {\n const lowerText = text.toLowerCase();\n const lowerQuery = query.toLowerCase();\n const index = lowerText.indexOf(lowerQuery);\n\n if (index === -1) return this.truncateText(text, contextLength);\n\n const start = Math.max(0, index - contextLength / 2);\n const end = Math.min(text.length, index + query.length + contextLength / 2);\n\n let context = text.substring(start, end);\n if (start > 0) context = '...' + context;\n if (end < text.length) context = context + '...';\n\n return context;\n }\n\n /**\n * Truncate text to specified length\n */\n private truncateText(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return text.substring(0, maxLength) + '...';\n }\n\n /**\n * Set search filter\n */\n public SetSearchFilter(filter: SearchFilter): void {\n this._searchFilter$.next(filter);\n }\n\n /** @deprecated Use {@link SetSearchFilter}. */\n public setSearchFilter(filter: SearchFilter): void {\n return this.SetSearchFilter(filter);\n }\n\n /**\n * Set date range filter\n */\n public SetDateRange(range: DateRange): void {\n this._dateRange$.next(range);\n }\n\n /** @deprecated Use {@link SetDateRange}. */\n public setDateRange(range: DateRange): void {\n return this.SetDateRange(range);\n }\n\n /**\n * Clear all filters\n */\n public ClearFilters(): void {\n this._searchFilter$.next('all');\n this._dateRange$.next({ start: null, end: null });\n }\n\n /** @deprecated Use {@link ClearFilters}. */\n public clearFilters(): void {\n return this.ClearFilters();\n }\n\n /**\n * Clear search results\n */\n public ClearResults(): void {\n this._searchResults$.next({\n conversations: [],\n messages: [],\n artifacts: [],\n collections: [],\n tasks: [],\n total: 0\n });\n }\n\n /** @deprecated Use {@link ClearResults}. */\n public clearResults(): void {\n return this.ClearResults();\n }\n\n /**\n * Get recent searches\n */\n public GetRecentSearches(): string[] {\n return [...this.recentSearches];\n }\n\n /** @deprecated Use {@link GetRecentSearches}. */\n public getRecentSearches(): string[] {\n return this.GetRecentSearches();\n }\n\n /**\n * Add to recent searches\n */\n private addToRecentSearches(query: string): void {\n const trimmed = query.trim();\n if (!trimmed) return;\n\n // Remove if already exists\n this.recentSearches = this.recentSearches.filter(q => q !== trimmed);\n\n // Add to front\n this.recentSearches.unshift(trimmed);\n\n // Keep only MAX_RECENT_SEARCHES\n if (this.recentSearches.length > this.MAX_RECENT_SEARCHES) {\n this.recentSearches = this.recentSearches.slice(0, this.MAX_RECENT_SEARCHES);\n }\n\n this.saveRecentSearches();\n }\n\n /**\n * Clear recent searches\n */\n public ClearRecentSearches(): void {\n this.recentSearches = [];\n this.saveRecentSearches();\n }\n\n /** @deprecated Use {@link ClearRecentSearches}. */\n public clearRecentSearches(): void {\n return this.ClearRecentSearches();\n }\n\n /**\n * Load recent searches from localStorage\n */\n private loadRecentSearches(): void {\n try {\n const stored = localStorage.getItem('mj-recent-searches');\n if (stored) {\n this.recentSearches = JSON.parse(stored);\n }\n } catch (error) {\n console.error('Failed to load recent searches:', error);\n this.recentSearches = [];\n }\n }\n\n /**\n * Save recent searches to localStorage\n */\n private saveRecentSearches(): void {\n try {\n localStorage.setItem('mj-recent-searches', JSON.stringify(this.recentSearches));\n } catch (error) {\n console.error('Failed to save recent searches:', error);\n }\n }\n}\n"]}
@@ -10,35 +10,53 @@ export interface Toast {
10
10
  }
11
11
  export declare class ToastService {
12
12
  private toastsSubject;
13
- toasts$: Observable<Toast[]>;
13
+ Toasts$: Observable<Toast[]>;
14
+ /** @deprecated Use {@link Toasts$}. */
15
+ get toasts$(): Observable<Toast[]>;
16
+ /** @deprecated Use {@link Toasts$}. */
17
+ set toasts$(value: Observable<Toast[]>);
14
18
  private idCounter;
15
19
  /**
16
20
  * Show a toast notification
17
21
  */
22
+ Show(message: string, type?: ToastType, duration?: number): string;
23
+ /** @deprecated Use {@link Show}. */
18
24
  show(message: string, type?: ToastType, duration?: number): string;
19
25
  /**
20
26
  * Show a success toast
21
27
  */
28
+ Success(message: string, duration?: number): string;
29
+ /** @deprecated Use {@link Success}. */
22
30
  success(message: string, duration?: number): string;
23
31
  /**
24
32
  * Show an error toast
25
33
  */
34
+ Error(message: string, duration?: number): string;
35
+ /** @deprecated Use {@link Error}. */
26
36
  error(message: string, duration?: number): string;
27
37
  /**
28
38
  * Show a warning toast
29
39
  */
40
+ Warning(message: string, duration?: number): string;
41
+ /** @deprecated Use {@link Warning}. */
30
42
  warning(message: string, duration?: number): string;
31
43
  /**
32
44
  * Show an info toast
33
45
  */
46
+ Info(message: string, duration?: number): string;
47
+ /** @deprecated Use {@link Info}. */
34
48
  info(message: string, duration?: number): string;
35
49
  /**
36
50
  * Dismiss a specific toast by ID
37
51
  */
52
+ Dismiss(id: string): void;
53
+ /** @deprecated Use {@link Dismiss}. */
38
54
  dismiss(id: string): void;
39
55
  /**
40
56
  * Clear all toasts
41
57
  */
58
+ Clear(): void;
59
+ /** @deprecated Use {@link Clear}. */
42
60
  clear(): void;
43
61
  static ɵfac: i0.ɵɵFactoryDeclaration<ToastService, never>;
44
62
  static ɵprov: i0.ɵɵInjectableDeclaration<ToastService>;
@@ -1 +1 @@
1
- {"version":3,"file":"toast.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/toast.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,UAAU,EAAE,MAAM,MAAM,CAAC;;AAEnD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjE,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAGa,YAAY;IACvB,OAAO,CAAC,aAAa,CAAoC;IAClD,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAqC;IAExE,OAAO,CAAC,SAAS,CAAK;IAEtB;;OAEG;IACI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,SAAkB,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM;IAsBvF;;OAEG;IACI,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM;IAIhE;;OAEG;IACI,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM;IAI9D;;OAEG;IACI,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM;IAIhE;;OAEG;IACI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM;IAI7D;;OAEG;IACI,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMhC;;OAEG;IACI,KAAK,IAAI,IAAI;yCAvET,YAAY;6CAAZ,YAAY;CA0ExB"}
1
+ {"version":3,"file":"toast.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/toast.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,UAAU,EAAE,MAAM,MAAM,CAAC;;AAEnD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjE,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAGa,YAAY;IACvB,OAAO,CAAC,aAAa,CAAoC;IAClD,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAqC;IAExE,uCAAuC;IACvC,IAAW,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC,CAExC;IACD,uCAAuC;IACvC,IAAW,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,EAE5C;IAED,OAAO,CAAC,SAAS,CAAK;IAEtB;;OAEG;IACI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,SAAkB,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM;IAsBvF,oCAAoC;IAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,SAAkB,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM;IAIvF;;OAEG;IACI,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM;IAIhE,uCAAuC;IAChC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM;IAIhE;;OAEG;IACI,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM;IAI9D,qCAAqC;IAC9B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM;IAI9D;;OAEG;IACI,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM;IAIhE,uCAAuC;IAChC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM;IAIhE;;OAEG;IACI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM;IAI7D,oCAAoC;IAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,MAAM;IAI7D;;OAEG;IACI,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMhC,uCAAuC;IAChC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIhC;;OAEG;IACI,KAAK,IAAI,IAAI;IAIpB,qCAAqC;IAC9B,KAAK,IAAI,IAAI;yCAnHT,YAAY;6CAAZ,YAAY;CAsHxB"}