@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,9 +1,11 @@
|
|
|
1
|
-
import { EventEmitter, ViewContainerRef, OnInit, OnDestroy, OnChanges, SimpleChanges, ChangeDetectorRef, ElementRef, AfterViewInit, AfterViewChecked } from '@angular/core';
|
|
1
|
+
import { EventEmitter, ViewContainerRef, OnInit, OnDestroy, OnChanges, SimpleChanges, ChangeDetectorRef, ElementRef, AfterViewInit, AfterViewChecked, TemplateRef } from '@angular/core';
|
|
2
2
|
import { MJConversationDetailEntity, MJConversationEntity, RatingJSON } from '@memberjunction/core-entities';
|
|
3
3
|
import { UserInfo, CompositeKey } from '@memberjunction/core';
|
|
4
4
|
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
5
5
|
import { MessageAttachment } from './message-item.component';
|
|
6
|
+
import { BeforeResponseFormSubmittedEventArgs, AfterResponseFormSubmittedEventArgs } from '../../events/chat-events';
|
|
6
7
|
import { LazyArtifactInfo } from '../../models/lazy-artifact-info';
|
|
8
|
+
import { RealtimeSessionTimelineMeta } from '../../utils/realtime-session-timeline';
|
|
7
9
|
import { MJAIAgentRunEntityExtended } from '@memberjunction/ai-core-plus';
|
|
8
10
|
import * as i0 from "@angular/core";
|
|
9
11
|
/**
|
|
@@ -25,6 +27,33 @@ export declare class MessageListComponent extends BaseAngularComponent implement
|
|
|
25
27
|
iconClass: string | null;
|
|
26
28
|
}>;
|
|
27
29
|
attachmentsMap: Map<string, MessageAttachment[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Optional session-row enrichment for realtime SESSION BLOCKS, keyed by
|
|
32
|
+
* `NormalizeUUID(sessionId)` (agent name / status / close reason). Details stamped
|
|
33
|
+
* with an `AgentSessionID` collapse into one timeline card per session — see
|
|
34
|
+
* `BuildConversationTimeline` — and this map dresses those cards up when present.
|
|
35
|
+
*/
|
|
36
|
+
sessionMetaMap: Map<string, RealtimeSessionTimelineMeta>;
|
|
37
|
+
/**
|
|
38
|
+
* Optional per-iteration custom message renderer. When set, the list renders each
|
|
39
|
+
* message via this template (full replacement) instead of the default
|
|
40
|
+
* `MessageItemComponent`. Forwarded by chat-area when a consumer projects
|
|
41
|
+
* `mjChatSlot="messageRenderer"`. The template receives the message as
|
|
42
|
+
* `$implicit` and as a named `message` context binding.
|
|
43
|
+
*
|
|
44
|
+
* Consumers opting into a custom renderer take full responsibility for displaying
|
|
45
|
+
* the message — edit/delete/retry affordances, artifacts, ratings, attachments,
|
|
46
|
+
* etc. The minimal `MJChatMessageBubbleDefaultComponent` ships as a ready-to-use
|
|
47
|
+
* bubble renderer.
|
|
48
|
+
*/
|
|
49
|
+
messageRendererTemplate: TemplateRef<unknown> | null;
|
|
50
|
+
/**
|
|
51
|
+
* Optional per-message additive decoration template, projected INSIDE the default
|
|
52
|
+
* `MessageItemComponent` (after the message text). Forwarded by chat-area when a
|
|
53
|
+
* consumer projects `mjChatSlot="messageExtra"`. Ignored when
|
|
54
|
+
* `messageRendererTemplate` is set (custom renderers own all per-message content).
|
|
55
|
+
*/
|
|
56
|
+
messageExtraTemplate: TemplateRef<unknown> | null;
|
|
28
57
|
editMessage: EventEmitter<MJConversationDetailEntity>;
|
|
29
58
|
deleteMessage: EventEmitter<MJConversationDetailEntity>;
|
|
30
59
|
retryMessage: EventEmitter<MJConversationDetailEntity>;
|
|
@@ -47,8 +76,19 @@ export declare class MessageListComponent extends BaseAngularComponent implement
|
|
|
47
76
|
attachmentClicked: EventEmitter<MessageAttachment>;
|
|
48
77
|
diagnosticRequested: EventEmitter<string>;
|
|
49
78
|
messagePinToggled: EventEmitter<MJConversationDetailEntity>;
|
|
79
|
+
/** Emitted with the `MJ: AI Agent Sessions.ID` when a realtime session block's Open affordance is clicked. */
|
|
80
|
+
realtimeSessionOpenRequested: EventEmitter<string>;
|
|
81
|
+
/** Forwarded from MessageItemComponent — see its docs. */
|
|
82
|
+
beforeResponseFormSubmitted: EventEmitter<BeforeResponseFormSubmittedEventArgs>;
|
|
83
|
+
/** Forwarded from MessageItemComponent — see its docs. */
|
|
84
|
+
afterResponseFormSubmitted: EventEmitter<AfterResponseFormSubmittedEventArgs>;
|
|
50
85
|
messageContainerRef: ViewContainerRef;
|
|
51
86
|
scrollContainer: ElementRef;
|
|
87
|
+
/**
|
|
88
|
+
* Per-message rendered entries — see `RenderedMessageEntry` for the 3-way
|
|
89
|
+
* union (default MessageItemComponent / consumer messageRenderer slot
|
|
90
|
+
* embedded view / collapsed realtime session timeline card).
|
|
91
|
+
*/
|
|
52
92
|
private _renderedMessages;
|
|
53
93
|
private _shouldScrollToBottom;
|
|
54
94
|
private _previousMessageCount;
|
|
@@ -72,8 +112,47 @@ export declare class MessageListComponent extends BaseAngularComponent implement
|
|
|
72
112
|
/**
|
|
73
113
|
* Updates the message list using dynamic component creation
|
|
74
114
|
* Only adds/removes changed messages for optimal performance
|
|
115
|
+
*
|
|
116
|
+
* REALTIME SESSIONS: details stamped with an `AgentSessionID` (turns persisted during
|
|
117
|
+
* a live realtime session) do NOT render as normal chat bubbles. The timeline pass
|
|
118
|
+
* (`BuildConversationTimeline`) collapses each session's stamped rows into ONE session
|
|
119
|
+
* block, rendered as a `RealtimeSessionTimelineCardComponent` at the session's
|
|
120
|
+
* chronological position. Everything else renders exactly as before.
|
|
75
121
|
*/
|
|
76
122
|
private updateMessages;
|
|
123
|
+
/** Stable render key for a timeline item — message ID, or a prefixed session key for session blocks. */
|
|
124
|
+
private getTimelineKey;
|
|
125
|
+
/** Render key for a session block (case-insensitive on the session id; prefixed so it can't collide with message IDs). */
|
|
126
|
+
private getSessionKey;
|
|
127
|
+
/** The render key of the LAST normal message item in the timeline (drives `isLastMessage`), or null when none. */
|
|
128
|
+
private findLastMessageKey;
|
|
129
|
+
/**
|
|
130
|
+
* Creates or updates the ONE timeline card a realtime session collapses to.
|
|
131
|
+
* Click/Open on the card bubbles up via {@link realtimeSessionOpenRequested} so the
|
|
132
|
+
* chat area can host the SESSION REVIEW overlay for it.
|
|
133
|
+
*/
|
|
134
|
+
private renderSessionBlock;
|
|
135
|
+
/**
|
|
136
|
+
* Creates or updates one normal chat message item. Routes to the
|
|
137
|
+
* consumer-projected `messageRenderer` slot template (EmbeddedViewRef path)
|
|
138
|
+
* when present, otherwise falls back to the default `MessageItemComponent`
|
|
139
|
+
* dynamic-component path. Both paths flow through the shared
|
|
140
|
+
* `createRenderedEntry` / `updateMessageItemInstance` helpers.
|
|
141
|
+
*/
|
|
142
|
+
private renderMessageItem;
|
|
143
|
+
/**
|
|
144
|
+
* Updates an existing `MessageItemComponent` in place — used on the default
|
|
145
|
+
* (non-custom-renderer) path when a message's status / artifacts / agent-run /
|
|
146
|
+
* etc. changes mid-stream.
|
|
147
|
+
*/
|
|
148
|
+
private updateMessageItemInstance;
|
|
149
|
+
/**
|
|
150
|
+
* Creates a new rendered entry — either a `MessageItemComponent` (default path)
|
|
151
|
+
* or an `EmbeddedViewRef` from the consumer's `messageRenderer` slot template.
|
|
152
|
+
* Stores the entry in `_renderedMessages` and stamps a back-reference on the
|
|
153
|
+
* message entity.
|
|
154
|
+
*/
|
|
155
|
+
private createRenderedEntry;
|
|
77
156
|
/**
|
|
78
157
|
* Resolves the DISTINCT artifacts for a message (one entry per artifactId at its
|
|
79
158
|
* latest version), lazy-loads them all, and applies them to the rendered
|
|
@@ -122,6 +201,6 @@ export declare class MessageListComponent extends BaseAngularComponent implement
|
|
|
122
201
|
*/
|
|
123
202
|
removeMessage(message: MJConversationDetailEntity): void;
|
|
124
203
|
static ɵfac: i0.ɵɵFactoryDeclaration<MessageListComponent, never>;
|
|
125
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MessageListComponent, "mj-conversation-message-list", never, { "messages": { "alias": "messages"; "required": false; }; "conversation": { "alias": "conversation"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; "isProcessing": { "alias": "isProcessing"; "required": false; }; "artifactMap": { "alias": "artifactMap"; "required": false; }; "agentRunMap": { "alias": "agentRunMap"; "required": false; }; "ratingsMap": { "alias": "ratingsMap"; "required": false; }; "userAvatarMap": { "alias": "userAvatarMap"; "required": false; }; "attachmentsMap": { "alias": "attachmentsMap"; "required": false; }; "messagesUpdate": { "alias": "messagesUpdate"; "required": false; }; }, { "editMessage": "editMessage"; "deleteMessage": "deleteMessage"; "retryMessage": "retryMessage"; "testFeedbackMessage": "testFeedbackMessage"; "artifactClicked": "artifactClicked"; "replyInThread": "replyInThread"; "viewThread": "viewThread"; "messageEdited": "messageEdited"; "openEntityRecord": "openEntityRecord"; "suggestedResponseSelected": "suggestedResponseSelected"; "attachmentClicked": "attachmentClicked"; "diagnosticRequested": "diagnosticRequested"; "messagePinToggled": "messagePinToggled"; }, never, never, false, never>;
|
|
204
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MessageListComponent, "mj-conversation-message-list", never, { "messages": { "alias": "messages"; "required": false; }; "conversation": { "alias": "conversation"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; "isProcessing": { "alias": "isProcessing"; "required": false; }; "artifactMap": { "alias": "artifactMap"; "required": false; }; "agentRunMap": { "alias": "agentRunMap"; "required": false; }; "ratingsMap": { "alias": "ratingsMap"; "required": false; }; "userAvatarMap": { "alias": "userAvatarMap"; "required": false; }; "attachmentsMap": { "alias": "attachmentsMap"; "required": false; }; "sessionMetaMap": { "alias": "sessionMetaMap"; "required": false; }; "messageRendererTemplate": { "alias": "messageRendererTemplate"; "required": false; }; "messageExtraTemplate": { "alias": "messageExtraTemplate"; "required": false; }; "messagesUpdate": { "alias": "messagesUpdate"; "required": false; }; }, { "editMessage": "editMessage"; "deleteMessage": "deleteMessage"; "retryMessage": "retryMessage"; "testFeedbackMessage": "testFeedbackMessage"; "artifactClicked": "artifactClicked"; "replyInThread": "replyInThread"; "viewThread": "viewThread"; "messageEdited": "messageEdited"; "openEntityRecord": "openEntityRecord"; "suggestedResponseSelected": "suggestedResponseSelected"; "attachmentClicked": "attachmentClicked"; "diagnosticRequested": "diagnosticRequested"; "messagePinToggled": "messagePinToggled"; "realtimeSessionOpenRequested": "realtimeSessionOpenRequested"; "beforeResponseFormSubmitted": "beforeResponseFormSubmitted"; "afterResponseFormSubmitted": "afterResponseFormSubmitted"; }, never, never, false, never>;
|
|
126
205
|
}
|
|
127
206
|
//# sourceMappingURL=message-list.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-list.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/message/message-list.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EAEZ,gBAAgB,EAChB,MAAM,EACN,SAAS,EACT,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,gBAAgB,
|
|
1
|
+
{"version":3,"file":"message-list.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/message/message-list.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { Component, Input, Output, EventEmitter, ViewChild, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { NormalizeUUID } from '@memberjunction/global';
|
|
2
3
|
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
3
4
|
import { MessageItemComponent } from './message-item.component';
|
|
5
|
+
import { RealtimeSessionTimelineCardComponent } from '../realtime/realtime-session-timeline-card.component';
|
|
4
6
|
import { selectDistinctLatestArtifacts } from '../../utils/distinct-artifacts';
|
|
7
|
+
import { BuildConversationTimeline } from '../../utils/realtime-session-timeline';
|
|
5
8
|
import * as i0 from "@angular/core";
|
|
6
9
|
const _c0 = ["messageContainer"];
|
|
7
10
|
const _c1 = ["scrollContainer"];
|
|
@@ -63,6 +66,33 @@ export class MessageListComponent extends BaseAngularComponent {
|
|
|
63
66
|
ratingsMap = new Map();
|
|
64
67
|
userAvatarMap = new Map();
|
|
65
68
|
attachmentsMap = new Map();
|
|
69
|
+
/**
|
|
70
|
+
* Optional session-row enrichment for realtime SESSION BLOCKS, keyed by
|
|
71
|
+
* `NormalizeUUID(sessionId)` (agent name / status / close reason). Details stamped
|
|
72
|
+
* with an `AgentSessionID` collapse into one timeline card per session — see
|
|
73
|
+
* `BuildConversationTimeline` — and this map dresses those cards up when present.
|
|
74
|
+
*/
|
|
75
|
+
sessionMetaMap = new Map();
|
|
76
|
+
/**
|
|
77
|
+
* Optional per-iteration custom message renderer. When set, the list renders each
|
|
78
|
+
* message via this template (full replacement) instead of the default
|
|
79
|
+
* `MessageItemComponent`. Forwarded by chat-area when a consumer projects
|
|
80
|
+
* `mjChatSlot="messageRenderer"`. The template receives the message as
|
|
81
|
+
* `$implicit` and as a named `message` context binding.
|
|
82
|
+
*
|
|
83
|
+
* Consumers opting into a custom renderer take full responsibility for displaying
|
|
84
|
+
* the message — edit/delete/retry affordances, artifacts, ratings, attachments,
|
|
85
|
+
* etc. The minimal `MJChatMessageBubbleDefaultComponent` ships as a ready-to-use
|
|
86
|
+
* bubble renderer.
|
|
87
|
+
*/
|
|
88
|
+
messageRendererTemplate = null;
|
|
89
|
+
/**
|
|
90
|
+
* Optional per-message additive decoration template, projected INSIDE the default
|
|
91
|
+
* `MessageItemComponent` (after the message text). Forwarded by chat-area when a
|
|
92
|
+
* consumer projects `mjChatSlot="messageExtra"`. Ignored when
|
|
93
|
+
* `messageRendererTemplate` is set (custom renderers own all per-message content).
|
|
94
|
+
*/
|
|
95
|
+
messageExtraTemplate = null;
|
|
66
96
|
editMessage = new EventEmitter();
|
|
67
97
|
deleteMessage = new EventEmitter();
|
|
68
98
|
retryMessage = new EventEmitter();
|
|
@@ -76,8 +106,19 @@ export class MessageListComponent extends BaseAngularComponent {
|
|
|
76
106
|
attachmentClicked = new EventEmitter();
|
|
77
107
|
diagnosticRequested = new EventEmitter(); // emits messageId
|
|
78
108
|
messagePinToggled = new EventEmitter();
|
|
109
|
+
/** Emitted with the `MJ: AI Agent Sessions.ID` when a realtime session block's Open affordance is clicked. */
|
|
110
|
+
realtimeSessionOpenRequested = new EventEmitter();
|
|
111
|
+
/** Forwarded from MessageItemComponent — see its docs. */
|
|
112
|
+
beforeResponseFormSubmitted = new EventEmitter();
|
|
113
|
+
/** Forwarded from MessageItemComponent — see its docs. */
|
|
114
|
+
afterResponseFormSubmitted = new EventEmitter();
|
|
79
115
|
messageContainerRef;
|
|
80
116
|
scrollContainer;
|
|
117
|
+
/**
|
|
118
|
+
* Per-message rendered entries — see `RenderedMessageEntry` for the 3-way
|
|
119
|
+
* union (default MessageItemComponent / consumer messageRenderer slot
|
|
120
|
+
* embedded view / collapsed realtime session timeline card).
|
|
121
|
+
*/
|
|
81
122
|
_renderedMessages = new Map();
|
|
82
123
|
_shouldScrollToBottom = false;
|
|
83
124
|
_previousMessageCount = 0; // Track previous count to detect new messages
|
|
@@ -146,6 +187,11 @@ export class MessageListComponent extends BaseAngularComponent {
|
|
|
146
187
|
if (changes['attachmentsMap'] && this.messages && this.messageContainerRef) {
|
|
147
188
|
this.updateMessages(this.messages);
|
|
148
189
|
}
|
|
190
|
+
// Watch for session-meta changes so realtime session blocks pick up their
|
|
191
|
+
// agent name / status chip once the (async, batched) session lookup lands
|
|
192
|
+
if (changes['sessionMetaMap'] && this.messages && this.messageContainerRef) {
|
|
193
|
+
this.updateMessages(this.messages);
|
|
194
|
+
}
|
|
149
195
|
}
|
|
150
196
|
ngAfterViewChecked() {
|
|
151
197
|
if (this._shouldScrollToBottom) {
|
|
@@ -154,10 +200,10 @@ export class MessageListComponent extends BaseAngularComponent {
|
|
|
154
200
|
}
|
|
155
201
|
}
|
|
156
202
|
ngOnDestroy() {
|
|
157
|
-
// Clean up all dynamically created components
|
|
158
|
-
this._renderedMessages.forEach((
|
|
159
|
-
if (
|
|
160
|
-
|
|
203
|
+
// Clean up all dynamically created components AND embedded views (both have destroy()).
|
|
204
|
+
this._renderedMessages.forEach((entry) => {
|
|
205
|
+
if (entry) {
|
|
206
|
+
entry.ref.destroy();
|
|
161
207
|
}
|
|
162
208
|
});
|
|
163
209
|
this._renderedMessages.clear();
|
|
@@ -177,95 +223,42 @@ export class MessageListComponent extends BaseAngularComponent {
|
|
|
177
223
|
/**
|
|
178
224
|
* Updates the message list using dynamic component creation
|
|
179
225
|
* Only adds/removes changed messages for optimal performance
|
|
226
|
+
*
|
|
227
|
+
* REALTIME SESSIONS: details stamped with an `AgentSessionID` (turns persisted during
|
|
228
|
+
* a live realtime session) do NOT render as normal chat bubbles. The timeline pass
|
|
229
|
+
* (`BuildConversationTimeline`) collapses each session's stamped rows into ONE session
|
|
230
|
+
* block, rendered as a `RealtimeSessionTimelineCardComponent` at the session's
|
|
231
|
+
* chronological position. Everything else renders exactly as before.
|
|
180
232
|
*/
|
|
181
233
|
updateMessages(messages) {
|
|
182
234
|
// Temporarily detach change detection for performance
|
|
183
235
|
this.cdRef.detach();
|
|
184
236
|
try {
|
|
185
|
-
//
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
237
|
+
// Build the timeline first — collapses contiguous realtime-session rows
|
|
238
|
+
// into ONE session block per session, leaving normal messages in place.
|
|
239
|
+
// See `BuildConversationTimeline` in `utils/realtime-session-timeline`.
|
|
240
|
+
const timeline = BuildConversationTimeline(messages);
|
|
241
|
+
// Remove rendered items (messages AND session blocks) that no longer exist
|
|
242
|
+
const currentKeys = new Set(timeline.map(item => this.getTimelineKey(item)));
|
|
243
|
+
this._renderedMessages.forEach((entry, key) => {
|
|
244
|
+
if (!currentKeys.has(key)) {
|
|
245
|
+
entry.ref.destroy();
|
|
190
246
|
this._renderedMessages.delete(key);
|
|
191
247
|
}
|
|
192
248
|
});
|
|
193
|
-
// Add or update
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
const previousMessage = instance.message;
|
|
202
|
-
instance.message = message;
|
|
203
|
-
instance.allMessages = messages;
|
|
204
|
-
instance.isProcessing = this.isProcessing;
|
|
205
|
-
instance.userAvatarMap = this.userAvatarMap;
|
|
206
|
-
instance.isLastMessage = (index === messages.length - 1); // Update last message flag
|
|
207
|
-
// Surface ALL distinct artifacts on this message (latest version each),
|
|
208
|
-
// not just the most recent one. Loads lazily in the background.
|
|
209
|
-
this.applyArtifactsToInstance(instance, message.ID, existing.changeDetectorRef);
|
|
210
|
-
// Update agent run from map
|
|
211
|
-
instance.agentRun = this.agentRunMap.get(message.ID) || null;
|
|
212
|
-
// Update ratings from map
|
|
213
|
-
instance.ratings = this.ratingsMap.get(message.ID);
|
|
214
|
-
// Update attachments from map
|
|
215
|
-
instance.attachments = this.attachmentsMap.get(message.ID) || [];
|
|
216
|
-
// Manually trigger change detection in child component when message status changes
|
|
217
|
-
// This is necessary because we're using OnPush change detection and direct property assignment
|
|
218
|
-
// doesn't trigger ngOnChanges (only reference changes do)
|
|
219
|
-
if (previousMessage && previousMessage.Status !== message.Status) {
|
|
220
|
-
// Use ComponentRef.changeDetectorRef to force update on dynamic child
|
|
221
|
-
existing.changeDetectorRef.markForCheck();
|
|
222
|
-
}
|
|
249
|
+
// Add or update timeline items in chronological order. `renderMessageItem`
|
|
250
|
+
// internally branches on the slot template (messageRenderer) vs the
|
|
251
|
+
// default MessageItemComponent; `renderSessionBlock` always creates a
|
|
252
|
+
// RealtimeSessionTimelineCardComponent.
|
|
253
|
+
const lastMessageKey = this.findLastMessageKey(timeline);
|
|
254
|
+
for (const item of timeline) {
|
|
255
|
+
if (item.Kind === 'session') {
|
|
256
|
+
this.renderSessionBlock(item.Group);
|
|
223
257
|
}
|
|
224
258
|
else {
|
|
225
|
-
|
|
226
|
-
const componentRef = this.messageContainerRef.createComponent(MessageItemComponent);
|
|
227
|
-
const instance = componentRef.instance;
|
|
228
|
-
// Set inputs
|
|
229
|
-
instance.message = message;
|
|
230
|
-
instance.conversation = this.conversation;
|
|
231
|
-
instance.currentUser = this.currentUser;
|
|
232
|
-
instance.allMessages = messages;
|
|
233
|
-
instance.isProcessing = this.isProcessing;
|
|
234
|
-
instance.userAvatarMap = this.userAvatarMap;
|
|
235
|
-
instance.isLastMessage = (index === messages.length - 1); // Mark last message
|
|
236
|
-
// Surface ALL distinct artifacts on this message (latest version each).
|
|
237
|
-
this.applyArtifactsToInstance(instance, message.ID, componentRef.changeDetectorRef);
|
|
238
|
-
// Pass agent run from map (loaded once per conversation)
|
|
239
|
-
instance.agentRun = this.agentRunMap.get(message.ID) || null;
|
|
240
|
-
// Pass ratings from map (parsed once per conversation)
|
|
241
|
-
instance.ratings = this.ratingsMap.get(message.ID);
|
|
242
|
-
// Pass attachments from map
|
|
243
|
-
instance.attachments = this.attachmentsMap.get(message.ID) || [];
|
|
244
|
-
// Subscribe to outputs
|
|
245
|
-
instance.editClicked.subscribe((msg) => this.editMessage.emit(msg));
|
|
246
|
-
instance.deleteClicked.subscribe((msg) => this.deleteMessage.emit(msg));
|
|
247
|
-
instance.retryClicked.subscribe((msg) => this.retryMessage.emit(msg));
|
|
248
|
-
instance.testFeedbackClicked.subscribe((msg) => this.testFeedbackMessage.emit(msg));
|
|
249
|
-
instance.artifactClicked.subscribe((data) => this.artifactClicked.emit(data));
|
|
250
|
-
instance.messageEdited.subscribe((msg) => this.messageEdited.emit(msg));
|
|
251
|
-
instance.openEntityRecord.subscribe((data) => this.openEntityRecord.emit(data));
|
|
252
|
-
instance.suggestedResponseSelected.subscribe((data) => this.suggestedResponseSelected.emit(data));
|
|
253
|
-
instance.attachmentClicked.subscribe((attachment) => this.attachmentClicked.emit(attachment));
|
|
254
|
-
instance.diagnosticRequested.subscribe((messageId) => this.diagnosticRequested.emit(messageId));
|
|
255
|
-
instance.messagePinToggled.subscribe((msg) => this.messagePinToggled.emit(msg));
|
|
256
|
-
// Handle artifact actions if the output exists
|
|
257
|
-
if (instance.artifactActionPerformed) {
|
|
258
|
-
instance.artifactActionPerformed.subscribe((data) => {
|
|
259
|
-
// Parent can handle artifact actions (save, fork, history, share)
|
|
260
|
-
console.log('Artifact action:', data);
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
// Store reference
|
|
264
|
-
this._renderedMessages.set(key, componentRef);
|
|
265
|
-
// Store reference on the message entity for later access (like skip-chat pattern)
|
|
266
|
-
message._componentRef = componentRef;
|
|
259
|
+
this.renderMessageItem(item.Detail, messages, this.getMessageKey(item.Detail) === lastMessageKey);
|
|
267
260
|
}
|
|
268
|
-
}
|
|
261
|
+
}
|
|
269
262
|
// Only scroll to bottom if new messages were added (not just updates)
|
|
270
263
|
// This prevents scrolling when the message list is merely refreshed (e.g., during agent run timer)
|
|
271
264
|
const previousCount = this._previousMessageCount;
|
|
@@ -280,6 +273,166 @@ export class MessageListComponent extends BaseAngularComponent {
|
|
|
280
273
|
this.cdRef.detectChanges();
|
|
281
274
|
}
|
|
282
275
|
}
|
|
276
|
+
/** Stable render key for a timeline item — message ID, or a prefixed session key for session blocks. */
|
|
277
|
+
getTimelineKey(item) {
|
|
278
|
+
return item.Kind === 'session' ? this.getSessionKey(item.Group.SessionID) : this.getMessageKey(item.Detail);
|
|
279
|
+
}
|
|
280
|
+
/** Render key for a session block (case-insensitive on the session id; prefixed so it can't collide with message IDs). */
|
|
281
|
+
getSessionKey(sessionId) {
|
|
282
|
+
return `session:${NormalizeUUID(sessionId)}`;
|
|
283
|
+
}
|
|
284
|
+
/** The render key of the LAST normal message item in the timeline (drives `isLastMessage`), or null when none. */
|
|
285
|
+
findLastMessageKey(timeline) {
|
|
286
|
+
for (let i = timeline.length - 1; i >= 0; i--) {
|
|
287
|
+
const item = timeline[i];
|
|
288
|
+
if (item.Kind === 'message') {
|
|
289
|
+
return this.getMessageKey(item.Detail);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return null;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Creates or updates the ONE timeline card a realtime session collapses to.
|
|
296
|
+
* Click/Open on the card bubbles up via {@link realtimeSessionOpenRequested} so the
|
|
297
|
+
* chat area can host the SESSION REVIEW overlay for it.
|
|
298
|
+
*/
|
|
299
|
+
renderSessionBlock(group) {
|
|
300
|
+
const key = this.getSessionKey(group.SessionID);
|
|
301
|
+
const meta = this.sessionMetaMap.get(NormalizeUUID(group.SessionID)) ?? null;
|
|
302
|
+
const existing = this._renderedMessages.get(key);
|
|
303
|
+
if (existing && existing.kind === 'realtime-session') {
|
|
304
|
+
// Update existing card in place.
|
|
305
|
+
const instance = existing.ref.instance;
|
|
306
|
+
instance.Group = group;
|
|
307
|
+
instance.Meta = meta;
|
|
308
|
+
existing.ref.changeDetectorRef.markForCheck();
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
// Different kind at this key (e.g. mode changed) — drop the old entry, fall through to create.
|
|
312
|
+
if (existing) {
|
|
313
|
+
existing.ref.destroy();
|
|
314
|
+
this._renderedMessages.delete(key);
|
|
315
|
+
}
|
|
316
|
+
const componentRef = this.messageContainerRef.createComponent(RealtimeSessionTimelineCardComponent);
|
|
317
|
+
componentRef.instance.Group = group;
|
|
318
|
+
componentRef.instance.Meta = meta;
|
|
319
|
+
componentRef.instance.UserName = this.currentUser?.Name || 'You';
|
|
320
|
+
componentRef.instance.OpenRequested.subscribe((sessionId) => this.realtimeSessionOpenRequested.emit(sessionId));
|
|
321
|
+
this._renderedMessages.set(key, { kind: 'realtime-session', ref: componentRef });
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Creates or updates one normal chat message item. Routes to the
|
|
325
|
+
* consumer-projected `messageRenderer` slot template (EmbeddedViewRef path)
|
|
326
|
+
* when present, otherwise falls back to the default `MessageItemComponent`
|
|
327
|
+
* dynamic-component path. Both paths flow through the shared
|
|
328
|
+
* `createRenderedEntry` / `updateMessageItemInstance` helpers.
|
|
329
|
+
*/
|
|
330
|
+
renderMessageItem(message, messages, isLastMessage) {
|
|
331
|
+
const key = this.getMessageKey(message);
|
|
332
|
+
// `index` is only used for the `isLastMessage` heuristic inside
|
|
333
|
+
// updateMessageItemInstance — synthesize a value that produces the right
|
|
334
|
+
// boolean (last index when `isLastMessage` is true, else 0 — any non-last
|
|
335
|
+
// index works since it just affects that one comparison).
|
|
336
|
+
const index = isLastMessage ? messages.length - 1 : 0;
|
|
337
|
+
const useCustomRenderer = this.messageRendererTemplate !== null;
|
|
338
|
+
const existing = this._renderedMessages.get(key);
|
|
339
|
+
if (existing && existing.kind === 'embedded' && useCustomRenderer) {
|
|
340
|
+
// Update existing embedded view from messageRenderer slot
|
|
341
|
+
existing.ref.context.$implicit = message;
|
|
342
|
+
existing.ref.context.message = message;
|
|
343
|
+
existing.ref.markForCheck();
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
if (existing && existing.kind === 'component' && !useCustomRenderer) {
|
|
347
|
+
// Update existing MessageItemComponent in place
|
|
348
|
+
this.updateMessageItemInstance(existing.ref, message, messages, index);
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
if (existing) {
|
|
352
|
+
// Rendering kind changed (e.g. component↔embedded, or a session block was
|
|
353
|
+
// overwritten with a message). Destroy + recreate.
|
|
354
|
+
existing.ref.destroy();
|
|
355
|
+
this._renderedMessages.delete(key);
|
|
356
|
+
}
|
|
357
|
+
this.createRenderedEntry(message, messages, index, key, useCustomRenderer);
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Updates an existing `MessageItemComponent` in place — used on the default
|
|
361
|
+
* (non-custom-renderer) path when a message's status / artifacts / agent-run /
|
|
362
|
+
* etc. changes mid-stream.
|
|
363
|
+
*/
|
|
364
|
+
updateMessageItemInstance(ref, message, messages, index) {
|
|
365
|
+
const instance = ref.instance;
|
|
366
|
+
const previousMessage = instance.message;
|
|
367
|
+
instance.message = message;
|
|
368
|
+
instance.allMessages = messages;
|
|
369
|
+
instance.isProcessing = this.isProcessing;
|
|
370
|
+
instance.userAvatarMap = this.userAvatarMap;
|
|
371
|
+
instance.isLastMessage = (index === messages.length - 1);
|
|
372
|
+
instance.messageExtraTemplate = this.messageExtraTemplate;
|
|
373
|
+
this.applyArtifactsToInstance(instance, message.ID, ref.changeDetectorRef);
|
|
374
|
+
instance.agentRun = this.agentRunMap.get(message.ID) || null;
|
|
375
|
+
instance.ratings = this.ratingsMap.get(message.ID);
|
|
376
|
+
instance.attachments = this.attachmentsMap.get(message.ID) || [];
|
|
377
|
+
// Status change requires explicit markForCheck on the OnPush dynamic child.
|
|
378
|
+
if (previousMessage && previousMessage.Status !== message.Status) {
|
|
379
|
+
ref.changeDetectorRef.markForCheck();
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Creates a new rendered entry — either a `MessageItemComponent` (default path)
|
|
384
|
+
* or an `EmbeddedViewRef` from the consumer's `messageRenderer` slot template.
|
|
385
|
+
* Stores the entry in `_renderedMessages` and stamps a back-reference on the
|
|
386
|
+
* message entity.
|
|
387
|
+
*/
|
|
388
|
+
createRenderedEntry(message, messages, index, key, useCustomRenderer) {
|
|
389
|
+
if (useCustomRenderer && this.messageRendererTemplate) {
|
|
390
|
+
// The slot directive carries TemplateRef<unknown>; assert the contract here
|
|
391
|
+
// (consumers' `let-message` bindings consume the message context shape below).
|
|
392
|
+
const template = this.messageRendererTemplate;
|
|
393
|
+
const viewRef = this.messageContainerRef.createEmbeddedView(template, { $implicit: message, message });
|
|
394
|
+
this._renderedMessages.set(key, { kind: 'embedded', ref: viewRef });
|
|
395
|
+
// Stamp back-ref for parity with the component path.
|
|
396
|
+
message._viewRef = viewRef;
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
const componentRef = this.messageContainerRef.createComponent(MessageItemComponent);
|
|
400
|
+
const instance = componentRef.instance;
|
|
401
|
+
instance.message = message;
|
|
402
|
+
instance.conversation = this.conversation;
|
|
403
|
+
instance.currentUser = this.currentUser;
|
|
404
|
+
instance.allMessages = messages;
|
|
405
|
+
instance.isProcessing = this.isProcessing;
|
|
406
|
+
instance.userAvatarMap = this.userAvatarMap;
|
|
407
|
+
instance.isLastMessage = (index === messages.length - 1);
|
|
408
|
+
instance.messageExtraTemplate = this.messageExtraTemplate;
|
|
409
|
+
this.applyArtifactsToInstance(instance, message.ID, componentRef.changeDetectorRef);
|
|
410
|
+
instance.agentRun = this.agentRunMap.get(message.ID) || null;
|
|
411
|
+
instance.ratings = this.ratingsMap.get(message.ID);
|
|
412
|
+
instance.attachments = this.attachmentsMap.get(message.ID) || [];
|
|
413
|
+
instance.editClicked.subscribe((msg) => this.editMessage.emit(msg));
|
|
414
|
+
instance.deleteClicked.subscribe((msg) => this.deleteMessage.emit(msg));
|
|
415
|
+
instance.retryClicked.subscribe((msg) => this.retryMessage.emit(msg));
|
|
416
|
+
instance.testFeedbackClicked.subscribe((msg) => this.testFeedbackMessage.emit(msg));
|
|
417
|
+
instance.artifactClicked.subscribe((data) => this.artifactClicked.emit(data));
|
|
418
|
+
instance.messageEdited.subscribe((msg) => this.messageEdited.emit(msg));
|
|
419
|
+
instance.openEntityRecord.subscribe((data) => this.openEntityRecord.emit(data));
|
|
420
|
+
instance.suggestedResponseSelected.subscribe((data) => this.suggestedResponseSelected.emit(data));
|
|
421
|
+
instance.attachmentClicked.subscribe((attachment) => this.attachmentClicked.emit(attachment));
|
|
422
|
+
instance.diagnosticRequested.subscribe((messageId) => this.diagnosticRequested.emit(messageId));
|
|
423
|
+
instance.messagePinToggled.subscribe((msg) => this.messagePinToggled.emit(msg));
|
|
424
|
+
instance.beforeResponseFormSubmitted.subscribe((e) => this.beforeResponseFormSubmitted.emit(e));
|
|
425
|
+
instance.afterResponseFormSubmitted.subscribe((e) => this.afterResponseFormSubmitted.emit(e));
|
|
426
|
+
if (instance.artifactActionPerformed) {
|
|
427
|
+
instance.artifactActionPerformed.subscribe((data) => {
|
|
428
|
+
// Parent can handle artifact actions (save, fork, history, share)
|
|
429
|
+
console.log('Artifact action:', data);
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
this._renderedMessages.set(key, { kind: 'component', ref: componentRef });
|
|
433
|
+
// Preserve the existing back-ref pattern from the skip-chat performance design.
|
|
434
|
+
message._componentRef = componentRef;
|
|
435
|
+
}
|
|
283
436
|
/**
|
|
284
437
|
* Resolves the DISTINCT artifacts for a message (one entry per artifactId at its
|
|
285
438
|
* latest version), lazy-loads them all, and applies them to the rendered
|
|
@@ -384,9 +537,9 @@ export class MessageListComponent extends BaseAngularComponent {
|
|
|
384
537
|
*/
|
|
385
538
|
removeMessage(message) {
|
|
386
539
|
const key = this.getMessageKey(message);
|
|
387
|
-
const
|
|
388
|
-
if (
|
|
389
|
-
|
|
540
|
+
const entry = this._renderedMessages.get(key);
|
|
541
|
+
if (entry) {
|
|
542
|
+
entry.ref.destroy();
|
|
390
543
|
this._renderedMessages.delete(key);
|
|
391
544
|
}
|
|
392
545
|
}
|
|
@@ -397,7 +550,7 @@ export class MessageListComponent extends BaseAngularComponent {
|
|
|
397
550
|
let _t;
|
|
398
551
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.messageContainerRef = _t.first);
|
|
399
552
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.scrollContainer = _t.first);
|
|
400
|
-
} }, inputs: { messages: "messages", conversation: "conversation", currentUser: "currentUser", isProcessing: "isProcessing", artifactMap: "artifactMap", agentRunMap: "agentRunMap", ratingsMap: "ratingsMap", userAvatarMap: "userAvatarMap", attachmentsMap: "attachmentsMap", messagesUpdate: "messagesUpdate" }, outputs: { editMessage: "editMessage", deleteMessage: "deleteMessage", retryMessage: "retryMessage", testFeedbackMessage: "testFeedbackMessage", artifactClicked: "artifactClicked", replyInThread: "replyInThread", viewThread: "viewThread", messageEdited: "messageEdited", openEntityRecord: "openEntityRecord", suggestedResponseSelected: "suggestedResponseSelected", attachmentClicked: "attachmentClicked", diagnosticRequested: "diagnosticRequested", messagePinToggled: "messagePinToggled" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 6, vars: 2, consts: [["scrollContainer", ""], ["messageContainer", ""], [1, "message-list-container"], [1, "sticky-date-header"], [1, "empty-state"], [1, "sticky-date-wrapper"], [1, "sticky-date-button", 3, "click"], [1, "fas", "fa-chevron-down"], [1, "date-nav-dropdown"], [1, "date-nav-option", "jump-to"], [1, "date-nav-option", 3, "click"], [1, "fas", "fa-comments"]], template: function MessageListComponent_Template(rf, ctx) { if (rf & 1) {
|
|
553
|
+
} }, inputs: { messages: "messages", conversation: "conversation", currentUser: "currentUser", isProcessing: "isProcessing", artifactMap: "artifactMap", agentRunMap: "agentRunMap", ratingsMap: "ratingsMap", userAvatarMap: "userAvatarMap", attachmentsMap: "attachmentsMap", sessionMetaMap: "sessionMetaMap", messageRendererTemplate: "messageRendererTemplate", messageExtraTemplate: "messageExtraTemplate", messagesUpdate: "messagesUpdate" }, outputs: { editMessage: "editMessage", deleteMessage: "deleteMessage", retryMessage: "retryMessage", testFeedbackMessage: "testFeedbackMessage", artifactClicked: "artifactClicked", replyInThread: "replyInThread", viewThread: "viewThread", messageEdited: "messageEdited", openEntityRecord: "openEntityRecord", suggestedResponseSelected: "suggestedResponseSelected", attachmentClicked: "attachmentClicked", diagnosticRequested: "diagnosticRequested", messagePinToggled: "messagePinToggled", realtimeSessionOpenRequested: "realtimeSessionOpenRequested", beforeResponseFormSubmitted: "beforeResponseFormSubmitted", afterResponseFormSubmitted: "afterResponseFormSubmitted" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 6, vars: 2, consts: [["scrollContainer", ""], ["messageContainer", ""], [1, "message-list-container"], [1, "sticky-date-header"], [1, "empty-state"], [1, "sticky-date-wrapper"], [1, "sticky-date-button", 3, "click"], [1, "fas", "fa-chevron-down"], [1, "date-nav-dropdown"], [1, "date-nav-option", "jump-to"], [1, "date-nav-option", 3, "click"], [1, "fas", "fa-comments"]], template: function MessageListComponent_Template(rf, ctx) { if (rf & 1) {
|
|
401
554
|
i0.ɵɵelementStart(0, "div", 2, 0);
|
|
402
555
|
i0.ɵɵconditionalCreate(2, MessageListComponent_Conditional_2_Template, 17, 3, "div", 3);
|
|
403
556
|
i0.ɵɵelementContainer(3, null, 1);
|
|
@@ -431,6 +584,12 @@ export class MessageListComponent extends BaseAngularComponent {
|
|
|
431
584
|
type: Input
|
|
432
585
|
}], attachmentsMap: [{
|
|
433
586
|
type: Input
|
|
587
|
+
}], sessionMetaMap: [{
|
|
588
|
+
type: Input
|
|
589
|
+
}], messageRendererTemplate: [{
|
|
590
|
+
type: Input
|
|
591
|
+
}], messageExtraTemplate: [{
|
|
592
|
+
type: Input
|
|
434
593
|
}], editMessage: [{
|
|
435
594
|
type: Output
|
|
436
595
|
}], deleteMessage: [{
|
|
@@ -457,6 +616,12 @@ export class MessageListComponent extends BaseAngularComponent {
|
|
|
457
616
|
type: Output
|
|
458
617
|
}], messagePinToggled: [{
|
|
459
618
|
type: Output
|
|
619
|
+
}], realtimeSessionOpenRequested: [{
|
|
620
|
+
type: Output
|
|
621
|
+
}], beforeResponseFormSubmitted: [{
|
|
622
|
+
type: Output
|
|
623
|
+
}], afterResponseFormSubmitted: [{
|
|
624
|
+
type: Output
|
|
460
625
|
}], messageContainerRef: [{
|
|
461
626
|
type: ViewChild,
|
|
462
627
|
args: ['messageContainer', { read: ViewContainerRef }]
|
|
@@ -466,5 +631,5 @@ export class MessageListComponent extends BaseAngularComponent {
|
|
|
466
631
|
}], messagesUpdate: [{
|
|
467
632
|
type: Input
|
|
468
633
|
}] }); })();
|
|
469
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MessageListComponent, { className: "MessageListComponent", filePath: "src/lib/components/message/message-list.component.ts", lineNumber:
|
|
634
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MessageListComponent, { className: "MessageListComponent", filePath: "src/lib/components/message/message-list.component.ts", lineNumber: 77 }); })();
|
|
470
635
|
//# sourceMappingURL=message-list.component.js.map
|