@memberjunction/ng-conversations 5.42.0 → 5.44.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/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts +0 -1
- package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts.map +1 -1
- package/dist/lib/components/active-tasks/active-tasks-panel.component.js +56 -52
- package/dist/lib/components/active-tasks/active-tasks-panel.component.js.map +1 -1
- package/dist/lib/components/artifact/artifact-share-modal.component.js +37 -41
- package/dist/lib/components/artifact/artifact-share-modal.component.js.map +1 -1
- package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-form-modal.component.js +10 -14
- package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -1
- package/dist/lib/components/collection/collection-share-modal.component.js +41 -45
- package/dist/lib/components/collection/collection-share-modal.component.js.map +1 -1
- package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-view.component.js +22 -36
- package/dist/lib/components/collection/collection-view.component.js.map +1 -1
- package/dist/lib/components/collection/collections-full-view.component.d.ts +4 -0
- package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collections-full-view.component.js +134 -166
- package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +73 -8
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +487 -123
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/conversation/pinned-messages-panel.component.js +6 -9
- package/dist/lib/components/conversation/pinned-messages-panel.component.js.map +1 -1
- package/dist/lib/components/library/library-full-view.component.d.ts.map +1 -1
- package/dist/lib/components/library/library-full-view.component.js +20 -24
- package/dist/lib/components/library/library-full-view.component.js.map +1 -1
- package/dist/lib/components/members/members-modal.component.d.ts.map +1 -1
- package/dist/lib/components/members/members-modal.component.js +10 -11
- package/dist/lib/components/members/members-modal.component.js.map +1 -1
- package/dist/lib/components/mention/mention-dropdown.component.js +65 -26
- package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -1
- package/dist/lib/components/mention/mention-editor.component.d.ts.map +1 -1
- package/dist/lib/components/mention/mention-editor.component.js +31 -10
- package/dist/lib/components/mention/mention-editor.component.js.map +1 -1
- package/dist/lib/components/message/message-input-box.component.d.ts +11 -16
- package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input-box.component.js +52 -46
- package/dist/lib/components/message/message-input-box.component.js.map +1 -1
- package/dist/lib/components/message/message-input.component.d.ts +83 -18
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +238 -151
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +15 -1
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +90 -15
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/message/message-list.component.js +6 -9
- package/dist/lib/components/message/message-list.component.js.map +1 -1
- package/dist/lib/components/overlay/chat-overlay.component.d.ts +3 -0
- package/dist/lib/components/overlay/chat-overlay.component.d.ts.map +1 -1
- package/dist/lib/components/overlay/chat-overlay.component.js +9 -4
- package/dist/lib/components/overlay/chat-overlay.component.js.map +1 -1
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts +45 -0
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.d.ts.map +1 -1
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.js +10 -0
- package/dist/lib/components/realtime/channels/base-realtime-channel-client.js.map +1 -1
- package/dist/lib/components/realtime/channels/client-context-channel.d.ts +46 -0
- package/dist/lib/components/realtime/channels/client-context-channel.d.ts.map +1 -0
- package/dist/lib/components/realtime/channels/client-context-channel.js +174 -0
- package/dist/lib/components/realtime/channels/client-context-channel.js.map +1 -0
- package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.d.ts +123 -0
- package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.js +397 -0
- package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.js.map +1 -0
- package/dist/lib/components/realtime/media/media-channel-state.d.ts +103 -0
- package/dist/lib/components/realtime/media/media-channel-state.d.ts.map +1 -0
- package/dist/lib/components/realtime/media/media-channel-state.js +143 -0
- package/dist/lib/components/realtime/media/media-channel-state.js.map +1 -0
- package/dist/lib/components/realtime/media/media-channel-tools.d.ts +24 -0
- package/dist/lib/components/realtime/media/media-channel-tools.d.ts.map +1 -0
- package/dist/lib/components/realtime/media/media-channel-tools.js +107 -0
- package/dist/lib/components/realtime/media/media-channel-tools.js.map +1 -0
- package/dist/lib/components/realtime/media/media-channel.d.ts +89 -0
- package/dist/lib/components/realtime/media/media-channel.d.ts.map +1 -0
- package/dist/lib/components/realtime/media/media-channel.js +253 -0
- package/dist/lib/components/realtime/media/media-channel.js.map +1 -0
- package/dist/lib/components/realtime/media/realtime-media-surface.component.d.ts +141 -0
- package/dist/lib/components/realtime/media/realtime-media-surface.component.d.ts.map +1 -0
- package/dist/lib/components/realtime/media/realtime-media-surface.component.js +574 -0
- package/dist/lib/components/realtime/media/realtime-media-surface.component.js.map +1 -0
- package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts +59 -14
- package/dist/lib/components/realtime/realtime-activity-rail.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-activity-rail.component.js +277 -74
- package/dist/lib/components/realtime/realtime-activity-rail.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts +28 -27
- package/dist/lib/components/realtime/realtime-agent-banner.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-agent-banner.component.js +144 -143
- package/dist/lib/components/realtime/realtime-agent-banner.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts +12 -0
- package/dist/lib/components/realtime/realtime-agent-picker.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-agent-picker.component.js +105 -43
- package/dist/lib/components/realtime/realtime-agent-picker.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-audio-visuals.d.ts +2 -2
- package/dist/lib/components/realtime/realtime-audio-visuals.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-audio-visuals.js.map +1 -1
- package/dist/lib/components/realtime/realtime-composer.component.d.ts +41 -7
- package/dist/lib/components/realtime/realtime-composer.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-composer.component.js +216 -102
- package/dist/lib/components/realtime/realtime-composer.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts +0 -2
- package/dist/lib/components/realtime/realtime-delegation-card.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-delegation-card.component.js +67 -71
- package/dist/lib/components/realtime/realtime-delegation-card.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts +364 -44
- package/dist/lib/components/realtime/realtime-session-overlay.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-session-overlay.component.js +839 -153
- package/dist/lib/components/realtime/realtime-session-overlay.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-session-state.d.ts +5 -5
- package/dist/lib/components/realtime/realtime-session-state.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-session-state.js.map +1 -1
- package/dist/lib/components/realtime/realtime-surface-tab-style.d.ts +70 -0
- package/dist/lib/components/realtime/realtime-surface-tab-style.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-tab-style.js +115 -0
- package/dist/lib/components/realtime/realtime-surface-tab-style.js.map +1 -0
- package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts +55 -57
- package/dist/lib/components/realtime/realtime-surface-tabs.component.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-surface-tabs.component.js +165 -143
- package/dist/lib/components/realtime/realtime-surface-tabs.component.js.map +1 -1
- package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts +80 -71
- package/dist/lib/components/realtime/realtime-surface-tabs.model.d.ts.map +1 -1
- package/dist/lib/components/realtime/realtime-surface-tabs.model.js +83 -113
- package/dist/lib/components/realtime/realtime-surface-tabs.model.js.map +1 -1
- package/dist/lib/components/realtime/realtime-ui-config.d.ts +270 -0
- package/dist/lib/components/realtime/realtime-ui-config.d.ts.map +1 -0
- package/dist/lib/components/realtime/realtime-ui-config.js +212 -0
- package/dist/lib/components/realtime/realtime-ui-config.js.map +1 -0
- package/dist/lib/components/search/search-panel.component.d.ts +2 -0
- package/dist/lib/components/search/search-panel.component.d.ts.map +1 -1
- package/dist/lib/components/search/search-panel.component.js +92 -101
- package/dist/lib/components/search/search-panel.component.js.map +1 -1
- package/dist/lib/components/share/share-modal.component.d.ts.map +1 -1
- package/dist/lib/components/share/share-modal.component.js +10 -11
- package/dist/lib/components/share/share-modal.component.js.map +1 -1
- package/dist/lib/components/shared/user-picker.component.d.ts.map +1 -1
- package/dist/lib/components/shared/user-picker.component.js +12 -15
- package/dist/lib/components/shared/user-picker.component.js.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts +5 -0
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.js +18 -7
- package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
- package/dist/lib/conversations.module.d.ts +29 -26
- package/dist/lib/conversations.module.d.ts.map +1 -1
- package/dist/lib/conversations.module.js +37 -6
- package/dist/lib/conversations.module.js.map +1 -1
- package/dist/lib/models/conversation-state.model.d.ts +6 -3
- 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/conversation-agent.service.d.ts +2 -2
- package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-agent.service.js +6 -2
- package/dist/lib/services/conversation-agent.service.js.map +1 -1
- package/dist/lib/services/mention-autocomplete.service.d.ts +41 -5
- package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
- package/dist/lib/services/mention-autocomplete.service.js +143 -19
- package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
- package/dist/lib/services/realtime-audio-recorder.d.ts +143 -0
- package/dist/lib/services/realtime-audio-recorder.d.ts.map +1 -0
- package/dist/lib/services/realtime-audio-recorder.js +379 -0
- package/dist/lib/services/realtime-audio-recorder.js.map +1 -0
- package/dist/lib/services/realtime-pcm-wav.d.ts +75 -0
- package/dist/lib/services/realtime-pcm-wav.d.ts.map +1 -0
- package/dist/lib/services/realtime-pcm-wav.js +205 -0
- package/dist/lib/services/realtime-pcm-wav.js.map +1 -0
- package/dist/lib/services/realtime-session-review.service.d.ts +28 -1
- package/dist/lib/services/realtime-session-review.service.d.ts.map +1 -1
- package/dist/lib/services/realtime-session-review.service.js +12 -3
- package/dist/lib/services/realtime-session-review.service.js.map +1 -1
- package/dist/lib/services/realtime-session.service.d.ts +210 -20
- package/dist/lib/services/realtime-session.service.d.ts.map +1 -1
- package/dist/lib/services/realtime-session.service.js +452 -21
- package/dist/lib/services/realtime-session.service.js.map +1 -1
- package/dist/lib/services/realtime-sessions-adapter.js +1 -1
- package/dist/lib/services/realtime-sessions-adapter.js.map +1 -1
- package/dist/lib/services/ui-command-handler.service.d.ts +7 -2
- package/dist/lib/services/ui-command-handler.service.d.ts.map +1 -1
- package/dist/lib/services/ui-command-handler.service.js +6 -2
- package/dist/lib/services/ui-command-handler.service.js.map +1 -1
- package/dist/lib/utils/plan-mode-preference.d.ts +62 -0
- package/dist/lib/utils/plan-mode-preference.d.ts.map +1 -0
- package/dist/lib/utils/plan-mode-preference.js +130 -0
- package/dist/lib/utils/plan-mode-preference.js.map +1 -0
- package/dist/public-api.d.ts +6 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +8 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +28 -26
- package/dist/__tests__/attachment-badge.test.d.ts +0 -2
- package/dist/__tests__/attachment-badge.test.d.ts.map +0 -1
- package/dist/__tests__/attachment-badge.test.js +0 -66
- package/dist/__tests__/attachment-badge.test.js.map +0 -1
- package/dist/__tests__/channel-optional-surface.test.d.ts +0 -2
- package/dist/__tests__/channel-optional-surface.test.d.ts.map +0 -1
- package/dist/__tests__/channel-optional-surface.test.js +0 -53
- package/dist/__tests__/channel-optional-surface.test.js.map +0 -1
- package/dist/__tests__/chat-events.test.d.ts +0 -14
- package/dist/__tests__/chat-events.test.d.ts.map +0 -1
- package/dist/__tests__/chat-events.test.js +0 -109
- package/dist/__tests__/chat-events.test.js.map +0 -1
- package/dist/__tests__/collections-full-view.test.d.ts +0 -2
- package/dist/__tests__/collections-full-view.test.d.ts.map +0 -1
- package/dist/__tests__/collections-full-view.test.js +0 -225
- package/dist/__tests__/collections-full-view.test.js.map +0 -1
- package/dist/__tests__/conversation-cache.test.d.ts +0 -2
- package/dist/__tests__/conversation-cache.test.d.ts.map +0 -1
- package/dist/__tests__/conversation-cache.test.js +0 -233
- package/dist/__tests__/conversation-cache.test.js.map +0 -1
- package/dist/__tests__/conversation-naming.test.d.ts +0 -2
- package/dist/__tests__/conversation-naming.test.d.ts.map +0 -1
- package/dist/__tests__/conversation-naming.test.js +0 -110
- package/dist/__tests__/conversation-naming.test.js.map +0 -1
- package/dist/__tests__/delegation-result-parser.test.d.ts +0 -2
- package/dist/__tests__/delegation-result-parser.test.d.ts.map +0 -1
- package/dist/__tests__/delegation-result-parser.test.js +0 -107
- package/dist/__tests__/delegation-result-parser.test.js.map +0 -1
- package/dist/__tests__/distinct-artifacts.test.d.ts +0 -2
- package/dist/__tests__/distinct-artifacts.test.d.ts.map +0 -1
- package/dist/__tests__/distinct-artifacts.test.js +0 -56
- package/dist/__tests__/distinct-artifacts.test.js.map +0 -1
- package/dist/__tests__/event-wiring.test.d.ts +0 -15
- package/dist/__tests__/event-wiring.test.d.ts.map +0 -1
- package/dist/__tests__/event-wiring.test.js +0 -100
- package/dist/__tests__/event-wiring.test.js.map +0 -1
- package/dist/__tests__/index.test.d.ts +0 -2
- package/dist/__tests__/index.test.d.ts.map +0 -1
- package/dist/__tests__/index.test.js +0 -7
- package/dist/__tests__/index.test.js.map +0 -1
- package/dist/__tests__/narration-template.test.d.ts +0 -2
- package/dist/__tests__/narration-template.test.d.ts.map +0 -1
- package/dist/__tests__/narration-template.test.js +0 -76
- package/dist/__tests__/narration-template.test.js.map +0 -1
- package/dist/__tests__/notification-model.test.d.ts +0 -2
- package/dist/__tests__/notification-model.test.d.ts.map +0 -1
- package/dist/__tests__/notification-model.test.js +0 -68
- package/dist/__tests__/notification-model.test.js.map +0 -1
- package/dist/__tests__/realtime-agent-picker-models.test.d.ts +0 -2
- package/dist/__tests__/realtime-agent-picker-models.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-agent-picker-models.test.js +0 -49
- package/dist/__tests__/realtime-agent-picker-models.test.js.map +0 -1
- package/dist/__tests__/realtime-audio-visuals.test.d.ts +0 -2
- package/dist/__tests__/realtime-audio-visuals.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-audio-visuals.test.js +0 -123
- package/dist/__tests__/realtime-audio-visuals.test.js.map +0 -1
- package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts +0 -2
- package/dist/__tests__/realtime-delegation-card-cancel.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-delegation-card-cancel.test.js +0 -48
- package/dist/__tests__/realtime-delegation-card-cancel.test.js.map +0 -1
- package/dist/__tests__/realtime-disclosure.test.d.ts +0 -2
- package/dist/__tests__/realtime-disclosure.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-disclosure.test.js +0 -164
- package/dist/__tests__/realtime-disclosure.test.js.map +0 -1
- package/dist/__tests__/realtime-pairing.test.d.ts +0 -2
- package/dist/__tests__/realtime-pairing.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-pairing.test.js +0 -207
- package/dist/__tests__/realtime-pairing.test.js.map +0 -1
- package/dist/__tests__/realtime-review-lifecycle.test.d.ts +0 -2
- package/dist/__tests__/realtime-review-lifecycle.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-review-lifecycle.test.js +0 -154
- package/dist/__tests__/realtime-review-lifecycle.test.js.map +0 -1
- package/dist/__tests__/realtime-session-cancel-usage.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-cancel-usage.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-cancel-usage.test.js +0 -230
- package/dist/__tests__/realtime-session-cancel-usage.test.js.map +0 -1
- package/dist/__tests__/realtime-session-channels.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-channels.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-channels.test.js +0 -252
- package/dist/__tests__/realtime-session-channels.test.js.map +0 -1
- package/dist/__tests__/realtime-session-client-tools.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-client-tools.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-client-tools.test.js +0 -103
- package/dist/__tests__/realtime-session-client-tools.test.js.map +0 -1
- package/dist/__tests__/realtime-session-minimized.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-minimized.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-minimized.test.js +0 -32
- package/dist/__tests__/realtime-session-minimized.test.js.map +0 -1
- package/dist/__tests__/realtime-session-mint.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-mint.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-mint.test.js +0 -69
- package/dist/__tests__/realtime-session-mint.test.js.map +0 -1
- package/dist/__tests__/realtime-session-policy.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-policy.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-policy.test.js +0 -303
- package/dist/__tests__/realtime-session-policy.test.js.map +0 -1
- package/dist/__tests__/realtime-session-review.service.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-review.service.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-review.service.test.js +0 -743
- package/dist/__tests__/realtime-session-review.service.test.js.map +0 -1
- package/dist/__tests__/realtime-session-state.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-state.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-state.test.js +0 -83
- package/dist/__tests__/realtime-session-state.test.js.map +0 -1
- package/dist/__tests__/realtime-session-timeline-card.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-timeline-card.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-timeline-card.test.js +0 -106
- package/dist/__tests__/realtime-session-timeline-card.test.js.map +0 -1
- package/dist/__tests__/realtime-session-timeline.test.d.ts +0 -2
- package/dist/__tests__/realtime-session-timeline.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-session-timeline.test.js +0 -142
- package/dist/__tests__/realtime-session-timeline.test.js.map +0 -1
- package/dist/__tests__/realtime-sessions-adapter.test.d.ts +0 -19
- package/dist/__tests__/realtime-sessions-adapter.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-sessions-adapter.test.js +0 -188
- package/dist/__tests__/realtime-sessions-adapter.test.js.map +0 -1
- package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts +0 -2
- package/dist/__tests__/realtime-surface-panel-prefs.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-surface-panel-prefs.test.js +0 -100
- package/dist/__tests__/realtime-surface-panel-prefs.test.js.map +0 -1
- package/dist/__tests__/realtime-surface-tabs-model.test.d.ts +0 -2
- package/dist/__tests__/realtime-surface-tabs-model.test.d.ts.map +0 -1
- package/dist/__tests__/realtime-surface-tabs-model.test.js +0 -193
- package/dist/__tests__/realtime-surface-tabs-model.test.js.map +0 -1
- package/dist/__tests__/remote-browser-audio-player.test.d.ts +0 -2
- package/dist/__tests__/remote-browser-audio-player.test.d.ts.map +0 -1
- package/dist/__tests__/remote-browser-audio-player.test.js +0 -137
- package/dist/__tests__/remote-browser-audio-player.test.js.map +0 -1
- package/dist/__tests__/remote-browser-channel.test.d.ts +0 -2
- package/dist/__tests__/remote-browser-channel.test.d.ts.map +0 -1
- package/dist/__tests__/remote-browser-channel.test.js +0 -585
- package/dist/__tests__/remote-browser-channel.test.js.map +0 -1
- package/dist/__tests__/search-service.test.d.ts +0 -2
- package/dist/__tests__/search-service.test.d.ts.map +0 -1
- package/dist/__tests__/search-service.test.js +0 -114
- package/dist/__tests__/search-service.test.js.map +0 -1
- package/dist/__tests__/slot-defaults.test.d.ts +0 -24
- package/dist/__tests__/slot-defaults.test.d.ts.map +0 -1
- package/dist/__tests__/slot-defaults.test.js +0 -63
- package/dist/__tests__/slot-defaults.test.js.map +0 -1
- package/dist/__tests__/toast-service.test.d.ts +0 -2
- package/dist/__tests__/toast-service.test.d.ts.map +0 -1
- package/dist/__tests__/toast-service.test.js +0 -143
- package/dist/__tests__/toast-service.test.js.map +0 -1
- package/dist/__tests__/user-authorization.test.d.ts +0 -2
- package/dist/__tests__/user-authorization.test.d.ts.map +0 -1
- package/dist/__tests__/user-authorization.test.js +0 -97
- package/dist/__tests__/user-authorization.test.js.map +0 -1
- package/dist/__tests__/voice-session-narration.test.d.ts +0 -2
- package/dist/__tests__/voice-session-narration.test.d.ts.map +0 -1
- package/dist/__tests__/voice-session-narration.test.js +0 -609
- package/dist/__tests__/voice-session-narration.test.js.map +0 -1
- package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts +0 -2
- package/dist/__tests__/whiteboard-artifact-viewer.test.d.ts.map +0 -1
- package/dist/__tests__/whiteboard-artifact-viewer.test.js +0 -101
- package/dist/__tests__/whiteboard-artifact-viewer.test.js.map +0 -1
- package/dist/__tests__/whiteboard-channel.test.d.ts +0 -2
- package/dist/__tests__/whiteboard-channel.test.d.ts.map +0 -1
- package/dist/__tests__/whiteboard-channel.test.js +0 -260
- package/dist/__tests__/whiteboard-channel.test.js.map +0 -1
- package/dist/__tests__/whiteboard-restore-state.test.d.ts +0 -2
- package/dist/__tests__/whiteboard-restore-state.test.d.ts.map +0 -1
- package/dist/__tests__/whiteboard-restore-state.test.js +0 -108
- package/dist/__tests__/whiteboard-restore-state.test.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ChangeDetectorRef, inject } from '@angular/core';
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ChangeDetectorRef, ViewChild, inject } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { UserInfoEngine } from '@memberjunction/core-entities';
|
|
4
4
|
import { ArtifactsModule } from '@memberjunction/ng-artifacts';
|
|
@@ -8,7 +8,6 @@ import { ChannelOnboardingPanelComponent } from './channels/channel-onboarding-p
|
|
|
8
8
|
import { RealtimeSurfaceTabsModel } from './realtime-surface-tabs.model';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
import * as i1 from "@angular/common";
|
|
11
|
-
import * as i2 from "@memberjunction/ng-artifacts";
|
|
12
11
|
function RealtimeSurfaceTabsComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
13
12
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
14
13
|
i0.ɵɵelementStart(0, "div", 1)(1, "button", 2);
|
|
@@ -18,126 +17,139 @@ function RealtimeSurfaceTabsComponent_Conditional_1_Template(rf, ctx) { if (rf &
|
|
|
18
17
|
i0.ɵɵelement(3, "i", 4);
|
|
19
18
|
i0.ɵɵelementEnd();
|
|
20
19
|
} }
|
|
21
|
-
function
|
|
22
|
-
i0.ɵɵelement(0, "span",
|
|
20
|
+
function RealtimeSurfaceTabsComponent_Conditional_2_For_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
21
|
+
i0.ɵɵelement(0, "span", 11);
|
|
22
|
+
} }
|
|
23
|
+
function RealtimeSurfaceTabsComponent_Conditional_2_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
24
|
+
i0.ɵɵelement(0, "span", 13);
|
|
25
|
+
} }
|
|
26
|
+
function RealtimeSurfaceTabsComponent_Conditional_2_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
27
|
+
i0.ɵɵelementStart(0, "span", 16);
|
|
28
|
+
i0.ɵɵtext(1);
|
|
29
|
+
i0.ɵɵelementEnd();
|
|
30
|
+
} if (rf & 2) {
|
|
31
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
32
|
+
i0.ɵɵadvance();
|
|
33
|
+
i0.ɵɵtextInterpolate(ctx_r1.State.Cards.length);
|
|
23
34
|
} }
|
|
24
35
|
function RealtimeSurfaceTabsComponent_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
25
36
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
26
|
-
i0.ɵɵ
|
|
27
|
-
i0.ɵɵ
|
|
28
|
-
i0.ɵɵ
|
|
29
|
-
i0.ɵɵ
|
|
30
|
-
i0.ɵɵ
|
|
37
|
+
i0.ɵɵconditionalCreate(0, RealtimeSurfaceTabsComponent_Conditional_2_For_2_Conditional_0_Template, 1, 0, "span", 11);
|
|
38
|
+
i0.ɵɵelementStart(1, "button", 12);
|
|
39
|
+
i0.ɵɵlistener("click", function RealtimeSurfaceTabsComponent_Conditional_2_For_2_Template_button_click_1_listener() { const tab_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.Model.Focus(tab_r5.Key)); });
|
|
40
|
+
i0.ɵɵconditionalCreate(2, RealtimeSurfaceTabsComponent_Conditional_2_For_2_Conditional_2_Template, 1, 0, "span", 13);
|
|
41
|
+
i0.ɵɵelement(3, "i", 14);
|
|
42
|
+
i0.ɵɵelementStart(4, "span", 15);
|
|
43
|
+
i0.ɵɵtext(5);
|
|
31
44
|
i0.ɵɵelementEnd();
|
|
32
|
-
i0.ɵɵconditionalCreate(
|
|
45
|
+
i0.ɵɵconditionalCreate(6, RealtimeSurfaceTabsComponent_Conditional_2_For_2_Conditional_6_Template, 2, 1, "span", 16);
|
|
33
46
|
i0.ɵɵelementEnd();
|
|
34
47
|
} if (rf & 2) {
|
|
35
48
|
const tab_r5 = ctx.$implicit;
|
|
36
49
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
37
|
-
i0.ɵɵ
|
|
38
|
-
i0.ɵɵ
|
|
50
|
+
i0.ɵɵconditional(tab_r5.Kind === "activity" ? 0 : -1);
|
|
51
|
+
i0.ɵɵadvance();
|
|
52
|
+
i0.ɵɵstyleProp("--tab-accent", tab_r5.Color || null);
|
|
53
|
+
i0.ɵɵclassProp("s-tab--activity", tab_r5.Kind === "activity")("s-tab--channel", tab_r5.Kind === "channel")("s-tab--active", tab_r5.Key === ctx_r1.Model.ActiveKey)("s-tab--flash", tab_r5.Key === ctx_r1.Model.FlashKey);
|
|
54
|
+
i0.ɵɵproperty("title", tab_r5.Title);
|
|
39
55
|
i0.ɵɵattribute("aria-selected", tab_r5.Key === ctx_r1.Model.ActiveKey);
|
|
40
56
|
i0.ɵɵadvance();
|
|
57
|
+
i0.ɵɵconditional(tab_r5.Kind === "channel" ? 2 : -1);
|
|
58
|
+
i0.ɵɵadvance();
|
|
41
59
|
i0.ɵɵclassMap(tab_r5.Icon);
|
|
42
60
|
i0.ɵɵadvance(2);
|
|
43
61
|
i0.ɵɵtextInterpolate(tab_r5.Title);
|
|
44
62
|
i0.ɵɵadvance();
|
|
45
|
-
i0.ɵɵconditional(ctx_r1.
|
|
63
|
+
i0.ɵɵconditional(tab_r5.Kind === "activity" && ctx_r1.State.Cards.length > 0 ? 6 : -1);
|
|
46
64
|
} }
|
|
47
65
|
function RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_1_Template(rf, ctx) { if (rf & 1) {
|
|
48
66
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
49
|
-
i0.ɵɵelementStart(0, "mj-realtime-activity-rail",
|
|
50
|
-
i0.ɵɵlistener("OpenRunRequested", function RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_1_Template_mj_realtime_activity_rail_OpenRunRequested_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenRunRequested.emit($event)); })
|
|
67
|
+
i0.ɵɵelementStart(0, "mj-realtime-activity-rail", 19);
|
|
68
|
+
i0.ɵɵlistener("OpenRunRequested", function RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_1_Template_mj_realtime_activity_rail_OpenRunRequested_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenRunRequested.emit($event)); });
|
|
51
69
|
i0.ɵɵelementEnd();
|
|
52
70
|
} if (rf & 2) {
|
|
53
71
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
54
|
-
i0.ɵɵproperty("State", ctx_r1.State)("DevMode", ctx_r1.DevMode)("Embedded", true);
|
|
72
|
+
i0.ɵɵproperty("State", ctx_r1.State)("DevMode", ctx_r1.DevMode)("Embedded", true)("CurrentUser", ctx_r1.CurrentUser)("EnvironmentID", ctx_r1.EnvironmentID)("ExtraArtifacts", ctx_r1.ExtraArtifacts);
|
|
55
73
|
} }
|
|
56
|
-
function
|
|
57
|
-
i0.ɵɵ
|
|
58
|
-
i0.ɵɵelement(1, "mj-artifact-viewer-panel", 19);
|
|
59
|
-
i0.ɵɵelementEnd();
|
|
60
|
-
} if (rf & 2) {
|
|
61
|
-
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
62
|
-
i0.ɵɵadvance();
|
|
63
|
-
i0.ɵɵproperty("artifactId", ctx.ArtifactID)("currentUser", ctx_r1.CurrentUser)("environmentId", ctx_r1.EnvironmentID)("showHeader", false)("showTabs", false)("showSaveToCollection", false)("showCloseButton", false)("showMaximizeButton", false);
|
|
64
|
-
} }
|
|
65
|
-
function RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_2_Template(rf, ctx) { if (rf & 1) {
|
|
66
|
-
i0.ɵɵconditionalCreate(0, RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_2_Conditional_0_Template, 2, 8, "div", 18);
|
|
67
|
-
} if (rf & 2) {
|
|
68
|
-
let tmp_12_0;
|
|
69
|
-
const tab_r7 = i0.ɵɵnextContext().$implicit;
|
|
70
|
-
i0.ɵɵconditional((tmp_12_0 = tab_r7.Data == null ? null : tab_r7.Data.Artifact) ? 0 : -1, tmp_12_0);
|
|
71
|
-
} }
|
|
72
|
-
function RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_3_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
73
|
-
const _r8 = i0.ɵɵgetCurrentView();
|
|
74
|
+
function RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_2_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
75
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
74
76
|
i0.ɵɵelementStart(0, "mj-channel-onboarding-panel", 24);
|
|
75
|
-
i0.ɵɵlistener("Dismissed", function
|
|
77
|
+
i0.ɵɵlistener("Dismissed", function RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_2_Conditional_0_Conditional_1_Template_mj_channel_onboarding_panel_Dismissed_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.DismissOnboarding()); });
|
|
76
78
|
i0.ɵɵelementEnd();
|
|
77
79
|
} if (rf & 2) {
|
|
78
80
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
79
81
|
i0.ɵɵproperty("Content", ctx_r1.OnboardingContent);
|
|
80
82
|
} }
|
|
81
|
-
function
|
|
83
|
+
function RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
82
84
|
i0.ɵɵelement(0, "mj-realtime-channel-pane", 22);
|
|
83
|
-
i0.ɵɵconditionalCreate(1,
|
|
85
|
+
i0.ɵɵconditionalCreate(1, RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_2_Conditional_0_Conditional_1_Template, 1, 1, "mj-channel-onboarding-panel", 23);
|
|
84
86
|
} if (rf & 2) {
|
|
85
|
-
const
|
|
87
|
+
const tab_r8 = i0.ɵɵnextContext(2).$implicit;
|
|
86
88
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
87
89
|
i0.ɵɵproperty("Plugin", ctx);
|
|
88
90
|
i0.ɵɵadvance();
|
|
89
|
-
i0.ɵɵconditional(
|
|
91
|
+
i0.ɵɵconditional(tab_r8.Key === ctx_r1.Model.ActiveKey && ctx_r1.OnboardingContent ? 1 : -1);
|
|
90
92
|
} }
|
|
91
|
-
function
|
|
93
|
+
function RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
92
94
|
i0.ɵɵelementContainer(0, 20);
|
|
93
95
|
} if (rf & 2) {
|
|
94
96
|
i0.ɵɵproperty("ngTemplateOutlet", ctx);
|
|
95
97
|
} }
|
|
96
|
-
function
|
|
98
|
+
function RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
97
99
|
i0.ɵɵelementStart(0, "div", 21);
|
|
98
100
|
i0.ɵɵelement(1, "i", 25);
|
|
99
101
|
i0.ɵɵelementStart(2, "span");
|
|
100
102
|
i0.ɵɵtext(3);
|
|
101
103
|
i0.ɵɵelementEnd()();
|
|
102
104
|
} if (rf & 2) {
|
|
103
|
-
const
|
|
105
|
+
const tab_r8 = i0.ɵɵnextContext(2).$implicit;
|
|
104
106
|
i0.ɵɵadvance(3);
|
|
105
|
-
i0.ɵɵtextInterpolate1("",
|
|
107
|
+
i0.ɵɵtextInterpolate1("", tab_r8.Title, " coming online\u2026");
|
|
106
108
|
} }
|
|
107
|
-
function
|
|
108
|
-
i0.ɵɵconditionalCreate(0,
|
|
109
|
+
function RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_2_Template(rf, ctx) { if (rf & 1) {
|
|
110
|
+
i0.ɵɵconditionalCreate(0, RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_2_Conditional_0_Template, 2, 2)(1, RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_2_Conditional_1_Template, 1, 1, "ng-container", 20)(2, RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_2_Conditional_2_Template, 4, 1, "div", 21);
|
|
109
111
|
} if (rf & 2) {
|
|
110
112
|
let tmp_12_0;
|
|
111
|
-
const
|
|
112
|
-
i0.ɵɵconditional((tmp_12_0 =
|
|
113
|
+
const tab_r8 = i0.ɵɵnextContext().$implicit;
|
|
114
|
+
i0.ɵɵconditional((tmp_12_0 = tab_r8.Data == null ? null : tab_r8.Data.Plugin) ? 0 : (tmp_12_0 = tab_r8.Data == null ? null : tab_r8.Data.Content) ? 1 : 2, tmp_12_0);
|
|
113
115
|
} }
|
|
114
116
|
function RealtimeSurfaceTabsComponent_Conditional_2_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
115
|
-
i0.ɵɵelementStart(0, "div",
|
|
116
|
-
i0.ɵɵconditionalCreate(1, RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_1_Template, 1,
|
|
117
|
+
i0.ɵɵelementStart(0, "div", 17);
|
|
118
|
+
i0.ɵɵconditionalCreate(1, RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_1_Template, 1, 6, "mj-realtime-activity-rail", 18)(2, RealtimeSurfaceTabsComponent_Conditional_2_For_7_Case_2_Template, 3, 1);
|
|
117
119
|
i0.ɵɵelementEnd();
|
|
118
120
|
} if (rf & 2) {
|
|
119
121
|
let tmp_12_0;
|
|
120
|
-
const
|
|
122
|
+
const tab_r8 = ctx.$implicit;
|
|
121
123
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
122
|
-
i0.ɵɵclassProp("s-pane--active",
|
|
124
|
+
i0.ɵɵclassProp("s-pane--active", tab_r8.Key === ctx_r1.Model.ActiveKey);
|
|
123
125
|
i0.ɵɵadvance();
|
|
124
|
-
i0.ɵɵconditional((tmp_12_0 =
|
|
126
|
+
i0.ɵɵconditional((tmp_12_0 = tab_r8.Kind) === "activity" ? 1 : tmp_12_0 === "channel" ? 2 : -1);
|
|
127
|
+
} }
|
|
128
|
+
function RealtimeSurfaceTabsComponent_Conditional_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
129
|
+
i0.ɵɵelementStart(0, "div", 10);
|
|
130
|
+
i0.ɵɵelement(1, "i", 26);
|
|
131
|
+
i0.ɵɵelementStart(2, "span");
|
|
132
|
+
i0.ɵɵtext(3, "Surfaces appear here as the call gets going.");
|
|
133
|
+
i0.ɵɵelementEnd()();
|
|
125
134
|
} }
|
|
126
135
|
function RealtimeSurfaceTabsComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
127
136
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
128
137
|
i0.ɵɵelementStart(0, "div", 5);
|
|
129
|
-
i0.ɵɵrepeaterCreate(1, RealtimeSurfaceTabsComponent_Conditional_2_For_2_Template,
|
|
130
|
-
i0.ɵɵelementStart(3, "div",
|
|
138
|
+
i0.ɵɵrepeaterCreate(1, RealtimeSurfaceTabsComponent_Conditional_2_For_2_Template, 7, 18, null, null, i0.ɵɵcomponentInstance().TrackTab, true);
|
|
139
|
+
i0.ɵɵelementStart(3, "div", 6)(4, "button", 7);
|
|
131
140
|
i0.ɵɵlistener("click", function RealtimeSurfaceTabsComponent_Conditional_2_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleCollapsed()); });
|
|
132
|
-
i0.ɵɵelement(5, "i",
|
|
141
|
+
i0.ɵɵelement(5, "i", 8);
|
|
133
142
|
i0.ɵɵelementEnd()()();
|
|
134
|
-
i0.ɵɵrepeaterCreate(6, RealtimeSurfaceTabsComponent_Conditional_2_For_7_Template,
|
|
143
|
+
i0.ɵɵrepeaterCreate(6, RealtimeSurfaceTabsComponent_Conditional_2_For_7_Template, 3, 3, "div", 9, i0.ɵɵcomponentInstance().TrackTab, true);
|
|
144
|
+
i0.ɵɵconditionalCreate(8, RealtimeSurfaceTabsComponent_Conditional_2_Conditional_8_Template, 4, 0, "div", 10);
|
|
135
145
|
} if (rf & 2) {
|
|
136
146
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
137
147
|
i0.ɵɵadvance();
|
|
138
148
|
i0.ɵɵrepeater(ctx_r1.Model.Tabs);
|
|
139
149
|
i0.ɵɵadvance(5);
|
|
140
150
|
i0.ɵɵrepeater(ctx_r1.Model.Tabs);
|
|
151
|
+
i0.ɵɵadvance(2);
|
|
152
|
+
i0.ɵɵconditional(ctx_r1.Model.Tabs.length === 0 ? 8 : -1);
|
|
141
153
|
} }
|
|
142
154
|
/**
|
|
143
155
|
* User-settings key (NOT localStorage — see `UserInfoEngine`) under which the per-user "which
|
|
@@ -147,36 +159,32 @@ function RealtimeSurfaceTabsComponent_Conditional_2_Template(rf, ctx) { if (rf &
|
|
|
147
159
|
*/
|
|
148
160
|
const CHANNEL_ONBOARDING_SEEN_SETTING_KEY = 'mj.realtimeChannels.onboardingSeen.v1';
|
|
149
161
|
/**
|
|
150
|
-
* The call overlay's TABBED SURFACE PANEL (the right panel) —
|
|
151
|
-
*
|
|
162
|
+
* The call overlay's TABBED SURFACE PANEL (the right panel) — decluttered redesign:
|
|
163
|
+
*
|
|
164
|
+
* - **Channel tabs** (LEFT cluster) — one per channel that has come into play. The whiteboard
|
|
165
|
+
* tabs immediately at session start; every other channel tabs only once the agent first
|
|
166
|
+
* USES it. Each carries a distinct accent color + its plugin icon. The pane creates the
|
|
167
|
+
* plugin's surface component dynamically (via `mj-realtime-channel-pane`); a placeholder
|
|
168
|
+
* shows the "coming online…" state until a plugin/template is supplied.
|
|
169
|
+
* - **Activity** (RIGHT-aligned, pinned LAST) — gated: appears only once ≥1 agent run has
|
|
170
|
+
* occurred (or in review mode). Hosts {@link RealtimeActivityRailComponent}, which now also
|
|
171
|
+
* renders inline artifact previews and a split-pane artifact viewer. Styled distinctly from
|
|
172
|
+
* channel tabs (activity-pulse icon + its own accent) and separated from the channel cluster
|
|
173
|
+
* by a flex spacer.
|
|
152
174
|
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
* owns the chrome + collapse).
|
|
156
|
-
* - **One tab per artifact** produced by delegated runs: when a delegation result carries
|
|
157
|
-
* artifacts, a tab is auto-opened, FOCUSED, and briefly flashed violet. The pane reuses
|
|
158
|
-
* the standard `mj-artifact-viewer-panel` (read-only embed: no header/tabs/actions),
|
|
159
|
-
* loading by ArtifactID — the latest version, i.e. the one the run just produced.
|
|
160
|
-
* - **Channel tabs** — rendered ONLY once a channel registers via
|
|
161
|
-
* {@link RegisterChannelTab}. The overlay shell registers one per registry-resolved
|
|
162
|
-
* {@link BaseRealtimeChannelClient} plugin; the pane creates the plugin's surface
|
|
163
|
-
* component dynamically (via `mj-realtime-channel-pane`). Until a registration supplies
|
|
164
|
-
* a plugin (or legacy template), the pane shows the "coming online…" placeholder;
|
|
165
|
-
* re-registering the same key swaps the real surface in.
|
|
175
|
+
* Artifacts NO LONGER get their own tab — they live inside the Activity tab (cleaner than a
|
|
176
|
+
* row of per-artifact tabs).
|
|
166
177
|
*
|
|
167
|
-
* Panes are kept ALIVE while hidden (CSS `display:none
|
|
168
|
-
*
|
|
169
|
-
* The whole panel collapses to a slim strip via the chevron at the tab strip's end —
|
|
170
|
-
* the collapse-to-strip behavior that used to live on the rail, lifted to the panel.
|
|
178
|
+
* Panes are kept ALIVE while hidden (CSS `display:none`) so switching tabs never reloads a
|
|
179
|
+
* channel surface or resets the rail. The whole panel collapses to a slim strip via the chevron.
|
|
171
180
|
*
|
|
172
|
-
* SIZING IS EXTERNAL: the overlay shell hosts this panel in a fixed-width flex item
|
|
173
|
-
*
|
|
174
|
-
*
|
|
175
|
-
*
|
|
176
|
-
* is focused → the default width tier widens).
|
|
181
|
+
* SIZING IS EXTERNAL: the overlay shell hosts this panel in a fixed-width flex item and owns
|
|
182
|
+
* the width. This panel just fills it and REPORTS the layout signals the shell sizes from:
|
|
183
|
+
* {@link CollapsedChange} (slim-strip toggle) and {@link WideChanged} (a channel tab is focused
|
|
184
|
+
* → the default width tier widens).
|
|
177
185
|
*/
|
|
178
186
|
export class RealtimeSurfaceTabsComponent {
|
|
179
|
-
/** How long a just-
|
|
187
|
+
/** How long a just-revealed channel tab keeps its flash highlight. */
|
|
180
188
|
static FlashDurationMs = 1400;
|
|
181
189
|
/** Shared live-session state, owned by the overlay shell (feeds the Activity rail). */
|
|
182
190
|
State;
|
|
@@ -192,6 +200,27 @@ export class RealtimeSurfaceTabsComponent {
|
|
|
192
200
|
CurrentUser = null;
|
|
193
201
|
/** The active environment id, threaded to the artifact viewer panel. */
|
|
194
202
|
EnvironmentID = '';
|
|
203
|
+
/**
|
|
204
|
+
* Extra (review-carryover) artifacts to surface in the Activity tab, NOT tied to a live
|
|
205
|
+
* activity card. Forwarded to the rail's "Session artifacts" group. Empty for a live session.
|
|
206
|
+
*/
|
|
207
|
+
ExtraArtifacts = [];
|
|
208
|
+
/**
|
|
209
|
+
* Whether the gated Activity tab should be shown — driven by the overlay shell once ≥1
|
|
210
|
+
* agent run has occurred (or in review mode). A getter/setter so a late "first run" flips
|
|
211
|
+
* the tab into the strip reactively.
|
|
212
|
+
*/
|
|
213
|
+
_showActivityTab = false;
|
|
214
|
+
set ShowActivityTab(value) {
|
|
215
|
+
if (value !== this._showActivityTab) {
|
|
216
|
+
this._showActivityTab = value;
|
|
217
|
+
this.Model.SetShowActivityTab(value);
|
|
218
|
+
this.cdr.markForCheck();
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
get ShowActivityTab() {
|
|
222
|
+
return this._showActivityTab;
|
|
223
|
+
}
|
|
195
224
|
/** Re-emitted from the Activity rail's dev "Open run" links. */
|
|
196
225
|
OpenRunRequested = new EventEmitter();
|
|
197
226
|
/**
|
|
@@ -200,7 +229,7 @@ export class RealtimeSurfaceTabsComponent {
|
|
|
200
229
|
*/
|
|
201
230
|
CollapsedChange = new EventEmitter();
|
|
202
231
|
/**
|
|
203
|
-
* Emitted when {@link IsWide} flips (a
|
|
232
|
+
* Emitted when {@link IsWide} flips (a channel tab gained / lost focus) — the
|
|
204
233
|
* overlay shell widens the panel's DEFAULT split-area size while wide (only when
|
|
205
234
|
* the user has never dragged an explicit width).
|
|
206
235
|
*/
|
|
@@ -209,8 +238,8 @@ export class RealtimeSurfaceTabsComponent {
|
|
|
209
238
|
Model = new RealtimeSurfaceTabsModel();
|
|
210
239
|
/** Whether the panel is collapsed to its slim strip. */
|
|
211
240
|
Collapsed = false;
|
|
212
|
-
/**
|
|
213
|
-
|
|
241
|
+
/** The embedded Activity rail (owns the inline artifact previews + the split-pane viewer). */
|
|
242
|
+
activityRail;
|
|
214
243
|
flashTimer = null;
|
|
215
244
|
subs = [];
|
|
216
245
|
lastWide = false;
|
|
@@ -227,13 +256,12 @@ export class RealtimeSurfaceTabsComponent {
|
|
|
227
256
|
get ActiveTab() {
|
|
228
257
|
return this.Model.ActiveTab;
|
|
229
258
|
}
|
|
230
|
-
/** Wide presentation when a
|
|
259
|
+
/** Wide presentation when a channel tab is focused (the Activity tab keeps the normal tier). */
|
|
231
260
|
get IsWide() {
|
|
232
|
-
return !this.Collapsed && this.ActiveTab.Kind
|
|
261
|
+
return !this.Collapsed && this.ActiveTab.Kind === 'channel';
|
|
233
262
|
}
|
|
234
263
|
ngOnInit() {
|
|
235
|
-
this.subs.push(this.
|
|
236
|
-
this.syncArtifactTabs();
|
|
264
|
+
this.subs.push(this.Model.Changed$.subscribe(() => this.onModelChanged()));
|
|
237
265
|
}
|
|
238
266
|
ngOnDestroy() {
|
|
239
267
|
for (const s of this.subs) {
|
|
@@ -257,7 +285,7 @@ export class RealtimeSurfaceTabsComponent {
|
|
|
257
285
|
this.syncWide();
|
|
258
286
|
}
|
|
259
287
|
}
|
|
260
|
-
/** Emits {@link WideChanged} when the wide tier flips (
|
|
288
|
+
/** Emits {@link WideChanged} when the wide tier flips (channel tab focus / collapse). */
|
|
261
289
|
syncWide() {
|
|
262
290
|
const wide = this.IsWide;
|
|
263
291
|
if (wide !== this.lastWide) {
|
|
@@ -270,22 +298,31 @@ export class RealtimeSurfaceTabsComponent {
|
|
|
270
298
|
return tab.Key;
|
|
271
299
|
}
|
|
272
300
|
/**
|
|
273
|
-
* Focuses
|
|
274
|
-
* on done delegation cards
|
|
301
|
+
* Focuses the Activity tab and opens the given artifact in the rail's split-pane viewer —
|
|
302
|
+
* the "View →" affordance target on done delegation cards / thread entries. Expands the
|
|
303
|
+
* panel if it was collapsed. Replaces the old "open a tab per artifact" behavior.
|
|
275
304
|
*/
|
|
276
305
|
FocusArtifact(artifact) {
|
|
277
|
-
this.tabbedVersionIds.add(artifact.ArtifactVersionID);
|
|
278
|
-
this.Model.OpenArtifactTab(artifact, true);
|
|
279
306
|
this.setCollapsed(false);
|
|
307
|
+
// An artifact implies a run happened — ensure the Activity tab is present before focusing it.
|
|
308
|
+
this.Model.SetShowActivityTab(true);
|
|
309
|
+
this.Model.Focus(RealtimeSurfaceTabsModel.ActivityTabKey);
|
|
310
|
+
// The rail may not be created yet (panel just expanded) — defer so it exists.
|
|
311
|
+
if (this.activityRail) {
|
|
312
|
+
this.activityRail.OpenArtifact(artifact);
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
setTimeout(() => this.activityRail?.OpenArtifact(artifact));
|
|
316
|
+
}
|
|
280
317
|
this.cdr.markForCheck();
|
|
281
318
|
}
|
|
282
319
|
/**
|
|
283
|
-
* Registers (or updates) an interactive-channel tab — one per
|
|
284
|
-
*
|
|
320
|
+
* Registers (or updates) an interactive-channel tab — one per used channel plugin,
|
|
321
|
+
* forwarded from `RealtimeSessionOverlayComponent.RegisterChannelTab`.
|
|
285
322
|
*/
|
|
286
323
|
RegisterChannelTab(registration) {
|
|
287
324
|
// Microtask defer: the overlay forwards this while handling agent/channel activity, which can
|
|
288
|
-
// land mid change-detection. Adding a tab to Model
|
|
325
|
+
// land mid change-detection. Adding a tab to Model synchronously then trips NG0100 on the
|
|
289
326
|
// tab-strip bindings (s-tab--active). A microtask lands the mutation in a fresh CD turn —
|
|
290
327
|
// imperceptible for an async reveal, and ordered with any follow-on RevealChannel.
|
|
291
328
|
Promise.resolve().then(() => {
|
|
@@ -295,9 +332,8 @@ export class RealtimeSurfaceTabsComponent {
|
|
|
295
332
|
}
|
|
296
333
|
/**
|
|
297
334
|
* AUTO-REVEALS a channel surface the moment the agent first acts on it: expands the
|
|
298
|
-
* panel if collapsed, focuses the channel's tab and flashes it
|
|
299
|
-
*
|
|
300
|
-
* instead of having to find the tab themselves. No-op for unknown keys.
|
|
335
|
+
* panel if collapsed, focuses the channel's tab and flashes it — so the user discovers
|
|
336
|
+
* the whiteboard (or any channel) exists the instant it comes alive. No-op for unknown keys.
|
|
301
337
|
*/
|
|
302
338
|
RevealChannel(key) {
|
|
303
339
|
// Microtask defer (same NG0100 reason as RegisterChannelTab): the agent-activity reveal mutates
|
|
@@ -312,10 +348,10 @@ export class RealtimeSurfaceTabsComponent {
|
|
|
312
348
|
});
|
|
313
349
|
}
|
|
314
350
|
/**
|
|
315
|
-
* Removes a tab from the panel (Activity is irremovable; focus falls back
|
|
316
|
-
*
|
|
317
|
-
*
|
|
318
|
-
*
|
|
351
|
+
* Removes a tab from the panel (Activity is irremovable; focus falls back per the model's
|
|
352
|
+
* rules). Used by the overlay shell on a review→live continuation whose live channel set
|
|
353
|
+
* resolved WITHOUT the channel a stale review tab represents (e.g. no Whiteboard channel →
|
|
354
|
+
* drop the read-only review board tab).
|
|
319
355
|
*
|
|
320
356
|
* @returns `true` when a tab was removed.
|
|
321
357
|
*/
|
|
@@ -327,21 +363,16 @@ export class RealtimeSurfaceTabsComponent {
|
|
|
327
363
|
return removed;
|
|
328
364
|
}
|
|
329
365
|
/**
|
|
330
|
-
* Registers
|
|
331
|
-
*
|
|
332
|
-
*
|
|
333
|
-
*
|
|
334
|
-
* survives the review→live transition (tabs are never cleared on resume).
|
|
366
|
+
* Registers the reviewed chain's history artifacts so they surface inside the Activity tab.
|
|
367
|
+
* In the redesign there are no per-artifact tabs — the rail picks artifacts up from the
|
|
368
|
+
* session state's cards, so this only needs to ensure the Activity tab is shown (review
|
|
369
|
+
* mode always shows it) and, when `focus` is set, open the artifact in the split viewer.
|
|
335
370
|
*/
|
|
336
371
|
RegisterArtifactTab(artifact, focus = false) {
|
|
337
|
-
this.
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
}
|
|
342
|
-
/** On session-state changes: open tabs for newly-arrived artifacts, then re-render. */
|
|
343
|
-
onStateChanged() {
|
|
344
|
-
this.syncArtifactTabs();
|
|
372
|
+
this.Model.SetShowActivityTab(true);
|
|
373
|
+
if (focus) {
|
|
374
|
+
this.FocusArtifact(artifact);
|
|
375
|
+
}
|
|
345
376
|
this.cdr.markForCheck();
|
|
346
377
|
}
|
|
347
378
|
/** On model changes: schedule the flash clear, report a wide-tier flip, re-render. */
|
|
@@ -411,27 +442,6 @@ export class RealtimeSurfaceTabsComponent {
|
|
|
411
442
|
return {};
|
|
412
443
|
}
|
|
413
444
|
}
|
|
414
|
-
/**
|
|
415
|
-
* Scans the session's delegation cards for artifacts that don't have a tab yet and
|
|
416
|
-
* adds one per artifact — UNFOCUSED, with the brief violet flash plus the persistent
|
|
417
|
-
* unseen glow. Per product direction a finished artifact never steals the screen
|
|
418
|
-
* (only the agent's first channel activity auto-reveals); the glowing tab is the
|
|
419
|
-
* invitation, the user opens it when they want it.
|
|
420
|
-
*/
|
|
421
|
-
syncArtifactTabs() {
|
|
422
|
-
for (const card of this.State.Cards) {
|
|
423
|
-
if (!card.Done || !card.Artifacts) {
|
|
424
|
-
continue;
|
|
425
|
-
}
|
|
426
|
-
for (const artifact of card.Artifacts) {
|
|
427
|
-
if (this.tabbedVersionIds.has(artifact.ArtifactVersionID)) {
|
|
428
|
-
continue;
|
|
429
|
-
}
|
|
430
|
-
this.tabbedVersionIds.add(artifact.ArtifactVersionID);
|
|
431
|
-
this.Model.OpenArtifactTab(artifact, false);
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
445
|
/**
|
|
436
446
|
* Focuses the FIRST tab in the strip — channels lead, so a Details peek lands on the
|
|
437
447
|
* marquee surface (e.g. the Whiteboard) when one exists, else on Activity.
|
|
@@ -457,23 +467,28 @@ export class RealtimeSurfaceTabsComponent {
|
|
|
457
467
|
}, RealtimeSurfaceTabsComponent.FlashDurationMs);
|
|
458
468
|
}
|
|
459
469
|
static ɵfac = function RealtimeSurfaceTabsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || RealtimeSurfaceTabsComponent)(); };
|
|
460
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RealtimeSurfaceTabsComponent, selectors: [["mj-realtime-surface-tabs"]],
|
|
470
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RealtimeSurfaceTabsComponent, selectors: [["mj-realtime-surface-tabs"]], viewQuery: function RealtimeSurfaceTabsComponent_Query(rf, ctx) { if (rf & 1) {
|
|
471
|
+
i0.ɵɵviewQuery(RealtimeActivityRailComponent, 5);
|
|
472
|
+
} if (rf & 2) {
|
|
473
|
+
let _t;
|
|
474
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.activityRail = _t.first);
|
|
475
|
+
} }, inputs: { State: "State", DevMode: "DevMode", Fill: "Fill", CurrentUser: "CurrentUser", EnvironmentID: "EnvironmentID", ExtraArtifacts: "ExtraArtifacts", ShowActivityTab: "ShowActivityTab" }, outputs: { OpenRunRequested: "OpenRunRequested", CollapsedChange: "CollapsedChange", WideChanged: "WideChanged" }, decls: 3, vars: 5, consts: [["aria-label", "Session surfaces", 1, "surface"], [1, "surface__strip"], ["type", "button", "title", "Show session panel", "aria-expanded", "false", 1, "surface__toggle", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-left"], ["aria-hidden", "true", "title", "Session activity", 1, "fa-solid", "fa-wave-square", "surface__strip-icon"], ["role", "tablist", 1, "surface-tabs"], [1, "tabs-end"], ["type", "button", "title", "Hide session panel", "aria-expanded", "true", 1, "surface__toggle", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-right"], ["role", "tabpanel", 1, "s-pane", 3, "s-pane--active"], ["role", "status", 1, "surface__empty"], ["aria-hidden", "true", 1, "tabs-spacer"], ["type", "button", "role", "tab", 1, "s-tab", 3, "click", "title"], ["aria-hidden", "true", 1, "s-tab__dot"], ["aria-hidden", "true"], [1, "s-tab__title"], ["aria-hidden", "true", 1, "s-tab__badge"], ["role", "tabpanel", 1, "s-pane"], [3, "State", "DevMode", "Embedded", "CurrentUser", "EnvironmentID", "ExtraArtifacts"], [3, "OpenRunRequested", "State", "DevMode", "Embedded", "CurrentUser", "EnvironmentID", "ExtraArtifacts"], [3, "ngTemplateOutlet"], ["role", "status", 1, "channel-placeholder"], [3, "Plugin"], [3, "Content"], [3, "Dismissed", "Content"], ["aria-hidden", "true", 1, "fa-solid", "fa-chalkboard"], ["aria-hidden", "true", 1, "fa-solid", "fa-wave-square"]], template: function RealtimeSurfaceTabsComponent_Template(rf, ctx) { if (rf & 1) {
|
|
461
476
|
i0.ɵɵelementStart(0, "aside", 0);
|
|
462
|
-
i0.ɵɵconditionalCreate(1, RealtimeSurfaceTabsComponent_Conditional_1_Template, 4, 0, "div", 1)(2, RealtimeSurfaceTabsComponent_Conditional_2_Template,
|
|
477
|
+
i0.ɵɵconditionalCreate(1, RealtimeSurfaceTabsComponent_Conditional_1_Template, 4, 0, "div", 1)(2, RealtimeSurfaceTabsComponent_Conditional_2_Template, 9, 1);
|
|
463
478
|
i0.ɵɵelementEnd();
|
|
464
479
|
} if (rf & 2) {
|
|
465
480
|
i0.ɵɵclassProp("surface--collapsed", ctx.Collapsed)("surface--fill", ctx.Fill && !ctx.Collapsed);
|
|
466
481
|
i0.ɵɵadvance();
|
|
467
482
|
i0.ɵɵconditional(ctx.Collapsed ? 1 : 2);
|
|
468
|
-
} }, dependencies: [CommonModule, i1.NgTemplateOutlet, ArtifactsModule,
|
|
469
|
-
ChannelOnboardingPanelComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n \n\n --
|
|
483
|
+
} }, dependencies: [CommonModule, i1.NgTemplateOutlet, ArtifactsModule, RealtimeActivityRailComponent, RealtimeChannelPaneComponent,
|
|
484
|
+
ChannelOnboardingPanelComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n \n\n --activity-accent: var(--mj-color-violet-400, #a78bfa);\n --activity-accent-bg: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 12%, transparent);\n --activity-accent-border: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 38%, transparent);\n \n\n --tab-accent: var(--mj-brand-primary);\n}\n\n\n\n\n.surface[_ngcontent-%COMP%] {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n}\n\n\n.surface--fill[_ngcontent-%COMP%] {\n width: 100%;\n border-left: none;\n}\n.surface--collapsed[_ngcontent-%COMP%] {\n width: 40px;\n background: var(--mj-bg-surface-card);\n}\n\n\n\n.surface__strip[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 10px 0;\n}\n.surface__strip-icon[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.surface__toggle[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n display: grid;\n place-items: center;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n color: var(--mj-text-muted);\n cursor: pointer;\n flex-shrink: 0;\n font-size: 10px;\n transition: color 140ms ease, border-color 140ms ease;\n}\n.surface__toggle[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.surface-tabs[_ngcontent-%COMP%] {\n display: flex;\n align-items: stretch;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n overflow-x: auto;\n scrollbar-width: none;\n}\n.surface-tabs[_ngcontent-%COMP%]::-webkit-scrollbar {\n display: none;\n}\n\n\n\n.tabs-spacer[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n min-width: 12px;\n}\n\n\n\n\n.s-tab[_ngcontent-%COMP%] {\n position: relative;\n padding: 10px 14px;\n border: 0;\n background: transparent;\n cursor: pointer;\n font-family: inherit;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n display: inline-flex;\n align-items: center;\n gap: 7px;\n border-bottom: 3px solid transparent;\n transition: color 150ms ease, border-color 150ms ease, background 150ms ease;\n white-space: nowrap;\n flex: 0 1 auto;\n min-width: calc(11px + 7px + 8ch + 28px); \n\n}\n.s-tab[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n flex-shrink: 0;\n}\n.s-tab__title[_ngcontent-%COMP%] {\n max-width: 22ch;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n}\n.s-tab[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-hover);\n}\n\n\n\n.s-tab__dot[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n background: var(--tab-accent);\n}\n\n\n\n.s-tab--active[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.s-tab--channel.s-tab--active[_ngcontent-%COMP%] {\n border-bottom-color: var(--tab-accent);\n}\n.s-tab--channel.s-tab--active[_ngcontent-%COMP%] .s-tab__dot[_ngcontent-%COMP%] {\n box-shadow: 0 0 6px var(--tab-accent);\n}\n.s-tab--channel.s-tab--active[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--tab-accent);\n}\n\n\n\n.s-tab--activity[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n.s-tab--activity[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--activity-accent);\n}\n.s-tab--activity.s-tab--active[_ngcontent-%COMP%] {\n border-bottom-color: var(--activity-accent);\n background: var(--activity-accent-bg);\n color: var(--mj-text-primary);\n}\n.s-tab__badge[_ngcontent-%COMP%] {\n display: inline-grid;\n place-items: center;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n border-radius: var(--mj-radius-full, 9999px);\n background: var(--activity-accent);\n color: var(--mj-text-inverse);\n font-size: 9.5px;\n font-weight: 800;\n line-height: 1;\n flex-shrink: 0;\n}\n\n\n\n.s-tab--flash[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_tab-flash 1.4s ease;\n}\n@keyframes _ngcontent-%COMP%_tab-flash {\n 0% {\n background: color-mix(in srgb, var(--tab-accent) 30%, transparent);\n border-bottom-color: var(--tab-accent);\n color: var(--mj-text-primary);\n }\n 60% {\n background: color-mix(in srgb, var(--tab-accent) 16%, transparent);\n border-bottom-color: var(--tab-accent);\n }\n 100% {\n background: var(--mj-bg-surface);\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .s-tab--flash[_ngcontent-%COMP%] {\n animation: none;\n background: color-mix(in srgb, var(--tab-accent) 18%, transparent);\n }\n}\n\n.tabs-end[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 8px;\n flex-shrink: 0;\n}\n\n\n\n.s-pane[_ngcontent-%COMP%] {\n display: none;\n flex: 1;\n min-height: 0;\n flex-direction: column;\n overflow: hidden;\n \n\n position: relative;\n}\n.s-pane--active[_ngcontent-%COMP%] {\n display: flex;\n}\n\n\n\n.surface__empty[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 12px;\n font-weight: 500;\n padding: 24px;\n text-align: center;\n}\n.surface__empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--activity-accent);\n opacity: 0.6;\n}\n\n\n\n.channel-placeholder[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 12.5px;\n font-weight: 600;\n padding: 24px;\n text-align: center;\n}\n.channel-placeholder[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 22px;\n color: var(--tab-accent);\n opacity: 0.7;\n}\n\n\n\n@media (max-width: 860px) {\n .surface[_ngcontent-%COMP%] {\n display: none;\n }\n}"] });
|
|
470
485
|
}
|
|
471
486
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RealtimeSurfaceTabsComponent, [{
|
|
472
487
|
type: Component,
|
|
473
488
|
args: [{ standalone: true, selector: 'mj-realtime-surface-tabs', imports: [
|
|
474
489
|
CommonModule, ArtifactsModule, RealtimeActivityRailComponent, RealtimeChannelPaneComponent,
|
|
475
490
|
ChannelOnboardingPanelComponent
|
|
476
|
-
], template: "<!-- SIZING IS EXTERNAL: the overlay hosts this panel inside a fixed-width flex item and\n owns its width (drag, persistence, default tiers) \u2014 the panel just fills it. -->\n<aside class=\"surface\"\n [class.surface--collapsed]=\"Collapsed\"\n [class.surface--fill]=\"Fill && !Collapsed\"\n aria-label=\"Session surfaces\">\n\n @if (Collapsed) {\n <!-- Slim strip: the panel's collapse target (lifted from the old rail behavior) -->\n <div class=\"surface__strip\">\n <button type=\"button\"\n class=\"surface__toggle\"\n (click)=\"ToggleCollapsed()\"\n title=\"Show session panel\"\n aria-expanded=\"false\">\n <i class=\"fa-solid fa-chevron-left\" aria-hidden=\"true\"></i>\n </button>\n <i class=\"fa-solid fa-list-check surface__strip-icon\" aria-hidden=\"true\" title=\"Session activity\"></i>\n </div>\n } @else {\n <!-- Tab strip: Activity | artifact tabs\u2026 | channel tabs\u2026 -->\n <div class=\"surface-tabs\" role=\"tablist\">\n @for (tab of Model.Tabs; track TrackTab($index, tab)) {\n <button type=\"button\"\n class=\"s-tab\"\n role=\"tab\"\n [class.s-tab--active]=\"tab.Key === Model.ActiveKey\"\n [class.s-tab--flash]=\"tab.Key === Model.FlashKey\"\n [class.s-tab--unseen]=\"Model.IsUnseen(tab.Key)\"\n [attr.aria-selected]=\"tab.Key === Model.ActiveKey\"\n [title]=\"Model.IsUnseen(tab.Key) ? tab.Title + ' (new)' : tab.Title\"\n (click)=\"Model.Focus(tab.Key)\">\n <i [class]=\"tab.Icon\" aria-hidden=\"true\"></i>\n <span class=\"s-tab__title\">{{ tab.Title }}</span>\n @if (Model.IsUnseen(tab.Key)) {\n <span class=\"s-tab__unseen-dot\" aria-hidden=\"true\"></span>\n }\n </button>\n }\n <div class=\"tabs-end\">\n <button type=\"button\"\n class=\"surface__toggle\"\n (click)=\"ToggleCollapsed()\"\n title=\"Hide session panel\"\n aria-expanded=\"true\">\n <i class=\"fa-solid fa-chevron-right\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n\n <!-- Panes: ALL kept alive; only the active one is displayed (mirrors the mockup) -->\n @for (tab of Model.Tabs; track TrackTab($index, tab)) {\n <div class=\"s-pane\" [class.s-pane--active]=\"tab.Key === Model.ActiveKey\" role=\"tabpanel\">\n @switch (tab.Kind) {\n @case ('activity') {\n <mj-realtime-activity-rail\n [State]=\"State\"\n [DevMode]=\"DevMode\"\n [Embedded]=\"true\"\n (OpenRunRequested)=\"OpenRunRequested.emit($event)\"\n (OpenArtifactRequested)=\"FocusArtifact($event)\">\n </mj-realtime-activity-rail>\n }\n @case ('artifact') {\n @if (tab.Data?.Artifact; as artifact) {\n <div class=\"artifact-pane\">\n <mj-artifact-viewer-panel\n [artifactId]=\"artifact.ArtifactID\"\n [currentUser]=\"CurrentUser!\"\n [environmentId]=\"EnvironmentID\"\n [showHeader]=\"false\"\n [showTabs]=\"false\"\n [showSaveToCollection]=\"false\"\n [showCloseButton]=\"false\"\n [showMaximizeButton]=\"false\">\n </mj-artifact-viewer-panel>\n </div>\n }\n }\n @case ('channel') {\n @if (tab.Data?.Plugin; as plugin) {\n <!-- Registry-resolved channel: the pane host creates the plugin's surface\n component dynamically and hands the instance back for binding -->\n <mj-realtime-channel-pane [Plugin]=\"plugin\"></mj-realtime-channel-pane>\n <!-- First-run intro: overlaid over the active channel pane the first time this user\n opens it; the pane host renders display:none + a sibling surface, so the overlay\n sits here (inside the positioned .s-pane) rather than inside the pane host. -->\n @if (tab.Key === Model.ActiveKey && OnboardingContent) {\n <mj-channel-onboarding-panel\n [Content]=\"OnboardingContent\"\n (Dismissed)=\"DismissOnboarding()\">\n </mj-channel-onboarding-panel>\n }\n } @else if (tab.Data?.Content; as content) {\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n } @else {\n <!-- Placeholder until the channel registration supplies a plugin / template -->\n <div class=\"channel-placeholder\" role=\"status\">\n <i class=\"fa-solid fa-chalkboard\" aria-hidden=\"true\"></i>\n <span>{{ tab.Title }} coming online\u2026</span>\n </div>\n }\n }\n }\n </div>\n }\n }\n</aside>\n", styles: [":host {\n display: block;\n height: 100%;\n /* sage / delegated-agent accent \u2014 same palette the rail + delegation cards use */\n --sage: var(--mj-color-violet-400, #a78bfa);\n --sage-bg: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 10%, transparent);\n --sage-border: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 38%, transparent);\n}\n\n/* The surface panel fills the overlay's `.call-panel` flex item \u2014 the overlay owns\n the width (user drag via the resize handle, persisted per-user, default tiers). */\n.surface {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n}\n/* Board-focus fill: the panel owns the whole overlay (the main call column is hidden). */\n.surface--fill {\n width: 100%;\n border-left: none;\n}\n.surface--collapsed {\n width: 40px;\n background: var(--mj-bg-surface-card);\n}\n\n/* ---------- collapsed slim strip ---------- */\n.surface__strip {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 10px 0;\n}\n.surface__strip-icon {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.surface__toggle {\n width: 24px;\n height: 24px;\n display: grid;\n place-items: center;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n color: var(--mj-text-muted);\n cursor: pointer;\n flex-shrink: 0;\n font-size: 10px;\n transition: color 140ms ease, border-color 140ms ease;\n}\n.surface__toggle:hover {\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* ---------- tab strip (mirrors the whiteboard mockup's .surface-tabs) ---------- */\n.surface-tabs {\n display: flex;\n align-items: stretch;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n overflow-x: auto;\n scrollbar-width: none;\n}\n.surface-tabs::-webkit-scrollbar {\n display: none;\n}\n\n/* Tabs keep their natural width while there's room; when space gets genuinely tight\n they shrink (ellipsizing their titles) down to a readable floor (icon + ~8ch).\n The ACTIVE tab never shrinks \u2014 inactive tabs give way first. Only when everything\n is at its floor does the strip actually overflow (horizontal scroll). */\n.s-tab {\n padding: 10px 14px;\n border: 0;\n background: transparent;\n cursor: pointer;\n font-family: inherit;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n display: inline-flex;\n align-items: center;\n gap: 7px;\n border-bottom: 3px solid transparent;\n transition: color 150ms ease, border-color 150ms ease, background 150ms ease;\n white-space: nowrap;\n flex: 0 1 auto;\n min-width: calc(11px + 7px + 8ch + 28px); /* icon + gap + ~8ch + padding */\n}\n.s-tab i {\n font-size: 11px;\n flex-shrink: 0;\n}\n.s-tab__title {\n max-width: 24ch;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n}\n.s-tab:hover {\n color: var(--mj-text-secondary);\n}\n.s-tab--active {\n color: var(--mj-text-primary);\n border-bottom-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n /* the active tab stays fully readable \u2014 others shrink first */\n flex-shrink: 0;\n}\n\n/* Brief violet flash for a just-arrived artifact tab (per the mockup's accent) */\n.s-tab--flash {\n animation: tab-flash 1.4s ease;\n}\n@keyframes tab-flash {\n 0% {\n background: color-mix(in srgb, var(--sage) 28%, transparent);\n border-bottom-color: var(--sage);\n color: var(--mj-text-primary);\n }\n 60% {\n background: color-mix(in srgb, var(--sage) 16%, transparent);\n border-bottom-color: var(--sage);\n }\n 100% {\n background: var(--mj-bg-surface);\n }\n}\n\n/* PERSISTENT unseen glow: content arrived without stealing focus (e.g. a finished\n artifact) \u2014 the tab breathes violet until the user visits it. */\n.s-tab--unseen {\n color: var(--mj-color-violet-300, var(--mj-text-secondary));\n animation: tab-unseen 2.2s ease-in-out infinite;\n}\n@keyframes tab-unseen {\n 0%, 100% { background: color-mix(in srgb, var(--sage) 6%, transparent); }\n 50% { background: color-mix(in srgb, var(--sage) 18%, transparent); }\n}\n.s-tab__unseen-dot {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n flex-shrink: 0;\n background: var(--sage);\n box-shadow: 0 0 6px var(--sage);\n}\n\n.tabs-end {\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 8px;\n flex-shrink: 0;\n}\n\n/* ---------- panes: all alive, only the active one displayed ---------- */\n.s-pane {\n display: none;\n flex: 1;\n min-height: 0;\n flex-direction: column;\n overflow: hidden;\n /* Positioning context for the first-run channel-onboarding overlay (absolute, inset:0). */\n position: relative;\n}\n.s-pane--active {\n display: flex;\n}\n\n/* Read-only embedded artifact viewer fills the pane */\n.artifact-pane {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.artifact-pane > * {\n flex: 1;\n min-height: 0;\n}\n\n/* Channel slot placeholder (\"Whiteboard coming online\u2026\") */\n.channel-placeholder {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 12.5px;\n font-weight: 600;\n padding: 24px;\n text-align: center;\n}\n.channel-placeholder i {\n font-size: 22px;\n color: var(--sage);\n opacity: 0.7;\n}\n\n/* On narrow widths the panel stacks out of the way (overlay falls back to single column) */\n@media (max-width: 860px) {\n .surface {\n display: none;\n }\n}\n"] }]
|
|
491
|
+
], template: "<!-- SIZING IS EXTERNAL: the overlay hosts this panel inside a fixed-width flex item and\n owns its width (drag, persistence, default tiers) \u2014 the panel just fills it. -->\n<aside class=\"surface\"\n [class.surface--collapsed]=\"Collapsed\"\n [class.surface--fill]=\"Fill && !Collapsed\"\n aria-label=\"Session surfaces\">\n\n @if (Collapsed) {\n <!-- Slim strip: the panel's collapse target -->\n <div class=\"surface__strip\">\n <button type=\"button\"\n class=\"surface__toggle\"\n (click)=\"ToggleCollapsed()\"\n title=\"Show session panel\"\n aria-expanded=\"false\">\n <i class=\"fa-solid fa-chevron-left\" aria-hidden=\"true\"></i>\n </button>\n <i class=\"fa-solid fa-wave-square surface__strip-icon\" aria-hidden=\"true\" title=\"Session activity\"></i>\n </div>\n } @else {\n <!-- Tab strip: channel tabs (left cluster) \u2026 | spacer | Activity (right-aligned) -->\n <div class=\"surface-tabs\" role=\"tablist\">\n @for (tab of Model.Tabs; track TrackTab($index, tab)) {\n @if (tab.Kind === 'activity') {\n <!-- Flex spacer pushes the Activity tab to the far right -->\n <span class=\"tabs-spacer\" aria-hidden=\"true\"></span>\n }\n <button type=\"button\"\n class=\"s-tab\"\n role=\"tab\"\n [class.s-tab--activity]=\"tab.Kind === 'activity'\"\n [class.s-tab--channel]=\"tab.Kind === 'channel'\"\n [class.s-tab--active]=\"tab.Key === Model.ActiveKey\"\n [class.s-tab--flash]=\"tab.Key === Model.FlashKey\"\n [style.--tab-accent]=\"tab.Color || null\"\n [attr.aria-selected]=\"tab.Key === Model.ActiveKey\"\n [title]=\"tab.Title\"\n (click)=\"Model.Focus(tab.Key)\">\n @if (tab.Kind === 'channel') {\n <span class=\"s-tab__dot\" aria-hidden=\"true\"></span>\n }\n <i [class]=\"tab.Icon\" aria-hidden=\"true\"></i>\n <span class=\"s-tab__title\">{{ tab.Title }}</span>\n @if (tab.Kind === 'activity' && State.Cards.length > 0) {\n <span class=\"s-tab__badge\" aria-hidden=\"true\">{{ State.Cards.length }}</span>\n }\n </button>\n }\n <div class=\"tabs-end\">\n <button type=\"button\"\n class=\"surface__toggle\"\n (click)=\"ToggleCollapsed()\"\n title=\"Hide session panel\"\n aria-expanded=\"true\">\n <i class=\"fa-solid fa-chevron-right\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n\n <!-- Panes: ALL kept alive; only the active one is displayed -->\n @for (tab of Model.Tabs; track TrackTab($index, tab)) {\n <div class=\"s-pane\" [class.s-pane--active]=\"tab.Key === Model.ActiveKey\" role=\"tabpanel\">\n @switch (tab.Kind) {\n @case ('activity') {\n <mj-realtime-activity-rail\n [State]=\"State\"\n [DevMode]=\"DevMode\"\n [Embedded]=\"true\"\n [CurrentUser]=\"CurrentUser\"\n [EnvironmentID]=\"EnvironmentID\"\n [ExtraArtifacts]=\"ExtraArtifacts\"\n (OpenRunRequested)=\"OpenRunRequested.emit($event)\">\n </mj-realtime-activity-rail>\n }\n @case ('channel') {\n @if (tab.Data?.Plugin; as plugin) {\n <!-- Registry-resolved channel: the pane host creates the plugin's surface\n component dynamically and hands the instance back for binding -->\n <mj-realtime-channel-pane [Plugin]=\"plugin\"></mj-realtime-channel-pane>\n <!-- First-run intro: overlaid over the active channel pane the first time this user\n opens it; the pane host renders display:none + a sibling surface, so the overlay\n sits here (inside the positioned .s-pane) rather than inside the pane host. -->\n @if (tab.Key === Model.ActiveKey && OnboardingContent) {\n <mj-channel-onboarding-panel\n [Content]=\"OnboardingContent\"\n (Dismissed)=\"DismissOnboarding()\">\n </mj-channel-onboarding-panel>\n }\n } @else if (tab.Data?.Content; as content) {\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n } @else {\n <!-- Placeholder until the channel registration supplies a plugin / template -->\n <div class=\"channel-placeholder\" role=\"status\">\n <i class=\"fa-solid fa-chalkboard\" aria-hidden=\"true\"></i>\n <span>{{ tab.Title }} coming online\u2026</span>\n </div>\n }\n }\n }\n </div>\n }\n\n @if (Model.Tabs.length === 0) {\n <!-- Nothing in play yet (idle voice-first session): a gentle hint, not an empty grid -->\n <div class=\"surface__empty\" role=\"status\">\n <i class=\"fa-solid fa-wave-square\" aria-hidden=\"true\"></i>\n <span>Surfaces appear here as the call gets going.</span>\n </div>\n }\n }\n</aside>\n", styles: [":host {\n display: block;\n height: 100%;\n /* activity accent \u2014 same violet palette the rail + delegation cards use */\n --activity-accent: var(--mj-color-violet-400, #a78bfa);\n --activity-accent-bg: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 12%, transparent);\n --activity-accent-border: color-mix(in srgb, var(--mj-color-violet-400, #a78bfa) 38%, transparent);\n /* per-tab accent, set inline per channel ([style.--tab-accent]); falls back to the brand. */\n --tab-accent: var(--mj-brand-primary);\n}\n\n/* The surface panel fills the overlay's `.call-panel` flex item \u2014 the overlay owns\n the width (user drag via the resize handle, persisted per-user, default tiers). */\n.surface {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n}\n/* Board-focus fill: the panel owns the whole overlay (the main call column is hidden). */\n.surface--fill {\n width: 100%;\n border-left: none;\n}\n.surface--collapsed {\n width: 40px;\n background: var(--mj-bg-surface-card);\n}\n\n/* ---------- collapsed slim strip ---------- */\n.surface__strip {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 10px 0;\n}\n.surface__strip-icon {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.surface__toggle {\n width: 24px;\n height: 24px;\n display: grid;\n place-items: center;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n color: var(--mj-text-muted);\n cursor: pointer;\n flex-shrink: 0;\n font-size: 10px;\n transition: color 140ms ease, border-color 140ms ease;\n}\n.surface__toggle:hover {\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* ---------- tab strip: channel cluster (left) | spacer | Activity (right) ---------- */\n.surface-tabs {\n display: flex;\n align-items: stretch;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n overflow-x: auto;\n scrollbar-width: none;\n}\n.surface-tabs::-webkit-scrollbar {\n display: none;\n}\n\n/* The flex spacer separates the channel cluster (left) from the Activity tab (right). */\n.tabs-spacer {\n flex: 1 1 auto;\n min-width: 12px;\n}\n\n/* Tabs keep their natural width while there's room; when space gets tight they shrink\n (ellipsizing their titles) down to a readable floor. The ACTIVE tab never shrinks. */\n.s-tab {\n position: relative;\n padding: 10px 14px;\n border: 0;\n background: transparent;\n cursor: pointer;\n font-family: inherit;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n display: inline-flex;\n align-items: center;\n gap: 7px;\n border-bottom: 3px solid transparent;\n transition: color 150ms ease, border-color 150ms ease, background 150ms ease;\n white-space: nowrap;\n flex: 0 1 auto;\n min-width: calc(11px + 7px + 8ch + 28px); /* icon + gap + ~8ch + padding */\n}\n.s-tab i {\n font-size: 11px;\n flex-shrink: 0;\n}\n.s-tab__title {\n max-width: 22ch;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n}\n.s-tab:hover {\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-hover);\n}\n\n/* Per-channel color dot \u2014 the distinct accent each channel tab carries. */\n.s-tab__dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n background: var(--tab-accent);\n}\n\n/* Active tab: filled background + a colored underline in the tab's own accent. */\n.s-tab--active {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.s-tab--channel.s-tab--active {\n border-bottom-color: var(--tab-accent);\n}\n.s-tab--channel.s-tab--active .s-tab__dot {\n box-shadow: 0 0 6px var(--tab-accent);\n}\n.s-tab--channel.s-tab--active i {\n color: var(--tab-accent);\n}\n\n/* ---------- the Activity tab (right-aligned, distinct accent + pulse icon) ---------- */\n.s-tab--activity {\n color: var(--mj-text-secondary);\n}\n.s-tab--activity i {\n color: var(--activity-accent);\n}\n.s-tab--activity.s-tab--active {\n border-bottom-color: var(--activity-accent);\n background: var(--activity-accent-bg);\n color: var(--mj-text-primary);\n}\n.s-tab__badge {\n display: inline-grid;\n place-items: center;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n border-radius: var(--mj-radius-full, 9999px);\n background: var(--activity-accent);\n color: var(--mj-text-inverse);\n font-size: 9.5px;\n font-weight: 800;\n line-height: 1;\n flex-shrink: 0;\n}\n\n/* Brief flash for a just-revealed channel tab (the agent first acted on it). */\n.s-tab--flash {\n animation: tab-flash 1.4s ease;\n}\n@keyframes tab-flash {\n 0% {\n background: color-mix(in srgb, var(--tab-accent) 30%, transparent);\n border-bottom-color: var(--tab-accent);\n color: var(--mj-text-primary);\n }\n 60% {\n background: color-mix(in srgb, var(--tab-accent) 16%, transparent);\n border-bottom-color: var(--tab-accent);\n }\n 100% {\n background: var(--mj-bg-surface);\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .s-tab--flash {\n animation: none;\n background: color-mix(in srgb, var(--tab-accent) 18%, transparent);\n }\n}\n\n.tabs-end {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 8px;\n flex-shrink: 0;\n}\n\n/* ---------- panes: all alive, only the active one displayed ---------- */\n.s-pane {\n display: none;\n flex: 1;\n min-height: 0;\n flex-direction: column;\n overflow: hidden;\n /* Positioning context for the first-run channel-onboarding overlay (absolute, inset:0). */\n position: relative;\n}\n.s-pane--active {\n display: flex;\n}\n\n/* Empty strip (idle voice-first session): a gentle hint rather than a bare grid. */\n.surface__empty {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 12px;\n font-weight: 500;\n padding: 24px;\n text-align: center;\n}\n.surface__empty i {\n font-size: 20px;\n color: var(--activity-accent);\n opacity: 0.6;\n}\n\n/* Channel slot placeholder (\"Whiteboard coming online\u2026\") */\n.channel-placeholder {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 12.5px;\n font-weight: 600;\n padding: 24px;\n text-align: center;\n}\n.channel-placeholder i {\n font-size: 22px;\n color: var(--tab-accent);\n opacity: 0.7;\n}\n\n/* On narrow widths the panel stacks out of the way (overlay falls back to single column) */\n@media (max-width: 860px) {\n .surface {\n display: none;\n }\n}\n"] }]
|
|
477
492
|
}], null, { State: [{
|
|
478
493
|
type: Input,
|
|
479
494
|
args: [{ required: true }]
|
|
@@ -485,12 +500,19 @@ export class RealtimeSurfaceTabsComponent {
|
|
|
485
500
|
type: Input
|
|
486
501
|
}], EnvironmentID: [{
|
|
487
502
|
type: Input
|
|
503
|
+
}], ExtraArtifacts: [{
|
|
504
|
+
type: Input
|
|
505
|
+
}], ShowActivityTab: [{
|
|
506
|
+
type: Input
|
|
488
507
|
}], OpenRunRequested: [{
|
|
489
508
|
type: Output
|
|
490
509
|
}], CollapsedChange: [{
|
|
491
510
|
type: Output
|
|
492
511
|
}], WideChanged: [{
|
|
493
512
|
type: Output
|
|
513
|
+
}], activityRail: [{
|
|
514
|
+
type: ViewChild,
|
|
515
|
+
args: [RealtimeActivityRailComponent]
|
|
494
516
|
}] }); })();
|
|
495
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RealtimeSurfaceTabsComponent, { className: "RealtimeSurfaceTabsComponent", filePath: "src/lib/components/realtime/realtime-surface-tabs.component.ts", lineNumber:
|
|
517
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RealtimeSurfaceTabsComponent, { className: "RealtimeSurfaceTabsComponent", filePath: "src/lib/components/realtime/realtime-surface-tabs.component.ts", lineNumber: 62 }); })();
|
|
496
518
|
//# sourceMappingURL=realtime-surface-tabs.component.js.map
|