@memberjunction/ng-conversations 5.40.2 → 5.41.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.
- package/README.md +57 -0
- package/dist/__tests__/channel-optional-surface.test.d.ts +2 -0
- package/dist/__tests__/channel-optional-surface.test.d.ts.map +1 -0
- package/dist/__tests__/channel-optional-surface.test.js +53 -0
- package/dist/__tests__/channel-optional-surface.test.js.map +1 -0
- package/dist/__tests__/chat-events.test.d.ts +14 -0
- package/dist/__tests__/chat-events.test.d.ts.map +1 -0
- package/dist/__tests__/chat-events.test.js +109 -0
- package/dist/__tests__/chat-events.test.js.map +1 -0
- package/dist/__tests__/conversation-naming.test.d.ts +2 -0
- package/dist/__tests__/conversation-naming.test.d.ts.map +1 -0
- package/dist/__tests__/conversation-naming.test.js +110 -0
- package/dist/__tests__/conversation-naming.test.js.map +1 -0
- package/dist/__tests__/delegation-result-parser.test.d.ts +2 -0
- package/dist/__tests__/delegation-result-parser.test.d.ts.map +1 -0
- package/dist/__tests__/delegation-result-parser.test.js +107 -0
- package/dist/__tests__/delegation-result-parser.test.js.map +1 -0
- package/dist/__tests__/event-wiring.test.d.ts +15 -0
- package/dist/__tests__/event-wiring.test.d.ts.map +1 -0
- package/dist/__tests__/event-wiring.test.js +100 -0
- package/dist/__tests__/event-wiring.test.js.map +1 -0
- package/dist/__tests__/narration-template.test.d.ts +2 -0
- package/dist/__tests__/narration-template.test.d.ts.map +1 -0
- package/dist/__tests__/narration-template.test.js +76 -0
- package/dist/__tests__/narration-template.test.js.map +1 -0
- package/dist/__tests__/realtime-agent-picker-models.test.d.ts +2 -0
- package/dist/__tests__/realtime-agent-picker-models.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-agent-picker-models.test.js +49 -0
- package/dist/__tests__/realtime-agent-picker-models.test.js.map +1 -0
- package/dist/__tests__/realtime-audio-visuals.test.d.ts +2 -0
- package/dist/__tests__/realtime-audio-visuals.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-audio-visuals.test.js +123 -0
- package/dist/__tests__/realtime-audio-visuals.test.js.map +1 -0
- package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts +2 -0
- package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-delegation-card-cancel.test.js +48 -0
- package/dist/__tests__/realtime-delegation-card-cancel.test.js.map +1 -0
- package/dist/__tests__/realtime-disclosure.test.d.ts +2 -0
- package/dist/__tests__/realtime-disclosure.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-disclosure.test.js +164 -0
- package/dist/__tests__/realtime-disclosure.test.js.map +1 -0
- package/dist/__tests__/realtime-pairing.test.d.ts +2 -0
- package/dist/__tests__/realtime-pairing.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-pairing.test.js +207 -0
- package/dist/__tests__/realtime-pairing.test.js.map +1 -0
- package/dist/__tests__/realtime-review-lifecycle.test.d.ts +2 -0
- package/dist/__tests__/realtime-review-lifecycle.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-review-lifecycle.test.js +154 -0
- package/dist/__tests__/realtime-review-lifecycle.test.js.map +1 -0
- package/dist/__tests__/realtime-session-cancel-usage.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-cancel-usage.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-cancel-usage.test.js +230 -0
- package/dist/__tests__/realtime-session-cancel-usage.test.js.map +1 -0
- package/dist/__tests__/realtime-session-channels.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-channels.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-channels.test.js +252 -0
- package/dist/__tests__/realtime-session-channels.test.js.map +1 -0
- package/dist/__tests__/realtime-session-client-tools.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-client-tools.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-client-tools.test.js +103 -0
- package/dist/__tests__/realtime-session-client-tools.test.js.map +1 -0
- package/dist/__tests__/realtime-session-minimized.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-minimized.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-minimized.test.js +32 -0
- package/dist/__tests__/realtime-session-minimized.test.js.map +1 -0
- package/dist/__tests__/realtime-session-mint.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-mint.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-mint.test.js +69 -0
- package/dist/__tests__/realtime-session-mint.test.js.map +1 -0
- package/dist/__tests__/realtime-session-policy.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-policy.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-policy.test.js +303 -0
- package/dist/__tests__/realtime-session-policy.test.js.map +1 -0
- package/dist/__tests__/realtime-session-review.service.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-review.service.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-review.service.test.js +743 -0
- package/dist/__tests__/realtime-session-review.service.test.js.map +1 -0
- package/dist/__tests__/realtime-session-state.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-state.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-state.test.js +83 -0
- package/dist/__tests__/realtime-session-state.test.js.map +1 -0
- package/dist/__tests__/realtime-session-timeline-card.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-timeline-card.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-timeline-card.test.js +106 -0
- package/dist/__tests__/realtime-session-timeline-card.test.js.map +1 -0
- package/dist/__tests__/realtime-session-timeline.test.d.ts +2 -0
- package/dist/__tests__/realtime-session-timeline.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-session-timeline.test.js +142 -0
- package/dist/__tests__/realtime-session-timeline.test.js.map +1 -0
- package/dist/__tests__/realtime-sessions-adapter.test.d.ts +19 -0
- package/dist/__tests__/realtime-sessions-adapter.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-sessions-adapter.test.js +188 -0
- package/dist/__tests__/realtime-sessions-adapter.test.js.map +1 -0
- package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts +2 -0
- package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-surface-panel-prefs.test.js +100 -0
- package/dist/__tests__/realtime-surface-panel-prefs.test.js.map +1 -0
- package/dist/__tests__/realtime-surface-tabs-model.test.d.ts +2 -0
- package/dist/__tests__/realtime-surface-tabs-model.test.d.ts.map +1 -0
- package/dist/__tests__/realtime-surface-tabs-model.test.js +193 -0
- package/dist/__tests__/realtime-surface-tabs-model.test.js.map +1 -0
- package/dist/__tests__/remote-browser-audio-player.test.d.ts +2 -0
- package/dist/__tests__/remote-browser-audio-player.test.d.ts.map +1 -0
- package/dist/__tests__/remote-browser-audio-player.test.js +137 -0
- package/dist/__tests__/remote-browser-audio-player.test.js.map +1 -0
- package/dist/__tests__/remote-browser-channel.test.d.ts +2 -0
- package/dist/__tests__/remote-browser-channel.test.d.ts.map +1 -0
- package/dist/__tests__/remote-browser-channel.test.js +423 -0
- package/dist/__tests__/remote-browser-channel.test.js.map +1 -0
- package/dist/__tests__/slot-defaults.test.d.ts +24 -0
- package/dist/__tests__/slot-defaults.test.d.ts.map +1 -0
- package/dist/__tests__/slot-defaults.test.js +63 -0
- package/dist/__tests__/slot-defaults.test.js.map +1 -0
- package/dist/__tests__/user-authorization.test.d.ts +2 -0
- package/dist/__tests__/user-authorization.test.d.ts.map +1 -0
- package/dist/__tests__/user-authorization.test.js +97 -0
- package/dist/__tests__/user-authorization.test.js.map +1 -0
- package/dist/__tests__/voice-session-narration.test.d.ts +2 -0
- package/dist/__tests__/voice-session-narration.test.d.ts.map +1 -0
- package/dist/__tests__/voice-session-narration.test.js +609 -0
- package/dist/__tests__/voice-session-narration.test.js.map +1 -0
- package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts +2 -0
- package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts.map +1 -0
- package/dist/__tests__/whiteboard-artifact-viewer.test.js +101 -0
- package/dist/__tests__/whiteboard-artifact-viewer.test.js.map +1 -0
- package/dist/__tests__/whiteboard-channel.test.d.ts +2 -0
- package/dist/__tests__/whiteboard-channel.test.d.ts.map +1 -0
- package/dist/__tests__/whiteboard-channel.test.js +260 -0
- package/dist/__tests__/whiteboard-channel.test.js.map +1 -0
- package/dist/__tests__/whiteboard-restore-state.test.d.ts +2 -0
- package/dist/__tests__/whiteboard-restore-state.test.d.ts.map +1 -0
- package/dist/__tests__/whiteboard-restore-state.test.js +108 -0
- package/dist/__tests__/whiteboard-restore-state.test.js.map +1 -0
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +205 -3
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +911 -342
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/mention/mention-dropdown.component.js +35 -17
- package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -1
- package/dist/lib/components/mention/mention-editor.component.d.ts +4 -0
- package/dist/lib/components/mention/mention-editor.component.d.ts.map +1 -1
- package/dist/lib/components/mention/mention-editor.component.js +43 -19
- package/dist/lib/components/mention/mention-editor.component.js.map +1 -1
- package/dist/lib/components/message/message-input-box.component.d.ts +17 -1
- package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input-box.component.js +73 -15
- package/dist/lib/components/message/message-input-box.component.js.map +1 -1
- package/dist/lib/components/message/message-input.component.d.ts +142 -6
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +328 -82
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +28 -3
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +180 -108
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/message/message-list.component.d.ts +81 -2
- package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-list.component.js +252 -87
- package/dist/lib/components/message/message-list.component.js.map +1 -1
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts +282 -0
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts.map +1 -0
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.js +158 -0
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.js.map +1 -0
- package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.d.ts +25 -0
- package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.js +140 -0
- package/dist/lib/components/realtime/channels/channel-onboarding-panel.component.js.map +1 -0
- package/dist/lib/components/realtime/channels/realtime-channel-pane.component.d.ts +35 -0
- package/dist/lib/components/realtime/channels/realtime-channel-pane.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/channels/realtime-channel-pane.component.js +58 -0
- package/dist/lib/components/realtime/channels/realtime-channel-pane.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts +63 -0
- package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-activity-rail.component.js +260 -0
- package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts +117 -0
- package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-agent-banner.component.js +504 -0
- package/dist/lib/components/realtime/realtime-agent-banner.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts +168 -0
- package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-agent-picker.component.js +556 -0
- package/dist/lib/components/realtime/realtime-agent-picker.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-audio-visuals.d.ts +97 -0
- package/dist/lib/components/realtime/realtime-audio-visuals.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-audio-visuals.js +139 -0
- package/dist/lib/components/realtime/realtime-audio-visuals.js.map +1 -0
- package/dist/lib/components/realtime/realtime-channel-strip.component.d.ts +29 -0
- package/dist/lib/components/realtime/realtime-channel-strip.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-channel-strip.component.js +69 -0
- package/dist/lib/components/realtime/realtime-channel-strip.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-composer.component.d.ts +65 -0
- package/dist/lib/components/realtime/realtime-composer.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-composer.component.js +256 -0
- package/dist/lib/components/realtime/realtime-composer.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +71 -0
- package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-delegation-card.component.js +324 -0
- package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-disclosure.d.ts +135 -0
- package/dist/lib/components/realtime/realtime-disclosure.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-disclosure.js +188 -0
- package/dist/lib/components/realtime/realtime-disclosure.js.map +1 -0
- package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +491 -0
- package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-session-overlay.component.js +1274 -0
- package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-session-state.d.ts +191 -0
- package/dist/lib/components/realtime/realtime-session-state.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-session-state.js +244 -0
- package/dist/lib/components/realtime/realtime-session-state.js.map +1 -0
- package/dist/lib/components/realtime/realtime-session-thread.component.d.ts +56 -0
- package/dist/lib/components/realtime/realtime-session-thread.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-session-thread.component.js +246 -0
- package/dist/lib/components/realtime/realtime-session-thread.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts +51 -0
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.js +193 -0
- package/dist/lib/components/realtime/realtime-session-timeline-card.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-panel-prefs.d.ts +77 -0
- package/dist/lib/components/realtime/realtime-surface-panel-prefs.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-panel-prefs.js +114 -0
- package/dist/lib/components/realtime/realtime-surface-panel-prefs.js.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +173 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.component.js +496 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +181 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.model.js +223 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.d.ts +163 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.d.ts.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.js +309 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-audio-player.js.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-channel.d.ts +168 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-channel.d.ts.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js +524 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-channel.js.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.d.ts +346 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.js +851 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-surface.component.js.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.d.ts +86 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.d.ts.map +1 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.js +210 -0
- package/dist/lib/components/realtime/remote-browser/remote-browser-tools.js.map +1 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.d.ts +48 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.js +180 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-artifact-viewer.component.js.map +1 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts +119 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.d.ts.map +1 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js +274 -0
- package/dist/lib/components/realtime/whiteboard/whiteboard-channel.js.map +1 -0
- package/dist/lib/components/slots/mj-chat-agent-presence-default.component.d.ts +11 -0
- package/dist/lib/components/slots/mj-chat-agent-presence-default.component.d.ts.map +1 -0
- package/dist/lib/components/slots/mj-chat-agent-presence-default.component.js +98 -0
- package/dist/lib/components/slots/mj-chat-agent-presence-default.component.js.map +1 -0
- package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.d.ts +9 -0
- package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.d.ts.map +1 -0
- package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.js +35 -0
- package/dist/lib/components/slots/mj-chat-demonstration-surface-default.component.js.map +1 -0
- package/dist/lib/components/slots/mj-chat-empty-state-default.component.d.ts +28 -0
- package/dist/lib/components/slots/mj-chat-empty-state-default.component.d.ts.map +1 -0
- package/dist/lib/components/slots/mj-chat-empty-state-default.component.js +104 -0
- package/dist/lib/components/slots/mj-chat-empty-state-default.component.js.map +1 -0
- package/dist/lib/components/slots/mj-chat-header-default.component.d.ts +11 -0
- package/dist/lib/components/slots/mj-chat-header-default.component.d.ts.map +1 -0
- package/dist/lib/components/slots/mj-chat-header-default.component.js +103 -0
- package/dist/lib/components/slots/mj-chat-header-default.component.js.map +1 -0
- package/dist/lib/components/slots/mj-chat-message-bubble-default.component.d.ts +15 -0
- package/dist/lib/components/slots/mj-chat-message-bubble-default.component.d.ts.map +1 -0
- package/dist/lib/components/slots/mj-chat-message-bubble-default.component.js +73 -0
- package/dist/lib/components/slots/mj-chat-message-bubble-default.component.js.map +1 -0
- package/dist/lib/components/slots/mj-chat-message-extra-default.component.d.ts +9 -0
- package/dist/lib/components/slots/mj-chat-message-extra-default.component.d.ts.map +1 -0
- package/dist/lib/components/slots/mj-chat-message-extra-default.component.js +34 -0
- package/dist/lib/components/slots/mj-chat-message-extra-default.component.js.map +1 -0
- package/dist/lib/components/slots/slot-interfaces.d.ts +95 -0
- package/dist/lib/components/slots/slot-interfaces.d.ts.map +1 -0
- package/dist/lib/components/slots/slot-interfaces.js +18 -0
- package/dist/lib/components/slots/slot-interfaces.js.map +1 -0
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts +11 -0
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.js +28 -4
- package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
- package/dist/lib/conversations.module.d.ts +12 -1
- package/dist/lib/conversations.module.d.ts.map +1 -1
- package/dist/lib/conversations.module.js +93 -5
- package/dist/lib/conversations.module.js.map +1 -1
- package/dist/lib/directives/chat-slot.directive.d.ts +44 -0
- package/dist/lib/directives/chat-slot.directive.d.ts.map +1 -0
- package/dist/lib/directives/chat-slot.directive.js +54 -0
- package/dist/lib/directives/chat-slot.directive.js.map +1 -0
- package/dist/lib/events/chat-events.d.ts +137 -0
- package/dist/lib/events/chat-events.d.ts.map +1 -0
- package/dist/lib/events/chat-events.js +189 -0
- package/dist/lib/events/chat-events.js.map +1 -0
- package/dist/lib/models/conversation-state.model.d.ts +2 -1
- package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
- package/dist/lib/models/conversation-state.model.js.map +1 -1
- package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
- package/dist/lib/services/artifact-state.service.js +23 -6
- package/dist/lib/services/artifact-state.service.js.map +1 -1
- package/dist/lib/services/conversation-agent.service.d.ts +60 -74
- package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-agent.service.js +100 -313
- package/dist/lib/services/conversation-agent.service.js.map +1 -1
- package/dist/lib/services/conversation-bridge.service.d.ts +11 -70
- package/dist/lib/services/conversation-bridge.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-bridge.service.js +51 -85
- package/dist/lib/services/conversation-bridge.service.js.map +1 -1
- package/dist/lib/services/conversation-naming.d.ts +63 -0
- package/dist/lib/services/conversation-naming.d.ts.map +1 -0
- package/dist/lib/services/conversation-naming.js +58 -0
- package/dist/lib/services/conversation-naming.js.map +1 -0
- package/dist/lib/services/conversation-streaming.service.d.ts +24 -154
- package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-streaming.service.js +39 -361
- package/dist/lib/services/conversation-streaming.service.js.map +1 -1
- package/dist/lib/services/conversations-runtime-bootstrap.service.d.ts +10 -0
- package/dist/lib/services/conversations-runtime-bootstrap.service.d.ts.map +1 -0
- package/dist/lib/services/conversations-runtime-bootstrap.service.js +104 -0
- package/dist/lib/services/conversations-runtime-bootstrap.service.js.map +1 -0
- package/dist/lib/services/delegation-result-parser.d.ts +45 -0
- package/dist/lib/services/delegation-result-parser.d.ts.map +1 -0
- package/dist/lib/services/delegation-result-parser.js +48 -0
- package/dist/lib/services/delegation-result-parser.js.map +1 -0
- package/dist/lib/services/mention-autocomplete.service.d.ts +19 -4
- package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
- package/dist/lib/services/mention-autocomplete.service.js +65 -4
- package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
- package/dist/lib/services/mention-parser.service.d.ts +8 -53
- package/dist/lib/services/mention-parser.service.d.ts.map +1 -1
- package/dist/lib/services/mention-parser.service.js +32 -243
- package/dist/lib/services/mention-parser.service.js.map +1 -1
- package/dist/lib/services/narration-template.d.ts +42 -0
- package/dist/lib/services/narration-template.d.ts.map +1 -0
- package/dist/lib/services/narration-template.js +73 -0
- package/dist/lib/services/narration-template.js.map +1 -0
- package/dist/lib/services/realtime-pairing.d.ts +120 -0
- package/dist/lib/services/realtime-pairing.d.ts.map +1 -0
- package/dist/lib/services/realtime-pairing.js +150 -0
- package/dist/lib/services/realtime-pairing.js.map +1 -0
- package/dist/lib/services/realtime-session-review.service.d.ts +233 -0
- package/dist/lib/services/realtime-session-review.service.d.ts.map +1 -0
- package/dist/lib/services/realtime-session-review.service.js +417 -0
- package/dist/lib/services/realtime-session-review.service.js.map +1 -0
- package/dist/lib/services/realtime-session.service.d.ts +739 -0
- package/dist/lib/services/realtime-session.service.d.ts.map +1 -0
- package/dist/lib/services/realtime-session.service.js +1647 -0
- package/dist/lib/services/realtime-session.service.js.map +1 -0
- package/dist/lib/services/realtime-sessions-adapter.d.ts +54 -0
- package/dist/lib/services/realtime-sessions-adapter.d.ts.map +1 -0
- package/dist/lib/services/realtime-sessions-adapter.js +154 -0
- package/dist/lib/services/realtime-sessions-adapter.js.map +1 -0
- package/dist/lib/services/user-authorization.d.ts +67 -0
- package/dist/lib/services/user-authorization.d.ts.map +1 -0
- package/dist/lib/services/user-authorization.js +66 -0
- package/dist/lib/services/user-authorization.js.map +1 -0
- package/dist/lib/utils/realtime-session-timeline.d.ts +84 -0
- package/dist/lib/utils/realtime-session-timeline.d.ts.map +1 -0
- package/dist/lib/utils/realtime-session-timeline.js +94 -0
- package/dist/lib/utils/realtime-session-timeline.js.map +1 -0
- package/dist/public-api.d.ts +41 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +50 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +27 -24
- package/dist/__tests__/conversation-bridge.service.test.d.ts +0 -2
- package/dist/__tests__/conversation-bridge.service.test.d.ts.map +0 -1
- package/dist/__tests__/conversation-bridge.service.test.js +0 -98
- package/dist/__tests__/conversation-bridge.service.test.js.map +0 -1
- package/dist/__tests__/mention-parser.test.d.ts +0 -2
- package/dist/__tests__/mention-parser.test.d.ts.map +0 -1
- package/dist/__tests__/mention-parser.test.js +0 -154
- package/dist/__tests__/mention-parser.test.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-workspace.component.js","sourceRoot":"","sources":["../../../../src/lib/components/workspace/conversation-workspace.component.ts","../../../../src/lib/components/workspace/conversation-workspace.component.html"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,YAAY,EAKZ,YAAY,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAwD,sBAAsB,EAAuB,cAAc,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEtL,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAUrE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;;;;;;;;;;;;;;;;;;;;;IC5B1D,8BAA+B;IAC7B,gCAA+D;IACjE,iBAAM;;;;IAQF,+BAAsE;IAAzB,8MAAS,qBAAc,KAAC;IAAC,iBAAM;;;;IAU1E,AALF,+BAI2D,kCAYd;IAAzC,AADA,AADA,AADA,sQAAwB,qCAA8B,KAAC,2PAC3B,6BAAsB,KAAC,iPAC5B,mBAAY,KAAC,qPACX,qBAAc,KAAC;IAE5C,AADE,iBAA0B,EACtB;;;IAdJ,kFAAwD;IADxD,AADA,AADA,+CAA+B,wCACO,oDACY;IAGhD,cAAuB;IAMvB,AADA,AADA,AADA,AADA,AADA,AADA,4CAAuB,uCACQ,mCACJ,yDACsB,uDACF,2CACZ,qCACN;;;;IAWjC,kCAE6B;IAD3B,iNAAS,sBAAe,KAAC;IAEzB,wBAAoC;IACtC,iBAAS;;;;IAKT,+BAC2C;IAA3C,4NAAa,mCAA4B,KAAC;IAAC,iBAAM;;;;IAM/C,AADF,+BAA4B,mCAI8B;IAAtD,qQAAuB,oCAA6B,KAAC;IAEzD,AADE,iBAA2B,EACvB;;;IAJF,cAA+B;IAC/B,AADA,oDAA+B,mCACJ;;;;IAS7B,AADF,+BAA4B,6BAMiC;IAAzD,yPAAoB,0CAAmC,KAAC;IAE5D,AADE,iBAAqB,EACjB;;;IANF,cAA+B;IAG/B,AADA,AADA,AADA,oDAA+B,mCACJ,kCACD,qCACG;;;;IAS/B,AADF,+BAA4B,oCAsBsC;IAA9D,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,sQAAuB,oCAA6B,KAAC,mPACjC,iCAA0B,KAAC,qPAC1B,kCAA2B,KAAC,yOAClC,4BAAqB,KAAC,yPACd,uCAAgC,KAAC,yPACjC,oCAA6B,KAAC,2OACrC,6BAAsB,KAAC,qOACvB,uBAAgB,KAAC,gQACc,IAAI,8DAAiC,IAAI,KAAC,iQACxC,IAAI,0DAA6B,IAAI,KAAC,iQAC5D,wCAAiC,KAAC;IAEjE,AADE,iBAA4B,EACxB;;;IAtBF,cAA+B;IAS/B,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,oDAA+B,mCACJ,iDACc,6CACJ,qCACR,sDACiB,+CACP,uDACQ,+CACR,qEACsB;;;;IAmB/D,+BAA2F;IAAjD,2OAAa,yCAAkC,KAAC;IAAC,iBAAM;;;;IADnG,6HAAiC;IAM/B,AAHF,+BAE+C,mCAgBS;IAApD,AADA,AADA,AADA,AADA,qOAAU,2BAAoB,KAAC,8OACb,uCAAgC,KAAC,8OACjC,uCAAgC,KAAC,0OAChC,oCAA6B,KAAC,sPAC3B,mCAA4B,KAAC;IAEvD,AADE,iBAA2B,EACvB;;;IAvBN,2DAEC;IAEC,cAAoC;IAApC,uDAAoC;IACpC,4DAA4C;IAE1C,cAA+B;IAS/B,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,oDAA+B,mCACJ,uCACI,0DACmB,4DACE,mFACuB,+EACJ,2CACpC,yCACF,gDACO;;;IAnHhD,8BAA+B;IAE7B,8GAAgG;IAKhG,+GAAuF;IAuBvF,kHAA6G;IAS7G,+GAAkI;IAMlI,+GAAmC;IAWnC,+GAA6B;IAa7B,gHAA4D;IA6B5D,qGAA+C;IA0BjD,iBAAM;;;IA1HJ,cAEC;IAFD,+IAEC;IAGD,cAoBC;IApBD,+HAoBC;IAGD,cAMC;IAND,4JAMC;IAGD,cAGC;IAHD,wLAGC;IAGD,cAQC;IARD,6DAQC;IAGD,cAUC;IAVD,uDAUC;IAGD,cA0BC;IA1BD,6FA0BC;IAGD,cAyBC;IAzBD,gFAyBC;;ADjGP;;;;;;;;GAQG;AAOH,MAAM,OAAO,8BAA+B,SAAQ,oBAAoB;IAoI7D;IACA;IACC;IACA;IACA;IACA;IACA;IACA;IA1ID,aAAa,CAAU;IACvB,qBAAqB,CAAU;IAC/B,MAAM,GAAoB,MAAM,CAAC;IACjC,WAAW,CAAY;IACvB,aAAa,CAAsB;IACnC,aAAa,CAAU;IAEhC,qEAAqE;IACrE,IAAa,cAAc,CAAC,KAA4D;QACtF,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAED,IAAa,uBAAuB,CAAC,KAAyB;QAC5D,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACpD,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;YACjC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,IAAa,qBAAqB,CAAC,KAAyB;QAC1D,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC;YAC/B,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,IAAa,oBAAoB,CAAC,KAAyB;QACzD,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC;YAC/B,yEAAyE;YACzE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,8BAA8B;YAC9B,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,IAAa,eAAe,CAAC,KAAyB;QACpD,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1C,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;IAEO,aAAa,CAAU;IAC/B,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAES,mBAAmB,GAAG,IAAI,YAAY,EAAwB,CAAC;IAC/D,cAAc,GAAG,IAAI,YAAY,EAAoB,CAAC;IACtD,iBAAiB,GAAG,IAAI,YAAY,EAM1C,CAAC;IACK,sBAAsB,GAAG,IAAI,YAAY,EAAQ,CAAC;IAClD,yBAAyB,GAAG,IAAI,YAAY,EAAqB,CAAC;IAClE,wBAAwB,GAAG,IAAI,YAAY,EAAoB,CAAC;IAChE,mBAAmB,GAAG,IAAI,YAAY,EAAqB,CAAC;IAE/D,SAAS,GAAkB,eAAe,CAAC;IAC3C,gBAAgB,GAAY,IAAI,CAAC;IACjC,mBAAmB,GAAY,KAAK,CAAC;IACrC,iBAAiB,GAAY,KAAK,CAAC;IACnC,gBAAgB,GAAY,KAAK,CAAC;IAClC,qBAAqB,GAAkB,IAAI,CAAC;IAC5C,gBAAgB,GAAkB,IAAI,CAAC;IACvC,mBAAmB,GAAkB,IAAI,CAAC;IAC1C,eAAe,GAAkB,IAAI,CAAC;IACtC,YAAY,GAAY,KAAK,CAAC;IAC9B,eAAe,GAAY,KAAK,CAAC,CAAC,0DAA0D;IAEnG,uBAAuB;IAChB,sBAAsB,GAAY,KAAK,CAAC;IACxC,qBAAqB,GAAY,KAAK,CAAC;IAE9C,oBAAoB;IACb,wBAAwB,GAAY,KAAK,CAAC;IAC1C,eAAe,GAA4B,IAAI,CAAC;IAEvD,yBAAyB;IAClB,YAAY,GAAW,GAAG,CAAC,CAAC,gBAAgB;IAC5C,kBAAkB,GAAY,IAAI,CAAC,CAAC,2DAA2D;IAC/F,yBAAyB,GAAY,KAAK,CAAC,CAAC,4DAA4D;IACxG,uBAAuB,GAAY,KAAK,CAAC,CAAC,mFAAmF;IAC5H,iBAAiB,GAAY,KAAK,CAAC;IACnC,mBAAmB,GAAW,CAAC,CAAC;IAChC,uBAAuB,GAAW,CAAC,CAAC;IAE5C,gCAAgC;IACzB,kBAAkB,GAAW,EAAE,CAAC,CAAC,oBAAoB;IACrD,wBAAwB,GAAY,KAAK,CAAC;IACzC,gCAAgC,GAAW,EAAE,CAAC,CAAC,gCAAgC;IAC/E,uBAAuB,GAAY,KAAK,CAAC;IACzC,yBAAyB,GAAW,CAAC,CAAC;IACtC,6BAA6B,GAAW,CAAC,CAAC;IAE1C,sBAAsB,GAAkB,IAAI,CAAC;IAC7C,cAAc,GAAuB,SAAS,CAAC;IAC/C,iBAAiB,GAAkB,IAAI,CAAC,CAAC,6CAA6C;IACtF,yBAAyB,GAAY,KAAK,CAAC,CAAC,uCAAuC;IACnF,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;IAEvC,gDAAgD;IAC/B,wBAAwB,GAAG,4BAA4B,CAAC;IACjE,mBAAmB,GAAyC,IAAI,CAAC;IACjE,iBAAiB,GAAY,KAAK,CAAC;IAE3C,kDAAkD;IAC3C,WAAW,GAAW,KAAK,CAAC;IAEnC,kEAAkE;IAClE,+DAA+D;IACxD,sBAAsB,GAAkB,IAAI,CAAC;IAC7C,oBAAoB,GAAgC,IAAI,CAAC;IACzD,gBAAgB,GAAkB,IAAI,CAAC;IACvC,wBAAwB,GAAY,KAAK,CAAC;IAC1C,oBAAoB,GAAkB,IAAI,CAAC;IAC3C,wBAAwB,GAA+B,IAAI,CAAC;IAC5D,iBAAiB,GAAkB,IAAI,CAAC;IACxC,4BAA4B,GAAkB,IAAI,CAAC;IAElD,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC;IAE7C,YACS,aAAmC,EACnC,eAAuC,EACtC,yBAAoD,EACpD,0BAAsD,EACtD,mBAA0C,EAC1C,gBAA8C,EAC9C,gBAAyC,EACzC,GAAsB;QAE9B,KAAK,EAAE,CAAC;QATD,kBAAa,GAAb,aAAa,CAAsB;QACnC,oBAAe,GAAf,eAAe,CAAwB;QACtC,8BAAyB,GAAzB,yBAAyB,CAA2B;QACpD,+BAA0B,GAA1B,0BAA0B,CAA4B;QACtD,wBAAmB,GAAnB,mBAAmB,CAAuB;QAC1C,qBAAgB,GAAhB,gBAAgB,CAA8B;QAC9C,qBAAgB,GAAhB,gBAAgB,CAAyB;QACzC,QAAG,GAAH,GAAG,CAAmB;IAGhC,CAAC;IAED,4EAA4E;IAC5E,sCAAsC;IACtC,6DAA6D;IAC7D,4EAA4E;IAE5E;;;OAGG;IACH,qBAAqB,CAAC,EAAiB;QACrC,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClF,iEAAiE;QACjE,IAAI,EAAE,EAAE,CAAC;YACP,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QACxC,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,oBAAoB;QAClB,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACnD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACrC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QAErC,sDAAsD;QACtD,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC/C,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,yBAAyB;QACvB,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;IACxC,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,SAAiB;QAC1B,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,sBAAsB,CAAC,cAAsB;QAC3C,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;QAE3C,sDAAsD;QACtD,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC/C,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,qBAAqB,CAAC,KAIrB;QACC,IAAI,CAAC;YACH,gEAAgE;YAChE,yEAAyE;YACzE,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC;YACzD,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC,kBAAkB,IAAI,IAAI,CAAC;YACjE,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,YAAY,CAAC;YAC/C,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;YACtC,2EAA2E;QAC7E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,yBAAyB,CAAC,KAAuD;QAC/E,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC;QACvC,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC,WAAW,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAAgB;QAC7B,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,4EAA4E;QAC5E,yEAAyE;QACzE,8FAA8F;QAC9F,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;QACjD,IAAI,CAAC,yBAAyB,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;QAE7D,4CAA4C;QAC5C,sEAAsE;QACtE,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QAEtD,8DAA8D;QAC9D,mDAAmD;QACnD,IAAI,CAAC,gBAAgB,CAAC,0BAA0B;aAC7C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,OAAO,CAAC,EAAE;YACnB,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,gBAAgB,CAAC,yBAAyB;aAC5C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,OAAO,CAAC,EAAE;YACnB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEL,mCAAmC;QACnC,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,kEAAkE;QAClE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAC9B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC,uCAAuC;YAC5E,4EAA4E;YAC5E,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;YACxC,CAAC,EAAE,EAAE,CAAC,CAAC;QACT,CAAC;aAAM,CAAC;YACN,+EAA+E;YAC/E,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACzB,uDAAuD;YACvD,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;YACxC,CAAC,EAAE,EAAE,CAAC,CAAC;QACT,CAAC;QAED,yBAAyB;QACzB,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhE,mCAAmC;QACnC,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEtE,6DAA6D;QAC7D,uEAAuE;QACvE,2CAA2C;QAC3C,IAAI,CAAC;YACH,8FAA8F;YAC9F,yEAAyE;YACzE,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;gBACnC,sBAAsB,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9C,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;YACjG,OAAO,CAAC,GAAG,CAAC,6CAA6C,EACvD,sBAAsB,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAEhF,sEAAsE;YACtE,mEAAmE;YACnE,MAAM,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAElD,qDAAqD;YACrD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;YACxD,kDAAkD;YAClD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC,aAAa,CAAC,YAAY;aAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,MAAM,CAAC,EAAE;YAClB,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC;QACpC,CAAC,CAAC,CAAC;QAEL,kCAAkC;QAClC,IAAI,CAAC,aAAa,CAAC,iBAAiB;aACjC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;YACpB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAC3B,yCAAyC;YACzC,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;gBACpC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;YACrC,CAAC;QACH,CAAC,CAAC,CAAC;QAEL,qCAAqC;QACrC,IAAI,CAAC,aAAa,CAAC,oBAAoB;aACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,aAAa,CAAC,EAAE;YACzB,IAAI,CAAC,mBAAmB,GAAG,aAAa,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEL,uCAAuC;QACvC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACzD,CAAC;QAED,kCAAkC;QAClC,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACrC,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC;QACjC,CAAC;QACD,4EAA4E;QAE5E,6CAA6C;QAC7C,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,qFAAqF;QACrF,cAAc;QACd,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;QAC9B,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;QACvD,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;QAC/C,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;YAC9E,IAAI,CAAC,WAAW,GAAG,kCAAkC,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC,oCAAoC;YACjH,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,mCAAmC,IAAI,CAAC,WAAW,CAAC,EAAE;wBACrD,EAAE,CAAC,UAAU,MAAM,EAAE,CAAC,QAAQ;;iBAErC,IAAI,CAAC,WAAW,CAAC,EAAE;;0BAEV,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,QAAQ,mBAAmB,IAAI,CAAC,WAAW,CAAC,EAAE;;OAErF,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/E,CAAC;IAED,SAAS;QACP,gDAAgD;QAChD,MAAM,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC;QAC/D,IAAI,wBAAwB,KAAK,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAChE,IAAI,CAAC,yBAAyB,GAAG,wBAAwB,CAAC;YAC1D,IAAI,wBAAwB,EAAE,CAAC;gBAC7B,iDAAiD;gBACjD,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;oBAC1B,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;gBACrC,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAC9C,IAAI,SAAS,KAAK,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9C,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;YACxC,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAC/C,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAE5C,6EAA6E;gBAC7E,IAAI,IAAI,CAAC,SAAS,KAAK,eAAe,IAAI,SAAS,EAAE,CAAC;oBACpD,wDAAwD;oBACxD,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;wBAC1B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;4BAC1B,GAAG,EAAE,eAAe;4BACpB,cAAc,EAAE,SAAS;yBAC1B,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,oDAAoD;QACpD,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;YACxC,IAAI,aAAa,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC1C,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;gBACpC,IAAI,aAAa,EAAE,CAAC;oBAClB,wDAAwD;oBACxD,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;wBAC1B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;4BAC1B,GAAG,EAAE,OAAO;4BACZ,MAAM,EAAE,aAAa;yBACtB,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,8EAA8E;IAChF,CAAC;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAEzB,iCAAiC;QACjC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACzC,CAAC;QAED,0BAA0B;QAC1B,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,CAAC;IAGD,cAAc;QACZ,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IAEH,eAAe,CAAC,KAAiB;QAC/B,oDAAoD;QACpD,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACpD,OAAO;QACT,CAAC;QAED,wCAAwC;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;QAC3C,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAE9D,6DAA6D;QAC7D,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,EAAE,CAAC;YACrC,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,eAAe;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;QAE5C,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,6DAA6D;YAC7D,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAC9B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACjC,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,SAAS,EAAE,CAAC;YAC3C,uEAAuE;YACvE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBAChC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,eAAe;QACb,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAChC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa;QACX,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACK,gBAAgB;QACtB,qDAAqD;QACrD,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC,GAAG,EAAE;YACzC,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAClC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,oBAAoB;IAChC,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,wBAAwB;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YAED,MAAM,WAAW,GAAG;gBAClB,SAAS,EAAE,IAAI,CAAC,kBAAkB;gBAClC,MAAM,EAAE,IAAI,CAAC,eAAe;gBAC5B,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;aAC5C,CAAC;YAEF,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC;YACvC,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YAE9B,kDAAkD;YAClD,IAAI,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAEzF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,qBAAqB;gBACrB,OAAO,GAAG,MAAM,EAAE,CAAC,eAAe,CAAsB,mBAAmB,CAAC,CAAC;gBAC7E,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;gBACxB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC;YAClD,CAAC;YAED,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAC5C,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,gDAAgD,EAAE,KAAK,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,gBAAgB;QAC5B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAE9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACpC,IAAI,MAAM,EAAE,CAAC;gBACX,wCAAwC;gBACxC,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC;gBACvC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,wBAAwB,CAAC,CAAC;gBAE3F,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;oBACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBACxC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC;oBAClD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC;oBAE7C,iDAAiD;oBACjD,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,IAAI,KAAK,CAAC,YAAY,IAAI,GAAG,IAAI,KAAK,CAAC,YAAY,IAAI,GAAG,EAAE,CAAC;wBACrG,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;oBACzC,CAAC;oBACD,IAAI,OAAO,KAAK,CAAC,kBAAkB,KAAK,QAAQ,IAAI,KAAK,CAAC,kBAAkB,IAAI,EAAE,IAAI,KAAK,CAAC,kBAAkB,IAAI,EAAE,EAAE,CAAC;wBACrH,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC;oBACrD,CAAC;oBAED,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;oBAC/B,OAAO;gBACT,CAAC;YACH,CAAC;YAED,2CAA2C;YAC3C,gEAAgE;YAChE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACrD,8CAA8C;YAC9C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC/B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACtC,CAAC;IACH,CAAC;IAED,YAAY,CAAC,GAAkB;QAC7B,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAErB,kDAAkD;QAClD,MAAM,QAAQ,GAAQ;YACpB,GAAG,EAAE,GAAgD;SACtD,CAAC;QAEF,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;YAC5B,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,sBAAsB,IAAI,SAAS,CAAC;QACrE,CAAC;aAAM,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;YACjC,wEAAwE;YACxE,IAAI,iBAAiB,EAAE,CAAC;gBACtB,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,uDAAuD;YACzD,CAAC;iBAAM,CAAC;gBACN,qDAAqD;gBACrD,IAAI,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;oBAC5C,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC;gBAClE,CAAC;gBACD,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;oBACpE,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAC3B,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC;QACnD,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEtC,iEAAiE;QACjE,IAAI,GAAG,KAAK,eAAe,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;IAED,aAAa;QACX,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACjD,CAAC;IAED,YAAY;QACV,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC/C,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAChC,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;IACrC,CAAC;IAED,UAAU;QACR,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAChC,CAAC;IAED,WAAW;QACT,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAEzC,iEAAiE;YACjE,MAAM,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAEhE,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC;YAC7D,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,0BAA0B,UAAU,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YACnH,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,+BAA+B,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAClG,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,MAAoB;QACrC,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;QAEvD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,cAAc;gBACjB,sDAAsD;gBACtD,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;gBACjC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBAC1B,GAAG,EAAE,eAAe;oBACpB,cAAc,EAAE,MAAM,CAAC,EAAE;iBAC1B,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,SAAS;gBACZ,6FAA6F;gBAC7F,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;gBACjC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;oBAC1B,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBAClD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;wBAC1B,GAAG,EAAE,eAAe;wBACpB,cAAc,EAAE,MAAM,CAAC,cAAc;wBACrC,sDAAsD;qBACvD,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YAER,KAAK,UAAU;gBACb,8CAA8C;gBAC9C,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC;gBAC/B,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAE3C,8DAA8D;gBAC9D,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,SAAS,CAAC;gBAEtD,uEAAuE;gBACvE,6CAA6C;gBAC7C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBAC1B,GAAG,EAAE,aAAa;oBAClB,YAAY;iBACb,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,YAAY;gBACf,uDAAuD;gBACvD,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC;gBAC/B,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAEpD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBAC1B,GAAG,EAAE,aAAa;oBAClB,YAAY,EAAE,MAAM,CAAC,EAAE;iBACxB,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,MAAM;gBACT,sCAAsC;gBACtC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;gBACzB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBAC1B,GAAG,EAAE,OAAO;oBACZ,MAAM,EAAE,MAAM,CAAC,EAAE;iBAClB,CAAC,CAAC;gBACH,MAAM;QACV,CAAC;QAED,sCAAsC;QACtC,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,KAAiB;QACpC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,YAAY,CAAC;QACjD,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,0BAA0B,CAAC,KAAiB;QAC1C,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACpC,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC,OAAO,CAAC;QAC/C,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAC7D,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;IAC1C,CAAC;IAEO,YAAY,CAAC,KAAiB;QACpC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC;YACxD,IAAI,QAAQ,GAAG,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC;YAErD,oCAAoC;YACpC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;QAC/B,CAAC;aAAM,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAgB,CAAC;YAC9E,IAAI,CAAC,SAAS;gBAAE,OAAO;YAEvB,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,CAAC;YAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC;YAC9D,MAAM,YAAY,GAAG,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,gDAAgD;YACvG,IAAI,QAAQ,GAAG,IAAI,CAAC,6BAA6B,GAAG,YAAY,CAAC;YAEjE,gCAAgC;YAChC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;QACrC,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,KAAiB;QACnC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;YACpC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,8BAA8B;QACzD,CAAC;aAAM,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACxC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;YACrC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;YACpC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,8BAA8B;QACzD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,yBAAyB,CAAC,KAAiB;QACzC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,YAAY,CAAC;QACjD,KAAK,CAAC,cAAc,EAAE,CAAC;IACzB,CAAC;IAED,+BAA+B,CAAC,KAAiB;QAC/C,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC,OAAO,CAAC;QAC/C,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAC7D,KAAK,CAAC,cAAc,EAAE,CAAC;IACzB,CAAC;IAEO,iBAAiB,CAAC,KAAiB;QACzC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC;YACxD,IAAI,QAAQ,GAAG,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC;YAErD,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;QAC/B,CAAC;aAAM,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAgB,CAAC;YAC9E,IAAI,CAAC,SAAS;gBAAE,OAAO;YAEvB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,CAAC;YAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC;YAC9D,MAAM,YAAY,GAAG,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;YACtD,IAAI,QAAQ,GAAG,IAAI,CAAC,6BAA6B,GAAG,YAAY,CAAC;YAEjE,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;QACrC,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,KAAiB;QACxC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,8BAA8B;QACzD,CAAC;aAAM,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACxC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;YACrC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,8BAA8B;QACzD,CAAC;IACH,CAAC;IAED;;OAEG;IACH;;;;;;OAMG;IACH,oBAAoB,CAAC,MAA6C;QAChE,OAAO,CAAC,IAAI,CAAC,2GAA2G,CAAC,CAAC;IAC5H,CAAC;IAED,2BAA2B;QACzB,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClC,4BAA4B;YAC5B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gCAAgC,CAAC;YAChE,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,iDAAiD;YACjD,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAChE,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC;YAC9B,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACvC,CAAC;IACH,CAAC;IAED,qBAAqB,CAAC,KAAkE;QACtF,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;QACzD,iDAAiD;QACjD,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,cAAc,CAAC;QAElD,2CAA2C;QAC3C,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACpC,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAED,kBAAkB,CAAC,KAAuD;QACxE,yCAAyC;QACzC,MAAM,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;QACvE,MAAM,OAAO,GAAsB;YACjC,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,QAAQ,KAAK,CAAC,UAAU,EAAE;YACjC,YAAY,EAAE,QAAQ;YACtB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,UAAU,EAAE,aAAa;YACzB,IAAI,EAAE,MAAM;SACb,CAAC;QACF,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,mBAAmB,CAAC,KAAwB;QAC1C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,2BAA2B,CAAC,KAA6C;QACvE,yCAAyC;QACzC,MAAM,OAAO,GAAsB;YACjC,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,QAAQ,KAAK,CAAC,UAAU,EAAE;YACjC,YAAY,EAAE,QAAQ;YACtB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,UAAU,EAAE,KAAK,CAAC,QAAQ;YAC1B,IAAI,EAAE,MAAM;SACb,CAAC;QACF,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,aAAa,CAAC,IAAkB;QAC9B,6CAA6C;QAC7C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC;QAE7B,yBAAyB;QACzB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC1B,GAAG,EAAE,OAAO;YACZ,MAAM,EAAE,IAAI,CAAC,EAAE;SAChB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,KAAiE;QACrF,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;QAE/C,oCAAoC;QACpC,0FAA0F;QAC1F,6EAA6E;QAC7E,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC;QACzC,CAAC;QACD,+EAA+E;QAE/E,iGAAiG;QACjG,2CAA2C;QAC3C,yGAAyG;QACzG,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAClC,+FAA+F;YAC/F,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;gBAC1B,GAAG,EAAE,aAAa;gBAClB,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,SAAS;gBAC7C,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;aACxC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACjC,sEAAsE;YACtE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;gBAC1B,GAAG,EAAE,aAAa;gBAClB,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,SAAS;aAC9C,CAAC,CAAC;QACL,CAAC;QACD,kEAAkE;QAClE,wDAAwD;IAC1D,CAAC;IAED;;OAEG;IACH,wBAAwB,CAAC,KAAyH;QAChJ,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAExD,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAClC,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;YAEjC,gDAAgD;YAChD,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;YAEnC,6EAA6E;YAC7E,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,UAAU,CAAC;gBAC1C,IAAI,CAAC,4BAA4B,GAAG,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC;gBAChE,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC,UAAU,EAAE,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;YACvF,CAAC;YAED,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAErC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;gBAC1B,GAAG,EAAE,eAAe;gBACpB,cAAc,EAAE,KAAK,CAAC,EAAE;aACzB,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACvC,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC;YAC/B,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAEnD,oEAAoE;YACpE,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;YACzE,CAAC;YAED,4DAA4D;YAC5D,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC;YACzC,CAAC;YAED,qDAAqD;YACrD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;gBAC1B,GAAG,EAAE,aAAa;gBAClB,YAAY,EAAE,KAAK,CAAC,EAAE;gBACtB,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,uBAAuB,CAAC,UAAkB;QACtD,+BAA+B;QAC/B,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;YACpC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;YACnC,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1G,IAAI,CAAC,sBAAsB,GAAG,WAAW,CAAC,QAAQ,CAAC;YACnD,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC,OAAO,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;YAC7D,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;YACpC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,wBAAwB,CAAC,UAAkB;QAC/C,gDAAgD;QAChD,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;QAC9B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,eAAe,CAAmB,eAAe,CAAC,CAAC;QAC7E,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEhC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;YAChC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,yBAAyB;QACvB,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB;QACpB,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,8CAA8C;QAC9C,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,mBAAmB,CAAC,OAA0B;QAC5C,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,OAAyB;QAC1C,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;wHA3oCU,8BAA8B;6DAA9B,8BAA8B;YAA9B,qGAAA,oBAAgB,wBAAc,4FAA9B,2BAAuB,0BAAO;;YCjE3C,8BAAkH;YAAjC,4HAAmB,gBAAY,IAAC;YAG7G,AADF,8BAAkC,oCASa;YAA3C,AADA,AADA,AADA,+IAAc,wBAAoB,IAAC,oIACjB,mBAAe,IAAC,sIACf,gBAAY,IAAC,wIACZ,yBAAqB,IAAC;YAE9C,AADE,iBAA6B,EACzB;YAGN,gGAAyB;YAOzB,gGAAwB;YAiIxB,0CAKgD;YAA9C,AADA,oHAAS,iBAAa,IAAC,+HACL,8BAA0B,IAAC;YAC/C,iBAAkB;YAGlB,2BAAqB;YAGrB,kDAK4C;YAA1C,AADA,4HAAS,sBAAkB,IAAC,uHACf,+BAA2B,IAAC;YAE7C,AADE,iBAA0B,EACtB;;;YAvKA,eAAuB;YAGvB,AADA,AADA,AADA,yCAAuB,oCACQ,gCACJ,8CACc;YAS7C,cAIC;YAJD,gDAIC;YAGD,cA8HC;YA9HD,+CA8HC;YAIC,cAA4B;YAE5B,AADA,AADA,8CAA4B,oCACG,gCACJ;YAU3B,eAAmC;YAEnC,AADA,AADA,qDAAmC,iCACP,gCACD;;;iFDtGlB,8BAA8B;cAN1C,SAAS;6BACI,KAAK,YACP,2BAA2B;;kBAKpC,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBAGL,KAAK;;kBAML,KAAK;;kBAQL,KAAK;;kBAQL,KAAK;;kBAWL,KAAK;;kBAWL,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBAON,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBAuaN,YAAY;mBAAC,eAAe;;kBAQ5B,YAAY;mBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;kFAhf/B,8BAA8B","sourcesContent":["/**\n * ============================================================================\n * DEPRECATED - DO NOT USE\n * ============================================================================\n *\n * This workspace component was used when conversations, collections, and tasks\n * were all combined into a single tabbed interface.\n *\n * The new architecture uses SEPARATE resource components for each feature:\n * - ChatConversationsResource for conversations\n * - CollectionsResource for collections\n * - TasksResource for tasks\n *\n * These resource components are located in @memberjunction/ng-explorer-core\n * and integrate with MJExplorer's tab/navigation system.\n *\n * This file is kept for backwards compatibility only. Any new features or\n * bug fixes should be made to the individual resource components instead.\n * ============================================================================\n */\n\nimport {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n DoCheck,\n ChangeDetectorRef,\n HostListener\n} from '@angular/core';\nimport { MJConversationEntity, MJArtifactEntity, MJTaskEntity, ArtifactMetadataEngine, MJUserSettingEntity, UserInfoEngine, ConversationEngine } from '@memberjunction/core-entities';\nimport { UserInfo, CompositeKey, KeyValuePair, Metadata } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { ArtifactStateService } from '../../services/artifact-state.service';\nimport { CollectionStateService } from '../../services/collection-state.service';\nimport { ArtifactPermissionService } from '../../services/artifact-permission.service';\nimport { MentionAutocompleteService } from '../../services/mention-autocomplete.service';\nimport { ConversationStreamingService } from '../../services/conversation-streaming.service';\nimport { UICommandHandlerService } from '../../services/ui-command-handler.service';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { NavigationTab, WorkspaceLayout } from '../../models/conversation-state.model';\nimport { SearchResult } from '../../services/search.service';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { ActionableCommand, AutomaticCommand } from '@memberjunction/ai-core-plus';\nimport { NavigationRequest } from '@memberjunction/ng-artifacts';\nimport { PendingAttachment } from '../mention/mention-editor.component';\n\n/**\n * Top-level workspace component for conversations\n * Provides 3-column Slack-style layout: Navigation | Sidebar | Chat Area | Artifact Panel\n * Supports context-based navigation (library or task views)\n *\n * @deprecated Use ChatConversationsResource from @memberjunction/ng-explorer-core instead.\n * This component is maintained for backwards compatibility but the resource-wrapper pattern\n * is the preferred approach for MJExplorer integration.\n */\n@Component({\n standalone: false,\n selector: 'mj-conversation-workspace',\n templateUrl: './conversation-workspace.component.html',\n styleUrls: ['./conversation-workspace.component.css']\n})\nexport class ConversationWorkspaceComponent extends BaseAngularComponent implements OnInit, OnDestroy, DoCheck {\n @Input() environmentId!: string;\n @Input() initialConversationId?: string;\n @Input() layout: WorkspaceLayout = 'full';\n @Input() currentUser!: UserInfo;\n @Input() activeContext?: 'library' | 'task';\n @Input() contextItemId?: string;\n\n // Navigation properties for external control (deep linking from URL)\n @Input() set activeTabInput(value: 'conversations' | 'collections' | 'tasks' | undefined) {\n if (value && value !== this.activeTab) {\n this.activeTab = value;\n }\n }\n\n @Input() set activeConversationInput(value: string | undefined) {\n if (value && value !== this.selectedConversationId) {\n console.log('🔗 Deep link to conversation:', value);\n this.activeTab = 'conversations';\n this.setActiveConversation(value);\n }\n }\n\n @Input() set activeCollectionInput(value: string | undefined) {\n if (value && value !== this.collectionState.activeCollectionId) {\n console.log('🔗 Deep link to collection:', value);\n this.activeTab = 'collections';\n this.collectionState.setActiveCollection(value);\n }\n }\n\n @Input() set activeVersionIdInput(value: string | undefined) {\n if (value && value !== this.activeVersionId) {\n console.log('🔗 Deep link to version:', value);\n this.activeTab = 'collections';\n // Store the version ID immediately to prevent ngDoCheck from clearing it\n this.activeVersionId = value;\n // Open artifact by version ID\n this.artifactState.openArtifactByVersionId(value);\n }\n }\n\n @Input() set activeTaskInput(value: string | undefined) {\n if (value && value !== this._activeTaskId) {\n this._activeTaskId = value;\n }\n }\n\n private _activeTaskId?: string;\n get activeTaskId(): string | undefined {\n return this._activeTaskId;\n }\n\n @Output() conversationChanged = new EventEmitter<MJConversationEntity>();\n @Output() artifactOpened = new EventEmitter<MJArtifactEntity>();\n @Output() navigationChanged = new EventEmitter<{\n tab: 'conversations' | 'collections' | 'tasks';\n conversationId?: string;\n collectionId?: string;\n versionId?: string;\n taskId?: string;\n }>();\n @Output() newConversationStarted = new EventEmitter<void>();\n @Output() actionableCommandExecuted = new EventEmitter<ActionableCommand>();\n @Output() automaticCommandExecuted = new EventEmitter<AutomaticCommand>();\n @Output() navigationRequested = new EventEmitter<NavigationRequest>();\n\n public activeTab: NavigationTab = 'conversations';\n public isSidebarVisible: boolean = true;\n public isArtifactPanelOpen: boolean = false;\n public isSearchPanelOpen: boolean = false;\n public isWorkspaceReady: boolean = false;\n public renamedConversationId: string | null = null;\n public activeArtifactId: string | null = null;\n public activeVersionNumber: number | null = null;\n public activeVersionId: string | null = null;\n public isMobileView: boolean = false;\n public isSidebarPinned: boolean = false; // Default unpinned until settings load (prevents flicker)\n\n // Artifact permissions\n public canShareActiveArtifact: boolean = false;\n public canEditActiveArtifact: boolean = false;\n\n // Share modal state\n public isArtifactShareModalOpen: boolean = false;\n public artifactToShare: MJArtifactEntity | null = null;\n\n // Resize state - Sidebar\n public sidebarWidth: number = 260; // Default width\n public isSidebarCollapsed: boolean = true; // Default collapsed until settings load (prevents flicker)\n public sidebarTransitionsEnabled: boolean = false; // Disabled during initial load to prevent jarring animation\n public isSidebarSettingsLoaded: boolean = false; // Tracks whether settings have been loaded (prevents render before state is known)\n private isSidebarResizing: boolean = false;\n private sidebarResizeStartX: number = 0;\n private sidebarResizeStartWidth: number = 0;\n\n // Resize state - Artifact Panel\n public artifactPanelWidth: number = 40; // Default 40% width\n public isArtifactPanelMaximized: boolean = false;\n private artifactPanelWidthBeforeMaximize: number = 40; // Store width before maximizing\n private isArtifactPanelResizing: boolean = false;\n private artifactPanelResizeStartX: number = 0;\n private artifactPanelResizeStartWidth: number = 0;\n\n private previousConversationId: string | null = null;\n private previousTaskId: string | undefined = undefined;\n private previousVersionId: string | null = null; // Used to track version changes in ngDoCheck\n private previousIsNewConversation: boolean = false; // Track new conversation state changes\n private destroy$ = new Subject<void>();\n\n // User Settings key for server-side persistence\n private readonly USER_SETTING_SIDEBAR_KEY = 'Conversations.SidebarState';\n private saveSettingsTimeout: ReturnType<typeof setTimeout> | null = null;\n private isLoadingSettings: boolean = false;\n\n // Task filter for conversation-specific filtering\n public tasksFilter: string = '1=1';\n\n // LOCAL CONVERSATION STATE - enables multiple workspace instances\n // Each workspace manages its own selection state independently\n public selectedConversationId: string | null = null;\n public selectedConversation: MJConversationEntity | null = null;\n public selectedThreadId: string | null = null;\n public isNewUnsavedConversation: boolean = false;\n public pendingMessageToSend: string | null = null;\n public pendingAttachmentsToSend: PendingAttachment[] | null = null;\n public pendingArtifactId: string | null = null;\n public pendingArtifactVersionNumber: number | null = null;\n\n private engine = ConversationEngine.Instance;\n\n constructor(\n public artifactState: ArtifactStateService,\n public collectionState: CollectionStateService,\n private artifactPermissionService: ArtifactPermissionService,\n private mentionAutocompleteService: MentionAutocompleteService,\n private notificationService: MJNotificationService,\n private streamingService: ConversationStreamingService,\n private uiCommandHandler: UICommandHandlerService,\n private cdr: ChangeDetectorRef\n ) {\n super();\n }\n\n // =========================================================================\n // LOCAL CONVERSATION STATE MANAGEMENT\n // These methods manage the workspace's local selection state\n // =========================================================================\n\n /**\n * Sets the active conversation for this workspace instance\n * @param id The conversation ID to activate (or null to clear)\n */\n setActiveConversation(id: string | null): void {\n console.log('🎯 Setting active conversation:', id);\n this.selectedConversationId = id;\n this.selectedConversation = id ? (this.engine.GetConversation(id) ?? null) : null;\n // Clear unsaved state when switching to an existing conversation\n if (id) {\n this.isNewUnsavedConversation = false;\n }\n }\n\n /**\n * Initiates a new unsaved conversation (doesn't create DB record yet)\n * This shows the welcome screen and delays DB creation until first message\n */\n startNewConversation(): void {\n console.log('✨ Starting new unsaved conversation');\n this.selectedConversationId = null;\n this.selectedConversation = null;\n this.isNewUnsavedConversation = true;\n this.pendingMessageToSend = null;\n this.pendingAttachmentsToSend = null;\n\n // Auto-collapse if mobile OR if sidebar is not pinned\n if (this.isMobileView || !this.isSidebarPinned) {\n this.collapseSidebar();\n }\n }\n\n /**\n * Clears the new unsaved conversation state\n * Called when the conversation is actually created or cancelled\n */\n clearNewConversationState(): void {\n this.isNewUnsavedConversation = false;\n }\n\n /**\n * Opens a thread panel for a specific message\n * @param messageId The parent message ID\n */\n openThread(messageId: string): void {\n this.selectedThreadId = messageId;\n }\n\n /**\n * Closes the currently open thread panel\n */\n closeThread(): void {\n this.selectedThreadId = null;\n }\n\n /**\n * Handler for conversation selection from sidebar/list\n */\n onConversationSelected(conversationId: string): void {\n this.setActiveConversation(conversationId);\n\n // Auto-collapse if mobile OR if sidebar is not pinned\n if (this.isMobileView || !this.isSidebarPinned) {\n this.collapseSidebar();\n }\n }\n\n /**\n * Handler for new conversation creation from chat area\n * Now includes pending message and attachments to ensure atomic state update\n */\n onConversationCreated(event: {\n conversation: MJConversationEntity;\n pendingMessage?: string;\n pendingAttachments?: PendingAttachment[];\n }): void {\n try {\n // Set ALL state atomically before Angular change detection runs\n // This ensures the new message-input component receives the pending data\n this.pendingMessageToSend = event.pendingMessage || null;\n this.pendingAttachmentsToSend = event.pendingAttachments || null;\n this.selectedConversationId = event.conversation.ID;\n this.selectedConversation = event.conversation;\n this.isNewUnsavedConversation = false;\n // The conversation is already added to ConversationEngine by the chat area\n } catch (error) {\n console.error('onConversationCreated ERROR:', error);\n }\n }\n\n /**\n * Handler for pending message requested from chat area (empty state)\n * @deprecated Use onConversationCreated with pendingMessage instead\n */\n onPendingMessageRequested(event: {text: string; attachments: PendingAttachment[]}): void {\n this.pendingMessageToSend = event.text;\n this.pendingAttachmentsToSend = event.attachments;\n }\n\n /**\n * Handler for thread opened from chat area\n */\n onThreadOpened(threadId: string): void {\n this.selectedThreadId = threadId;\n }\n\n /**\n * Handler for thread closed from chat area\n */\n onThreadClosed(): void {\n this.selectedThreadId = null;\n }\n\n async ngOnInit() {\n // Bind provider-aware services to this component's provider so multi-server\n // browser apps don't silently fall back to the global Metadata.Provider.\n // ArtifactStateService cascades to ArtifactPermissionService and CollectionPermissionService.\n this.artifactState.Provider = this.ProviderToUse;\n this.artifactPermissionService.Provider = this.ProviderToUse;\n\n // Initialize global streaming service FIRST\n // This establishes the single PubSub connection for all conversations\n this.streamingService.initialize();\n console.log('✅ Global streaming service initialized');\n\n // Subscribe to command events from UI Command Handler service\n // These will be bubbled up to the host application\n this.uiCommandHandler.actionableCommandRequested\n .pipe(takeUntil(this.destroy$))\n .subscribe(command => {\n this.onActionableCommand(command);\n });\n\n this.uiCommandHandler.automaticCommandRequested\n .pipe(takeUntil(this.destroy$))\n .subscribe(command => {\n this.onAutomaticCommand(command);\n });\n\n // Check initial mobile state FIRST\n this.checkMobileView();\n\n // Load sidebar state - but on mobile, always default to collapsed\n if (this.isMobileView) {\n this.isSidebarCollapsed = true;\n this.isSidebarVisible = false;\n this.isSidebarSettingsLoaded = true; // Mobile doesn't need to load settings\n // Enable transitions after a brief delay to ensure initial state is applied\n setTimeout(() => {\n this.sidebarTransitionsEnabled = true;\n }, 50);\n } else {\n // Load from User Settings (async) - await before continuing to prevent flicker\n await this.loadSidebarState();\n this.cdr.detectChanges();\n // Enable transitions after state is loaded and applied\n setTimeout(() => {\n this.sidebarTransitionsEnabled = true;\n }, 50);\n }\n\n // Setup resize listeners\n window.addEventListener('mousemove', this.onResizeMove.bind(this));\n window.addEventListener('mouseup', this.onResizeEnd.bind(this));\n\n // Setup touch listeners for mobile\n window.addEventListener('touchmove', this.onResizeTouchMove.bind(this));\n window.addEventListener('touchend', this.onResizeTouchEnd.bind(this));\n\n // CRITICAL: Initialize engines FIRST before rendering any UI\n // The isWorkspaceReady flag blocks all child components from rendering\n // until engines are fully loaded and ready\n try {\n // Load both engines in parallel - ArtifactMetadataEngine is lightweight (just artifact types)\n // Using Promise.all ensures optimal performance with no additional delay\n await Promise.all([\n AIEngineBase.Instance.Config(false),\n ArtifactMetadataEngine.Instance.Config(false)\n ]);\n\n console.log('✅ AI Engine initialized with', AIEngineBase.Instance.Agents?.length || 0, 'agents');\n console.log('✅ Artifact Metadata Engine initialized with',\n ArtifactMetadataEngine.Instance.ArtifactTypes?.length || 0, 'artifact types');\n\n // Initialize mention autocomplete service immediately after AI engine\n // This ensures the cache is built from the fully-loaded agent list\n await this.mentionAutocompleteService.initialize(this.currentUser);\n console.log('✅ Mention autocomplete initialized');\n\n // Mark workspace as ready - this allows UI to render\n this.isWorkspaceReady = true;\n this.cdr.detectChanges();\n } catch (error) {\n console.error('❌ Failed to initialize engines:', error);\n // Still mark as ready so UI isn't blocked forever\n this.isWorkspaceReady = true;\n this.cdr.detectChanges();\n }\n\n // Subscribe to artifact panel state\n this.artifactState.isPanelOpen$\n .pipe(takeUntil(this.destroy$))\n .subscribe(isOpen => {\n this.isArtifactPanelOpen = isOpen;\n });\n\n // Subscribe to active artifact ID\n this.artifactState.activeArtifactId$\n .pipe(takeUntil(this.destroy$))\n .subscribe(async id => {\n this.activeArtifactId = id;\n // Load permissions when artifact changes\n if (id) {\n await this.loadArtifactPermissions(id);\n } else {\n this.canShareActiveArtifact = false;\n this.canEditActiveArtifact = false;\n }\n });\n\n // Subscribe to active version number\n this.artifactState.activeVersionNumber$\n .pipe(takeUntil(this.destroy$))\n .subscribe(versionNumber => {\n this.activeVersionNumber = versionNumber;\n });\n\n // Set initial conversation if provided\n if (this.initialConversationId) {\n this.setActiveConversation(this.initialConversationId);\n }\n\n // Handle context-based navigation\n if (this.activeContext === 'library') {\n this.activeTab = 'collections';\n }\n // Task context will be handled by chat header dropdown, not navigation tabs\n\n // Build task filter for conversations domain\n this.buildTasksFilter();\n }\n\n /**\n * Builds the SQL filter for tasks in conversations the user has access to\n */\n private buildTasksFilter(): void {\n // Filter tasks by conversations the user owns or is a participant in, or tasks owned\n // by the user\n const md = this.ProviderToUse;\n const cd = md.EntityByName('MJ: Conversation Details');\n const c = md.EntityByName('MJ: Conversations');\n if (!cd || !c) {\n console.warn('⚠️ Missing metadata for Conversations or Conversation Details');\n this.tasksFilter = `ParentID IS NULL AND UserID = '${this.currentUser.ID}'`; // Fallback to user-owned tasks only\n return;\n }\n\n this.tasksFilter = `ParentID IS NULL AND (UserID = '${this.currentUser.ID}' OR ConversationDetailID IN (\n SELECT ID FROM [${cd.SchemaName}].[${cd.BaseView}] \n WHERE \n UserID ='${this.currentUser.ID}' OR \n ConversationID IN (\n SELECT ID FROM [${c.SchemaName}].[${c.BaseView}] WHERE UserID='${this.currentUser.ID}'\n )\n ))`;\n console.log('📝 Conversations domain tasks filter built:', this.tasksFilter);\n }\n\n ngDoCheck() {\n // Detect new unsaved conversation state changes\n const currentIsNewConversation = this.isNewUnsavedConversation;\n if (currentIsNewConversation !== this.previousIsNewConversation) {\n this.previousIsNewConversation = currentIsNewConversation;\n if (currentIsNewConversation) {\n // Emit event to clear URL conversation parameter\n Promise.resolve().then(() => {\n this.newConversationStarted.emit();\n });\n }\n }\n\n // Detect conversation changes and emit event\n const currentId = this.selectedConversationId;\n if (currentId !== this.previousConversationId) {\n this.previousConversationId = currentId;\n const conversation = this.selectedConversation;\n if (conversation) {\n this.conversationChanged.emit(conversation);\n\n // Also emit navigationChanged for URL updates (only if on conversations tab)\n if (this.activeTab === 'conversations' && currentId) {\n // Defer emission until after change detection completes\n Promise.resolve().then(() => {\n this.navigationChanged.emit({\n tab: 'conversations',\n conversationId: currentId\n });\n });\n }\n }\n }\n\n // Detect task selection changes (when on tasks tab)\n if (this.activeTab === 'tasks') {\n const currentTaskId = this.activeTaskId;\n if (currentTaskId !== this.previousTaskId) {\n this.previousTaskId = currentTaskId;\n if (currentTaskId) {\n // Defer emission until after change detection completes\n Promise.resolve().then(() => {\n this.navigationChanged.emit({\n tab: 'tasks',\n taskId: currentTaskId\n });\n });\n }\n }\n }\n\n // Version changes are handled by onCollectionNavigated and deep link inputs\n // We don't need ngDoCheck to track them as it causes double navigation events\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n\n // Clear any pending save timeout\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n }\n\n // Remove resize listeners\n window.removeEventListener('mousemove', this.onResizeMove.bind(this));\n window.removeEventListener('mouseup', this.onResizeEnd.bind(this));\n window.removeEventListener('touchmove', this.onResizeTouchMove.bind(this));\n window.removeEventListener('touchend', this.onResizeTouchEnd.bind(this));\n }\n\n @HostListener('window:resize')\n onWindowResize(): void {\n this.checkMobileView();\n }\n\n /**\n * Handle clicks outside the sidebar to auto-collapse when unpinned\n */\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n // Only handle when sidebar is expanded but unpinned\n if (this.isSidebarCollapsed || this.isSidebarPinned) {\n return;\n }\n\n // Check if click is outside the sidebar\n const target = event.target as HTMLElement;\n const sidebarElement = target.closest('.workspace-sidebar');\n const expandHandle = target.closest('.sidebar-expand-handle');\n\n // If click is outside sidebar and expand handle, collapse it\n if (!sidebarElement && !expandHandle) {\n this.collapseSidebar();\n }\n }\n\n private checkMobileView(): void {\n const wasMobile = this.isMobileView;\n this.isMobileView = window.innerWidth < 768;\n\n if (this.isMobileView && !wasMobile) {\n // Switched to mobile - hide sidebar and default to collapsed\n this.isSidebarVisible = false;\n this.isSidebarCollapsed = true;\n } else if (!this.isMobileView && wasMobile) {\n // Switched to desktop - show sidebar, restore state from User Settings\n this.isSidebarVisible = true;\n this.loadSidebarState().then(() => {\n this.cdr.detectChanges();\n });\n }\n }\n\n /**\n * Collapse sidebar\n */\n collapseSidebar(): void {\n this.isSidebarCollapsed = true;\n if (this.isMobileView) {\n this.isSidebarVisible = false;\n }\n }\n\n /**\n * Expand sidebar (unpinned - will auto-collapse on selection)\n */\n expandSidebar(): void {\n this.isSidebarCollapsed = false;\n this.isSidebarPinned = false;\n }\n\n /**\n * Pin sidebar - keep it open after selection\n */\n pinSidebar(): void {\n this.isSidebarPinned = true;\n this.saveSidebarState();\n }\n\n /**\n * Unpin sidebar - will auto-collapse on next selection\n */\n unpinSidebar(): void {\n this.isSidebarPinned = false;\n this.collapseSidebar();\n this.saveSidebarState();\n }\n\n /**\n * Save sidebar state to User Settings (server)\n * Uses debouncing to avoid excessive database writes\n */\n private saveSidebarState(): void {\n // Debounce the server save to avoid excessive writes\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n }\n this.saveSettingsTimeout = setTimeout(() => {\n this.saveSidebarStateToServer();\n }, 1000); // 1 second debounce\n }\n\n /**\n * Save sidebar state to User Settings entity on server using UserInfoEngine for cached lookup\n * Includes collapsed, pinned, sidebarWidth, and artifactPanelWidth\n */\n private async saveSidebarStateToServer(): Promise<void> {\n try {\n const userId = this.currentUser?.ID;\n if (!userId) {\n return;\n }\n\n const stateToSave = {\n collapsed: this.isSidebarCollapsed,\n pinned: this.isSidebarPinned,\n sidebarWidth: this.sidebarWidth,\n artifactPanelWidth: this.artifactPanelWidth\n };\n\n const engine = UserInfoEngine.Instance;\n const md = this.ProviderToUse;\n\n // Find existing setting from cached user settings\n let setting = engine.UserSettings.find(s => s.Setting === this.USER_SETTING_SIDEBAR_KEY);\n\n if (!setting) {\n // Create new setting\n setting = await md.GetEntityObject<MJUserSettingEntity>('MJ: User Settings');\n setting.UserID = userId;\n setting.Setting = this.USER_SETTING_SIDEBAR_KEY;\n }\n\n setting.Value = JSON.stringify(stateToSave);\n await setting.Save();\n } catch (error) {\n console.warn('Failed to save sidebar state to User Settings:', error);\n }\n }\n\n /**\n * Load sidebar state from User Settings (server) using UserInfoEngine\n * Includes collapsed, pinned, sidebarWidth, and artifactPanelWidth\n * For new users with no saved state, defaults to collapsed with new conversation\n */\n private async loadSidebarState(): Promise<void> {\n this.isLoadingSettings = true;\n\n try {\n const userId = this.currentUser?.ID;\n if (userId) {\n // Try loading from cached User Settings\n const engine = UserInfoEngine.Instance;\n const setting = engine.UserSettings.find(s => s.Setting === this.USER_SETTING_SIDEBAR_KEY);\n\n if (setting?.Value) {\n const state = JSON.parse(setting.Value);\n this.isSidebarCollapsed = state.collapsed ?? true;\n this.isSidebarPinned = state.pinned ?? false;\n\n // Load width values if present (with validation)\n if (typeof state.sidebarWidth === 'number' && state.sidebarWidth >= 200 && state.sidebarWidth <= 500) {\n this.sidebarWidth = state.sidebarWidth;\n }\n if (typeof state.artifactPanelWidth === 'number' && state.artifactPanelWidth >= 20 && state.artifactPanelWidth <= 70) {\n this.artifactPanelWidth = state.artifactPanelWidth;\n }\n\n this.isLoadingSettings = false;\n return;\n }\n }\n\n // No saved state found - NEW USER DEFAULT:\n // Start with sidebar collapsed and show new conversation screen\n this.isSidebarCollapsed = true;\n this.isSidebarPinned = false;\n this.isNewUnsavedConversation = true;\n } catch (error) {\n console.warn('Failed to load sidebar state:', error);\n // Default to collapsed for new users on error\n this.isSidebarCollapsed = true;\n this.isSidebarPinned = false;\n } finally {\n this.isLoadingSettings = false;\n this.isSidebarSettingsLoaded = true;\n }\n }\n\n onTabChanged(tab: NavigationTab): void {\n const wasOnDifferentTab = this.activeTab !== tab;\n this.activeTab = tab;\n\n // Emit navigation change event with current state\n const navEvent: any = {\n tab: tab as 'conversations' | 'collections' | 'tasks'\n };\n\n if (tab === 'conversations') {\n navEvent.conversationId = this.selectedConversationId || undefined;\n } else if (tab === 'collections') {\n // If switching TO collections tab from another tab, clear to root level\n if (wasOnDifferentTab) {\n this.collectionState.setActiveCollection(null);\n this.activeVersionId = null;\n // Don't include collectionId or versionId - go to root\n } else {\n // Already on collections tab, preserve current state\n if (this.collectionState.activeCollectionId) {\n navEvent.collectionId = this.collectionState.activeCollectionId;\n }\n if (this.activeVersionId && this.collectionState.activeCollectionId) {\n navEvent.versionId = this.activeVersionId;\n }\n }\n } else if (tab === 'tasks') {\n navEvent.taskId = this.activeTaskId || undefined;\n }\n\n this.navigationChanged.emit(navEvent);\n\n // Auto-close artifact panel when switching away from collections\n if (tab === 'conversations' || tab === 'tasks') {\n this.artifactState.closeArtifact();\n }\n }\n\n toggleSidebar(): void {\n this.isSidebarVisible = !this.isSidebarVisible;\n }\n\n closeSidebar(): void {\n if (this.isMobileView && this.isSidebarVisible) {\n this.isSidebarVisible = false;\n }\n }\n\n closeArtifactPanel(): void {\n this.artifactState.closeArtifact();\n }\n\n openSearch(): void {\n this.isSearchPanelOpen = true;\n }\n\n closeSearch(): void {\n this.isSearchPanelOpen = false;\n }\n\n async onRefreshAgentCache(): Promise<void> {\n try {\n await AIEngineBase.Instance.Config(true);\n\n // Refresh the mention autocomplete service to pick up new agents\n await this.mentionAutocompleteService.refresh(this.currentUser);\n\n const agentCount = AIEngineBase.Instance.Agents?.length || 0;\n this.notificationService.CreateSimpleNotification(`Agent cache refreshed (${agentCount} agents)`, 'success', 3000);\n this.cdr.detectChanges();\n } catch (error) {\n this.notificationService.CreateSimpleNotification('Failed to refresh agent cache', 'error', 3000);\n console.error('Failed to refresh AI Engine:', error);\n }\n }\n\n handleSearchResult(result: SearchResult): void {\n console.log('🔍 Navigating to search result:', result);\n\n switch (result.type) {\n case 'conversation':\n // Switch to conversations tab and select conversation\n this.activeTab = 'conversations';\n this.setActiveConversation(result.id);\n this.navigationChanged.emit({\n tab: 'conversations',\n conversationId: result.id\n });\n break;\n\n case 'message':\n // Switch to conversations tab, open conversation, and scroll to message (future enhancement)\n this.activeTab = 'conversations';\n if (result.conversationId) {\n this.setActiveConversation(result.conversationId);\n this.navigationChanged.emit({\n tab: 'conversations',\n conversationId: result.conversationId\n // TODO: Add messageId for scroll-to support in future\n });\n }\n break;\n\n case 'artifact':\n // Switch to collections tab and open artifact\n this.activeTab = 'collections';\n this.artifactState.openArtifact(result.id);\n\n // If artifact is in a collection, navigate to that collection\n const collectionId = result.collectionId || undefined;\n\n // Search results don't have version ID, so just navigate to collection\n // The artifact will open with latest version\n this.navigationChanged.emit({\n tab: 'collections',\n collectionId\n });\n break;\n\n case 'collection':\n // Switch to collections tab and navigate to collection\n this.activeTab = 'collections';\n this.collectionState.setActiveCollection(result.id);\n\n this.navigationChanged.emit({\n tab: 'collections',\n collectionId: result.id\n });\n break;\n\n case 'task':\n // Switch to tasks tab and select task\n this.activeTab = 'tasks';\n this._activeTaskId = result.id;\n this.navigationChanged.emit({\n tab: 'tasks',\n taskId: result.id\n });\n break;\n }\n\n // Close search panel after navigation\n this.closeSearch();\n }\n\n /**\n * Sidebar resize methods\n */\n onSidebarResizeStart(event: MouseEvent): void {\n this.isSidebarResizing = true;\n this.sidebarResizeStartX = event.clientX;\n this.sidebarResizeStartWidth = this.sidebarWidth;\n event.preventDefault();\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n /**\n * Artifact panel resize methods\n */\n onArtifactPanelResizeStart(event: MouseEvent): void {\n this.isArtifactPanelResizing = true;\n this.artifactPanelResizeStartX = event.clientX;\n this.artifactPanelResizeStartWidth = this.artifactPanelWidth;\n event.preventDefault();\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n private onResizeMove(event: MouseEvent): void {\n if (this.isSidebarResizing) {\n const deltaX = event.clientX - this.sidebarResizeStartX;\n let newWidth = this.sidebarResizeStartWidth + deltaX;\n\n // Constrain between 200px and 500px\n newWidth = Math.max(200, Math.min(500, newWidth));\n this.sidebarWidth = newWidth;\n } else if (this.isArtifactPanelResizing) {\n const container = document.querySelector('.workspace-content') as HTMLElement;\n if (!container) return;\n\n const containerWidth = container.offsetWidth;\n const deltaX = event.clientX - this.artifactPanelResizeStartX;\n const deltaPercent = (deltaX / containerWidth) * -100; // Negative because we're pulling from the right\n let newWidth = this.artifactPanelResizeStartWidth + deltaPercent;\n\n // Constrain between 20% and 70%\n newWidth = Math.max(20, Math.min(70, newWidth));\n this.artifactPanelWidth = newWidth;\n }\n }\n\n private onResizeEnd(event: MouseEvent): void {\n if (this.isSidebarResizing) {\n this.isSidebarResizing = false;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.saveSidebarState(); // Save width to User Settings\n } else if (this.isArtifactPanelResizing) {\n this.isArtifactPanelResizing = false;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.saveSidebarState(); // Save width to User Settings\n }\n }\n\n /**\n * Touch event handlers for mobile resize support\n */\n onSidebarResizeTouchStart(event: TouchEvent): void {\n this.isSidebarResizing = true;\n const touch = event.touches[0];\n this.sidebarResizeStartX = touch.clientX;\n this.sidebarResizeStartWidth = this.sidebarWidth;\n event.preventDefault();\n }\n\n onArtifactPanelResizeTouchStart(event: TouchEvent): void {\n this.isArtifactPanelResizing = true;\n const touch = event.touches[0];\n this.artifactPanelResizeStartX = touch.clientX;\n this.artifactPanelResizeStartWidth = this.artifactPanelWidth;\n event.preventDefault();\n }\n\n private onResizeTouchMove(event: TouchEvent): void {\n if (this.isSidebarResizing) {\n const touch = event.touches[0];\n const deltaX = touch.clientX - this.sidebarResizeStartX;\n let newWidth = this.sidebarResizeStartWidth + deltaX;\n\n newWidth = Math.max(200, Math.min(500, newWidth));\n this.sidebarWidth = newWidth;\n } else if (this.isArtifactPanelResizing) {\n const container = document.querySelector('.workspace-content') as HTMLElement;\n if (!container) return;\n\n const touch = event.touches[0];\n const containerWidth = container.offsetWidth;\n const deltaX = touch.clientX - this.artifactPanelResizeStartX;\n const deltaPercent = (deltaX / containerWidth) * -100;\n let newWidth = this.artifactPanelResizeStartWidth + deltaPercent;\n\n newWidth = Math.max(20, Math.min(70, newWidth));\n this.artifactPanelWidth = newWidth;\n }\n }\n\n private onResizeTouchEnd(event: TouchEvent): void {\n if (this.isSidebarResizing) {\n this.isSidebarResizing = false;\n this.saveSidebarState(); // Save width to User Settings\n } else if (this.isArtifactPanelResizing) {\n this.isArtifactPanelResizing = false;\n this.saveSidebarState(); // Save width to User Settings\n }\n }\n\n /**\n * Toggle maximize/restore state for artifact panel\n */\n /**\n * Apply-to-my-form handler. This deprecated workspace component is no\n * longer the live chat surface — the real handler lives on\n * ConversationChatAreaComponent. This stub exists only so the template\n * binding compiles. New consumers should use the resource components in\n * @memberjunction/ng-explorer-core instead of this workspace.\n */\n onApplyFormRequested(_event: { spec: unknown; entityName: string }): void {\n console.warn('Workspace.onApplyFormRequested: workspace is deprecated; use the per-feature resource components instead.');\n }\n\n toggleMaximizeArtifactPanel(): void {\n if (this.isArtifactPanelMaximized) {\n // Restore to previous width\n this.artifactPanelWidth = this.artifactPanelWidthBeforeMaximize;\n this.isArtifactPanelMaximized = false;\n } else {\n // Maximize - store current width and set to 100%\n this.artifactPanelWidthBeforeMaximize = this.artifactPanelWidth;\n this.artifactPanelWidth = 100;\n this.isArtifactPanelMaximized = true;\n }\n }\n\n onConversationRenamed(event: {conversationId: string; name: string; description: string}): void {\n console.log('✨ Workspace received rename event:', event);\n // Trigger animation in sidebar by setting the ID\n this.renamedConversationId = event.conversationId;\n\n // Clear after animation completes (1500ms)\n setTimeout(() => {\n this.renamedConversationId = null;\n }, 1500);\n }\n\n onOpenEntityRecord(event: {entityName: string; compositeKey: CompositeKey}): void {\n // Convert to actionable command and emit\n const firstKeyValue = event.compositeKey.KeyValuePairs[0]?.Value || '';\n const command: ActionableCommand = {\n type: 'open:resource',\n label: `Open ${event.entityName}`,\n resourceType: 'Record',\n entityName: event.entityName,\n resourceId: firstKeyValue,\n mode: 'view'\n };\n this.actionableCommandExecuted.emit(command);\n }\n\n onNavigationRequest(event: NavigationRequest): void {\n this.navigationRequested.emit(event);\n }\n\n onOpenEntityRecordFromTasks(event: {entityName: string; recordId: string}): void {\n // Convert to actionable command and emit\n const command: ActionableCommand = {\n type: 'open:resource',\n label: `Open ${event.entityName}`,\n resourceType: 'Record',\n entityName: event.entityName,\n resourceId: event.recordId,\n mode: 'view'\n };\n this.actionableCommandExecuted.emit(command);\n }\n\n onTaskClicked(task: MJTaskEntity): void {\n // Switch to Tasks tab and set active task ID\n this.activeTab = 'tasks';\n this._activeTaskId = task.ID;\n\n // Emit navigation change\n this.navigationChanged.emit({\n tab: 'tasks',\n taskId: task.ID\n });\n }\n\n /**\n * Handle collection navigation events\n */\n onCollectionNavigated(event: { collectionId: string | null; versionId?: string | null }): void {\n console.log('📁 Collection navigated:', event);\n\n // Store the version ID for URL sync\n // CRITICAL: Only update activeVersionId if versionId was explicitly provided in the event\n // If versionId is undefined (not provided), keep the current activeVersionId\n if (event.versionId !== undefined) {\n this.activeVersionId = event.versionId;\n }\n // Otherwise: versionId not provided in event, preserve current activeVersionId\n\n // IMPORTANT: Don't emit navigationChanged here when doing programmatic navigation (deep linking)\n // The artifact state is managed separately\n // Only emit if the event explicitly includes a versionId, or if we're intentionally closing the artifact\n if (event.versionId !== undefined) {\n // Event explicitly specifies artifact state (user clicked artifact or intentionally closed it)\n this.navigationChanged.emit({\n tab: 'collections',\n collectionId: event.collectionId || undefined,\n versionId: event.versionId || undefined\n });\n } else if (!this.activeVersionId) {\n // No artifact currently open, safe to emit collection-only navigation\n this.navigationChanged.emit({\n tab: 'collections',\n collectionId: event.collectionId || undefined\n });\n }\n // Otherwise: artifact is open but event doesn't specify versionId\n // Don't emit - preserve current URL state with artifact\n }\n\n /**\n * Handle navigation from artifact links\n */\n onArtifactLinkNavigation(event: {type: 'conversation' | 'collection'; id: string; artifactId?: string; versionNumber?: number; versionId?: string}): void {\n console.log('🔗 Navigating from artifact link:', event);\n\n if (event.type === 'conversation') {\n this.activeTab = 'conversations';\n\n // Close collection artifact viewer if it's open\n this.artifactState.closeArtifact();\n\n // Store pending artifact info so chat area can show it and scroll to message\n if (event.artifactId) {\n this.pendingArtifactId = event.artifactId;\n this.pendingArtifactVersionNumber = event.versionNumber || null;\n console.log('📦 Pending artifact set:', event.artifactId, 'v' + event.versionNumber);\n }\n\n this.setActiveConversation(event.id);\n\n this.navigationChanged.emit({\n tab: 'conversations',\n conversationId: event.id\n });\n } else if (event.type === 'collection') {\n this.activeTab = 'collections';\n this.collectionState.setActiveCollection(event.id);\n\n // Open the artifact automatically when navigating to the collection\n if (event.artifactId) {\n this.artifactState.openArtifact(event.artifactId, event.versionNumber);\n }\n\n // Store version ID for URL sync (same as viewArtifact does)\n if (event.versionId) {\n this.activeVersionId = event.versionId;\n }\n\n // Emit navigation with version ID so URL includes it\n this.navigationChanged.emit({\n tab: 'collections',\n collectionId: event.id,\n versionId: event.versionId\n });\n }\n }\n\n /**\n * Load permissions for the given artifact\n */\n private async loadArtifactPermissions(artifactId: string): Promise<void> {\n // Guard against null/undefined\n if (!artifactId) {\n this.canShareActiveArtifact = false;\n this.canEditActiveArtifact = false;\n return;\n }\n\n try {\n const permissions = await this.artifactPermissionService.getUserPermissions(artifactId, this.currentUser);\n this.canShareActiveArtifact = permissions.canShare;\n this.canEditActiveArtifact = permissions.canEdit;\n } catch (error) {\n console.error('Failed to load artifact permissions:', error);\n this.canShareActiveArtifact = false;\n this.canEditActiveArtifact = false;\n }\n }\n\n /**\n * Handle share request from artifact viewer\n */\n async onArtifactShareRequested(artifactId: string): Promise<void> {\n // Load the artifact entity to pass to the modal\n const md = this.ProviderToUse;\n const artifact = await md.GetEntityObject<MJArtifactEntity>('MJ: Artifacts');\n await artifact.Load(artifactId);\n\n if (artifact) {\n this.artifactToShare = artifact;\n this.isArtifactShareModalOpen = true;\n }\n }\n\n /**\n * Handle close of artifact share modal\n */\n onArtifactShareModalClose(): void {\n this.isArtifactShareModalOpen = false;\n this.artifactToShare = null;\n }\n\n /**\n * Handle successful share - refresh permissions\n */\n async onArtifactShared(): Promise<void> {\n this.isArtifactShareModalOpen = false;\n this.artifactToShare = null;\n\n // Refresh permissions for the active artifact\n if (this.activeArtifactId) {\n await this.loadArtifactPermissions(this.activeArtifactId);\n }\n }\n\n /**\n * Handle actionable command execution from child components\n * Bubbles up to host application for handling\n */\n onActionableCommand(command: ActionableCommand): void {\n console.log('📤 Bubbling up actionable command:', command);\n this.actionableCommandExecuted.emit(command);\n }\n\n /**\n * Handle automatic command execution from child components\n * Bubbles up to host application for handling\n */\n onAutomaticCommand(command: AutomaticCommand): void {\n console.log('📤 Bubbling up automatic command:', command);\n this.automaticCommandExecuted.emit(command);\n }\n}","<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>"]}
|
|
1
|
+
{"version":3,"file":"conversation-workspace.component.js","sourceRoot":"","sources":["../../../../src/lib/components/workspace/conversation-workspace.component.ts","../../../../src/lib/components/workspace/conversation-workspace.component.html"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,YAAY,EAKZ,YAAY,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAwD,sBAAsB,EAAuB,cAAc,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEtL,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAUrE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;;;;;;;;;;;;;;;;;;;;;IC7B1D,8BAA+B;IAC7B,gCAA+D;IACjE,iBAAM;;;;IAQF,+BAAsE;IAAzB,8MAAS,qBAAc,KAAC;IAAC,iBAAM;;;;IAU1E,AALF,+BAI2D,kCAYd;IAAzC,AADA,AADA,AADA,sQAAwB,qCAA8B,KAAC,2PAC3B,6BAAsB,KAAC,iPAC5B,mBAAY,KAAC,qPACX,qBAAc,KAAC;IAE5C,AADE,iBAA0B,EACtB;;;IAdJ,kFAAwD;IADxD,AADA,AADA,+CAA+B,wCACO,oDACY;IAGhD,cAAuB;IAMvB,AADA,AADA,AADA,AADA,AADA,AADA,4CAAuB,uCACQ,mCACJ,yDACsB,uDACF,2CACZ,qCACN;;;;IAWjC,kCAE6B;IAD3B,iNAAS,sBAAe,KAAC;IAEzB,wBAAoC;IACtC,iBAAS;;;;IAKT,+BAC2C;IAA3C,4NAAa,mCAA4B,KAAC;IAAC,iBAAM;;;;IAM/C,AADF,+BAA4B,mCAI8B;IAAtD,qQAAuB,oCAA6B,KAAC;IAEzD,AADE,iBAA2B,EACvB;;;IAJF,cAA+B;IAC/B,AADA,oDAA+B,mCACJ;;;;IAS7B,AADF,+BAA4B,6BAMiC;IAAzD,yPAAoB,0CAAmC,KAAC;IAE5D,AADE,iBAAqB,EACjB;;;IANF,cAA+B;IAG/B,AADA,AADA,AADA,oDAA+B,mCACJ,kCACD,qCACG;;;;IAS/B,AADF,+BAA4B,oCAuBsC;IAA9D,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,sQAAuB,oCAA6B,KAAC,mPACjC,iCAA0B,KAAC,qPAC1B,kCAA2B,KAAC,yOAClC,4BAAqB,KAAC,yPACd,uCAAgC,KAAC,yPACjC,oCAA6B,KAAC,qQACxB,0CAAmC,KAAC,2OACjD,6BAAsB,KAAC,qOACvB,uBAAgB,KAAC,gQACc,IAAI,8DAAiC,IAAI,KAAC,iQACxC,IAAI,0DAA6B,IAAI,KAAC,iQAC5D,wCAAiC,KAAC;IAEjE,AADE,iBAA4B,EACxB;;;IAvBF,cAA+B;IAS/B,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,oDAA+B,mCACJ,iDACc,6CACJ,qCACR,sDACiB,+CACP,uDACQ,+CACR,qEACsB;;;;IAoB/D,+BAA2F;IAAjD,2OAAa,yCAAkC,KAAC;IAAC,iBAAM;;;;IADnG,6HAAiC;IAM/B,AAHF,+BAE+C,mCAgBS;IAApD,AADA,AADA,AADA,AADA,qOAAU,2BAAoB,KAAC,8OACb,uCAAgC,KAAC,8OACjC,uCAAgC,KAAC,0OAChC,oCAA6B,KAAC,sPAC3B,mCAA4B,KAAC;IAEvD,AADE,iBAA2B,EACvB;;;IAvBN,2DAEC;IAEC,cAAoC;IAApC,uDAAoC;IACpC,4DAA4C;IAE1C,cAA+B;IAS/B,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,oDAA+B,mCACJ,uCACI,0DACmB,4DACE,mFACuB,+EACJ,2CACpC,yCACF,gDACO;;;IApHhD,8BAA+B;IAE7B,8GAAgG;IAKhG,+GAAuF;IAuBvF,kHAA6G;IAS7G,+GAAkI;IAMlI,+GAAmC;IAWnC,+GAA6B;IAa7B,gHAA4D;IA8B5D,qGAA+C;IA0BjD,iBAAM;;;IA3HJ,cAEC;IAFD,+IAEC;IAGD,cAoBC;IApBD,+HAoBC;IAGD,cAMC;IAND,4JAMC;IAGD,cAGC;IAHD,wLAGC;IAGD,cAQC;IARD,6DAQC;IAGD,cAUC;IAVD,uDAUC;IAGD,cA2BC;IA3BD,6FA2BC;IAGD,cAyBC;IAzBD,gFAyBC;;ADjGP;;;;;;;;GAQG;AAOH,MAAM,OAAO,8BAA+B,SAAQ,oBAAoB;IAoI7D;IACA;IACC;IACA;IACA;IACA;IACA;IACA;IA1ID,aAAa,CAAU;IACvB,qBAAqB,CAAU;IAC/B,MAAM,GAAoB,MAAM,CAAC;IACjC,WAAW,CAAY;IACvB,aAAa,CAAsB;IACnC,aAAa,CAAU;IAEhC,qEAAqE;IACrE,IAAa,cAAc,CAAC,KAA4D;QACtF,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAED,IAAa,uBAAuB,CAAC,KAAyB;QAC5D,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACpD,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;YACjC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,IAAa,qBAAqB,CAAC,KAAyB;QAC1D,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC;YAC/B,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,IAAa,oBAAoB,CAAC,KAAyB;QACzD,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC;YAC/B,yEAAyE;YACzE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,8BAA8B;YAC9B,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,IAAa,eAAe,CAAC,KAAyB;QACpD,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1C,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;IAEO,aAAa,CAAU;IAC/B,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAES,mBAAmB,GAAG,IAAI,YAAY,EAAwB,CAAC;IAC/D,cAAc,GAAG,IAAI,YAAY,EAAoB,CAAC;IACtD,iBAAiB,GAAG,IAAI,YAAY,EAM1C,CAAC;IACK,sBAAsB,GAAG,IAAI,YAAY,EAAQ,CAAC;IAClD,yBAAyB,GAAG,IAAI,YAAY,EAAqB,CAAC;IAClE,wBAAwB,GAAG,IAAI,YAAY,EAAoB,CAAC;IAChE,mBAAmB,GAAG,IAAI,YAAY,EAAqB,CAAC;IAE/D,SAAS,GAAkB,eAAe,CAAC;IAC3C,gBAAgB,GAAY,IAAI,CAAC;IACjC,mBAAmB,GAAY,KAAK,CAAC;IACrC,iBAAiB,GAAY,KAAK,CAAC;IACnC,gBAAgB,GAAY,KAAK,CAAC;IAClC,qBAAqB,GAAkB,IAAI,CAAC;IAC5C,gBAAgB,GAAkB,IAAI,CAAC;IACvC,mBAAmB,GAAkB,IAAI,CAAC;IAC1C,eAAe,GAAkB,IAAI,CAAC;IACtC,YAAY,GAAY,KAAK,CAAC;IAC9B,eAAe,GAAY,KAAK,CAAC,CAAC,0DAA0D;IAEnG,uBAAuB;IAChB,sBAAsB,GAAY,KAAK,CAAC;IACxC,qBAAqB,GAAY,KAAK,CAAC;IAE9C,oBAAoB;IACb,wBAAwB,GAAY,KAAK,CAAC;IAC1C,eAAe,GAA4B,IAAI,CAAC;IAEvD,yBAAyB;IAClB,YAAY,GAAW,GAAG,CAAC,CAAC,gBAAgB;IAC5C,kBAAkB,GAAY,IAAI,CAAC,CAAC,2DAA2D;IAC/F,yBAAyB,GAAY,KAAK,CAAC,CAAC,4DAA4D;IACxG,uBAAuB,GAAY,KAAK,CAAC,CAAC,mFAAmF;IAC5H,iBAAiB,GAAY,KAAK,CAAC;IACnC,mBAAmB,GAAW,CAAC,CAAC;IAChC,uBAAuB,GAAW,CAAC,CAAC;IAE5C,gCAAgC;IACzB,kBAAkB,GAAW,EAAE,CAAC,CAAC,oBAAoB;IACrD,wBAAwB,GAAY,KAAK,CAAC;IACzC,gCAAgC,GAAW,EAAE,CAAC,CAAC,gCAAgC;IAC/E,uBAAuB,GAAY,KAAK,CAAC;IACzC,yBAAyB,GAAW,CAAC,CAAC;IACtC,6BAA6B,GAAW,CAAC,CAAC;IAE1C,sBAAsB,GAAkB,IAAI,CAAC;IAC7C,cAAc,GAAuB,SAAS,CAAC;IAC/C,iBAAiB,GAAkB,IAAI,CAAC,CAAC,6CAA6C;IACtF,yBAAyB,GAAY,KAAK,CAAC,CAAC,uCAAuC;IACnF,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;IAEvC,gDAAgD;IAC/B,wBAAwB,GAAG,4BAA4B,CAAC;IACjE,mBAAmB,GAAyC,IAAI,CAAC;IACjE,iBAAiB,GAAY,KAAK,CAAC;IAE3C,kDAAkD;IAC3C,WAAW,GAAW,KAAK,CAAC;IAEnC,kEAAkE;IAClE,+DAA+D;IACxD,sBAAsB,GAAkB,IAAI,CAAC;IAC7C,oBAAoB,GAAgC,IAAI,CAAC;IACzD,gBAAgB,GAAkB,IAAI,CAAC;IACvC,wBAAwB,GAAY,KAAK,CAAC;IAC1C,oBAAoB,GAAkB,IAAI,CAAC;IAC3C,wBAAwB,GAA+B,IAAI,CAAC;IAC5D,iBAAiB,GAAkB,IAAI,CAAC;IACxC,4BAA4B,GAAkB,IAAI,CAAC;IAElD,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC;IAE7C,YACS,aAAmC,EACnC,eAAuC,EACtC,yBAAoD,EACpD,0BAAsD,EACtD,mBAA0C,EAC1C,gBAA8C,EAC9C,gBAAyC,EACzC,GAAsB;QAE9B,KAAK,EAAE,CAAC;QATD,kBAAa,GAAb,aAAa,CAAsB;QACnC,oBAAe,GAAf,eAAe,CAAwB;QACtC,8BAAyB,GAAzB,yBAAyB,CAA2B;QACpD,+BAA0B,GAA1B,0BAA0B,CAA4B;QACtD,wBAAmB,GAAnB,mBAAmB,CAAuB;QAC1C,qBAAgB,GAAhB,gBAAgB,CAA8B;QAC9C,qBAAgB,GAAhB,gBAAgB,CAAyB;QACzC,QAAG,GAAH,GAAG,CAAmB;IAGhC,CAAC;IAED,4EAA4E;IAC5E,sCAAsC;IACtC,6DAA6D;IAC7D,4EAA4E;IAE5E;;;OAGG;IACH,qBAAqB,CAAC,EAAiB;QACrC,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClF,iEAAiE;QACjE,IAAI,EAAE,EAAE,CAAC;YACP,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QACxC,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,oBAAoB;QAClB,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACnD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACrC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QAErC,sDAAsD;QACtD,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC/C,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,yBAAyB;QACvB,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;IACxC,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,SAAiB;QAC1B,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,sBAAsB,CAAC,cAAsB;QAC3C,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;QAE3C,sDAAsD;QACtD,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC/C,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;;OAGG;IACH;;;;;;OAMG;IACH,KAAK,CAAC,2BAA2B,CAAC,KAAkD;QAClF,IAAI,CAAC;YACH,MAAM,kBAAkB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAChG,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1C,MAAM,YAAY,GAAG,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CACjE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,CAC5C,CAAC;gBACF,IAAI,YAAY,EAAE,CAAC;oBACjB,IAAI,CAAC,sBAAsB,GAAG,YAAY,CAAC,EAAE,CAAC;oBAC9C,IAAI,CAAC,oBAAoB,GAAG,YAAY,CAAC;oBACzC,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;gBACxC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,qBAAqB,CAAC,KAIrB;QACC,IAAI,CAAC;YACH,gEAAgE;YAChE,yEAAyE;YACzE,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC;YACzD,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC,kBAAkB,IAAI,IAAI,CAAC;YACjE,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,YAAY,CAAC;YAC/C,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;YACtC,2EAA2E;QAC7E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,yBAAyB,CAAC,KAAuD;QAC/E,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC;QACvC,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC,WAAW,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAAgB;QAC7B,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,4EAA4E;QAC5E,yEAAyE;QACzE,8FAA8F;QAC9F,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;QACjD,IAAI,CAAC,yBAAyB,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;QAE7D,4CAA4C;QAC5C,sEAAsE;QACtE,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QAEtD,8DAA8D;QAC9D,mDAAmD;QACnD,IAAI,CAAC,gBAAgB,CAAC,0BAA0B;aAC7C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,OAAO,CAAC,EAAE;YACnB,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,gBAAgB,CAAC,yBAAyB;aAC5C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,OAAO,CAAC,EAAE;YACnB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEL,mCAAmC;QACnC,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,kEAAkE;QAClE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAC9B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC,uCAAuC;YAC5E,4EAA4E;YAC5E,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;YACxC,CAAC,EAAE,EAAE,CAAC,CAAC;QACT,CAAC;aAAM,CAAC;YACN,+EAA+E;YAC/E,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACzB,uDAAuD;YACvD,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;YACxC,CAAC,EAAE,EAAE,CAAC,CAAC;QACT,CAAC;QAED,yBAAyB;QACzB,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhE,mCAAmC;QACnC,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEtE,6DAA6D;QAC7D,uEAAuE;QACvE,2CAA2C;QAC3C,IAAI,CAAC;YACH,8FAA8F;YAC9F,yEAAyE;YACzE,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;gBACnC,sBAAsB,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9C,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;YACjG,OAAO,CAAC,GAAG,CAAC,6CAA6C,EACvD,sBAAsB,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAEhF,sEAAsE;YACtE,mEAAmE;YACnE,MAAM,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAElD,qDAAqD;YACrD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;YACxD,kDAAkD;YAClD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC,aAAa,CAAC,YAAY;aAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,MAAM,CAAC,EAAE;YAClB,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC;QACpC,CAAC,CAAC,CAAC;QAEL,kCAAkC;QAClC,IAAI,CAAC,aAAa,CAAC,iBAAiB;aACjC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;YACpB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAC3B,yCAAyC;YACzC,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;gBACpC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;YACrC,CAAC;QACH,CAAC,CAAC,CAAC;QAEL,qCAAqC;QACrC,IAAI,CAAC,aAAa,CAAC,oBAAoB;aACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,aAAa,CAAC,EAAE;YACzB,IAAI,CAAC,mBAAmB,GAAG,aAAa,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEL,uCAAuC;QACvC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACzD,CAAC;QAED,kCAAkC;QAClC,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACrC,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC;QACjC,CAAC;QACD,4EAA4E;QAE5E,6CAA6C;QAC7C,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,qFAAqF;QACrF,cAAc;QACd,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;QAC9B,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;QACvD,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;QAC/C,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;YAC9E,IAAI,CAAC,WAAW,GAAG,kCAAkC,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC,oCAAoC;YACjH,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,mCAAmC,IAAI,CAAC,WAAW,CAAC,EAAE;wBACrD,EAAE,CAAC,UAAU,MAAM,EAAE,CAAC,QAAQ;;iBAErC,IAAI,CAAC,WAAW,CAAC,EAAE;;0BAEV,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,QAAQ,mBAAmB,IAAI,CAAC,WAAW,CAAC,EAAE;;OAErF,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/E,CAAC;IAED,SAAS;QACP,gDAAgD;QAChD,MAAM,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC;QAC/D,IAAI,wBAAwB,KAAK,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAChE,IAAI,CAAC,yBAAyB,GAAG,wBAAwB,CAAC;YAC1D,IAAI,wBAAwB,EAAE,CAAC;gBAC7B,iDAAiD;gBACjD,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;oBAC1B,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;gBACrC,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAC9C,IAAI,SAAS,KAAK,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9C,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;YACxC,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAC/C,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAE5C,6EAA6E;gBAC7E,IAAI,IAAI,CAAC,SAAS,KAAK,eAAe,IAAI,SAAS,EAAE,CAAC;oBACpD,wDAAwD;oBACxD,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;wBAC1B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;4BAC1B,GAAG,EAAE,eAAe;4BACpB,cAAc,EAAE,SAAS;yBAC1B,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,oDAAoD;QACpD,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;YACxC,IAAI,aAAa,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC1C,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;gBACpC,IAAI,aAAa,EAAE,CAAC;oBAClB,wDAAwD;oBACxD,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;wBAC1B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;4BAC1B,GAAG,EAAE,OAAO;4BACZ,MAAM,EAAE,aAAa;yBACtB,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,8EAA8E;IAChF,CAAC;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAEzB,iCAAiC;QACjC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACzC,CAAC;QAED,0BAA0B;QAC1B,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,CAAC;IAGD,cAAc;QACZ,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IAEH,eAAe,CAAC,KAAiB;QAC/B,oDAAoD;QACpD,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACpD,OAAO;QACT,CAAC;QAED,wCAAwC;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;QAC3C,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAE9D,6DAA6D;QAC7D,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,EAAE,CAAC;YACrC,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,eAAe;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;QAE5C,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,6DAA6D;YAC7D,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAC9B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACjC,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,SAAS,EAAE,CAAC;YAC3C,uEAAuE;YACvE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBAChC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,eAAe;QACb,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAChC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa;QACX,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACK,gBAAgB;QACtB,qDAAqD;QACrD,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC,GAAG,EAAE;YACzC,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAClC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,oBAAoB;IAChC,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,wBAAwB;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YAED,MAAM,WAAW,GAAG;gBAClB,SAAS,EAAE,IAAI,CAAC,kBAAkB;gBAClC,MAAM,EAAE,IAAI,CAAC,eAAe;gBAC5B,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;aAC5C,CAAC;YAEF,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC;YACvC,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YAE9B,kDAAkD;YAClD,IAAI,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAEzF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,qBAAqB;gBACrB,OAAO,GAAG,MAAM,EAAE,CAAC,eAAe,CAAsB,mBAAmB,CAAC,CAAC;gBAC7E,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;gBACxB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC;YAClD,CAAC;YAED,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAC5C,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,gDAAgD,EAAE,KAAK,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,gBAAgB;QAC5B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAE9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACpC,IAAI,MAAM,EAAE,CAAC;gBACX,wCAAwC;gBACxC,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC;gBACvC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,wBAAwB,CAAC,CAAC;gBAE3F,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;oBACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBACxC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC;oBAClD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC;oBAE7C,iDAAiD;oBACjD,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,IAAI,KAAK,CAAC,YAAY,IAAI,GAAG,IAAI,KAAK,CAAC,YAAY,IAAI,GAAG,EAAE,CAAC;wBACrG,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;oBACzC,CAAC;oBACD,IAAI,OAAO,KAAK,CAAC,kBAAkB,KAAK,QAAQ,IAAI,KAAK,CAAC,kBAAkB,IAAI,EAAE,IAAI,KAAK,CAAC,kBAAkB,IAAI,EAAE,EAAE,CAAC;wBACrH,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC;oBACrD,CAAC;oBAED,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;oBAC/B,OAAO;gBACT,CAAC;YACH,CAAC;YAED,2CAA2C;YAC3C,gEAAgE;YAChE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACrD,8CAA8C;YAC9C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC/B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACtC,CAAC;IACH,CAAC;IAED,YAAY,CAAC,GAAkB;QAC7B,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAErB,kDAAkD;QAClD,MAAM,QAAQ,GAAQ;YACpB,GAAG,EAAE,GAAgD;SACtD,CAAC;QAEF,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;YAC5B,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,sBAAsB,IAAI,SAAS,CAAC;QACrE,CAAC;aAAM,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;YACjC,wEAAwE;YACxE,IAAI,iBAAiB,EAAE,CAAC;gBACtB,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,uDAAuD;YACzD,CAAC;iBAAM,CAAC;gBACN,qDAAqD;gBACrD,IAAI,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;oBAC5C,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC;gBAClE,CAAC;gBACD,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;oBACpE,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAC3B,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC;QACnD,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEtC,iEAAiE;QACjE,IAAI,GAAG,KAAK,eAAe,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;IAED,aAAa;QACX,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACjD,CAAC;IAED,YAAY;QACV,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC/C,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAChC,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;IACrC,CAAC;IAED,UAAU;QACR,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAChC,CAAC;IAED,WAAW;QACT,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAEzC,iEAAiE;YACjE,MAAM,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAEhE,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC;YAC7D,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,0BAA0B,UAAU,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YACnH,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,+BAA+B,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAClG,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,MAAoB;QACrC,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;QAEvD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,cAAc;gBACjB,sDAAsD;gBACtD,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;gBACjC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBAC1B,GAAG,EAAE,eAAe;oBACpB,cAAc,EAAE,MAAM,CAAC,EAAE;iBAC1B,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,SAAS;gBACZ,6FAA6F;gBAC7F,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;gBACjC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;oBAC1B,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBAClD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;wBAC1B,GAAG,EAAE,eAAe;wBACpB,cAAc,EAAE,MAAM,CAAC,cAAc;wBACrC,sDAAsD;qBACvD,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YAER,KAAK,UAAU;gBACb,8CAA8C;gBAC9C,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC;gBAC/B,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAE3C,8DAA8D;gBAC9D,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,SAAS,CAAC;gBAEtD,uEAAuE;gBACvE,6CAA6C;gBAC7C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBAC1B,GAAG,EAAE,aAAa;oBAClB,YAAY;iBACb,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,YAAY;gBACf,uDAAuD;gBACvD,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC;gBAC/B,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAEpD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBAC1B,GAAG,EAAE,aAAa;oBAClB,YAAY,EAAE,MAAM,CAAC,EAAE;iBACxB,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,MAAM;gBACT,sCAAsC;gBACtC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;gBACzB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBAC1B,GAAG,EAAE,OAAO;oBACZ,MAAM,EAAE,MAAM,CAAC,EAAE;iBAClB,CAAC,CAAC;gBACH,MAAM;QACV,CAAC;QAED,sCAAsC;QACtC,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,KAAiB;QACpC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,YAAY,CAAC;QACjD,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,0BAA0B,CAAC,KAAiB;QAC1C,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACpC,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC,OAAO,CAAC;QAC/C,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAC7D,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;IAC1C,CAAC;IAEO,YAAY,CAAC,KAAiB;QACpC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC;YACxD,IAAI,QAAQ,GAAG,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC;YAErD,oCAAoC;YACpC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;QAC/B,CAAC;aAAM,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAgB,CAAC;YAC9E,IAAI,CAAC,SAAS;gBAAE,OAAO;YAEvB,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,CAAC;YAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC;YAC9D,MAAM,YAAY,GAAG,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,gDAAgD;YACvG,IAAI,QAAQ,GAAG,IAAI,CAAC,6BAA6B,GAAG,YAAY,CAAC;YAEjE,gCAAgC;YAChC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;QACrC,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,KAAiB;QACnC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;YACpC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,8BAA8B;QACzD,CAAC;aAAM,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACxC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;YACrC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;YACpC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,8BAA8B;QACzD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,yBAAyB,CAAC,KAAiB;QACzC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,YAAY,CAAC;QACjD,KAAK,CAAC,cAAc,EAAE,CAAC;IACzB,CAAC;IAED,+BAA+B,CAAC,KAAiB;QAC/C,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC,OAAO,CAAC;QAC/C,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAC7D,KAAK,CAAC,cAAc,EAAE,CAAC;IACzB,CAAC;IAEO,iBAAiB,CAAC,KAAiB;QACzC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC;YACxD,IAAI,QAAQ,GAAG,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC;YAErD,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;QAC/B,CAAC;aAAM,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAgB,CAAC;YAC9E,IAAI,CAAC,SAAS;gBAAE,OAAO;YAEvB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,CAAC;YAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC;YAC9D,MAAM,YAAY,GAAG,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;YACtD,IAAI,QAAQ,GAAG,IAAI,CAAC,6BAA6B,GAAG,YAAY,CAAC;YAEjE,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;QACrC,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,KAAiB;QACxC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,8BAA8B;QACzD,CAAC;aAAM,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACxC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;YACrC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,8BAA8B;QACzD,CAAC;IACH,CAAC;IAED;;OAEG;IACH;;;;;;OAMG;IACH,oBAAoB,CAAC,MAA6C;QAChE,OAAO,CAAC,IAAI,CAAC,2GAA2G,CAAC,CAAC;IAC5H,CAAC;IAED,2BAA2B;QACzB,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClC,4BAA4B;YAC5B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gCAAgC,CAAC;YAChE,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,iDAAiD;YACjD,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAChE,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC;YAC9B,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACvC,CAAC;IACH,CAAC;IAED,qBAAqB,CAAC,KAAkE;QACtF,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;QACzD,iDAAiD;QACjD,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,cAAc,CAAC;QAElD,2CAA2C;QAC3C,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACpC,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAED,kBAAkB,CAAC,KAAuD;QACxE,yCAAyC;QACzC,MAAM,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;QACvE,MAAM,OAAO,GAAsB;YACjC,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,QAAQ,KAAK,CAAC,UAAU,EAAE;YACjC,YAAY,EAAE,QAAQ;YACtB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,UAAU,EAAE,aAAa;YACzB,IAAI,EAAE,MAAM;SACb,CAAC;QACF,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,mBAAmB,CAAC,KAAwB;QAC1C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,2BAA2B,CAAC,KAA6C;QACvE,yCAAyC;QACzC,MAAM,OAAO,GAAsB;YACjC,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,QAAQ,KAAK,CAAC,UAAU,EAAE;YACjC,YAAY,EAAE,QAAQ;YACtB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,UAAU,EAAE,KAAK,CAAC,QAAQ;YAC1B,IAAI,EAAE,MAAM;SACb,CAAC;QACF,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,aAAa,CAAC,IAAkB;QAC9B,6CAA6C;QAC7C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC;QAE7B,yBAAyB;QACzB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC1B,GAAG,EAAE,OAAO;YACZ,MAAM,EAAE,IAAI,CAAC,EAAE;SAChB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,KAAiE;QACrF,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;QAE/C,oCAAoC;QACpC,0FAA0F;QAC1F,6EAA6E;QAC7E,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC;QACzC,CAAC;QACD,+EAA+E;QAE/E,iGAAiG;QACjG,2CAA2C;QAC3C,yGAAyG;QACzG,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAClC,+FAA+F;YAC/F,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;gBAC1B,GAAG,EAAE,aAAa;gBAClB,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,SAAS;gBAC7C,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;aACxC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACjC,sEAAsE;YACtE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;gBAC1B,GAAG,EAAE,aAAa;gBAClB,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,SAAS;aAC9C,CAAC,CAAC;QACL,CAAC;QACD,kEAAkE;QAClE,wDAAwD;IAC1D,CAAC;IAED;;OAEG;IACH,wBAAwB,CAAC,KAAyH;QAChJ,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAExD,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAClC,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;YAEjC,gDAAgD;YAChD,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;YAEnC,6EAA6E;YAC7E,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,UAAU,CAAC;gBAC1C,IAAI,CAAC,4BAA4B,GAAG,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC;gBAChE,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC,UAAU,EAAE,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;YACvF,CAAC;YAED,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAErC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;gBAC1B,GAAG,EAAE,eAAe;gBACpB,cAAc,EAAE,KAAK,CAAC,EAAE;aACzB,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACvC,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC;YAC/B,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAEnD,oEAAoE;YACpE,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;YACzE,CAAC;YAED,4DAA4D;YAC5D,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC;YACzC,CAAC;YAED,qDAAqD;YACrD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;gBAC1B,GAAG,EAAE,aAAa;gBAClB,YAAY,EAAE,KAAK,CAAC,EAAE;gBACtB,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,uBAAuB,CAAC,UAAkB;QACtD,+BAA+B;QAC/B,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;YACpC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;YACnC,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1G,IAAI,CAAC,sBAAsB,GAAG,WAAW,CAAC,QAAQ,CAAC;YACnD,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC,OAAO,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;YAC7D,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;YACpC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,wBAAwB,CAAC,UAAkB;QAC/C,gDAAgD;QAChD,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;QAC9B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,eAAe,CAAmB,eAAe,CAAC,CAAC;QAC7E,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEhC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;YAChC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,yBAAyB;QACvB,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB;QACpB,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,8CAA8C;QAC9C,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,mBAAmB,CAAC,OAA0B;QAC5C,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,OAAyB;QAC1C,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;wHApqCU,8BAA8B;6DAA9B,8BAA8B;YAA9B,qGAAA,oBAAgB,wBAAc,4FAA9B,2BAAuB,0BAAO;;YClE3C,8BAAkH;YAAjC,4HAAmB,gBAAY,IAAC;YAG7G,AADF,8BAAkC,oCASa;YAA3C,AADA,AADA,AADA,+IAAc,wBAAoB,IAAC,oIACjB,mBAAe,IAAC,sIACf,gBAAY,IAAC,wIACZ,yBAAqB,IAAC;YAE9C,AADE,iBAA6B,EACzB;YAGN,gGAAyB;YAOzB,gGAAwB;YAkIxB,0CAKgD;YAA9C,AADA,oHAAS,iBAAa,IAAC,+HACL,8BAA0B,IAAC;YAC/C,iBAAkB;YAGlB,2BAAqB;YAGrB,kDAK4C;YAA1C,AADA,4HAAS,sBAAkB,IAAC,uHACf,+BAA2B,IAAC;YAE7C,AADE,iBAA0B,EACtB;;;YAxKA,eAAuB;YAGvB,AADA,AADA,AADA,yCAAuB,oCACQ,gCACJ,8CACc;YAS7C,cAIC;YAJD,gDAIC;YAGD,cA+HC;YA/HD,+CA+HC;YAIC,cAA4B;YAE5B,AADA,AADA,8CAA4B,oCACG,gCACJ;YAU3B,eAAmC;YAEnC,AADA,AADA,qDAAmC,iCACP,gCACD;;;iFDtGlB,8BAA8B;cAN1C,SAAS;6BACI,KAAK,YACP,2BAA2B;;kBAKpC,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBAGL,KAAK;;kBAML,KAAK;;kBAQL,KAAK;;kBAQL,KAAK;;kBAWL,KAAK;;kBAWL,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBAON,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBAgcN,YAAY;mBAAC,eAAe;;kBAQ5B,YAAY;mBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;kFAzgB/B,8BAA8B","sourcesContent":["/**\n * ============================================================================\n * DEPRECATED - DO NOT USE\n * ============================================================================\n *\n * This workspace component was used when conversations, collections, and tasks\n * were all combined into a single tabbed interface.\n *\n * The new architecture uses SEPARATE resource components for each feature:\n * - ChatConversationsResource for conversations\n * - CollectionsResource for collections\n * - TasksResource for tasks\n *\n * These resource components are located in @memberjunction/ng-explorer-core\n * and integrate with MJExplorer's tab/navigation system.\n *\n * This file is kept for backwards compatibility only. Any new features or\n * bug fixes should be made to the individual resource components instead.\n * ============================================================================\n */\n\nimport {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n DoCheck,\n ChangeDetectorRef,\n HostListener\n} from '@angular/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { MJConversationEntity, MJArtifactEntity, MJTaskEntity, ArtifactMetadataEngine, MJUserSettingEntity, UserInfoEngine, ConversationEngine } from '@memberjunction/core-entities';\nimport { UserInfo, CompositeKey, KeyValuePair, Metadata } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { ArtifactStateService } from '../../services/artifact-state.service';\nimport { CollectionStateService } from '../../services/collection-state.service';\nimport { ArtifactPermissionService } from '../../services/artifact-permission.service';\nimport { MentionAutocompleteService } from '../../services/mention-autocomplete.service';\nimport { ConversationStreamingService } from '../../services/conversation-streaming.service';\nimport { UICommandHandlerService } from '../../services/ui-command-handler.service';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { NavigationTab, WorkspaceLayout } from '../../models/conversation-state.model';\nimport { SearchResult } from '../../services/search.service';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { ActionableCommand, AutomaticCommand } from '@memberjunction/ai-core-plus';\nimport { NavigationRequest } from '@memberjunction/ng-artifacts';\nimport { PendingAttachment } from '../mention/mention-editor.component';\n\n/**\n * Top-level workspace component for conversations\n * Provides 3-column Slack-style layout: Navigation | Sidebar | Chat Area | Artifact Panel\n * Supports context-based navigation (library or task views)\n *\n * @deprecated Use ChatConversationsResource from @memberjunction/ng-explorer-core instead.\n * This component is maintained for backwards compatibility but the resource-wrapper pattern\n * is the preferred approach for MJExplorer integration.\n */\n@Component({\n standalone: false,\n selector: 'mj-conversation-workspace',\n templateUrl: './conversation-workspace.component.html',\n styleUrls: ['./conversation-workspace.component.css']\n})\nexport class ConversationWorkspaceComponent extends BaseAngularComponent implements OnInit, OnDestroy, DoCheck {\n @Input() environmentId!: string;\n @Input() initialConversationId?: string;\n @Input() layout: WorkspaceLayout = 'full';\n @Input() currentUser!: UserInfo;\n @Input() activeContext?: 'library' | 'task';\n @Input() contextItemId?: string;\n\n // Navigation properties for external control (deep linking from URL)\n @Input() set activeTabInput(value: 'conversations' | 'collections' | 'tasks' | undefined) {\n if (value && value !== this.activeTab) {\n this.activeTab = value;\n }\n }\n\n @Input() set activeConversationInput(value: string | undefined) {\n if (value && value !== this.selectedConversationId) {\n console.log('🔗 Deep link to conversation:', value);\n this.activeTab = 'conversations';\n this.setActiveConversation(value);\n }\n }\n\n @Input() set activeCollectionInput(value: string | undefined) {\n if (value && value !== this.collectionState.activeCollectionId) {\n console.log('🔗 Deep link to collection:', value);\n this.activeTab = 'collections';\n this.collectionState.setActiveCollection(value);\n }\n }\n\n @Input() set activeVersionIdInput(value: string | undefined) {\n if (value && value !== this.activeVersionId) {\n console.log('🔗 Deep link to version:', value);\n this.activeTab = 'collections';\n // Store the version ID immediately to prevent ngDoCheck from clearing it\n this.activeVersionId = value;\n // Open artifact by version ID\n this.artifactState.openArtifactByVersionId(value);\n }\n }\n\n @Input() set activeTaskInput(value: string | undefined) {\n if (value && value !== this._activeTaskId) {\n this._activeTaskId = value;\n }\n }\n\n private _activeTaskId?: string;\n get activeTaskId(): string | undefined {\n return this._activeTaskId;\n }\n\n @Output() conversationChanged = new EventEmitter<MJConversationEntity>();\n @Output() artifactOpened = new EventEmitter<MJArtifactEntity>();\n @Output() navigationChanged = new EventEmitter<{\n tab: 'conversations' | 'collections' | 'tasks';\n conversationId?: string;\n collectionId?: string;\n versionId?: string;\n taskId?: string;\n }>();\n @Output() newConversationStarted = new EventEmitter<void>();\n @Output() actionableCommandExecuted = new EventEmitter<ActionableCommand>();\n @Output() automaticCommandExecuted = new EventEmitter<AutomaticCommand>();\n @Output() navigationRequested = new EventEmitter<NavigationRequest>();\n\n public activeTab: NavigationTab = 'conversations';\n public isSidebarVisible: boolean = true;\n public isArtifactPanelOpen: boolean = false;\n public isSearchPanelOpen: boolean = false;\n public isWorkspaceReady: boolean = false;\n public renamedConversationId: string | null = null;\n public activeArtifactId: string | null = null;\n public activeVersionNumber: number | null = null;\n public activeVersionId: string | null = null;\n public isMobileView: boolean = false;\n public isSidebarPinned: boolean = false; // Default unpinned until settings load (prevents flicker)\n\n // Artifact permissions\n public canShareActiveArtifact: boolean = false;\n public canEditActiveArtifact: boolean = false;\n\n // Share modal state\n public isArtifactShareModalOpen: boolean = false;\n public artifactToShare: MJArtifactEntity | null = null;\n\n // Resize state - Sidebar\n public sidebarWidth: number = 260; // Default width\n public isSidebarCollapsed: boolean = true; // Default collapsed until settings load (prevents flicker)\n public sidebarTransitionsEnabled: boolean = false; // Disabled during initial load to prevent jarring animation\n public isSidebarSettingsLoaded: boolean = false; // Tracks whether settings have been loaded (prevents render before state is known)\n private isSidebarResizing: boolean = false;\n private sidebarResizeStartX: number = 0;\n private sidebarResizeStartWidth: number = 0;\n\n // Resize state - Artifact Panel\n public artifactPanelWidth: number = 40; // Default 40% width\n public isArtifactPanelMaximized: boolean = false;\n private artifactPanelWidthBeforeMaximize: number = 40; // Store width before maximizing\n private isArtifactPanelResizing: boolean = false;\n private artifactPanelResizeStartX: number = 0;\n private artifactPanelResizeStartWidth: number = 0;\n\n private previousConversationId: string | null = null;\n private previousTaskId: string | undefined = undefined;\n private previousVersionId: string | null = null; // Used to track version changes in ngDoCheck\n private previousIsNewConversation: boolean = false; // Track new conversation state changes\n private destroy$ = new Subject<void>();\n\n // User Settings key for server-side persistence\n private readonly USER_SETTING_SIDEBAR_KEY = 'Conversations.SidebarState';\n private saveSettingsTimeout: ReturnType<typeof setTimeout> | null = null;\n private isLoadingSettings: boolean = false;\n\n // Task filter for conversation-specific filtering\n public tasksFilter: string = '1=1';\n\n // LOCAL CONVERSATION STATE - enables multiple workspace instances\n // Each workspace manages its own selection state independently\n public selectedConversationId: string | null = null;\n public selectedConversation: MJConversationEntity | null = null;\n public selectedThreadId: string | null = null;\n public isNewUnsavedConversation: boolean = false;\n public pendingMessageToSend: string | null = null;\n public pendingAttachmentsToSend: PendingAttachment[] | null = null;\n public pendingArtifactId: string | null = null;\n public pendingArtifactVersionNumber: number | null = null;\n\n private engine = ConversationEngine.Instance;\n\n constructor(\n public artifactState: ArtifactStateService,\n public collectionState: CollectionStateService,\n private artifactPermissionService: ArtifactPermissionService,\n private mentionAutocompleteService: MentionAutocompleteService,\n private notificationService: MJNotificationService,\n private streamingService: ConversationStreamingService,\n private uiCommandHandler: UICommandHandlerService,\n private cdr: ChangeDetectorRef\n ) {\n super();\n }\n\n // =========================================================================\n // LOCAL CONVERSATION STATE MANAGEMENT\n // These methods manage the workspace's local selection state\n // =========================================================================\n\n /**\n * Sets the active conversation for this workspace instance\n * @param id The conversation ID to activate (or null to clear)\n */\n setActiveConversation(id: string | null): void {\n console.log('🎯 Setting active conversation:', id);\n this.selectedConversationId = id;\n this.selectedConversation = id ? (this.engine.GetConversation(id) ?? null) : null;\n // Clear unsaved state when switching to an existing conversation\n if (id) {\n this.isNewUnsavedConversation = false;\n }\n }\n\n /**\n * Initiates a new unsaved conversation (doesn't create DB record yet)\n * This shows the welcome screen and delays DB creation until first message\n */\n startNewConversation(): void {\n console.log('✨ Starting new unsaved conversation');\n this.selectedConversationId = null;\n this.selectedConversation = null;\n this.isNewUnsavedConversation = true;\n this.pendingMessageToSend = null;\n this.pendingAttachmentsToSend = null;\n\n // Auto-collapse if mobile OR if sidebar is not pinned\n if (this.isMobileView || !this.isSidebarPinned) {\n this.collapseSidebar();\n }\n }\n\n /**\n * Clears the new unsaved conversation state\n * Called when the conversation is actually created or cancelled\n */\n clearNewConversationState(): void {\n this.isNewUnsavedConversation = false;\n }\n\n /**\n * Opens a thread panel for a specific message\n * @param messageId The parent message ID\n */\n openThread(messageId: string): void {\n this.selectedThreadId = messageId;\n }\n\n /**\n * Closes the currently open thread panel\n */\n closeThread(): void {\n this.selectedThreadId = null;\n }\n\n /**\n * Handler for conversation selection from sidebar/list\n */\n onConversationSelected(conversationId: string): void {\n this.setActiveConversation(conversationId);\n\n // Auto-collapse if mobile OR if sidebar is not pinned\n if (this.isMobileView || !this.isSidebarPinned) {\n this.collapseSidebar();\n }\n }\n\n /**\n * Handler for new conversation creation from chat area\n * Now includes pending message and attachments to ensure atomic state update\n */\n /**\n * A realtime session created (and just finished with) a brand-new conversation. The\n * row was created SERVER-side, so it isn't in the engine cache yet — reload the list\n * to fold it in, then select it ONLY when the conversation list is visible (owner\n * spec: the user may have the sidebar hidden; don't yank their context if so —\n * the refreshed cache makes it appear whenever the list is reopened).\n */\n async onRealtimeConversationReady(event: { conversationId: string; select: boolean }): Promise<void> {\n try {\n await ConversationEngine.Instance.LoadConversations(this.environmentId, this.currentUser, true);\n if (event.select && this.isSidebarVisible) {\n const conversation = ConversationEngine.Instance.Conversations.find(\n c => UUIDsEqual(c.ID, event.conversationId)\n );\n if (conversation) {\n this.selectedConversationId = conversation.ID;\n this.selectedConversation = conversation;\n this.isNewUnsavedConversation = false;\n }\n }\n } catch (error) {\n console.error('onRealtimeConversationReady ERROR:', error);\n }\n }\n\n onConversationCreated(event: {\n conversation: MJConversationEntity;\n pendingMessage?: string;\n pendingAttachments?: PendingAttachment[];\n }): void {\n try {\n // Set ALL state atomically before Angular change detection runs\n // This ensures the new message-input component receives the pending data\n this.pendingMessageToSend = event.pendingMessage || null;\n this.pendingAttachmentsToSend = event.pendingAttachments || null;\n this.selectedConversationId = event.conversation.ID;\n this.selectedConversation = event.conversation;\n this.isNewUnsavedConversation = false;\n // The conversation is already added to ConversationEngine by the chat area\n } catch (error) {\n console.error('onConversationCreated ERROR:', error);\n }\n }\n\n /**\n * Handler for pending message requested from chat area (empty state)\n * @deprecated Use onConversationCreated with pendingMessage instead\n */\n onPendingMessageRequested(event: {text: string; attachments: PendingAttachment[]}): void {\n this.pendingMessageToSend = event.text;\n this.pendingAttachmentsToSend = event.attachments;\n }\n\n /**\n * Handler for thread opened from chat area\n */\n onThreadOpened(threadId: string): void {\n this.selectedThreadId = threadId;\n }\n\n /**\n * Handler for thread closed from chat area\n */\n onThreadClosed(): void {\n this.selectedThreadId = null;\n }\n\n async ngOnInit() {\n // Bind provider-aware services to this component's provider so multi-server\n // browser apps don't silently fall back to the global Metadata.Provider.\n // ArtifactStateService cascades to ArtifactPermissionService and CollectionPermissionService.\n this.artifactState.Provider = this.ProviderToUse;\n this.artifactPermissionService.Provider = this.ProviderToUse;\n\n // Initialize global streaming service FIRST\n // This establishes the single PubSub connection for all conversations\n this.streamingService.initialize();\n console.log('✅ Global streaming service initialized');\n\n // Subscribe to command events from UI Command Handler service\n // These will be bubbled up to the host application\n this.uiCommandHandler.actionableCommandRequested\n .pipe(takeUntil(this.destroy$))\n .subscribe(command => {\n this.onActionableCommand(command);\n });\n\n this.uiCommandHandler.automaticCommandRequested\n .pipe(takeUntil(this.destroy$))\n .subscribe(command => {\n this.onAutomaticCommand(command);\n });\n\n // Check initial mobile state FIRST\n this.checkMobileView();\n\n // Load sidebar state - but on mobile, always default to collapsed\n if (this.isMobileView) {\n this.isSidebarCollapsed = true;\n this.isSidebarVisible = false;\n this.isSidebarSettingsLoaded = true; // Mobile doesn't need to load settings\n // Enable transitions after a brief delay to ensure initial state is applied\n setTimeout(() => {\n this.sidebarTransitionsEnabled = true;\n }, 50);\n } else {\n // Load from User Settings (async) - await before continuing to prevent flicker\n await this.loadSidebarState();\n this.cdr.detectChanges();\n // Enable transitions after state is loaded and applied\n setTimeout(() => {\n this.sidebarTransitionsEnabled = true;\n }, 50);\n }\n\n // Setup resize listeners\n window.addEventListener('mousemove', this.onResizeMove.bind(this));\n window.addEventListener('mouseup', this.onResizeEnd.bind(this));\n\n // Setup touch listeners for mobile\n window.addEventListener('touchmove', this.onResizeTouchMove.bind(this));\n window.addEventListener('touchend', this.onResizeTouchEnd.bind(this));\n\n // CRITICAL: Initialize engines FIRST before rendering any UI\n // The isWorkspaceReady flag blocks all child components from rendering\n // until engines are fully loaded and ready\n try {\n // Load both engines in parallel - ArtifactMetadataEngine is lightweight (just artifact types)\n // Using Promise.all ensures optimal performance with no additional delay\n await Promise.all([\n AIEngineBase.Instance.Config(false),\n ArtifactMetadataEngine.Instance.Config(false)\n ]);\n\n console.log('✅ AI Engine initialized with', AIEngineBase.Instance.Agents?.length || 0, 'agents');\n console.log('✅ Artifact Metadata Engine initialized with',\n ArtifactMetadataEngine.Instance.ArtifactTypes?.length || 0, 'artifact types');\n\n // Initialize mention autocomplete service immediately after AI engine\n // This ensures the cache is built from the fully-loaded agent list\n await this.mentionAutocompleteService.initialize(this.currentUser);\n console.log('✅ Mention autocomplete initialized');\n\n // Mark workspace as ready - this allows UI to render\n this.isWorkspaceReady = true;\n this.cdr.detectChanges();\n } catch (error) {\n console.error('❌ Failed to initialize engines:', error);\n // Still mark as ready so UI isn't blocked forever\n this.isWorkspaceReady = true;\n this.cdr.detectChanges();\n }\n\n // Subscribe to artifact panel state\n this.artifactState.isPanelOpen$\n .pipe(takeUntil(this.destroy$))\n .subscribe(isOpen => {\n this.isArtifactPanelOpen = isOpen;\n });\n\n // Subscribe to active artifact ID\n this.artifactState.activeArtifactId$\n .pipe(takeUntil(this.destroy$))\n .subscribe(async id => {\n this.activeArtifactId = id;\n // Load permissions when artifact changes\n if (id) {\n await this.loadArtifactPermissions(id);\n } else {\n this.canShareActiveArtifact = false;\n this.canEditActiveArtifact = false;\n }\n });\n\n // Subscribe to active version number\n this.artifactState.activeVersionNumber$\n .pipe(takeUntil(this.destroy$))\n .subscribe(versionNumber => {\n this.activeVersionNumber = versionNumber;\n });\n\n // Set initial conversation if provided\n if (this.initialConversationId) {\n this.setActiveConversation(this.initialConversationId);\n }\n\n // Handle context-based navigation\n if (this.activeContext === 'library') {\n this.activeTab = 'collections';\n }\n // Task context will be handled by chat header dropdown, not navigation tabs\n\n // Build task filter for conversations domain\n this.buildTasksFilter();\n }\n\n /**\n * Builds the SQL filter for tasks in conversations the user has access to\n */\n private buildTasksFilter(): void {\n // Filter tasks by conversations the user owns or is a participant in, or tasks owned\n // by the user\n const md = this.ProviderToUse;\n const cd = md.EntityByName('MJ: Conversation Details');\n const c = md.EntityByName('MJ: Conversations');\n if (!cd || !c) {\n console.warn('⚠️ Missing metadata for Conversations or Conversation Details');\n this.tasksFilter = `ParentID IS NULL AND UserID = '${this.currentUser.ID}'`; // Fallback to user-owned tasks only\n return;\n }\n\n this.tasksFilter = `ParentID IS NULL AND (UserID = '${this.currentUser.ID}' OR ConversationDetailID IN (\n SELECT ID FROM [${cd.SchemaName}].[${cd.BaseView}] \n WHERE \n UserID ='${this.currentUser.ID}' OR \n ConversationID IN (\n SELECT ID FROM [${c.SchemaName}].[${c.BaseView}] WHERE UserID='${this.currentUser.ID}'\n )\n ))`;\n console.log('📝 Conversations domain tasks filter built:', this.tasksFilter);\n }\n\n ngDoCheck() {\n // Detect new unsaved conversation state changes\n const currentIsNewConversation = this.isNewUnsavedConversation;\n if (currentIsNewConversation !== this.previousIsNewConversation) {\n this.previousIsNewConversation = currentIsNewConversation;\n if (currentIsNewConversation) {\n // Emit event to clear URL conversation parameter\n Promise.resolve().then(() => {\n this.newConversationStarted.emit();\n });\n }\n }\n\n // Detect conversation changes and emit event\n const currentId = this.selectedConversationId;\n if (currentId !== this.previousConversationId) {\n this.previousConversationId = currentId;\n const conversation = this.selectedConversation;\n if (conversation) {\n this.conversationChanged.emit(conversation);\n\n // Also emit navigationChanged for URL updates (only if on conversations tab)\n if (this.activeTab === 'conversations' && currentId) {\n // Defer emission until after change detection completes\n Promise.resolve().then(() => {\n this.navigationChanged.emit({\n tab: 'conversations',\n conversationId: currentId\n });\n });\n }\n }\n }\n\n // Detect task selection changes (when on tasks tab)\n if (this.activeTab === 'tasks') {\n const currentTaskId = this.activeTaskId;\n if (currentTaskId !== this.previousTaskId) {\n this.previousTaskId = currentTaskId;\n if (currentTaskId) {\n // Defer emission until after change detection completes\n Promise.resolve().then(() => {\n this.navigationChanged.emit({\n tab: 'tasks',\n taskId: currentTaskId\n });\n });\n }\n }\n }\n\n // Version changes are handled by onCollectionNavigated and deep link inputs\n // We don't need ngDoCheck to track them as it causes double navigation events\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n\n // Clear any pending save timeout\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n }\n\n // Remove resize listeners\n window.removeEventListener('mousemove', this.onResizeMove.bind(this));\n window.removeEventListener('mouseup', this.onResizeEnd.bind(this));\n window.removeEventListener('touchmove', this.onResizeTouchMove.bind(this));\n window.removeEventListener('touchend', this.onResizeTouchEnd.bind(this));\n }\n\n @HostListener('window:resize')\n onWindowResize(): void {\n this.checkMobileView();\n }\n\n /**\n * Handle clicks outside the sidebar to auto-collapse when unpinned\n */\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n // Only handle when sidebar is expanded but unpinned\n if (this.isSidebarCollapsed || this.isSidebarPinned) {\n return;\n }\n\n // Check if click is outside the sidebar\n const target = event.target as HTMLElement;\n const sidebarElement = target.closest('.workspace-sidebar');\n const expandHandle = target.closest('.sidebar-expand-handle');\n\n // If click is outside sidebar and expand handle, collapse it\n if (!sidebarElement && !expandHandle) {\n this.collapseSidebar();\n }\n }\n\n private checkMobileView(): void {\n const wasMobile = this.isMobileView;\n this.isMobileView = window.innerWidth < 768;\n\n if (this.isMobileView && !wasMobile) {\n // Switched to mobile - hide sidebar and default to collapsed\n this.isSidebarVisible = false;\n this.isSidebarCollapsed = true;\n } else if (!this.isMobileView && wasMobile) {\n // Switched to desktop - show sidebar, restore state from User Settings\n this.isSidebarVisible = true;\n this.loadSidebarState().then(() => {\n this.cdr.detectChanges();\n });\n }\n }\n\n /**\n * Collapse sidebar\n */\n collapseSidebar(): void {\n this.isSidebarCollapsed = true;\n if (this.isMobileView) {\n this.isSidebarVisible = false;\n }\n }\n\n /**\n * Expand sidebar (unpinned - will auto-collapse on selection)\n */\n expandSidebar(): void {\n this.isSidebarCollapsed = false;\n this.isSidebarPinned = false;\n }\n\n /**\n * Pin sidebar - keep it open after selection\n */\n pinSidebar(): void {\n this.isSidebarPinned = true;\n this.saveSidebarState();\n }\n\n /**\n * Unpin sidebar - will auto-collapse on next selection\n */\n unpinSidebar(): void {\n this.isSidebarPinned = false;\n this.collapseSidebar();\n this.saveSidebarState();\n }\n\n /**\n * Save sidebar state to User Settings (server)\n * Uses debouncing to avoid excessive database writes\n */\n private saveSidebarState(): void {\n // Debounce the server save to avoid excessive writes\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n }\n this.saveSettingsTimeout = setTimeout(() => {\n this.saveSidebarStateToServer();\n }, 1000); // 1 second debounce\n }\n\n /**\n * Save sidebar state to User Settings entity on server using UserInfoEngine for cached lookup\n * Includes collapsed, pinned, sidebarWidth, and artifactPanelWidth\n */\n private async saveSidebarStateToServer(): Promise<void> {\n try {\n const userId = this.currentUser?.ID;\n if (!userId) {\n return;\n }\n\n const stateToSave = {\n collapsed: this.isSidebarCollapsed,\n pinned: this.isSidebarPinned,\n sidebarWidth: this.sidebarWidth,\n artifactPanelWidth: this.artifactPanelWidth\n };\n\n const engine = UserInfoEngine.Instance;\n const md = this.ProviderToUse;\n\n // Find existing setting from cached user settings\n let setting = engine.UserSettings.find(s => s.Setting === this.USER_SETTING_SIDEBAR_KEY);\n\n if (!setting) {\n // Create new setting\n setting = await md.GetEntityObject<MJUserSettingEntity>('MJ: User Settings');\n setting.UserID = userId;\n setting.Setting = this.USER_SETTING_SIDEBAR_KEY;\n }\n\n setting.Value = JSON.stringify(stateToSave);\n await setting.Save();\n } catch (error) {\n console.warn('Failed to save sidebar state to User Settings:', error);\n }\n }\n\n /**\n * Load sidebar state from User Settings (server) using UserInfoEngine\n * Includes collapsed, pinned, sidebarWidth, and artifactPanelWidth\n * For new users with no saved state, defaults to collapsed with new conversation\n */\n private async loadSidebarState(): Promise<void> {\n this.isLoadingSettings = true;\n\n try {\n const userId = this.currentUser?.ID;\n if (userId) {\n // Try loading from cached User Settings\n const engine = UserInfoEngine.Instance;\n const setting = engine.UserSettings.find(s => s.Setting === this.USER_SETTING_SIDEBAR_KEY);\n\n if (setting?.Value) {\n const state = JSON.parse(setting.Value);\n this.isSidebarCollapsed = state.collapsed ?? true;\n this.isSidebarPinned = state.pinned ?? false;\n\n // Load width values if present (with validation)\n if (typeof state.sidebarWidth === 'number' && state.sidebarWidth >= 200 && state.sidebarWidth <= 500) {\n this.sidebarWidth = state.sidebarWidth;\n }\n if (typeof state.artifactPanelWidth === 'number' && state.artifactPanelWidth >= 20 && state.artifactPanelWidth <= 70) {\n this.artifactPanelWidth = state.artifactPanelWidth;\n }\n\n this.isLoadingSettings = false;\n return;\n }\n }\n\n // No saved state found - NEW USER DEFAULT:\n // Start with sidebar collapsed and show new conversation screen\n this.isSidebarCollapsed = true;\n this.isSidebarPinned = false;\n this.isNewUnsavedConversation = true;\n } catch (error) {\n console.warn('Failed to load sidebar state:', error);\n // Default to collapsed for new users on error\n this.isSidebarCollapsed = true;\n this.isSidebarPinned = false;\n } finally {\n this.isLoadingSettings = false;\n this.isSidebarSettingsLoaded = true;\n }\n }\n\n onTabChanged(tab: NavigationTab): void {\n const wasOnDifferentTab = this.activeTab !== tab;\n this.activeTab = tab;\n\n // Emit navigation change event with current state\n const navEvent: any = {\n tab: tab as 'conversations' | 'collections' | 'tasks'\n };\n\n if (tab === 'conversations') {\n navEvent.conversationId = this.selectedConversationId || undefined;\n } else if (tab === 'collections') {\n // If switching TO collections tab from another tab, clear to root level\n if (wasOnDifferentTab) {\n this.collectionState.setActiveCollection(null);\n this.activeVersionId = null;\n // Don't include collectionId or versionId - go to root\n } else {\n // Already on collections tab, preserve current state\n if (this.collectionState.activeCollectionId) {\n navEvent.collectionId = this.collectionState.activeCollectionId;\n }\n if (this.activeVersionId && this.collectionState.activeCollectionId) {\n navEvent.versionId = this.activeVersionId;\n }\n }\n } else if (tab === 'tasks') {\n navEvent.taskId = this.activeTaskId || undefined;\n }\n\n this.navigationChanged.emit(navEvent);\n\n // Auto-close artifact panel when switching away from collections\n if (tab === 'conversations' || tab === 'tasks') {\n this.artifactState.closeArtifact();\n }\n }\n\n toggleSidebar(): void {\n this.isSidebarVisible = !this.isSidebarVisible;\n }\n\n closeSidebar(): void {\n if (this.isMobileView && this.isSidebarVisible) {\n this.isSidebarVisible = false;\n }\n }\n\n closeArtifactPanel(): void {\n this.artifactState.closeArtifact();\n }\n\n openSearch(): void {\n this.isSearchPanelOpen = true;\n }\n\n closeSearch(): void {\n this.isSearchPanelOpen = false;\n }\n\n async onRefreshAgentCache(): Promise<void> {\n try {\n await AIEngineBase.Instance.Config(true);\n\n // Refresh the mention autocomplete service to pick up new agents\n await this.mentionAutocompleteService.refresh(this.currentUser);\n\n const agentCount = AIEngineBase.Instance.Agents?.length || 0;\n this.notificationService.CreateSimpleNotification(`Agent cache refreshed (${agentCount} agents)`, 'success', 3000);\n this.cdr.detectChanges();\n } catch (error) {\n this.notificationService.CreateSimpleNotification('Failed to refresh agent cache', 'error', 3000);\n console.error('Failed to refresh AI Engine:', error);\n }\n }\n\n handleSearchResult(result: SearchResult): void {\n console.log('🔍 Navigating to search result:', result);\n\n switch (result.type) {\n case 'conversation':\n // Switch to conversations tab and select conversation\n this.activeTab = 'conversations';\n this.setActiveConversation(result.id);\n this.navigationChanged.emit({\n tab: 'conversations',\n conversationId: result.id\n });\n break;\n\n case 'message':\n // Switch to conversations tab, open conversation, and scroll to message (future enhancement)\n this.activeTab = 'conversations';\n if (result.conversationId) {\n this.setActiveConversation(result.conversationId);\n this.navigationChanged.emit({\n tab: 'conversations',\n conversationId: result.conversationId\n // TODO: Add messageId for scroll-to support in future\n });\n }\n break;\n\n case 'artifact':\n // Switch to collections tab and open artifact\n this.activeTab = 'collections';\n this.artifactState.openArtifact(result.id);\n\n // If artifact is in a collection, navigate to that collection\n const collectionId = result.collectionId || undefined;\n\n // Search results don't have version ID, so just navigate to collection\n // The artifact will open with latest version\n this.navigationChanged.emit({\n tab: 'collections',\n collectionId\n });\n break;\n\n case 'collection':\n // Switch to collections tab and navigate to collection\n this.activeTab = 'collections';\n this.collectionState.setActiveCollection(result.id);\n\n this.navigationChanged.emit({\n tab: 'collections',\n collectionId: result.id\n });\n break;\n\n case 'task':\n // Switch to tasks tab and select task\n this.activeTab = 'tasks';\n this._activeTaskId = result.id;\n this.navigationChanged.emit({\n tab: 'tasks',\n taskId: result.id\n });\n break;\n }\n\n // Close search panel after navigation\n this.closeSearch();\n }\n\n /**\n * Sidebar resize methods\n */\n onSidebarResizeStart(event: MouseEvent): void {\n this.isSidebarResizing = true;\n this.sidebarResizeStartX = event.clientX;\n this.sidebarResizeStartWidth = this.sidebarWidth;\n event.preventDefault();\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n /**\n * Artifact panel resize methods\n */\n onArtifactPanelResizeStart(event: MouseEvent): void {\n this.isArtifactPanelResizing = true;\n this.artifactPanelResizeStartX = event.clientX;\n this.artifactPanelResizeStartWidth = this.artifactPanelWidth;\n event.preventDefault();\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n private onResizeMove(event: MouseEvent): void {\n if (this.isSidebarResizing) {\n const deltaX = event.clientX - this.sidebarResizeStartX;\n let newWidth = this.sidebarResizeStartWidth + deltaX;\n\n // Constrain between 200px and 500px\n newWidth = Math.max(200, Math.min(500, newWidth));\n this.sidebarWidth = newWidth;\n } else if (this.isArtifactPanelResizing) {\n const container = document.querySelector('.workspace-content') as HTMLElement;\n if (!container) return;\n\n const containerWidth = container.offsetWidth;\n const deltaX = event.clientX - this.artifactPanelResizeStartX;\n const deltaPercent = (deltaX / containerWidth) * -100; // Negative because we're pulling from the right\n let newWidth = this.artifactPanelResizeStartWidth + deltaPercent;\n\n // Constrain between 20% and 70%\n newWidth = Math.max(20, Math.min(70, newWidth));\n this.artifactPanelWidth = newWidth;\n }\n }\n\n private onResizeEnd(event: MouseEvent): void {\n if (this.isSidebarResizing) {\n this.isSidebarResizing = false;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.saveSidebarState(); // Save width to User Settings\n } else if (this.isArtifactPanelResizing) {\n this.isArtifactPanelResizing = false;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.saveSidebarState(); // Save width to User Settings\n }\n }\n\n /**\n * Touch event handlers for mobile resize support\n */\n onSidebarResizeTouchStart(event: TouchEvent): void {\n this.isSidebarResizing = true;\n const touch = event.touches[0];\n this.sidebarResizeStartX = touch.clientX;\n this.sidebarResizeStartWidth = this.sidebarWidth;\n event.preventDefault();\n }\n\n onArtifactPanelResizeTouchStart(event: TouchEvent): void {\n this.isArtifactPanelResizing = true;\n const touch = event.touches[0];\n this.artifactPanelResizeStartX = touch.clientX;\n this.artifactPanelResizeStartWidth = this.artifactPanelWidth;\n event.preventDefault();\n }\n\n private onResizeTouchMove(event: TouchEvent): void {\n if (this.isSidebarResizing) {\n const touch = event.touches[0];\n const deltaX = touch.clientX - this.sidebarResizeStartX;\n let newWidth = this.sidebarResizeStartWidth + deltaX;\n\n newWidth = Math.max(200, Math.min(500, newWidth));\n this.sidebarWidth = newWidth;\n } else if (this.isArtifactPanelResizing) {\n const container = document.querySelector('.workspace-content') as HTMLElement;\n if (!container) return;\n\n const touch = event.touches[0];\n const containerWidth = container.offsetWidth;\n const deltaX = touch.clientX - this.artifactPanelResizeStartX;\n const deltaPercent = (deltaX / containerWidth) * -100;\n let newWidth = this.artifactPanelResizeStartWidth + deltaPercent;\n\n newWidth = Math.max(20, Math.min(70, newWidth));\n this.artifactPanelWidth = newWidth;\n }\n }\n\n private onResizeTouchEnd(event: TouchEvent): void {\n if (this.isSidebarResizing) {\n this.isSidebarResizing = false;\n this.saveSidebarState(); // Save width to User Settings\n } else if (this.isArtifactPanelResizing) {\n this.isArtifactPanelResizing = false;\n this.saveSidebarState(); // Save width to User Settings\n }\n }\n\n /**\n * Toggle maximize/restore state for artifact panel\n */\n /**\n * Apply-to-my-form handler. This deprecated workspace component is no\n * longer the live chat surface — the real handler lives on\n * ConversationChatAreaComponent. This stub exists only so the template\n * binding compiles. New consumers should use the resource components in\n * @memberjunction/ng-explorer-core instead of this workspace.\n */\n onApplyFormRequested(_event: { spec: unknown; entityName: string }): void {\n console.warn('Workspace.onApplyFormRequested: workspace is deprecated; use the per-feature resource components instead.');\n }\n\n toggleMaximizeArtifactPanel(): void {\n if (this.isArtifactPanelMaximized) {\n // Restore to previous width\n this.artifactPanelWidth = this.artifactPanelWidthBeforeMaximize;\n this.isArtifactPanelMaximized = false;\n } else {\n // Maximize - store current width and set to 100%\n this.artifactPanelWidthBeforeMaximize = this.artifactPanelWidth;\n this.artifactPanelWidth = 100;\n this.isArtifactPanelMaximized = true;\n }\n }\n\n onConversationRenamed(event: {conversationId: string; name: string; description: string}): void {\n console.log('✨ Workspace received rename event:', event);\n // Trigger animation in sidebar by setting the ID\n this.renamedConversationId = event.conversationId;\n\n // Clear after animation completes (1500ms)\n setTimeout(() => {\n this.renamedConversationId = null;\n }, 1500);\n }\n\n onOpenEntityRecord(event: {entityName: string; compositeKey: CompositeKey}): void {\n // Convert to actionable command and emit\n const firstKeyValue = event.compositeKey.KeyValuePairs[0]?.Value || '';\n const command: ActionableCommand = {\n type: 'open:resource',\n label: `Open ${event.entityName}`,\n resourceType: 'Record',\n entityName: event.entityName,\n resourceId: firstKeyValue,\n mode: 'view'\n };\n this.actionableCommandExecuted.emit(command);\n }\n\n onNavigationRequest(event: NavigationRequest): void {\n this.navigationRequested.emit(event);\n }\n\n onOpenEntityRecordFromTasks(event: {entityName: string; recordId: string}): void {\n // Convert to actionable command and emit\n const command: ActionableCommand = {\n type: 'open:resource',\n label: `Open ${event.entityName}`,\n resourceType: 'Record',\n entityName: event.entityName,\n resourceId: event.recordId,\n mode: 'view'\n };\n this.actionableCommandExecuted.emit(command);\n }\n\n onTaskClicked(task: MJTaskEntity): void {\n // Switch to Tasks tab and set active task ID\n this.activeTab = 'tasks';\n this._activeTaskId = task.ID;\n\n // Emit navigation change\n this.navigationChanged.emit({\n tab: 'tasks',\n taskId: task.ID\n });\n }\n\n /**\n * Handle collection navigation events\n */\n onCollectionNavigated(event: { collectionId: string | null; versionId?: string | null }): void {\n console.log('📁 Collection navigated:', event);\n\n // Store the version ID for URL sync\n // CRITICAL: Only update activeVersionId if versionId was explicitly provided in the event\n // If versionId is undefined (not provided), keep the current activeVersionId\n if (event.versionId !== undefined) {\n this.activeVersionId = event.versionId;\n }\n // Otherwise: versionId not provided in event, preserve current activeVersionId\n\n // IMPORTANT: Don't emit navigationChanged here when doing programmatic navigation (deep linking)\n // The artifact state is managed separately\n // Only emit if the event explicitly includes a versionId, or if we're intentionally closing the artifact\n if (event.versionId !== undefined) {\n // Event explicitly specifies artifact state (user clicked artifact or intentionally closed it)\n this.navigationChanged.emit({\n tab: 'collections',\n collectionId: event.collectionId || undefined,\n versionId: event.versionId || undefined\n });\n } else if (!this.activeVersionId) {\n // No artifact currently open, safe to emit collection-only navigation\n this.navigationChanged.emit({\n tab: 'collections',\n collectionId: event.collectionId || undefined\n });\n }\n // Otherwise: artifact is open but event doesn't specify versionId\n // Don't emit - preserve current URL state with artifact\n }\n\n /**\n * Handle navigation from artifact links\n */\n onArtifactLinkNavigation(event: {type: 'conversation' | 'collection'; id: string; artifactId?: string; versionNumber?: number; versionId?: string}): void {\n console.log('🔗 Navigating from artifact link:', event);\n\n if (event.type === 'conversation') {\n this.activeTab = 'conversations';\n\n // Close collection artifact viewer if it's open\n this.artifactState.closeArtifact();\n\n // Store pending artifact info so chat area can show it and scroll to message\n if (event.artifactId) {\n this.pendingArtifactId = event.artifactId;\n this.pendingArtifactVersionNumber = event.versionNumber || null;\n console.log('📦 Pending artifact set:', event.artifactId, 'v' + event.versionNumber);\n }\n\n this.setActiveConversation(event.id);\n\n this.navigationChanged.emit({\n tab: 'conversations',\n conversationId: event.id\n });\n } else if (event.type === 'collection') {\n this.activeTab = 'collections';\n this.collectionState.setActiveCollection(event.id);\n\n // Open the artifact automatically when navigating to the collection\n if (event.artifactId) {\n this.artifactState.openArtifact(event.artifactId, event.versionNumber);\n }\n\n // Store version ID for URL sync (same as viewArtifact does)\n if (event.versionId) {\n this.activeVersionId = event.versionId;\n }\n\n // Emit navigation with version ID so URL includes it\n this.navigationChanged.emit({\n tab: 'collections',\n collectionId: event.id,\n versionId: event.versionId\n });\n }\n }\n\n /**\n * Load permissions for the given artifact\n */\n private async loadArtifactPermissions(artifactId: string): Promise<void> {\n // Guard against null/undefined\n if (!artifactId) {\n this.canShareActiveArtifact = false;\n this.canEditActiveArtifact = false;\n return;\n }\n\n try {\n const permissions = await this.artifactPermissionService.getUserPermissions(artifactId, this.currentUser);\n this.canShareActiveArtifact = permissions.canShare;\n this.canEditActiveArtifact = permissions.canEdit;\n } catch (error) {\n console.error('Failed to load artifact permissions:', error);\n this.canShareActiveArtifact = false;\n this.canEditActiveArtifact = false;\n }\n }\n\n /**\n * Handle share request from artifact viewer\n */\n async onArtifactShareRequested(artifactId: string): Promise<void> {\n // Load the artifact entity to pass to the modal\n const md = this.ProviderToUse;\n const artifact = await md.GetEntityObject<MJArtifactEntity>('MJ: Artifacts');\n await artifact.Load(artifactId);\n\n if (artifact) {\n this.artifactToShare = artifact;\n this.isArtifactShareModalOpen = true;\n }\n }\n\n /**\n * Handle close of artifact share modal\n */\n onArtifactShareModalClose(): void {\n this.isArtifactShareModalOpen = false;\n this.artifactToShare = null;\n }\n\n /**\n * Handle successful share - refresh permissions\n */\n async onArtifactShared(): Promise<void> {\n this.isArtifactShareModalOpen = false;\n this.artifactToShare = null;\n\n // Refresh permissions for the active artifact\n if (this.activeArtifactId) {\n await this.loadArtifactPermissions(this.activeArtifactId);\n }\n }\n\n /**\n * Handle actionable command execution from child components\n * Bubbles up to host application for handling\n */\n onActionableCommand(command: ActionableCommand): void {\n console.log('📤 Bubbling up actionable command:', command);\n this.actionableCommandExecuted.emit(command);\n }\n\n /**\n * Handle automatic command execution from child components\n * Bubbles up to host application for handling\n */\n onAutomaticCommand(command: AutomaticCommand): void {\n console.log('📤 Bubbling up automatic command:', command);\n this.automaticCommandExecuted.emit(command);\n }\n}","<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 (realtimeConversationReady)=\"onRealtimeConversationReady($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>"]}
|
|
@@ -61,9 +61,20 @@ import * as i59 from "./components/collection/collection-share-modal.component";
|
|
|
61
61
|
import * as i60 from "./components/shared/user-picker.component";
|
|
62
62
|
import * as i61 from "./components/collection/artifact-collection-picker-modal.component";
|
|
63
63
|
import * as i62 from "./components/artifact/artifact-share-modal.component";
|
|
64
|
+
import * as i63 from "./directives/chat-slot.directive";
|
|
65
|
+
import * as i64 from "./components/slots/mj-chat-empty-state-default.component";
|
|
66
|
+
import * as i65 from "./components/slots/mj-chat-agent-presence-default.component";
|
|
67
|
+
import * as i66 from "./components/slots/mj-chat-header-default.component";
|
|
68
|
+
import * as i67 from "./components/slots/mj-chat-message-extra-default.component";
|
|
69
|
+
import * as i68 from "./components/slots/mj-chat-demonstration-surface-default.component";
|
|
70
|
+
import * as i69 from "./components/slots/mj-chat-message-bubble-default.component";
|
|
71
|
+
import * as i70 from "./components/realtime/realtime-agent-picker.component";
|
|
72
|
+
import * as i71 from "./components/realtime/realtime-session-overlay.component";
|
|
73
|
+
import * as i72 from "@memberjunction/ng-whiteboard";
|
|
74
|
+
import * as i73 from "./components/realtime/remote-browser/remote-browser-surface.component";
|
|
64
75
|
export declare class ConversationsModule {
|
|
65
76
|
static ɵfac: i0.ɵɵFactoryDeclaration<ConversationsModule, never>;
|
|
66
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ConversationsModule, [typeof i1.MessageItemComponent, typeof i2.MessageListComponent, typeof i3.MessageInputComponent, typeof i4.MessageInputBoxComponent, typeof i5.ActionableCommandsComponent, typeof i6.MentionDropdownComponent, typeof i7.MentionEditorComponent, typeof i8.ConversationMessageRatingComponent, typeof i9.ConversationWorkspaceComponent, typeof i10.ConversationNavigationComponent, typeof i11.ConversationSidebarComponent, typeof i12.ConversationListComponent, typeof i13.ConversationChatAreaComponent, typeof i14.ConversationEmptyStateComponent, typeof i15.ConversationAgentPickerComponent, typeof i16.ConversationModePickerComponent, typeof i17.ThreadPanelComponent, typeof i18.CollectionTreeComponent, typeof i19.CollectionViewComponent, typeof i20.CollectionArtifactCardComponent, typeof i21.LibraryFullViewComponent, typeof i22.CollectionFormModalComponent, typeof i23.ArtifactCreateModalComponent, typeof i24.CollectionsFullViewComponent, typeof i25.ProjectSelectorComponent, typeof i26.ProjectFormModalComponent, typeof i27.TasksDropdownComponent, typeof i28.TaskWidgetComponent, typeof i29.AgentProcessPanelComponent, typeof i30.ActiveAgentIndicatorComponent, typeof i31.ActiveTasksPanelComponent, typeof i32.ShareModalComponent, typeof i33.MembersModalComponent, typeof i34.ExportModalComponent, typeof i35.SearchPanelComponent, typeof i36.NotificationBadgeComponent, typeof i37.ActivityIndicatorComponent, typeof i38.ToastComponent, typeof i39.InputDialogComponent, typeof i40.RatingDialogComponent, typeof i41.GlobalTasksPanelComponent, typeof i42.ImageViewerComponent, typeof i43.PinnedMessagesPanelComponent, typeof i44.ChatAgentsOverlayComponent, typeof i45.SearchShortcutDirective], [typeof i46.CommonModule, typeof i47.FormsModule, typeof i47.ReactiveFormsModule, typeof i48.RouterModule, typeof i49.MJButtonDirective, typeof i49.MJDatepickerComponent, typeof i49.MJDialogComponent, typeof i49.MJDialogActionsComponent, typeof i50.ContainerDirectivesModule, typeof i51.CodeEditorModule, typeof i52.ArtifactsModule, typeof i53.TestingModule, typeof i54.SharedGenericModule, typeof i55.MarkdownModule, typeof i56.DynamicFormsModule, typeof i57.ResourcePermissionsModule, typeof i58.TasksFullViewComponent, typeof i59.CollectionShareModalComponent, typeof i60.UserPickerComponent, typeof i61.ArtifactCollectionPickerModalComponent, typeof i62.ArtifactShareModalComponent], [typeof i1.MessageItemComponent, typeof i2.MessageListComponent, typeof i3.MessageInputComponent, typeof i4.MessageInputBoxComponent, typeof i5.ActionableCommandsComponent, typeof i6.MentionDropdownComponent, typeof i7.MentionEditorComponent, typeof i8.ConversationMessageRatingComponent, typeof i9.ConversationWorkspaceComponent, typeof i10.ConversationNavigationComponent, typeof i11.ConversationSidebarComponent, typeof i12.ConversationListComponent, typeof i13.ConversationChatAreaComponent, typeof i14.ConversationEmptyStateComponent, typeof i15.ConversationAgentPickerComponent, typeof i16.ConversationModePickerComponent, typeof i17.ThreadPanelComponent, typeof i18.CollectionTreeComponent, typeof i19.CollectionViewComponent, typeof i20.CollectionArtifactCardComponent, typeof i21.LibraryFullViewComponent, typeof i22.CollectionFormModalComponent, typeof i23.ArtifactCreateModalComponent, typeof i24.CollectionsFullViewComponent, typeof i25.ProjectSelectorComponent, typeof i26.ProjectFormModalComponent, typeof i27.TasksDropdownComponent, typeof i28.TaskWidgetComponent, typeof i29.AgentProcessPanelComponent, typeof i30.ActiveAgentIndicatorComponent, typeof i31.ActiveTasksPanelComponent, typeof i32.ShareModalComponent, typeof i33.MembersModalComponent, typeof i34.ExportModalComponent, typeof i35.SearchPanelComponent, typeof i36.NotificationBadgeComponent, typeof i37.ActivityIndicatorComponent, typeof i38.ToastComponent, typeof i39.InputDialogComponent, typeof i40.RatingDialogComponent, typeof i41.GlobalTasksPanelComponent, typeof i42.ImageViewerComponent, typeof i43.PinnedMessagesPanelComponent, typeof i44.ChatAgentsOverlayComponent, typeof i45.SearchShortcutDirective, typeof i58.TasksFullViewComponent]>;
|
|
77
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ConversationsModule, [typeof i1.MessageItemComponent, typeof i2.MessageListComponent, typeof i3.MessageInputComponent, typeof i4.MessageInputBoxComponent, typeof i5.ActionableCommandsComponent, typeof i6.MentionDropdownComponent, typeof i7.MentionEditorComponent, typeof i8.ConversationMessageRatingComponent, typeof i9.ConversationWorkspaceComponent, typeof i10.ConversationNavigationComponent, typeof i11.ConversationSidebarComponent, typeof i12.ConversationListComponent, typeof i13.ConversationChatAreaComponent, typeof i14.ConversationEmptyStateComponent, typeof i15.ConversationAgentPickerComponent, typeof i16.ConversationModePickerComponent, typeof i17.ThreadPanelComponent, typeof i18.CollectionTreeComponent, typeof i19.CollectionViewComponent, typeof i20.CollectionArtifactCardComponent, typeof i21.LibraryFullViewComponent, typeof i22.CollectionFormModalComponent, typeof i23.ArtifactCreateModalComponent, typeof i24.CollectionsFullViewComponent, typeof i25.ProjectSelectorComponent, typeof i26.ProjectFormModalComponent, typeof i27.TasksDropdownComponent, typeof i28.TaskWidgetComponent, typeof i29.AgentProcessPanelComponent, typeof i30.ActiveAgentIndicatorComponent, typeof i31.ActiveTasksPanelComponent, typeof i32.ShareModalComponent, typeof i33.MembersModalComponent, typeof i34.ExportModalComponent, typeof i35.SearchPanelComponent, typeof i36.NotificationBadgeComponent, typeof i37.ActivityIndicatorComponent, typeof i38.ToastComponent, typeof i39.InputDialogComponent, typeof i40.RatingDialogComponent, typeof i41.GlobalTasksPanelComponent, typeof i42.ImageViewerComponent, typeof i43.PinnedMessagesPanelComponent, typeof i44.ChatAgentsOverlayComponent, typeof i45.SearchShortcutDirective], [typeof i46.CommonModule, typeof i47.FormsModule, typeof i47.ReactiveFormsModule, typeof i48.RouterModule, typeof i49.MJButtonDirective, typeof i49.MJDatepickerComponent, typeof i49.MJDialogComponent, typeof i49.MJDialogActionsComponent, typeof i50.ContainerDirectivesModule, typeof i51.CodeEditorModule, typeof i52.ArtifactsModule, typeof i53.TestingModule, typeof i54.SharedGenericModule, typeof i55.MarkdownModule, typeof i56.DynamicFormsModule, typeof i57.ResourcePermissionsModule, typeof i58.TasksFullViewComponent, typeof i59.CollectionShareModalComponent, typeof i60.UserPickerComponent, typeof i61.ArtifactCollectionPickerModalComponent, typeof i62.ArtifactShareModalComponent, typeof i63.ChatSlotDirective, typeof i64.MJChatEmptyStateDefaultComponent, typeof i65.MJChatAgentPresenceDefaultComponent, typeof i66.MJChatHeaderDefaultComponent, typeof i67.MJChatMessageExtraDefaultComponent, typeof i68.MJChatDemonstrationSurfaceDefaultComponent, typeof i69.MJChatMessageBubbleDefaultComponent, typeof i70.RealtimeAgentPickerComponent, typeof i71.RealtimeSessionOverlayComponent, typeof i72.RealtimeWhiteboardHostComponent, typeof i73.RemoteBrowserSurfaceComponent], [typeof i1.MessageItemComponent, typeof i2.MessageListComponent, typeof i3.MessageInputComponent, typeof i4.MessageInputBoxComponent, typeof i5.ActionableCommandsComponent, typeof i6.MentionDropdownComponent, typeof i7.MentionEditorComponent, typeof i8.ConversationMessageRatingComponent, typeof i9.ConversationWorkspaceComponent, typeof i10.ConversationNavigationComponent, typeof i11.ConversationSidebarComponent, typeof i12.ConversationListComponent, typeof i13.ConversationChatAreaComponent, typeof i14.ConversationEmptyStateComponent, typeof i15.ConversationAgentPickerComponent, typeof i16.ConversationModePickerComponent, typeof i17.ThreadPanelComponent, typeof i18.CollectionTreeComponent, typeof i19.CollectionViewComponent, typeof i20.CollectionArtifactCardComponent, typeof i21.LibraryFullViewComponent, typeof i22.CollectionFormModalComponent, typeof i23.ArtifactCreateModalComponent, typeof i24.CollectionsFullViewComponent, typeof i25.ProjectSelectorComponent, typeof i26.ProjectFormModalComponent, typeof i27.TasksDropdownComponent, typeof i28.TaskWidgetComponent, typeof i29.AgentProcessPanelComponent, typeof i30.ActiveAgentIndicatorComponent, typeof i31.ActiveTasksPanelComponent, typeof i32.ShareModalComponent, typeof i33.MembersModalComponent, typeof i34.ExportModalComponent, typeof i35.SearchPanelComponent, typeof i36.NotificationBadgeComponent, typeof i37.ActivityIndicatorComponent, typeof i38.ToastComponent, typeof i39.InputDialogComponent, typeof i40.RatingDialogComponent, typeof i41.GlobalTasksPanelComponent, typeof i42.ImageViewerComponent, typeof i43.PinnedMessagesPanelComponent, typeof i44.ChatAgentsOverlayComponent, typeof i45.SearchShortcutDirective, typeof i58.TasksFullViewComponent, typeof i63.ChatSlotDirective, typeof i64.MJChatEmptyStateDefaultComponent, typeof i65.MJChatAgentPresenceDefaultComponent, typeof i66.MJChatHeaderDefaultComponent, typeof i67.MJChatMessageExtraDefaultComponent, typeof i68.MJChatDemonstrationSurfaceDefaultComponent, typeof i69.MJChatMessageBubbleDefaultComponent, typeof i70.RealtimeAgentPickerComponent, typeof i71.RealtimeSessionOverlayComponent, typeof i72.RealtimeWhiteboardHostComponent, typeof i73.RemoteBrowserSurfaceComponent]>;
|
|
67
78
|
static ɵinj: i0.ɵɵInjectorDeclaration<ConversationsModule>;
|
|
68
79
|
}
|
|
69
80
|
//# sourceMappingURL=conversations.module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversations.module.d.ts","sourceRoot":"","sources":["../../src/lib/conversations.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"conversations.module.d.ts","sourceRoot":"","sources":["../../src/lib/conversations.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0JA,qBA8Da,mBAAmB;yCAAnB,mBAAmB;0CAAnB,mBAAmB;0CAAnB,mBAAmB;CAAI"}
|