@memberjunction/ng-conversations 5.43.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 +49 -28
- 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 +24 -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 +10 -1
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +67 -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 +17 -1
- package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
- package/dist/lib/services/mention-autocomplete.service.js +58 -2
- 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
|
@@ -0,0 +1,574 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, ViewChild, inject } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
4
|
+
import { LogError } from '@memberjunction/core';
|
|
5
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
6
|
+
import { MJMediaPlayerComponent, MJStorageMediaPlayerComponent } from '@memberjunction/ng-media-player';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/common";
|
|
9
|
+
const _c0 = ["mediaPane"];
|
|
10
|
+
function RealtimeMediaSurfaceComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
11
|
+
i0.ɵɵelementStart(0, "div", 2);
|
|
12
|
+
i0.ɵɵelement(1, "i", 3);
|
|
13
|
+
i0.ɵɵelementStart(2, "p", 4);
|
|
14
|
+
i0.ɵɵtext(3, "No media yet");
|
|
15
|
+
i0.ɵɵelementEnd();
|
|
16
|
+
i0.ɵɵelementStart(4, "p", 5);
|
|
17
|
+
i0.ɵɵtext(5);
|
|
18
|
+
i0.ɵɵelementEnd()();
|
|
19
|
+
} if (rf & 2) {
|
|
20
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
21
|
+
i0.ɵɵadvance(5);
|
|
22
|
+
i0.ɵɵtextInterpolate1("", ctx_r0.AgentName, " will share visuals here during the conversation.");
|
|
23
|
+
} }
|
|
24
|
+
function RealtimeMediaSurfaceComponent_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
26
|
+
i0.ɵɵelementStart(0, "button", 8);
|
|
27
|
+
i0.ɵɵlistener("click", function RealtimeMediaSurfaceComponent_Conditional_2_For_2_Template_button_click_0_listener() { const item_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SelectTab(item_r3)); })("keydown", function RealtimeMediaSurfaceComponent_Conditional_2_For_2_Template_button_keydown_0_listener($event) { const ɵ$index_17_r4 = i0.ɵɵrestoreView(_r2).$index; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnTabKeydown($event, ɵ$index_17_r4)); });
|
|
28
|
+
i0.ɵɵelement(1, "i", 9);
|
|
29
|
+
i0.ɵɵelementStart(2, "span", 10);
|
|
30
|
+
i0.ɵɵtext(3);
|
|
31
|
+
i0.ɵɵelementEnd();
|
|
32
|
+
i0.ɵɵelementStart(4, "span", 11);
|
|
33
|
+
i0.ɵɵlistener("click", function RealtimeMediaSurfaceComponent_Conditional_2_For_2_Template_span_click_4_listener($event) { const item_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.CloseItem($event, item_r3)); })("keydown.enter", function RealtimeMediaSurfaceComponent_Conditional_2_For_2_Template_span_keydown_enter_4_listener($event) { const item_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.CloseItem($event, item_r3)); })("keydown.space", function RealtimeMediaSurfaceComponent_Conditional_2_For_2_Template_span_keydown_space_4_listener($event) { const item_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.CloseItem($event, item_r3)); });
|
|
34
|
+
i0.ɵɵelement(5, "i", 12);
|
|
35
|
+
i0.ɵɵelementEnd()();
|
|
36
|
+
} if (rf & 2) {
|
|
37
|
+
const item_r3 = ctx.$implicit;
|
|
38
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
39
|
+
i0.ɵɵclassProp("media-tab--active", ctx_r0.IsActive(item_r3));
|
|
40
|
+
i0.ɵɵproperty("title", item_r3.DisplayName);
|
|
41
|
+
i0.ɵɵattribute("aria-selected", ctx_r0.IsActive(item_r3))("tabindex", ctx_r0.IsActive(item_r3) ? 0 : -1);
|
|
42
|
+
i0.ɵɵadvance();
|
|
43
|
+
i0.ɵɵproperty("ngClass", ctx_r0.IconFor(item_r3.Type));
|
|
44
|
+
i0.ɵɵadvance(2);
|
|
45
|
+
i0.ɵɵtextInterpolate(item_r3.DisplayName);
|
|
46
|
+
i0.ɵɵadvance();
|
|
47
|
+
i0.ɵɵattribute("aria-label", "Close " + item_r3.DisplayName);
|
|
48
|
+
} }
|
|
49
|
+
function RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
50
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
51
|
+
i0.ɵɵelementStart(0, "button", 25);
|
|
52
|
+
i0.ɵɵlistener("click", function RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.CycleZoom()); });
|
|
53
|
+
i0.ɵɵelement(1, "i", 26);
|
|
54
|
+
i0.ɵɵelementStart(2, "span", 27);
|
|
55
|
+
i0.ɵɵtext(3);
|
|
56
|
+
i0.ɵɵelementEnd()();
|
|
57
|
+
} if (rf & 2) {
|
|
58
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
59
|
+
i0.ɵɵattribute("aria-label", "Zoom image (currently " + ctx_r0.ImageZoom + "x)");
|
|
60
|
+
i0.ɵɵadvance(3);
|
|
61
|
+
i0.ɵɵtextInterpolate1("", ctx_r0.ImageZoom, "\u00D7");
|
|
62
|
+
} }
|
|
63
|
+
function RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
64
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
65
|
+
i0.ɵɵelementStart(0, "button", 28);
|
|
66
|
+
i0.ɵɵlistener("click", function RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const active_r7 = i0.ɵɵnextContext(); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.Download(active_r7)); });
|
|
67
|
+
i0.ɵɵelement(1, "i", 29);
|
|
68
|
+
i0.ɵɵelementEnd();
|
|
69
|
+
i0.ɵɵelementStart(2, "button", 30);
|
|
70
|
+
i0.ɵɵlistener("click", function RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_5_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r6); const active_r7 = i0.ɵɵnextContext(); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OpenInNew(active_r7)); });
|
|
71
|
+
i0.ɵɵelement(3, "i", 31);
|
|
72
|
+
i0.ɵɵelementEnd();
|
|
73
|
+
} }
|
|
74
|
+
function RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
75
|
+
i0.ɵɵelement(0, "mj-storage-media-player", 19);
|
|
76
|
+
} if (rf & 2) {
|
|
77
|
+
const active_r7 = i0.ɵɵnextContext();
|
|
78
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
79
|
+
i0.ɵɵproperty("FileID", active_r7.FileID ?? null)("Provider", ctx_r0.Provider);
|
|
80
|
+
} }
|
|
81
|
+
function RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
82
|
+
i0.ɵɵelement(0, "mj-media-player", 20);
|
|
83
|
+
} if (rf & 2) {
|
|
84
|
+
const active_r7 = i0.ɵɵnextContext();
|
|
85
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
86
|
+
i0.ɵɵproperty("Tracks", ctx_r0.TracksFor(active_r7));
|
|
87
|
+
} }
|
|
88
|
+
function RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
89
|
+
i0.ɵɵelementStart(0, "div", 21);
|
|
90
|
+
i0.ɵɵelement(1, "i", 32);
|
|
91
|
+
i0.ɵɵelementStart(2, "p", 33);
|
|
92
|
+
i0.ɵɵtext(3, "Loading secure media\u2026");
|
|
93
|
+
i0.ɵɵelementEnd()();
|
|
94
|
+
} }
|
|
95
|
+
function RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
96
|
+
i0.ɵɵelementStart(0, "div", 22);
|
|
97
|
+
i0.ɵɵelement(1, "i", 34);
|
|
98
|
+
i0.ɵɵelementStart(2, "p", 33);
|
|
99
|
+
i0.ɵɵtext(3);
|
|
100
|
+
i0.ɵɵelementEnd()();
|
|
101
|
+
} if (rf & 2) {
|
|
102
|
+
i0.ɵɵadvance(3);
|
|
103
|
+
i0.ɵɵtextInterpolate(ctx);
|
|
104
|
+
} }
|
|
105
|
+
function RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_13_Case_0_Template(rf, ctx) { if (rf & 1) {
|
|
106
|
+
i0.ɵɵelement(0, "img", 38);
|
|
107
|
+
} if (rf & 2) {
|
|
108
|
+
const renderUrl_r8 = i0.ɵɵnextContext();
|
|
109
|
+
const active_r7 = i0.ɵɵnextContext();
|
|
110
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
111
|
+
i0.ɵɵstyleProp("transform", "scale(" + ctx_r0.ImageZoom + ")");
|
|
112
|
+
i0.ɵɵproperty("src", renderUrl_r8, i0.ɵɵsanitizeUrl)("alt", active_r7.DisplayName);
|
|
113
|
+
} }
|
|
114
|
+
function RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_13_Case_1_Template(rf, ctx) { if (rf & 1) {
|
|
115
|
+
i0.ɵɵelement(0, "iframe", 36);
|
|
116
|
+
} if (rf & 2) {
|
|
117
|
+
const renderUrl_r8 = i0.ɵɵnextContext();
|
|
118
|
+
const active_r7 = i0.ɵɵnextContext();
|
|
119
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
120
|
+
i0.ɵɵproperty("src", ctx_r0.SafeUrl(renderUrl_r8), i0.ɵɵsanitizeResourceUrl)("title", active_r7.DisplayName);
|
|
121
|
+
} }
|
|
122
|
+
function RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_13_Case_2_Template(rf, ctx) { if (rf & 1) {
|
|
123
|
+
i0.ɵɵelement(0, "iframe", 37);
|
|
124
|
+
} if (rf & 2) {
|
|
125
|
+
const renderUrl_r8 = i0.ɵɵnextContext();
|
|
126
|
+
const active_r7 = i0.ɵɵnextContext();
|
|
127
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
128
|
+
i0.ɵɵproperty("src", ctx_r0.SafeUrl(renderUrl_r8), i0.ɵɵsanitizeResourceUrl)("title", active_r7.DisplayName);
|
|
129
|
+
} }
|
|
130
|
+
function RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
131
|
+
i0.ɵɵconditionalCreate(0, RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_13_Case_0_Template, 1, 4, "img", 35)(1, RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_13_Case_1_Template, 1, 2, "iframe", 36)(2, RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_13_Case_2_Template, 1, 2, "iframe", 37);
|
|
132
|
+
} if (rf & 2) {
|
|
133
|
+
let tmp_6_0;
|
|
134
|
+
const active_r7 = i0.ɵɵnextContext();
|
|
135
|
+
i0.ɵɵconditional((tmp_6_0 = active_r7.Type) === "image" ? 0 : tmp_6_0 === "pdf" ? 1 : tmp_6_0 === "web" ? 2 : -1);
|
|
136
|
+
} }
|
|
137
|
+
function RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_14_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
138
|
+
i0.ɵɵelementStart(0, "span", 39);
|
|
139
|
+
i0.ɵɵtext(1);
|
|
140
|
+
i0.ɵɵelementEnd();
|
|
141
|
+
} if (rf & 2) {
|
|
142
|
+
const active_r7 = i0.ɵɵnextContext(2);
|
|
143
|
+
i0.ɵɵadvance();
|
|
144
|
+
i0.ɵɵtextInterpolate(active_r7.Highlight == null ? null : active_r7.Highlight.Label);
|
|
145
|
+
} }
|
|
146
|
+
function RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
147
|
+
i0.ɵɵelementStart(0, "div", 23);
|
|
148
|
+
i0.ɵɵconditionalCreate(1, RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_14_Conditional_1_Template, 2, 1, "span", 39);
|
|
149
|
+
i0.ɵɵelementEnd();
|
|
150
|
+
} if (rf & 2) {
|
|
151
|
+
const active_r7 = i0.ɵɵnextContext();
|
|
152
|
+
i0.ɵɵproperty("ngStyle", ctx);
|
|
153
|
+
i0.ɵɵadvance();
|
|
154
|
+
i0.ɵɵconditional((active_r7.Highlight == null ? null : active_r7.Highlight.Label) ? 1 : -1);
|
|
155
|
+
} }
|
|
156
|
+
function RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
157
|
+
i0.ɵɵelementStart(0, "p", 24);
|
|
158
|
+
i0.ɵɵtext(1);
|
|
159
|
+
i0.ɵɵelementEnd();
|
|
160
|
+
} if (rf & 2) {
|
|
161
|
+
const active_r7 = i0.ɵɵnextContext();
|
|
162
|
+
i0.ɵɵadvance();
|
|
163
|
+
i0.ɵɵtextInterpolate(active_r7.Caption);
|
|
164
|
+
} }
|
|
165
|
+
function RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
166
|
+
i0.ɵɵelementStart(0, "div", 13)(1, "span", 14);
|
|
167
|
+
i0.ɵɵtext(2);
|
|
168
|
+
i0.ɵɵelementEnd();
|
|
169
|
+
i0.ɵɵelement(3, "span", 15);
|
|
170
|
+
i0.ɵɵconditionalCreate(4, RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_4_Template, 4, 2, "button", 16);
|
|
171
|
+
i0.ɵɵconditionalCreate(5, RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_5_Template, 4, 0);
|
|
172
|
+
i0.ɵɵelementEnd();
|
|
173
|
+
i0.ɵɵelementStart(6, "div", 17, 0)(8, "div", 18);
|
|
174
|
+
i0.ɵɵconditionalCreate(9, RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_9_Template, 1, 2, "mj-storage-media-player", 19)(10, RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_10_Template, 1, 1, "mj-media-player", 20)(11, RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_11_Template, 4, 0, "div", 21)(12, RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_12_Template, 4, 1, "div", 22)(13, RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_13_Template, 3, 1);
|
|
175
|
+
i0.ɵɵconditionalCreate(14, RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_14_Template, 2, 2, "div", 23);
|
|
176
|
+
i0.ɵɵelementEnd();
|
|
177
|
+
i0.ɵɵconditionalCreate(15, RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Conditional_15_Template, 2, 1, "p", 24);
|
|
178
|
+
i0.ɵɵelementEnd();
|
|
179
|
+
} if (rf & 2) {
|
|
180
|
+
let tmp_9_0;
|
|
181
|
+
let tmp_10_0;
|
|
182
|
+
const active_r7 = ctx;
|
|
183
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
184
|
+
i0.ɵɵadvance();
|
|
185
|
+
i0.ɵɵproperty("title", active_r7.DisplayName);
|
|
186
|
+
i0.ɵɵadvance();
|
|
187
|
+
i0.ɵɵtextInterpolate(active_r7.DisplayName);
|
|
188
|
+
i0.ɵɵadvance(2);
|
|
189
|
+
i0.ɵɵconditional(active_r7.Type === "image" ? 4 : -1);
|
|
190
|
+
i0.ɵɵadvance();
|
|
191
|
+
i0.ɵɵconditional(ctx_r0.CanOpenOrDownload(active_r7) ? 5 : -1);
|
|
192
|
+
i0.ɵɵadvance(3);
|
|
193
|
+
i0.ɵɵclassProp("media-stage--scroll", active_r7.Type === "image" && ctx_r0.ImageZoom > 1);
|
|
194
|
+
i0.ɵɵadvance();
|
|
195
|
+
i0.ɵɵconditional(ctx_r0.UsesStoragePlayer(active_r7) ? 9 : ctx_r0.UsesUrlPlayer(active_r7) ? 10 : ctx_r0.IsResolving(active_r7) ? 11 : (tmp_9_0 = ctx_r0.ResolveError(active_r7)) ? 12 : (tmp_9_0 = ctx_r0.RenderUrl(active_r7)) ? 13 : -1, tmp_9_0);
|
|
196
|
+
i0.ɵɵadvance(5);
|
|
197
|
+
i0.ɵɵconditional((tmp_10_0 = ctx_r0.HighlightStyle(active_r7)) ? 14 : -1, tmp_10_0);
|
|
198
|
+
i0.ɵɵadvance();
|
|
199
|
+
i0.ɵɵconditional(active_r7.Caption ? 15 : -1);
|
|
200
|
+
} }
|
|
201
|
+
function RealtimeMediaSurfaceComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
202
|
+
i0.ɵɵelementStart(0, "div", 6);
|
|
203
|
+
i0.ɵɵrepeaterCreate(1, RealtimeMediaSurfaceComponent_Conditional_2_For_2_Template, 6, 8, "button", 7, i0.ɵɵcomponentInstance().TrackById, true);
|
|
204
|
+
i0.ɵɵelementEnd();
|
|
205
|
+
i0.ɵɵconditionalCreate(3, RealtimeMediaSurfaceComponent_Conditional_2_Conditional_3_Template, 16, 9);
|
|
206
|
+
} if (rf & 2) {
|
|
207
|
+
let tmp_2_0;
|
|
208
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
209
|
+
i0.ɵɵadvance();
|
|
210
|
+
i0.ɵɵrepeater(ctx_r0.Items);
|
|
211
|
+
i0.ɵɵadvance(2);
|
|
212
|
+
i0.ɵɵconditional((tmp_2_0 = ctx_r0.ActiveItem) ? 3 : -1, tmp_2_0);
|
|
213
|
+
} }
|
|
214
|
+
/** Zoom levels cycled by the image zoom control (×). */
|
|
215
|
+
const IMAGE_ZOOM_LEVELS = [1, 1.5, 2, 3];
|
|
216
|
+
/**
|
|
217
|
+
* The exact GraphQL mutation used to resolve a SECURE streaming URL for an `MJ: Files` id — mints a
|
|
218
|
+
* short-lived signed token (after a server-side per-user permission check) and returns the
|
|
219
|
+
* authenticated `/media/<fileId>?token=` URL. Image / PDF / web (iframe) panes render this URL; the
|
|
220
|
+
* audio/video panes hand the file id straight to `mj-storage-media-player` (which mints its own).
|
|
221
|
+
*/
|
|
222
|
+
const CREATE_MEDIA_ACCESS_TOKEN_MUTATION = `mutation CreateMediaAccessToken($fileId: String!) {
|
|
223
|
+
CreateMediaAccessToken(fileId: $fileId) {
|
|
224
|
+
Success
|
|
225
|
+
Url
|
|
226
|
+
ErrorMessage
|
|
227
|
+
}
|
|
228
|
+
}`;
|
|
229
|
+
/** Whether an item is rendered by the real media player (audio/video) vs. an img/iframe pane. */
|
|
230
|
+
export function IsPlayerMediaType(item) {
|
|
231
|
+
return item.Type === 'audio' || item.Type === 'video';
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Decides which render path an item uses based ONLY on its source + type — the single source of truth
|
|
235
|
+
* the surface methods delegate to (kept pure so it's unit-testable without an Angular context):
|
|
236
|
+
* - audio/video + FileID → `'storage-player'` (`mj-storage-media-player`, secure streaming)
|
|
237
|
+
* - audio/video + Url → `'url-player'` (`mj-media-player`, public URL)
|
|
238
|
+
* - image/pdf/web → `'iframe-or-img'` (img/iframe; FileID resolves a streaming URL first)
|
|
239
|
+
* - no usable source → `'none'`
|
|
240
|
+
*/
|
|
241
|
+
export function RouteForMediaItem(item) {
|
|
242
|
+
if (IsPlayerMediaType(item)) {
|
|
243
|
+
if (item.FileID) {
|
|
244
|
+
return 'storage-player';
|
|
245
|
+
}
|
|
246
|
+
return item.Url ? 'url-player' : 'none';
|
|
247
|
+
}
|
|
248
|
+
if (item.Url || item.FileID) {
|
|
249
|
+
return 'iframe-or-img';
|
|
250
|
+
}
|
|
251
|
+
return 'none';
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* LIVE MEDIA surface (`mj-realtime-media-surface`) — the Media channel tab's pane, rendered with a
|
|
255
|
+
* TABS layout: a horizontal tab bar (one tab per {@link MediaItem}, type icon + name) over a single
|
|
256
|
+
* media pane that swaps as you switch tabs. Pure PERCEPTION of the channel's {@link MediaChannelState}:
|
|
257
|
+
* the agent's `Media_*` tools mutate the state through the channel plugin and this surface re-renders.
|
|
258
|
+
*
|
|
259
|
+
* SOURCE-AWARE rendering. Each item is backed by EITHER an external/public {@link MediaItem.Url} or an
|
|
260
|
+
* MemberJunction {@link MediaItem.FileID} (an `MJ: Files` id, streamed securely + permission-gated):
|
|
261
|
+
* - **audio/video + FileID** → `<mj-storage-media-player [FileID] [Provider]>` (real transport/waveform,
|
|
262
|
+
* streams over HTTP Range under the session's authenticated provider).
|
|
263
|
+
* - **audio/video + Url** → `<mj-media-player [Tracks]>` (the same real player, fed the public URL).
|
|
264
|
+
* - **image/pdf/web + FileID** → a streaming URL is resolved via `CreateMediaAccessToken` (through the
|
|
265
|
+
* channel's provider) and rendered in the existing img/iframe path; graceful no-access state on failure.
|
|
266
|
+
* - **image/pdf/web + Url** → the public URL, rendered unchanged.
|
|
267
|
+
*
|
|
268
|
+
* Multi-provider safe: the channel plugin threads the live session's `IMetadataProvider` in via the
|
|
269
|
+
* `Provider` input ({@link BaseAngularComponent}), and both the storage player and the token mutation
|
|
270
|
+
* use it ({@link ProviderToUse}) rather than the global default.
|
|
271
|
+
*/
|
|
272
|
+
export class RealtimeMediaSurfaceComponent extends BaseAngularComponent {
|
|
273
|
+
/** The shared media state engine (set by the channel's BindSurface before first CD). */
|
|
274
|
+
set State(value) {
|
|
275
|
+
if (value === this._state) {
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
this._state = value;
|
|
279
|
+
this.resubscribe();
|
|
280
|
+
}
|
|
281
|
+
get State() {
|
|
282
|
+
return this._state;
|
|
283
|
+
}
|
|
284
|
+
_state = null;
|
|
285
|
+
/** Display name of the agent fronting the session — used in the empty-state copy. */
|
|
286
|
+
AgentName = 'The agent';
|
|
287
|
+
/** The current image zoom multiplier (cycled by the zoom button; image panes only). */
|
|
288
|
+
ImageZoom = 1;
|
|
289
|
+
/** Sanitized URL cache for `web` / `pdf` iframes (Angular blocks raw resource URLs in `[src]`). */
|
|
290
|
+
safeUrlCache = new Map();
|
|
291
|
+
/** The id of the item whose play we last actioned, so a re-render doesn't replay it. */
|
|
292
|
+
lastPlayedStamp = new Map();
|
|
293
|
+
/**
|
|
294
|
+
* Resolution status for FileID-backed image/pdf/web items, keyed by item id. Audio/video FileID items
|
|
295
|
+
* resolve inside `mj-storage-media-player` and never enter this map.
|
|
296
|
+
*/
|
|
297
|
+
fileResolveByItem = new Map();
|
|
298
|
+
mediaPane;
|
|
299
|
+
cdr = inject(ChangeDetectorRef);
|
|
300
|
+
sanitizer = inject(DomSanitizer);
|
|
301
|
+
stateSub = null;
|
|
302
|
+
ngOnInit() {
|
|
303
|
+
this.resubscribe();
|
|
304
|
+
}
|
|
305
|
+
ngOnDestroy() {
|
|
306
|
+
this.stateSub?.unsubscribe();
|
|
307
|
+
this.stateSub = null;
|
|
308
|
+
}
|
|
309
|
+
/** The items currently on the surface (empty when no state is bound). */
|
|
310
|
+
get Items() {
|
|
311
|
+
return this._state?.Items ?? [];
|
|
312
|
+
}
|
|
313
|
+
/** The active item, or `null` when the surface is empty. */
|
|
314
|
+
get ActiveItem() {
|
|
315
|
+
return this._state?.ActiveItem ?? null;
|
|
316
|
+
}
|
|
317
|
+
/** Whether the active id matches `item` (drives the active tab + pane). */
|
|
318
|
+
IsActive(item) {
|
|
319
|
+
return this._state?.ActiveItemId === item.Id;
|
|
320
|
+
}
|
|
321
|
+
// ---------------------------------------------------------------------------
|
|
322
|
+
// Source routing — which render path an item uses
|
|
323
|
+
// ---------------------------------------------------------------------------
|
|
324
|
+
/** Whether `item` is rendered by the real media player (audio/video). */
|
|
325
|
+
IsPlayerItem(item) {
|
|
326
|
+
return IsPlayerMediaType(item);
|
|
327
|
+
}
|
|
328
|
+
/** Whether `item` is an audio/video item backed by an MJStorage FileID → `mj-storage-media-player`. */
|
|
329
|
+
UsesStoragePlayer(item) {
|
|
330
|
+
return RouteForMediaItem(item) === 'storage-player';
|
|
331
|
+
}
|
|
332
|
+
/** Whether `item` is an audio/video item backed by a public URL → `mj-media-player`. */
|
|
333
|
+
UsesUrlPlayer(item) {
|
|
334
|
+
return RouteForMediaItem(item) === 'url-player';
|
|
335
|
+
}
|
|
336
|
+
/** The single-track payload for the URL-backed `mj-media-player` (audio/video). */
|
|
337
|
+
TracksFor(item) {
|
|
338
|
+
if (!item.Url) {
|
|
339
|
+
return [];
|
|
340
|
+
}
|
|
341
|
+
return [{ Id: item.Id, Kind: item.Type === 'video' ? 'video' : 'audio', Url: item.Url }];
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* The render URL for an IMG/IFRAME (image/pdf/web) item: its public {@link MediaItem.Url}, or — for a
|
|
345
|
+
* FileID-backed item — the resolved streaming URL once minted (`null` while loading / on no-access).
|
|
346
|
+
*/
|
|
347
|
+
RenderUrl(item) {
|
|
348
|
+
if (item.Url) {
|
|
349
|
+
return item.Url;
|
|
350
|
+
}
|
|
351
|
+
if (item.FileID) {
|
|
352
|
+
const state = this.fileResolveByItem.get(item.Id);
|
|
353
|
+
return state?.Status === 'ready' ? state.Url : null;
|
|
354
|
+
}
|
|
355
|
+
return null;
|
|
356
|
+
}
|
|
357
|
+
/** Whether a FileID-backed image/pdf/web item is still resolving its streaming URL. */
|
|
358
|
+
IsResolving(item) {
|
|
359
|
+
return !item.Url && !!item.FileID && this.fileResolveByItem.get(item.Id)?.Status === 'loading';
|
|
360
|
+
}
|
|
361
|
+
/** The no-access / load-failure message for a FileID-backed image/pdf/web item, or `null`. */
|
|
362
|
+
ResolveError(item) {
|
|
363
|
+
if (item.Url || !item.FileID) {
|
|
364
|
+
return null;
|
|
365
|
+
}
|
|
366
|
+
const state = this.fileResolveByItem.get(item.Id);
|
|
367
|
+
return state?.Status === 'error' ? state.Message : null;
|
|
368
|
+
}
|
|
369
|
+
/** Switches the active tab to `item`. */
|
|
370
|
+
SelectTab(item) {
|
|
371
|
+
this._state?.SetActive(item.Id);
|
|
372
|
+
}
|
|
373
|
+
/** Keyboard handler for the tab buttons — Enter/Space activate, arrows move between tabs. */
|
|
374
|
+
OnTabKeydown(event, index) {
|
|
375
|
+
const items = this.Items;
|
|
376
|
+
if (items.length === 0) {
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
if (event.key === 'ArrowRight' || event.key === 'ArrowLeft') {
|
|
380
|
+
event.preventDefault();
|
|
381
|
+
const delta = event.key === 'ArrowRight' ? 1 : -1;
|
|
382
|
+
const next = (index + delta + items.length) % items.length;
|
|
383
|
+
this._state?.SetActive(items[next].Id);
|
|
384
|
+
this.focusTabButton(next);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
/** Closes one media item (removes its tab + pane). */
|
|
388
|
+
CloseItem(event, item) {
|
|
389
|
+
event.stopPropagation();
|
|
390
|
+
this.fileResolveByItem.delete(item.Id);
|
|
391
|
+
this._state?.RemoveItem(item.Id);
|
|
392
|
+
}
|
|
393
|
+
/** Whether the open-in-tab / download toolbar buttons are available for `item` (need a usable URL). */
|
|
394
|
+
CanOpenOrDownload(item) {
|
|
395
|
+
return !!this.RenderUrl(item);
|
|
396
|
+
}
|
|
397
|
+
/** Opens the active media in a new browser tab (its public or resolved streaming URL). */
|
|
398
|
+
OpenInNew(item) {
|
|
399
|
+
const url = this.RenderUrl(item);
|
|
400
|
+
if (url) {
|
|
401
|
+
window.open(url, '_blank', 'noopener,noreferrer');
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
/** Triggers a browser download of the active media via a transient anchor (public or resolved URL). */
|
|
405
|
+
Download(item) {
|
|
406
|
+
const url = this.RenderUrl(item);
|
|
407
|
+
if (!url) {
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
410
|
+
const anchor = document.createElement('a');
|
|
411
|
+
anchor.href = url;
|
|
412
|
+
anchor.download = item.DisplayName || '';
|
|
413
|
+
anchor.target = '_blank';
|
|
414
|
+
anchor.rel = 'noopener noreferrer';
|
|
415
|
+
anchor.click();
|
|
416
|
+
}
|
|
417
|
+
/** Cycles the image zoom multiplier through {@link IMAGE_ZOOM_LEVELS}. */
|
|
418
|
+
CycleZoom() {
|
|
419
|
+
const idx = IMAGE_ZOOM_LEVELS.indexOf(this.ImageZoom);
|
|
420
|
+
this.ImageZoom = IMAGE_ZOOM_LEVELS[(idx + 1) % IMAGE_ZOOM_LEVELS.length];
|
|
421
|
+
}
|
|
422
|
+
/** The Font Awesome icon class for a media type's tab. */
|
|
423
|
+
IconFor(type) {
|
|
424
|
+
switch (type) {
|
|
425
|
+
case 'image':
|
|
426
|
+
return 'fa-solid fa-image';
|
|
427
|
+
case 'video':
|
|
428
|
+
return 'fa-solid fa-film';
|
|
429
|
+
case 'audio':
|
|
430
|
+
return 'fa-solid fa-music';
|
|
431
|
+
case 'pdf':
|
|
432
|
+
return 'fa-solid fa-file-pdf';
|
|
433
|
+
case 'web':
|
|
434
|
+
return 'fa-solid fa-globe';
|
|
435
|
+
default:
|
|
436
|
+
return 'fa-solid fa-file';
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
/** A memoized sanitized resource URL for iframe-rendered media (web / pdf). */
|
|
440
|
+
SafeUrl(url) {
|
|
441
|
+
let cached = this.safeUrlCache.get(url);
|
|
442
|
+
if (!cached) {
|
|
443
|
+
cached = this.sanitizer.bypassSecurityTrustResourceUrl(url);
|
|
444
|
+
this.safeUrlCache.set(url, cached);
|
|
445
|
+
}
|
|
446
|
+
return cached;
|
|
447
|
+
}
|
|
448
|
+
/** Inline style for the fractional highlight rectangle (percentages of the pane box). */
|
|
449
|
+
HighlightStyle(item) {
|
|
450
|
+
const h = item.Highlight;
|
|
451
|
+
if (!h) {
|
|
452
|
+
return null;
|
|
453
|
+
}
|
|
454
|
+
const pct = (v) => `${Math.max(0, Math.min(1, v)) * 100}%`;
|
|
455
|
+
return { left: pct(h.X), top: pct(h.Y), width: pct(h.W), height: pct(h.H) };
|
|
456
|
+
}
|
|
457
|
+
/** Stable `@for` track for tab/pane diffing. */
|
|
458
|
+
TrackById(_index, item) {
|
|
459
|
+
return item.Id;
|
|
460
|
+
}
|
|
461
|
+
/** Re-subscribes the state's Changed$ stream (called on state input change + ngOnInit). */
|
|
462
|
+
resubscribe() {
|
|
463
|
+
this.stateSub?.unsubscribe();
|
|
464
|
+
this.stateSub = null;
|
|
465
|
+
if (!this._state) {
|
|
466
|
+
this.cdr.markForCheck();
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
this.stateSub = this._state.Changed$.subscribe(() => {
|
|
470
|
+
this.resolvePendingFileUrls();
|
|
471
|
+
this.applyPendingPlay();
|
|
472
|
+
this.cdr.markForCheck();
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Mints streaming URLs for any FileID-backed image/pdf/web items not yet resolved (audio/video FileID
|
|
477
|
+
* items resolve inside the storage player, so they're skipped). Idempotent — each item is resolved
|
|
478
|
+
* once; a `loading`/`ready`/`error` entry guards against re-firing on every state change.
|
|
479
|
+
*/
|
|
480
|
+
resolvePendingFileUrls() {
|
|
481
|
+
for (const item of this.Items) {
|
|
482
|
+
if (item.Url || !item.FileID || this.IsPlayerItem(item)) {
|
|
483
|
+
continue;
|
|
484
|
+
}
|
|
485
|
+
if (this.fileResolveByItem.has(item.Id)) {
|
|
486
|
+
continue;
|
|
487
|
+
}
|
|
488
|
+
this.fileResolveByItem.set(item.Id, { Status: 'loading' });
|
|
489
|
+
void this.resolveFileUrl(item.Id, item.FileID);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
/** Resolves one file id to a secure streaming URL via the channel's provider, then re-renders. */
|
|
493
|
+
async resolveFileUrl(itemId, fileId) {
|
|
494
|
+
const result = await this.mintAccessToken(fileId);
|
|
495
|
+
if (result && result.Success && result.Url) {
|
|
496
|
+
this.fileResolveByItem.set(itemId, { Status: 'ready', Url: result.Url });
|
|
497
|
+
}
|
|
498
|
+
else {
|
|
499
|
+
this.fileResolveByItem.set(itemId, {
|
|
500
|
+
Status: 'error',
|
|
501
|
+
Message: result?.ErrorMessage || "This media couldn't be loaded, or you don't have access to it.",
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
this.cdr.markForCheck();
|
|
505
|
+
}
|
|
506
|
+
/** Mints an authenticated streaming-URL token for one file id via the active provider. */
|
|
507
|
+
async mintAccessToken(fileId) {
|
|
508
|
+
try {
|
|
509
|
+
const provider = this.ProviderToUse;
|
|
510
|
+
const data = await provider.ExecuteGQL(CREATE_MEDIA_ACCESS_TOKEN_MUTATION, { fileId });
|
|
511
|
+
const payload = data?.CreateMediaAccessToken;
|
|
512
|
+
return payload ?? null;
|
|
513
|
+
}
|
|
514
|
+
catch (err) {
|
|
515
|
+
LogError(`CreateMediaAccessToken failed for file '${fileId}': ${err instanceof Error ? err.message : String(err)}`);
|
|
516
|
+
return { Success: false, ErrorMessage: 'Unable to load this media.' };
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
/**
|
|
520
|
+
* Honors a pending {@link MediaItem.PlayRequestedAt} stamp on the active video/audio element by
|
|
521
|
+
* calling `.play()` once per new stamp (so a routine re-render never replays the media). Only applies
|
|
522
|
+
* to the URL-backed `<mj-media-player>` / raw-element panes; the storage player owns its own autoplay.
|
|
523
|
+
*/
|
|
524
|
+
applyPendingPlay() {
|
|
525
|
+
const item = this.ActiveItem;
|
|
526
|
+
if (!item || item.PlayRequestedAt == null || (item.Type !== 'video' && item.Type !== 'audio')) {
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
if (this.lastPlayedStamp.get(item.Id) === item.PlayRequestedAt) {
|
|
530
|
+
return;
|
|
531
|
+
}
|
|
532
|
+
this.lastPlayedStamp.set(item.Id, item.PlayRequestedAt);
|
|
533
|
+
// The pane re-renders this CD pass; defer the play to the next microtask so the element exists.
|
|
534
|
+
queueMicrotask(() => {
|
|
535
|
+
const el = this.mediaPane?.nativeElement.querySelector('video, audio');
|
|
536
|
+
void el?.play().catch(() => undefined);
|
|
537
|
+
});
|
|
538
|
+
}
|
|
539
|
+
/** Moves keyboard focus to the tab button at `index` (arrow-key navigation). */
|
|
540
|
+
focusTabButton(index) {
|
|
541
|
+
queueMicrotask(() => {
|
|
542
|
+
const host = this.mediaPane?.nativeElement.parentElement;
|
|
543
|
+
const buttons = host?.querySelectorAll('.media-tab');
|
|
544
|
+
buttons?.[index]?.focus();
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵRealtimeMediaSurfaceComponent_BaseFactory; return function RealtimeMediaSurfaceComponent_Factory(__ngFactoryType__) { return (ɵRealtimeMediaSurfaceComponent_BaseFactory || (ɵRealtimeMediaSurfaceComponent_BaseFactory = i0.ɵɵgetInheritedFactory(RealtimeMediaSurfaceComponent)))(__ngFactoryType__ || RealtimeMediaSurfaceComponent); }; })();
|
|
548
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RealtimeMediaSurfaceComponent, selectors: [["mj-realtime-media-surface"]], viewQuery: function RealtimeMediaSurfaceComponent_Query(rf, ctx) { if (rf & 1) {
|
|
549
|
+
i0.ɵɵviewQuery(_c0, 5);
|
|
550
|
+
} if (rf & 2) {
|
|
551
|
+
let _t;
|
|
552
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.mediaPane = _t.first);
|
|
553
|
+
} }, inputs: { State: "State", AgentName: "AgentName" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 1, consts: [["mediaPane", ""], [1, "media-surface"], [1, "media-empty"], ["aria-hidden", "true", 1, "fa-solid", "fa-images", "media-empty__icon"], [1, "media-empty__title"], [1, "media-empty__hint"], ["role", "tablist", "aria-label", "Shared media", 1, "media-tabs"], ["type", "button", "role", "tab", 1, "media-tab", 3, "media-tab--active", "title"], ["type", "button", "role", "tab", 1, "media-tab", 3, "click", "keydown", "title"], ["aria-hidden", "true", 1, "media-tab__icon", 3, "ngClass"], [1, "media-tab__name"], ["role", "button", "tabindex", "0", 1, "media-tab__close", 3, "click", "keydown.enter", "keydown.space"], ["aria-hidden", "true", 1, "fa-solid", "fa-xmark"], [1, "media-toolbar"], [1, "media-toolbar__title", 3, "title"], [1, "media-toolbar__spacer"], ["type", "button", "title", "Zoom", 1, "media-iconbtn"], [1, "media-pane"], [1, "media-stage"], [1, "media-player", 3, "FileID", "Provider"], [1, "media-player", 3, "Tracks"], [1, "media-status"], [1, "media-status", "media-status--error"], ["aria-hidden", "true", 1, "media-highlight", 3, "ngStyle"], [1, "media-caption"], ["type", "button", "title", "Zoom", 1, "media-iconbtn", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-magnifying-glass-plus"], [1, "media-iconbtn__badge"], ["type", "button", "aria-label", "Download media", "title", "Download", 1, "media-iconbtn", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-download"], ["type", "button", "aria-label", "Open media in a new tab", "title", "Open in new tab", 1, "media-iconbtn", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-arrow-up-right-from-square"], ["aria-hidden", "true", 1, "fa-solid", "fa-spinner", "fa-spin", "media-status__icon"], [1, "media-status__text"], ["aria-hidden", "true", 1, "fa-solid", "fa-triangle-exclamation", "media-status__icon"], [1, "media-image", 3, "src", "transform", "alt"], [1, "media-frame", 3, "src", "title"], ["sandbox", "allow-scripts allow-same-origin allow-forms allow-popups", "referrerpolicy", "no-referrer", 1, "media-frame", 3, "src", "title"], [1, "media-image", 3, "src", "alt"], [1, "media-highlight__label"]], template: function RealtimeMediaSurfaceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
554
|
+
i0.ɵɵelementStart(0, "div", 1);
|
|
555
|
+
i0.ɵɵconditionalCreate(1, RealtimeMediaSurfaceComponent_Conditional_1_Template, 6, 1, "div", 2)(2, RealtimeMediaSurfaceComponent_Conditional_2_Template, 4, 1);
|
|
556
|
+
i0.ɵɵelementEnd();
|
|
557
|
+
} if (rf & 2) {
|
|
558
|
+
i0.ɵɵadvance();
|
|
559
|
+
i0.ɵɵconditional(ctx.Items.length === 0 ? 1 : 2);
|
|
560
|
+
} }, dependencies: [CommonModule, i1.NgClass, i1.NgStyle, MJMediaPlayerComponent, MJStorageMediaPlayerComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.media-surface[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-surface-sunken);\n}\n\n\n\n.media-empty[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 24px;\n text-align: center;\n color: var(--mj-text-muted);\n\n &__icon {\n font-size: 2.5rem;\n color: var(--mj-text-disabled);\n margin-bottom: 4px;\n }\n\n &__title {\n margin: 0;\n font-size: 0.9375rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n }\n\n &__hint {\n margin: 0;\n font-size: 0.8125rem;\n max-width: 32ch;\n }\n}\n\n\n\n.media-tabs[_ngcontent-%COMP%] {\n display: flex;\n align-items: stretch;\n gap: 4px;\n flex: 0 0 auto;\n padding: 6px 8px 0;\n overflow-x: auto;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n scrollbar-width: thin;\n}\n\n.media-tab[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n flex: 0 0 auto;\n max-width: 220px;\n padding: 7px 8px 7px 10px;\n border: 1px solid transparent;\n border-bottom: none;\n border-top-left-radius: var(--mj-radius-md, 6px);\n border-top-right-radius: var(--mj-radius-md, 6px);\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 0.8125rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.12s ease, color 0.12s ease, border-color 0.12s ease;\n\n &:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n &:focus-visible {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n }\n\n &--active {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-default);\n box-shadow: inset 0 2px 0 var(--mj-brand-primary);\n }\n\n &__icon {\n flex: 0 0 auto;\n font-size: 0.8125rem;\n color: var(--mj-brand-primary);\n }\n\n &__name {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__close {\n flex: 0 0 auto;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n border-radius: var(--mj-radius-sm, 4px);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 0.6875rem;\n\n &:hover {\n background: color-mix(in srgb, var(--mj-status-error) 14%, transparent);\n color: var(--mj-status-error);\n }\n\n &:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n }\n }\n}\n\n\n\n.media-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n flex: 0 0 auto;\n padding: 6px 10px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n\n &__title {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n &__spacer {\n flex: 1 1 auto;\n }\n}\n\n.media-iconbtn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md, 6px);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 0.8125rem;\n transition: background 0.12s ease, color 0.12s ease, border-color 0.12s ease;\n\n &:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n &:focus-visible {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n }\n\n &__badge {\n font-size: 0.6875rem;\n font-weight: 600;\n color: var(--mj-brand-primary);\n }\n}\n\n\n\n.media-pane[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n min-height: 0;\n display: flex;\n flex-direction: column;\n padding: 12px;\n gap: 8px;\n}\n\n.media-stage[_ngcontent-%COMP%] {\n position: relative;\n flex: 1 1 auto;\n min-height: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md, 6px);\n background: var(--mj-bg-surface);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n\n &--scroll {\n overflow: auto;\n }\n}\n\n.media-image[_ngcontent-%COMP%] {\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n transform-origin: center center;\n transition: transform 0.18s ease;\n}\n\n.media-video[_ngcontent-%COMP%] {\n max-width: 100%;\n max-height: 100%;\n background: var(--mj-color-neutral-950, #000);\n border-radius: var(--mj-radius-sm, 4px);\n}\n\n.media-audio-wrap[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n width: 100%;\n padding: 24px;\n\n &__icon {\n font-size: 3rem;\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n }\n}\n\n.media-audio[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 480px;\n}\n\n.media-frame[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n border: none;\n background: var(--mj-bg-surface);\n}\n\n\n\n.media-player[_ngcontent-%COMP%] {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n\n\n.media-status[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 24px;\n text-align: center;\n color: var(--mj-text-secondary);\n\n &__icon {\n font-size: 2rem;\n color: var(--mj-text-muted);\n }\n\n &__text {\n margin: 0;\n font-size: 0.9rem;\n }\n\n &--error {\n color: var(--mj-status-error-text);\n\n .media-status__icon {\n color: var(--mj-status-error);\n }\n }\n}\n\n\n\n.media-highlight[_ngcontent-%COMP%] {\n position: absolute;\n border: 2px solid var(--mj-brand-primary);\n border-radius: var(--mj-radius-sm, 4px);\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n box-shadow: 0 0 0 9999px color-mix(in srgb, var(--mj-text-primary) 18%, transparent);\n pointer-events: none;\n animation: _ngcontent-%COMP%_media-highlight-in 0.2s ease;\n\n &__label {\n position: absolute;\n top: -1.5em;\n left: -2px;\n padding: 1px 6px;\n border-radius: var(--mj-radius-sm, 4px);\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 0.6875rem;\n font-weight: 600;\n white-space: nowrap;\n }\n}\n\n.media-caption[_ngcontent-%COMP%] {\n flex: 0 0 auto;\n margin: 0;\n font-size: 0.8125rem;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n@keyframes _ngcontent-%COMP%_media-highlight-in {\n from {\n opacity: 0;\n transform: scale(1.04);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .media-image[_ngcontent-%COMP%], \n .media-tab[_ngcontent-%COMP%], \n .media-iconbtn[_ngcontent-%COMP%] {\n transition: none;\n }\n\n .media-highlight[_ngcontent-%COMP%] {\n animation: none;\n }\n}"], changeDetection: 0 });
|
|
561
|
+
}
|
|
562
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RealtimeMediaSurfaceComponent, [{
|
|
563
|
+
type: Component,
|
|
564
|
+
args: [{ standalone: true, selector: 'mj-realtime-media-surface', imports: [CommonModule, MJMediaPlayerComponent, MJStorageMediaPlayerComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"media-surface\">\n @if (Items.length === 0) {\n <div class=\"media-empty\">\n <i class=\"fa-solid fa-images media-empty__icon\" aria-hidden=\"true\"></i>\n <p class=\"media-empty__title\">No media yet</p>\n <p class=\"media-empty__hint\">{{ AgentName }} will share visuals here during the conversation.</p>\n </div>\n } @else {\n <!-- Tab bar: one tab per media item (the chosen \"Tabs\" layout \u2014 one pane, switch via tabs). -->\n <div class=\"media-tabs\" role=\"tablist\" aria-label=\"Shared media\">\n @for (item of Items; track TrackById($index, item); let i = $index) {\n <button\n type=\"button\"\n class=\"media-tab\"\n role=\"tab\"\n [class.media-tab--active]=\"IsActive(item)\"\n [attr.aria-selected]=\"IsActive(item)\"\n [attr.tabindex]=\"IsActive(item) ? 0 : -1\"\n [title]=\"item.DisplayName\"\n (click)=\"SelectTab(item)\"\n (keydown)=\"OnTabKeydown($event, i)\"\n >\n <i class=\"media-tab__icon\" [ngClass]=\"IconFor(item.Type)\" aria-hidden=\"true\"></i>\n <span class=\"media-tab__name\">{{ item.DisplayName }}</span>\n <span\n class=\"media-tab__close\"\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"'Close ' + item.DisplayName\"\n (click)=\"CloseItem($event, item)\"\n (keydown.enter)=\"CloseItem($event, item)\"\n (keydown.space)=\"CloseItem($event, item)\"\n >\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </span>\n </button>\n }\n </div>\n\n @if (ActiveItem; as active) {\n <!-- Pane toolbar: per-type controls (open / download / zoom). -->\n <div class=\"media-toolbar\">\n <span class=\"media-toolbar__title\" [title]=\"active.DisplayName\">{{ active.DisplayName }}</span>\n <span class=\"media-toolbar__spacer\"></span>\n @if (active.Type === 'image') {\n <button\n type=\"button\"\n class=\"media-iconbtn\"\n [attr.aria-label]=\"'Zoom image (currently ' + ImageZoom + 'x)'\"\n title=\"Zoom\"\n (click)=\"CycleZoom()\"\n >\n <i class=\"fa-solid fa-magnifying-glass-plus\" aria-hidden=\"true\"></i>\n <span class=\"media-iconbtn__badge\">{{ ImageZoom }}\u00D7</span>\n </button>\n }\n @if (CanOpenOrDownload(active)) {\n <button\n type=\"button\"\n class=\"media-iconbtn\"\n aria-label=\"Download media\"\n title=\"Download\"\n (click)=\"Download(active)\"\n >\n <i class=\"fa-solid fa-download\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"media-iconbtn\"\n aria-label=\"Open media in a new tab\"\n title=\"Open in new tab\"\n (click)=\"OpenInNew(active)\"\n >\n <i class=\"fa-solid fa-arrow-up-right-from-square\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n\n <!-- The single media pane (swaps as tabs switch). The highlight overlay sits on top. -->\n <div class=\"media-pane\" #mediaPane>\n <div class=\"media-stage\" [class.media-stage--scroll]=\"active.Type === 'image' && ImageZoom > 1\">\n @if (UsesStoragePlayer(active)) {\n <!-- Audio/video backed by an MJStorage file: secure, permission-gated streaming player. -->\n <mj-storage-media-player\n class=\"media-player\"\n [FileID]=\"active.FileID ?? null\"\n [Provider]=\"Provider\"\n ></mj-storage-media-player>\n } @else if (UsesUrlPlayer(active)) {\n <!-- Audio/video from a public URL: the real media player (waveform/transport). -->\n <mj-media-player class=\"media-player\" [Tracks]=\"TracksFor(active)\"></mj-media-player>\n } @else if (IsResolving(active)) {\n <div class=\"media-status\">\n <i class=\"fa-solid fa-spinner fa-spin media-status__icon\" aria-hidden=\"true\"></i>\n <p class=\"media-status__text\">Loading secure media\u2026</p>\n </div>\n } @else if (ResolveError(active); as err) {\n <div class=\"media-status media-status--error\">\n <i class=\"fa-solid fa-triangle-exclamation media-status__icon\" aria-hidden=\"true\"></i>\n <p class=\"media-status__text\">{{ err }}</p>\n </div>\n } @else if (RenderUrl(active); as renderUrl) {\n @switch (active.Type) {\n @case ('image') {\n <img\n class=\"media-image\"\n [src]=\"renderUrl\"\n [style.transform]=\"'scale(' + ImageZoom + ')'\"\n [alt]=\"active.DisplayName\"\n />\n }\n @case ('pdf') {\n <iframe\n class=\"media-frame\"\n [src]=\"SafeUrl(renderUrl)\"\n [title]=\"active.DisplayName\"\n ></iframe>\n }\n @case ('web') {\n <iframe\n class=\"media-frame\"\n [src]=\"SafeUrl(renderUrl)\"\n [title]=\"active.DisplayName\"\n sandbox=\"allow-scripts allow-same-origin allow-forms allow-popups\"\n referrerpolicy=\"no-referrer\"\n ></iframe>\n }\n }\n }\n\n @if (HighlightStyle(active); as hs) {\n <div class=\"media-highlight\" [ngStyle]=\"hs\" aria-hidden=\"true\">\n @if (active.Highlight?.Label) {\n <span class=\"media-highlight__label\">{{ active.Highlight?.Label }}</span>\n }\n </div>\n }\n </div>\n\n @if (active.Caption) {\n <p class=\"media-caption\">{{ active.Caption }}</p>\n }\n </div>\n }\n }\n</div>\n", styles: [":host {\n display: block;\n height: 100%;\n}\n\n.media-surface {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-surface-sunken);\n}\n\n/* ---------- Empty state ---------- */\n.media-empty {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 24px;\n text-align: center;\n color: var(--mj-text-muted);\n\n &__icon {\n font-size: 2.5rem;\n color: var(--mj-text-disabled);\n margin-bottom: 4px;\n }\n\n &__title {\n margin: 0;\n font-size: 0.9375rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n }\n\n &__hint {\n margin: 0;\n font-size: 0.8125rem;\n max-width: 32ch;\n }\n}\n\n/* ---------- Tab bar ---------- */\n.media-tabs {\n display: flex;\n align-items: stretch;\n gap: 4px;\n flex: 0 0 auto;\n padding: 6px 8px 0;\n overflow-x: auto;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n scrollbar-width: thin;\n}\n\n.media-tab {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n flex: 0 0 auto;\n max-width: 220px;\n padding: 7px 8px 7px 10px;\n border: 1px solid transparent;\n border-bottom: none;\n border-top-left-radius: var(--mj-radius-md, 6px);\n border-top-right-radius: var(--mj-radius-md, 6px);\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 0.8125rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.12s ease, color 0.12s ease, border-color 0.12s ease;\n\n &:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n &:focus-visible {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n }\n\n &--active {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-default);\n box-shadow: inset 0 2px 0 var(--mj-brand-primary);\n }\n\n &__icon {\n flex: 0 0 auto;\n font-size: 0.8125rem;\n color: var(--mj-brand-primary);\n }\n\n &__name {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__close {\n flex: 0 0 auto;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n border-radius: var(--mj-radius-sm, 4px);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 0.6875rem;\n\n &:hover {\n background: color-mix(in srgb, var(--mj-status-error) 14%, transparent);\n color: var(--mj-status-error);\n }\n\n &:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n }\n }\n}\n\n/* ---------- Pane toolbar ---------- */\n.media-toolbar {\n display: flex;\n align-items: center;\n gap: 6px;\n flex: 0 0 auto;\n padding: 6px 10px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n\n &__title {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 0.8125rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n &__spacer {\n flex: 1 1 auto;\n }\n}\n\n.media-iconbtn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md, 6px);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 0.8125rem;\n transition: background 0.12s ease, color 0.12s ease, border-color 0.12s ease;\n\n &:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n &:focus-visible {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n }\n\n &__badge {\n font-size: 0.6875rem;\n font-weight: 600;\n color: var(--mj-brand-primary);\n }\n}\n\n/* ---------- Media pane ---------- */\n.media-pane {\n flex: 1 1 auto;\n min-height: 0;\n display: flex;\n flex-direction: column;\n padding: 12px;\n gap: 8px;\n}\n\n.media-stage {\n position: relative;\n flex: 1 1 auto;\n min-height: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md, 6px);\n background: var(--mj-bg-surface);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n\n &--scroll {\n overflow: auto;\n }\n}\n\n.media-image {\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n transform-origin: center center;\n transition: transform 0.18s ease;\n}\n\n.media-video {\n max-width: 100%;\n max-height: 100%;\n background: var(--mj-color-neutral-950, #000);\n border-radius: var(--mj-radius-sm, 4px);\n}\n\n.media-audio-wrap {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n width: 100%;\n padding: 24px;\n\n &__icon {\n font-size: 3rem;\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n }\n}\n\n.media-audio {\n width: 100%;\n max-width: 480px;\n}\n\n.media-frame {\n width: 100%;\n height: 100%;\n border: none;\n background: var(--mj-bg-surface);\n}\n\n/* The real media player (mj-media-player / mj-storage-media-player) fills the stage. */\n.media-player {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n/* Loading / no-access status for a FileID-backed image/pdf/web pane awaiting its streaming URL. */\n.media-status {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n padding: 24px;\n text-align: center;\n color: var(--mj-text-secondary);\n\n &__icon {\n font-size: 2rem;\n color: var(--mj-text-muted);\n }\n\n &__text {\n margin: 0;\n font-size: 0.9rem;\n }\n\n &--error {\n color: var(--mj-status-error-text);\n\n .media-status__icon {\n color: var(--mj-status-error);\n }\n }\n}\n\n/* ---------- Highlight overlay (fractional coords) ---------- */\n.media-highlight {\n position: absolute;\n border: 2px solid var(--mj-brand-primary);\n border-radius: var(--mj-radius-sm, 4px);\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n box-shadow: 0 0 0 9999px color-mix(in srgb, var(--mj-text-primary) 18%, transparent);\n pointer-events: none;\n animation: media-highlight-in 0.2s ease;\n\n &__label {\n position: absolute;\n top: -1.5em;\n left: -2px;\n padding: 1px 6px;\n border-radius: var(--mj-radius-sm, 4px);\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 0.6875rem;\n font-weight: 600;\n white-space: nowrap;\n }\n}\n\n.media-caption {\n flex: 0 0 auto;\n margin: 0;\n font-size: 0.8125rem;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n@keyframes media-highlight-in {\n from {\n opacity: 0;\n transform: scale(1.04);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .media-image,\n .media-tab,\n .media-iconbtn {\n transition: none;\n }\n\n .media-highlight {\n animation: none;\n }\n}\n"] }]
|
|
565
|
+
}], null, { State: [{
|
|
566
|
+
type: Input
|
|
567
|
+
}], AgentName: [{
|
|
568
|
+
type: Input
|
|
569
|
+
}], mediaPane: [{
|
|
570
|
+
type: ViewChild,
|
|
571
|
+
args: ['mediaPane']
|
|
572
|
+
}] }); })();
|
|
573
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RealtimeMediaSurfaceComponent, { className: "RealtimeMediaSurfaceComponent", filePath: "src/lib/components/realtime/media/realtime-media-surface.component.ts", lineNumber: 100 }); })();
|
|
574
|
+
//# sourceMappingURL=realtime-media-surface.component.js.map
|