@memberjunction/ng-conversations 6.2.0-edge.4 → 6.2.0-edge.5

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 (95) hide show
  1. package/README.md +29 -0
  2. package/dist/lib/components/conversation/conversation-agent-picker.component.d.ts +1 -1
  3. package/dist/lib/components/conversation/conversation-agent-picker.component.js +3 -3
  4. package/dist/lib/components/conversation/conversation-agent-picker.component.js.map +1 -1
  5. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +75 -14
  6. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  7. package/dist/lib/components/conversation/conversation-chat-area.component.js +711 -359
  8. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  9. package/dist/lib/components/message/message-input.component.js +9 -9
  10. package/dist/lib/components/message/message-input.component.js.map +1 -1
  11. package/dist/lib/components/message/message-item.component.d.ts +137 -16
  12. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  13. package/dist/lib/components/message/message-item.component.js +1361 -296
  14. package/dist/lib/components/message/message-item.component.js.map +1 -1
  15. package/dist/lib/components/message/message-list.component.d.ts +20 -2
  16. package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
  17. package/dist/lib/components/message/message-list.component.js +28 -4
  18. package/dist/lib/components/message/message-list.component.js.map +1 -1
  19. package/dist/lib/components/sidebar/routines-section.component.js +1 -1
  20. package/dist/lib/components/sidebar/routines-section.component.js.map +1 -1
  21. package/dist/lib/components/task/tasks-full-view.component.d.ts +152 -31
  22. package/dist/lib/components/task/tasks-full-view.component.d.ts.map +1 -1
  23. package/dist/lib/components/task/tasks-full-view.component.js +2227 -214
  24. package/dist/lib/components/task/tasks-full-view.component.js.map +1 -1
  25. package/dist/lib/components/tasks/tasks-dropdown.component.js +4 -4
  26. package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -1
  27. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +11 -1
  28. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  29. package/dist/lib/components/workspace/conversation-workspace.component.js +25 -28
  30. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  31. package/dist/lib/services/agent-state.service.d.ts.map +1 -1
  32. package/dist/lib/services/agent-state.service.js +8 -8
  33. package/dist/lib/services/agent-state.service.js.map +1 -1
  34. package/dist/lib/services/browser-realtime-media-host.d.ts +7 -7
  35. package/dist/lib/services/browser-realtime-media-host.js +8 -78
  36. package/dist/lib/services/browser-realtime-media-host.js.map +1 -1
  37. package/dist/lib/services/conversation-agent.service.d.ts +16 -8
  38. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  39. package/dist/lib/services/conversation-agent.service.js +57 -27
  40. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  41. package/dist/lib/services/conversation-naming.d.ts.map +1 -1
  42. package/dist/lib/services/conversation-naming.js +9 -2
  43. package/dist/lib/services/conversation-naming.js.map +1 -1
  44. package/dist/lib/services/conversation-tasks-filter.d.ts +15 -0
  45. package/dist/lib/services/conversation-tasks-filter.d.ts.map +1 -0
  46. package/dist/lib/services/conversation-tasks-filter.js +69 -0
  47. package/dist/lib/services/conversation-tasks-filter.js.map +1 -0
  48. package/dist/lib/services/realtime-audio-recorder.d.ts +94 -86
  49. package/dist/lib/services/realtime-audio-recorder.d.ts.map +1 -1
  50. package/dist/lib/services/realtime-audio-recorder.js +222 -195
  51. package/dist/lib/services/realtime-audio-recorder.js.map +1 -1
  52. package/dist/lib/services/realtime-session.service.d.ts +30 -2
  53. package/dist/lib/services/realtime-session.service.d.ts.map +1 -1
  54. package/dist/lib/services/realtime-session.service.js +33 -6
  55. package/dist/lib/services/realtime-session.service.js.map +1 -1
  56. package/dist/lib/services/recording/libopus-wasm-binary.d.ts +3 -0
  57. package/dist/lib/services/recording/libopus-wasm-binary.d.ts.map +1 -0
  58. package/dist/lib/services/recording/libopus-wasm-binary.js +489 -0
  59. package/dist/lib/services/recording/libopus-wasm-binary.js.map +1 -0
  60. package/dist/lib/services/recording/libopus-worker-source.d.ts +48 -0
  61. package/dist/lib/services/recording/libopus-worker-source.d.ts.map +1 -0
  62. package/dist/lib/services/recording/libopus-worker-source.js +170 -0
  63. package/dist/lib/services/recording/libopus-worker-source.js.map +1 -0
  64. package/dist/lib/services/recording/linear-resampler.d.ts +45 -0
  65. package/dist/lib/services/recording/linear-resampler.d.ts.map +1 -0
  66. package/dist/lib/services/recording/linear-resampler.js +85 -0
  67. package/dist/lib/services/recording/linear-resampler.js.map +1 -0
  68. package/dist/lib/services/recording/opus-packet-encoder.d.ts +50 -0
  69. package/dist/lib/services/recording/opus-packet-encoder.d.ts.map +1 -0
  70. package/dist/lib/services/recording/opus-packet-encoder.js +41 -0
  71. package/dist/lib/services/recording/opus-packet-encoder.js.map +1 -0
  72. package/dist/lib/services/recording/wasm-opus-encoder.d.ts +86 -0
  73. package/dist/lib/services/recording/wasm-opus-encoder.d.ts.map +1 -0
  74. package/dist/lib/services/recording/wasm-opus-encoder.js +232 -0
  75. package/dist/lib/services/recording/wasm-opus-encoder.js.map +1 -0
  76. package/dist/lib/services/recording/webcodecs-opus-encoder.d.ts +39 -0
  77. package/dist/lib/services/recording/webcodecs-opus-encoder.d.ts.map +1 -0
  78. package/dist/lib/services/recording/webcodecs-opus-encoder.js +101 -0
  79. package/dist/lib/services/recording/webcodecs-opus-encoder.js.map +1 -0
  80. package/dist/lib/services/search.service.d.ts.map +1 -1
  81. package/dist/lib/services/search.service.js +3 -16
  82. package/dist/lib/services/search.service.js.map +1 -1
  83. package/dist/lib/utils/distinct-artifacts.d.ts +9 -3
  84. package/dist/lib/utils/distinct-artifacts.d.ts.map +1 -1
  85. package/dist/lib/utils/distinct-artifacts.js +24 -5
  86. package/dist/lib/utils/distinct-artifacts.js.map +1 -1
  87. package/package.json +36 -36
  88. package/dist/lib/services/browser-recording-unload-guard.d.ts +0 -30
  89. package/dist/lib/services/browser-recording-unload-guard.d.ts.map +0 -1
  90. package/dist/lib/services/browser-recording-unload-guard.js +0 -43
  91. package/dist/lib/services/browser-recording-unload-guard.js.map +0 -1
  92. package/dist/lib/services/realtime-pcm-wav.d.ts +0 -79
  93. package/dist/lib/services/realtime-pcm-wav.d.ts.map +0 -1
  94. package/dist/lib/services/realtime-pcm-wav.js +0 -213
  95. package/dist/lib/services/realtime-pcm-wav.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tasks-dropdown.component.js","sourceRoot":"","sources":["../../../../src/lib/components/tasks/tasks-dropdown.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnDestroy } from '@angular/core';\nimport { UserInfo } from '@memberjunction/core';\nimport { ActiveTasksService, ActiveTask } from '../../services/active-tasks.service';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * Enhanced tasks dropdown component for chat header.\n * Shows ALL active tasks across ALL conversations, grouped by current vs other\n */\n@Component({\n standalone: false,\n selector: 'mj-tasks-dropdown',\n template: `\n <div class=\"tasks-dropdown-container\">\n <button\n class=\"active-tasks-btn\"\n (click)=\"toggleDropdown()\"\n [class.active]=\"isOpen\"\n [class.has-tasks]=\"allTasks.length > 0\"\n [title]=\"allTasks.length > 0 ? allTasks.length + ' active task' + (allTasks.length > 1 ? 's' : '') : 'View tasks'\">\n <i class=\"fas fa-bolt\"></i>\n @if (allTasks.length > 0) {\n <span class=\"task-count-badge\">{{ allTasks.length }}</span>\n }\n </button>\n \n @if (isOpen) {\n <div class=\"active-tasks-dropdown\">\n <div class=\"dropdown-header\">\n <div class=\"header-left\">\n @if (allTasks.length > 0) {\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n }\n @if (allTasks.length === 0) {\n <i class=\"fas fa-tasks\"></i>\n }\n <span>Active Tasks ({{ allTasks.length }})</span>\n </div>\n <button class=\"close-btn\" (click)=\"closeDropdown()\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n <div class=\"dropdown-content\">\n <!-- Current Conversation Tasks -->\n @if (currentConversationTasks.length > 0) {\n <div class=\"section\">\n <div class=\"section-header\">\n <i class=\"fas fa-comment\"></i>\n <span>Current Conversation ({{ currentConversationTasks.length }})</span>\n </div>\n @for (task of currentConversationTasks; track task) {\n <div class=\"active-task-item\"\n (click)=\"onTaskClick(task)\">\n <div class=\"task-status-indicator active\"></div>\n <div class=\"task-content\">\n <div class=\"task-title\">\n @if (getAgentLogoUrl(task.agentName)) {\n <img\n [src]=\"getAgentLogoUrl(task.agentName)\"\n class=\"agent-logo\"\n [alt]=\"task.agentName\" />\n }\n @if (!getAgentLogoUrl(task.agentName)) {\n <i\n [class]=\"getAgentIconClass(task.agentName)\"></i>\n }\n {{ task.agentName }}\n </div>\n <div class=\"task-status-text\">{{ getTrimmedStatus(task.status) }}</div>\n <div class=\"task-elapsed\">{{ getElapsedTime(task) }}</div>\n </div>\n </div>\n }\n </div>\n }\n <!-- Other Conversations Tasks -->\n @if (otherConversationTasks.length > 0) {\n <div class=\"section\">\n <div class=\"section-header\">\n <i class=\"fas fa-comments\"></i>\n <span>Other Conversations ({{ otherConversationTasks.length }})</span>\n </div>\n @for (task of otherConversationTasks; track task) {\n <div class=\"active-task-item clickable\"\n (click)=\"onTaskClick(task)\">\n <div class=\"task-status-indicator active\"></div>\n <div class=\"task-content\">\n <div class=\"task-title\">\n @if (getAgentLogoUrl(task.agentName)) {\n <img\n [src]=\"getAgentLogoUrl(task.agentName)\"\n class=\"agent-logo\"\n [alt]=\"task.agentName\" />\n }\n @if (!getAgentLogoUrl(task.agentName)) {\n <i\n [class]=\"getAgentIconClass(task.agentName)\"></i>\n }\n {{ task.agentName }}\n <span class=\"go-btn\">\n <i class=\"fas fa-arrow-right\"></i>\n </span>\n </div>\n @if (task.conversationName) {\n <div class=\"task-conversation\">\n <i class=\"fas fa-message\"></i>\n {{ task.conversationName }}\n </div>\n }\n <div class=\"task-status-text\">{{ getTrimmedStatus(task.status) }}</div>\n <div class=\"task-elapsed\">{{ getElapsedTime(task) }}</div>\n </div>\n </div>\n }\n </div>\n }\n <!-- No Tasks State -->\n @if (allTasks.length === 0) {\n <div class=\"no-tasks\">\n <i class=\"fas fa-check-circle\"></i>\n <p>No active tasks</p>\n </div>\n }\n </div>\n </div>\n }\n </div>\n `,\n styles: [`\n .tasks-dropdown-container {\n position: relative;\n }\n\n .active-tasks-btn {\n background: transparent;\n padding: 8px 12px;\n border-radius: 6px;\n border: none;\n color: rgba(255,255,255,0.7);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n transition: all 0.2s;\n }\n\n .active-tasks-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n }\n\n .active-tasks-btn.active {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n }\n\n .task-count-badge {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n padding: 2px 5px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n min-width: 18px;\n text-align: center;\n line-height: 1;\n box-shadow: var(--mj-shadow-sm);\n }\n\n .active-tasks-dropdown {\n position: absolute;\n top: calc(100% + 8px);\n right: 0;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-lg);\n z-index: 1000;\n min-width: 420px;\n max-width: 500px;\n }\n\n .dropdown-header {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .header-left i {\n color: var(--mj-brand-primary);\n }\n\n .close-btn {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 18px;\n padding: 0;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n }\n\n .close-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n }\n\n .dropdown-content {\n max-height: 500px;\n overflow-y: auto;\n }\n\n .section {\n padding: 12px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .section:last-child {\n border-bottom: none;\n }\n\n .section-header {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 12px;\n padding: 0 4px;\n }\n\n .section-header i {\n font-size: 11px;\n }\n\n .active-task-item {\n display: flex;\n gap: 12px;\n padding: 10px 12px;\n border-radius: 6px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n margin-bottom: 8px;\n transition: all 0.2s ease;\n }\n\n .active-task-item.clickable {\n cursor: pointer;\n }\n\n .active-task-item.clickable:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n transform: translateX(2px);\n }\n\n .active-task-item:last-child {\n margin-bottom: 0;\n }\n\n .task-status-indicator {\n width: 4px;\n border-radius: 2px;\n flex-shrink: 0;\n }\n\n .task-status-indicator.active {\n background: var(--mj-brand-primary);\n animation: pulse 2s ease-in-out infinite;\n }\n\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n\n .task-content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .task-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .task-title i {\n color: var(--mj-brand-primary);\n font-size: 12px;\n }\n\n .task-title .agent-logo {\n width: 14px;\n height: 14px;\n object-fit: contain;\n flex-shrink: 0;\n }\n\n .go-btn {\n margin-left: auto;\n color: var(--mj-brand-primary);\n font-size: 10px;\n opacity: 0.7;\n }\n\n .active-task-item.clickable:hover .go-btn {\n opacity: 1;\n }\n\n .task-conversation {\n font-size: 11px;\n color: var(--mj-text-disabled);\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .task-conversation i {\n font-size: 10px;\n }\n\n .task-status-text {\n font-size: 12px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .task-elapsed {\n font-size: 11px;\n color: var(--mj-brand-primary);\n font-weight: 600;\n }\n\n .no-tasks {\n padding: 40px 16px;\n text-align: center;\n color: var(--mj-text-disabled);\n }\n\n .no-tasks i {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n color: var(--mj-status-success);\n }\n\n .no-tasks p {\n margin: 0;\n font-size: 14px;\n }\n\n mj-task-widget {\n display: block;\n margin-bottom: 8px;\n }\n\n mj-task-widget:last-child {\n margin-bottom: 0;\n }\n\n /* Mobile adjustments: 481px - 768px */\n @media (max-width: 768px) {\n .active-tasks-btn {\n padding: 6px 10px;\n font-size: 12px;\n }\n\n .active-tasks-dropdown {\n position: fixed;\n top: auto;\n right: 8px;\n left: 8px;\n bottom: 8px;\n min-width: unset;\n max-width: unset;\n max-height: 60vh;\n }\n\n .dropdown-header {\n padding: 10px 12px;\n }\n\n .dropdown-content {\n max-height: calc(60vh - 48px);\n }\n\n .section {\n padding: 10px;\n }\n\n .section-header {\n font-size: 11px;\n margin-bottom: 10px;\n }\n\n .active-task-item {\n padding: 8px 10px;\n }\n\n .task-title {\n font-size: 13px;\n }\n\n .task-status-text {\n font-size: 11px;\n }\n\n .task-elapsed {\n font-size: 10px;\n }\n }\n\n /* Small Phone adjustments: <= 480px */\n @media (max-width: 480px) {\n .active-tasks-btn {\n padding: 4px 8px;\n font-size: 11px;\n }\n\n .active-tasks-dropdown {\n right: 4px;\n left: 4px;\n bottom: 4px;\n max-height: 70vh;\n }\n\n .dropdown-header {\n padding: 8px 10px;\n }\n\n .header-left {\n font-size: 13px;\n }\n\n .dropdown-content {\n max-height: calc(70vh - 44px);\n }\n\n .section {\n padding: 8px;\n }\n\n .section-header {\n font-size: 10px;\n margin-bottom: 8px;\n }\n\n .active-task-item {\n padding: 6px 8px;\n gap: 8px;\n }\n\n .task-title {\n font-size: 12px;\n }\n\n .task-status-text {\n font-size: 10px;\n }\n\n .task-elapsed {\n font-size: 9px;\n }\n\n .no-tasks {\n padding: 30px 12px;\n }\n\n .no-tasks i {\n font-size: 28px;\n }\n\n .no-tasks p {\n font-size: 13px;\n }\n }\n `]\n})\nexport class TasksDropdownComponent implements OnInit, OnDestroy {\n @Input() CurrentUser!: UserInfo;\n\n /** @deprecated Use {@link CurrentUser}. */\n @Input() set currentUser(value: UserInfo) {\n this.CurrentUser = value;\n }\n /** @deprecated Use {@link CurrentUser}. */\n get currentUser(): UserInfo {\n return this.CurrentUser;\n }\n @Input() ConversationId: string | null = null;\n\n /** @deprecated Use {@link ConversationId}. */\n @Input() set conversationId(value: string | null) {\n this.ConversationId = value;\n }\n /** @deprecated Use {@link ConversationId}. */\n get conversationId(): string | null {\n return this.ConversationId;\n }\n @Output() TaskClicked = new EventEmitter<ActiveTask>();\n\n /**\n * @deprecated Use {@link TaskClicked}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (taskClicked) keeps working. Must stay AFTER TaskClicked: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() taskClicked = this.TaskClicked;\n @Output() NavigateToConversation = new EventEmitter<{conversationId: string; taskId: string}>();\n\n /**\n * @deprecated Use {@link NavigateToConversation}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (navigateToConversation) keeps working. Must stay AFTER NavigateToConversation: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() navigateToConversation = this.NavigateToConversation;\n\n public IsOpen: boolean = false;\n\n /** @deprecated Use {@link IsOpen}. */\n public get isOpen(): boolean {\n return this.IsOpen;\n }\n /** @deprecated Use {@link IsOpen}. */\n public set isOpen(value: boolean) {\n this.IsOpen = value;\n }\n public AllTasks: ActiveTask[] = [];\n\n /** @deprecated Use {@link AllTasks}. */\n public get allTasks(): ActiveTask[] {\n return this.AllTasks;\n }\n /** @deprecated Use {@link AllTasks}. */\n public set allTasks(value: ActiveTask[]) {\n this.AllTasks = value;\n }\n public CurrentConversationTasks: ActiveTask[] = [];\n\n /** @deprecated Use {@link CurrentConversationTasks}. */\n public get currentConversationTasks(): ActiveTask[] {\n return this.CurrentConversationTasks;\n }\n /** @deprecated Use {@link CurrentConversationTasks}. */\n public set currentConversationTasks(value: ActiveTask[]) {\n this.CurrentConversationTasks = value;\n }\n public OtherConversationTasks: ActiveTask[] = [];\n\n /** @deprecated Use {@link OtherConversationTasks}. */\n public get otherConversationTasks(): ActiveTask[] {\n return this.OtherConversationTasks;\n }\n /** @deprecated Use {@link OtherConversationTasks}. */\n public set otherConversationTasks(value: ActiveTask[]) {\n this.OtherConversationTasks = value;\n }\n\n private destroy$ = new Subject<void>();\n\n /**\n * Wall-clock snapshot the elapsed-time template bindings read from. The template\n * must NOT call Date.now() (directly or via getElapsedTime) — a change-detection\n * pass that straddles a second boundary would then see two different values for\n * the same binding and throw NG0100 in dev mode. Instead this snapshot is stable\n * within a CD pass and advances via a 1s interval that runs only while the\n * dropdown is open (the only time elapsed text is rendered).\n */\n private _now = Date.now();\n private elapsedTimer: ReturnType<typeof setInterval> | null = null;\n\n constructor(\n private activeTasksService: ActiveTasksService\n ) {}\n\n ngOnInit() {\n // AIEngineBase is deferred at startup; kick off the load early so the\n // template helpers (getAgentIconClass / getAgentLogoUrl) find populated\n // .Agents data when they're called from the template. Fire-and-forget —\n // the helpers fall back to defaults until it's loaded.\n AIEngineBase.Instance.EnsureLoaded();\n\n // Subscribe to ALL active tasks across ALL conversations\n this.activeTasksService.tasks$\n .pipe(takeUntil(this.destroy$))\n .subscribe(tasks => {\n this.AllTasks = tasks;\n this.groupTasks();\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n this.stopElapsedTimer();\n }\n\n private groupTasks(): void {\n this.CurrentConversationTasks = this.AllTasks.filter(\n task => task.conversationId === this.ConversationId\n );\n\n this.OtherConversationTasks = this.AllTasks.filter(\n task => task.conversationId && task.conversationId !== this.ConversationId\n );\n }\n\n ToggleDropdown(): void {\n this.IsOpen = !this.IsOpen;\n if (this.IsOpen) {\n this.startElapsedTimer();\n } else {\n this.stopElapsedTimer();\n }\n }\n\n /** @deprecated Use {@link ToggleDropdown}. */\n toggleDropdown(): void {\n return this.ToggleDropdown();\n }\n\n CloseDropdown(): void {\n this.IsOpen = false;\n this.stopElapsedTimer();\n }\n\n /** @deprecated Use {@link CloseDropdown}. */\n closeDropdown(): void {\n return this.CloseDropdown();\n }\n\n private startElapsedTimer(): void {\n this._now = Date.now(); // fresh snapshot for the first render\n if (this.elapsedTimer) {\n return;\n }\n // Zone-patched interval: each tick triggers CD, so the elapsed text advances\n // once per second while the dropdown is open. Stopped on close/destroy.\n this.elapsedTimer = setInterval(() => {\n this._now = Date.now();\n }, 1000);\n }\n\n private stopElapsedTimer(): void {\n if (this.elapsedTimer) {\n clearInterval(this.elapsedTimer);\n this.elapsedTimer = null;\n }\n }\n\n OnTaskClick(task: ActiveTask): void {\n // If task is from another conversation, emit navigation event\n if (task.conversationId && task.conversationId !== this.ConversationId) {\n this.NavigateToConversation.emit({\n conversationId: task.conversationId,\n taskId: task.id\n });\n }\n\n this.TaskClicked.emit(task);\n this.CloseDropdown();\n }\n\n /** @deprecated Use {@link OnTaskClick}. */\n onTaskClick(task: ActiveTask): void {\n return this.OnTaskClick(task);\n }\n\n GetElapsedTime(task: ActiveTask): string {\n // Reads the CD-stable snapshot, never Date.now() — see _now for why (NG0100).\n const elapsed = Math.max(0, this._now - task.startTime);\n const seconds = Math.floor(elapsed / 1000);\n\n if (seconds < 60) {\n return `${seconds}s`;\n }\n\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = seconds % 60;\n return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;\n }\n\n /** @deprecated Use {@link GetElapsedTime}. */\n getElapsedTime(task: ActiveTask): string {\n return this.GetElapsedTime(task);\n }\n\n GetTrimmedStatus(status: string): string {\n const maxLength = 50;\n if (status.length <= maxLength) {\n return status;\n }\n return status.substring(0, maxLength) + '...';\n }\n\n /** @deprecated Use {@link GetTrimmedStatus}. */\n getTrimmedStatus(status: string): string {\n return this.GetTrimmedStatus(status);\n }\n\n /**\n * Get agent icon class by looking up agent in AIEngineBase cache\n * Similar to message-item component's aiAgentInfo getter\n */\n GetAgentIconClass(agentName: string): string {\n // Look up agent from AIEngineBase cache by name\n if (AIEngineBase.Instance?.Agents) {\n const agent = AIEngineBase.Instance.Agents.find(a => a.Name === agentName);\n if (agent?.IconClass) {\n return agent.IconClass;\n }\n }\n\n // Default fallback icon\n return 'fas fa-robot';\n }\n\n /** @deprecated Use {@link GetAgentIconClass}. */\n getAgentIconClass(agentName: string): string {\n return this.GetAgentIconClass(agentName);\n }\n\n /**\n * Get agent logo URL by looking up agent in AIEngineBase cache\n * Returns null if no logo URL is available\n */\n GetAgentLogoUrl(agentName: string): string | null {\n // Look up agent from AIEngineBase cache by name\n if (AIEngineBase.Instance?.Agents) {\n const agent = AIEngineBase.Instance.Agents.find(a => a.Name === agentName);\n if (agent?.LogoURL) {\n return agent.LogoURL;\n }\n }\n\n return null;\n }\n\n /** @deprecated Use {@link GetAgentLogoUrl}. */\n getAgentLogoUrl(agentName: string): string | null {\n return this.GetAgentLogoUrl(agentName);\n }\n}\n"]}
1
+ {"version":3,"file":"tasks-dropdown.component.js","sourceRoot":"","sources":["../../../../src/lib/components/tasks/tasks-dropdown.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnDestroy } from '@angular/core';\nimport { UserInfo } from '@memberjunction/core';\nimport { ActiveTasksService, ActiveTask } from '../../services/active-tasks.service';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * Enhanced tasks dropdown component for chat header.\n * Shows ALL active tasks across ALL conversations, grouped by current vs other\n */\n@Component({\n standalone: false,\n selector: 'mj-tasks-dropdown',\n template: `\n <div class=\"tasks-dropdown-container\">\n <button\n class=\"active-tasks-btn\"\n (click)=\"toggleDropdown()\"\n [class.active]=\"isOpen\"\n [class.has-tasks]=\"allTasks.length > 0\"\n [title]=\"allTasks.length > 0 ? allTasks.length + ' active task' + (allTasks.length > 1 ? 's' : '') : 'View tasks'\">\n <i class=\"fas fa-bolt\"></i>\n @if (allTasks.length > 0) {\n <span class=\"task-count-badge\">{{ allTasks.length }}</span>\n }\n </button>\n \n @if (isOpen) {\n <div class=\"active-tasks-dropdown\">\n <div class=\"dropdown-header\">\n <div class=\"header-left\">\n @if (allTasks.length > 0) {\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n }\n @if (allTasks.length === 0) {\n <i class=\"fas fa-tasks\"></i>\n }\n <span>Active Tasks ({{ allTasks.length }})</span>\n </div>\n <button class=\"close-btn\" (click)=\"closeDropdown()\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n <div class=\"dropdown-content\">\n <!-- Current Conversation Tasks -->\n @if (currentConversationTasks.length > 0) {\n <div class=\"section\">\n <div class=\"section-header\">\n <i class=\"fas fa-comment\"></i>\n <span>Current Conversation ({{ currentConversationTasks.length }})</span>\n </div>\n @for (task of currentConversationTasks; track task) {\n <div class=\"active-task-item\"\n (click)=\"onTaskClick(task)\">\n <div class=\"task-status-indicator active\"></div>\n <div class=\"task-content\">\n <div class=\"task-title\">\n @if (getAgentLogoUrl(task.agentName)) {\n <img\n [src]=\"getAgentLogoUrl(task.agentName)\"\n class=\"agent-logo\"\n [alt]=\"task.agentName\" />\n }\n @if (!getAgentLogoUrl(task.agentName)) {\n <i\n [class]=\"getAgentIconClass(task.agentName)\"></i>\n }\n {{ task.agentName }}\n </div>\n <div class=\"task-status-text\">{{ getTrimmedStatus(task.status) }}</div>\n <div class=\"task-elapsed\">{{ getElapsedTime(task) }}</div>\n </div>\n </div>\n }\n </div>\n }\n <!-- Other Conversations Tasks -->\n @if (otherConversationTasks.length > 0) {\n <div class=\"section\">\n <div class=\"section-header\">\n <i class=\"fas fa-comments\"></i>\n <span>Other Conversations ({{ otherConversationTasks.length }})</span>\n </div>\n @for (task of otherConversationTasks; track task) {\n <div class=\"active-task-item clickable\"\n (click)=\"onTaskClick(task)\">\n <div class=\"task-status-indicator active\"></div>\n <div class=\"task-content\">\n <div class=\"task-title\">\n @if (getAgentLogoUrl(task.agentName)) {\n <img\n [src]=\"getAgentLogoUrl(task.agentName)\"\n class=\"agent-logo\"\n [alt]=\"task.agentName\" />\n }\n @if (!getAgentLogoUrl(task.agentName)) {\n <i\n [class]=\"getAgentIconClass(task.agentName)\"></i>\n }\n {{ task.agentName }}\n <span class=\"go-btn\">\n <i class=\"fas fa-arrow-right\"></i>\n </span>\n </div>\n @if (task.conversationName) {\n <div class=\"task-conversation\">\n <i class=\"fas fa-message\"></i>\n {{ task.conversationName }}\n </div>\n }\n <div class=\"task-status-text\">{{ getTrimmedStatus(task.status) }}</div>\n <div class=\"task-elapsed\">{{ getElapsedTime(task) }}</div>\n </div>\n </div>\n }\n </div>\n }\n <!-- No Tasks State -->\n @if (allTasks.length === 0) {\n <div class=\"no-tasks\">\n <i class=\"fas fa-check-circle\"></i>\n <p>No active tasks</p>\n </div>\n }\n </div>\n </div>\n }\n </div>\n `,\n styles: [`\n .tasks-dropdown-container {\n position: relative;\n }\n\n .active-tasks-btn {\n background: transparent;\n padding: 8px 12px;\n border-radius: 6px;\n border: none;\n color: rgba(255,255,255,0.7);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n transition: all 0.2s;\n }\n\n .active-tasks-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n }\n\n .active-tasks-btn.active {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n }\n\n .task-count-badge {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n padding: 2px 5px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n min-width: 18px;\n text-align: center;\n line-height: 1;\n box-shadow: var(--mj-shadow-sm);\n }\n\n .active-tasks-dropdown {\n position: absolute;\n top: calc(100% + 8px);\n right: 0;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-lg);\n z-index: 1000;\n min-width: 420px;\n max-width: 500px;\n }\n\n .dropdown-header {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .header-left i {\n color: var(--mj-brand-primary);\n }\n\n .close-btn {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 18px;\n padding: 0;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n }\n\n .close-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n }\n\n .dropdown-content {\n max-height: 500px;\n overflow-y: auto;\n }\n\n .section {\n padding: 12px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .section:last-child {\n border-bottom: none;\n }\n\n .section-header {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 12px;\n padding: 0 4px;\n }\n\n .section-header i {\n font-size: 11px;\n }\n\n .active-task-item {\n display: flex;\n gap: 12px;\n padding: 10px 12px;\n border-radius: 6px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n margin-bottom: 8px;\n transition: all 0.2s ease;\n }\n\n .active-task-item.clickable {\n cursor: pointer;\n }\n\n .active-task-item.clickable:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n transform: translateX(2px);\n }\n\n .active-task-item:last-child {\n margin-bottom: 0;\n }\n\n .task-status-indicator {\n width: 4px;\n border-radius: 2px;\n flex-shrink: 0;\n }\n\n .task-status-indicator.active {\n background: var(--mj-brand-primary);\n animation: pulse 2s ease-in-out infinite;\n }\n\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n\n .task-content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .task-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .task-title i {\n color: var(--mj-brand-primary);\n font-size: 12px;\n }\n\n .task-title .agent-logo {\n width: 14px;\n height: 14px;\n object-fit: contain;\n flex-shrink: 0;\n }\n\n .go-btn {\n margin-left: auto;\n color: var(--mj-brand-primary);\n font-size: 10px;\n opacity: 0.7;\n }\n\n .active-task-item.clickable:hover .go-btn {\n opacity: 1;\n }\n\n .task-conversation {\n font-size: 11px;\n color: var(--mj-text-disabled);\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .task-conversation i {\n font-size: 10px;\n }\n\n .task-status-text {\n font-size: 12px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .task-elapsed {\n font-size: 11px;\n color: var(--mj-brand-primary);\n font-weight: 600;\n }\n\n .no-tasks {\n padding: 40px 16px;\n text-align: center;\n color: var(--mj-text-disabled);\n }\n\n .no-tasks i {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n color: var(--mj-status-success);\n }\n\n .no-tasks p {\n margin: 0;\n font-size: 14px;\n }\n\n mj-task-widget {\n display: block;\n margin-bottom: 8px;\n }\n\n mj-task-widget:last-child {\n margin-bottom: 0;\n }\n\n /* Mobile adjustments: 481px - 768px */\n @media (max-width: 768px) {\n .active-tasks-btn {\n padding: 6px 10px;\n font-size: 12px;\n }\n\n .active-tasks-dropdown {\n position: fixed;\n top: auto;\n right: 8px;\n left: 8px;\n bottom: 8px;\n min-width: unset;\n max-width: unset;\n max-height: 60vh;\n }\n\n .dropdown-header {\n padding: 10px 12px;\n }\n\n .dropdown-content {\n max-height: calc(60vh - 48px);\n }\n\n .section {\n padding: 10px;\n }\n\n .section-header {\n font-size: 11px;\n margin-bottom: 10px;\n }\n\n .active-task-item {\n padding: 8px 10px;\n }\n\n .task-title {\n font-size: 13px;\n }\n\n .task-status-text {\n font-size: 11px;\n }\n\n .task-elapsed {\n font-size: 10px;\n }\n }\n\n /* Small Phone adjustments: <= 480px */\n @media (max-width: 480px) {\n .active-tasks-btn {\n padding: 4px 8px;\n font-size: 11px;\n }\n\n .active-tasks-dropdown {\n right: 4px;\n left: 4px;\n bottom: 4px;\n max-height: 70vh;\n }\n\n .dropdown-header {\n padding: 8px 10px;\n }\n\n .header-left {\n font-size: 13px;\n }\n\n .dropdown-content {\n max-height: calc(70vh - 44px);\n }\n\n .section {\n padding: 8px;\n }\n\n .section-header {\n font-size: 10px;\n margin-bottom: 8px;\n }\n\n .active-task-item {\n padding: 6px 8px;\n gap: 8px;\n }\n\n .task-title {\n font-size: 12px;\n }\n\n .task-status-text {\n font-size: 10px;\n }\n\n .task-elapsed {\n font-size: 9px;\n }\n\n .no-tasks {\n padding: 30px 12px;\n }\n\n .no-tasks i {\n font-size: 28px;\n }\n\n .no-tasks p {\n font-size: 13px;\n }\n }\n `]\n})\nexport class TasksDropdownComponent implements OnInit, OnDestroy {\n @Input() CurrentUser!: UserInfo;\n\n /** @deprecated Use {@link CurrentUser}. */\n @Input() set currentUser(value: UserInfo) {\n this.CurrentUser = value;\n }\n /** @deprecated Use {@link CurrentUser}. */\n get currentUser(): UserInfo {\n return this.CurrentUser;\n }\n @Input() ConversationId: string | null = null;\n\n /** @deprecated Use {@link ConversationId}. */\n @Input() set conversationId(value: string | null) {\n this.ConversationId = value;\n }\n /** @deprecated Use {@link ConversationId}. */\n get conversationId(): string | null {\n return this.ConversationId;\n }\n @Output() TaskClicked = new EventEmitter<ActiveTask>();\n\n /**\n * @deprecated Use {@link TaskClicked}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (taskClicked) keeps working. Must stay AFTER TaskClicked: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() taskClicked = this.TaskClicked;\n @Output() NavigateToConversation = new EventEmitter<{conversationId: string; taskId: string}>();\n\n /**\n * @deprecated Use {@link NavigateToConversation}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (navigateToConversation) keeps working. Must stay AFTER NavigateToConversation: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() navigateToConversation = this.NavigateToConversation;\n\n public IsOpen: boolean = false;\n\n /** @deprecated Use {@link IsOpen}. */\n public get isOpen(): boolean {\n return this.IsOpen;\n }\n /** @deprecated Use {@link IsOpen}. */\n public set isOpen(value: boolean) {\n this.IsOpen = value;\n }\n public AllTasks: ActiveTask[] = [];\n\n /** @deprecated Use {@link AllTasks}. */\n public get allTasks(): ActiveTask[] {\n return this.AllTasks;\n }\n /** @deprecated Use {@link AllTasks}. */\n public set allTasks(value: ActiveTask[]) {\n this.AllTasks = value;\n }\n public CurrentConversationTasks: ActiveTask[] = [];\n\n /** @deprecated Use {@link CurrentConversationTasks}. */\n public get currentConversationTasks(): ActiveTask[] {\n return this.CurrentConversationTasks;\n }\n /** @deprecated Use {@link CurrentConversationTasks}. */\n public set currentConversationTasks(value: ActiveTask[]) {\n this.CurrentConversationTasks = value;\n }\n public OtherConversationTasks: ActiveTask[] = [];\n\n /** @deprecated Use {@link OtherConversationTasks}. */\n public get otherConversationTasks(): ActiveTask[] {\n return this.OtherConversationTasks;\n }\n /** @deprecated Use {@link OtherConversationTasks}. */\n public set otherConversationTasks(value: ActiveTask[]) {\n this.OtherConversationTasks = value;\n }\n\n private destroy$ = new Subject<void>();\n\n /**\n * Wall-clock snapshot the elapsed-time template bindings read from. The template\n * must NOT call Date.now() (directly or via getElapsedTime) — a change-detection\n * pass that straddles a second boundary would then see two different values for\n * the same binding and throw NG0100 in dev mode. Instead this snapshot is stable\n * within a CD pass and advances via a 1s interval that runs only while the\n * dropdown is open (the only time elapsed text is rendered).\n */\n private _now = Date.now();\n private elapsedTimer: ReturnType<typeof setInterval> | null = null;\n\n constructor(\n private activeTasksService: ActiveTasksService\n ) {}\n\n ngOnInit() {\n // AIEngineBase is deferred at startup; kick off the load early so the\n // template helpers (getAgentIconClass / getAgentLogoUrl) find populated\n // .Agents data when they're called from the template. Fire-and-forget —\n // the helpers fall back to defaults until it's loaded.\n AIEngineBase.Instance.EnsureLoaded();\n\n // Subscribe to ALL active tasks across ALL conversations\n this.activeTasksService.tasks$\n .pipe(takeUntil(this.destroy$))\n .subscribe(tasks => {\n this.AllTasks = tasks;\n this.groupTasks();\n });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n this.stopElapsedTimer();\n }\n\n private groupTasks(): void {\n this.CurrentConversationTasks = this.AllTasks.filter(\n task => task.conversationId === this.ConversationId\n );\n\n this.OtherConversationTasks = this.AllTasks.filter(\n task => task.conversationId && task.conversationId !== this.ConversationId\n );\n }\n\n ToggleDropdown(): void {\n this.IsOpen = !this.IsOpen;\n if (this.IsOpen) {\n this.startElapsedTimer();\n } else {\n this.stopElapsedTimer();\n }\n }\n\n /** @deprecated Use {@link ToggleDropdown}. */\n toggleDropdown(): void {\n return this.ToggleDropdown();\n }\n\n CloseDropdown(): void {\n this.IsOpen = false;\n this.stopElapsedTimer();\n }\n\n /** @deprecated Use {@link CloseDropdown}. */\n closeDropdown(): void {\n return this.CloseDropdown();\n }\n\n private startElapsedTimer(): void {\n this._now = Date.now(); // fresh snapshot for the first render\n if (this.elapsedTimer) {\n return;\n }\n // Zone-patched interval: each tick triggers CD, so the elapsed text advances\n // once per second while the dropdown is open. Stopped on close/destroy.\n this.elapsedTimer = setInterval(() => {\n this._now = Date.now();\n }, 1000);\n }\n\n private stopElapsedTimer(): void {\n if (this.elapsedTimer) {\n clearInterval(this.elapsedTimer);\n this.elapsedTimer = null;\n }\n }\n\n OnTaskClick(task: ActiveTask): void {\n // If task is from another conversation, emit navigation event\n if (task.conversationId && task.conversationId !== this.ConversationId) {\n this.NavigateToConversation.emit({\n conversationId: task.conversationId,\n taskId: task.id\n });\n }\n\n this.TaskClicked.emit(task);\n this.CloseDropdown();\n }\n\n /** @deprecated Use {@link OnTaskClick}. */\n onTaskClick(task: ActiveTask): void {\n return this.OnTaskClick(task);\n }\n\n GetElapsedTime(task: ActiveTask): string {\n // Reads the CD-stable snapshot, never Date.now() — see _now for why (NG0100).\n const elapsed = Math.max(0, this._now - task.startTime);\n const seconds = Math.floor(elapsed / 1000);\n\n if (seconds < 60) {\n return `${seconds}s`;\n }\n\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = seconds % 60;\n return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;\n }\n\n /** @deprecated Use {@link GetElapsedTime}. */\n getElapsedTime(task: ActiveTask): string {\n return this.GetElapsedTime(task);\n }\n\n GetTrimmedStatus(status: string): string {\n const maxLength = 50;\n if (status.length <= maxLength) {\n return status;\n }\n return status.substring(0, maxLength) + '...';\n }\n\n /** @deprecated Use {@link GetTrimmedStatus}. */\n getTrimmedStatus(status: string): string {\n return this.GetTrimmedStatus(status);\n }\n\n /**\n * Get agent icon class by looking up agent in AIEngineBase cache\n * Similar to message-item component's aiAgentInfo getter\n */\n GetAgentIconClass(agentName: string): string {\n // Look up agent from AIEngineBase cache by name\n if (AIEngineBase.Instance.ReadableAgents.length) {\n const agent = AIEngineBase.Instance.ReadableAgents.find(a => a.Name === agentName);\n if (agent?.IconClass) {\n return agent.IconClass;\n }\n }\n\n // Default fallback icon\n return 'fas fa-robot';\n }\n\n /** @deprecated Use {@link GetAgentIconClass}. */\n getAgentIconClass(agentName: string): string {\n return this.GetAgentIconClass(agentName);\n }\n\n /**\n * Get agent logo URL by looking up agent in AIEngineBase cache\n * Returns null if no logo URL is available\n */\n GetAgentLogoUrl(agentName: string): string | null {\n // Look up agent from AIEngineBase cache by name\n if (AIEngineBase.Instance.ReadableAgents.length) {\n const agent = AIEngineBase.Instance.ReadableAgents.find(a => a.Name === agentName);\n if (agent?.LogoURL) {\n return agent.LogoURL;\n }\n }\n\n return null;\n }\n\n /** @deprecated Use {@link GetAgentLogoUrl}. */\n getAgentLogoUrl(agentName: string): string | null {\n return this.GetAgentLogoUrl(agentName);\n }\n}\n"]}
@@ -314,6 +314,7 @@ export declare class ConversationWorkspaceComponent extends BaseAngularComponent
314
314
  private readonly USER_SETTING_SIDEBAR_KEY;
315
315
  private saveSettingsTimeout;
316
316
  private isLoadingSettings;
317
+ /** The user's own top-level tasks; the Tasks tab's fallback filter (see {@link TasksFilterResolver}). */
317
318
  TasksFilter: string;
318
319
  /** @deprecated Use {@link TasksFilter}. */
319
320
  get tasksFilter(): string;
@@ -454,9 +455,18 @@ export declare class ConversationWorkspaceComponent extends BaseAngularComponent
454
455
  }): void;
455
456
  ngOnInit(): Promise<void>;
456
457
  /**
457
- * Builds the SQL filter for tasks in conversations the user has access to
458
+ * Sets {@link TasksFilter} to the user's own tasks. The Tasks tab builds its full filter with
459
+ * {@link TasksFilterResolver} each time it loads.
458
460
  */
459
461
  private buildTasksFilter;
462
+ /**
463
+ * Builds the Tasks tab filter (see {@link BuildConversationTasksFilter}). The tasks view calls it
464
+ * on every load and refresh, so a task linked to a message created after the workspace opened
465
+ * appears on the next refresh. The same function is returned every time, so the input binding
466
+ * does not change.
467
+ */
468
+ get TasksFilterResolver(): () => Promise<string>;
469
+ private tasksFilterResolver;
460
470
  ngDoCheck(): void;
461
471
  ngOnDestroy(): void;
462
472
  onWindowResize(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-workspace.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/workspace/conversation-workspace.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conversation-workspace.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/workspace/conversation-workspace.component.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,7 @@ import { UUIDsEqual } from '@memberjunction/global';
23
23
  import { ArtifactMetadataEngine, UserInfoEngine, ConversationEngine } from '@memberjunction/core-entities';
24
24
  import { BaseAngularComponent } from '@memberjunction/ng-base-types';
25
25
  import { MentionAutocompleteService } from '../../services/mention-autocomplete.service';
26
+ import { BuildConversationTasksFilter, OwnTasksFilter } from '../../services/conversation-tasks-filter';
26
27
  import { ConversationChatAreaComponent } from '../conversation/conversation-chat-area.component';
27
28
  import { Subject, takeUntil } from 'rxjs';
28
29
  import { AIEngineBase } from '@memberjunction/ai-engine-base';
@@ -98,7 +99,7 @@ function ConversationWorkspaceComponent_Conditional_4_Conditional_6_Template(rf,
98
99
  } if (rf & 2) {
99
100
  const ctx_r1 = i0.ɵɵnextContext(2);
100
101
  i0.ɵɵadvance();
101
- i0.ɵɵproperty("environmentId", ctx_r1.environmentId)("currentUser", ctx_r1.currentUser)("baseFilter", ctx_r1.tasksFilter)("activeTaskId", ctx_r1.activeTaskId);
102
+ i0.ɵɵproperty("environmentId", ctx_r1.environmentId)("currentUser", ctx_r1.currentUser)("baseFilter", ctx_r1.tasksFilter)("BaseFilterResolver", ctx_r1.TasksFilterResolver)("activeTaskId", ctx_r1.activeTaskId);
102
103
  } }
103
104
  function ConversationWorkspaceComponent_Conditional_4_Conditional_7_Template(rf, ctx) { if (rf & 1) {
104
105
  const _r8 = i0.ɵɵgetCurrentView();
@@ -138,7 +139,7 @@ function ConversationWorkspaceComponent_Conditional_4_Template(rf, ctx) { if (rf
138
139
  i0.ɵɵconditionalCreate(3, ConversationWorkspaceComponent_Conditional_4_Conditional_3_Template, 2, 0, "button", 10);
139
140
  i0.ɵɵconditionalCreate(4, ConversationWorkspaceComponent_Conditional_4_Conditional_4_Template, 1, 0, "div", 11);
140
141
  i0.ɵɵconditionalCreate(5, ConversationWorkspaceComponent_Conditional_4_Conditional_5_Template, 2, 2, "div", 12);
141
- i0.ɵɵconditionalCreate(6, ConversationWorkspaceComponent_Conditional_4_Conditional_6_Template, 2, 4, "div", 12);
142
+ i0.ɵɵconditionalCreate(6, ConversationWorkspaceComponent_Conditional_4_Conditional_6_Template, 2, 5, "div", 12);
142
143
  i0.ɵɵconditionalCreate(7, ConversationWorkspaceComponent_Conditional_4_Conditional_7_Template, 2, 11, "div", 12);
143
144
  i0.ɵɵconditionalCreate(8, ConversationWorkspaceComponent_Conditional_4_Conditional_8_Template, 3, 16);
144
145
  i0.ɵɵelementEnd();
@@ -579,7 +580,7 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
579
580
  USER_SETTING_SIDEBAR_KEY = 'Conversations.SidebarState';
580
581
  saveSettingsTimeout = null;
581
582
  isLoadingSettings = false;
582
- // Task filter for conversation-specific filtering
583
+ /** The user's own top-level tasks; the Tasks tab's fallback filter (see {@link TasksFilterResolver}). */
583
584
  TasksFilter = '1=1';
584
585
  /** @deprecated Use {@link TasksFilter}. */
585
586
  get tasksFilter() {
@@ -907,7 +908,7 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
907
908
  AIEngineBase.Instance.Config(false),
908
909
  ArtifactMetadataEngine.Instance.Config(false)
909
910
  ]);
910
- console.log('✅ AI Engine initialized with', AIEngineBase.Instance.Agents?.length || 0, 'agents');
911
+ console.log('✅ AI Engine initialized with', AIEngineBase.Instance.ReadableAgents.length, 'agents');
911
912
  console.log('✅ Artifact Metadata Engine initialized with', ArtifactMetadataEngine.Instance.ArtifactTypes?.length || 0, 'artifact types');
912
913
  // Initialize mention autocomplete service immediately after AI engine
913
914
  // This ensures the cache is built from the fully-loaded agent list
@@ -962,29 +963,23 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
962
963
  this.buildTasksFilter();
963
964
  }
964
965
  /**
965
- * Builds the SQL filter for tasks in conversations the user has access to
966
+ * Sets {@link TasksFilter} to the user's own tasks. The Tasks tab builds its full filter with
967
+ * {@link TasksFilterResolver} each time it loads.
966
968
  */
967
969
  buildTasksFilter() {
968
- // Filter tasks by conversations the user owns or is a participant in, or tasks owned
969
- // by the user
970
- const md = this.ProviderToUse;
971
- const cd = md.EntityByName('MJ: Conversation Details');
972
- const c = md.EntityByName('MJ: Conversations');
973
- if (!cd || !c) {
974
- console.warn('⚠️ Missing metadata for Conversations or Conversation Details');
975
- this.TasksFilter = `ParentID IS NULL AND UserID = '${this.CurrentUser.ID}'`; // Fallback to user-owned tasks only
976
- return;
977
- }
978
- this.TasksFilter = `ParentID IS NULL AND (UserID = '${this.CurrentUser.ID}' OR ConversationDetailID IN (
979
- SELECT ID FROM [${cd.SchemaName}].[${cd.BaseView}]
980
- WHERE
981
- UserID ='${this.CurrentUser.ID}' OR
982
- ConversationID IN (
983
- SELECT ID FROM [${c.SchemaName}].[${c.BaseView}] WHERE UserID='${this.CurrentUser.ID}'
984
- )
985
- ))`;
986
- console.log('📝 Conversations domain tasks filter built:', this.TasksFilter);
970
+ this.TasksFilter = OwnTasksFilter(this.CurrentUser);
971
+ }
972
+ /**
973
+ * Builds the Tasks tab filter (see {@link BuildConversationTasksFilter}). The tasks view calls it
974
+ * on every load and refresh, so a task linked to a message created after the workspace opened
975
+ * appears on the next refresh. The same function is returned every time, so the input binding
976
+ * does not change.
977
+ */
978
+ get TasksFilterResolver() {
979
+ this.tasksFilterResolver ??= () => BuildConversationTasksFilter(this.ProviderToUse, this.CurrentUser);
980
+ return this.tasksFilterResolver;
987
981
  }
982
+ tasksFilterResolver = null;
988
983
  ngDoCheck() {
989
984
  // Detect new unsaved conversation state changes
990
985
  const currentIsNewConversation = this.IsNewUnsavedConversation;
@@ -1304,7 +1299,7 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
1304
1299
  await AIEngineBase.Instance.Config(true);
1305
1300
  // Refresh the mention autocomplete service to pick up new agents
1306
1301
  await this.mentionAutocompleteService.refresh(this.CurrentUser);
1307
- const agentCount = AIEngineBase.Instance.Agents?.length || 0;
1302
+ const agentCount = AIEngineBase.Instance.ReadableAgents.length;
1308
1303
  this.notificationService.CreateSimpleNotification(`Agent cache refreshed (${agentCount} agents)`, 'success', 3000);
1309
1304
  this.cdr.detectChanges();
1310
1305
  }
@@ -1552,9 +1547,11 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
1552
1547
  console.log('✨ Workspace received rename event:', event);
1553
1548
  // Trigger animation in sidebar by setting the ID
1554
1549
  this.RenamedConversationId = event.conversationId;
1550
+ this.cdr.detectChanges();
1555
1551
  // Clear after animation completes (1500ms)
1556
1552
  setTimeout(() => {
1557
1553
  this.RenamedConversationId = null;
1554
+ this.cdr.detectChanges();
1558
1555
  }, 1500);
1559
1556
  }
1560
1557
  /** @deprecated Use {@link OnConversationRenamed}. */
@@ -1806,7 +1803,7 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
1806
1803
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.chatArea = _t.first);
1807
1804
  } }, hostBindings: function ConversationWorkspaceComponent_HostBindings(rf, ctx) { if (rf & 1) {
1808
1805
  i0.ɵɵlistener("resize", function ConversationWorkspaceComponent_resize_HostBindingHandler() { return ctx.onWindowResize(); }, i0.ɵɵresolveWindow)("click", function ConversationWorkspaceComponent_click_HostBindingHandler($event) { return ctx.onDocumentClick($event); }, i0.ɵɵresolveDocument);
1809
- } }, inputs: { EnvironmentId: "EnvironmentId", environmentId: "environmentId", InitialConversationId: "InitialConversationId", initialConversationId: "initialConversationId", Layout: "Layout", layout: "layout", CurrentUser: "CurrentUser", currentUser: "currentUser", ActiveContext: "ActiveContext", activeContext: "activeContext", ContextItemId: "ContextItemId", contextItemId: "contextItemId", ShowRoutines: "ShowRoutines", ActiveTabInput: "ActiveTabInput", activeTabInput: "activeTabInput", ActiveConversationInput: "ActiveConversationInput", activeConversationInput: "activeConversationInput", ActiveCollectionInput: "ActiveCollectionInput", activeCollectionInput: "activeCollectionInput", ActiveVersionIdInput: "ActiveVersionIdInput", activeVersionIdInput: "activeVersionIdInput", ActiveTaskInput: "ActiveTaskInput", activeTaskInput: "activeTaskInput" }, outputs: { ConversationChanged: "ConversationChanged", conversationChanged: "conversationChanged", ArtifactOpened: "ArtifactOpened", artifactOpened: "artifactOpened", NavigationChanged: "NavigationChanged", navigationChanged: "navigationChanged", NewConversationStarted: "NewConversationStarted", newConversationStarted: "newConversationStarted", ActionableCommandExecuted: "ActionableCommandExecuted", actionableCommandExecuted: "actionableCommandExecuted", AutomaticCommandExecuted: "AutomaticCommandExecuted", automaticCommandExecuted: "automaticCommandExecuted", NavigationRequested: "NavigationRequested", navigationRequested: "navigationRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 8, vars: 13, consts: [["mjSearchShortcut", "", 1, "conversation-workspace", 3, "searchTriggered"], [1, "workspace-navigation"], [3, "tabChanged", "sidebarToggled", "searchTriggered", "refreshTriggered", "activeTab", "environmentId", "currentUser", "conversationId"], [1, "workspace-loading"], [1, "workspace-content"], [3, "close", "resultSelected", "isOpen", "environmentId", "currentUser"], [3, "saved", "cancelled", "isOpen", "artifact", "currentUser"], ["text", "Loading agents...", "size", "large"], [1, "mobile-sidebar-backdrop", "visible"], [1, "workspace-sidebar", 3, "open", "collapsed", "no-transition", "width"], ["title", "Show conversations", 1, "sidebar-floating-toggle"], [1, "sidebar-resize-handle"], [1, "workspace-main"], [1, "mobile-sidebar-backdrop", "visible", 3, "click"], [1, "workspace-sidebar"], [3, "conversationSelected", "newConversationRequested", "openEntityRecord", "pinSidebarRequested", "unpinSidebarRequested", "activeTab", "environmentId", "currentUser", "selectedConversationId", "renamedConversationId", "isSidebarPinned", "isMobileView", "ShowRoutines", "Provider"], ["title", "Show conversations", 1, "sidebar-floating-toggle", 3, "click"], [1, "fas", "fa-table-columns"], [1, "sidebar-resize-handle", 3, "mousedown"], [3, "collectionNavigated", "environmentId", "currentUser"], [3, "openEntityRecord", "environmentId", "currentUser", "baseFilter", "activeTaskId"], [3, "conversationRenamed", "openEntityRecord", "navigationRequest", "taskClicked", "artifactLinkClicked", "conversationCreated", "realtimeConversationReady", "pendingArtifactConsumed", "pendingMessageConsumed", "pendingMessageRequested", "environmentId", "currentUser", "conversationId", "conversation", "isNewConversation", "pendingMessage", "pendingAttachments", "pendingMessageConversationId", "pendingArtifactId", "pendingArtifactConversationId", "pendingArtifactVersionNumber"], [1, "artifact-panel-resize-handle"], [1, "workspace-artifact-panel"], [3, "closed", "navigateToLink", "shareRequested", "maximizeToggled", "applyFormRequested", "artifactId", "currentUser", "environmentId", "versionNumber", "showSaveToCollection", "viewContext", "Scope", "contextCollectionId", "canShare", "canEdit", "isMaximized"], [1, "artifact-panel-resize-handle", 3, "mousedown"]], template: function ConversationWorkspaceComponent_Template(rf, ctx) { if (rf & 1) {
1806
+ } }, inputs: { EnvironmentId: "EnvironmentId", environmentId: "environmentId", InitialConversationId: "InitialConversationId", initialConversationId: "initialConversationId", Layout: "Layout", layout: "layout", CurrentUser: "CurrentUser", currentUser: "currentUser", ActiveContext: "ActiveContext", activeContext: "activeContext", ContextItemId: "ContextItemId", contextItemId: "contextItemId", ShowRoutines: "ShowRoutines", ActiveTabInput: "ActiveTabInput", activeTabInput: "activeTabInput", ActiveConversationInput: "ActiveConversationInput", activeConversationInput: "activeConversationInput", ActiveCollectionInput: "ActiveCollectionInput", activeCollectionInput: "activeCollectionInput", ActiveVersionIdInput: "ActiveVersionIdInput", activeVersionIdInput: "activeVersionIdInput", ActiveTaskInput: "ActiveTaskInput", activeTaskInput: "activeTaskInput" }, outputs: { ConversationChanged: "ConversationChanged", conversationChanged: "conversationChanged", ArtifactOpened: "ArtifactOpened", artifactOpened: "artifactOpened", NavigationChanged: "NavigationChanged", navigationChanged: "navigationChanged", NewConversationStarted: "NewConversationStarted", newConversationStarted: "newConversationStarted", ActionableCommandExecuted: "ActionableCommandExecuted", actionableCommandExecuted: "actionableCommandExecuted", AutomaticCommandExecuted: "AutomaticCommandExecuted", automaticCommandExecuted: "automaticCommandExecuted", NavigationRequested: "NavigationRequested", navigationRequested: "navigationRequested" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 8, vars: 13, consts: [["mjSearchShortcut", "", 1, "conversation-workspace", 3, "searchTriggered"], [1, "workspace-navigation"], [3, "tabChanged", "sidebarToggled", "searchTriggered", "refreshTriggered", "activeTab", "environmentId", "currentUser", "conversationId"], [1, "workspace-loading"], [1, "workspace-content"], [3, "close", "resultSelected", "isOpen", "environmentId", "currentUser"], [3, "saved", "cancelled", "isOpen", "artifact", "currentUser"], ["text", "Loading agents...", "size", "large"], [1, "mobile-sidebar-backdrop", "visible"], [1, "workspace-sidebar", 3, "open", "collapsed", "no-transition", "width"], ["title", "Show conversations", 1, "sidebar-floating-toggle"], [1, "sidebar-resize-handle"], [1, "workspace-main"], [1, "mobile-sidebar-backdrop", "visible", 3, "click"], [1, "workspace-sidebar"], [3, "conversationSelected", "newConversationRequested", "openEntityRecord", "pinSidebarRequested", "unpinSidebarRequested", "activeTab", "environmentId", "currentUser", "selectedConversationId", "renamedConversationId", "isSidebarPinned", "isMobileView", "ShowRoutines", "Provider"], ["title", "Show conversations", 1, "sidebar-floating-toggle", 3, "click"], [1, "fas", "fa-table-columns"], [1, "sidebar-resize-handle", 3, "mousedown"], [3, "collectionNavigated", "environmentId", "currentUser"], [3, "openEntityRecord", "environmentId", "currentUser", "baseFilter", "BaseFilterResolver", "activeTaskId"], [3, "conversationRenamed", "openEntityRecord", "navigationRequest", "taskClicked", "artifactLinkClicked", "conversationCreated", "realtimeConversationReady", "pendingArtifactConsumed", "pendingMessageConsumed", "pendingMessageRequested", "environmentId", "currentUser", "conversationId", "conversation", "isNewConversation", "pendingMessage", "pendingAttachments", "pendingMessageConversationId", "pendingArtifactId", "pendingArtifactConversationId", "pendingArtifactVersionNumber"], [1, "artifact-panel-resize-handle"], [1, "workspace-artifact-panel"], [3, "closed", "navigateToLink", "shareRequested", "maximizeToggled", "applyFormRequested", "artifactId", "currentUser", "environmentId", "versionNumber", "showSaveToCollection", "viewContext", "Scope", "contextCollectionId", "canShare", "canEdit", "isMaximized"], [1, "artifact-panel-resize-handle", 3, "mousedown"]], template: function ConversationWorkspaceComponent_Template(rf, ctx) { if (rf & 1) {
1810
1807
  i0.ɵɵelementStart(0, "div", 0);
1811
1808
  i0.ɵɵlistener("searchTriggered", function ConversationWorkspaceComponent_Template_div_searchTriggered_0_listener() { return ctx.openSearch(); });
1812
1809
  i0.ɵɵelementStart(1, "div", 1)(2, "mj-conversation-navigation", 2);
@@ -1837,7 +1834,7 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
1837
1834
  }
1838
1835
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConversationWorkspaceComponent, [{
1839
1836
  type: Component,
1840
- args: [{ standalone: false, selector: 'mj-conversation-workspace', template: "<div class=\"conversation-workspace\" [attr.data-layout]=\"layout\" mjSearchShortcut (searchTriggered)=\"openSearch()\">\n <!-- Top Navigation Bar -->\n <div class=\"workspace-navigation\">\n <mj-conversation-navigation\n [activeTab]=\"activeTab\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [conversationId]=\"selectedConversationId\"\n (tabChanged)=\"onTabChanged($event)\"\n (sidebarToggled)=\"toggleSidebar()\"\n (searchTriggered)=\"openSearch()\"\n (refreshTriggered)=\"onRefreshAgentCache()\">\n </mj-conversation-navigation>\n </div>\n\n <!-- Loading spinner while initializing agents -->\n @if (!isWorkspaceReady) {\n <div class=\"workspace-loading\">\n <mj-loading text=\"Loading agents...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Main workspace content - only renders when agents are ready -->\n @if (isWorkspaceReady) {\n <div class=\"workspace-content\">\n <!-- Mobile sidebar backdrop -->\n @if (isMobileView && isSidebarVisible && activeTab !== 'collections' && activeTab !== 'tasks') {\n <div class=\"mobile-sidebar-backdrop visible\" (click)=\"closeSidebar()\"></div>\n }\n\n <!-- Left Sidebar (hidden when Collections or Tasks view is active) -->\n @if (activeTab !== 'collections' && activeTab !== 'tasks' && isSidebarSettingsLoaded) {\n <div class=\"workspace-sidebar\"\n [class.open]=\"isSidebarVisible\"\n [class.collapsed]=\"isSidebarCollapsed\"\n [class.no-transition]=\"!sidebarTransitionsEnabled\"\n [style.width.px]=\"isSidebarCollapsed ? 0 : sidebarWidth\">\n <mj-conversation-sidebar\n [activeTab]=\"activeTab\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [selectedConversationId]=\"selectedConversationId\"\n [renamedConversationId]=\"renamedConversationId\"\n [isSidebarPinned]=\"isSidebarPinned\"\n [isMobileView]=\"isMobileView\"\n [ShowRoutines]=\"ShowRoutines\"\n [Provider]=\"Provider\"\n (conversationSelected)=\"onConversationSelected($event)\"\n (newConversationRequested)=\"startNewConversation()\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (pinSidebarRequested)=\"pinSidebar()\"\n (unpinSidebarRequested)=\"unpinSidebar()\">\n </mj-conversation-sidebar>\n </div>\n }\n\n <!-- Floating toggle button (only visible when sidebar is collapsed and settings loaded) -->\n @if (activeTab !== 'collections' && activeTab !== 'tasks' && isSidebarCollapsed && isSidebarSettingsLoaded) {\n <button class=\"sidebar-floating-toggle\"\n (click)=\"expandSidebar()\"\n title=\"Show conversations\">\n <i class=\"fas fa-table-columns\"></i>\n </button>\n }\n\n <!-- Resize handle for sidebar (only when expanded and settings loaded) -->\n @if (isSidebarVisible && !isSidebarCollapsed && activeTab !== 'collections' && activeTab !== 'tasks' && isSidebarSettingsLoaded) {\n <div class=\"sidebar-resize-handle\"\n (mousedown)=\"onSidebarResizeStart($event)\"></div>\n }\n\n <!-- Collections Full-Panel View -->\n @if (activeTab === 'collections') {\n <div class=\"workspace-main\">\n <mj-collections-full-view\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n (collectionNavigated)=\"onCollectionNavigated($event)\">\n </mj-collections-full-view>\n </div>\n }\n\n <!-- Tasks Full-Panel View -->\n @if (activeTab === 'tasks') {\n <div class=\"workspace-main\">\n <mj-tasks-full-view\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [baseFilter]=\"tasksFilter\"\n [activeTaskId]=\"activeTaskId\"\n (openEntityRecord)=\"onOpenEntityRecordFromTasks($event)\">\n </mj-tasks-full-view>\n </div>\n }\n\n <!-- Main Chat Area (only shown when not in Collections or Tasks view) -->\n @if (activeTab !== 'collections' && activeTab !== 'tasks') {\n <div class=\"workspace-main\">\n <mj-conversation-chat-area\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [conversationId]=\"selectedConversationId\"\n [conversation]=\"selectedConversation\"\n [isNewConversation]=\"isNewUnsavedConversation\"\n [pendingMessage]=\"pendingMessageToSend\"\n [pendingAttachments]=\"pendingAttachmentsToSend\"\n [pendingMessageConversationId]=\"pendingMessageConversationId\"\n [pendingArtifactId]=\"pendingArtifactId\"\n [pendingArtifactConversationId]=\"pendingArtifactConversationId\"\n [pendingArtifactVersionNumber]=\"pendingArtifactVersionNumber\"\n (conversationRenamed)=\"onConversationRenamed($event)\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (navigationRequest)=\"onNavigationRequest($event)\"\n (taskClicked)=\"onTaskClicked($event)\"\n (artifactLinkClicked)=\"onArtifactLinkNavigation($event)\"\n (conversationCreated)=\"onConversationCreated($event)\"\n (realtimeConversationReady)=\"onRealtimeConversationReady($event)\"\n (pendingArtifactConsumed)=\"pendingArtifactId = null; pendingArtifactConversationId = null; pendingArtifactVersionNumber = null\"\n (pendingMessageConsumed)=\"pendingMessageToSend = null; pendingAttachmentsToSend = null; pendingMessageConversationId = null\"\n (pendingMessageRequested)=\"onPendingMessageRequested($event)\">\n </mj-conversation-chat-area>\n </div>\n }\n\n <!-- Right Artifact Panel -->\n @if (isArtifactPanelOpen && activeArtifactId) {\n @if (!isArtifactPanelMaximized) {\n <div class=\"artifact-panel-resize-handle\" (mousedown)=\"onArtifactPanelResizeStart($event)\"></div>\n }\n <div class=\"workspace-artifact-panel\"\n [style.width.%]=\"artifactPanelWidth\"\n [class.maximized]=\"isArtifactPanelMaximized\">\n <mj-artifact-viewer-panel\n [artifactId]=\"activeArtifactId\"\n [currentUser]=\"currentUser\"\n [environmentId]=\"environmentId\"\n [versionNumber]=\"activeVersionNumber ?? undefined\"\n [showSaveToCollection]=\"activeTab !== 'collections'\"\n [viewContext]=\"activeTab === 'collections' ? 'collection' : 'conversation'\"\n [Scope]=\"activeTab === 'collections' ? null : ArtifactViewerScope\"\n [contextCollectionId]=\"collectionState.activeCollectionId ?? undefined\"\n [canShare]=\"canShareActiveArtifact\"\n [canEdit]=\"canEditActiveArtifact\"\n [isMaximized]=\"isArtifactPanelMaximized\"\n (closed)=\"closeArtifactPanel()\"\n (navigateToLink)=\"onArtifactLinkNavigation($event)\"\n (shareRequested)=\"onArtifactShareRequested($event)\"\n (maximizeToggled)=\"toggleMaximizeArtifactPanel()\"\n (applyFormRequested)=\"onApplyFormRequested($event)\">\n </mj-artifact-viewer-panel>\n </div>\n }\n </div>\n }\n\n <!-- Global Search Panel -->\n <mj-search-panel\n [isOpen]=\"isSearchPanelOpen\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n (close)=\"closeSearch()\"\n (resultSelected)=\"handleSearchResult($event)\">\n </mj-search-panel>\n\n <!-- Toast Notifications -->\n <mj-toast></mj-toast>\n\n <!-- Artifact Share Modal -->\n <mj-artifact-share-modal\n [isOpen]=\"isArtifactShareModalOpen\"\n [artifact]=\"artifactToShare\"\n [currentUser]=\"currentUser\"\n (saved)=\"onArtifactShared()\"\n (cancelled)=\"onArtifactShareModalClose()\">\n </mj-artifact-share-modal>\n</div>", styles: [".conversation-workspace {\n display: flex;\n flex-direction: column;\n height: 100%; /* Fill parent container - works in any context (tabs, embedded, etc.) */\n min-height: 0; /* Allow flex shrinking in nested flex containers */\n background-color: var(--mj-bg-surface-sunken);\n position: relative;\n}\n\n.workspace-navigation {\n flex-shrink: 0;\n height: 48px;\n background-color: var(--mj-text-primary);\n border-bottom: 1px solid color-mix(in srgb, var(--mj-text-inverse) 10%, transparent);\n}\n\n.workspace-content {\n flex: 1;\n display: flex;\n overflow: hidden;\n min-height: 0;\n position: relative;\n}\n\n.workspace-sidebar {\n flex-shrink: 0;\n background-color: var(--mj-text-primary);\n border-right: 1px solid var(--mj-border-default);\n overflow-y: auto;\n transition: width 0.3s ease;\n}\n\n/* Disable transitions during initial load to prevent jarring animation */\n.workspace-sidebar.no-transition {\n transition: none !important;\n}\n\n.workspace-sidebar.collapsed {\n width: 0 !important;\n min-width: 0;\n border-right: none;\n overflow: hidden;\n}\n\n/* Floating toggle button (only visible when sidebar is collapsed) */\n.sidebar-floating-toggle {\n position: absolute;\n top: 12px;\n left: 12px;\n z-index: 100;\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-text-primary);\n border: 1px solid color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border-radius: 8px;\n cursor: pointer;\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-text-primary) 15%, transparent);\n transition: all 0.2s ease;\n}\n\n.sidebar-floating-toggle:hover {\n background: var(--mj-text-primary);\n border-color: color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 20%, transparent);\n transform: scale(1.05);\n}\n\n.sidebar-floating-toggle:active {\n transform: scale(0.98);\n}\n\n.sidebar-floating-toggle i {\n color: color-mix(in srgb, var(--mj-text-inverse) 85%, transparent);\n font-size: 16px;\n transition: color 0.15s ease;\n}\n\n.sidebar-floating-toggle:hover i {\n color: var(--mj-text-inverse);\n}\n\n.sidebar-resize-handle {\n width: 4px;\n background: transparent;\n cursor: ew-resize;\n flex-shrink: 0;\n position: relative;\n transition: background-color 0.2s;\n}\n\n.sidebar-resize-handle:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.sidebar-resize-handle:active {\n background: var(--mj-brand-primary-hover);\n}\n\n.sidebar-resize-handle::before {\n content: '';\n position: absolute;\n left: -4px;\n right: -4px;\n top: 0;\n bottom: 0;\n cursor: ew-resize;\n}\n\n.workspace-main {\n flex: 1;\n display: flex;\n flex-direction: column;\n background-color: var(--mj-bg-surface-card);\n overflow: hidden;\n min-height: 0;\n}\n\n.workspace-main > mj-conversation-chat-area {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n\n.workspace-artifact-panel {\n flex-shrink: 0;\n background-color: var(--mj-bg-surface-card);\n overflow: hidden;\n min-width: 300px;\n max-width: 70%;\n}\n\n.artifact-panel-resize-handle {\n width: 4px;\n background-color: transparent;\n cursor: ew-resize;\n flex-shrink: 0;\n transition: background-color 0.2s;\n position: relative;\n z-index: 10;\n}\n\n/* Wider hit area for easier grabbing */\n.artifact-panel-resize-handle::before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: -4px;\n right: -4px;\n cursor: ew-resize;\n}\n\n.artifact-panel-resize-handle:hover {\n background-color: var(--mj-brand-primary-hover);\n}\n\n.artifact-panel-resize-handle:active {\n background-color: var(--mj-brand-primary-hover);\n}\n\n/* Maximized artifact panel */\n.workspace-artifact-panel.maximized {\n width: 100% !important;\n max-width: 100%;\n}\n\n/* Compact layout */\n.conversation-workspace[data-layout=\"compact\"] .workspace-sidebar {\n width: 240px;\n}\n\n.conversation-workspace[data-layout=\"compact\"] .workspace-artifact-panel {\n width: 400px;\n}\n\n/* Embedded layout */\n.conversation-workspace[data-layout=\"embedded\"] {\n height: 100%;\n}\n\n.conversation-workspace[data-layout=\"embedded\"] .workspace-navigation {\n height: 48px;\n}\n\n/* Responsive */\n@media (max-width: 1024px) {\n .workspace-sidebar {\n position: absolute;\n left: 0;\n top: 60px;\n bottom: 0;\n z-index: 100;\n box-shadow: 2px 0 8px color-mix(in srgb, var(--mj-text-primary) 10%, transparent);\n }\n\n .workspace-artifact-panel {\n position: fixed;\n right: 0;\n top: 60px;\n bottom: 0;\n z-index: 100;\n box-shadow: -2px 0 8px color-mix(in srgb, var(--mj-text-primary) 10%, transparent);\n }\n}\n\n/* Desktop sidebar toggle animation */\n@media (min-width: 769px) {\n .workspace-sidebar {\n transition: width 0.3s ease, min-width 0.3s ease;\n overflow: hidden;\n }\n\n .workspace-sidebar:not(.open) {\n width: 0 !important;\n min-width: 0;\n border-right: none;\n }\n\n .sidebar-resize-handle {\n transition: opacity 0.3s ease, width 0.3s ease;\n }\n\n .workspace-sidebar:not(.open) ~ .sidebar-resize-handle {\n opacity: 0;\n width: 0;\n pointer-events: none;\n }\n}\n\n/* Mobile adjustments: 481px - 768px */\n@media (max-width: 768px) {\n .workspace-sidebar {\n position: fixed;\n left: 0;\n top: 80px;\n z-index: 1000;\n width: 260px !important;\n height: calc(100vh - 80px);\n transform: translateX(-100%);\n transition: transform 0.3s ease;\n }\n\n .workspace-sidebar.open {\n transform: translateX(0);\n }\n\n .workspace-artifact-panel {\n position: fixed;\n width: 100%;\n left: 0;\n right: 0;\n top: 56px; /* 48px nav + 8px dark strip above blue border */\n bottom: 0;\n z-index: 1000;\n max-width: 100%;\n height: auto;\n }\n\n .sidebar-resize-handle,\n .artifact-panel-resize-handle,\n .sidebar-floating-toggle {\n display: none;\n }\n\n /* Mobile sidebar backdrop */\n .mobile-sidebar-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.3s ease;\n z-index: 999;\n }\n\n .mobile-sidebar-backdrop.visible {\n opacity: 1;\n pointer-events: auto;\n }\n}\n\n/* Small Phone adjustments: <= 480px */\n@media (max-width: 480px) {\n .workspace-navigation {\n height: 48px;\n }\n\n .workspace-sidebar {\n width: 100%;\n }\n}\n\n/* Loading spinner (shown while initializing agents) */\n.workspace-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n width: 100%;\n background: var(--mj-bg-surface-card);\n gap: 1rem;\n}\n\n.loading-spinner {\n font-size: 3rem;\n color: var(--mj-brand-primary);\n}\n\n.workspace-loading p {\n font-size: 1rem;\n color: var(--mj-text-secondary);\n margin: 0;\n}"] }]
1837
+ args: [{ standalone: false, selector: 'mj-conversation-workspace', template: "<div class=\"conversation-workspace\" [attr.data-layout]=\"layout\" mjSearchShortcut (searchTriggered)=\"openSearch()\">\n <!-- Top Navigation Bar -->\n <div class=\"workspace-navigation\">\n <mj-conversation-navigation\n [activeTab]=\"activeTab\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [conversationId]=\"selectedConversationId\"\n (tabChanged)=\"onTabChanged($event)\"\n (sidebarToggled)=\"toggleSidebar()\"\n (searchTriggered)=\"openSearch()\"\n (refreshTriggered)=\"onRefreshAgentCache()\">\n </mj-conversation-navigation>\n </div>\n\n <!-- Loading spinner while initializing agents -->\n @if (!isWorkspaceReady) {\n <div class=\"workspace-loading\">\n <mj-loading text=\"Loading agents...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Main workspace content - only renders when agents are ready -->\n @if (isWorkspaceReady) {\n <div class=\"workspace-content\">\n <!-- Mobile sidebar backdrop -->\n @if (isMobileView && isSidebarVisible && activeTab !== 'collections' && activeTab !== 'tasks') {\n <div class=\"mobile-sidebar-backdrop visible\" (click)=\"closeSidebar()\"></div>\n }\n\n <!-- Left Sidebar (hidden when Collections or Tasks view is active) -->\n @if (activeTab !== 'collections' && activeTab !== 'tasks' && isSidebarSettingsLoaded) {\n <div class=\"workspace-sidebar\"\n [class.open]=\"isSidebarVisible\"\n [class.collapsed]=\"isSidebarCollapsed\"\n [class.no-transition]=\"!sidebarTransitionsEnabled\"\n [style.width.px]=\"isSidebarCollapsed ? 0 : sidebarWidth\">\n <mj-conversation-sidebar\n [activeTab]=\"activeTab\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [selectedConversationId]=\"selectedConversationId\"\n [renamedConversationId]=\"renamedConversationId\"\n [isSidebarPinned]=\"isSidebarPinned\"\n [isMobileView]=\"isMobileView\"\n [ShowRoutines]=\"ShowRoutines\"\n [Provider]=\"Provider\"\n (conversationSelected)=\"onConversationSelected($event)\"\n (newConversationRequested)=\"startNewConversation()\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (pinSidebarRequested)=\"pinSidebar()\"\n (unpinSidebarRequested)=\"unpinSidebar()\">\n </mj-conversation-sidebar>\n </div>\n }\n\n <!-- Floating toggle button (only visible when sidebar is collapsed and settings loaded) -->\n @if (activeTab !== 'collections' && activeTab !== 'tasks' && isSidebarCollapsed && isSidebarSettingsLoaded) {\n <button class=\"sidebar-floating-toggle\"\n (click)=\"expandSidebar()\"\n title=\"Show conversations\">\n <i class=\"fas fa-table-columns\"></i>\n </button>\n }\n\n <!-- Resize handle for sidebar (only when expanded and settings loaded) -->\n @if (isSidebarVisible && !isSidebarCollapsed && activeTab !== 'collections' && activeTab !== 'tasks' && isSidebarSettingsLoaded) {\n <div class=\"sidebar-resize-handle\"\n (mousedown)=\"onSidebarResizeStart($event)\"></div>\n }\n\n <!-- Collections Full-Panel View -->\n @if (activeTab === 'collections') {\n <div class=\"workspace-main\">\n <mj-collections-full-view\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n (collectionNavigated)=\"onCollectionNavigated($event)\">\n </mj-collections-full-view>\n </div>\n }\n\n <!-- Tasks Full-Panel View -->\n @if (activeTab === 'tasks') {\n <div class=\"workspace-main\">\n <mj-tasks-full-view\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [baseFilter]=\"tasksFilter\"\n [BaseFilterResolver]=\"TasksFilterResolver\"\n [activeTaskId]=\"activeTaskId\"\n (openEntityRecord)=\"onOpenEntityRecordFromTasks($event)\">\n </mj-tasks-full-view>\n </div>\n }\n\n <!-- Main Chat Area (only shown when not in Collections or Tasks view) -->\n @if (activeTab !== 'collections' && activeTab !== 'tasks') {\n <div class=\"workspace-main\">\n <mj-conversation-chat-area\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n [conversationId]=\"selectedConversationId\"\n [conversation]=\"selectedConversation\"\n [isNewConversation]=\"isNewUnsavedConversation\"\n [pendingMessage]=\"pendingMessageToSend\"\n [pendingAttachments]=\"pendingAttachmentsToSend\"\n [pendingMessageConversationId]=\"pendingMessageConversationId\"\n [pendingArtifactId]=\"pendingArtifactId\"\n [pendingArtifactConversationId]=\"pendingArtifactConversationId\"\n [pendingArtifactVersionNumber]=\"pendingArtifactVersionNumber\"\n (conversationRenamed)=\"onConversationRenamed($event)\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n (navigationRequest)=\"onNavigationRequest($event)\"\n (taskClicked)=\"onTaskClicked($event)\"\n (artifactLinkClicked)=\"onArtifactLinkNavigation($event)\"\n (conversationCreated)=\"onConversationCreated($event)\"\n (realtimeConversationReady)=\"onRealtimeConversationReady($event)\"\n (pendingArtifactConsumed)=\"pendingArtifactId = null; pendingArtifactConversationId = null; pendingArtifactVersionNumber = null\"\n (pendingMessageConsumed)=\"pendingMessageToSend = null; pendingAttachmentsToSend = null; pendingMessageConversationId = null\"\n (pendingMessageRequested)=\"onPendingMessageRequested($event)\">\n </mj-conversation-chat-area>\n </div>\n }\n\n <!-- Right Artifact Panel -->\n @if (isArtifactPanelOpen && activeArtifactId) {\n @if (!isArtifactPanelMaximized) {\n <div class=\"artifact-panel-resize-handle\" (mousedown)=\"onArtifactPanelResizeStart($event)\"></div>\n }\n <div class=\"workspace-artifact-panel\"\n [style.width.%]=\"artifactPanelWidth\"\n [class.maximized]=\"isArtifactPanelMaximized\">\n <mj-artifact-viewer-panel\n [artifactId]=\"activeArtifactId\"\n [currentUser]=\"currentUser\"\n [environmentId]=\"environmentId\"\n [versionNumber]=\"activeVersionNumber ?? undefined\"\n [showSaveToCollection]=\"activeTab !== 'collections'\"\n [viewContext]=\"activeTab === 'collections' ? 'collection' : 'conversation'\"\n [Scope]=\"activeTab === 'collections' ? null : ArtifactViewerScope\"\n [contextCollectionId]=\"collectionState.activeCollectionId ?? undefined\"\n [canShare]=\"canShareActiveArtifact\"\n [canEdit]=\"canEditActiveArtifact\"\n [isMaximized]=\"isArtifactPanelMaximized\"\n (closed)=\"closeArtifactPanel()\"\n (navigateToLink)=\"onArtifactLinkNavigation($event)\"\n (shareRequested)=\"onArtifactShareRequested($event)\"\n (maximizeToggled)=\"toggleMaximizeArtifactPanel()\"\n (applyFormRequested)=\"onApplyFormRequested($event)\">\n </mj-artifact-viewer-panel>\n </div>\n }\n </div>\n }\n\n <!-- Global Search Panel -->\n <mj-search-panel\n [isOpen]=\"isSearchPanelOpen\"\n [environmentId]=\"environmentId\"\n [currentUser]=\"currentUser\"\n (close)=\"closeSearch()\"\n (resultSelected)=\"handleSearchResult($event)\">\n </mj-search-panel>\n\n <!-- Toast Notifications -->\n <mj-toast></mj-toast>\n\n <!-- Artifact Share Modal -->\n <mj-artifact-share-modal\n [isOpen]=\"isArtifactShareModalOpen\"\n [artifact]=\"artifactToShare\"\n [currentUser]=\"currentUser\"\n (saved)=\"onArtifactShared()\"\n (cancelled)=\"onArtifactShareModalClose()\">\n </mj-artifact-share-modal>\n</div>", styles: [".conversation-workspace {\n display: flex;\n flex-direction: column;\n height: 100%; /* Fill parent container - works in any context (tabs, embedded, etc.) */\n min-height: 0; /* Allow flex shrinking in nested flex containers */\n background-color: var(--mj-bg-surface-sunken);\n position: relative;\n}\n\n.workspace-navigation {\n flex-shrink: 0;\n height: 48px;\n background-color: var(--mj-text-primary);\n border-bottom: 1px solid color-mix(in srgb, var(--mj-text-inverse) 10%, transparent);\n}\n\n.workspace-content {\n flex: 1;\n display: flex;\n overflow: hidden;\n min-height: 0;\n position: relative;\n}\n\n.workspace-sidebar {\n flex-shrink: 0;\n background-color: var(--mj-text-primary);\n border-right: 1px solid var(--mj-border-default);\n overflow-y: auto;\n transition: width 0.3s ease;\n}\n\n/* Disable transitions during initial load to prevent jarring animation */\n.workspace-sidebar.no-transition {\n transition: none !important;\n}\n\n.workspace-sidebar.collapsed {\n width: 0 !important;\n min-width: 0;\n border-right: none;\n overflow: hidden;\n}\n\n/* Floating toggle button (only visible when sidebar is collapsed) */\n.sidebar-floating-toggle {\n position: absolute;\n top: 12px;\n left: 12px;\n z-index: 100;\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-text-primary);\n border: 1px solid color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border-radius: 8px;\n cursor: pointer;\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-text-primary) 15%, transparent);\n transition: all 0.2s ease;\n}\n\n.sidebar-floating-toggle:hover {\n background: var(--mj-text-primary);\n border-color: color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 20%, transparent);\n transform: scale(1.05);\n}\n\n.sidebar-floating-toggle:active {\n transform: scale(0.98);\n}\n\n.sidebar-floating-toggle i {\n color: color-mix(in srgb, var(--mj-text-inverse) 85%, transparent);\n font-size: 16px;\n transition: color 0.15s ease;\n}\n\n.sidebar-floating-toggle:hover i {\n color: var(--mj-text-inverse);\n}\n\n.sidebar-resize-handle {\n width: 4px;\n background: transparent;\n cursor: ew-resize;\n flex-shrink: 0;\n position: relative;\n transition: background-color 0.2s;\n}\n\n.sidebar-resize-handle:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.sidebar-resize-handle:active {\n background: var(--mj-brand-primary-hover);\n}\n\n.sidebar-resize-handle::before {\n content: '';\n position: absolute;\n left: -4px;\n right: -4px;\n top: 0;\n bottom: 0;\n cursor: ew-resize;\n}\n\n.workspace-main {\n flex: 1;\n display: flex;\n flex-direction: column;\n background-color: var(--mj-bg-surface-card);\n overflow: hidden;\n min-height: 0;\n}\n\n.workspace-main > mj-conversation-chat-area {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n\n.workspace-artifact-panel {\n flex-shrink: 0;\n background-color: var(--mj-bg-surface-card);\n overflow: hidden;\n min-width: 300px;\n max-width: 70%;\n}\n\n.artifact-panel-resize-handle {\n width: 4px;\n background-color: transparent;\n cursor: ew-resize;\n flex-shrink: 0;\n transition: background-color 0.2s;\n position: relative;\n z-index: 10;\n}\n\n/* Wider hit area for easier grabbing */\n.artifact-panel-resize-handle::before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: -4px;\n right: -4px;\n cursor: ew-resize;\n}\n\n.artifact-panel-resize-handle:hover {\n background-color: var(--mj-brand-primary-hover);\n}\n\n.artifact-panel-resize-handle:active {\n background-color: var(--mj-brand-primary-hover);\n}\n\n/* Maximized artifact panel */\n.workspace-artifact-panel.maximized {\n width: 100% !important;\n max-width: 100%;\n}\n\n/* Compact layout */\n.conversation-workspace[data-layout=\"compact\"] .workspace-sidebar {\n width: 240px;\n}\n\n.conversation-workspace[data-layout=\"compact\"] .workspace-artifact-panel {\n width: 400px;\n}\n\n/* Embedded layout */\n.conversation-workspace[data-layout=\"embedded\"] {\n height: 100%;\n}\n\n.conversation-workspace[data-layout=\"embedded\"] .workspace-navigation {\n height: 48px;\n}\n\n/* Responsive */\n@media (max-width: 1024px) {\n .workspace-sidebar {\n position: absolute;\n left: 0;\n top: 60px;\n bottom: 0;\n z-index: 100;\n box-shadow: 2px 0 8px color-mix(in srgb, var(--mj-text-primary) 10%, transparent);\n }\n\n .workspace-artifact-panel {\n position: fixed;\n right: 0;\n top: 60px;\n bottom: 0;\n z-index: 100;\n box-shadow: -2px 0 8px color-mix(in srgb, var(--mj-text-primary) 10%, transparent);\n }\n}\n\n/* Desktop sidebar toggle animation */\n@media (min-width: 769px) {\n .workspace-sidebar {\n transition: width 0.3s ease, min-width 0.3s ease;\n overflow: hidden;\n }\n\n .workspace-sidebar:not(.open) {\n width: 0 !important;\n min-width: 0;\n border-right: none;\n }\n\n .sidebar-resize-handle {\n transition: opacity 0.3s ease, width 0.3s ease;\n }\n\n .workspace-sidebar:not(.open) ~ .sidebar-resize-handle {\n opacity: 0;\n width: 0;\n pointer-events: none;\n }\n}\n\n/* Mobile adjustments: 481px - 768px */\n@media (max-width: 768px) {\n .workspace-sidebar {\n position: fixed;\n left: 0;\n top: 80px;\n z-index: 1000;\n width: 260px !important;\n height: calc(100vh - 80px);\n transform: translateX(-100%);\n transition: transform 0.3s ease;\n }\n\n .workspace-sidebar.open {\n transform: translateX(0);\n }\n\n .workspace-artifact-panel {\n position: fixed;\n width: 100%;\n left: 0;\n right: 0;\n top: 56px; /* 48px nav + 8px dark strip above blue border */\n bottom: 0;\n z-index: 1000;\n max-width: 100%;\n height: auto;\n }\n\n .sidebar-resize-handle,\n .artifact-panel-resize-handle,\n .sidebar-floating-toggle {\n display: none;\n }\n\n /* Mobile sidebar backdrop */\n .mobile-sidebar-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.3s ease;\n z-index: 999;\n }\n\n .mobile-sidebar-backdrop.visible {\n opacity: 1;\n pointer-events: auto;\n }\n}\n\n/* Small Phone adjustments: <= 480px */\n@media (max-width: 480px) {\n .workspace-navigation {\n height: 48px;\n }\n\n .workspace-sidebar {\n width: 100%;\n }\n}\n\n/* Loading spinner (shown while initializing agents) */\n.workspace-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n width: 100%;\n background: var(--mj-bg-surface-card);\n gap: 1rem;\n}\n\n.loading-spinner {\n font-size: 3rem;\n color: var(--mj-brand-primary);\n}\n\n.workspace-loading p {\n font-size: 1rem;\n color: var(--mj-text-secondary);\n margin: 0;\n}"] }]
1841
1838
  }], () => [{ type: i1.ArtifactStateService }, { type: i2.CollectionStateService }, { type: i3.ArtifactPermissionService }, { type: i4.MJNotificationService }, { type: i5.ConversationStreamingService }, { type: i6.UICommandHandlerService }, { type: i0.ChangeDetectorRef }], { EnvironmentId: [{
1842
1839
  type: Input
1843
1840
  }], environmentId: [{
@@ -1922,5 +1919,5 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
1922
1919
  type: HostListener,
1923
1920
  args: ['document:click', ['$event']]
1924
1921
  }] }); })();
1925
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConversationWorkspaceComponent, { className: "ConversationWorkspaceComponent", filePath: "src/lib/components/workspace/conversation-workspace.component.ts", lineNumber: 69 }); })();
1922
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ConversationWorkspaceComponent, { className: "ConversationWorkspaceComponent", filePath: "src/lib/components/workspace/conversation-workspace.component.ts", lineNumber: 70 }); })();
1926
1923
  //# sourceMappingURL=conversation-workspace.component.js.map