@memberjunction/ng-conversations 5.36.0 → 5.38.0

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 (79) hide show
  1. package/README.md +2 -2
  2. package/dist/lib/components/conversation/conversation-agent-picker.component.d.ts +47 -0
  3. package/dist/lib/components/conversation/conversation-agent-picker.component.d.ts.map +1 -0
  4. package/dist/lib/components/conversation/conversation-agent-picker.component.js +253 -0
  5. package/dist/lib/components/conversation/conversation-agent-picker.component.js.map +1 -0
  6. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +201 -4
  7. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  8. package/dist/lib/components/conversation/conversation-chat-area.component.js +776 -263
  9. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  10. package/dist/lib/components/conversation/conversation-empty-state.component.d.ts +2 -1
  11. package/dist/lib/components/conversation/conversation-empty-state.component.d.ts.map +1 -1
  12. package/dist/lib/components/conversation/conversation-empty-state.component.js +6 -3
  13. package/dist/lib/components/conversation/conversation-empty-state.component.js.map +1 -1
  14. package/dist/lib/components/conversation/conversation-mode-picker.component.d.ts +57 -0
  15. package/dist/lib/components/conversation/conversation-mode-picker.component.d.ts.map +1 -0
  16. package/dist/lib/components/conversation/conversation-mode-picker.component.js +252 -0
  17. package/dist/lib/components/conversation/conversation-mode-picker.component.js.map +1 -0
  18. package/dist/lib/components/dialogs/rating-dialog.component.d.ts +31 -0
  19. package/dist/lib/components/dialogs/rating-dialog.component.d.ts.map +1 -0
  20. package/dist/lib/components/dialogs/rating-dialog.component.js +290 -0
  21. package/dist/lib/components/dialogs/rating-dialog.component.js.map +1 -0
  22. package/dist/lib/components/mention/mention-editor.component.d.ts +1 -1
  23. package/dist/lib/components/mention/mention-editor.component.d.ts.map +1 -1
  24. package/dist/lib/components/mention/mention-editor.component.js +1 -0
  25. package/dist/lib/components/mention/mention-editor.component.js.map +1 -1
  26. package/dist/lib/components/message/conversation-message-rating.component.d.ts +43 -18
  27. package/dist/lib/components/message/conversation-message-rating.component.d.ts.map +1 -1
  28. package/dist/lib/components/message/conversation-message-rating.component.js +235 -193
  29. package/dist/lib/components/message/conversation-message-rating.component.js.map +1 -1
  30. package/dist/lib/components/message/message-input-box.component.d.ts +1 -1
  31. package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
  32. package/dist/lib/components/message/message-input-box.component.js +1 -1
  33. package/dist/lib/components/message/message-input-box.component.js.map +1 -1
  34. package/dist/lib/components/message/message-input.component.d.ts +58 -4
  35. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  36. package/dist/lib/components/message/message-input.component.js +135 -21
  37. package/dist/lib/components/message/message-input.component.js.map +1 -1
  38. package/dist/lib/components/message/message-item.component.d.ts +0 -13
  39. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  40. package/dist/lib/components/message/message-item.component.js +126 -152
  41. package/dist/lib/components/message/message-item.component.js.map +1 -1
  42. package/dist/lib/components/overlay/chat-overlay.component.d.ts +88 -5
  43. package/dist/lib/components/overlay/chat-overlay.component.d.ts.map +1 -1
  44. package/dist/lib/components/overlay/chat-overlay.component.js +296 -54
  45. package/dist/lib/components/overlay/chat-overlay.component.js.map +1 -1
  46. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +11 -0
  47. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  48. package/dist/lib/components/workspace/conversation-workspace.component.js +13 -3
  49. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  50. package/dist/lib/conversations.module.d.ts +59 -57
  51. package/dist/lib/conversations.module.d.ts.map +1 -1
  52. package/dist/lib/conversations.module.js +12 -4
  53. package/dist/lib/conversations.module.js.map +1 -1
  54. package/dist/lib/models/conversation-state.model.d.ts +0 -27
  55. package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
  56. package/dist/lib/models/conversation-state.model.js.map +1 -1
  57. package/dist/lib/services/conversation-agent.service.d.ts +1 -9
  58. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  59. package/dist/lib/services/conversation-agent.service.js +22 -121
  60. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  61. package/dist/lib/services/conversation-attachment.service.d.ts.map +1 -1
  62. package/dist/lib/services/conversation-attachment.service.js +5 -26
  63. package/dist/lib/services/conversation-attachment.service.js.map +1 -1
  64. package/dist/lib/services/conversation-bridge.service.d.ts +13 -0
  65. package/dist/lib/services/conversation-bridge.service.d.ts.map +1 -1
  66. package/dist/lib/services/conversation-bridge.service.js +15 -0
  67. package/dist/lib/services/conversation-bridge.service.js.map +1 -1
  68. package/dist/lib/services/data-cache.service.d.ts.map +1 -1
  69. package/dist/lib/services/data-cache.service.js +0 -1
  70. package/dist/lib/services/data-cache.service.js.map +1 -1
  71. package/dist/lib/services/dialog.service.d.ts +24 -0
  72. package/dist/lib/services/dialog.service.d.ts.map +1 -1
  73. package/dist/lib/services/dialog.service.js +45 -0
  74. package/dist/lib/services/dialog.service.js.map +1 -1
  75. package/package.json +23 -22
  76. package/dist/lib/components/message/suggested-responses.component.d.ts +0 -55
  77. package/dist/lib/components/message/suggested-responses.component.d.ts.map +0 -1
  78. package/dist/lib/components/message/suggested-responses.component.js +0 -207
  79. package/dist/lib/components/message/suggested-responses.component.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"chat-overlay.component.js","sourceRoot":"","sources":["../../../../src/lib/components/overlay/chat-overlay.component.ts","../../../../src/lib/components/overlay/chat-overlay.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Floating Chat Overlay Component\n *\n * A collapsible floating panel (bottom-right corner) that wraps the\n * conversation-chat-area component. Provides a persistent, minimizable chat\n * experience across the application.\n *\n * This component is GENERIC -- it does NOT know about NavigationService,\n * Knowledge Hub, or any Explorer-specific concepts. It raises events that\n * the consuming application handles.\n *\n * Coordinates with the full Conversations workspace view through\n * ConversationBridgeService so that switching between overlay and workspace\n * preserves conversation continuity.\n */\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ChangeDetectorRef,\n inject\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { takeUntil } from 'rxjs/operators';\nimport { UserInfo, Metadata, CompositeKey } from '@memberjunction/core';\nimport { MJConversationEntity, MJTaskEntity, MJEnvironmentEntityExtended, UserInfoEngine } from '@memberjunction/core-entities';\nimport { AgentClientService } from '@memberjunction/ng-agent-client';\nimport { ClientToolResultEvent } from '@memberjunction/ai-agent-client';\nimport { ConversationBridgeService, ConversationSwitchEvent } from '../../services/conversation-bridge.service';\nimport { NavigationRequest } from '@memberjunction/ng-artifacts';\nimport { PendingAttachment } from '../mention/mention-editor.component';\n\n/** Visual state of the overlay panel */\nexport type ChatOverlayState = 'collapsed' | 'expanded' | 'maximized';\n\n/** Event payload when the active conversation changes in the overlay */\nexport interface OverlayConversationSwitchedEvent {\n PreviousConversationID: string | null;\n NewConversationID: string | null;\n}\n\n/** Persisted overlay size preferences */\ninterface OverlaySizePrefs {\n width: number;\n height: number;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-chat-agents-overlay',\n templateUrl: './chat-overlay.component.html',\n styleUrls: ['./chat-overlay.component.css']\n})\nexport class ChatAgentsOverlayComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n private cdr = inject(ChangeDetectorRef);\n private bridge = inject(ConversationBridgeService);\n private agentClient = inject(AgentClientService);\n private destroy$ = new Subject<void>();\n\n // --- Settings persistence ---\n private static readonly SIZE_SETTING_KEY = 'ChatOverlay.Size';\n private static readonly DEFAULT_WIDTH = 420;\n private static readonly DEFAULT_HEIGHT = 600;\n private static readonly MIN_WIDTH = 320;\n private static readonly MIN_HEIGHT = 350;\n private static readonly MAX_WIDTH = 900;\n private static readonly MAX_HEIGHT = 1000;\n\n // --- Inputs ---\n\n /** Controls external visibility (e.g., parent hides overlay on chat route) */\n private _IsVisible = true;\n\n @Input()\n set IsVisible(value: boolean) {\n const prev = this._IsVisible;\n this._IsVisible = value;\n if (!value && prev && this.State !== 'collapsed') {\n this.Collapse();\n }\n this.cdr.detectChanges();\n }\n get IsVisible(): boolean {\n return this._IsVisible;\n }\n\n /** Current user info, passed through to conversation-chat-area. Auto-resolved from Metadata if not provided. */\n @Input() CurrentUser!: UserInfo;\n\n /** Environment ID, passed through to conversation-chat-area. Auto-resolved from default if not provided. */\n @Input() EnvironmentId!: string;\n\n /** Application context snapshot for AI agent awareness. Updated by the host app on navigation transitions. */\n @Input() AppContext: Record<string, unknown> | null = null;\n\n /** Greeting message shown in the empty state when no conversation is active */\n @Input() EmptyStateGreeting: string = 'How can I help you?';\n\n // --- Outputs ---\n\n /** Emitted when the overlay visibility changes */\n @Output() VisibilityChanged = new EventEmitter<ChatOverlayState>();\n\n /** Emitted when a tool finishes executing in the agent client */\n @Output() ToolExecuted = new EventEmitter<ClientToolResultEvent>();\n\n /** Emitted when the active conversation changes in the overlay */\n @Output() ConversationSwitched = new EventEmitter<OverlayConversationSwitchedEvent>();\n\n /** Emitted when the user requests opening the full chat workspace */\n @Output() OpenFullChatWorkspace = new EventEmitter<string | null>();\n\n /** Emitted when navigation is requested (entity record, etc.) */\n @Output() NavigationRequested = new EventEmitter<NavigationRequest>();\n\n /** Emitted when an entity record open is requested */\n @Output() OpenEntityRecord = new EventEmitter<{entityName: string; compositeKey: CompositeKey}>();\n\n /** Emitted when a task is clicked */\n @Output() TaskClicked = new EventEmitter<MJTaskEntity>();\n\n // --- Component State ---\n\n public State: ChatOverlayState = 'collapsed';\n public UnreadCount = 0;\n\n /** Panel dimensions (persisted via UserInfoEngine) */\n public PanelWidth = ChatAgentsOverlayComponent.DEFAULT_WIDTH;\n public PanelHeight = ChatAgentsOverlayComponent.DEFAULT_HEIGHT;\n\n /** Active conversation ID managed locally */\n private _conversationId: string | null = null;\n public get ConversationId(): string | null {\n return this._conversationId;\n }\n\n /** Active conversation entity */\n public Conversation: MJConversationEntity | null = null;\n\n /** Whether a new unsaved conversation is in progress */\n public IsNewConversation = true;\n\n /** Pending message to send after conversation creation */\n public PendingMessage: string | null = null;\n\n /** Pending attachments to send after conversation creation */\n public PendingAttachments: PendingAttachment[] | null = null;\n\n /** Resize drag state */\n private isResizing = false;\n private resizeEdge: 'left' | 'top' | 'top-left' | null = null;\n private resizeStartX = 0;\n private resizeStartY = 0;\n private resizeStartWidth = 0;\n private resizeStartHeight = 0;\n\n // --- Lifecycle ---\n\n ngOnInit(): void {\n this.resolveDefaults();\n this.loadSizePreferences();\n this.subscribeToBridgeEvents();\n this.subscribeToToolEvents();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.removeResizeListeners();\n }\n\n // --- Public Methods ---\n\n /** Toggle between collapsed and expanded states */\n public Toggle(): void {\n if (this.State === 'collapsed') {\n this.Expand();\n } else {\n this.Collapse();\n }\n }\n\n /** Expand the overlay to show the chat panel */\n public Expand(): void {\n this.State = 'expanded';\n this.UnreadCount = 0;\n this.bridge.NotifyOverlayActive(true);\n this.VisibilityChanged.emit(this.State);\n this.cdr.detectChanges();\n }\n\n /** Collapse the overlay to the floating button */\n public Collapse(): void {\n this.State = 'collapsed';\n this.bridge.NotifyOverlayActive(false);\n this.VisibilityChanged.emit(this.State);\n this.cdr.detectChanges();\n }\n\n /** Toggle between expanded and maximized states */\n public ToggleMaximize(): void {\n if (this.State === 'maximized') {\n this.State = 'expanded';\n } else {\n this.State = 'maximized';\n }\n this.bridge.NotifyOverlayActive(true);\n this.VisibilityChanged.emit(this.State);\n this.cdr.detectChanges();\n }\n\n /** Handle the user requesting to open full chat workspace */\n public OnOpenFullChatWorkspace(): void {\n this.OpenFullChatWorkspace.emit(this._conversationId);\n this.bridge.SwitchToWorkspace(this._conversationId);\n this.Collapse();\n }\n\n /** Handle conversation creation from the chat area */\n public OnConversationCreated(event: {\n conversation: MJConversationEntity;\n pendingMessage?: string;\n pendingAttachments?: PendingAttachment[];\n }): void {\n // Set ALL state atomically before Angular change detection runs\n this.PendingMessage = event.pendingMessage || null;\n this.PendingAttachments = event.pendingAttachments || null;\n const prevId = this._conversationId;\n this._conversationId = event.conversation.ID;\n this.Conversation = event.conversation;\n this.IsNewConversation = false;\n this.bridge.SetActiveFromOverlay(event.conversation.ID);\n this.emitConversationSwitched(prevId, event.conversation.ID);\n }\n\n /** Handle pending message consumed by chat area */\n public OnPendingMessageConsumed(): void {\n this.PendingMessage = null;\n this.PendingAttachments = null;\n }\n\n /** Handle conversation rename from chat area */\n public OnConversationRenamed(_event: {conversationId: string; name: string; description: string}): void {\n // The overlay doesn't need to do anything specific here;\n // the conversation entity is updated in-place by the chat area.\n }\n\n /** Handle entity record open requests */\n public OnOpenEntityRecord(event: {entityName: string; compositeKey: CompositeKey}): void {\n this.OpenEntityRecord.emit(event);\n }\n\n /** Handle navigation requests from the chat area */\n public OnNavigationRequest(event: NavigationRequest): void {\n this.NavigationRequested.emit(event);\n }\n\n /** Handle task clicks from the chat area */\n public OnTaskClicked(task: MJTaskEntity): void {\n this.TaskClicked.emit(task);\n }\n\n /** Start a new conversation in the overlay */\n public StartNewConversation(): void {\n const prevId = this._conversationId;\n this._conversationId = null;\n this.Conversation = null;\n // Force Angular change detection by toggling off then on\n // so the setter fires even if already in new-conversation state\n this.IsNewConversation = false;\n this.cdr.detectChanges();\n this.IsNewConversation = true;\n this.bridge.SetActiveFromOverlay(null);\n this.emitConversationSwitched(prevId, null);\n this.cdr.detectChanges();\n }\n\n /** Increment unread badge (called externally when messages arrive while collapsed) */\n public IncrementUnread(): void {\n if (this.State === 'collapsed') {\n this.UnreadCount++;\n this.cdr.detectChanges();\n }\n }\n\n // --- Resize Methods ---\n\n /** Start resizing from an edge or corner */\n public OnResizeStart(event: MouseEvent, edge: 'left' | 'top' | 'top-left'): void {\n event.preventDefault();\n event.stopPropagation();\n this.isResizing = true;\n this.resizeEdge = edge;\n this.resizeStartX = event.clientX;\n this.resizeStartY = event.clientY;\n this.resizeStartWidth = this.PanelWidth;\n this.resizeStartHeight = this.PanelHeight;\n\n document.addEventListener('mousemove', this.onResizeMove);\n document.addEventListener('mouseup', this.onResizeEnd);\n }\n\n private onResizeMove = (event: MouseEvent): void => {\n if (!this.isResizing || !this.resizeEdge) return;\n\n const deltaX = this.resizeStartX - event.clientX; // Inverted: dragging left increases width\n const deltaY = this.resizeStartY - event.clientY; // Inverted: dragging up increases height\n\n if (this.resizeEdge === 'left' || this.resizeEdge === 'top-left') {\n this.PanelWidth = this.clampWidth(this.resizeStartWidth + deltaX);\n }\n if (this.resizeEdge === 'top' || this.resizeEdge === 'top-left') {\n this.PanelHeight = this.clampHeight(this.resizeStartHeight + deltaY);\n }\n this.cdr.detectChanges();\n };\n\n private onResizeEnd = (): void => {\n if (!this.isResizing) return;\n this.isResizing = false;\n this.resizeEdge = null;\n this.removeResizeListeners();\n this.saveSizePreferences();\n };\n\n private removeResizeListeners(): void {\n document.removeEventListener('mousemove', this.onResizeMove);\n document.removeEventListener('mouseup', this.onResizeEnd);\n }\n\n private clampWidth(value: number): number {\n return Math.max(ChatAgentsOverlayComponent.MIN_WIDTH, Math.min(ChatAgentsOverlayComponent.MAX_WIDTH, value));\n }\n\n private clampHeight(value: number): number {\n return Math.max(ChatAgentsOverlayComponent.MIN_HEIGHT, Math.min(ChatAgentsOverlayComponent.MAX_HEIGHT, value));\n }\n\n // --- Private Methods ---\n\n /** Auto-resolve CurrentUser and EnvironmentId from Metadata when not provided as inputs */\n private resolveDefaults(): void {\n if (!this.CurrentUser) {\n const md = this.ProviderToUse;\n this.CurrentUser = md.CurrentUser;\n }\n if (!this.EnvironmentId) {\n this.EnvironmentId = MJEnvironmentEntityExtended.DefaultEnvironmentID;\n }\n }\n\n /** Load saved panel size from UserInfoEngine */\n private loadSizePreferences(): void {\n try {\n const engine = UserInfoEngine.Instance;\n const raw = engine.GetSetting(ChatAgentsOverlayComponent.SIZE_SETTING_KEY);\n if (raw) {\n const prefs: OverlaySizePrefs = JSON.parse(raw);\n this.PanelWidth = this.clampWidth(prefs.width);\n this.PanelHeight = this.clampHeight(prefs.height);\n }\n } catch {\n // Use defaults on error\n }\n }\n\n /** Persist panel size to UserInfoEngine (debounced) */\n private saveSizePreferences(): void {\n const prefs: OverlaySizePrefs = {\n width: this.PanelWidth,\n height: this.PanelHeight\n };\n UserInfoEngine.Instance.SetSettingDebounced(\n ChatAgentsOverlayComponent.SIZE_SETTING_KEY,\n JSON.stringify(prefs)\n );\n }\n\n /** Subscribe to bridge events for cross-view coordination */\n private subscribeToBridgeEvents(): void {\n this.bridge.SwitchEvent$\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: ConversationSwitchEvent) => {\n if (event.Target === 'overlay') {\n this.handleSwitchToOverlay(event);\n }\n });\n\n this.bridge.ActiveConversationID$\n .pipe(takeUntil(this.destroy$))\n .subscribe((id: string | null) => {\n // Only update if the change came from outside (workspace)\n if (id !== this._conversationId && this.bridge.WorkspaceActive$.value) {\n const prevId = this._conversationId;\n this._conversationId = id;\n this.IsNewConversation = id === null;\n this.Conversation = null; // Will be loaded by chat area\n this.emitConversationSwitched(prevId, id);\n this.cdr.detectChanges();\n }\n });\n }\n\n /** Subscribe to agent client tool execution events */\n private subscribeToToolEvents(): void {\n this.agentClient.ToolExecuted$\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: ClientToolResultEvent) => {\n this.ToolExecuted.emit(event);\n });\n }\n\n /** Handle request to switch conversation to the overlay */\n private handleSwitchToOverlay(event: ConversationSwitchEvent): void {\n const prevId = this._conversationId;\n this._conversationId = event.ConversationID;\n this.IsNewConversation = event.ConversationID === null;\n this.Conversation = null; // Will be reloaded by chat area\n this.Expand();\n this.emitConversationSwitched(prevId, event.ConversationID);\n }\n\n /** Emit a conversation switched event */\n private emitConversationSwitched(prevId: string | null, newId: string | null): void {\n this.ConversationSwitched.emit({\n PreviousConversationID: prevId,\n NewConversationID: newId\n });\n }\n}\n","@if (IsVisible) {\n <!-- Floating Button (collapsed state) -->\n @if (State === 'collapsed') {\n <div class=\"chat-overlay-bubble\" (click)=\"Toggle()\" title=\"Open Chat\">\n <i class=\"fa-solid fa-comments chat-overlay-bubble-icon\"></i>\n @if (UnreadCount > 0) {\n <span class=\"chat-overlay-badge\">{{ UnreadCount > 9 ? '9+' : UnreadCount }}</span>\n }\n </div>\n }\n\n <!-- Expanded / Maximized Chat Panel -->\n @if (State === 'expanded' || State === 'maximized') {\n <div class=\"chat-overlay-panel\"\n [class.maximized]=\"State === 'maximized'\"\n [style.width.px]=\"State === 'maximized' ? null : PanelWidth\"\n [style.height.px]=\"State === 'maximized' ? null : PanelHeight\">\n\n <!-- Resize handles (only in expanded, not maximized) -->\n @if (State === 'expanded') {\n <div class=\"resize-handle resize-left\"\n (mousedown)=\"OnResizeStart($event, 'left')\"></div>\n <div class=\"resize-handle resize-top\"\n (mousedown)=\"OnResizeStart($event, 'top')\"></div>\n <div class=\"resize-handle resize-top-left\"\n (mousedown)=\"OnResizeStart($event, 'top-left')\"></div>\n }\n\n <!-- Panel Header -->\n <div class=\"chat-overlay-header\">\n <div class=\"chat-overlay-title\">\n <i class=\"fa-solid fa-robot\"></i>\n <span>AI Assistant</span>\n </div>\n <div class=\"chat-overlay-header-actions\">\n <button\n class=\"chat-overlay-header-btn\"\n title=\"New conversation\"\n (click)=\"StartNewConversation()\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n @if (ConversationId) {\n <button\n class=\"chat-overlay-header-btn\"\n title=\"Open in full chat workspace\"\n (click)=\"OnOpenFullChatWorkspace()\">\n <i class=\"fa-solid fa-up-right-from-square\"></i>\n </button>\n }\n <button\n class=\"chat-overlay-header-btn\"\n [title]=\"State === 'maximized' ? 'Restore size' : 'Maximize'\"\n (click)=\"ToggleMaximize()\">\n <i class=\"fa-solid\" [class.fa-expand]=\"State !== 'maximized'\" [class.fa-compress]=\"State === 'maximized'\"></i>\n </button>\n <button\n class=\"chat-overlay-header-btn\"\n title=\"Minimize\"\n (click)=\"Collapse()\">\n <i class=\"fa-solid fa-minus\"></i>\n </button>\n </div>\n </div>\n\n <!-- Chat Content — wraps conversation-chat-area -->\n <div class=\"chat-overlay-body\">\n <mj-conversation-chat-area\n [environmentId]=\"EnvironmentId\"\n [currentUser]=\"CurrentUser\"\n [conversationId]=\"ConversationId\"\n [conversation]=\"Conversation\"\n [isNewConversation]=\"IsNewConversation\"\n [pendingMessage]=\"PendingMessage\"\n [pendingAttachments]=\"PendingAttachments\"\n [overlayMode]=\"true\"\n [showExportButton]=\"false\"\n [showShareButton]=\"false\"\n [showArtifactIndicator]=\"false\"\n [appContext]=\"AppContext\"\n [emptyStateGreeting]=\"EmptyStateGreeting\"\n (conversationCreated)=\"OnConversationCreated($event)\"\n (conversationRenamed)=\"OnConversationRenamed($event)\"\n (pendingMessageConsumed)=\"OnPendingMessageConsumed()\"\n (openEntityRecord)=\"OnOpenEntityRecord($event)\"\n (navigationRequest)=\"OnNavigationRequest($event)\"\n (taskClicked)=\"OnTaskClicked($event)\"\n ></mj-conversation-chat-area>\n </div>\n </div>\n }\n}\n"]}
1
+ {"version":3,"file":"chat-overlay.component.js","sourceRoot":"","sources":["../../../../src/lib/components/overlay/chat-overlay.component.ts","../../../../src/lib/components/overlay/chat-overlay.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Floating Chat Overlay Component\n *\n * A collapsible floating panel (bottom-right corner) that wraps the\n * conversation-chat-area component. Provides a persistent, minimizable chat\n * experience across the application.\n *\n * This component is GENERIC -- it does NOT know about NavigationService,\n * Knowledge Hub, or any Explorer-specific concepts. It raises events that\n * the consuming application handles.\n *\n * Coordinates with the full Conversations workspace view through\n * ConversationBridgeService so that switching between overlay and workspace\n * preserves conversation continuity.\n */\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ChangeDetectorRef,\n inject\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { takeUntil } from 'rxjs/operators';\nimport { UserInfo, Metadata, CompositeKey } from '@memberjunction/core';\nimport { MJConversationEntity, MJTaskEntity, MJEnvironmentEntityExtended, UserInfoEngine } from '@memberjunction/core-entities';\nimport { AgentClientService } from '@memberjunction/ng-agent-client';\nimport { ClientToolResultEvent } from '@memberjunction/ai-agent-client';\nimport { ConversationBridgeService, ConversationSwitchEvent } from '../../services/conversation-bridge.service';\nimport { NavigationRequest } from '@memberjunction/ng-artifacts';\nimport { PendingAttachment } from '../mention/mention-editor.component';\n\n/** Visual state of the overlay panel */\nexport type ChatOverlayState = 'collapsed' | 'expanded' | 'maximized';\n\n/** Event payload when the active conversation changes in the overlay */\nexport interface OverlayConversationSwitchedEvent {\n PreviousConversationID: string | null;\n NewConversationID: string | null;\n}\n\n/** Persisted overlay size and position preferences */\ninterface OverlayPrefs {\n width: number;\n height: number;\n /** Pixels the bubble has been dragged up from its default bottom position. Optional for back-compat with older saved prefs. */\n bubbleOffsetY?: number;\n /** When true, the bubble is hidden and only a thin sliver shows on the right edge. */\n bubbleHidden?: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-chat-agents-overlay',\n templateUrl: './chat-overlay.component.html',\n styleUrls: ['./chat-overlay.component.css']\n})\nexport class ChatAgentsOverlayComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n private cdr = inject(ChangeDetectorRef);\n private bridge = inject(ConversationBridgeService);\n private agentClient = inject(AgentClientService);\n private destroy$ = new Subject<void>();\n\n // --- Settings persistence ---\n private static readonly SIZE_SETTING_KEY = 'ChatOverlay.Size';\n private static readonly DEFAULT_WIDTH = 420;\n private static readonly DEFAULT_HEIGHT = 600;\n private static readonly MIN_WIDTH = 320;\n private static readonly MIN_HEIGHT = 350;\n private static readonly MAX_WIDTH = 900;\n private static readonly MAX_HEIGHT = 1000;\n\n // --- Bubble drag constants ---\n /** Default `bottom` for both bubble and panel (matches CSS 1.5rem). */\n private static readonly BASE_BOTTOM_PX = 24;\n /** Floating bubble diameter in pixels (matches CSS 3.5rem). */\n private static readonly BUBBLE_SIZE_PX = 56;\n /** Minimum gap to keep between the overlay and the viewport top edge. */\n private static readonly VIEWPORT_TOP_PADDING_PX = 16;\n /** Mousedown-to-mousemove distance that promotes a click into a drag. */\n private static readonly BUBBLE_DRAG_THRESHOLD_PX = 5;\n\n // --- Inputs ---\n\n /** Controls external visibility (e.g., parent hides overlay on chat route) */\n private _IsVisible = true;\n\n @Input()\n set IsVisible(value: boolean) {\n const prev = this._IsVisible;\n this._IsVisible = value;\n if (!value && prev && this.State !== 'collapsed') {\n this.Collapse();\n }\n this.cdr.detectChanges();\n }\n get IsVisible(): boolean {\n return this._IsVisible;\n }\n\n /** Current user info, passed through to conversation-chat-area. Auto-resolved from Metadata if not provided. */\n @Input() CurrentUser!: UserInfo;\n\n /** Environment ID, passed through to conversation-chat-area. Auto-resolved from default if not provided. */\n @Input() EnvironmentId!: string;\n\n /** Application context snapshot for AI agent awareness. Updated by the host app on navigation transitions. */\n @Input() AppContext: Record<string, unknown> | null = null;\n\n /** Greeting message shown in the empty state when no conversation is active */\n @Input() EmptyStateGreeting: string = 'How can I help you?';\n\n /**\n * Pixels reserved at the top of the viewport that the bubble and panel must not\n * cross. Set this from the host app to the height of any fixed top chrome (e.g.\n * Explorer's shell-header). Defaults to 0 — generic apps without top chrome\n * keep the full viewport available.\n */\n @Input() TopBoundaryPx: number = 0;\n\n // --- Outputs ---\n\n /** Emitted when the overlay visibility changes */\n @Output() VisibilityChanged = new EventEmitter<ChatOverlayState>();\n\n /** Emitted when a tool finishes executing in the agent client */\n @Output() ToolExecuted = new EventEmitter<ClientToolResultEvent>();\n\n /** Emitted when the active conversation changes in the overlay */\n @Output() ConversationSwitched = new EventEmitter<OverlayConversationSwitchedEvent>();\n\n /** Emitted when the user requests opening the full chat workspace */\n @Output() OpenFullChatWorkspace = new EventEmitter<string | null>();\n\n /** Emitted when navigation is requested (entity record, etc.) */\n @Output() NavigationRequested = new EventEmitter<NavigationRequest>();\n\n /** Emitted when an entity record open is requested */\n @Output() OpenEntityRecord = new EventEmitter<{entityName: string; compositeKey: CompositeKey}>();\n\n /** Emitted when a task is clicked */\n @Output() TaskClicked = new EventEmitter<MJTaskEntity>();\n\n // --- Component State ---\n\n public State: ChatOverlayState = 'collapsed';\n public UnreadCount = 0;\n\n /** Panel dimensions (persisted via UserInfoEngine) */\n public PanelWidth = ChatAgentsOverlayComponent.DEFAULT_WIDTH;\n public PanelHeight = ChatAgentsOverlayComponent.DEFAULT_HEIGHT;\n\n /**\n * Pixels the floating bubble has been dragged up from its default\n * bottom-right corner position. Always >= 0; clamping at render time\n * keeps the bubble on-screen even after a viewport resize.\n */\n public BubbleOffsetY = 0;\n\n /** True while the user is actively dragging the bubble; used to swap cursor + suppress click. */\n public IsBubbleDragging = false;\n\n /**\n * True from mousedown until mouseup on the bubble, regardless of whether the\n * gesture became a drag. Used to give immediate \"I'm being held\" feedback so\n * the user can see drag is possible even before crossing the move threshold.\n */\n public IsBubblePressed = false;\n\n /**\n * When true, the floating bubble is hidden and replaced by a thin sliver\n * flush with the right edge of the viewport. Persisted across sessions via\n * OverlayPrefs.bubbleHidden. Clicking the sliver restores the bubble.\n */\n public IsHidden = false;\n\n /** Active conversation ID managed locally */\n private _conversationId: string | null = null;\n public get ConversationId(): string | null {\n return this._conversationId;\n }\n\n /** Active conversation entity */\n public Conversation: MJConversationEntity | null = null;\n\n /** Whether a new unsaved conversation is in progress */\n public IsNewConversation = true;\n\n /** Pending message to send after conversation creation */\n public PendingMessage: string | null = null;\n\n /** Pending attachments to send after conversation creation */\n public PendingAttachments: PendingAttachment[] | null = null;\n\n /** Resize drag state */\n private isResizing = false;\n private resizeEdge: 'left' | 'top' | 'top-left' | null = null;\n private resizeStartX = 0;\n private resizeStartY = 0;\n private resizeStartWidth = 0;\n private resizeStartHeight = 0;\n\n /** Bubble drag state */\n private bubbleDragStartMouseY = 0;\n private bubbleDragStartOffset = 0;\n /** True once the pointer has moved past BUBBLE_DRAG_THRESHOLD_PX; suppresses the implicit click. */\n private bubbleDragMoved = false;\n /** ID of the pointer currently driving the drag — guards against multi-touch confusion. */\n private activeBubblePointerId: number | null = null;\n /** Element that captured the pointer; needed to release capture on end/cancel. */\n private bubbleCaptureTarget: HTMLElement | null = null;\n\n // --- Lifecycle ---\n\n ngOnInit(): void {\n this.resolveDefaults();\n this.loadPreferences();\n this.subscribeToBridgeEvents();\n this.subscribeToToolEvents();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.removeResizeListeners();\n this.removeBubbleDragListeners();\n }\n\n // --- Public Methods ---\n\n /** Toggle between collapsed and expanded states */\n public Toggle(): void {\n if (this.State === 'collapsed') {\n this.Expand();\n } else {\n this.Collapse();\n }\n }\n\n /** Expand the overlay to show the chat panel */\n public Expand(): void {\n // Expanding implies the user wants the chat visible — clear any hidden\n // state so collapse returns to the bubble, not back to the sliver.\n if (this.IsHidden) {\n this.IsHidden = false;\n this.savePreferences();\n }\n this.State = 'expanded';\n this.UnreadCount = 0;\n this.bridge.NotifyOverlayActive(true);\n this.VisibilityChanged.emit(this.State);\n this.cdr.detectChanges();\n }\n\n /** Collapse the overlay to the floating button */\n public Collapse(): void {\n this.State = 'collapsed';\n this.bridge.NotifyOverlayActive(false);\n this.VisibilityChanged.emit(this.State);\n this.cdr.detectChanges();\n }\n\n /** Toggle between expanded and maximized states */\n public ToggleMaximize(): void {\n if (this.State === 'maximized') {\n this.State = 'expanded';\n } else {\n this.State = 'maximized';\n }\n this.bridge.NotifyOverlayActive(true);\n this.VisibilityChanged.emit(this.State);\n this.cdr.detectChanges();\n }\n\n /** Handle the user requesting to open full chat workspace */\n public OnOpenFullChatWorkspace(): void {\n this.OpenFullChatWorkspace.emit(this._conversationId);\n this.bridge.SwitchToWorkspace(this._conversationId);\n this.Collapse();\n }\n\n /** Handle conversation creation from the chat area */\n public OnConversationCreated(event: {\n conversation: MJConversationEntity;\n pendingMessage?: string;\n pendingAttachments?: PendingAttachment[];\n }): void {\n // Set ALL state atomically before Angular change detection runs\n this.PendingMessage = event.pendingMessage || null;\n this.PendingAttachments = event.pendingAttachments || null;\n const prevId = this._conversationId;\n this._conversationId = event.conversation.ID;\n this.Conversation = event.conversation;\n this.IsNewConversation = false;\n this.bridge.SetActiveFromOverlay(event.conversation.ID);\n this.emitConversationSwitched(prevId, event.conversation.ID);\n }\n\n /** Handle pending message consumed by chat area */\n public OnPendingMessageConsumed(): void {\n this.PendingMessage = null;\n this.PendingAttachments = null;\n }\n\n /** Handle conversation rename from chat area */\n public OnConversationRenamed(_event: {conversationId: string; name: string; description: string}): void {\n // The overlay doesn't need to do anything specific here;\n // the conversation entity is updated in-place by the chat area.\n }\n\n /** Handle entity record open requests */\n public OnOpenEntityRecord(event: {entityName: string; compositeKey: CompositeKey}): void {\n this.OpenEntityRecord.emit(event);\n }\n\n /** Handle navigation requests from the chat area */\n public OnNavigationRequest(event: NavigationRequest): void {\n this.NavigationRequested.emit(event);\n }\n\n /** Handle task clicks from the chat area */\n public OnTaskClicked(task: MJTaskEntity): void {\n this.TaskClicked.emit(task);\n }\n\n /** Start a new conversation in the overlay */\n public StartNewConversation(): void {\n const prevId = this._conversationId;\n this._conversationId = null;\n this.Conversation = null;\n // Force Angular change detection by toggling off then on\n // so the setter fires even if already in new-conversation state\n this.IsNewConversation = false;\n this.cdr.detectChanges();\n this.IsNewConversation = true;\n this.bridge.SetActiveFromOverlay(null);\n this.emitConversationSwitched(prevId, null);\n this.cdr.detectChanges();\n }\n\n /**\n * Hide the floating bubble — leaves a thin sliver on the right edge as the\n * only affordance to bring it back. Invoked from the small \"×\" pill that\n * appears on hover. Stops propagation so the bubble's own click handler\n * doesn't fire and toggle the panel open.\n */\n public Hide(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n if (this.IsHidden) return;\n this.IsHidden = true;\n this.savePreferences();\n this.cdr.detectChanges();\n }\n\n /** Restore the floating bubble after it was hidden. Triggered by clicking the sliver. */\n public Show(): void {\n if (!this.IsHidden) return;\n this.IsHidden = false;\n this.savePreferences();\n this.cdr.detectChanges();\n }\n\n /** Increment unread badge (called externally when messages arrive while collapsed) */\n public IncrementUnread(): void {\n if (this.State === 'collapsed') {\n this.UnreadCount++;\n this.cdr.detectChanges();\n }\n }\n\n // --- Resize Methods ---\n\n /** Start resizing from an edge or corner */\n public OnResizeStart(event: MouseEvent, edge: 'left' | 'top' | 'top-left'): void {\n event.preventDefault();\n event.stopPropagation();\n this.isResizing = true;\n this.resizeEdge = edge;\n this.resizeStartX = event.clientX;\n this.resizeStartY = event.clientY;\n this.resizeStartWidth = this.PanelWidth;\n this.resizeStartHeight = this.PanelHeight;\n\n document.addEventListener('mousemove', this.onResizeMove);\n document.addEventListener('mouseup', this.onResizeEnd);\n }\n\n private onResizeMove = (event: MouseEvent): void => {\n if (!this.isResizing || !this.resizeEdge) return;\n\n const deltaX = this.resizeStartX - event.clientX; // Inverted: dragging left increases width\n const deltaY = this.resizeStartY - event.clientY; // Inverted: dragging up increases height\n\n if (this.resizeEdge === 'left' || this.resizeEdge === 'top-left') {\n this.PanelWidth = this.clampWidth(this.resizeStartWidth + deltaX);\n }\n if (this.resizeEdge === 'top' || this.resizeEdge === 'top-left') {\n this.PanelHeight = this.clampHeight(this.resizeStartHeight + deltaY);\n }\n this.cdr.detectChanges();\n };\n\n private onResizeEnd = (): void => {\n if (!this.isResizing) return;\n this.isResizing = false;\n this.resizeEdge = null;\n this.removeResizeListeners();\n this.savePreferences();\n };\n\n private removeResizeListeners(): void {\n document.removeEventListener('mousemove', this.onResizeMove);\n document.removeEventListener('mouseup', this.onResizeEnd);\n }\n\n private clampWidth(value: number): number {\n return Math.max(ChatAgentsOverlayComponent.MIN_WIDTH, Math.min(ChatAgentsOverlayComponent.MAX_WIDTH, value));\n }\n\n private clampHeight(value: number): number {\n return Math.max(ChatAgentsOverlayComponent.MIN_HEIGHT, Math.min(ChatAgentsOverlayComponent.MAX_HEIGHT, value));\n }\n\n // --- Bubble Drag Methods (Pointer Events — unified mouse / touch / pen) ---\n\n /**\n * Start tracking a potential bubble drag. We don't enter drag mode until\n * the pointer moves past BUBBLE_DRAG_THRESHOLD_PX — releasing before that\n * threshold is treated as a normal click/tap and opens the chat (via Toggle()).\n *\n * Pointer Events (not mousedown) so the same code path serves desktop mouse,\n * touch on phones/tablets, and pen input. setPointerCapture keeps the gesture\n * tied to this element even if the finger or cursor strays off the bubble.\n */\n public OnBubblePointerDown(event: PointerEvent): void {\n // Mouse: respect primary-button only. Touch/pen: button is always 0, so this passes naturally.\n if (event.pointerType === 'mouse' && event.button !== 0) return;\n // Don't start a second drag while one is in flight (e.g. second finger on touch).\n if (this.activeBubblePointerId !== null) return;\n event.preventDefault();\n\n const target = event.currentTarget as HTMLElement;\n target.setPointerCapture(event.pointerId);\n this.bubbleCaptureTarget = target;\n\n this.activeBubblePointerId = event.pointerId;\n this.bubbleDragStartMouseY = event.clientY;\n this.bubbleDragStartOffset = this.BubbleOffsetY;\n this.bubbleDragMoved = false;\n this.IsBubblePressed = true;\n this.cdr.detectChanges();\n\n document.addEventListener('pointermove', this.onBubbleDragMove);\n document.addEventListener('pointerup', this.onBubbleDragEnd);\n document.addEventListener('pointercancel', this.onBubbleDragEnd);\n }\n\n private onBubbleDragMove = (event: PointerEvent): void => {\n if (event.pointerId !== this.activeBubblePointerId) return;\n const deltaY = this.bubbleDragStartMouseY - event.clientY; // dragging up = positive\n if (!this.bubbleDragMoved) {\n if (Math.abs(deltaY) < ChatAgentsOverlayComponent.BUBBLE_DRAG_THRESHOLD_PX) return;\n this.bubbleDragMoved = true;\n this.IsBubbleDragging = true;\n }\n this.BubbleOffsetY = this.clampBubbleOffsetY(this.bubbleDragStartOffset + deltaY);\n this.cdr.detectChanges();\n };\n\n private onBubbleDragEnd = (event: PointerEvent): void => {\n if (event.pointerId !== this.activeBubblePointerId) return;\n this.removeBubbleDragListeners();\n\n if (this.bubbleCaptureTarget) {\n // Browser may have implicitly released capture on pointerup already (per the\n // Pointer Events spec). releasePointerCapture throws in that race; safe to ignore.\n try { this.bubbleCaptureTarget.releasePointerCapture(event.pointerId); } catch { /* noop */ }\n }\n this.bubbleCaptureTarget = null;\n this.activeBubblePointerId = null;\n\n const wasDragged = this.bubbleDragMoved;\n const wasCancelled = event.type === 'pointercancel';\n this.bubbleDragMoved = false;\n this.IsBubbleDragging = false;\n this.IsBubblePressed = false;\n if (wasDragged) {\n this.savePreferences();\n this.cdr.detectChanges();\n } else if (!wasCancelled) {\n this.Toggle();\n } else {\n this.cdr.detectChanges();\n }\n };\n\n private removeBubbleDragListeners(): void {\n document.removeEventListener('pointermove', this.onBubbleDragMove);\n document.removeEventListener('pointerup', this.onBubbleDragEnd);\n document.removeEventListener('pointercancel', this.onBubbleDragEnd);\n }\n\n /**\n * Reserved space at the top of the viewport — host-supplied chrome plus\n * the padding gap we always keep above the bubble/panel.\n */\n private get topReservedPx(): number {\n return Math.max(0, this.TopBoundaryPx) + ChatAgentsOverlayComponent.VIEWPORT_TOP_PADDING_PX;\n }\n\n /** Clamp the offset so the bubble stays fully visible below the top boundary. */\n private clampBubbleOffsetY(value: number): number {\n const maxOffset = window.innerHeight\n - ChatAgentsOverlayComponent.BUBBLE_SIZE_PX\n - ChatAgentsOverlayComponent.BASE_BOTTOM_PX\n - this.topReservedPx;\n return Math.max(0, Math.min(Math.max(0, maxOffset), value));\n }\n\n // --- Render Position Getters ---\n\n /** Effective `bottom` (px) for the floating bubble, clamped to the current viewport. */\n public get BubbleBottomPx(): number {\n const ideal = ChatAgentsOverlayComponent.BASE_BOTTOM_PX + this.BubbleOffsetY;\n const max = window.innerHeight\n - ChatAgentsOverlayComponent.BUBBLE_SIZE_PX\n - this.topReservedPx;\n return Math.max(\n ChatAgentsOverlayComponent.BASE_BOTTOM_PX,\n Math.min(ideal, Math.max(ChatAgentsOverlayComponent.BASE_BOTTOM_PX, max))\n );\n }\n\n /**\n * Effective `bottom` (px) for the expanded panel. Anchors to the bubble's\n * current bottom edge so the panel grows up from where the user parked the\n * bubble, but clamps downward whenever the panel would otherwise extend\n * past the viewport's top boundary — that's the \"reposition lower so the\n * chat interface stays visible\" behavior.\n */\n public get PanelBottomPx(): number {\n const ideal = ChatAgentsOverlayComponent.BASE_BOTTOM_PX + this.BubbleOffsetY;\n const maxBottomForVisibility = window.innerHeight\n - this.PanelHeight\n - this.topReservedPx;\n return Math.max(\n ChatAgentsOverlayComponent.BASE_BOTTOM_PX,\n Math.min(ideal, maxBottomForVisibility)\n );\n }\n\n // --- Private Methods ---\n\n /** Auto-resolve CurrentUser and EnvironmentId from Metadata when not provided as inputs */\n private resolveDefaults(): void {\n if (!this.CurrentUser) {\n const md = this.ProviderToUse;\n this.CurrentUser = md.CurrentUser;\n }\n if (!this.EnvironmentId) {\n this.EnvironmentId = MJEnvironmentEntityExtended.DefaultEnvironmentID;\n }\n }\n\n /** Load saved panel size and bubble position from UserInfoEngine */\n private loadPreferences(): void {\n try {\n const engine = UserInfoEngine.Instance;\n const raw = engine.GetSetting(ChatAgentsOverlayComponent.SIZE_SETTING_KEY);\n if (raw) {\n const prefs: OverlayPrefs = JSON.parse(raw);\n this.PanelWidth = this.clampWidth(prefs.width);\n this.PanelHeight = this.clampHeight(prefs.height);\n if (typeof prefs.bubbleOffsetY === 'number') {\n this.BubbleOffsetY = Math.max(0, prefs.bubbleOffsetY);\n }\n if (typeof prefs.bubbleHidden === 'boolean') {\n this.IsHidden = prefs.bubbleHidden;\n }\n }\n } catch {\n // Use defaults on error\n }\n }\n\n /** Persist panel size and bubble position to UserInfoEngine (debounced) */\n private savePreferences(): void {\n const prefs: OverlayPrefs = {\n width: this.PanelWidth,\n height: this.PanelHeight,\n bubbleOffsetY: this.BubbleOffsetY,\n bubbleHidden: this.IsHidden\n };\n UserInfoEngine.Instance.SetSettingDebounced(\n ChatAgentsOverlayComponent.SIZE_SETTING_KEY,\n JSON.stringify(prefs)\n );\n }\n\n /** Subscribe to bridge events for cross-view coordination */\n private subscribeToBridgeEvents(): void {\n this.bridge.SwitchEvent$\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: ConversationSwitchEvent) => {\n if (event.Target === 'overlay') {\n this.handleSwitchToOverlay(event);\n }\n });\n\n // Allow arbitrary callers (Form Builder cockpit, etc.) to ask the\n // overlay to expand. Idempotent if we're already expanded —\n // Expand() is safe to call in any state.\n this.bridge.ExpandOverlayRequested$\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n if (this.State === 'collapsed') {\n this.Expand();\n }\n });\n\n this.bridge.ActiveConversationID$\n .pipe(takeUntil(this.destroy$))\n .subscribe((id: string | null) => {\n // Only update if the change came from outside (workspace)\n if (id !== this._conversationId && this.bridge.WorkspaceActive$.value) {\n const prevId = this._conversationId;\n this._conversationId = id;\n this.IsNewConversation = id === null;\n this.Conversation = null; // Will be loaded by chat area\n this.emitConversationSwitched(prevId, id);\n this.cdr.detectChanges();\n }\n });\n }\n\n /** Subscribe to agent client tool execution events */\n private subscribeToToolEvents(): void {\n this.agentClient.ToolExecuted$\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: ClientToolResultEvent) => {\n this.ToolExecuted.emit(event);\n });\n }\n\n /** Handle request to switch conversation to the overlay */\n private handleSwitchToOverlay(event: ConversationSwitchEvent): void {\n const prevId = this._conversationId;\n this._conversationId = event.ConversationID;\n this.IsNewConversation = event.ConversationID === null;\n this.Conversation = null; // Will be reloaded by chat area\n this.Expand();\n this.emitConversationSwitched(prevId, event.ConversationID);\n }\n\n /** Emit a conversation switched event */\n private emitConversationSwitched(prevId: string | null, newId: string | null): void {\n this.ConversationSwitched.emit({\n PreviousConversationID: prevId,\n NewConversationID: newId\n });\n }\n}\n","@if (IsVisible) {\n <!-- Floating Button (collapsed state, not hidden) -->\n @if (State === 'collapsed' && !IsHidden) {\n <div class=\"chat-overlay-bubble\"\n [class.is-pressed]=\"IsBubblePressed\"\n [class.is-dragging]=\"IsBubbleDragging\"\n [style.bottom.px]=\"BubbleBottomPx\"\n (pointerdown)=\"OnBubblePointerDown($event)\">\n <i class=\"fa-solid fa-chevron-up chat-overlay-bubble-arrow chat-overlay-bubble-arrow-up\" aria-hidden=\"true\"></i>\n <i class=\"fa-solid fa-chevron-down chat-overlay-bubble-arrow chat-overlay-bubble-arrow-down\" aria-hidden=\"true\"></i>\n <i class=\"fa-solid fa-comments chat-overlay-bubble-icon\"></i>\n @if (UnreadCount > 0) {\n <span class=\"chat-overlay-badge\">{{ UnreadCount > 9 ? '9+' : UnreadCount }}</span>\n }\n <!-- Hide affordance: revealed on hover. pointerdown stops drag from starting; click hides the bubble. -->\n <button type=\"button\"\n class=\"chat-overlay-bubble-close\"\n title=\"Hide chat — a thin sliver will remain on the right edge\"\n aria-label=\"Hide chat overlay\"\n (pointerdown)=\"$event.stopPropagation()\"\n (click)=\"Hide($event)\">\n <i class=\"fa-solid fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n\n <!-- Collapsed sliver — flush with the right edge when the bubble is hidden.\n Click opens the chat directly; closing returns to the bubble (not the\n sliver). To re-enter hidden mode the user clicks the × pill again. -->\n @if (State === 'collapsed' && IsHidden) {\n <button type=\"button\"\n class=\"chat-overlay-sliver\"\n title=\"Open chat\"\n aria-label=\"Open chat\"\n [style.bottom.px]=\"BubbleBottomPx\"\n (click)=\"Expand()\">\n <i class=\"fa-solid fa-comments chat-overlay-sliver-icon\" aria-hidden=\"true\"></i>\n @if (UnreadCount > 0) {\n <span class=\"chat-overlay-badge chat-overlay-sliver-badge\">{{ UnreadCount > 9 ? '9+' : UnreadCount }}</span>\n }\n </button>\n }\n\n <!-- Expanded / Maximized Chat Panel -->\n @if (State === 'expanded' || State === 'maximized') {\n <div class=\"chat-overlay-panel\"\n [class.maximized]=\"State === 'maximized'\"\n [style.width.px]=\"State === 'maximized' ? null : PanelWidth\"\n [style.height.px]=\"State === 'maximized' ? null : PanelHeight\"\n [style.bottom.px]=\"State === 'maximized' ? null : PanelBottomPx\">\n\n <!-- Resize handles (only in expanded, not maximized) -->\n @if (State === 'expanded') {\n <div class=\"resize-handle resize-left\"\n (mousedown)=\"OnResizeStart($event, 'left')\"></div>\n <div class=\"resize-handle resize-top\"\n (mousedown)=\"OnResizeStart($event, 'top')\"></div>\n <div class=\"resize-handle resize-top-left\"\n (mousedown)=\"OnResizeStart($event, 'top-left')\"></div>\n }\n\n <!-- Panel Header -->\n <div class=\"chat-overlay-header\">\n <div class=\"chat-overlay-title\">\n <i class=\"fa-solid fa-robot\"></i>\n <span>AI Assistant</span>\n </div>\n <div class=\"chat-overlay-header-actions\">\n <button\n class=\"chat-overlay-header-btn\"\n title=\"New conversation\"\n (click)=\"StartNewConversation()\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n @if (ConversationId) {\n <button\n class=\"chat-overlay-header-btn\"\n title=\"Open in full chat workspace\"\n (click)=\"OnOpenFullChatWorkspace()\">\n <i class=\"fa-solid fa-up-right-from-square\"></i>\n </button>\n }\n <button\n class=\"chat-overlay-header-btn\"\n [title]=\"State === 'maximized' ? 'Restore size' : 'Maximize'\"\n (click)=\"ToggleMaximize()\">\n <i class=\"fa-solid\" [class.fa-expand]=\"State !== 'maximized'\" [class.fa-compress]=\"State === 'maximized'\"></i>\n </button>\n <button\n class=\"chat-overlay-header-btn\"\n title=\"Minimize\"\n (click)=\"Collapse()\">\n <i class=\"fa-solid fa-minus\"></i>\n </button>\n </div>\n </div>\n\n <!-- Chat Content — wraps conversation-chat-area -->\n <div class=\"chat-overlay-body\">\n <mj-conversation-chat-area\n [environmentId]=\"EnvironmentId\"\n [currentUser]=\"CurrentUser\"\n [conversationId]=\"ConversationId\"\n [conversation]=\"Conversation\"\n [isNewConversation]=\"IsNewConversation\"\n [pendingMessage]=\"PendingMessage\"\n [pendingAttachments]=\"PendingAttachments\"\n [overlayMode]=\"true\"\n [showExportButton]=\"false\"\n [showShareButton]=\"false\"\n [showArtifactIndicator]=\"false\"\n [appContext]=\"AppContext\"\n [emptyStateGreeting]=\"EmptyStateGreeting\"\n (conversationCreated)=\"OnConversationCreated($event)\"\n (conversationRenamed)=\"OnConversationRenamed($event)\"\n (pendingMessageConsumed)=\"OnPendingMessageConsumed()\"\n (openEntityRecord)=\"OnOpenEntityRecord($event)\"\n (navigationRequest)=\"OnNavigationRequest($event)\"\n (taskClicked)=\"OnTaskClicked($event)\"\n ></mj-conversation-chat-area>\n </div>\n </div>\n }\n}\n"]}
@@ -252,6 +252,17 @@ export declare class ConversationWorkspaceComponent extends BaseAngularComponent
252
252
  /**
253
253
  * Toggle maximize/restore state for artifact panel
254
254
  */
255
+ /**
256
+ * Apply-to-my-form handler. This deprecated workspace component is no
257
+ * longer the live chat surface — the real handler lives on
258
+ * ConversationChatAreaComponent. This stub exists only so the template
259
+ * binding compiles. New consumers should use the resource components in
260
+ * @memberjunction/ng-explorer-core instead of this workspace.
261
+ */
262
+ onApplyFormRequested(_event: {
263
+ spec: unknown;
264
+ entityName: string;
265
+ }): void;
255
266
  toggleMaximizeArtifactPanel(): void;
256
267
  onConversationRenamed(event: {
257
268
  conversationId: string;
@@ -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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"}
@@ -118,7 +118,7 @@ function ConversationWorkspaceComponent_Conditional_4_Conditional_8_Template(rf,
118
118
  const _r9 = i0.ɵɵgetCurrentView();
119
119
  i0.ɵɵconditionalCreate(0, ConversationWorkspaceComponent_Conditional_4_Conditional_8_Conditional_0_Template, 1, 0, "div", 22);
120
120
  i0.ɵɵelementStart(1, "div", 23)(2, "mj-artifact-viewer-panel", 24);
121
- i0.ɵɵlistener("closed", function ConversationWorkspaceComponent_Conditional_4_Conditional_8_Template_mj_artifact_viewer_panel_closed_2_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.closeArtifactPanel()); })("navigateToLink", function ConversationWorkspaceComponent_Conditional_4_Conditional_8_Template_mj_artifact_viewer_panel_navigateToLink_2_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onArtifactLinkNavigation($event)); })("shareRequested", function ConversationWorkspaceComponent_Conditional_4_Conditional_8_Template_mj_artifact_viewer_panel_shareRequested_2_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onArtifactShareRequested($event)); })("maximizeToggled", function ConversationWorkspaceComponent_Conditional_4_Conditional_8_Template_mj_artifact_viewer_panel_maximizeToggled_2_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleMaximizeArtifactPanel()); });
121
+ i0.ɵɵlistener("closed", function ConversationWorkspaceComponent_Conditional_4_Conditional_8_Template_mj_artifact_viewer_panel_closed_2_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.closeArtifactPanel()); })("navigateToLink", function ConversationWorkspaceComponent_Conditional_4_Conditional_8_Template_mj_artifact_viewer_panel_navigateToLink_2_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onArtifactLinkNavigation($event)); })("shareRequested", function ConversationWorkspaceComponent_Conditional_4_Conditional_8_Template_mj_artifact_viewer_panel_shareRequested_2_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onArtifactShareRequested($event)); })("maximizeToggled", function ConversationWorkspaceComponent_Conditional_4_Conditional_8_Template_mj_artifact_viewer_panel_maximizeToggled_2_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleMaximizeArtifactPanel()); })("applyFormRequested", function ConversationWorkspaceComponent_Conditional_4_Conditional_8_Template_mj_artifact_viewer_panel_applyFormRequested_2_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onApplyFormRequested($event)); });
122
122
  i0.ɵɵelementEnd()();
123
123
  } if (rf & 2) {
124
124
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -988,6 +988,16 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
988
988
  /**
989
989
  * Toggle maximize/restore state for artifact panel
990
990
  */
991
+ /**
992
+ * Apply-to-my-form handler. This deprecated workspace component is no
993
+ * longer the live chat surface — the real handler lives on
994
+ * ConversationChatAreaComponent. This stub exists only so the template
995
+ * binding compiles. New consumers should use the resource components in
996
+ * @memberjunction/ng-explorer-core instead of this workspace.
997
+ */
998
+ onApplyFormRequested(_event) {
999
+ console.warn('Workspace.onApplyFormRequested: workspace is deprecated; use the per-feature resource components instead.');
1000
+ }
991
1001
  toggleMaximizeArtifactPanel() {
992
1002
  if (this.isArtifactPanelMaximized) {
993
1003
  // Restore to previous width
@@ -1192,7 +1202,7 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
1192
1202
  static ɵfac = function ConversationWorkspaceComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ConversationWorkspaceComponent)(i0.ɵɵdirectiveInject(i1.ArtifactStateService), i0.ɵɵdirectiveInject(i2.CollectionStateService), i0.ɵɵdirectiveInject(i3.ArtifactPermissionService), i0.ɵɵdirectiveInject(i4.MentionAutocompleteService), i0.ɵɵdirectiveInject(i5.MJNotificationService), i0.ɵɵdirectiveInject(i6.ConversationStreamingService), i0.ɵɵdirectiveInject(i7.UICommandHandlerService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
1193
1203
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ConversationWorkspaceComponent, selectors: [["mj-conversation-workspace"]], hostBindings: function ConversationWorkspaceComponent_HostBindings(rf, ctx) { if (rf & 1) {
1194
1204
  i0.ɵɵlistener("resize", function ConversationWorkspaceComponent_resize_HostBindingHandler() { return ctx.onWindowResize(); }, i0.ɵɵresolveWindow)("click", function ConversationWorkspaceComponent_click_HostBindingHandler($event) { return ctx.onDocumentClick($event); }, i0.ɵɵresolveDocument);
1195
- } }, inputs: { environmentId: "environmentId", initialConversationId: "initialConversationId", layout: "layout", currentUser: "currentUser", activeContext: "activeContext", contextItemId: "contextItemId", activeTabInput: "activeTabInput", activeConversationInput: "activeConversationInput", activeCollectionInput: "activeCollectionInput", activeVersionIdInput: "activeVersionIdInput", activeTaskInput: "activeTaskInput" }, outputs: { conversationChanged: "conversationChanged", artifactOpened: "artifactOpened", navigationChanged: "navigationChanged", newConversationStarted: "newConversationStarted", actionableCommandExecuted: "actionableCommandExecuted", automaticCommandExecuted: "automaticCommandExecuted", 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", "pinSidebarRequested", "unpinSidebarRequested", "activeTab", "environmentId", "currentUser", "selectedConversationId", "renamedConversationId", "isSidebarPinned", "isMobileView"], ["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", "threadOpened", "threadClosed", "pendingArtifactConsumed", "pendingMessageConsumed", "pendingMessageRequested", "environmentId", "currentUser", "conversationId", "conversation", "threadId", "isNewConversation", "pendingMessage", "pendingAttachments", "pendingArtifactId", "pendingArtifactVersionNumber"], [1, "artifact-panel-resize-handle"], [1, "workspace-artifact-panel"], [3, "closed", "navigateToLink", "shareRequested", "maximizeToggled", "artifactId", "currentUser", "environmentId", "versionNumber", "showSaveToCollection", "viewContext", "contextCollectionId", "canShare", "canEdit", "isMaximized"], [1, "artifact-panel-resize-handle", 3, "mousedown"]], template: function ConversationWorkspaceComponent_Template(rf, ctx) { if (rf & 1) {
1205
+ } }, inputs: { environmentId: "environmentId", initialConversationId: "initialConversationId", layout: "layout", currentUser: "currentUser", activeContext: "activeContext", contextItemId: "contextItemId", activeTabInput: "activeTabInput", activeConversationInput: "activeConversationInput", activeCollectionInput: "activeCollectionInput", activeVersionIdInput: "activeVersionIdInput", activeTaskInput: "activeTaskInput" }, outputs: { conversationChanged: "conversationChanged", artifactOpened: "artifactOpened", navigationChanged: "navigationChanged", newConversationStarted: "newConversationStarted", actionableCommandExecuted: "actionableCommandExecuted", automaticCommandExecuted: "automaticCommandExecuted", 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", "pinSidebarRequested", "unpinSidebarRequested", "activeTab", "environmentId", "currentUser", "selectedConversationId", "renamedConversationId", "isSidebarPinned", "isMobileView"], ["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", "threadOpened", "threadClosed", "pendingArtifactConsumed", "pendingMessageConsumed", "pendingMessageRequested", "environmentId", "currentUser", "conversationId", "conversation", "threadId", "isNewConversation", "pendingMessage", "pendingAttachments", "pendingArtifactId", "pendingArtifactVersionNumber"], [1, "artifact-panel-resize-handle"], [1, "workspace-artifact-panel"], [3, "closed", "navigateToLink", "shareRequested", "maximizeToggled", "applyFormRequested", "artifactId", "currentUser", "environmentId", "versionNumber", "showSaveToCollection", "viewContext", "contextCollectionId", "canShare", "canEdit", "isMaximized"], [1, "artifact-panel-resize-handle", 3, "mousedown"]], template: function ConversationWorkspaceComponent_Template(rf, ctx) { if (rf & 1) {
1196
1206
  i0.ɵɵelementStart(0, "div", 0);
1197
1207
  i0.ɵɵlistener("searchTriggered", function ConversationWorkspaceComponent_Template_div_searchTriggered_0_listener() { return ctx.openSearch(); });
1198
1208
  i0.ɵɵelementStart(1, "div", 1)(2, "mj-conversation-navigation", 2);
@@ -1223,7 +1233,7 @@ export class ConversationWorkspaceComponent extends BaseAngularComponent {
1223
1233
  }
1224
1234
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConversationWorkspaceComponent, [{
1225
1235
  type: Component,
1226
- 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 (conversationSelected)=\"onConversationSelected($event)\"\n (newConversationRequested)=\"startNewConversation()\"\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 [threadId]=\"selectedThreadId\"\n [isNewConversation]=\"isNewUnsavedConversation\"\n [pendingMessage]=\"pendingMessageToSend\"\n [pendingAttachments]=\"pendingAttachmentsToSend\"\n [pendingArtifactId]=\"pendingArtifactId\"\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 (threadOpened)=\"onThreadOpened($event)\"\n (threadClosed)=\"onThreadClosed()\"\n (pendingArtifactConsumed)=\"pendingArtifactId = null; pendingArtifactVersionNumber = null\"\n (pendingMessageConsumed)=\"pendingMessageToSend = null; pendingAttachmentsToSend = 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 [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 </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}"] }]
1236
+ 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 (conversationSelected)=\"onConversationSelected($event)\"\n (newConversationRequested)=\"startNewConversation()\"\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 [threadId]=\"selectedThreadId\"\n [isNewConversation]=\"isNewUnsavedConversation\"\n [pendingMessage]=\"pendingMessageToSend\"\n [pendingAttachments]=\"pendingAttachmentsToSend\"\n [pendingArtifactId]=\"pendingArtifactId\"\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 (threadOpened)=\"onThreadOpened($event)\"\n (threadClosed)=\"onThreadClosed()\"\n (pendingArtifactConsumed)=\"pendingArtifactId = null; pendingArtifactVersionNumber = null\"\n (pendingMessageConsumed)=\"pendingMessageToSend = null; pendingAttachmentsToSend = 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 [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}"] }]
1227
1237
  }], () => [{ type: i1.ArtifactStateService }, { type: i2.CollectionStateService }, { type: i3.ArtifactPermissionService }, { type: i4.MentionAutocompleteService }, { type: i5.MJNotificationService }, { type: i6.ConversationStreamingService }, { type: i7.UICommandHandlerService }, { type: i0.ChangeDetectorRef }], { environmentId: [{
1228
1238
  type: Input
1229
1239
  }], initialConversationId: [{