@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
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
|
+
/** UserInfoEngine settings key for the persisted milestones (versioned shape). */
|
|
3
|
+
export const REALTIME_UX_PREF_KEY = 'mj.realtimeVoice.uxMilestones.v1';
|
|
4
|
+
/** The highest disclosure level. */
|
|
5
|
+
export const REALTIME_UX_MAX_LEVEL = 4;
|
|
6
|
+
/** Completed-call count at which the `auto` base promotes to the full power console. */
|
|
7
|
+
export const REALTIME_UX_PRO_CALLS = 3;
|
|
8
|
+
/** The level each session event raises the volatile session level to. */
|
|
9
|
+
const EVENT_LEVELS = {
|
|
10
|
+
text: 1,
|
|
11
|
+
engaged: 2,
|
|
12
|
+
channel: 3,
|
|
13
|
+
power: REALTIME_UX_MAX_LEVEL
|
|
14
|
+
};
|
|
15
|
+
/** A brand-new user's milestones: nothing earned, auto density. */
|
|
16
|
+
export function DefaultUxMilestones() {
|
|
17
|
+
return { Level: 0, Calls: 0, Density: 'auto' };
|
|
18
|
+
}
|
|
19
|
+
/** Clamps a candidate level into the valid 0–{@link REALTIME_UX_MAX_LEVEL} band. */
|
|
20
|
+
export function ClampUxLevel(level) {
|
|
21
|
+
if (!Number.isFinite(level)) {
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
return Math.min(REALTIME_UX_MAX_LEVEL, Math.max(0, Math.round(level)));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parses a persisted milestones payload. TOLERANT: anything missing/malformed falls back
|
|
28
|
+
* to {@link DefaultUxMilestones} (field-wise) — a bad preference must never break the call UX.
|
|
29
|
+
*/
|
|
30
|
+
export function ParseUxMilestones(raw) {
|
|
31
|
+
const defaults = DefaultUxMilestones();
|
|
32
|
+
if (!raw) {
|
|
33
|
+
return defaults;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const parsed = JSON.parse(raw);
|
|
37
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
38
|
+
return defaults;
|
|
39
|
+
}
|
|
40
|
+
const density = parsed.density;
|
|
41
|
+
return {
|
|
42
|
+
Level: typeof parsed.level === 'number' ? ClampUxLevel(parsed.level) : defaults.Level,
|
|
43
|
+
Calls: typeof parsed.calls === 'number' && Number.isFinite(parsed.calls)
|
|
44
|
+
? Math.max(0, Math.round(parsed.calls))
|
|
45
|
+
: defaults.Calls,
|
|
46
|
+
Density: density === 'simple' || density === 'standard' || density === 'pro' || density === 'auto'
|
|
47
|
+
? density
|
|
48
|
+
: defaults.Density
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return defaults;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/** Serializes milestones for persistence (lower-cased keys, versionless — the key carries v1). */
|
|
56
|
+
export function SerializeUxMilestones(m) {
|
|
57
|
+
return JSON.stringify({ level: ClampUxLevel(m.Level), calls: Math.max(0, m.Calls), density: m.Density });
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The BASE disclosure level a fresh session starts at:
|
|
61
|
+
* - manual density overrides win outright (`simple` → 0, `standard` → 2, `pro` → 4);
|
|
62
|
+
* - `auto` follows the earned ratchet, promoted to the full console once the user has
|
|
63
|
+
* completed {@link REALTIME_UX_PRO_CALLS} calls.
|
|
64
|
+
*/
|
|
65
|
+
export function EffectiveBaseLevel(m) {
|
|
66
|
+
switch (m.Density) {
|
|
67
|
+
case 'simple': return 0;
|
|
68
|
+
case 'standard': return 2;
|
|
69
|
+
case 'pro': return REALTIME_UX_MAX_LEVEL;
|
|
70
|
+
default:
|
|
71
|
+
return ClampUxLevel(Math.max(m.Level, m.Calls >= REALTIME_UX_PRO_CALLS ? REALTIME_UX_MAX_LEVEL : 0));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The milestones to persist when a live call ends: the call count increments and the
|
|
76
|
+
* earned level ratchets up to whatever the session reached — never below 1 (a completed
|
|
77
|
+
* first call earns the text thread by default next time), never down.
|
|
78
|
+
*/
|
|
79
|
+
export function RatchetedMilestones(m, sessionLevel) {
|
|
80
|
+
return {
|
|
81
|
+
Level: ClampUxLevel(Math.max(m.Level, sessionLevel, 1)),
|
|
82
|
+
Calls: Math.max(0, m.Calls) + 1,
|
|
83
|
+
Density: m.Density
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* The volatile + persisted disclosure state for ONE overlay instance. The overlay loads
|
|
88
|
+
* it from UserInfoEngine at construction, calls {@link Raise} as session events land,
|
|
89
|
+
* derives every visibility gate from the getters, and persists {@link RatchetOnSessionEnd}'s
|
|
90
|
+
* result when the call ends.
|
|
91
|
+
*/
|
|
92
|
+
export class RealtimeDisclosureModel {
|
|
93
|
+
/** The persisted cross-session milestones (replaced immutably on change). */
|
|
94
|
+
Milestones = DefaultUxMilestones();
|
|
95
|
+
/** The CURRENT session's volatile level — max(base, raised events). */
|
|
96
|
+
SessionLevel = 0;
|
|
97
|
+
/** Emits after every change so the owning component can mark for check. */
|
|
98
|
+
Changed$ = new Subject();
|
|
99
|
+
/** Loads persisted milestones (tolerant) and resets the session level to the base. */
|
|
100
|
+
Load(raw) {
|
|
101
|
+
this.Milestones = ParseUxMilestones(raw);
|
|
102
|
+
this.SessionLevel = EffectiveBaseLevel(this.Milestones);
|
|
103
|
+
this.Changed$.next();
|
|
104
|
+
}
|
|
105
|
+
/** Resets the volatile session level to the base — call at every fresh session start. */
|
|
106
|
+
BeginSession() {
|
|
107
|
+
const base = EffectiveBaseLevel(this.Milestones);
|
|
108
|
+
if (this.SessionLevel !== base) {
|
|
109
|
+
this.SessionLevel = base;
|
|
110
|
+
this.Changed$.next();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* RAISES the session level for an event (never lowers it).
|
|
115
|
+
* @returns `true` when the level actually changed.
|
|
116
|
+
*/
|
|
117
|
+
Raise(event) {
|
|
118
|
+
const target = EVENT_LEVELS[event];
|
|
119
|
+
if (this.SessionLevel >= target) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
this.SessionLevel = target;
|
|
123
|
+
this.Changed$.next();
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* EXPLICIT step back down to the pure-audio surface (level 0) for THIS session —
|
|
128
|
+
* the inverse door of the hero's "Show the conversation" / T-to-type reveals. Volatile
|
|
129
|
+
* only: the cross-session milestones ratchet is untouched (use the gear's `simple`
|
|
130
|
+
* density to make pure audio the durable default). Raising is one-way for CONTENT;
|
|
131
|
+
* the USER may always walk back down.
|
|
132
|
+
*/
|
|
133
|
+
ReturnToPureAudio() {
|
|
134
|
+
if (this.SessionLevel === 0) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
this.SessionLevel = 0;
|
|
138
|
+
this.Changed$.next();
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Applies the gear's manual density override. Takes effect immediately — `simple`
|
|
142
|
+
* returns even a mid-call console to the day-one surface (content tabs keep their
|
|
143
|
+
* content; only the chrome retracts). The caller persists the serialized milestones.
|
|
144
|
+
*/
|
|
145
|
+
SetDensity(density) {
|
|
146
|
+
if (this.Milestones.Density === density) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
this.Milestones = { ...this.Milestones, Density: density };
|
|
150
|
+
this.SessionLevel = EffectiveBaseLevel(this.Milestones);
|
|
151
|
+
this.Changed$.next();
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Ratchets + replaces the milestones for a completed call and returns the serialized
|
|
155
|
+
* payload for persistence. The session level is left as-is (the overlay is about to
|
|
156
|
+
* close or re-begin).
|
|
157
|
+
*/
|
|
158
|
+
RatchetOnSessionEnd() {
|
|
159
|
+
this.Milestones = RatchetedMilestones(this.Milestones, this.SessionLevel);
|
|
160
|
+
return SerializeUxMilestones(this.Milestones);
|
|
161
|
+
}
|
|
162
|
+
// ── Visibility gates (live mode; review mode bypasses disclosure entirely) ──
|
|
163
|
+
/** Level 1+: the caption thread (and the captions control) are visible. */
|
|
164
|
+
get ShowThread() {
|
|
165
|
+
return this.SessionLevel >= 1;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Level 2+ POWER-CHROME milestone (app-bar End pill, gear, channel strip). NOTE: the
|
|
169
|
+
* composer dock itself is NOT level-forced — it is the overlay's per-session, user-owned
|
|
170
|
+
* Open toggle (the strip's Type control / T opens it; the dock's hide control closes it).
|
|
171
|
+
*/
|
|
172
|
+
get ShowComposer() {
|
|
173
|
+
return this.SessionLevel >= 2;
|
|
174
|
+
}
|
|
175
|
+
/** Level 2+: the surface panel exists (content arrival forces this via 'engaged'/'channel'). */
|
|
176
|
+
get ShowPanel() {
|
|
177
|
+
return this.SessionLevel >= 2;
|
|
178
|
+
}
|
|
179
|
+
/** Level 2+: the channel strip + the app-bar gear (density escape hatch lives there). */
|
|
180
|
+
get ShowGear() {
|
|
181
|
+
return this.SessionLevel >= 2;
|
|
182
|
+
}
|
|
183
|
+
/** Level 4: developer affordances are offered by default (gear popover still gates them). */
|
|
184
|
+
get PowerLevel() {
|
|
185
|
+
return this.SessionLevel >= REALTIME_UX_MAX_LEVEL;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=realtime-disclosure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-disclosure.js","sourceRoot":"","sources":["../../../../src/lib/components/realtime/realtime-disclosure.ts"],"names":[],"mappings":"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","sourcesContent":["import { Subject } from 'rxjs';\n\n/**\n * @fileoverview PROGRESSIVE DISCLOSURE model for the realtime call overlay — the\n * framework-free engine behind the \"console that grows with you\" UX\n * (`plans/realtime/mockups/redesign-a-progressive.html`).\n *\n * The overlay starts as PURE AUDIO (a breathing orb, three controls, no text) and\n * reveals surfaces along two axes:\n *\n * - **Content-driven (within a session, panel-only)** — the ONE auto-reveal is a\n * channel's first agent activity (e.g. the first whiteboard write): the surface panel\n * opens as a peek with that tab focused, while the left column stays exactly as it\n * was (pure audio included). Everything else announces itself without grabbing:\n * finished artifacts land as glowing unfocused tabs; delegations are narrated aloud.\n * - **Capability-driven (across sessions, ratcheted)** — the thread text, composer,\n * gear and other chrome unlock as the user demonstrates depth (or asks: the hero's\n * \"Show the conversation\", the T-to-type hotkey, the Details peek). Milestones persist\n * per-user via UserInfoEngine under {@link REALTIME_UX_PREF_KEY}; once a control is\n * earned it never auto-hides. The gear's Simple / Standard / Pro density control is\n * the manual escape hatch, writing the same setting.\n *\n * ### Levels\n * | Level | Name | Adds |\n * |-------|-------------|-----------------------------------------------------------|\n * | 0 | Pure audio | hero orb · mute · Details peek · end — nothing to read |\n * | 1 | Text | caption thread + captions control + type-to-text hint |\n * | 2 | Engaged | surface panel · composer dock · channel strip · gear |\n * | 3 | Channels | channel tab revealed (board in play) |\n * | 4 | Power | dev affordances default-available (gear popover unlocks) |\n *\n * Kept free of Angular runtime imports (like `RealtimeSurfaceTabsModel`) so every rule\n * is unit-testable in isolation; the overlay component owns persistence (UserInfoEngine)\n * and subscribes {@link RealtimeDisclosureModel.Changed$} to re-render.\n */\n\n/** The user's manual interface-density override (the gear's escape hatch). */\nexport type RealtimeUxDensity = 'auto' | 'simple' | 'standard' | 'pro';\n\n/** Session events that RAISE the volatile disclosure level (never lower it). */\nexport type RealtimeDisclosureEvent = 'text' | 'engaged' | 'channel' | 'power';\n\n/** The per-user persisted disclosure milestones (the cross-session ratchet). */\nexport interface RealtimeUxMilestones {\n /** Highest disclosure level EARNED across sessions (0–4). Never decreases. */\n Level: number;\n /** Completed live calls — promotes the auto base to power level at {@link REALTIME_UX_PRO_CALLS}. */\n Calls: number;\n /** Manual density override; `'auto'` follows the earned ratchet. */\n Density: RealtimeUxDensity;\n}\n\n/** UserInfoEngine settings key for the persisted milestones (versioned shape). */\nexport const REALTIME_UX_PREF_KEY = 'mj.realtimeVoice.uxMilestones.v1';\n\n/** The highest disclosure level. */\nexport const REALTIME_UX_MAX_LEVEL = 4;\n\n/** Completed-call count at which the `auto` base promotes to the full power console. */\nexport const REALTIME_UX_PRO_CALLS = 3;\n\n/** The level each session event raises the volatile session level to. */\nconst EVENT_LEVELS: Record<RealtimeDisclosureEvent, number> = {\n text: 1,\n engaged: 2,\n channel: 3,\n power: REALTIME_UX_MAX_LEVEL\n};\n\n/** A brand-new user's milestones: nothing earned, auto density. */\nexport function DefaultUxMilestones(): RealtimeUxMilestones {\n return { Level: 0, Calls: 0, Density: 'auto' };\n}\n\n/** Clamps a candidate level into the valid 0–{@link REALTIME_UX_MAX_LEVEL} band. */\nexport function ClampUxLevel(level: number): number {\n if (!Number.isFinite(level)) {\n return 0;\n }\n return Math.min(REALTIME_UX_MAX_LEVEL, Math.max(0, Math.round(level)));\n}\n\n/**\n * Parses a persisted milestones payload. TOLERANT: anything missing/malformed falls back\n * to {@link DefaultUxMilestones} (field-wise) — a bad preference must never break the call UX.\n */\nexport function ParseUxMilestones(raw: string | null | undefined): RealtimeUxMilestones {\n const defaults = DefaultUxMilestones();\n if (!raw) {\n return defaults;\n }\n try {\n const parsed = JSON.parse(raw) as { level?: unknown; calls?: unknown; density?: unknown } | null;\n if (!parsed || typeof parsed !== 'object') {\n return defaults;\n }\n const density = parsed.density;\n return {\n Level: typeof parsed.level === 'number' ? ClampUxLevel(parsed.level) : defaults.Level,\n Calls: typeof parsed.calls === 'number' && Number.isFinite(parsed.calls)\n ? Math.max(0, Math.round(parsed.calls))\n : defaults.Calls,\n Density: density === 'simple' || density === 'standard' || density === 'pro' || density === 'auto'\n ? density\n : defaults.Density\n };\n } catch {\n return defaults;\n }\n}\n\n/** Serializes milestones for persistence (lower-cased keys, versionless — the key carries v1). */\nexport function SerializeUxMilestones(m: RealtimeUxMilestones): string {\n return JSON.stringify({ level: ClampUxLevel(m.Level), calls: Math.max(0, m.Calls), density: m.Density });\n}\n\n/**\n * The BASE disclosure level a fresh session starts at:\n * - manual density overrides win outright (`simple` → 0, `standard` → 2, `pro` → 4);\n * - `auto` follows the earned ratchet, promoted to the full console once the user has\n * completed {@link REALTIME_UX_PRO_CALLS} calls.\n */\nexport function EffectiveBaseLevel(m: RealtimeUxMilestones): number {\n switch (m.Density) {\n case 'simple': return 0;\n case 'standard': return 2;\n case 'pro': return REALTIME_UX_MAX_LEVEL;\n default:\n return ClampUxLevel(Math.max(m.Level, m.Calls >= REALTIME_UX_PRO_CALLS ? REALTIME_UX_MAX_LEVEL : 0));\n }\n}\n\n/**\n * The milestones to persist when a live call ends: the call count increments and the\n * earned level ratchets up to whatever the session reached — never below 1 (a completed\n * first call earns the text thread by default next time), never down.\n */\nexport function RatchetedMilestones(m: RealtimeUxMilestones, sessionLevel: number): RealtimeUxMilestones {\n return {\n Level: ClampUxLevel(Math.max(m.Level, sessionLevel, 1)),\n Calls: Math.max(0, m.Calls) + 1,\n Density: m.Density\n };\n}\n\n/**\n * The volatile + persisted disclosure state for ONE overlay instance. The overlay loads\n * it from UserInfoEngine at construction, calls {@link Raise} as session events land,\n * derives every visibility gate from the getters, and persists {@link RatchetOnSessionEnd}'s\n * result when the call ends.\n */\nexport class RealtimeDisclosureModel {\n /** The persisted cross-session milestones (replaced immutably on change). */\n public Milestones: RealtimeUxMilestones = DefaultUxMilestones();\n\n /** The CURRENT session's volatile level — max(base, raised events). */\n public SessionLevel = 0;\n\n /** Emits after every change so the owning component can mark for check. */\n public readonly Changed$ = new Subject<void>();\n\n /** Loads persisted milestones (tolerant) and resets the session level to the base. */\n public Load(raw: string | null | undefined): void {\n this.Milestones = ParseUxMilestones(raw);\n this.SessionLevel = EffectiveBaseLevel(this.Milestones);\n this.Changed$.next();\n }\n\n /** Resets the volatile session level to the base — call at every fresh session start. */\n public BeginSession(): void {\n const base = EffectiveBaseLevel(this.Milestones);\n if (this.SessionLevel !== base) {\n this.SessionLevel = base;\n this.Changed$.next();\n }\n }\n\n /**\n * RAISES the session level for an event (never lowers it).\n * @returns `true` when the level actually changed.\n */\n public Raise(event: RealtimeDisclosureEvent): boolean {\n const target = EVENT_LEVELS[event];\n if (this.SessionLevel >= target) {\n return false;\n }\n this.SessionLevel = target;\n this.Changed$.next();\n return true;\n }\n\n /**\n * EXPLICIT step back down to the pure-audio surface (level 0) for THIS session —\n * the inverse door of the hero's \"Show the conversation\" / T-to-type reveals. Volatile\n * only: the cross-session milestones ratchet is untouched (use the gear's `simple`\n * density to make pure audio the durable default). Raising is one-way for CONTENT;\n * the USER may always walk back down.\n */\n public ReturnToPureAudio(): void {\n if (this.SessionLevel === 0) {\n return;\n }\n this.SessionLevel = 0;\n this.Changed$.next();\n }\n\n /**\n * Applies the gear's manual density override. Takes effect immediately — `simple`\n * returns even a mid-call console to the day-one surface (content tabs keep their\n * content; only the chrome retracts). The caller persists the serialized milestones.\n */\n public SetDensity(density: RealtimeUxDensity): void {\n if (this.Milestones.Density === density) {\n return;\n }\n this.Milestones = { ...this.Milestones, Density: density };\n this.SessionLevel = EffectiveBaseLevel(this.Milestones);\n this.Changed$.next();\n }\n\n /**\n * Ratchets + replaces the milestones for a completed call and returns the serialized\n * payload for persistence. The session level is left as-is (the overlay is about to\n * close or re-begin).\n */\n public RatchetOnSessionEnd(): string {\n this.Milestones = RatchetedMilestones(this.Milestones, this.SessionLevel);\n return SerializeUxMilestones(this.Milestones);\n }\n\n // ── Visibility gates (live mode; review mode bypasses disclosure entirely) ──\n\n /** Level 1+: the caption thread (and the captions control) are visible. */\n public get ShowThread(): boolean {\n return this.SessionLevel >= 1;\n }\n\n /**\n * Level 2+ POWER-CHROME milestone (app-bar End pill, gear, channel strip). NOTE: the\n * composer dock itself is NOT level-forced — it is the overlay's per-session, user-owned\n * Open toggle (the strip's Type control / T opens it; the dock's hide control closes it).\n */\n public get ShowComposer(): boolean {\n return this.SessionLevel >= 2;\n }\n\n /** Level 2+: the surface panel exists (content arrival forces this via 'engaged'/'channel'). */\n public get ShowPanel(): boolean {\n return this.SessionLevel >= 2;\n }\n\n /** Level 2+: the channel strip + the app-bar gear (density escape hatch lives there). */\n public get ShowGear(): boolean {\n return this.SessionLevel >= 2;\n }\n\n /** Level 4: developer affordances are offered by default (gear popover still gates them). */\n public get PowerLevel(): boolean {\n return this.SessionLevel >= REALTIME_UX_MAX_LEVEL;\n }\n}\n"]}
|