@memberjunction/ng-explorer-core 6.2.0-edge.0 → 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 (178) hide show
  1. package/dist/app-routing.module.d.ts +23 -1
  2. package/dist/app-routing.module.d.ts.map +1 -1
  3. package/dist/app-routing.module.js +50 -14
  4. package/dist/app-routing.module.js.map +1 -1
  5. package/dist/lib/command-palette/command-palette.component.d.ts +7 -1
  6. package/dist/lib/command-palette/command-palette.component.d.ts.map +1 -1
  7. package/dist/lib/command-palette/command-palette.component.js +28 -14
  8. package/dist/lib/command-palette/command-palette.component.js.map +1 -1
  9. package/dist/lib/conversation-feedback/conversation-feedback.d.ts +103 -13
  10. package/dist/lib/conversation-feedback/conversation-feedback.d.ts.map +1 -1
  11. package/dist/lib/conversation-feedback/conversation-feedback.js +219 -67
  12. package/dist/lib/conversation-feedback/conversation-feedback.js.map +1 -1
  13. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.d.ts +64 -10
  14. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.d.ts.map +1 -1
  15. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js +172 -66
  16. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js.map +1 -1
  17. package/dist/lib/generic/resource-container-component.d.ts +19 -5
  18. package/dist/lib/generic/resource-container-component.d.ts.map +1 -1
  19. package/dist/lib/generic/resource-container-component.js +43 -13
  20. package/dist/lib/generic/resource-container-component.js.map +1 -1
  21. package/dist/lib/guards/entities.guard.d.ts +4 -0
  22. package/dist/lib/guards/entities.guard.d.ts.map +1 -1
  23. package/dist/lib/guards/entities.guard.js +10 -2
  24. package/dist/lib/guards/entities.guard.js.map +1 -1
  25. package/dist/lib/identity-claims/claim-redeem.component.d.ts +4 -0
  26. package/dist/lib/identity-claims/claim-redeem.component.d.ts.map +1 -1
  27. package/dist/lib/identity-claims/claim-redeem.component.js +10 -2
  28. package/dist/lib/identity-claims/claim-redeem.component.js.map +1 -1
  29. package/dist/lib/oauth/oauth-callback.component.d.ts +4 -0
  30. package/dist/lib/oauth/oauth-callback.component.d.ts.map +1 -1
  31. package/dist/lib/oauth/oauth-callback.component.js +10 -2
  32. package/dist/lib/oauth/oauth-callback.component.js.map +1 -1
  33. package/dist/lib/profile/profile-dialog.component.d.ts.map +1 -1
  34. package/dist/lib/profile/profile-dialog.component.js +194 -191
  35. package/dist/lib/profile/profile-dialog.component.js.map +1 -1
  36. package/dist/lib/resource-wrappers/artifact-resource.component.d.ts +20 -2
  37. package/dist/lib/resource-wrappers/artifact-resource.component.d.ts.map +1 -1
  38. package/dist/lib/resource-wrappers/artifact-resource.component.js +33 -9
  39. package/dist/lib/resource-wrappers/artifact-resource.component.js.map +1 -1
  40. package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts +80 -10
  41. package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts.map +1 -1
  42. package/dist/lib/resource-wrappers/chat-collections-resource.component.js +168 -56
  43. package/dist/lib/resource-wrappers/chat-collections-resource.component.js.map +1 -1
  44. package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts +186 -23
  45. package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts.map +1 -1
  46. package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +500 -177
  47. package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -1
  48. package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts +2 -0
  49. package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts.map +1 -1
  50. package/dist/lib/resource-wrappers/chat-deeplink-params.js +5 -1
  51. package/dist/lib/resource-wrappers/chat-deeplink-params.js.map +1 -1
  52. package/dist/lib/resource-wrappers/chat-search-routing.d.ts +25 -0
  53. package/dist/lib/resource-wrappers/chat-search-routing.d.ts.map +1 -0
  54. package/dist/lib/resource-wrappers/chat-search-routing.js +24 -0
  55. package/dist/lib/resource-wrappers/chat-search-routing.js.map +1 -0
  56. package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts +14 -2
  57. package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts.map +1 -1
  58. package/dist/lib/resource-wrappers/chat-tasks-resource.component.js +32 -8
  59. package/dist/lib/resource-wrappers/chat-tasks-resource.component.js.map +1 -1
  60. package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts +54 -8
  61. package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts.map +1 -1
  62. package/dist/lib/resource-wrappers/dashboard-resource.component.js +138 -46
  63. package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
  64. package/dist/lib/resource-wrappers/livekit-room-resource.component.d.ts +223 -30
  65. package/dist/lib/resource-wrappers/livekit-room-resource.component.d.ts.map +1 -1
  66. package/dist/lib/resource-wrappers/livekit-room-resource.component.js +438 -118
  67. package/dist/lib/resource-wrappers/livekit-room-resource.component.js.map +1 -1
  68. package/dist/lib/resource-wrappers/search-results-resource.component.d.ts +7 -3
  69. package/dist/lib/resource-wrappers/search-results-resource.component.d.ts.map +1 -1
  70. package/dist/lib/resource-wrappers/search-results-resource.component.js +23 -15
  71. package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
  72. package/dist/lib/resource-wrappers/view-resource.component.d.ts +68 -10
  73. package/dist/lib/resource-wrappers/view-resource.component.d.ts.map +1 -1
  74. package/dist/lib/resource-wrappers/view-resource.component.js +178 -62
  75. package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
  76. package/dist/lib/services/startup-validation.service.d.ts +4 -0
  77. package/dist/lib/services/startup-validation.service.d.ts.map +1 -1
  78. package/dist/lib/services/startup-validation.service.js +10 -2
  79. package/dist/lib/services/startup-validation.service.js.map +1 -1
  80. package/dist/lib/services/system-validation.service.d.ts +13 -1
  81. package/dist/lib/services/system-validation.service.d.ts.map +1 -1
  82. package/dist/lib/services/system-validation.service.js +29 -5
  83. package/dist/lib/services/system-validation.service.js.map +1 -1
  84. package/dist/lib/shell/components/dialogs/app-access-dialog.component.d.ts +54 -4
  85. package/dist/lib/shell/components/dialogs/app-access-dialog.component.d.ts.map +1 -1
  86. package/dist/lib/shell/components/dialogs/app-access-dialog.component.js +130 -40
  87. package/dist/lib/shell/components/dialogs/app-access-dialog.component.js.map +1 -1
  88. package/dist/lib/shell/components/header/app-nav.component.d.ts +29 -1
  89. package/dist/lib/shell/components/header/app-nav.component.d.ts.map +1 -1
  90. package/dist/lib/shell/components/header/app-nav.component.js +56 -12
  91. package/dist/lib/shell/components/header/app-nav.component.js.map +1 -1
  92. package/dist/lib/shell/components/header/app-switcher.component.d.ts +33 -5
  93. package/dist/lib/shell/components/header/app-switcher.component.d.ts.map +1 -1
  94. package/dist/lib/shell/components/header/app-switcher.component.js +85 -29
  95. package/dist/lib/shell/components/header/app-switcher.component.js.map +1 -1
  96. package/dist/lib/shell/components/record-open/record-origin-crumb.component.js +1 -1
  97. package/dist/lib/shell/components/record-open/record-origin-crumb.component.js.map +1 -1
  98. package/dist/lib/shell/components/tabs/component-cache-manager.d.ts +50 -6
  99. package/dist/lib/shell/components/tabs/component-cache-manager.d.ts.map +1 -1
  100. package/dist/lib/shell/components/tabs/component-cache-manager.js +95 -22
  101. package/dist/lib/shell/components/tabs/component-cache-manager.js.map +1 -1
  102. package/dist/lib/shell/components/tabs/tab-container.component.d.ts +91 -9
  103. package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
  104. package/dist/lib/shell/components/tabs/tab-container.component.js +257 -101
  105. package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
  106. package/dist/lib/shell/loading-themes.d.ts +16 -12
  107. package/dist/lib/shell/loading-themes.d.ts.map +1 -1
  108. package/dist/lib/shell/loading-themes.js +145 -137
  109. package/dist/lib/shell/loading-themes.js.map +1 -1
  110. package/dist/lib/shell/readiness-beacon.d.ts +2 -0
  111. package/dist/lib/shell/readiness-beacon.d.ts.map +1 -1
  112. package/dist/lib/shell/readiness-beacon.js +5 -1
  113. package/dist/lib/shell/readiness-beacon.js.map +1 -1
  114. package/dist/lib/shell/services/about-dialog.service.d.ts +6 -0
  115. package/dist/lib/shell/services/about-dialog.service.d.ts.map +1 -1
  116. package/dist/lib/shell/services/about-dialog.service.js +16 -4
  117. package/dist/lib/shell/services/about-dialog.service.js.map +1 -1
  118. package/dist/lib/shell/services/profile-dialog.service.d.ts +6 -0
  119. package/dist/lib/shell/services/profile-dialog.service.d.ts.map +1 -1
  120. package/dist/lib/shell/services/profile-dialog.service.js +16 -4
  121. package/dist/lib/shell/services/profile-dialog.service.js.map +1 -1
  122. package/dist/lib/shell/services/user-sharing-center-dialog.service.d.ts +6 -0
  123. package/dist/lib/shell/services/user-sharing-center-dialog.service.d.ts.map +1 -1
  124. package/dist/lib/shell/services/user-sharing-center-dialog.service.js +15 -3
  125. package/dist/lib/shell/services/user-sharing-center-dialog.service.js.map +1 -1
  126. package/dist/lib/shell/shell.component.d.ts +262 -39
  127. package/dist/lib/shell/shell.component.d.ts.map +1 -1
  128. package/dist/lib/shell/shell.component.js +688 -292
  129. package/dist/lib/shell/shell.component.js.map +1 -1
  130. package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts +64 -8
  131. package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts.map +1 -1
  132. package/dist/lib/single-dashboard/Components/add-item/add-item.component.js +129 -37
  133. package/dist/lib/single-dashboard/Components/add-item/add-item.component.js.map +1 -1
  134. package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.d.ts +26 -2
  135. package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.d.ts.map +1 -1
  136. package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js +48 -10
  137. package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js.map +1 -1
  138. package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.d.ts +84 -6
  139. package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.d.ts.map +1 -1
  140. package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js +133 -29
  141. package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js.map +1 -1
  142. package/dist/lib/single-dashboard/single-dashboard.component.d.ts +173 -23
  143. package/dist/lib/single-dashboard/single-dashboard.component.d.ts.map +1 -1
  144. package/dist/lib/single-dashboard/single-dashboard.component.js +383 -109
  145. package/dist/lib/single-dashboard/single-dashboard.component.js.map +1 -1
  146. package/dist/lib/single-list-detail/single-list-detail.component.d.ts +383 -55
  147. package/dist/lib/single-list-detail/single-list-detail.component.d.ts.map +1 -1
  148. package/dist/lib/single-list-detail/single-list-detail.component.js +962 -326
  149. package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
  150. package/dist/lib/single-query/single-query.component.d.ts +22 -2
  151. package/dist/lib/single-query/single-query.component.d.ts.map +1 -1
  152. package/dist/lib/single-query/single-query.component.js +40 -10
  153. package/dist/lib/single-query/single-query.component.js.map +1 -1
  154. package/dist/lib/single-record/single-record.component.d.ts +41 -3
  155. package/dist/lib/single-record/single-record.component.d.ts.map +1 -1
  156. package/dist/lib/single-record/single-record.component.js +71 -11
  157. package/dist/lib/single-record/single-record.component.js.map +1 -1
  158. package/dist/lib/single-search-result/single-search-result.component.d.ts +23 -3
  159. package/dist/lib/single-search-result/single-search-result.component.d.ts.map +1 -1
  160. package/dist/lib/single-search-result/single-search-result.component.js +42 -12
  161. package/dist/lib/single-search-result/single-search-result.component.js.map +1 -1
  162. package/dist/lib/system-validation/system-validation-banner.component.d.ts +12 -2
  163. package/dist/lib/system-validation/system-validation-banner.component.d.ts.map +1 -1
  164. package/dist/lib/system-validation/system-validation-banner.component.js +25 -5
  165. package/dist/lib/system-validation/system-validation-banner.component.js.map +1 -1
  166. package/dist/lib/user-menu/user-menu.types.d.ts +4 -0
  167. package/dist/lib/user-menu/user-menu.types.d.ts.map +1 -1
  168. package/dist/lib/user-menu/user-menu.types.js +10 -2
  169. package/dist/lib/user-menu/user-menu.types.js.map +1 -1
  170. package/dist/lib/user-notifications/user-notifications.component.d.ts +59 -7
  171. package/dist/lib/user-notifications/user-notifications.component.d.ts.map +1 -1
  172. package/dist/lib/user-notifications/user-notifications.component.js +151 -47
  173. package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
  174. package/dist/lib/user-profile/user-profile.component.d.ts +3 -2
  175. package/dist/lib/user-profile/user-profile.component.d.ts.map +1 -1
  176. package/dist/lib/user-profile/user-profile.component.js +5 -4
  177. package/dist/lib/user-profile/user-profile.component.js.map +1 -1
  178. package/package.json +52 -52
@@ -8,7 +8,8 @@ import { Component, ViewEncapsulation, ViewChild, HostListener } from '@angular/
8
8
  import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
9
9
  import { BaseResourceComponent } from '@memberjunction/ng-shared';
10
10
  import { MJEnvironmentEntityExtended, UserInfoEngine, ConversationEngine } from '@memberjunction/core-entities';
11
- import { resolveDeepLinkParam } from './chat-deeplink-params.js';
11
+ import { ResolveDeepLinkParam } from './chat-deeplink-params.js';
12
+ import { ResolveChatSearchRoute } from './chat-search-routing.js';
12
13
  import { MentionAutocompleteService } from '@memberjunction/ng-conversations';
13
14
  import { AIEngineBase } from '@memberjunction/ai-engine-base';
14
15
  import { takeUntil } from 'rxjs';
@@ -19,16 +20,16 @@ const _c0 = ["conversationList"];
19
20
  const _c1 = ["chatArea"];
20
21
  function ChatConversationsResource_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
21
22
  const _r1 = i0.ɵɵgetCurrentView();
22
- i0.ɵɵelementStart(0, "div", 9);
23
+ i0.ɵɵelementStart(0, "div", 10);
23
24
  i0.ɵɵlistener("click", function ChatConversationsResource_Conditional_0_Conditional_1_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.collapseSidebar()); });
24
25
  i0.ɵɵelementEnd();
25
26
  } }
26
27
  function ChatConversationsResource_Conditional_0_Conditional_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
27
28
  const _r3 = i0.ɵɵgetCurrentView();
28
- i0.ɵɵelementStart(0, "mj-conversation-list", 11, 0);
29
- i0.ɵɵlistener("conversationSelected", function ChatConversationsResource_Conditional_0_Conditional_2_Conditional_1_Template_mj_conversation_list_conversationSelected_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onConversationSelected($event)); })("conversationDeleted", function ChatConversationsResource_Conditional_0_Conditional_2_Conditional_1_Template_mj_conversation_list_conversationDeleted_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onConversationDeleted($event)); })("newConversationRequested", function ChatConversationsResource_Conditional_0_Conditional_2_Conditional_1_Template_mj_conversation_list_newConversationRequested_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onNewConversationRequested()); })("pinSidebarRequested", function ChatConversationsResource_Conditional_0_Conditional_2_Conditional_1_Template_mj_conversation_list_pinSidebarRequested_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.pinSidebar()); })("unpinSidebarRequested", function ChatConversationsResource_Conditional_0_Conditional_2_Conditional_1_Template_mj_conversation_list_unpinSidebarRequested_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.unpinSidebar()); })("refreshRequested", function ChatConversationsResource_Conditional_0_Conditional_2_Conditional_1_Template_mj_conversation_list_refreshRequested_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onRefreshRequested()); });
29
+ i0.ɵɵelementStart(0, "mj-conversation-list", 12, 0);
30
+ i0.ɵɵlistener("conversationSelected", function ChatConversationsResource_Conditional_0_Conditional_2_Conditional_1_Template_mj_conversation_list_conversationSelected_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onConversationSelected($event)); })("conversationDeleted", function ChatConversationsResource_Conditional_0_Conditional_2_Conditional_1_Template_mj_conversation_list_conversationDeleted_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onConversationDeleted($event)); })("newConversationRequested", function ChatConversationsResource_Conditional_0_Conditional_2_Conditional_1_Template_mj_conversation_list_newConversationRequested_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onNewConversationRequested()); })("pinSidebarRequested", function ChatConversationsResource_Conditional_0_Conditional_2_Conditional_1_Template_mj_conversation_list_pinSidebarRequested_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.pinSidebar()); })("unpinSidebarRequested", function ChatConversationsResource_Conditional_0_Conditional_2_Conditional_1_Template_mj_conversation_list_unpinSidebarRequested_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.unpinSidebar()); })("refreshRequested", function ChatConversationsResource_Conditional_0_Conditional_2_Conditional_1_Template_mj_conversation_list_refreshRequested_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onRefreshRequested()); })("SearchEscalated", function ChatConversationsResource_Conditional_0_Conditional_2_Conditional_1_Template_mj_conversation_list_SearchEscalated_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenSearch($event)); });
30
31
  i0.ɵɵelementEnd();
31
- i0.ɵɵelementStart(2, "mj-conversation-routines-section", 12);
32
+ i0.ɵɵelementStart(2, "mj-conversation-routines-section", 13);
32
33
  i0.ɵɵlistener("openEntityRecord", function ChatConversationsResource_Conditional_0_Conditional_2_Conditional_1_Template_mj_conversation_routines_section_openEntityRecord_2_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); })("openConversation", function ChatConversationsResource_Conditional_0_Conditional_2_Conditional_1_Template_mj_conversation_routines_section_openConversation_2_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onConversationSelected($event)); });
33
34
  i0.ɵɵelementEnd();
34
35
  } if (rf & 2) {
@@ -36,7 +37,7 @@ function ChatConversationsResource_Conditional_0_Conditional_2_Conditional_1_Tem
36
37
  i0.ɵɵproperty("environmentId", ctx_r1.environmentId)("currentUser", ctx_r1.currentUser)("selectedConversationId", ctx_r1.selectedConversationId)("renamedConversationId", ctx_r1.renamedConversationId)("isSidebarPinned", ctx_r1.isSidebarPinned)("isMobileView", ctx_r1.isMobileView);
37
38
  } }
38
39
  function ChatConversationsResource_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
39
- i0.ɵɵelementStart(0, "div", 10);
40
+ i0.ɵɵelementStart(0, "div", 11);
40
41
  i0.ɵɵconditionalCreate(1, ChatConversationsResource_Conditional_0_Conditional_2_Conditional_1_Template, 3, 6);
41
42
  i0.ɵɵelementEnd();
42
43
  } if (rf & 2) {
@@ -48,13 +49,13 @@ function ChatConversationsResource_Conditional_0_Conditional_2_Template(rf, ctx)
48
49
  } }
49
50
  function ChatConversationsResource_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
50
51
  const _r4 = i0.ɵɵgetCurrentView();
51
- i0.ɵɵelementStart(0, "div", 13);
52
+ i0.ɵɵelementStart(0, "div", 14);
52
53
  i0.ɵɵlistener("mousedown", function ChatConversationsResource_Conditional_0_Conditional_3_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onSidebarResizeStart($event)); });
53
54
  i0.ɵɵelementEnd();
54
55
  } }
55
56
  function ChatConversationsResource_Conditional_0_Conditional_5_Template(rf, ctx) { if (rf & 1) {
56
57
  const _r5 = i0.ɵɵgetCurrentView();
57
- i0.ɵɵelementStart(0, "mj-conversation-chat-area", 14, 1);
58
+ i0.ɵɵelementStart(0, "mj-conversation-chat-area", 15, 1);
58
59
  i0.ɵɵlistener("sidebarToggleClicked", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_sidebarToggleClicked_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.expandSidebar()); })("conversationRenamed", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_conversationRenamed_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onConversationRenamed($event)); })("conversationCreated", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_conversationCreated_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onConversationCreated($event)); })("threadOpened", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_threadOpened_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onThreadOpened($event)); })("threadClosed", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_threadClosed_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onThreadClosed()); })("pendingArtifactConsumed", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_pendingArtifactConsumed_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onPendingArtifactConsumed()); })("pendingMessageConsumed", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_pendingMessageConsumed_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onPendingMessageConsumed()); })("pendingMessageRequested", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_pendingMessageRequested_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onPendingMessageRequested($event)); })("artifactLinkClicked", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_artifactLinkClicked_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onArtifactLinkClicked($event)); })("openEntityRecord", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); })("navigationRequest", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_navigationRequest_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onNavigationRequest($event)); })("composerAgentMentionConsumed", function ChatConversationsResource_Conditional_0_Conditional_5_Template_mj_conversation_chat_area_composerAgentMentionConsumed_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onComposerAgentMentionConsumed()); });
59
60
  i0.ɵɵelementEnd();
60
61
  } if (rf & 2) {
@@ -63,11 +64,11 @@ function ChatConversationsResource_Conditional_0_Conditional_5_Template(rf, ctx)
63
64
  } }
64
65
  function ChatConversationsResource_Conditional_0_Template(rf, ctx) { if (rf & 1) {
65
66
  i0.ɵɵelementStart(0, "div", 2);
66
- i0.ɵɵconditionalCreate(1, ChatConversationsResource_Conditional_0_Conditional_1_Template, 1, 0, "div", 4);
67
- i0.ɵɵconditionalCreate(2, ChatConversationsResource_Conditional_0_Conditional_2_Template, 2, 7, "div", 5);
68
- i0.ɵɵconditionalCreate(3, ChatConversationsResource_Conditional_0_Conditional_3_Template, 1, 0, "div", 6);
69
- i0.ɵɵelementStart(4, "div", 7);
70
- i0.ɵɵconditionalCreate(5, ChatConversationsResource_Conditional_0_Conditional_5_Template, 2, 13, "mj-conversation-chat-area", 8);
67
+ i0.ɵɵconditionalCreate(1, ChatConversationsResource_Conditional_0_Conditional_1_Template, 1, 0, "div", 5);
68
+ i0.ɵɵconditionalCreate(2, ChatConversationsResource_Conditional_0_Conditional_2_Template, 2, 7, "div", 6);
69
+ i0.ɵɵconditionalCreate(3, ChatConversationsResource_Conditional_0_Conditional_3_Template, 1, 0, "div", 7);
70
+ i0.ɵɵelementStart(4, "div", 8);
71
+ i0.ɵɵconditionalCreate(5, ChatConversationsResource_Conditional_0_Conditional_5_Template, 2, 13, "mj-conversation-chat-area", 9);
71
72
  i0.ɵɵelementEnd()();
72
73
  } if (rf & 2) {
73
74
  const ctx_r1 = i0.ɵɵnextContext();
@@ -82,9 +83,18 @@ function ChatConversationsResource_Conditional_0_Template(rf, ctx) { if (rf & 1)
82
83
  } }
83
84
  function ChatConversationsResource_Conditional_1_Template(rf, ctx) { if (rf & 1) {
84
85
  i0.ɵɵelementStart(0, "div", 3);
85
- i0.ɵɵelement(1, "mj-loading", 15);
86
+ i0.ɵɵelement(1, "mj-loading", 16);
86
87
  i0.ɵɵelementEnd();
87
88
  } }
89
+ function ChatConversationsResource_Conditional_2_Template(rf, ctx) { if (rf & 1) {
90
+ const _r6 = i0.ɵɵgetCurrentView();
91
+ i0.ɵɵelementStart(0, "mj-search-panel", 17);
92
+ i0.ɵɵlistener("close", function ChatConversationsResource_Conditional_2_Template_mj_search_panel_close_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CloseSearch()); })("ResultSelected", function ChatConversationsResource_Conditional_2_Template_mj_search_panel_ResultSelected_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnSearchResultSelected($event)); });
93
+ i0.ɵɵelementEnd();
94
+ } if (rf & 2) {
95
+ const ctx_r1 = i0.ɵɵnextContext();
96
+ i0.ɵɵproperty("InitialQuery", ctx_r1.SearchSeedQuery)("IsOpen", ctx_r1.IsSearchPanelOpen)("EnvironmentId", ctx_r1.EnvironmentId)("CurrentUser", ctx_r1.CurrentUser);
97
+ } }
88
98
  /**
89
99
  * Chat Conversations Resource - wraps the conversation chat area for tab-based display
90
100
  * Extends BaseResourceComponent to work with the resource type system
@@ -102,33 +112,169 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
102
112
  activeTasksService;
103
113
  uiCommandHandler;
104
114
  bridge;
105
- conversationList;
106
- chatArea;
107
- currentUser = null;
115
+ ConversationList;
116
+ /** @deprecated Use {@link ConversationList}. */
117
+ get conversationList() {
118
+ return this.ConversationList;
119
+ }
120
+ /** @deprecated Use {@link ConversationList}. */
121
+ set conversationList(value) {
122
+ this.ConversationList = value;
123
+ }
124
+ ChatArea;
125
+ /** @deprecated Use {@link ChatArea}. */
126
+ get chatArea() {
127
+ return this.ChatArea;
128
+ }
129
+ /** @deprecated Use {@link ChatArea}. */
130
+ set chatArea(value) {
131
+ this.ChatArea = value;
132
+ }
133
+ CurrentUser = null;
134
+ /** @deprecated Use {@link CurrentUser}. */
135
+ get currentUser() {
136
+ return this.CurrentUser;
137
+ }
138
+ /** @deprecated Use {@link CurrentUser}. */
139
+ set currentUser(value) {
140
+ this.CurrentUser = value;
141
+ }
108
142
  skipUrlUpdate = true; // Skip URL updates during initialization
109
143
  // Ready flag - blocks child rendering until AIEngine is initialized
110
- isReady = false;
144
+ IsReady = false;
145
+ /** @deprecated Use {@link IsReady}. */
146
+ get isReady() {
147
+ return this.IsReady;
148
+ }
149
+ /** @deprecated Use {@link IsReady}. */
150
+ set isReady(value) {
151
+ this.IsReady = value;
152
+ }
111
153
  // LOCAL SELECTION STATE - each wrapper instance manages its own selection
112
- selectedConversationId = null;
113
- selectedConversation = null;
114
- selectedThreadId = null;
115
- isNewUnsavedConversation = false;
116
- renamedConversationId = null;
117
- isSidebarCollapsed = false;
118
- isSidebarPinned = true; // Whether sidebar stays open after selection
119
- isMobileView = false;
120
- sidebarTransitionsEnabled = false; // Disabled during initial load to prevent jarring animation
121
- isSidebarSettingsLoaded = false; // Prevents UI flash while loading settings
154
+ SelectedConversationId = null;
155
+ /** @deprecated Use {@link SelectedConversationId}. */
156
+ get selectedConversationId() {
157
+ return this.SelectedConversationId;
158
+ }
159
+ /** @deprecated Use {@link SelectedConversationId}. */
160
+ set selectedConversationId(value) {
161
+ this.SelectedConversationId = value;
162
+ }
163
+ SelectedConversation = null;
164
+ /** @deprecated Use {@link SelectedConversation}. */
165
+ get selectedConversation() {
166
+ return this.SelectedConversation;
167
+ }
168
+ /** @deprecated Use {@link SelectedConversation}. */
169
+ set selectedConversation(value) {
170
+ this.SelectedConversation = value;
171
+ }
172
+ SelectedThreadId = null;
173
+ /** @deprecated Use {@link SelectedThreadId}. */
174
+ get selectedThreadId() {
175
+ return this.SelectedThreadId;
176
+ }
177
+ /** @deprecated Use {@link SelectedThreadId}. */
178
+ set selectedThreadId(value) {
179
+ this.SelectedThreadId = value;
180
+ }
181
+ IsNewUnsavedConversation = false;
182
+ /** @deprecated Use {@link IsNewUnsavedConversation}. */
183
+ get isNewUnsavedConversation() {
184
+ return this.IsNewUnsavedConversation;
185
+ }
186
+ /** @deprecated Use {@link IsNewUnsavedConversation}. */
187
+ set isNewUnsavedConversation(value) {
188
+ this.IsNewUnsavedConversation = value;
189
+ }
190
+ RenamedConversationId = null;
191
+ /** @deprecated Use {@link RenamedConversationId}. */
192
+ get renamedConversationId() {
193
+ return this.RenamedConversationId;
194
+ }
195
+ /** @deprecated Use {@link RenamedConversationId}. */
196
+ set renamedConversationId(value) {
197
+ this.RenamedConversationId = value;
198
+ }
199
+ IsSidebarCollapsed = false;
200
+ /** @deprecated Use {@link IsSidebarCollapsed}. */
201
+ get isSidebarCollapsed() {
202
+ return this.IsSidebarCollapsed;
203
+ }
204
+ /** @deprecated Use {@link IsSidebarCollapsed}. */
205
+ set isSidebarCollapsed(value) {
206
+ this.IsSidebarCollapsed = value;
207
+ }
208
+ IsSidebarPinned = true;
209
+ /** @deprecated Use {@link IsSidebarPinned}. */
210
+ get isSidebarPinned() {
211
+ return this.IsSidebarPinned;
212
+ }
213
+ /** @deprecated Use {@link IsSidebarPinned}. */
214
+ set isSidebarPinned(value) {
215
+ this.IsSidebarPinned = value;
216
+ } // Whether sidebar stays open after selection
217
+ IsMobileView = false;
218
+ /** @deprecated Use {@link IsMobileView}. */
219
+ get isMobileView() {
220
+ return this.IsMobileView;
221
+ }
222
+ /** @deprecated Use {@link IsMobileView}. */
223
+ set isMobileView(value) {
224
+ this.IsMobileView = value;
225
+ }
226
+ SidebarTransitionsEnabled = false;
227
+ /** @deprecated Use {@link SidebarTransitionsEnabled}. */
228
+ get sidebarTransitionsEnabled() {
229
+ return this.SidebarTransitionsEnabled;
230
+ }
231
+ /** @deprecated Use {@link SidebarTransitionsEnabled}. */
232
+ set sidebarTransitionsEnabled(value) {
233
+ this.SidebarTransitionsEnabled = value;
234
+ } // Disabled during initial load to prevent jarring animation
235
+ IsSidebarSettingsLoaded = false;
236
+ /** @deprecated Use {@link IsSidebarSettingsLoaded}. */
237
+ get isSidebarSettingsLoaded() {
238
+ return this.IsSidebarSettingsLoaded;
239
+ }
240
+ /** @deprecated Use {@link IsSidebarSettingsLoaded}. */
241
+ set isSidebarSettingsLoaded(value) {
242
+ this.IsSidebarSettingsLoaded = value;
243
+ } // Prevents UI flash while loading settings
122
244
  // Sidebar resize state
123
- sidebarWidth = 300; // Default width in pixels
245
+ SidebarWidth = 300;
246
+ /** @deprecated Use {@link SidebarWidth}. */
247
+ get sidebarWidth() {
248
+ return this.SidebarWidth;
249
+ }
250
+ /** @deprecated Use {@link SidebarWidth}. */
251
+ set sidebarWidth(value) {
252
+ this.SidebarWidth = value;
253
+ } // Default width in pixels
124
254
  isSidebarResizing = false;
125
255
  sidebarResizeStartX = 0;
126
256
  sidebarResizeStartWidth = 0;
127
257
  SIDEBAR_MIN_WIDTH = 200;
128
258
  SIDEBAR_MAX_WIDTH = 500;
129
259
  // Pending navigation state
130
- pendingArtifactId = null;
131
- pendingArtifactConversationId = null;
260
+ PendingArtifactId = null;
261
+ /** @deprecated Use {@link PendingArtifactId}. */
262
+ get pendingArtifactId() {
263
+ return this.PendingArtifactId;
264
+ }
265
+ /** @deprecated Use {@link PendingArtifactId}. */
266
+ set pendingArtifactId(value) {
267
+ this.PendingArtifactId = value;
268
+ }
269
+ PendingArtifactConversationId = null;
270
+ /** @deprecated Use {@link PendingArtifactConversationId}. */
271
+ get pendingArtifactConversationId() {
272
+ return this.PendingArtifactConversationId;
273
+ }
274
+ /** @deprecated Use {@link PendingArtifactConversationId}. */
275
+ set pendingArtifactConversationId(value) {
276
+ this.PendingArtifactConversationId = value;
277
+ }
132
278
  /**
133
279
  * A pending request to open the REALTIME SESSION REVIEW overlay (deep link /
134
280
  * cross-resource nav with `realtimeSessionId`, e.g. the AI Agent Session form's
@@ -137,10 +283,42 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
137
283
  * `await chatArea.OpenRealtimeSessionReview(agentSessionId)` (a NEW session starts
138
284
  * through the composer's phone button / `RealtimeSessionService.StartRealtimeSession`).
139
285
  */
140
- pendingRealtimeSessionId = null;
141
- pendingArtifactVersionNumber = null;
142
- pendingMessageToSend = null;
143
- pendingAttachmentsToSend = null;
286
+ PendingRealtimeSessionId = null;
287
+ /** @deprecated Use {@link PendingRealtimeSessionId}. */
288
+ get pendingRealtimeSessionId() {
289
+ return this.PendingRealtimeSessionId;
290
+ }
291
+ /** @deprecated Use {@link PendingRealtimeSessionId}. */
292
+ set pendingRealtimeSessionId(value) {
293
+ this.PendingRealtimeSessionId = value;
294
+ }
295
+ PendingArtifactVersionNumber = null;
296
+ /** @deprecated Use {@link PendingArtifactVersionNumber}. */
297
+ get pendingArtifactVersionNumber() {
298
+ return this.PendingArtifactVersionNumber;
299
+ }
300
+ /** @deprecated Use {@link PendingArtifactVersionNumber}. */
301
+ set pendingArtifactVersionNumber(value) {
302
+ this.PendingArtifactVersionNumber = value;
303
+ }
304
+ PendingMessageToSend = null;
305
+ /** @deprecated Use {@link PendingMessageToSend}. */
306
+ get pendingMessageToSend() {
307
+ return this.PendingMessageToSend;
308
+ }
309
+ /** @deprecated Use {@link PendingMessageToSend}. */
310
+ set pendingMessageToSend(value) {
311
+ this.PendingMessageToSend = value;
312
+ }
313
+ PendingAttachmentsToSend = null;
314
+ /** @deprecated Use {@link PendingAttachmentsToSend}. */
315
+ get pendingAttachmentsToSend() {
316
+ return this.PendingAttachmentsToSend;
317
+ }
318
+ /** @deprecated Use {@link PendingAttachmentsToSend}. */
319
+ set pendingAttachmentsToSend(value) {
320
+ this.PendingAttachmentsToSend = value;
321
+ }
144
322
  // User Settings persistence
145
323
  USER_SETTING_SIDEBAR_KEY = 'Conversations.SidebarState';
146
324
  saveSettingsTimeout = null;
@@ -158,15 +336,15 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
158
336
  async ngOnInit() {
159
337
  super.ngOnInit();
160
338
  const md = this.ProviderToUse;
161
- this.currentUser = md.CurrentUser;
339
+ this.CurrentUser = md.CurrentUser;
162
340
  // Check initial mobile state and set default collapsed
163
341
  this.checkMobileView();
164
- if (this.isMobileView) {
165
- this.isSidebarCollapsed = true;
166
- this.isSidebarSettingsLoaded = true; // Mobile uses defaults, no need to load from server
342
+ if (this.IsMobileView) {
343
+ this.IsSidebarCollapsed = true;
344
+ this.IsSidebarSettingsLoaded = true; // Mobile uses defaults, no need to load from server
167
345
  // Enable transitions after a brief delay to ensure initial state is applied
168
346
  setTimeout(() => {
169
- this.sidebarTransitionsEnabled = true;
347
+ this.SidebarTransitionsEnabled = true;
170
348
  }, 50);
171
349
  }
172
350
  else {
@@ -175,7 +353,7 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
175
353
  this.cdr.detectChanges();
176
354
  // Enable transitions after state is loaded and applied
177
355
  setTimeout(() => {
178
- this.sidebarTransitionsEnabled = true;
356
+ this.SidebarTransitionsEnabled = true;
179
357
  }, 50);
180
358
  });
181
359
  }
@@ -234,19 +412,19 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
234
412
  // Initialize AIEngine, conversations, and mention service in parallel
235
413
  await Promise.all([
236
414
  AIEngineBase.Instance.Config(false),
237
- this.engine.LoadConversations(this.environmentId, this.currentUser, false),
238
- this.mentionAutocompleteService.initialize(this.currentUser)
415
+ this.engine.LoadConversations(this.EnvironmentId, this.CurrentUser, false),
416
+ this.mentionAutocompleteService.initialize(this.CurrentUser)
239
417
  ]);
240
418
  // Restore active tasks AFTER conversations are cached (uses in-memory lookup)
241
- await this.activeTasksService.restoreFromDatabase(this.currentUser);
419
+ await this.activeTasksService.restoreFromDatabase(this.CurrentUser);
242
420
  // Mark as ready - child components can now render
243
- this.isReady = true;
421
+ this.IsReady = true;
244
422
  this.cdr.detectChanges();
245
423
  }
246
424
  catch (error) {
247
425
  console.error('Failed to initialize AI engines:', error);
248
426
  // Still mark as ready so UI isn't blocked forever
249
- this.isReady = true;
427
+ this.IsReady = true;
250
428
  this.cdr.detectChanges();
251
429
  }
252
430
  }
@@ -260,7 +438,7 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
260
438
  // Try to get from cache first
261
439
  const conversation = this.engine.GetConversation(conversationId);
262
440
  if (conversation) {
263
- this.selectedConversation = conversation;
441
+ this.SelectedConversation = conversation;
264
442
  this.updateTabTitle();
265
443
  }
266
444
  // If not in cache, the chat area component will handle loading it
@@ -298,18 +476,26 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
298
476
  }
299
477
  console.log(`[Omnibar→Chat] wrapper: agent param '${agentName}' (req=${requestNonce ?? 'none'}) received — staging composer pre-address`);
300
478
  this.lastAppliedAgentParamKey = requestKey;
301
- this.isNewUnsavedConversation = true;
302
- this.selectedConversationId = null;
303
- this.selectedConversation = null;
479
+ this.IsNewUnsavedConversation = true;
480
+ this.SelectedConversationId = null;
481
+ this.SelectedConversation = null;
304
482
  // Resolved mention PILL (composerAgentMention) — matching the UX of typing
305
483
  // '@agent' and picking from the dropdown; pendingMessage would AUTO-SEND.
306
- this.pendingComposerAgentMention = agentName;
484
+ this.PendingComposerAgentMention = agentName;
307
485
  this.cdr.detectChanges();
308
486
  }
309
- pendingComposerAgentMention = null;
487
+ PendingComposerAgentMention = null;
488
+ /** @deprecated Use {@link PendingComposerAgentMention}. */
489
+ get pendingComposerAgentMention() {
490
+ return this.PendingComposerAgentMention;
491
+ }
492
+ /** @deprecated Use {@link PendingComposerAgentMention}. */
493
+ set pendingComposerAgentMention(value) {
494
+ this.PendingComposerAgentMention = value;
495
+ }
310
496
  lastAppliedAgentParamKey = null;
311
- onComposerAgentMentionConsumed() {
312
- this.pendingComposerAgentMention = null;
497
+ OnComposerAgentMentionConsumed() {
498
+ this.PendingComposerAgentMention = null;
313
499
  // Consume-and-clear: drop the agent params from the tab/URL so boots and
314
500
  // back/forward can't re-stage the pill. lastAppliedAgentParamKey is
315
501
  // intentionally NOT reset — a fresh omnibar re-tag (even of the same agent)
@@ -318,6 +504,10 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
318
504
  console.log(`[Omnibar→Chat] wrapper: pill applied — clearing agent param from URL`);
319
505
  this.clearAgentParamDeferred();
320
506
  }
507
+ /** @deprecated Use {@link OnComposerAgentMentionConsumed}. */
508
+ onComposerAgentMentionConsumed() {
509
+ return this.OnComposerAgentMentionConsumed();
510
+ }
321
511
  /**
322
512
  * Clears the agent pre-address params OUTSIDE any OnQueryParamsChanged delivery:
323
513
  * UpdateQueryParams is suppressed synchronously during delivery, so an inline
@@ -334,44 +524,44 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
334
524
  const qp = config['queryParams'];
335
525
  this.applyAgentParam(qp?.['agent'], qp?.['agentReq']);
336
526
  const search = typeof window !== 'undefined' ? window.location.search : '';
337
- const conversationId = resolveDeepLinkParam('conversationId', search, qp, config.conversationId);
338
- const artifactId = resolveDeepLinkParam('artifactId', search, qp, config.artifactId);
527
+ const conversationId = ResolveDeepLinkParam('conversationId', search, qp, config.conversationId);
528
+ const artifactId = ResolveDeepLinkParam('artifactId', search, qp, config.artifactId);
339
529
  // Resolved the same URL-first way as artifactId above: pairing a URL artifact with the
340
530
  // previous visit's version number would open the wrong version of the right artifact.
341
- const rawVersion = resolveDeepLinkParam('versionNumber', search, qp, config.versionNumber != null ? String(config.versionNumber) : undefined);
531
+ const rawVersion = ResolveDeepLinkParam('versionNumber', search, qp, config.versionNumber != null ? String(config.versionNumber) : undefined);
342
532
  const versionNumber = rawVersion ? parseInt(rawVersion, 10) : null;
343
533
  // Set pending artifact if provided
344
534
  if (artifactId) {
345
- this.pendingArtifactId = artifactId;
346
- this.pendingArtifactConversationId = conversationId || null;
347
- this.pendingArtifactVersionNumber = versionNumber;
535
+ this.PendingArtifactId = artifactId;
536
+ this.PendingArtifactConversationId = conversationId || null;
537
+ this.PendingArtifactVersionNumber = versionNumber;
348
538
  }
349
539
  // Set conversationId synchronously so child components see it immediately
350
540
  if (conversationId) {
351
- this.selectedConversationId = conversationId;
541
+ this.SelectedConversationId = conversationId;
352
542
  this.bridge.SetActiveFromWorkspace(conversationId);
353
- this.isNewUnsavedConversation = false;
543
+ this.IsNewUnsavedConversation = false;
354
544
  // Load entity asynchronously
355
545
  this.loadConversationEntity(conversationId);
356
546
  }
357
547
  const realtimeSessionId = qp?.['realtimeSessionId'] || config['realtimeSessionId'];
358
548
  if (realtimeSessionId) {
359
- this.pendingRealtimeSessionId = realtimeSessionId;
549
+ this.PendingRealtimeSessionId = realtimeSessionId;
360
550
  this.applyPendingRealtimeSessionReview();
361
551
  }
362
552
  }
363
553
  /** Opens the pending realtime session review once the chat area exists (retries next tick while it renders). */
364
554
  applyPendingRealtimeSessionReview() {
365
- const sessionId = this.pendingRealtimeSessionId;
555
+ const sessionId = this.PendingRealtimeSessionId;
366
556
  if (!sessionId) {
367
557
  return;
368
558
  }
369
- if (!this.chatArea) {
559
+ if (!this.ChatArea) {
370
560
  setTimeout(() => this.applyPendingRealtimeSessionReview(), 50);
371
561
  return;
372
562
  }
373
- this.pendingRealtimeSessionId = null;
374
- void this.chatArea.OpenRealtimeSessionReview(sessionId).then((opened) => {
563
+ this.PendingRealtimeSessionId = null;
564
+ void this.ChatArea.OpenRealtimeSessionReview(sessionId).then((opened) => {
375
565
  if (!opened) {
376
566
  console.warn(`Chat: could not open realtime session review for '${sessionId}'`);
377
567
  }
@@ -388,17 +578,17 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
388
578
  this.applyAgentParam(params['agent'], params['agentReq']);
389
579
  const realtimeSessionId = params['realtimeSessionId'] || null;
390
580
  if (realtimeSessionId) {
391
- this.pendingRealtimeSessionId = realtimeSessionId;
581
+ this.PendingRealtimeSessionId = realtimeSessionId;
392
582
  this.applyPendingRealtimeSessionReview();
393
583
  }
394
584
  const conversationId = params['conversationId'] || null;
395
585
  const artifactId = params['artifactId'] || null;
396
586
  const versionNumber = params['versionNumber'] ? parseInt(params['versionNumber'], 10) : null;
397
587
  // Reflect any artifact intent so the chat area can open it.
398
- this.pendingArtifactId = artifactId;
399
- this.pendingArtifactConversationId = artifactId ? conversationId : null;
400
- this.pendingArtifactVersionNumber = versionNumber;
401
- if (conversationId && conversationId !== this.selectedConversationId) {
588
+ this.PendingArtifactId = artifactId;
589
+ this.PendingArtifactConversationId = artifactId ? conversationId : null;
590
+ this.PendingArtifactVersionNumber = versionNumber;
591
+ if (conversationId && conversationId !== this.SelectedConversationId) {
402
592
  // The URL is already the source of truth here — suppress the echo back to it.
403
593
  // selectConversation()'s body is synchronous up to its URL-update check, so
404
594
  // toggling the flag around the call reliably gates that check.
@@ -417,19 +607,19 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
417
607
  * Select a conversation by ID - loads the entity and updates local state
418
608
  */
419
609
  async selectConversation(conversationId) {
420
- this.selectedConversationId = conversationId;
421
- this.isNewUnsavedConversation = false;
610
+ this.SelectedConversationId = conversationId;
611
+ this.IsNewUnsavedConversation = false;
422
612
  // Keep bridge in sync so other consumers (toast suppression, overlay) know
423
613
  // which conversation the workspace is viewing
424
614
  this.bridge.SetActiveFromWorkspace(conversationId);
425
615
  // Load the conversation entity from data service
426
616
  const conversation = this.engine.GetConversation(conversationId);
427
617
  if (conversation) {
428
- this.selectedConversation = conversation;
618
+ this.SelectedConversation = conversation;
429
619
  }
430
620
  else {
431
621
  // Conversation might not be loaded yet - the chat area will handle loading
432
- this.selectedConversation = null;
622
+ this.SelectedConversation = null;
433
623
  }
434
624
  // Update URL if not skipping
435
625
  if (!this.skipUrlUpdate) {
@@ -443,17 +633,17 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
443
633
  updateUrl() {
444
634
  const queryParams = {};
445
635
  // Add conversation ID
446
- if (this.selectedConversationId) {
447
- queryParams['conversationId'] = this.selectedConversationId;
636
+ if (this.SelectedConversationId) {
637
+ queryParams['conversationId'] = this.SelectedConversationId;
448
638
  }
449
639
  else {
450
640
  queryParams['conversationId'] = null;
451
641
  }
452
642
  // Add artifact ID if we have a pending artifact (will be cleared once opened)
453
- if (this.pendingArtifactId) {
454
- queryParams['artifactId'] = this.pendingArtifactId;
455
- if (this.pendingArtifactVersionNumber) {
456
- queryParams['versionNumber'] = this.pendingArtifactVersionNumber.toString();
643
+ if (this.PendingArtifactId) {
644
+ queryParams['artifactId'] = this.PendingArtifactId;
645
+ if (this.PendingArtifactVersionNumber) {
646
+ queryParams['versionNumber'] = this.PendingArtifactVersionNumber.toString();
457
647
  }
458
648
  }
459
649
  else {
@@ -473,11 +663,11 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
473
663
  * Update the tab/browser title based on the currently selected conversation.
474
664
  */
475
665
  updateTabTitle() {
476
- if (this.isNewUnsavedConversation || !this.selectedConversation) {
666
+ if (this.IsNewUnsavedConversation || !this.SelectedConversation) {
477
667
  this.NotifyDisplayNameChanged('Conversations');
478
668
  return;
479
669
  }
480
- const name = this.selectedConversation.Name;
670
+ const name = this.SelectedConversation.Name;
481
671
  if (name) {
482
672
  this.NotifyDisplayNameChanged(name);
483
673
  }
@@ -485,9 +675,13 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
485
675
  /**
486
676
  * Get the environment ID from configuration or use default
487
677
  */
488
- get environmentId() {
678
+ get EnvironmentId() {
489
679
  return this.Data?.Configuration?.environmentId || MJEnvironmentEntityExtended.DefaultEnvironmentID;
490
680
  }
681
+ /** @deprecated Use {@link EnvironmentId}. */
682
+ get environmentId() {
683
+ return this.EnvironmentId;
684
+ }
491
685
  /**
492
686
  * Get the display name for chat conversations
493
687
  */
@@ -513,43 +707,55 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
513
707
  * After the list refreshes, also reload messages in the active chat area so any
514
708
  * new agent responses are visible without a full page reload.
515
709
  */
710
+ OnRefreshRequested() {
711
+ void this.ChatArea?.reloadMessages();
712
+ }
713
+ /** @deprecated Use {@link OnRefreshRequested}. */
516
714
  onRefreshRequested() {
517
- void this.chatArea?.reloadMessages();
715
+ return this.OnRefreshRequested();
518
716
  }
519
717
  /**
520
718
  * Handle conversation deletion from the list.
521
719
  * If the deleted conversation was selected, navigate to the first remaining conversation.
522
720
  */
523
- onConversationDeleted(deletedId) {
524
- if (this.selectedConversationId === deletedId) {
721
+ OnConversationDeleted(deletedId) {
722
+ if (this.SelectedConversationId === deletedId) {
525
723
  const remaining = this.engine.Conversations.filter(c => !UUIDsEqual(c.ID, deletedId));
526
724
  if (remaining.length > 0) {
527
725
  void this.selectConversation(remaining[0].ID);
528
726
  this.updateUrl();
529
727
  }
530
728
  else {
531
- this.selectedConversationId = null;
532
- this.selectedConversation = null;
533
- this.selectedThreadId = null;
534
- this.isNewUnsavedConversation = true;
729
+ this.SelectedConversationId = null;
730
+ this.SelectedConversation = null;
731
+ this.SelectedThreadId = null;
732
+ this.IsNewUnsavedConversation = true;
535
733
  this.updateUrl();
536
734
  }
537
735
  }
538
736
  }
737
+ /** @deprecated Use {@link OnConversationDeleted}. */
738
+ onConversationDeleted(deletedId) {
739
+ return this.OnConversationDeleted(deletedId);
740
+ }
539
741
  /**
540
742
  * Handle conversation selection from the list
541
743
  */
542
- async onConversationSelected(conversationId) {
744
+ async OnConversationSelected(conversationId) {
543
745
  await this.selectConversation(conversationId);
544
- this.selectedThreadId = null; // Clear thread when switching conversations
545
- this.isNewUnsavedConversation = false;
746
+ this.SelectedThreadId = null; // Clear thread when switching conversations
747
+ this.IsNewUnsavedConversation = false;
546
748
  this.updateUrl();
547
749
  this.updateTabTitle();
548
750
  // Auto-collapse if mobile OR if sidebar is not pinned
549
- if (this.isMobileView || !this.isSidebarPinned) {
550
- this.collapseSidebar();
751
+ if (this.IsMobileView || !this.IsSidebarPinned) {
752
+ this.CollapseSidebar();
551
753
  }
552
754
  }
755
+ /** @deprecated Use {@link OnConversationSelected}. */
756
+ async onConversationSelected(conversationId) {
757
+ return this.OnConversationSelected(conversationId);
758
+ }
553
759
  onWindowResize() {
554
760
  this.checkMobileView();
555
761
  }
@@ -558,7 +764,7 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
558
764
  */
559
765
  onDocumentClick(event) {
560
766
  // Only handle when sidebar is expanded but unpinned
561
- if (this.isSidebarCollapsed || this.isSidebarPinned) {
767
+ if (this.IsSidebarCollapsed || this.IsSidebarPinned) {
562
768
  return;
563
769
  }
564
770
  // Check if click is outside the sidebar
@@ -567,48 +773,60 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
567
773
  const expandHandle = target.closest('.sidebar-expand-handle');
568
774
  // If click is outside sidebar and expand handle, collapse it
569
775
  if (!sidebarElement && !expandHandle) {
570
- this.collapseSidebar();
776
+ this.CollapseSidebar();
571
777
  }
572
778
  }
573
779
  /**
574
780
  * Check if we're in mobile view and handle state accordingly
575
781
  */
576
782
  checkMobileView() {
577
- const wasMobile = this.isMobileView;
578
- this.isMobileView = window.innerWidth < 768;
579
- if (this.isMobileView && !wasMobile) {
783
+ const wasMobile = this.IsMobileView;
784
+ this.IsMobileView = window.innerWidth < 768;
785
+ if (this.IsMobileView && !wasMobile) {
580
786
  // Switched to mobile - default to collapsed
581
- this.isSidebarCollapsed = true;
787
+ this.IsSidebarCollapsed = true;
582
788
  }
583
789
  }
584
790
  /**
585
791
  * Collapse sidebar
586
792
  */
793
+ CollapseSidebar() {
794
+ this.IsSidebarCollapsed = true;
795
+ }
796
+ /** @deprecated Use {@link CollapseSidebar}. */
587
797
  collapseSidebar() {
588
- this.isSidebarCollapsed = true;
798
+ return this.CollapseSidebar();
589
799
  }
590
800
  /**
591
801
  * Expand sidebar (pinned - stays open until unpinned)
592
802
  */
593
- expandSidebar() {
594
- this.isSidebarCollapsed = false;
595
- this.isSidebarPinned = true; // Pin it so it stays open
803
+ ExpandSidebar() {
804
+ this.IsSidebarCollapsed = false;
805
+ this.IsSidebarPinned = true; // Pin it so it stays open
596
806
  this.saveSidebarState();
597
807
  }
808
+ /** @deprecated Use {@link ExpandSidebar}. */
809
+ expandSidebar() {
810
+ return this.ExpandSidebar();
811
+ }
598
812
  /**
599
813
  * Handle sidebar resize start
600
814
  */
601
- onSidebarResizeStart(event) {
815
+ OnSidebarResizeStart(event) {
602
816
  event.preventDefault();
603
817
  this.isSidebarResizing = true;
604
818
  this.sidebarResizeStartX = event.clientX;
605
- this.sidebarResizeStartWidth = this.sidebarWidth;
819
+ this.sidebarResizeStartWidth = this.SidebarWidth;
606
820
  // Disable transitions during resize for immediate feedback
607
- this.sidebarTransitionsEnabled = false;
821
+ this.SidebarTransitionsEnabled = false;
608
822
  // Add event listeners for mousemove and mouseup
609
823
  document.addEventListener('mousemove', this.onSidebarResizeMove);
610
824
  document.addEventListener('mouseup', this.onSidebarResizeEnd);
611
825
  }
826
+ /** @deprecated Use {@link OnSidebarResizeStart}. */
827
+ onSidebarResizeStart(event) {
828
+ return this.OnSidebarResizeStart(event);
829
+ }
612
830
  /**
613
831
  * Handle sidebar resize move (bound method for proper 'this' context)
614
832
  */
@@ -618,7 +836,7 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
618
836
  const delta = event.clientX - this.sidebarResizeStartX;
619
837
  const newWidth = this.sidebarResizeStartWidth + delta;
620
838
  // Clamp to min/max bounds
621
- this.sidebarWidth = Math.max(this.SIDEBAR_MIN_WIDTH, Math.min(this.SIDEBAR_MAX_WIDTH, newWidth));
839
+ this.SidebarWidth = Math.max(this.SIDEBAR_MIN_WIDTH, Math.min(this.SIDEBAR_MAX_WIDTH, newWidth));
622
840
  this.cdr.detectChanges();
623
841
  };
624
842
  /**
@@ -629,7 +847,7 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
629
847
  return;
630
848
  this.isSidebarResizing = false;
631
849
  // Re-enable transitions for collapse/expand animations
632
- this.sidebarTransitionsEnabled = true;
850
+ this.SidebarTransitionsEnabled = true;
633
851
  // Remove event listeners
634
852
  document.removeEventListener('mousemove', this.onSidebarResizeMove);
635
853
  document.removeEventListener('mouseup', this.onSidebarResizeEnd);
@@ -639,18 +857,26 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
639
857
  /**
640
858
  * Pin sidebar - keep it open after selection
641
859
  */
642
- pinSidebar() {
643
- this.isSidebarPinned = true;
860
+ PinSidebar() {
861
+ this.IsSidebarPinned = true;
644
862
  this.saveSidebarState();
645
863
  }
864
+ /** @deprecated Use {@link PinSidebar}. */
865
+ pinSidebar() {
866
+ return this.PinSidebar();
867
+ }
646
868
  /**
647
869
  * Unpin sidebar - will auto-collapse on next selection
648
870
  */
649
- unpinSidebar() {
650
- this.isSidebarPinned = false;
651
- this.collapseSidebar();
871
+ UnpinSidebar() {
872
+ this.IsSidebarPinned = false;
873
+ this.CollapseSidebar();
652
874
  this.saveSidebarState();
653
875
  }
876
+ /** @deprecated Use {@link UnpinSidebar}. */
877
+ unpinSidebar() {
878
+ return this.UnpinSidebar();
879
+ }
654
880
  /**
655
881
  * Save sidebar state to User Settings (server only - no localStorage fallback)
656
882
  * Uses debouncing to avoid excessive database writes
@@ -669,14 +895,14 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
669
895
  */
670
896
  async saveSidebarStateToServer() {
671
897
  try {
672
- const userId = this.currentUser?.ID;
898
+ const userId = this.CurrentUser?.ID;
673
899
  if (!userId) {
674
900
  return;
675
901
  }
676
902
  const stateToSave = {
677
- collapsed: this.isSidebarCollapsed,
678
- pinned: this.isSidebarPinned,
679
- width: this.sidebarWidth
903
+ collapsed: this.IsSidebarCollapsed,
904
+ pinned: this.IsSidebarPinned,
905
+ width: this.SidebarWidth
680
906
  };
681
907
  const engine = UserInfoEngine.Instance;
682
908
  const md = this.ProviderToUse;
@@ -701,126 +927,154 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
701
927
  */
702
928
  async loadSidebarState() {
703
929
  try {
704
- const userId = this.currentUser?.ID;
930
+ const userId = this.CurrentUser?.ID;
705
931
  if (userId) {
706
932
  // Load from cached User Settings
707
933
  const engine = UserInfoEngine.Instance;
708
934
  const setting = engine.UserSettings.find(s => s.Setting === this.USER_SETTING_SIDEBAR_KEY);
709
935
  if (setting?.Value) {
710
936
  const state = JSON.parse(setting.Value);
711
- this.isSidebarCollapsed = state.collapsed ?? true;
712
- this.isSidebarPinned = state.pinned ?? false;
713
- this.sidebarWidth = state.width ?? 300;
937
+ this.IsSidebarCollapsed = state.collapsed ?? true;
938
+ this.IsSidebarPinned = state.pinned ?? false;
939
+ this.SidebarWidth = state.width ?? 300;
714
940
  // Clamp width to valid range
715
- this.sidebarWidth = Math.max(this.SIDEBAR_MIN_WIDTH, Math.min(this.SIDEBAR_MAX_WIDTH, this.sidebarWidth));
716
- this.isSidebarSettingsLoaded = true;
941
+ this.SidebarWidth = Math.max(this.SIDEBAR_MIN_WIDTH, Math.min(this.SIDEBAR_MAX_WIDTH, this.SidebarWidth));
942
+ this.IsSidebarSettingsLoaded = true;
717
943
  return;
718
944
  }
719
945
  }
720
946
  // No saved state found - NEW USER DEFAULT:
721
947
  // Start with sidebar collapsed and show new conversation screen
722
- this.isSidebarCollapsed = true;
723
- this.isSidebarPinned = false;
724
- this.sidebarWidth = 300;
725
- this.isNewUnsavedConversation = true;
726
- this.isSidebarSettingsLoaded = true;
948
+ this.IsSidebarCollapsed = true;
949
+ this.IsSidebarPinned = false;
950
+ this.SidebarWidth = 300;
951
+ this.IsNewUnsavedConversation = true;
952
+ this.IsSidebarSettingsLoaded = true;
727
953
  }
728
954
  catch (error) {
729
955
  console.warn('Failed to load sidebar state:', error);
730
956
  // Default to collapsed for new users on error
731
- this.isSidebarCollapsed = true;
732
- this.isSidebarPinned = false;
733
- this.sidebarWidth = 300;
734
- this.isSidebarSettingsLoaded = true;
957
+ this.IsSidebarCollapsed = true;
958
+ this.IsSidebarPinned = false;
959
+ this.SidebarWidth = 300;
960
+ this.IsSidebarSettingsLoaded = true;
735
961
  }
736
962
  }
737
963
  /**
738
964
  * Handle new conversation request from the list
739
965
  */
740
- onNewConversationRequested() {
741
- this.selectedConversationId = null;
742
- this.selectedConversation = null;
743
- this.selectedThreadId = null;
744
- this.isNewUnsavedConversation = true;
966
+ OnNewConversationRequested() {
967
+ this.SelectedConversationId = null;
968
+ this.SelectedConversation = null;
969
+ this.SelectedThreadId = null;
970
+ this.IsNewUnsavedConversation = true;
745
971
  this.updateUrl();
746
972
  this.NotifyDisplayNameChanged('New Conversation');
747
973
  // Auto-collapse if mobile OR if sidebar is not pinned
748
- if (this.isMobileView || !this.isSidebarPinned) {
749
- this.collapseSidebar();
974
+ if (this.IsMobileView || !this.IsSidebarPinned) {
975
+ this.CollapseSidebar();
750
976
  }
751
977
  }
978
+ /** @deprecated Use {@link OnNewConversationRequested}. */
979
+ onNewConversationRequested() {
980
+ return this.OnNewConversationRequested();
981
+ }
752
982
  /**
753
983
  * Handle conversation created from chat area (after first message in new conversation).
754
984
  * The event now includes pending message and attachments for atomic state update.
755
985
  */
756
- async onConversationCreated(event) {
986
+ async OnConversationCreated(event) {
757
987
  // Set ALL state atomically before Angular change detection runs
758
- this.pendingMessageToSend = event.pendingMessage || null;
759
- this.pendingAttachmentsToSend = event.pendingAttachments || null;
760
- this.selectedConversationId = event.conversation.ID;
761
- this.selectedConversation = event.conversation;
762
- this.isNewUnsavedConversation = false;
988
+ this.PendingMessageToSend = event.pendingMessage || null;
989
+ this.PendingAttachmentsToSend = event.pendingAttachments || null;
990
+ this.SelectedConversationId = event.conversation.ID;
991
+ this.SelectedConversation = event.conversation;
992
+ this.IsNewUnsavedConversation = false;
763
993
  this.bridge.SetActiveFromWorkspace(event.conversation.ID);
764
994
  this.updateUrl();
765
995
  this.updateTabTitle();
766
996
  }
997
+ /** @deprecated Use {@link OnConversationCreated}. */
998
+ async onConversationCreated(event) {
999
+ return this.OnConversationCreated(event);
1000
+ }
767
1001
  /**
768
1002
  * Handle conversation rename event
769
1003
  */
770
- onConversationRenamed(event) {
1004
+ OnConversationRenamed(event) {
771
1005
  // Trigger rename animation in the list
772
- this.renamedConversationId = event.conversationId;
1006
+ this.RenamedConversationId = event.conversationId;
773
1007
  // Update tab title with the new name
774
1008
  if (event.name) {
775
1009
  this.NotifyDisplayNameChanged(event.name);
776
1010
  }
777
1011
  // Clear the animation trigger after it completes
778
1012
  setTimeout(() => {
779
- this.renamedConversationId = null;
1013
+ this.RenamedConversationId = null;
780
1014
  }, 1500);
781
1015
  }
1016
+ /** @deprecated Use {@link OnConversationRenamed}. */
1017
+ onConversationRenamed(event) {
1018
+ return this.OnConversationRenamed(event);
1019
+ }
782
1020
  /**
783
1021
  * Handle thread opened event
784
1022
  */
1023
+ OnThreadOpened(threadId) {
1024
+ this.SelectedThreadId = threadId;
1025
+ }
1026
+ /** @deprecated Use {@link OnThreadOpened}. */
785
1027
  onThreadOpened(threadId) {
786
- this.selectedThreadId = threadId;
1028
+ return this.OnThreadOpened(threadId);
787
1029
  }
788
1030
  /**
789
1031
  * Handle thread closed event
790
1032
  */
1033
+ OnThreadClosed() {
1034
+ this.SelectedThreadId = null;
1035
+ }
1036
+ /** @deprecated Use {@link OnThreadClosed}. */
791
1037
  onThreadClosed() {
792
- this.selectedThreadId = null;
1038
+ return this.OnThreadClosed();
793
1039
  }
794
1040
  /**
795
1041
  * Handle pending artifact consumed event
796
1042
  */
797
- onPendingArtifactConsumed() {
798
- this.pendingArtifactId = null;
799
- this.pendingArtifactConversationId = null;
800
- this.pendingArtifactVersionNumber = null;
1043
+ OnPendingArtifactConsumed() {
1044
+ this.PendingArtifactId = null;
1045
+ this.PendingArtifactConversationId = null;
1046
+ this.PendingArtifactVersionNumber = null;
801
1047
  // Update URL to remove artifact params
802
1048
  this.updateUrl();
803
1049
  }
1050
+ /** @deprecated Use {@link OnPendingArtifactConsumed}. */
1051
+ onPendingArtifactConsumed() {
1052
+ return this.OnPendingArtifactConsumed();
1053
+ }
804
1054
  /**
805
1055
  * Handle pending message consumed event
806
1056
  */
1057
+ OnPendingMessageConsumed() {
1058
+ this.PendingMessageToSend = null;
1059
+ this.PendingAttachmentsToSend = null;
1060
+ }
1061
+ /** @deprecated Use {@link OnPendingMessageConsumed}. */
807
1062
  onPendingMessageConsumed() {
808
- this.pendingMessageToSend = null;
809
- this.pendingAttachmentsToSend = null;
1063
+ return this.OnPendingMessageConsumed();
810
1064
  }
811
1065
  /**
812
1066
  * Handle pending message requested event (from empty state creating conversation).
813
1067
  * @deprecated Use onConversationCreated with pendingMessage instead - this is kept for backwards compatibility.
814
1068
  */
815
1069
  onPendingMessageRequested(event) {
816
- this.pendingMessageToSend = event.text;
817
- this.pendingAttachmentsToSend = event.attachments || null;
1070
+ this.PendingMessageToSend = event.text;
1071
+ this.PendingAttachmentsToSend = event.attachments || null;
818
1072
  }
819
1073
  /**
820
1074
  * Handle navigation request from artifact viewer panel within the chat area.
821
1075
  * Converts the link event to a generic navigation request and uses NavigationService.
822
1076
  */
823
- onArtifactLinkClicked(event) {
1077
+ OnArtifactLinkClicked(event) {
824
1078
  // Map the link type to the nav item name
825
1079
  const navItemName = event.type === 'conversation' ? 'Conversations' : 'Collections';
826
1080
  // Build configuration params to pass to the target resource
@@ -841,23 +1095,76 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
841
1095
  // Navigate using the generic nav item method
842
1096
  this.navigationService.OpenNavItemByName(navItemName, params);
843
1097
  }
1098
+ /** @deprecated Use {@link OnArtifactLinkClicked}. */
1099
+ onArtifactLinkClicked(event) {
1100
+ return this.OnArtifactLinkClicked(event);
1101
+ }
844
1102
  /**
845
1103
  * Handle entity record open request from chat area (from React component grids).
846
1104
  * Uses NavigationService to open the record in a new tab.
847
1105
  */
848
- onOpenEntityRecord(event) {
1106
+ OnOpenEntityRecord(event) {
849
1107
  this.navigationService.OpenEntityRecord(event.entityName, event.compositeKey);
850
1108
  }
1109
+ // ========================================
1110
+ // CROSS-ENTITY SEARCH PANEL
1111
+ // ========================================
1112
+ /** Whether the cross-entity search panel is open. */
1113
+ IsSearchPanelOpen = false;
1114
+ /** Term the panel opens with, handed over from the conversation list's own filter. */
1115
+ SearchSeedQuery = '';
1116
+ /**
1117
+ * Open the cross-entity search panel, carrying over the term the user had already typed
1118
+ * into the conversation list's filter so they do not retype it.
1119
+ */
1120
+ OpenSearch(query = '') {
1121
+ this.SearchSeedQuery = query;
1122
+ this.IsSearchPanelOpen = true;
1123
+ }
1124
+ /** Close the cross-entity search panel. */
1125
+ CloseSearch() {
1126
+ this.IsSearchPanelOpen = false;
1127
+ }
1128
+ /**
1129
+ * Route a search result to the right Explorer surface.
1130
+ *
1131
+ * Explorer renders each chat surface as a separate resource, so results for another
1132
+ * surface go through NavigationService. Conversations and messages resolve to a
1133
+ * conversation, which this component owns, so they are selected in place.
1134
+ */
1135
+ OnSearchResultSelected(result) {
1136
+ this.CloseSearch();
1137
+ const route = ResolveChatSearchRoute(result);
1138
+ switch (route?.Kind) {
1139
+ case 'conversation':
1140
+ void this.OnConversationSelected(route.ConversationId);
1141
+ break;
1142
+ case 'artifact':
1143
+ this.navigationService.OpenArtifact(route.ArtifactId, route.Title);
1144
+ break;
1145
+ case 'nav-item':
1146
+ void this.navigationService.OpenNavItemByName(route.NavItemName, route.Configuration);
1147
+ break;
1148
+ }
1149
+ }
1150
+ /** @deprecated Use {@link OnOpenEntityRecord}. */
1151
+ onOpenEntityRecord(event) {
1152
+ return this.OnOpenEntityRecord(event);
1153
+ }
851
1154
  /**
852
1155
  * Handle navigation request from artifact viewer plugins.
853
1156
  * Opens the target nav item (switching apps if needed) then applies query params to the URL.
854
1157
  */
855
- async onNavigationRequest(event) {
1158
+ async OnNavigationRequest(event) {
856
1159
  const appId = event.appName ? this.resolveAppId(event.appName) : undefined;
857
1160
  await this.navigationService.OpenNavItemByName(event.navItemName, undefined, appId, {
858
1161
  queryParams: event.queryParams
859
1162
  });
860
1163
  }
1164
+ /** @deprecated Use {@link OnNavigationRequest}. */
1165
+ async onNavigationRequest(event) {
1166
+ return this.OnNavigationRequest(event);
1167
+ }
861
1168
  /**
862
1169
  * Resolve an application name to its ID.
863
1170
  */
@@ -892,10 +1199,10 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
892
1199
  * the resourceId is an agent-internal ID, not a database artifact ID.
893
1200
  */
894
1201
  openMostRecentArtifact() {
895
- if (!this.chatArea)
1202
+ if (!this.ChatArea)
896
1203
  return;
897
1204
  // Find the last artifact across all messages
898
- const artifactMap = this.chatArea.artifactsByDetailId;
1205
+ const artifactMap = this.ChatArea.artifactsByDetailId;
899
1206
  let latestArtifact = null;
900
1207
  for (const artifacts of artifactMap.values()) {
901
1208
  if (artifacts.length > 0) {
@@ -907,7 +1214,7 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
907
1214
  }
908
1215
  }
909
1216
  if (latestArtifact) {
910
- this.chatArea.onArtifactClicked(latestArtifact);
1217
+ this.ChatArea.onArtifactClicked(latestArtifact);
911
1218
  }
912
1219
  else {
913
1220
  console.warn('No artifacts found in conversation to open for Report/Dashboard command');
@@ -918,16 +1225,19 @@ let ChatConversationsResource = class ChatConversationsResource extends BaseReso
918
1225
  i0.ɵɵviewQuery(_c0, 5)(_c1, 5);
919
1226
  } if (rf & 2) {
920
1227
  let _t;
921
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.conversationList = _t.first);
922
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.chatArea = _t.first);
1228
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.ConversationList = _t.first);
1229
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.ChatArea = _t.first);
923
1230
  } }, hostBindings: function ChatConversationsResource_HostBindings(rf, ctx) { if (rf & 1) {
924
1231
  i0.ɵɵlistener("resize", function ChatConversationsResource_resize_HostBindingHandler() { return ctx.onWindowResize(); }, i0.ɵɵresolveWindow)("click", function ChatConversationsResource_click_HostBindingHandler($event) { return ctx.onDocumentClick($event); }, i0.ɵɵresolveDocument);
925
- } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 1, consts: [["conversationList", ""], ["chatArea", ""], [1, "chat-conversations-container"], [1, "initializing-container"], [1, "mobile-sidebar-backdrop"], [1, "conversation-sidebar", 3, "collapsed", "no-transition", "width"], [1, "sidebar-resize-handle"], [1, "conversation-main"], [3, "environmentId", "currentUser", "conversationId", "conversation", "threadId", "isNewConversation", "pendingMessage", "pendingAttachments", "pendingArtifactId", "pendingArtifactConversationId", "pendingArtifactVersionNumber", "showSidebarToggle", "composerAgentMention"], [1, "mobile-sidebar-backdrop", 3, "click"], [1, "conversation-sidebar"], [3, "conversationSelected", "conversationDeleted", "newConversationRequested", "pinSidebarRequested", "unpinSidebarRequested", "refreshRequested", "environmentId", "currentUser", "selectedConversationId", "renamedConversationId", "isSidebarPinned", "isMobileView"], [3, "openEntityRecord", "openConversation"], [1, "sidebar-resize-handle", 3, "mousedown"], [3, "sidebarToggleClicked", "conversationRenamed", "conversationCreated", "threadOpened", "threadClosed", "pendingArtifactConsumed", "pendingMessageConsumed", "pendingMessageRequested", "artifactLinkClicked", "openEntityRecord", "navigationRequest", "composerAgentMentionConsumed", "environmentId", "currentUser", "conversationId", "conversation", "threadId", "isNewConversation", "pendingMessage", "pendingAttachments", "pendingArtifactId", "pendingArtifactConversationId", "pendingArtifactVersionNumber", "showSidebarToggle", "composerAgentMention"], ["text", "Initializing...", "size", "large"]], template: function ChatConversationsResource_Template(rf, ctx) { if (rf & 1) {
1232
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 2, consts: [["conversationList", ""], ["chatArea", ""], [1, "chat-conversations-container"], [1, "initializing-container"], [3, "InitialQuery", "IsOpen", "EnvironmentId", "CurrentUser"], [1, "mobile-sidebar-backdrop"], [1, "conversation-sidebar", 3, "collapsed", "no-transition", "width"], [1, "sidebar-resize-handle"], [1, "conversation-main"], [3, "environmentId", "currentUser", "conversationId", "conversation", "threadId", "isNewConversation", "pendingMessage", "pendingAttachments", "pendingArtifactId", "pendingArtifactConversationId", "pendingArtifactVersionNumber", "showSidebarToggle", "composerAgentMention"], [1, "mobile-sidebar-backdrop", 3, "click"], [1, "conversation-sidebar"], [3, "conversationSelected", "conversationDeleted", "newConversationRequested", "pinSidebarRequested", "unpinSidebarRequested", "refreshRequested", "SearchEscalated", "environmentId", "currentUser", "selectedConversationId", "renamedConversationId", "isSidebarPinned", "isMobileView"], [3, "openEntityRecord", "openConversation"], [1, "sidebar-resize-handle", 3, "mousedown"], [3, "sidebarToggleClicked", "conversationRenamed", "conversationCreated", "threadOpened", "threadClosed", "pendingArtifactConsumed", "pendingMessageConsumed", "pendingMessageRequested", "artifactLinkClicked", "openEntityRecord", "navigationRequest", "composerAgentMentionConsumed", "environmentId", "currentUser", "conversationId", "conversation", "threadId", "isNewConversation", "pendingMessage", "pendingAttachments", "pendingArtifactId", "pendingArtifactConversationId", "pendingArtifactVersionNumber", "showSidebarToggle", "composerAgentMention"], ["text", "Initializing...", "size", "large"], [3, "close", "ResultSelected", "InitialQuery", "IsOpen", "EnvironmentId", "CurrentUser"]], template: function ChatConversationsResource_Template(rf, ctx) { if (rf & 1) {
926
1233
  i0.ɵɵconditionalCreate(0, ChatConversationsResource_Conditional_0_Template, 6, 4, "div", 2)(1, ChatConversationsResource_Conditional_1_Template, 2, 0, "div", 3);
927
- i0.ɵɵelement(2, "mj-toast");
1234
+ i0.ɵɵconditionalCreate(2, ChatConversationsResource_Conditional_2_Template, 1, 4, "mj-search-panel", 4);
1235
+ i0.ɵɵelement(3, "mj-toast");
928
1236
  } if (rf & 2) {
929
1237
  i0.ɵɵconditional(ctx.isReady ? 0 : 1);
930
- } }, dependencies: [i1.RoutinesSectionComponent, i1.ConversationListComponent, i1.ConversationChatAreaComponent, i1.ToastComponent, i2.LoadingComponent], styles: ["\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n }\n\n .chat-conversations-container {\n display: flex;\n width: 100%;\n height: 100%;\n flex: 1;\n overflow: hidden;\n position: relative;\n }\n\n .conversation-sidebar {\n flex-shrink: 0;\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: var(--mj-bg-surface-sunken);\n transition: width 0.3s ease;\n }\n\n /* Conversation list scrolls; the routines section stays pinned at the bottom */\n .conversation-sidebar mj-conversation-list {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n }\n\n .conversation-sidebar mj-conversation-routines-section {\n flex-shrink: 0;\n }\n\n /* Disable transitions during initial load to prevent jarring animation */\n .conversation-sidebar.no-transition {\n transition: none !important;\n }\n\n .conversation-sidebar.collapsed {\n width: 0 !important;\n min-width: 0;\n border-right: none;\n overflow: hidden;\n }\n\n /* Resize handle for sidebar */\n .sidebar-resize-handle {\n width: 4px;\n background: transparent;\n cursor: ew-resize;\n flex-shrink: 0;\n position: relative;\n transition: background-color 0.2s;\n }\n\n .sidebar-resize-handle:hover {\n background: var(--mj-brand-primary);\n }\n\n .sidebar-resize-handle:active {\n background: var(--mj-brand-primary-hover);\n }\n\n .sidebar-resize-handle::before {\n content: '';\n position: absolute;\n left: -4px;\n right: -4px;\n top: 0;\n bottom: 0;\n cursor: ew-resize;\n }\n\n .conversation-main {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n\n .initializing-container {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n flex: 1;\n }\n\n /* Mobile: sidebar slides over the chat instead of squishing it.\n The chat area always fills the full width; the sidebar overlays on\n top and is dismissed by tapping the backdrop. */\n @media (max-width: 767px) {\n .conversation-sidebar {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n width: min(85%, 320px) !important;\n z-index: 1000;\n transform: translateX(-100%);\n transition: transform 0.3s ease;\n box-shadow: 2px 0 12px color-mix(in srgb, var(--mj-text-primary) 25%, transparent);\n }\n\n /* Keep a fixed width in both states so only the transform animates\n (avoids text reflow during the slide). */\n .conversation-sidebar.collapsed {\n width: min(85%, 320px) !important;\n border-right: 1px solid var(--mj-border-default);\n overflow-y: auto;\n }\n\n .conversation-sidebar:not(.collapsed) {\n transform: translateX(0);\n }\n\n /* No drag-resize on mobile */\n .sidebar-resize-handle {\n display: none;\n }\n\n .mobile-sidebar-backdrop {\n position: absolute;\n inset: 0;\n background: var(--mj-bg-overlay);\n z-index: 999;\n border: none;\n padding: 0;\n cursor: pointer;\n animation: chatBackdropFade 0.2s ease;\n }\n\n @keyframes chatBackdropFade {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n }\n "], encapsulation: 2 });
1238
+ i0.ɵɵadvance(2);
1239
+ i0.ɵɵconditional(ctx.CurrentUser ? 2 : -1);
1240
+ } }, dependencies: [i1.RoutinesSectionComponent, i1.ConversationListComponent, i1.ConversationChatAreaComponent, i1.SearchPanelComponent, i1.ToastComponent, i2.LoadingComponent], styles: ["\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n }\n\n .chat-conversations-container {\n display: flex;\n width: 100%;\n height: 100%;\n flex: 1;\n overflow: hidden;\n position: relative;\n }\n\n .conversation-sidebar {\n flex-shrink: 0;\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: var(--mj-bg-surface-sunken);\n transition: width 0.3s ease;\n }\n\n /* Conversation list scrolls; the routines section stays pinned at the bottom */\n .conversation-sidebar mj-conversation-list {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n }\n\n .conversation-sidebar mj-conversation-routines-section {\n flex-shrink: 0;\n }\n\n /* Disable transitions during initial load to prevent jarring animation */\n .conversation-sidebar.no-transition {\n transition: none !important;\n }\n\n .conversation-sidebar.collapsed {\n width: 0 !important;\n min-width: 0;\n border-right: none;\n overflow: hidden;\n }\n\n /* Resize handle for sidebar */\n .sidebar-resize-handle {\n width: 4px;\n background: transparent;\n cursor: ew-resize;\n flex-shrink: 0;\n position: relative;\n transition: background-color 0.2s;\n }\n\n .sidebar-resize-handle:hover {\n background: var(--mj-brand-primary);\n }\n\n .sidebar-resize-handle:active {\n background: var(--mj-brand-primary-hover);\n }\n\n .sidebar-resize-handle::before {\n content: '';\n position: absolute;\n left: -4px;\n right: -4px;\n top: 0;\n bottom: 0;\n cursor: ew-resize;\n }\n\n .conversation-main {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n\n .initializing-container {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n flex: 1;\n }\n\n /* Mobile: sidebar slides over the chat instead of squishing it.\n The chat area always fills the full width; the sidebar overlays on\n top and is dismissed by tapping the backdrop. */\n @media (max-width: 767px) {\n .conversation-sidebar {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n width: min(85%, 320px) !important;\n z-index: 1000;\n transform: translateX(-100%);\n transition: transform 0.3s ease;\n box-shadow: 2px 0 12px color-mix(in srgb, var(--mj-text-primary) 25%, transparent);\n }\n\n /* Keep a fixed width in both states so only the transform animates\n (avoids text reflow during the slide). */\n .conversation-sidebar.collapsed {\n width: min(85%, 320px) !important;\n border-right: 1px solid var(--mj-border-default);\n overflow-y: auto;\n }\n\n .conversation-sidebar:not(.collapsed) {\n transform: translateX(0);\n }\n\n /* No drag-resize on mobile */\n .sidebar-resize-handle {\n display: none;\n }\n\n .mobile-sidebar-backdrop {\n position: absolute;\n inset: 0;\n background: var(--mj-bg-overlay);\n z-index: 999;\n border: none;\n padding: 0;\n cursor: pointer;\n animation: chatBackdropFade 0.2s ease;\n }\n\n @keyframes chatBackdropFade {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n }\n "], encapsulation: 2 });
931
1241
  };
932
1242
  ChatConversationsResource = __decorate([
933
1243
  RegisterClass(BaseResourceComponent, 'ChatConversationsResource')
@@ -962,7 +1272,8 @@ export { ChatConversationsResource };
962
1272
  (newConversationRequested)="onNewConversationRequested()"
963
1273
  (pinSidebarRequested)="pinSidebar()"
964
1274
  (unpinSidebarRequested)="unpinSidebar()"
965
- (refreshRequested)="onRefreshRequested()">
1275
+ (refreshRequested)="onRefreshRequested()"
1276
+ (SearchEscalated)="OpenSearch($event)">
966
1277
  </mj-conversation-list>
967
1278
  <!-- Routines — pinned at the very bottom of the sidebar. Gated inside the
968
1279
  section component by Read permission on 'MJ: User Routines'. -->
@@ -1018,13 +1329,25 @@ export { ChatConversationsResource };
1018
1329
  </div>
1019
1330
  }
1020
1331
 
1332
+ <!-- Cross-entity search panel (conversations / messages / artifacts / collections / tasks) -->
1333
+ @if (CurrentUser) {
1334
+ <mj-search-panel
1335
+ [InitialQuery]="SearchSeedQuery"
1336
+ [IsOpen]="IsSearchPanelOpen"
1337
+ [EnvironmentId]="EnvironmentId"
1338
+ [CurrentUser]="CurrentUser"
1339
+ (close)="CloseSearch()"
1340
+ (ResultSelected)="OnSearchResultSelected($event)">
1341
+ </mj-search-panel>
1342
+ }
1343
+
1021
1344
  <!-- Toast notifications container -->
1022
1345
  <mj-toast></mj-toast>
1023
1346
  `, encapsulation: ViewEncapsulation.None, styles: ["\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n }\n\n .chat-conversations-container {\n display: flex;\n width: 100%;\n height: 100%;\n flex: 1;\n overflow: hidden;\n position: relative;\n }\n\n .conversation-sidebar {\n flex-shrink: 0;\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: var(--mj-bg-surface-sunken);\n transition: width 0.3s ease;\n }\n\n /* Conversation list scrolls; the routines section stays pinned at the bottom */\n .conversation-sidebar mj-conversation-list {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n }\n\n .conversation-sidebar mj-conversation-routines-section {\n flex-shrink: 0;\n }\n\n /* Disable transitions during initial load to prevent jarring animation */\n .conversation-sidebar.no-transition {\n transition: none !important;\n }\n\n .conversation-sidebar.collapsed {\n width: 0 !important;\n min-width: 0;\n border-right: none;\n overflow: hidden;\n }\n\n /* Resize handle for sidebar */\n .sidebar-resize-handle {\n width: 4px;\n background: transparent;\n cursor: ew-resize;\n flex-shrink: 0;\n position: relative;\n transition: background-color 0.2s;\n }\n\n .sidebar-resize-handle:hover {\n background: var(--mj-brand-primary);\n }\n\n .sidebar-resize-handle:active {\n background: var(--mj-brand-primary-hover);\n }\n\n .sidebar-resize-handle::before {\n content: '';\n position: absolute;\n left: -4px;\n right: -4px;\n top: 0;\n bottom: 0;\n cursor: ew-resize;\n }\n\n .conversation-main {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n\n .initializing-container {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n flex: 1;\n }\n\n /* Mobile: sidebar slides over the chat instead of squishing it.\n The chat area always fills the full width; the sidebar overlays on\n top and is dismissed by tapping the backdrop. */\n @media (max-width: 767px) {\n .conversation-sidebar {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n width: min(85%, 320px) !important;\n z-index: 1000;\n transform: translateX(-100%);\n transition: transform 0.3s ease;\n box-shadow: 2px 0 12px color-mix(in srgb, var(--mj-text-primary) 25%, transparent);\n }\n\n /* Keep a fixed width in both states so only the transform animates\n (avoids text reflow during the slide). */\n .conversation-sidebar.collapsed {\n width: min(85%, 320px) !important;\n border-right: 1px solid var(--mj-border-default);\n overflow-y: auto;\n }\n\n .conversation-sidebar:not(.collapsed) {\n transform: translateX(0);\n }\n\n /* No drag-resize on mobile */\n .sidebar-resize-handle {\n display: none;\n }\n\n .mobile-sidebar-backdrop {\n position: absolute;\n inset: 0;\n background: var(--mj-bg-overlay);\n z-index: 999;\n border: none;\n padding: 0;\n cursor: pointer;\n animation: chatBackdropFade 0.2s ease;\n }\n\n @keyframes chatBackdropFade {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n }\n "] }]
1024
- }], () => [{ type: i0.ChangeDetectorRef }, { type: i1.ConversationStreamingService }, { type: i1.ActiveTasksService }, { type: i1.UICommandHandlerService }, { type: i1.ConversationBridgeService }], { conversationList: [{
1347
+ }], () => [{ type: i0.ChangeDetectorRef }, { type: i1.ConversationStreamingService }, { type: i1.ActiveTasksService }, { type: i1.UICommandHandlerService }, { type: i1.ConversationBridgeService }], { ConversationList: [{
1025
1348
  type: ViewChild,
1026
1349
  args: ['conversationList']
1027
- }], chatArea: [{
1350
+ }], ChatArea: [{
1028
1351
  type: ViewChild,
1029
1352
  args: ['chatArea']
1030
1353
  }], onWindowResize: [{
@@ -1034,5 +1357,5 @@ export { ChatConversationsResource };
1034
1357
  type: HostListener,
1035
1358
  args: ['document:click', ['$event']]
1036
1359
  }] }); })();
1037
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ChatConversationsResource, { className: "ChatConversationsResource", filePath: "src/lib/resource-wrappers/chat-conversations-resource.component.ts", lineNumber: 262 }); })();
1360
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ChatConversationsResource, { className: "ChatConversationsResource", filePath: "src/lib/resource-wrappers/chat-conversations-resource.component.ts", lineNumber: 276 }); })();
1038
1361
  //# sourceMappingURL=chat-conversations-resource.component.js.map