@memberjunction/ng-conversations 5.40.2 → 5.42.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 +585 -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/collection/collections-full-view.component.d.ts +105 -2
- package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collections-full-view.component.js +1378 -489
- package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +209 -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 +924 -350
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.d.ts +98 -5
- package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.js +1102 -401
- package/dist/lib/components/conversation/conversation-list.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/project/project-form-modal.component.d.ts +5 -1
- package/dist/lib/components/project/project-form-modal.component.d.ts.map +1 -1
- package/dist/lib/components/project/project-form-modal.component.js +104 -85
- package/dist/lib/components/project/project-form-modal.component.js.map +1 -1
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts +304 -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 +198 -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 +179 -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 +634 -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 +201 -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 +681 -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 +379 -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 +914 -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 +87 -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 +223 -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 +15 -0
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.js +41 -12
- 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 +1 -1
- package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
- package/dist/lib/services/artifact-state.service.js +29 -7
- 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 +121 -0
- package/dist/lib/services/realtime-pairing.d.ts.map +1 -0
- package/dist/lib/services/realtime-pairing.js +160 -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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whiteboard-channel.test.js","sourceRoot":"","sources":["../../src/__tests__/whiteboard-channel.test.ts"],"names":[],"mappings":"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","sourcesContent":["// The whiteboard channel imports its Angular surface component (partial-compiled Angular\n// libs require the JIT compiler in this node test environment), so load the compiler FIRST.\nimport '@angular/compiler';\nimport { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';\nimport { EventEmitter } from '@angular/core';\nimport { MJGlobal } from '@memberjunction/global';\nimport { BaseRealtimeChannelClient, RealtimeChannelContext } from '../lib/components/realtime/channels/base-realtime-channel-client';\nimport {\n RealtimeWhiteboardChannel, WHITEBOARD_INTERACTION_NOTE_THROTTLE_MS\n} from '../lib/components/realtime/whiteboard/whiteboard-channel';\nimport {\n RealtimeWhiteboardHostComponent, WHITEBOARD_TOOL_DEFINITIONS, WHITEBOARD_TOOL_PREFIX,\n WhiteboardToolResult, WhiteboardWidgetInteractionEvent, WhiteboardWidgetSubmitEvent\n} from '@memberjunction/ng-whiteboard';\n\n/**\n * The LIVE WHITEBOARD as a registry plugin — contract metadata, ClassFactory registration,\n * the no-surface ApplyAgentTool fallback (panel collapsed), surface binding/unbinding, the\n * save-on-mutation pipeline and Dispose. The \"surface\" here is a STRUCTURAL fake (the real\n * component needs an Angular injection context); the plugin only touches the members the\n * fake provides.\n */\n\n/** Structural stand-in for the bound board host. */\nclass FakeWhiteboardHost {\n public State: unknown = null;\n public AgentName = '';\n public FocusMode = false;\n public SceneDelta = new EventEmitter<string>();\n public AgentUndo = new EventEmitter<void>();\n public FocusModeChange = new EventEmitter<boolean>();\n public SaveToArtifactsRequested = new EventEmitter<void>();\n public WidgetSubmitted = new EventEmitter<WhiteboardWidgetSubmitEvent>();\n public WidgetInteraction = new EventEmitter<WhiteboardWidgetInteractionEvent>();\n public AppliedTools: Array<{ ToolName: string; ArgsJson: string }> = [];\n\n public ApplyAgentTool(toolName: string, argsJson: string): string {\n this.AppliedTools.push({ ToolName: toolName, ArgsJson: argsJson });\n return JSON.stringify({ success: true, itemId: 'host-item', summary: 'host applied' });\n }\n\n public ToggleFocus(): void {\n this.FocusMode = !this.FocusMode;\n this.FocusModeChange.emit(this.FocusMode);\n }\n}\n\nfunction asHost(fake: FakeWhiteboardHost): RealtimeWhiteboardHostComponent {\n return fake as unknown as RealtimeWhiteboardHostComponent;\n}\n\ninterface CtxLog {\n Notes: string[];\n Spoken: string[];\n Saves: string[];\n Focus: boolean[];\n}\n\nfunction makeContext(log: CtxLog): RealtimeChannelContext {\n return {\n AgentName: 'Sage',\n SendContextNote: (text: string) => log.Notes.push(text),\n RequestSpokenResponse: (instructions: string) => log.Spoken.push(instructions),\n RequestSave: (stateJson: string) => log.Saves.push(stateJson),\n SetFocusMode: (on: boolean) => log.Focus.push(on),\n SaveAsArtifact: async () => null,\n AgentSessionID: null,\n ExecuteServerAction: async () => null\n };\n}\n\ndescribe('RealtimeWhiteboardChannel — plugin contract', () => {\n let channel: RealtimeWhiteboardChannel;\n let log: CtxLog;\n\n beforeEach(() => {\n channel = new RealtimeWhiteboardChannel();\n log = { Notes: [], Spoken: [], Saves: [], Focus: [] };\n channel.Initialize(makeContext(log));\n });\n\n it('is resolvable from the ClassFactory by its registry ClientPluginClass key', () => {\n const registration = MJGlobal.Instance.ClassFactory.GetRegistration(BaseRealtimeChannelClient, 'RealtimeWhiteboardChannel');\n expect(registration).toBeTruthy();\n const instance = MJGlobal.Instance.ClassFactory.CreateInstance<BaseRealtimeChannelClient>(\n BaseRealtimeChannelClient, 'RealtimeWhiteboardChannel'\n );\n expect(instance).toBeInstanceOf(RealtimeWhiteboardChannel);\n });\n\n it('contributes the channel contract: name, prefix, tab chrome, tool set, surface', () => {\n expect(channel.ChannelName).toBe('Whiteboard');\n expect(channel.ToolNamePrefix).toBe(WHITEBOARD_TOOL_PREFIX);\n expect(channel.TabTitle).toBe('Whiteboard');\n expect(channel.TabIcon).toBe('fa-solid fa-chalkboard');\n expect(channel.GetToolDefinitions()).toBe(WHITEBOARD_TOOL_DEFINITIONS);\n expect(channel.GetSurfaceComponent()).toBe(RealtimeWhiteboardHostComponent);\n });\n\n it('supplies first-run onboarding details (heading, description, tips, icon)', () => {\n const details = channel.GetOnboardingDetails();\n expect(details).not.toBeNull();\n expect(details?.Heading).toBe('Whiteboard');\n expect(details?.IconClass).toBe('fa-solid fa-chalkboard');\n expect(details?.Description?.length).toBeGreaterThan(0);\n expect((details?.Tips?.length ?? 0)).toBeGreaterThan(0);\n });\n\n it('ApplyAgentTool with NO surface bound falls back to the pure engine (collapsed panel)', () => {\n const resultJson = channel.ApplyAgentTool('Whiteboard_AddNote', JSON.stringify({ text: 'hello' }));\n const result = JSON.parse(resultJson) as WhiteboardToolResult;\n\n expect(result.success).toBe(true);\n expect(channel.State.ElementCount).toBe(1);\n expect(channel.State.CountByAuthor('agent')).toBe(1);\n });\n\n it('every board mutation requests a state-of-record save (user edits AND agent tools)', () => {\n channel.ApplyAgentTool('Whiteboard_AddNote', JSON.stringify({ text: 'note' }));\n expect(log.Saves.length).toBeGreaterThan(0);\n const lastSave = JSON.parse(log.Saves[log.Saves.length - 1]) as { Items?: unknown[] };\n expect(JSON.stringify(lastSave)).toBe(channel.SerializeState());\n });\n\n it('BindSurface wires inputs + outputs; tools then route through the host (UI garnish path)', () => {\n const fake = new FakeWhiteboardHost();\n channel.BindSurface(asHost(fake));\n\n expect(fake.State).toBe(channel.State);\n expect(fake.AgentName).toBe('Sage');\n\n const resultJson = channel.ApplyAgentTool('Whiteboard_AddNote', JSON.stringify({ text: 'via host' }));\n expect(fake.AppliedTools).toEqual([{ ToolName: 'Whiteboard_AddNote', ArgsJson: JSON.stringify({ text: 'via host' }) }]);\n expect((JSON.parse(resultJson) as WhiteboardToolResult).itemId).toBe('host-item');\n\n fake.SceneDelta.emit('{\"added\":[1]}');\n fake.AgentUndo.emit();\n fake.FocusModeChange.emit(true);\n // scene deltas carry the perception ETIQUETTE inline (don't comment on minor edits)\n expect(log.Notes).toHaveLength(2);\n expect(log.Notes[0]).toContain('[whiteboard] board update');\n expect(log.Notes[0]).toContain('do NOT comment on minor edits');\n expect(log.Notes[0]).toContain('{\"added\":[1]}');\n expect(log.Notes[1]).toBe('[whiteboard] user undid your last change');\n expect(log.Focus).toEqual([true]);\n });\n\n it('routes widget MJWhiteboard.submit input to the agent as a [whiteboard] context note', () => {\n const fake = new FakeWhiteboardHost();\n channel.BindSurface(asHost(fake));\n\n fake.WidgetSubmitted.emit({ ItemID: 'html-2', Title: 'Quick quiz', DataJson: '{\"answer\":\"Mercury\"}' });\n expect(log.Notes).toHaveLength(1);\n expect(log.Notes[0]).toBe('[whiteboard] the user submitted input in widget \"Quick quiz\": {\"answer\":\"Mercury\"}');\n // …and the model is asked to REACT audibly (SendContextNote alone is silent by contract)\n expect(log.Spoken).toHaveLength(1);\n expect(log.Spoken[0]).toContain('Quick quiz');\n expect(log.Spoken[0]).toContain('{\"answer\":\"Mercury\"}');\n expect(log.Spoken[0]).toContain('React to it now');\n\n // untitled widgets fall back to the item ID\n fake.WidgetSubmitted.emit({ ItemID: 'html-3', Title: '', DataJson: '{\"ok\":true}' });\n expect(log.Notes[1]).toBe('[whiteboard] the user submitted input in widget \"html-3\": {\"ok\":true}');\n\n // released with the surface, like the other output subscriptions\n channel.UnbindSurface();\n fake.WidgetSubmitted.emit({ ItemID: 'html-2', Title: 'Quick quiz', DataJson: '{\"stale\":true}' });\n expect(log.Notes).toHaveLength(2);\n });\n\n describe('ambient widget-interaction notes — per-widget throttle (latest wins)', () => {\n function interaction(itemId: string, summary: string, title = 'Vibe picker'): WhiteboardWidgetInteractionEvent {\n return { ItemID: itemId, Title: title, Summary: summary };\n }\n\n beforeEach(() => {\n vi.useFakeTimers();\n });\n\n afterEach(() => {\n vi.useRealTimers();\n });\n\n it('first activity in a widget sends a note IMMEDIATELY with the ambient framing', () => {\n const fake = new FakeWhiteboardHost();\n channel.BindSurface(asHost(fake));\n\n fake.WidgetInteraction.emit(interaction('html-2', 'clicked \"Playful pink\"; changed \"vibe\" to \"pink\"'));\n expect(log.Notes).toHaveLength(1);\n expect(log.Notes[0]).toBe(\n '[whiteboard] ambient activity in widget \"Vibe picker\" ' +\n '(background — do NOT respond unless it is significant or you are asked; ' +\n 'explicit submissions arrive separately): clicked \"Playful pink\"; changed \"vibe\" to \"pink\"');\n });\n\n it('untitled widgets fall back to the item ID in the framing', () => {\n const fake = new FakeWhiteboardHost();\n channel.BindSurface(asHost(fake));\n\n fake.WidgetInteraction.emit(interaction('html-7', 'typing in \"email\"', ''));\n expect(log.Notes[0]).toContain('ambient activity in widget \"html-7\"');\n });\n\n it('within the window further activity coalesces — ONE trailing note, LATEST summary wins', () => {\n const fake = new FakeWhiteboardHost();\n channel.BindSurface(asHost(fake));\n\n fake.WidgetInteraction.emit(interaction('html-2', 'first'));\n fake.WidgetInteraction.emit(interaction('html-2', 'second'));\n fake.WidgetInteraction.emit(interaction('html-2', 'third'));\n expect(log.Notes).toHaveLength(1); // only the immediate first note so far\n\n vi.advanceTimersByTime(WHITEBOARD_INTERACTION_NOTE_THROTTLE_MS);\n expect(log.Notes).toHaveLength(2);\n expect(log.Notes[1]).toContain(': third'); // latest summary won\n expect(log.Notes.some((n) => n.includes(': second'))).toBe(false);\n });\n\n it('the trailing send opens a NEW window — chatty widgets stay at ≤1 note per window', () => {\n const fake = new FakeWhiteboardHost();\n channel.BindSurface(asHost(fake));\n\n fake.WidgetInteraction.emit(interaction('html-2', 'a')); // sent immediately\n fake.WidgetInteraction.emit(interaction('html-2', 'b')); // deferred\n vi.advanceTimersByTime(WHITEBOARD_INTERACTION_NOTE_THROTTLE_MS); // 'b' sent\n fake.WidgetInteraction.emit(interaction('html-2', 'c')); // inside b's window → deferred\n expect(log.Notes).toHaveLength(2);\n vi.advanceTimersByTime(WHITEBOARD_INTERACTION_NOTE_THROTTLE_MS);\n expect(log.Notes).toHaveLength(3);\n expect(log.Notes[2]).toContain(': c');\n });\n\n it('after a QUIET window expires, the next activity sends immediately again', () => {\n const fake = new FakeWhiteboardHost();\n channel.BindSurface(asHost(fake));\n\n fake.WidgetInteraction.emit(interaction('html-2', 'early'));\n vi.advanceTimersByTime(WHITEBOARD_INTERACTION_NOTE_THROTTLE_MS + 1);\n fake.WidgetInteraction.emit(interaction('html-2', 'late'));\n expect(log.Notes).toHaveLength(2);\n expect(log.Notes[1]).toContain(': late');\n });\n\n it('throttles PER WIDGET — concurrent widgets do not share a window', () => {\n const fake = new FakeWhiteboardHost();\n channel.BindSurface(asHost(fake));\n\n fake.WidgetInteraction.emit(interaction('html-2', 'in widget two'));\n fake.WidgetInteraction.emit(interaction('html-3', 'in widget three', 'Other'));\n expect(log.Notes).toHaveLength(2);\n expect(log.Notes[0]).toContain('\"Vibe picker\"');\n expect(log.Notes[1]).toContain('\"Other\"');\n });\n\n it('UnbindSurface cancels pending trailing notes (nothing stale reaches the agent)', () => {\n const fake = new FakeWhiteboardHost();\n channel.BindSurface(asHost(fake));\n\n fake.WidgetInteraction.emit(interaction('html-2', 'sent'));\n fake.WidgetInteraction.emit(interaction('html-2', 'pending'));\n channel.UnbindSurface();\n vi.advanceTimersByTime(WHITEBOARD_INTERACTION_NOTE_THROTTLE_MS * 2);\n expect(log.Notes).toHaveLength(1); // the pending trailing note was canceled\n\n // and the released surface's emitter no longer reaches the channel at all\n fake.WidgetInteraction.emit(interaction('html-2', 'stale'));\n expect(log.Notes).toHaveLength(1);\n });\n });\n\n it('UnbindSurface flips back to the engine fallback and stops listening to old outputs', () => {\n const fake = new FakeWhiteboardHost();\n channel.BindSurface(asHost(fake));\n channel.UnbindSurface();\n\n channel.ApplyAgentTool('Whiteboard_AddNote', JSON.stringify({ text: 'after unbind' }));\n expect(fake.AppliedTools).toEqual([]); // host no longer consulted\n expect(channel.State.ElementCount).toBe(1); // engine applied it\n\n fake.SceneDelta.emit('{\"stale\":true}');\n expect(log.Notes).toEqual([]); // old subscription released\n });\n\n it('re-binding a NEW surface replaces the old one (pane recreated after collapse/expand)', () => {\n const first = new FakeWhiteboardHost();\n const second = new FakeWhiteboardHost();\n channel.BindSurface(asHost(first));\n channel.BindSurface(asHost(second));\n\n channel.ApplyAgentTool('Whiteboard_AddText', JSON.stringify({ text: 'x' }));\n expect(first.AppliedTools).toEqual([]);\n expect(second.AppliedTools).toHaveLength(1);\n\n first.SceneDelta.emit('{\"old\":true}');\n expect(log.Notes).toEqual([]); // first surface's outputs were unsubscribed\n });\n\n it('RequestFocusExit leaves focus THROUGH the bound host so its toggle stays in sync', () => {\n const fake = new FakeWhiteboardHost();\n channel.BindSurface(asHost(fake));\n fake.ToggleFocus(); // enter focus → SetFocusMode(true)\n expect(log.Focus).toEqual([true]);\n\n channel.RequestFocusExit();\n expect(fake.FocusMode).toBe(false);\n expect(log.Focus).toEqual([true, false]);\n\n channel.RequestFocusExit(); // not in focus → no double-toggle\n expect(log.Focus).toEqual([true, false]);\n });\n\n it('Dispose releases the surface, the state subscription and the context', () => {\n const fake = new FakeWhiteboardHost();\n channel.BindSurface(asHost(fake));\n channel.Dispose();\n\n // State mutations no longer request saves…\n const savesBefore = log.Saves.length;\n channel.State.AddItem({ Kind: 'text', X: 0, Y: 0, Text: 'post-dispose' }, 'user');\n expect(log.Saves.length).toBe(savesBefore);\n\n // …and tool calls fall back to the engine (no host).\n const spy = vi.spyOn(fake, 'ApplyAgentTool');\n channel.ApplyAgentTool('Whiteboard_AddNote', JSON.stringify({ text: 'still works' }));\n expect(spy).not.toHaveBeenCalled();\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whiteboard-restore-state.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/whiteboard-restore-state.test.ts"],"names":[],"mappings":"AAEA,OAAO,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// The whiteboard channel imports its Angular surface component (partial-compiled Angular
|
|
2
|
+
// libs require the JIT compiler in this node test environment), so load the compiler FIRST.
|
|
3
|
+
import '@angular/compiler';
|
|
4
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
5
|
+
import { BaseRealtimeChannelClient } from '../lib/components/realtime/channels/base-realtime-channel-client';
|
|
6
|
+
import { RealtimeWhiteboardChannel } from '../lib/components/realtime/whiteboard/whiteboard-channel';
|
|
7
|
+
/**
|
|
8
|
+
* The RestoreState hook — base-class default (channels keep no state → false) and the
|
|
9
|
+
* whiteboard implementation: a prior session's saved board round-trips into THIS session's
|
|
10
|
+
* engine in place; malformed/incompatible payloads return false, never throw, and leave
|
|
11
|
+
* the board fresh.
|
|
12
|
+
*/
|
|
13
|
+
/** Stand-in surface for the stateless test channel. */
|
|
14
|
+
class NullSurface {
|
|
15
|
+
}
|
|
16
|
+
/** Minimal concrete channel that exercises the BASE-CLASS defaults only. */
|
|
17
|
+
class StatelessChannel extends BaseRealtimeChannelClient {
|
|
18
|
+
get ChannelName() { return 'Stateless'; }
|
|
19
|
+
get ToolNamePrefix() { return 'Stateless_'; }
|
|
20
|
+
get TabTitle() { return 'Stateless'; }
|
|
21
|
+
get TabIcon() { return 'fa-solid fa-cube'; }
|
|
22
|
+
GetToolDefinitions() { return []; }
|
|
23
|
+
ApplyAgentTool() { return '{}'; }
|
|
24
|
+
GetSurfaceComponent() { return NullSurface; }
|
|
25
|
+
BindSurface() { }
|
|
26
|
+
}
|
|
27
|
+
function makeContext(log) {
|
|
28
|
+
return {
|
|
29
|
+
AgentName: 'Sage',
|
|
30
|
+
SendContextNote: () => undefined,
|
|
31
|
+
RequestSave: (stateJson) => log.Saves.push(stateJson),
|
|
32
|
+
SetFocusMode: () => undefined,
|
|
33
|
+
SaveAsArtifact: async () => null,
|
|
34
|
+
AgentSessionID: null,
|
|
35
|
+
ExecuteServerAction: async () => null
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
describe('BaseRealtimeChannelClient.RestoreState — default', () => {
|
|
39
|
+
it('returns false (a stateless channel ignores any saved payload)', () => {
|
|
40
|
+
const channel = new StatelessChannel();
|
|
41
|
+
channel.Initialize(makeContext({ Saves: [] }));
|
|
42
|
+
expect(channel.RestoreState('{"anything": true}')).toBe(false);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe('RealtimeWhiteboardChannel.RestoreState', () => {
|
|
46
|
+
let channel;
|
|
47
|
+
let log;
|
|
48
|
+
beforeEach(() => {
|
|
49
|
+
channel = new RealtimeWhiteboardChannel();
|
|
50
|
+
log = { Saves: [] };
|
|
51
|
+
channel.Initialize(makeContext(log));
|
|
52
|
+
});
|
|
53
|
+
/** A prior session's saved board: styled sticky + text + a shape, via a throwaway channel. */
|
|
54
|
+
function priorSessionState() {
|
|
55
|
+
const prior = new RealtimeWhiteboardChannel();
|
|
56
|
+
prior.Initialize(makeContext({ Saves: [] }));
|
|
57
|
+
prior.State.AddItem({
|
|
58
|
+
Kind: 'sticky', X: 40, Y: 60, Text: 'carried over', FontSize: 24, FontFamily: 'serif', FontWeight: 700
|
|
59
|
+
}, 'user');
|
|
60
|
+
prior.State.AddItem({ Kind: 'text', X: 200, Y: 80, Text: 'styled label', FontSize: 18, Color: '#0ea5e9' }, 'agent');
|
|
61
|
+
prior.State.AddItem({ Kind: 'shape', Shape: 'diamond', X: 300, Y: 200, W: 120, H: 80, Label: 'Decision' }, 'agent');
|
|
62
|
+
const json = prior.SerializeState();
|
|
63
|
+
expect(json).toBeTruthy();
|
|
64
|
+
return json;
|
|
65
|
+
}
|
|
66
|
+
it('restores a valid prior-session board IN PLACE — items (and style fields) round-trip', () => {
|
|
67
|
+
const saved = priorSessionState();
|
|
68
|
+
const engineBefore = channel.State;
|
|
69
|
+
expect(channel.RestoreState(saved)).toBe(true);
|
|
70
|
+
expect(channel.State).toBe(engineBefore); // same engine instance — subscriptions intact
|
|
71
|
+
expect(channel.State.ElementCount).toBe(3);
|
|
72
|
+
expect(channel.State.CountByAuthor('user')).toBe(1);
|
|
73
|
+
expect(channel.State.CountByAuthor('agent')).toBe(2);
|
|
74
|
+
const sticky = channel.State.Items.find((i) => i.Kind === 'sticky');
|
|
75
|
+
expect(sticky.Text).toBe('carried over');
|
|
76
|
+
expect(sticky.FontSize).toBe(24);
|
|
77
|
+
expect(sticky.FontFamily).toBe('serif');
|
|
78
|
+
expect(sticky.FontWeight).toBe(700);
|
|
79
|
+
const text = channel.State.Items.find((i) => i.Kind === 'text');
|
|
80
|
+
expect(text.Color).toBe('#0ea5e9');
|
|
81
|
+
// the restored board re-serializes to the same items (the restore's own 'replace'
|
|
82
|
+
// change bumps the engine seq, so compare the items payload, not the raw string)
|
|
83
|
+
const reserialized = JSON.parse(channel.SerializeState());
|
|
84
|
+
expect(reserialized.items).toEqual(JSON.parse(saved).items);
|
|
85
|
+
});
|
|
86
|
+
it('keeps the save pipeline live after restore (mutations still persist)', () => {
|
|
87
|
+
channel.RestoreState(priorSessionState());
|
|
88
|
+
const savesBefore = log.Saves.length;
|
|
89
|
+
channel.ApplyAgentTool('Whiteboard_AddNote', JSON.stringify({ text: 'post-restore' }));
|
|
90
|
+
expect(log.Saves.length).toBeGreaterThan(savesBefore);
|
|
91
|
+
expect(channel.State.ElementCount).toBe(4);
|
|
92
|
+
});
|
|
93
|
+
it('returns false on garbage JSON and leaves the board fresh (never throws)', () => {
|
|
94
|
+
expect(channel.RestoreState('not json at all {{{')).toBe(false);
|
|
95
|
+
expect(channel.State.ElementCount).toBe(0);
|
|
96
|
+
});
|
|
97
|
+
it('returns false on well-formed but incompatible payloads, preserving current state', () => {
|
|
98
|
+
channel.State.AddItem({ Kind: 'text', X: 0, Y: 0, Text: 'pre-existing' }, 'user');
|
|
99
|
+
expect(channel.RestoreState('{"items": 42}')).toBe(false);
|
|
100
|
+
expect(channel.RestoreState('null')).toBe(false);
|
|
101
|
+
expect(channel.RestoreState('"just a string"')).toBe(false);
|
|
102
|
+
expect(channel.RestoreState('[]')).toBe(false);
|
|
103
|
+
expect(channel.State.ElementCount).toBe(1); // untouched
|
|
104
|
+
const text = channel.State.Items[0];
|
|
105
|
+
expect(text.Text).toBe('pre-existing');
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
//# sourceMappingURL=whiteboard-restore-state.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whiteboard-restore-state.test.js","sourceRoot":"","sources":["../../src/__tests__/whiteboard-restore-state.test.ts"],"names":[],"mappings":"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","sourcesContent":["// The whiteboard channel imports its Angular surface component (partial-compiled Angular\n// libs require the JIT compiler in this node test environment), so load the compiler FIRST.\nimport '@angular/compiler';\nimport { describe, it, expect, beforeEach } from 'vitest';\nimport type { Type } from '@angular/core';\nimport { RealtimeToolDefinition } from '@memberjunction/ai';\nimport { BaseRealtimeChannelClient, RealtimeChannelContext } from '../lib/components/realtime/channels/base-realtime-channel-client';\nimport { RealtimeWhiteboardChannel } from '../lib/components/realtime/whiteboard/whiteboard-channel';\nimport { WhiteboardStickyItem, WhiteboardTextItem } from '@memberjunction/ng-whiteboard';\n\n/**\n * The RestoreState hook — base-class default (channels keep no state → false) and the\n * whiteboard implementation: a prior session's saved board round-trips into THIS session's\n * engine in place; malformed/incompatible payloads return false, never throw, and leave\n * the board fresh.\n */\n\n/** Stand-in surface for the stateless test channel. */\nclass NullSurface {}\n\n/** Minimal concrete channel that exercises the BASE-CLASS defaults only. */\nclass StatelessChannel extends BaseRealtimeChannelClient<NullSurface> {\n public get ChannelName(): string { return 'Stateless'; }\n public get ToolNamePrefix(): string { return 'Stateless_'; }\n public get TabTitle(): string { return 'Stateless'; }\n public get TabIcon(): string { return 'fa-solid fa-cube'; }\n public GetToolDefinitions(): RealtimeToolDefinition[] { return []; }\n public ApplyAgentTool(): string { return '{}'; }\n public GetSurfaceComponent(): Type<NullSurface> { return NullSurface; }\n public BindSurface(): void { /* no surface */ }\n}\n\ninterface CtxLog {\n Saves: string[];\n}\n\nfunction makeContext(log: CtxLog): RealtimeChannelContext {\n return {\n AgentName: 'Sage',\n SendContextNote: () => undefined,\n RequestSave: (stateJson: string) => log.Saves.push(stateJson),\n SetFocusMode: () => undefined,\n SaveAsArtifact: async () => null,\n AgentSessionID: null,\n ExecuteServerAction: async () => null\n };\n}\n\ndescribe('BaseRealtimeChannelClient.RestoreState — default', () => {\n it('returns false (a stateless channel ignores any saved payload)', () => {\n const channel = new StatelessChannel();\n channel.Initialize(makeContext({ Saves: [] }));\n expect(channel.RestoreState('{\"anything\": true}')).toBe(false);\n });\n});\n\ndescribe('RealtimeWhiteboardChannel.RestoreState', () => {\n let channel: RealtimeWhiteboardChannel;\n let log: CtxLog;\n\n beforeEach(() => {\n channel = new RealtimeWhiteboardChannel();\n log = { Saves: [] };\n channel.Initialize(makeContext(log));\n });\n\n /** A prior session's saved board: styled sticky + text + a shape, via a throwaway channel. */\n function priorSessionState(): string {\n const prior = new RealtimeWhiteboardChannel();\n prior.Initialize(makeContext({ Saves: [] }));\n prior.State.AddItem({\n Kind: 'sticky', X: 40, Y: 60, Text: 'carried over', FontSize: 24, FontFamily: 'serif', FontWeight: 700\n }, 'user');\n prior.State.AddItem({ Kind: 'text', X: 200, Y: 80, Text: 'styled label', FontSize: 18, Color: '#0ea5e9' }, 'agent');\n prior.State.AddItem({ Kind: 'shape', Shape: 'diamond', X: 300, Y: 200, W: 120, H: 80, Label: 'Decision' }, 'agent');\n const json = prior.SerializeState();\n expect(json).toBeTruthy();\n return json as string;\n }\n\n it('restores a valid prior-session board IN PLACE — items (and style fields) round-trip', () => {\n const saved = priorSessionState();\n const engineBefore = channel.State;\n\n expect(channel.RestoreState(saved)).toBe(true);\n\n expect(channel.State).toBe(engineBefore); // same engine instance — subscriptions intact\n expect(channel.State.ElementCount).toBe(3);\n expect(channel.State.CountByAuthor('user')).toBe(1);\n expect(channel.State.CountByAuthor('agent')).toBe(2);\n\n const sticky = channel.State.Items.find((i) => i.Kind === 'sticky') as WhiteboardStickyItem;\n expect(sticky.Text).toBe('carried over');\n expect(sticky.FontSize).toBe(24);\n expect(sticky.FontFamily).toBe('serif');\n expect(sticky.FontWeight).toBe(700);\n\n const text = channel.State.Items.find((i) => i.Kind === 'text') as WhiteboardTextItem;\n expect(text.Color).toBe('#0ea5e9');\n\n // the restored board re-serializes to the same items (the restore's own 'replace'\n // change bumps the engine seq, so compare the items payload, not the raw string)\n const reserialized = JSON.parse(channel.SerializeState() as string) as { items: unknown[] };\n expect(reserialized.items).toEqual((JSON.parse(saved) as { items: unknown[] }).items);\n });\n\n it('keeps the save pipeline live after restore (mutations still persist)', () => {\n channel.RestoreState(priorSessionState());\n const savesBefore = log.Saves.length;\n channel.ApplyAgentTool('Whiteboard_AddNote', JSON.stringify({ text: 'post-restore' }));\n expect(log.Saves.length).toBeGreaterThan(savesBefore);\n expect(channel.State.ElementCount).toBe(4);\n });\n\n it('returns false on garbage JSON and leaves the board fresh (never throws)', () => {\n expect(channel.RestoreState('not json at all {{{')).toBe(false);\n expect(channel.State.ElementCount).toBe(0);\n });\n\n it('returns false on well-formed but incompatible payloads, preserving current state', () => {\n channel.State.AddItem({ Kind: 'text', X: 0, Y: 0, Text: 'pre-existing' }, 'user');\n\n expect(channel.RestoreState('{\"items\": 42}')).toBe(false);\n expect(channel.RestoreState('null')).toBe(false);\n expect(channel.RestoreState('\"just a string\"')).toBe(false);\n expect(channel.RestoreState('[]')).toBe(false);\n\n expect(channel.State.ElementCount).toBe(1); // untouched\n const text = channel.State.Items[0] as WhiteboardTextItem;\n expect(text.Text).toBe('pre-existing');\n });\n});\n"]}
|
|
@@ -26,6 +26,10 @@ export declare class CollectionsFullViewComponent extends BaseAngularComponent i
|
|
|
26
26
|
collectionId: string | null;
|
|
27
27
|
versionId?: string | null;
|
|
28
28
|
}>;
|
|
29
|
+
/** Emitted when the user asks to open the conversation an artifact was produced in. */
|
|
30
|
+
openConversationRequested: EventEmitter<{
|
|
31
|
+
conversationId: string;
|
|
32
|
+
}>;
|
|
29
33
|
collections: MJCollectionEntity[];
|
|
30
34
|
artifactVersions: Array<{
|
|
31
35
|
version: MJArtifactVersionEntity;
|
|
@@ -75,6 +79,34 @@ export declare class CollectionsFullViewComponent extends BaseAngularComponent i
|
|
|
75
79
|
y: number;
|
|
76
80
|
};
|
|
77
81
|
contextMenuItem: CollectionViewItem | null;
|
|
82
|
+
/** "Move to Collection" submenu state (within the artifact context menu). */
|
|
83
|
+
showMoveSubmenu: boolean;
|
|
84
|
+
isLoadingMoveTargets: boolean;
|
|
85
|
+
moveTargets: Array<{
|
|
86
|
+
collection: MJCollectionEntity;
|
|
87
|
+
depth: number;
|
|
88
|
+
}>;
|
|
89
|
+
/** Anchor index (into unifiedItems) for shift-click range selection. */
|
|
90
|
+
private lastSelectedIndex;
|
|
91
|
+
/** Drag-and-drop state. draggedItemIds = the item ids being dragged (1 or the whole selection). */
|
|
92
|
+
draggedItemIds: string[];
|
|
93
|
+
/** Tag of the current drop target for highlight: item id, 'root', 'crumb:<id>', or 'nav:<id>'. */
|
|
94
|
+
dragOverTargetId: string | null;
|
|
95
|
+
/** Bulk "Move to…" popover (selection toolbar). */
|
|
96
|
+
showBulkMovePopover: boolean;
|
|
97
|
+
/** All accessible collections (navigator pane + move targets + folder-cycle checks). */
|
|
98
|
+
allCollections: MJCollectionEntity[];
|
|
99
|
+
private allCollectionsById;
|
|
100
|
+
navigatorNodes: Array<{
|
|
101
|
+
collection: MJCollectionEntity;
|
|
102
|
+
depth: number;
|
|
103
|
+
}>;
|
|
104
|
+
showNavigator: boolean;
|
|
105
|
+
/** Staging shelf: items held across navigation, then dropped into a destination collection. */
|
|
106
|
+
shelf: Array<{
|
|
107
|
+
item: CollectionViewItem;
|
|
108
|
+
sourceCollectionId: string | null;
|
|
109
|
+
}>;
|
|
78
110
|
private destroy$;
|
|
79
111
|
private isNavigatingProgrammatically;
|
|
80
112
|
constructor(dialogService: DialogService, artifactState: ArtifactStateService, collectionState: CollectionStateService, permissionService: CollectionPermissionService, artifactIconService: ArtifactIconService, cdr: ChangeDetectorRef);
|
|
@@ -91,7 +123,9 @@ export declare class CollectionsFullViewComponent extends BaseAngularComponent i
|
|
|
91
123
|
loadData(): Promise<void>;
|
|
92
124
|
private loadCollections;
|
|
93
125
|
/**
|
|
94
|
-
* Load item counts (child collections + artifacts) for all visible collections
|
|
126
|
+
* Load item counts (child collections + artifacts) for all visible collections.
|
|
127
|
+
* `bypassCache` is passed right after a mutation so the count badges reflect committed
|
|
128
|
+
* DB state immediately (cache invalidation is async relative to Save/Delete resolving).
|
|
95
129
|
*/
|
|
96
130
|
private loadItemCounts;
|
|
97
131
|
private loadUserPermissions;
|
|
@@ -240,11 +274,80 @@ export declare class CollectionsFullViewComponent extends BaseAngularComponent i
|
|
|
240
274
|
/** Clamp menu position to keep it within the viewport */
|
|
241
275
|
private clampContextMenuPosition;
|
|
242
276
|
closeContextMenu(): void;
|
|
277
|
+
/** Opens the inline "Move to Collection" submenu and loads candidate target collections. */
|
|
278
|
+
openMoveSubmenu(event: Event): void;
|
|
279
|
+
closeMoveSubmenu(event: Event): void;
|
|
280
|
+
/** Loads every collection the user can access in this environment (flattened, indented), minus the current one. */
|
|
281
|
+
private loadMoveTargets;
|
|
282
|
+
/** Flattens collections into a depth-first, indented list (orphans treated as roots). */
|
|
283
|
+
private flattenCollectionTree;
|
|
284
|
+
/**
|
|
285
|
+
* Moves the right-clicked artifact version from the current collection to the target.
|
|
286
|
+
* Adds to the target first (so a failure never drops it from the source), then removes
|
|
287
|
+
* the version's join row from the source collection.
|
|
288
|
+
*/
|
|
289
|
+
moveArtifactToCollection(target: MJCollectionEntity): Promise<void>;
|
|
243
290
|
/** Handle context menu action dispatch */
|
|
244
291
|
onContextMenuAction(action: string): void;
|
|
292
|
+
/**
|
|
293
|
+
* Resolves the artifact version the user right-clicked to the conversation it was produced in,
|
|
294
|
+
* then asks the host to open it. Chain: Artifact Version → Conversation Detail Artifacts
|
|
295
|
+
* (prefer Direction='Output' = produced here) → Conversation Detail → ConversationID.
|
|
296
|
+
*/
|
|
297
|
+
private openSourceConversation;
|
|
298
|
+
private resolveArtifactToConversation;
|
|
245
299
|
/** Close context menu on Escape key */
|
|
246
300
|
onEscapeKey(): void;
|
|
301
|
+
private indexOfItem;
|
|
302
|
+
/** Re-sync each item's `selected` flag from the set without rebuilding (preserves page). */
|
|
303
|
+
private refreshSelectionFlags;
|
|
304
|
+
/**
|
|
305
|
+
* Centralized selection gesture used by both the hover checkbox and modifier-clicks.
|
|
306
|
+
* - shift → range select from the last anchor
|
|
307
|
+
* - cmd/ctrl → additive toggle
|
|
308
|
+
* - plain → additive toggle (checkbox) or replace (plainReplaces, used by body clicks)
|
|
309
|
+
*/
|
|
310
|
+
private applySelectionGesture;
|
|
311
|
+
/** Hover-checkbox click — selects without requiring an explicit "select mode". */
|
|
312
|
+
onCheckboxClick(item: CollectionViewItem, event: MouseEvent): void;
|
|
313
|
+
onItemDragStart(item: CollectionViewItem, event: DragEvent): void;
|
|
314
|
+
onItemDragEnd(): void;
|
|
315
|
+
private draggedItems;
|
|
316
|
+
/** Folder grid card / list row as a drop target. */
|
|
317
|
+
onFolderItemDragOver(folderItem: CollectionViewItem, event: DragEvent): void;
|
|
318
|
+
onFolderItemDrop(folderItem: CollectionViewItem, event: DragEvent): void;
|
|
319
|
+
/** Breadcrumb crumb / Home root as a drop target. crumbId null = top level. */
|
|
320
|
+
onCrumbDragOver(crumbId: string | null, event: DragEvent): void;
|
|
321
|
+
onCrumbDrop(crumbId: string | null, event: DragEvent): void;
|
|
322
|
+
/** True when the dragged set may be dropped on the target collection (blocks folder cycles). */
|
|
323
|
+
private canDropOnCollection;
|
|
324
|
+
private isCollectionDescendant;
|
|
325
|
+
private moveDraggedItemsTo;
|
|
326
|
+
/**
|
|
327
|
+
* Moves items into the target collection. Artifacts: add the version to the target and remove
|
|
328
|
+
* it from its source collection. Folders: reparent (target null = top level). Skips no-ops and
|
|
329
|
+
* invalid folder moves (cycles). Reloads and rebuilds when done.
|
|
330
|
+
*/
|
|
331
|
+
private moveItemsTo;
|
|
332
|
+
private addVersionToCollection;
|
|
333
|
+
private removeVersionFromCollection;
|
|
334
|
+
private reparentCollection;
|
|
335
|
+
loadAllCollections(bypassCache?: boolean): Promise<void>;
|
|
336
|
+
toggleNavigator(): void;
|
|
337
|
+
navigatorClick(collection: MJCollectionEntity): void;
|
|
338
|
+
isCurrentNavigator(collection: MJCollectionEntity): boolean;
|
|
339
|
+
onNavigatorDragOver(collection: MJCollectionEntity, event: DragEvent): void;
|
|
340
|
+
onNavigatorDrop(collection: MJCollectionEntity, event: DragEvent): void;
|
|
341
|
+
onDragLeave(tag: string): void;
|
|
342
|
+
openBulkMove(event: Event): void;
|
|
343
|
+
closeBulkMove(): void;
|
|
344
|
+
bulkMoveTo(collection: MJCollectionEntity): Promise<void>;
|
|
345
|
+
stageSelected(): void;
|
|
346
|
+
removeFromShelf(id: string): void;
|
|
347
|
+
clearShelf(): void;
|
|
348
|
+
/** Moves all staged items into the currently-open collection. */
|
|
349
|
+
dropShelfHere(): Promise<void>;
|
|
247
350
|
static ɵfac: i0.ɵɵFactoryDeclaration<CollectionsFullViewComponent, never>;
|
|
248
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CollectionsFullViewComponent, "mj-collections-full-view", never, { "environmentId": { "alias": "environmentId"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; }, { "collectionNavigated": "collectionNavigated"; }, never, never, false, never>;
|
|
351
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CollectionsFullViewComponent, "mj-collections-full-view", never, { "environmentId": { "alias": "environmentId"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; }, { "collectionNavigated": "collectionNavigated"; "openConversationRequested": "openConversationRequested"; }, never, never, false, never>;
|
|
249
352
|
}
|
|
250
353
|
//# sourceMappingURL=collections-full-view.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections-full-view.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/collection/collections-full-view.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAgB,MAAM,eAAe,CAAC;AAC3H,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"collections-full-view.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/collection/collections-full-view.component.ts"],"names":[],"mappings":"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"}
|