{"version":3,"sources":["webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/api/config.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/api/player.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/util/append-auth-ticket.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/api/presentation.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/util/sort-by-object-property.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/util/get-play-cover-info.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/api/quizzes.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/components/modal-dialog.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/components/modal-dialog.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/components/overlay.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/components/overlay.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/util/get-script-root.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/util/webpack-public-path.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/util/shared-control-bar.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/ask-a-question.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/ask-a-question.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/ask-a-question/question-form.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/audio-descriptions/audio-descriptions-player.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/audio-descriptions.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/audio-only.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/background.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/background.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/banner/banner-link.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/banner/get-dominant-color.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/banner.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/banner.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/banner/ended-modal-template.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/util/local-storage-available.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/captions.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/captions.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/captions-settings.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/captions-settings.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/chapters.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/util/get-fullscreen-toggle-index.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/controlbar-menu/overflow-menu-item.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/controlbar-menu/overflow-menu-item.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/controlbar-menu/overflow-menu-button.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/controlbar-menu/overflow-menu-button.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/controlbar-menu.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/downloads.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/downloads.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/help.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/360/hotspot-360.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/hotspots.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/hotspots.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/util/get-interaction-colors-from-color.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/layout.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/loader/apply-loader-callbacks.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/util/player-extensions.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/loader/ensure-presentation-available.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/loader.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/loader/load-presentation-data.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/loader/override-server-settings.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/loader/apply-player-source.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/logging/log-table.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/logging.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/logging.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/metadata/metadata-template.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/metadata.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/metadata.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/notifications/notification-item.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/notifications/notification-item.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/notifications.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/notifications.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/playcover/playcover-play-button.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/playcover.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/playcover/playcover-content-wrapper.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/playcover.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/polls.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/popout.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/register-external-plugin.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/register-plugin.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/reporting/reporting-play-detector.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/reporting/reporting-timeline-segments.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/reporting.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/search.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/search/search-result.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/search.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/search/search-form.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/seekbar-segments/seekbar-segment.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/seekbar-segments/seekbar-segment-progress-bar.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/seekbar-segments/seekbar-segment-progress-bar.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/seekbar-segments/seekbar-segment.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/seekbar-segments.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/seek-thumbnails.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/settings.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/share/share-form.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/share.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/share/share-form.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/show-message.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/smartzoom/layouts.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/smartzoom.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/smartzoom.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/util/calc-dimensions.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/timed-events.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/timeline-markers/timeline-marker.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/timeline-markers/timeline-marker-icon.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/timeline-markers/timeline-marker.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/timeline-markers.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/bookmarkStorage.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/util/simple-state-machine.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/inactivity.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/conviva.init.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/guided.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/guided.init.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/iframe.init.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/live.init.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/components/swap-streams-button.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/multistream.init.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/playlist.init.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/poll-notification.init.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/post-presentation-link.init.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/pre-roll.init.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/quizzes.init.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/video360.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/video360.init.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/util/hotkeys.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/util/cookie.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/components/seek-button.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/components/seek-button.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/player.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/player-branding.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/player.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/implementations/player-page.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/implementations/player-page.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/implementations/player-page/helpers.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/loader/apply-player-options.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/360/component360.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/360/enums.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/360/styles360.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/util/get-player-options.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/util/is-presentation-id.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/util/localization.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/components/modal-dialog.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/components/overlay.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/components/seek-button.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/implementations/player-page.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/player-branding.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/player.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/ask-a-question.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/background.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/banner.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/captions-settings.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/captions.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/controlbar-menu/overflow-menu-button.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/controlbar-menu/overflow-menu-item.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/downloads.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/hotspots.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/logging.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/metadata.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/notifications.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/notifications/notification-item.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/playcover.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/search.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/seekbar-segments/seekbar-segment-progress-bar.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/seekbar-segments/seekbar-segment.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/share/share-form.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/smartzoom.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/timeline-markers/timeline-marker.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/guided.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/video360.css","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/util/SFMP.MiniUtility.js","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/assets/images/DefaultPresenter.svg","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/assets/images/Stream_Swap_Icon.svg","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/assets/images/close-black-24dp.svg","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/assets/images/close-x-black.svg","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/assets/images/download-white-24dp.svg","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/assets/images/help-white-24dp.svg","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/assets/images/info-white-24dp.svg","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/assets/images/notifications_white_24dp.svg","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/assets/images/open_in_new-white-24dp.svg","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/assets/images/playcover-button.svg","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/assets/images/poll-white-24dp.svg","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/assets/images/question_answer-white-24dp.svg","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/assets/images/receipt_white_24dp.svg","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/assets/images/search-white-24dp.svg","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/assets/images/seek-back.svg","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/assets/images/seek-forward.svg","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/assets/images/share-white-24dp.svg","webpack://mediasite-player/../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/assets/images/three-dots-menu.svg","webpack://mediasite-player/../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/node_modules/video.js/dist/lang|sync|/.js$"],"names":["defaultMediasiteRoot","location","pathname","includes","AntiForgery","Object","seal","Header","Token","Path","ApplicationRoot","ApplicationScriptsRoot","PlayerService","FileServer","WebAppsApi","applyConfig","mediasiteRoot","config","undefined","assign","updatePaths","getOptions","presentationId","getPlayerOptions","then","presentationOptions","GlobalOptions","NextGenPlayerOptions","Presentation","d","IsLayoutPreview","HasSearchableText","ForumEnabled","SharingEnabled","PollingEnabled","IsDvrPlaybackEnabled","enableFullScreen","document","body","requestFullscreen","webkitRequestFullscreen","AllowFullscreen","userCanDownload","CanDownloadMediasiteContent","IsPresentationOwner","streamWithThumbs","Streams","find","s","HasPreviewThumbs","hasMultipleStreams","length","hasMultipleVisualStreams","filter","AudioOnly","conviva","enabled","EnableConviva","userNameHash","UserNameHash","convivaServiceUrl","ConvivaServiceUrl","convivaCustomerId","ConvivaCustomerId","playerType","PlayerType","playerId","PlayerId","playerName","PlayerName","layoutId","LayoutId","siteName","SiteName","siteVersion","SiteVersion","siteBuildNumber","SiteBuildNumber","multisiteId","MultisiteId","reporting","playbackTicket","PlaybackTicket","inactivity","sessionTimeout","SessionTimeout","metadata","showControlBarButton","EnablePresentationInfo","showPublishDateTime","ShowDateTime","chapters","AllowChapterNavigation","showChapterList","AllowScrubbing","search","EnableSearch","popout","AllowPopout","controls","ShowMainControls","settings","enablePlayPause","AllowPlayPauseStop","enableSpeedControl","AllowSpeedControl","enableSeeking","enableSwapStreams","HideSwapStreamsButton","playbackRates","getPlaybackRates","PlaybackSpeeds","live","enableDvr","enableLiveCaptions","LiveCaptioningEnabled","askAQuestion","AllowAskQuestion","downloads","AllowDownloads","share","AllowShare","polls","AllowPolls","url","PollingLocation","help","AllowHelp","PremierPlayerHelpUrl","banner","ShowHeaderArea","FullScreenBannerPath","renderIn360","Is360Video","src","href","FullScreenBannerUrl","width","FullScreenBannerWidth","height","FullScreenBannerHeight","behavior","endedEnabled","PresentationEndedBannerEnabled","endedSrc","PresentationEndedBannerPath","endedHref","PresentationEndedBannerUrl","endedWidth","PresentationEndedBannerWidth","endedHeight","PresentationEndedBannerHeight","seekThumbnails","thumbData","PreviewThumbs","background","isMultiStream","compositionMap","CompositionMap","getExtensions","playerOptions","PlayerExtensions","getLiveEvents","currentTimeInMs","sinceTimeInMs","fetch","method","headers","mode","JSON","stringify","result","json","jsonData","map","event","eventType","EventType","id","Id","payload","Payload","payloadType","PayloadType","sequence","Sequence","time","Time","reportMediaView","bookmarkPosition","segments","reportMediaOpen","embeddedPlayer","window","self","top","container","containerUrl","parent","mediaPlayerType","playbackSpeedsString","defaultList","parsedList","theString","matches","match","results","i","num","Number","isNaN","push","parsePlaybackSpeedsString","appendAuthTicket","collectionId","ticket","fixed","getCollectionIdFromQueryString","getEffectiveAuthTicket","getQueryParam","queryStringParam","indexOf","PresentationStatus","freeze","NotAvailable","ScheduledForLive","OpenForLive","Live","LivePaused","LiveEnded","LiveEndedDvr","OnDemand","PlayerPresentationStatus","None","Viewable","NotFound","Offline","Scheduled","NotYetAvailable","NotAuthorized","TimedEventType","Chapter","Poll","PresentationSubQuiz","Hotspot","Annotation","LiveTimelineEventType","Unknown","Slide","PresentationStart","PresentationEnd","PauseStart","PauseEnd","TimedEvent","ContentStreamType","Video1","Video2","Video3","SearchResultType","Caption","MediaErrorType","CustomError","AbortedError","NetworkError","DecodeError","SrcNotSupported","Encrypted","getMetadata","title","parse","Title","poster","ThumbnailUrl","playerPresentationStatusMessage","PlayerPresentationStatusMessage","playerPresentationStatus","duration","Duration","serverClockSkew","ServerClockSkew","playStatus","PlayStatus","unixTime","UnixTime","presenters","Presenters","presenter","name","Name","bioUrl","BioUrl","imageUrl","ImageUrl","PlayerLayoutOptions","Images","DefaultPresenterImage","ImageFilename","description","Description","supportingLinks","SupportingLinks","link","Url","compliancePolicyMarkdown","CompliancePolicyMarkdown","bookmark","PresentationBookmark","position","is360Video","isLiveCountdownEnabled","LiveCountdownEnabled","isLiveIndicationDelayed","LiveIndicationDelayed","isHlsMime","type","prioritizeHls","a","b","getStreams","stream","VideoUrls","HasSlideContent","slice","sort","prop","sortByObjectProperty","StreamType","videoUrls","videoUrl","locationUrl","URL","Location","protocol","MimeType","segmentLength","SegmentLength","streamType","audioOnly","items","playbackAudioSource","PlaybackAudioSource","priority","Priority","slides","Slides","slide","number","text","Text","slideBaseUrl","SlideBaseUrl","getAudioDescriptionUrl","AudioDescriptionsUrl","getDownloads","isPresentationId","TranscriptUrl","transcriptUrl","txtIndex","cleanTranscriptUrl","Transcripts","language","Language","languageCode","DetailedLanguageCode","transcriptLinkText","finalTranscriptUrl","zipTranscriptsUrl","PodcastUrl","VodcastUrl","Promise","resolve","getCaptions","getChapters","Chapters","chapter","chapterText","getHotspots","Hotspots","hotspot","hotspotProperties","getPresentationOptions","HasQuizzes","getLiveStatus","completedDurationInMs","CompletedDurationInMs","liveStartUnixTimeInMs","LiveStartUnixTimeInMs","getTimedEvents","TimedEvents","getCompositionMap","getCompositionList","CompositionList","getPosterInfo","coverVisible","playcoverNullObjectPromise","reject","defaultThumbnailUrl","hasQuizzes","allowedPlayerIFrameAPISites","enableLiveCountdown","delayLiveIndicationUntilPresentationDate","resourceId","playCoverOptions","DefaultThumbnailUrl","AirDateUnixTimeInMs","AllowedPlayerIFrameAPISites","IsLiveCountdownEnabled","IsLiveIndicationDelayed","sendQuestion","playbackTicketId","question","Message","Success","searchCaptionsAndSlides","searchTerm","SearchResults","searchResult","Type","getPresentationQuiz","PresentationId","AuthTicketId","SiteData","AuthTicket","MediasiteChannelId","CollectionId","RedirectUrl","getQuizResults","quizResultParams","Entity","setQuizAnswer","answerDetails","scoreQuiz","scoreQuizParams","scoreSubQuiz","presentationQuizId","subQuizId","PresentationQuizId","SubQuizId","resetQuizAnswers","data","_allModals","_displayAsPanel","WeakMap","_showPlayerControls","ModalDialog","videojs","constructor","player","options","super","this","addClass","displayAsPanel","solidBackground","on","showPlayerControls","open","args","one","el","querySelector","focus","existingModal","modal","opened","close","triggerLayoutUpdate","trigger","exitClass","removeClass","e","some","get","set","hasClass","shouldShow","conditionalFocus_","previouslyActiveEl_","conditionalBlur_","classList","contains","closest","dispose","indexInArray","splice","OverlayPosition","TopLeft","TopRight","BottomLeft","BottomRight","Center","Overlay","createEl","tag","props","attributes","overlayClassPosition","textContent","className","trim","target","call","__webpack_public_path__","currentScript","split","join","getMsFromString","durationDisplay","parseInt","timeInMS","enableFieldByCheckbox","field","checkbox","disabled","checked","addEventListener","required","padTimeBasedUponDuration","formattingMethod","needPadding","guide","formattedString","padStart","createValidationForTimeString","_modal","_content","_submitter","_email","localize","AskAQuestionPlugin","bind","temporary","uncloseable","pauseOnOpen","controlbarMenu","addMenuItem","icon","QuestionAnswerIcon","callback","openModal","ready","layout","addChild","loader","content","template","createElement","innerHTML","generateQuestionForm","setupModalContent","fillWith","closeModal","form","nameField","emailField","timeCheckbox","timeField","value","currentTime","setAttribute","preventDefault","handleSubmit","formEl","nameValue","emailValue","disableFormControls","Submitter","SubmitterEmail","Subject","QuestionText","TimeInPresentation","handleSubmitComplete","catch","error","handleSubmitError","submitResult","alert","handleSubmitErrorMessage","message","enableFormControls","Array","from","querySelectorAll","isMenuItemEnabled","enableMenuItem","disableMenuItem","usingPlugin","removeMenuItem","_enabled","AudioDescriptionsPlayer","muted","volume","handlePlayerSeeking","paused","pause","play","handlePlayerTimeupdate","handlePlayerPlaying","handlePlayerPause","handlePlayerRatechange","handlePlayerVolumeChange","removeAttribute","off","playerTime","playerRate","playbackRate","diff","Math","abs","currentPlaybackRate","correctedRate","audioDescriptions","log","_audioPlayer","AudioDescriptionsPlugin","collapsedButtons","pluginName","label","buttonName","class","audioPlayer","audioTrackList","audioTracks","existingTrack","getAudioDescriptionsTrack","track","kind","getMainTrack","addTrack","removeAudioComponent","removeAudioDescriptionsTrack","clear","removeTrack","removeChild","delete","AudioOnlyPlugin","hideAudioOnlyVideo","element","tech","style","left","_compositionMap","_isMultiStream","_backgroundContainer","BackgroundPlugin","backgroundComponent","shouldUpdateBackground","composition","VisualCompositions","doesVisualElementFillCanvas","VisualItems","item","ZIndex","backgroundComposition","image","color","SourceId","BaseColor","addBackground","backgroundImageUrl","backgroundContainer","setProperty","visualElement","targetRect","TargetRect","Height","Width","BannerBehavior","Disabled","AutoHide","Static","AUTO_HIDE_CLASS","BannerLink","controlText","alt","Error","processLoadedImage","imageData","img","canvas","naturalWidth","naturalHeight","context","getContext","drawImage","getImageData","getPixels","pixels","sum","pixel","r","g","simpleAverage","x","max","step","floor","getPixel","sampleTopBottomEdges","y","start","_bannerLink","_img","_bannerWidth","_bannerHeight","_isLooping","_endedEnabled","_renderIn360","_endedModal","_endedLink","_endedImg","_endedText","_replayButton","_returnButton","BannerPlugin","bannerLink","appendChild","overlayContents","firstElementChild","generateEndedOverlay","endedLink","endedImg","endedText","replayButton","handleClickedReplay","returnButton","handleClickedReturn","endedOverlay","childEl","children","endedModal","triggerResize","updateLayout","bannerEl","display","getDominantColor","loop","loadPreviousPresentation","video360","removeModal","restartPresentation","playlist","isAutoPlaying","modalBtns","action","displayModal","hideReplay","hideReturn","button","isHidden","add","remove","isCurrentPresentationOriginal","currentPresentationId","isInPlaylist","localStorageAvailable","localStorage","setItem","removeItem","SETTINGS_KEY","_initialTrack","_languageStrings","CaptionsPlugin","languageStrings","initialTrackLanguage","captionsUrl","detailedLanguage","tracks","textTracks","oldTrack","removeRemoteTextTrack","addRemoteTextTrack","captions","cues","getSelectedLanguage","detailed","activeTrack","val","startsWith","getCurrentCaptions","languageToCheck","activeCues","getCaptionTrack","captionTrack","getAllCaptionTracks","captionTracks","toggleCaptions","visible","found","lang","forEach","subsCapsButton","getDescendant","hasCaptionTracks","hasLiveCaptions","liveCaptions","currentCaptions","getChild","updateDisplay","currentTrack","CaptionsSettingsPlugin","captionOptionLabels","captionOptionsParent","captionHeader","innerText","prepend","captionOptions","caption","captionLabelSelector","captionLabelWording","entries","targetCaption","captionCloseBtn","parentNode","addFont","addHeaderToDropdown","headerText","captionsDropdown","captionsHeader","tabIndex","fontDisplay","fontClass","newFontOption","fontMenuDropdown","textTrackCue","_localStorage","currentCustomFont","getItem","getAttribute","selectedIndex","updatedFont","selectedOptions","fontName","fieldsetEl","fieldsetLegend","firstLabel","firstSelect","span","after","_chaptersTrack","_showChapterList","ChaptersPlugin","default","addCue","menuItem","cue","menu","addItem","seekBarSegments","startTime","endTime","progress","chaptersButton","removeCue","getAll","toggleChaptersButton","pressButton","currentChapter","update","visiblity","timeTooltip","cached_timeTooltipUpdate","seekBarRect","seekBarPoint","apply","arguments","timeNumber","chapterName","write","getFullscreenToggleIndex","MenuItem","_callback","OverflowMenuItem","iconClass","backgroundImage","iconSpan","dismissable","theButton","handleClick","tagName","toLowerCase","MenuButtonComponent","_currentMenu","_menuItems","OverflowMenuButton","ExpandLessIcon","createItems","reduce","allItems","currentItem","handleItemClick","itemId","uuid","updateMenuItem","menuItems","itemIndex","findIndex","updatedItem","newMenuItems","hasItem","setTimeout","unpressButton","isItemVisible","showMenuItem","hideMenuItem","_menuButton","ControlbarMenuPlugin","controlBar","contentEl","clientHeight","menuButton","_downloads","DownloadsPlugin","DownloadIcon","heading","listElement","download","_url","HelpPlugin","HelpIcon","_relativeHotspotsGroup","Hotspot360","createAreaHotspot","xr","material","areaProperties","Color","opacity","Opacity","linewidth","transparent","depthWrite","depthTest","hotspotMesh","HasNoFill","THREE","Shape","lookAt","camera","TimedId","triggerDelay","InteractionValues","triggerEffect","TriggerEffects","triggerParam","scene","createTextHotspot","yOffset","Y","xOffset","X","calcRadius","DefaultSizing","zPoint","z","xPoint","yPoint","hotspotTextSize","TextSize","textSize","DisplayText","SecondaryColor","createButtonHotspot","createButton","hoverEffect","HoverEffects","updatePositionOfRelativeHotspots","normalizedVector","getCameraDirectionNormalized","hotspotGroup","geometry","PI","mesh","circleGeometry","clone","itemSize","array","index","outline","leftX","rightX","topY","bottomY","topLeft","topRight","bottomLeft","bottomRight","offset","vertices","Float32Array","setIndex","padding","msgColor","textColor","outlineColor","lines","totalLines","lineMeshes","line","textMesh","createMessageTextMesh","font","renderWidth","renderHeight","parameters","backgroundMesh","createBackgroundMesh","backgroundColor","lineYOffset","linesCreated","lineMesh","maxWidth","contextFont","words","currentLine","word","measureText","meshes","longestWidth","xClampAngle","yClampAngle","translatedOffsetX","translatedOffsetY","theta","phi","sin","cos","_shouldRenderHotspots","_isCurrentVideo360","_hotspotsComponent","hotspot360","_renderedHotspots","_hotspotInfos","HotspotsPlugin","paramProvider","QueryStringParamProvider","getParamCaseSensitive","createHotspotHolder","aspect","videoWidth","videoHeight","setIs360","is360","hotspotsComponent","hotspotsContainer","hotspots","timedId","timedEvents","StartTime","EndTime","showHotspot","hideHotspot","hasPlayerLoadedXR","renderHotspot","targetHotspot","console","hotspotInfo","HasFocus","seeking","triggerHotspot","effect","InteractionEffect","parameter","InteractionParam","targetTime","loadNewPresentation","setDisableHotspot","handleURlChangeResumeButton","isDisabled","hotspotDOM","hotspotButtonDOM","key","deleteHotspot","removeObject","timedEventIds","keys","hotspotDescription","round","hotspotColor","hotspotDOMHolder","xAlignment","yAlignment","mainInteractionColors","backgroundHSL","hexToHsl","h","l","shouldHoverDarken","backgroundHoverLightness","backgroundActiveLightness","colorInHSL","hoverColorInHSL","activeColorInHSL","textHSL","textHoverLightness","textActiveLightness","MainColor","HoverColor","ActiveColor","TextColor","HoverTextColor","ActiveTextColor","hex","hexToParse","substring","exec","min","getInteractionColorsFromColor","fontSize","TextAlignment","_existingLayout","existingLayout","Component","applyLoaderCallbacks","playCoverData","presentationData","loaderHooks","hooks","hook","extensionHooks","extensions","SKIP_EXTENSION_TYPES","extension","ExtensionType","promise","async","extensionUrl","ExtensionBasePath","extensionFunc","import","Data","err","runPlayerExtension","getPlayerExtensionHooks","playerExtensions","all","pluginResults","deepmerge","isMergeableObject","isPlainObject","ensurePresentationAvailable","availableStatuses","status","_options","_currentOptions","_presentationId","_previousPresentationIds","_isLoadingNewPresentation","_playCoverData","_presentationData","_playCoverPromise","_presentationPromise","_playCoverCallbacks","_presentationCallbacks","LoaderPlugin","initOptions","init","playCoverPromise","overrides","playcover","autoPlayParam","getParamFromOptions","playCoverCallbacks","applyPlayerOptions","loadPresentation","showPlayButton","showMessage","applyLiveWait","streams","canPlayType","waitUntilSafe","presentationPromise","presentationCallbacks","audioDescriptionUrl","compositionList","loadPresentationData","overrideServerSettings","any","datetime","captionInfos","captionInfo","LanguageCode","CaptionsUrl","initialTextTrack","configureCaptions","chapterInfos","currentChapterStart","currentChapterEnd","nextChapterStart","VTTCue","configureChapters","timedEvent","enablePIP","applyPlayerSource","initBookmarkStorage","playFrom","getStoredBookmarkPosition","isDVR","seekDisabledInQuizSettings","quizzes","Infinity","seekToLiveEdge","seekToPlayFrom","initDurationPause","bookmarkStorage","lastStartTime","reportToDataProvider","trackPresentation","onLoadPlayCover","onLoadPresentation","skew","includeBookmark","storage","presentationDuration","clockSkew","retrieve","durationPause","savePreviousId","previousOptions","inXR","isPreviousVideo360","isInXR","isLooping","autoplay","enterXROnInit","isNextVideo360","xrDispose","previousPresentationId","pop","getPresentationId","previousPresentationIds","multistream","_tbody","LogTable","thead","sourceEl","descriptionEl","timeEl","tbody","addLog","source","tr","Date","toLocaleTimeString","_loggingWindow","_loggingInterval","_logs","_table","LoggingPlugin","loggingWindow","setInterval","header","closeButton","table","ctrlKey","altKey","shiftKey","URLSearchParams","LoggingIcon","clearInterval","logs","newLogs","history","loggingWindowEl","isAtBottom","scrollHeight","scrollTop","ceil","performance","timing","navigationStart","now","current","currentIndex","scrollTo","generateSpeakerBio","imgUrl","textHTML","convertTextToElement","html","_titleEl","_dateEl","_timeEl","_durationEl","_descriptionEl","_compliancePolicyEl","_presentersContainerEl","_supportingLinksContainerEl","MetadataPlugin","modalContentEl","generateMetadataContainer","InfoIcon","dateEl","date","dataset","toLocaleDateString","timeStyle","replaceAll","hidden","marked","presenterContainer","containerEl","currentLink","isLive","seconds","liveTracker","liveCurrentTime","NotificationItem","titleId","descriptionId","animationClass","clickableEl","notificationTitle","notificationDescription","timeout","animateUp","animate","animateDown","animateOut","direction","cleanup","_notificationContainer","NotificationsPlugin","NotificationsIcon","notificationContainer","overflowButtonIndex","notificationId","notificationItem","existingChildren","removeDisplayItem","child","hasDisplayItem","setupMuteNotification","PlaycoverPlayButton","playIconWrapper","PlaycoverContentWrapper","_poster","_playButton","_title","PlaycoverPlugin","playcoverContentWrapper","playButton","setPlaycoverCustomContent","vjsComponent","addComponent","removeComponent","removeAllComponents","bigPlayButton","clickable","showTitle","dimmed","_popup","PollsPlugin","PollIcon","popup","closed","_message","PopoutPlugin","OpenInNewIcon","iconUrl","inIFrame","onPlayerPage","channelId","playLink","windowName","windowOptions","popoutModalMessage","isOpen","module","moduleEntries","filteredEntries","warn","pluginWrapper","pluginFn","registerPlugin","entry","Plugin","fn","isBasic","_lastPositionChange","_firstPositionChangeOfSegment","_tolerance","_playbackRate","ReportingPlayDetector","lastPositionChange","firstPositionChangeOfSegment","tolerance","change","rate","segmentStartAction","startPosition","segmentEndAction","endPosition","isImportant","handlePlaybackRateChange","handlePositionChange","playing","positionChange","getCurrentTime","isProbablyPlaying","startSegment","endSegment","getTime","isImportantNotification","time1","position1","time2","position2","toleranceFactor","deltaTime","deltaPosition","expectedPositionChange","enforceNonNegativeNumber","_segments","ReportingTimelineSegments","addSegment","end","segmentsArray","getAllSegments","cloneSegment","segment","reset","_segmentsMemory","_playDetector","_includeBookmark","ReportingPlugin","serviceReportMediaViewCalledCount","segmentsMemory","playDetector","handleSegmentStart","handleSegmentEnd","scheduleHeartbeat","clearTimeout","heartbeatTimeout","onHeartbeat","reportSegmentsSinceLastReport","synchronous","reportPlayed","inactivityTimeout","onPlaybackRateChanged","newPlaybackRate","onPositionChanged","serviceSegments","calcBookmarkPosition","toServiceSegments","save","makeReportMediaViewDescription","inputArray","seg","resultArray","getLastItem","lastItem","NaN","getLastEnd","newEnd","newDuration","extendLastItem","addNewItem","parts","secondsToMinutesAndSeconds","totalSeconds","m","ss","isNegative","serviceSegment","isInNoBookmarkZone","generateSearchResult","TIME_ARIA_LABEL","SEARCH_RESULTS_ARIA_LABEL","timeAriaLabel","replacePlaceholders","toISOString","substr","ariaLabel","firstChild","replaceRegex","templateString","rest","previous","replace","_formEl","_resultsEl","SearchPlugin","SearchIcon","generateSearchForm","resultsEl","captionLanguage","RESULT_TYPE_MAPPING","resultContainer","resultEl","keyCode","parseFloat","currentTarget","_startTime","_endTime","SeekBarSegmentProgressBar","segmentWidth","parentElement","getBoundingClientRect","ResizeObserver","updateWidth","observe","playProgressBarPosition","seekBarWidth","_label","_spacerWidth","_progress","SeekBarSegment","spacerWidth","createSegment","onResize","updateSeekBarStyles","addProgressBar","removeProgressBar","seekBar","playProgressBar","overflowX","seekBarSegmentProgressBar","spacerHalfWidth","roundedStartPosition","roundedEndPosition","seekBarSegmentWidth","segmentLeftPosition","_seekBarSegments","SeekBarSegmentsPlugin","segmentConfig","seekBarSegment","segmentId","removeProperty","currentSegments","values","_width","_height","_columns","_rows","_interval","_aspectRatio","SeekThumbnailsPlugin","aspectRatio","spriteThumbnails","interval","Interval","idxTag","columns","Columns","rows","Rows","downlink","responsive","ratio","_enablePlayPause","_enableFullScreen","_enableSpeedControl","_enableSeeking","_enableSwapStreams","_playbackRates","_enablePIP","SettingsPlugin","fullscreenToggle","isFullscreen","exitFullscreen","speedControl","progressControl","forwardSeek","backwardSeek","enable","show","disable","handleMouseMove","hide","enableSwap","getComputedStyle","getPropertyValue","rates","SharePlugin","ShareIcon","generateShareForm","presentationLinkField","copyURL","host","searchParams","has","elementToHide","liveStatus","timeValue","convertedValue","append","textarea","toString","clickElement","select","navigator","clipboard","writeText","classes","overlay","_wrapper","_controlsOverlay","_clickToExit","_canvas","_target","_aspect","SmartzoomPlugin","presetName","testRegions","LAYOUTS","regionCount","activeRegion","lastFocused","windowResizeListener","component","getParam","smartzoomContainer","clickToExit","clickToExitButton","addRegion","oldTarget","region","rect","removeRegion","moveRegion","zoom","targetEl","canvasEl","targetBounds","targetAspect","targetWidth","targetHeight","regionAspect","videoStartTransform","canvasEndTransition","canvasEndOpacity","transition","transform","visibility","drawFrame","offsetHeight","transitionCleanup","removeEventListener","toggleClass","unzoom","immediateRezoom","regionOriginalX","regionOriginalY","regionOriginalWidth","newBounds","regionNewX","regionNewY","regionNewWidth","regionNewHeight","canvasStartVisibility","canvasStartTransition","canvasStartOpacity","canvasStartMargin","canvasStartPosition","canvasStartTransform","videoStartTransition","videoStartOpacity","canvasEndTransform","canvasEndVisibility","videoEndOpacity","videoEndTransition","margin","wrapper","controlsOverlay","wrapperEl","size","bounds","containerAspect","changedScale","scale","calcDimensions","clipWidth","clipHeight","stopPropagation","activeElement","indexBeforeTech","_activeCues","_startCallbacks","_endCallbacks","TimedEventsPlugin","metadataTrack","startCallback","endCallback","marker","timelineMarkers","info","previousCues","isActive","wasActive","TimelineMarkerIcon","shape","timelineMarkerIcon","generateMarkerIcon","innerHTMl","_time","_color","_shape","TimelineMarker","labelDiv","setMarkerIcon","handleMouseDown","handleDurationChange","labelEl","markerColor","customIcon","horizontalPadding","paddingLeft","labelBounding","playerBounding","leftOffset","right","rightOffset","_timelineMarkers","TimelineMarkersPlugin","markerConfig","timelineMarker","markerId","_maximumPositionValue","_bookmarksKeyName","_lastStartTime","_presentationDuration","_isLive","_clockSkew","BookmarkStorePlugin","bookmarks","bookmarksOriginalString","_date","_timestamp","UTC","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","savedAt","compareSavedAt","shift","watchViewTracking","viewTracking","addHandler","important","SimpleStateMachine","states","initialStateName","onEnter","changeState","toStateName","toState","onExit","beginInactiveChecking","stopInactiveChecking","doReload","isLivePlayback","active","handlePlay","handleSeeking","handlePause","handleEnded","handleInactivityExceeded","inactive","dead","currentState","reload","milliseconds","ConvivaPluginStub","shouldLoad","queryStringEnableTouchstone","convivaSettings","urlSearchParams","ConvivaPlugin","firstPlayableItem","getFirstPlayableItem","comp","convivaConfiguration","serviceUrl","DEFAULT_TOUCHSTONE_ULR_TEST","customerId","hasQuizzing","recordedDateString","numberOfSlides","getSlideCount","numberOfVideos","getVideoCount","streamUrl","videoAmount","findVisualItemBySourceId","sourceId","slideStream","GuidedPluginStub","GuidedPlugin","guided","IFramePluginStub","IFramePlugin","iframe","LivePluginStub","isLivePresentation","isLivePlayable","initializeLivePlugin","liveOptions","LivePlugin","enableCountdown","lastLiveEventTime","getComponent","SwapStreamsButton","multiStream","clickHandler","incrementCompositionIndex","applyNewCompositionMap","StreamSwapIcon","handler","options_","AUDIO_ONLY_STREAM_DIMENSIONS","MultistreamPluginStub","sortByPlaybackAudioSource","organizeStreams","organizedStreams","visualItem","streamLayoutInfo","setupBackground","setBackgroundImage","setBackgroundColor","MultistreamPlugin","multistreams","multistreamPlugin","setMainStreamSize","primarySourceId","swapButton","PlaylistPluginStub","PlaylistPlugin","playlistId","isHomeLooping","defaultImgSrc","PollNotificationPluginStub","ext","PollNotificationPlugin","PostPresentationLinkPluginStub","PostPresentationLinkPlugin","surveyExtensionConfig","surveyUrl","surveyMessage","postPresentationLink","PreRollPluginStub","PreRollPlugin","extensionData","Seconds","preRoll","QuizzesPluginStub","previewQuizzes","noQuizzes","QuizResultContextId","quizOptions","API","quizData","Quizzes","initializeQuizPlugin","QuizzesPlugin","quizTimes","quizzingBuffer","quizResults","addQuizzes","DisableSeeking","Video360PluginStub","disableOverlays","Video360Plugin","hotkeysConfig","seekStep","enableModifiersForNumbers","enableHoverScroll","playPauseKey","which","rewindKey","forwardKey","fullscreenKey","customKeys","questionKey","setupCustomKey","toggleCaptionsKey","toggleChapterssKey","searchKey","infoKey","shareKey","helpKey","downloadKey","pollsKey","nextPresentationKey","prevPresentationKey","homePresentationKey","arrowKeyShift","audioKey","audioBtn","playbackKey","playbackBtn","captionSettingsKey","captionsModal","swapStreamsKey","swapBtn","targetKey","plugin","functionToCall","playerPlugin","Cookie","readCookieData","newPath","setValue","writeCookieData","getValue","defaultValue","getValueAsNumber","getValueAsBool","cookie","begin","decodeURIComponent","newCookie","cookieData","hasOwnProperty","encodeURIComponent","toGMTString","SeekButton","isForward","seekDuration","SeekForward","SeekBackward","pluginNames","allPluginEntries","bundledPlugins","conditionalPlugins","bundledPluginOptions","_player","backSeekButton","forwardSeekButton","muteToggle","playToggle","isAutoPlay","videoEl","events","apiConfig","plugins","customPlugins","fill","fluid","getCurrentLanguage","lockControls","pluginOptions","userActions","hotkeys","click","doubleClick","liveui","crossOrigin","html5","nativeTextTracks","nativeAudioTracks","preloadTextTracks","persistTextTrackSettings","tooltipRect","el_","playerRect","player_","seekBarPointPx","spaceLeftOfPoint","spaceRightOfPoint","pullTooltipBy","fixTimeTooltipUpdate","setupVolumeCooking","autoMute","notifications","playRate","populateMenuButtons","setShowMoreButtonVisibility","overflowButton","playbackMenuItem","textElement","mainTrack","volumeCookie","volumeString","muteString","volumeValue","controlBarMenu","buttonData","pluginButton","clientX","clientWidth","clientY","overflowItems","flexItems","newValue","registerExternalPlugin","AntiForgeryHeaderName","AntiForgeryToken","getPlayFrom","getDuration","getLockControls","elapsed","MediasitePlayer","queryString","playFromParam","durationParam","dataPresentationId","splitPath","dashlessId","part","paramName","paramArray","returnParam","param","paramOption","pluginKey","optionKey","optionValue","createMessage","messageColor","textMeshMetrics","buttonColor","btnTextColor","leftSideBtn","createHalfCircle","rightSideBtn","btnGroupMesh","rotateOnAxis","fontFamily","metrics","textAlign","textBaseline","strokeStyle","lineWidth","strokeText","fillStyle","fillText","renderMessage","texture","needsUpdate","side","createTextMesh","createLoadingIndicator","updateLoadingIndicator","renderOrder","viewTime","percentLoaded","createCircleTexture","strokeWidth","percentFilled","matCanvas","matContext","circleSize","beginPath","arc","textureMaxSize","closePath","stroke","deleteObject","object","Pager","Play","Pause","Restart","Next","Previous","Home","Custom","Scale","BorderScale","PauseCountdown","UIPieces","Border","Close","TextOffset","Distance","VideoSphereRadius","TriggerDelay","_playerColor","_backgroundColor","_textColor","_font","setPlayerColors","playerSelector","playerColor","modalSelector","modalStyle","playerOptionsRequests","urlReferrer","ok","LoginUrl","test","require","LocalizedDictionary","LocalizedStrings","Culture","ApplicationData","fromEntries","translation","___CSS_LOADER_EXPORT___","___CSS_LOADER_URL_REPLACEMENT_0___","___CSS_LOADER_URL_REPLACEMENT_1___","___CSS_LOADER_URL_REPLACEMENT_2___","___CSS_LOADER_URL_REPLACEMENT_3___","SFMP","Utility","COVER_ENABLE_OLD","COVER_ENABLE","COVER_TITLE","COVER_PLAYBUTTON","COVER_COUNTDOWN","AUTHTICKET","COLLECTION","CATALOG","basicHtmlSanitationSpec","allowedTags","tagAttributes","encodeURI","sanitizeOpeningTag","tagInfo","allowedAttributesSpec","filtered","tagHtml","attributeName","re","quotedValue","nullFilter","wholeTag","RegExp","quote","getAuthTicketFromCookie","regex","ids","params","isEmbedded","varArgs","targetObj","propName","TypeError","sourceObj","prototype","sanitizeHtmlString","htmlString","sanitationSpec","allowedAttributes","cleaned","spec","tagPattern","tagExpression","output","searchStart","getNonTagText","startIndex","endIndex","leftEnd","rightEnd","isClosingTag","bareTag","lastIndex","exports","webpackContext","req","webpackContextResolve","__webpack_require__","o","code"],"mappings":"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","file":"main.91eec312c879e8dfb2cf.js","sourcesContent":["const defaultMediasiteRoot = location.pathname.includes('/Mediasite/streams/') ? '/Mediasite/streams' : '/Mediasite';\r\n\r\nfunction updatePaths(mediasiteRoot) {\r\n    Object.assign(Path, {\r\n        ApplicationRoot: `${mediasiteRoot}/Play`,\r\n        ApplicationScriptsRoot: `${mediasiteRoot}/Play/Dist`,\r\n        PlayerService: `${mediasiteRoot}/PlayerService/PlayerService.svc/json`,\r\n        FileServer: `${mediasiteRoot}/FileServer`,\r\n        WebAppsApi: `${mediasiteRoot}/MyMediasite/webapps-api`\r\n    });\r\n}\r\n\r\nexport const AntiForgery = Object.seal({\r\n    Header: 'X-SOFO-AntiForgeryHeader',\r\n    Token: ''\r\n});\r\n\r\nexport const Path = Object.seal({\r\n    ApplicationRoot: '',\r\n    ApplicationScriptsRoot: '',\r\n    PlayerService: '',\r\n    FileServer: '',\r\n    WebAppsApi: ''\r\n});\r\n\r\nexport function applyConfig({ mediasiteRoot, ...config }) {\r\n    if (mediasiteRoot !== undefined) {\r\n        updatePaths(mediasiteRoot ?? defaultMediasiteRoot);\r\n    }\r\n\r\n    if (config) {\r\n        Object.assign(AntiForgery, config.AntiForgery);\r\n        Object.assign(Path, config.Path);\r\n    }\r\n}\r\n\r\napplyConfig({ mediasiteRoot: defaultMediasiteRoot });\r\n","import { getPlayerOptions } from '../util';\r\nimport { Path } from './config.js';\r\n\r\n/**\r\n * @typedef {Object} PlayerOptions\r\n * @property {string} userNameHash\r\n * @property {boolean} enableConviva\r\n * @property {string} playbackTicket\r\n * @property {boolean} allowPopout\r\n * @property {boolean} showMainControls\r\n * @property {boolean} allowScrubbing\r\n * @property {boolean} allowPlayPauseStop\r\n * @property {boolean} enablePresentationInfo\r\n * @property {boolean} showDateTime\r\n * @property {boolean} allowClosedCaptions\r\n * @property {boolean} allowFullscreen\r\n */\r\n\r\n/**\r\n * \r\n * @param {string} presentationId \r\n * @returns {PlayerOptions}\r\n */\r\nexport function getOptions(presentationId) {\r\n    return getPlayerOptions(presentationId).then(presentationOptions => {\r\n        let { GlobalOptions, NextGenPlayerOptions, Presentation } = presentationOptions.d;\r\n\r\n        if (GlobalOptions?.IsLayoutPreview) {\r\n            //Set these values\r\n            Presentation = {\r\n                HasSearchableText: true,\r\n                ForumEnabled: true,\r\n                SharingEnabled: true,\r\n                PollingEnabled: true,\r\n                IsDvrPlaybackEnabled: false\r\n            }\r\n        }\r\n\r\n        let browserSupportsFullscreenElement = typeof (document.body.requestFullscreen ?? document.body.webkitRequestFullscreen) === 'function';\r\n        let enableFullScreen = browserSupportsFullscreenElement && (NextGenPlayerOptions?.AllowFullscreen ?? true);\r\n        let userCanDownload = GlobalOptions?.CanDownloadMediasiteContent || GlobalOptions?.IsPresentationOwner;\r\n        let streamWithThumbs = Presentation?.Streams?.find((s) => s.HasPreviewThumbs);\r\n        let hasMultipleStreams = (Presentation?.Streams?.length ?? 0) > 1;\r\n        let hasMultipleVisualStreams = (Presentation?.Streams?.filter(s => !s.AudioOnly).length ?? 0) > 1;\r\n\r\n        let result = {\r\n            conviva: {\r\n                enabled: GlobalOptions?.EnableConviva,\r\n                userNameHash: GlobalOptions?.UserNameHash,\r\n                convivaServiceUrl: GlobalOptions?.ConvivaServiceUrl,\r\n                convivaCustomerId: GlobalOptions?.ConvivaCustomerId,\r\n                playerType: NextGenPlayerOptions?.PlayerType,\r\n                playerId: GlobalOptions?.PlayerId,\r\n                playerName: GlobalOptions?.PlayerName,\r\n                layoutId: GlobalOptions?.LayoutId,\r\n                siteName: GlobalOptions?.SiteName,\r\n                siteVersion: GlobalOptions?.SiteVersion,\r\n                siteBuildNumber: GlobalOptions?.SiteBuildNumber,\r\n                multisiteId: GlobalOptions.MultisiteId\r\n            },\r\n\r\n            reporting: {\r\n                playbackTicket: GlobalOptions?.PlaybackTicket\r\n            },\r\n\r\n            inactivity: {\r\n                sessionTimeout: GlobalOptions?.SessionTimeout\r\n            },\r\n\r\n            metadata: {\r\n                showControlBarButton: NextGenPlayerOptions?.EnablePresentationInfo ?? true,\r\n                showPublishDateTime: NextGenPlayerOptions?.ShowDateTime ?? true\r\n            },\r\n\r\n            chapters: {\r\n                enabled: NextGenPlayerOptions?.AllowChapterNavigation ?? true,\r\n                showChapterList: NextGenPlayerOptions?.AllowScrubbing ?? true //if seeking is disabled, remove the chapter list from the UI\r\n            },\r\n\r\n            //if seeking is disabled, so should search so that the user can't jump around the video through searching\r\n            search: {\r\n                enabled: NextGenPlayerOptions?.EnableSearch === true && NextGenPlayerOptions?.AllowScrubbing === true && Presentation?.HasSearchableText === true\r\n            },\r\n\r\n            popout: {\r\n                enabled: NextGenPlayerOptions?.AllowPopout === true\r\n            },\r\n            \r\n            controls: NextGenPlayerOptions?.ShowMainControls ?? true,\r\n\r\n            settings: {\r\n                enablePlayPause: NextGenPlayerOptions?.AllowPlayPauseStop ?? true,\r\n                enableFullScreen: enableFullScreen,\r\n                enableSpeedControl: NextGenPlayerOptions?.AllowSpeedControl ?? true,\r\n                enableSeeking: NextGenPlayerOptions?.AllowScrubbing ?? true,\r\n                enableSwapStreams: hasMultipleVisualStreams && !(NextGenPlayerOptions?.HideSwapStreamsButton),\r\n                playbackRates: NextGenPlayerOptions?.AllowSpeedControl ? getPlaybackRates(GlobalOptions?.PlaybackSpeeds) : []\r\n            },\r\n\r\n            live: {\r\n                enableDvr: (Presentation?.IsDvrPlaybackEnabled ?? false) && NextGenPlayerOptions?.AllowScrubbing,\r\n                enableLiveCaptions: GlobalOptions?.LiveCaptioningEnabled ?? false\r\n            },\r\n\r\n            askAQuestion: {\r\n                enabled: (NextGenPlayerOptions?.AllowAskQuestion && Presentation?.ForumEnabled) ?? false\r\n            },\r\n\r\n            downloads: {\r\n                enabled: (NextGenPlayerOptions?.AllowDownloads && userCanDownload) ?? false\r\n            },\r\n\r\n            share: {\r\n                enabled: NextGenPlayerOptions?.AllowShare === true && Presentation?.SharingEnabled !== false\r\n            },\r\n\r\n            polls: {\r\n                enabled: NextGenPlayerOptions?.AllowPolls && Presentation?.PollingEnabled,\r\n                url: Presentation?.PollingLocation\r\n            },\r\n\r\n            help: {\r\n                url: NextGenPlayerOptions?.AllowHelp ? (GlobalOptions?.PremierPlayerHelpUrl ?? null) : null\r\n            },\r\n\r\n            banner: {\r\n                enabled: NextGenPlayerOptions?.ShowHeaderArea == 'Disabled' ? false : NextGenPlayerOptions?.FullScreenBannerPath ? true : false,\r\n                renderIn360: Presentation?.Is360Video,\r\n                src: NextGenPlayerOptions?.FullScreenBannerPath,\r\n                href: NextGenPlayerOptions?.FullScreenBannerUrl,\r\n                width: NextGenPlayerOptions?.FullScreenBannerWidth,\r\n                height: NextGenPlayerOptions?.FullScreenBannerHeight,\r\n                behavior: NextGenPlayerOptions?.ShowHeaderArea != 'Disabled' ? NextGenPlayerOptions?.ShowHeaderArea : 'Disabled',\r\n                endedEnabled: NextGenPlayerOptions?.PresentationEndedBannerEnabled,\r\n                endedSrc: NextGenPlayerOptions?.PresentationEndedBannerPath,\r\n                endedHref: NextGenPlayerOptions?.PresentationEndedBannerUrl,\r\n                endedWidth: NextGenPlayerOptions?.PresentationEndedBannerWidth,\r\n                endedHeight: NextGenPlayerOptions?.PresentationEndedBannerHeight\r\n            },\r\n\r\n            seekThumbnails: {\r\n                enabled: (streamWithThumbs?.HasPreviewThumbs && NextGenPlayerOptions?.AllowScrubbing) ?? false,\r\n                thumbData: streamWithThumbs?.PreviewThumbs\r\n            },\r\n\r\n            background: {\r\n                isMultiStream: hasMultipleStreams,\r\n                compositionMap: Presentation?.CompositionMap,\r\n            }\r\n        }\r\n\r\n        return result;\r\n    });\r\n}\r\n\r\n/**\r\n * @param {string} presentationId\r\n * @returns {Promise<Array<PlayerExtensionConfig>>}\r\n */\r\nexport function getExtensions(presentationId) {\r\n    return getPlayerOptions(presentationId).then(playerOptions => {\r\n        const { Presentation } = playerOptions.d;\r\n        const extensions = [...Presentation?.PlayerExtensions ?? []];\r\n        return extensions;\r\n    });\r\n}\r\n\r\n/**\r\n * @typedef {Object} LiveEvent\r\n * @property {number} eventType\r\n * @property {number} time\r\n */\r\n\r\n/**\r\n * \r\n * @param {string} playbackTicket\r\n * @param {number} [currentTimeInMs]\r\n * @param {number} [sinceTimeInMs]\r\n * @returns {Promise<Array<LiveEvent>>}\r\n */\r\nexport function getLiveEvents(playbackTicket, currentTimeInMs = 0, sinceTimeInMs = -1) {\r\n    return fetch(`${Path.PlayerService}/GetLiveEvents`, {\r\n        method: 'POST',\r\n        headers: { 'Content-Type': 'application/json' },\r\n        mode: 'cors',\r\n        body: JSON.stringify({\r\n            playbackTicket,\r\n            currentTimeInMs,\r\n            sinceTimeInMs\r\n        })\r\n    }).then(result => result.json()).then(jsonData => jsonData.d.map(event => ({\r\n        eventType: event.EventType,\r\n        id: event.Id,\r\n        payload: event.Payload,\r\n        payloadType: event.PayloadType,\r\n        sequence: event.Sequence,\r\n        time: event.Time\r\n    })));\r\n}\r\n\r\n/**\r\n * \r\n * @param {string} playbackTicket \r\n * @param {number} bookmarkPosition \r\n * @param {Array<{Duration:number, StartTime: number}>} segments \r\n */\r\nexport function reportMediaView(playbackTicket, bookmarkPosition, segments) {\r\n    return fetch(`${Path.PlayerService}/ReportMediaView`, {\r\n        method: 'POST',\r\n        headers: { 'Content-Type': 'application/json' },\r\n        mode: 'cors',\r\n        body: JSON.stringify({\r\n            playbackTicket,\r\n            bookmarkPosition,\r\n            segments\r\n        })\r\n    });\r\n}\r\n\r\nexport function reportMediaOpen(playbackTicket) {\r\n    const embeddedPlayer = window.self != window.top;\r\n    let container = null;\r\n    if (embeddedPlayer) {\r\n        try {\r\n            let containerUrl = window.parent.document.location.href;\r\n            if (containerUrl) container = containerUrl;\r\n        } catch { }\r\n    }\r\n    return fetch(`${Path.PlayerService}/ReportMediaOpen`, {\r\n        method: 'POST',\r\n        headers: { 'Content-Type': 'application/json' },\r\n        mode: 'cors',\r\n        body: JSON.stringify({\r\n            playbackTicket,\r\n            playerType: 'Javascript',\r\n            mediaPlayerType: 'Html5',\r\n            embeddedPlayer,\r\n            url: document.location.href,\r\n            container\r\n        })\r\n    });\r\n}\r\n\r\nfunction getPlaybackRates(playbackSpeedsString) {\r\n    const defaultList = [0.5, .75, 1.0, 1.25, 1.5, 1.75, 2.0];\r\n\r\n    if (typeof playbackSpeedsString !== 'string') {\r\n        return defaultList;\r\n    }\r\n\r\n    let parsedList = parsePlaybackSpeedsString(playbackSpeedsString);\r\n\r\n    if (parsedList.length < 1) {\r\n        return defaultList;\r\n    }\r\n\r\n    return parsedList;\r\n}\r\n\r\nfunction parsePlaybackSpeedsString(theString) {\r\n    const pattern = /[\\d\\.]+/g;\r\n\r\n    if (typeof theString !== 'string') {\r\n        return [];\r\n    }\r\n\r\n    let matches = theString.match(pattern);\r\n\r\n    if (!matches) {\r\n        return [];\r\n    }\r\n\r\n\r\n    const results = [];\r\n\r\n    for (let i = 0; i < matches.length; i += 1) {\r\n        let num = Number(matches[i]);\r\n        if (!isNaN(num)) {\r\n            results.push(num);\r\n        }\r\n    }\r\n\r\n    return results;\r\n}","import {\r\n    queryStringParam,\r\n    getCollectionIdFromQueryString,\r\n    getEffectiveAuthTicket,\r\n    getQueryParam\r\n} from './SFMP.MiniUtility.js';\r\n\r\n/**\r\n * @param {string} presentationId\r\n * @param {string} url\r\n */\r\nexport function appendAuthTicket(presentationId, url) {\r\n    if (!url) {\r\n        // Garbage in -- garbage out.\r\n        return url;\r\n    }\r\n\r\n    var connector, collectionId, ticket;\r\n    var fixed = url;\r\n\r\n    function getConnector() { return (fixed.indexOf(\"?\") > -1) ? \"&\" : \"?\" }\r\n\r\n    collectionId = getCollectionIdFromQueryString();\r\n    ticket = getEffectiveAuthTicket(presentationId, collectionId);\r\n\r\n    if (!ticket) {\r\n        ticket = getQueryParam(queryStringParam.AUTHTICKET);\r\n    }\r\n\r\n    if (ticket) {\r\n        fixed += getConnector() + queryStringParam.AUTHTICKET + \"=\" + ticket;\r\n    }\r\n\r\n    return fixed;\r\n}\r\n","import { getPlayerOptions, getPlayCoverInfo, sortByObjectProperty, isPresentationId } from '../util';\r\nimport { Path } from './config.js';\r\nimport { appendAuthTicket } from '../util';\r\n\r\n// Values for d.Presentation.PlayStatus\r\n/**\r\n* @enum {string}\r\n*/\r\nexport const PresentationStatus = Object.freeze({\r\n    NotAvailable: \"NotAvailable\",\r\n    ScheduledForLive: \"ScheduledForLive\",\r\n    OpenForLive: \"OpenForLive\",\r\n    Live: \"Live\",\r\n    LivePaused: \"LivePaused\",\r\n    LiveEnded: \"LiveEnded\",\r\n    LiveEndedDvr: \"LiveEndedDvr\",\r\n    OnDemand: \"OnDemand\",\r\n});\r\n\r\n// Values for d.PlayerPresentationStatus\r\n/**\r\n* @enum {number}\r\n*/\r\nexport const PlayerPresentationStatus = Object.freeze({\r\n    None: 0,\r\n    Viewable: 1,\r\n    NotFound: 2,\r\n    Offline: 3,\r\n    Scheduled: 4,\r\n    NotYetAvailable: 5,\r\n    NotAuthorized: 6\r\n});\r\n\r\n// Values for d.Presentation.TimedEvents\r\n/**\r\n* @enum {string}\r\n*/\r\nexport const TimedEventType = Object.freeze({\r\n    Chapter: 'application/vnd.sonicfoundry.chapter.xml',\r\n    Poll: 'mediasite/poll',\r\n    PresentationSubQuiz: 'mediasite/presentationSubQuiz',\r\n    Hotspot: \"SfPresentationHotspot\",\r\n    Annotation: 'SfPresentationAnnotation'\r\n});\r\n\r\n/**\r\n * Values for SonicFoundry.Mediasite.Player.DataAccess.TimelineEventType\r\n * @enum {number}\r\n **/\r\nexport const LiveTimelineEventType = Object.freeze({\r\n    Unknown: 0,\r\n    Slide: 1,\r\n    PresentationStart: 2,\r\n    PresentationEnd: 3,\r\n    PauseStart: 4,\r\n    PauseEnd: 5,\r\n    TimedEvent: 6\r\n});\r\n\r\n/**\r\n * @enum {number}\r\n */\r\nexport const ContentStreamType = Object.freeze({\r\n    Video1: 0,\r\n    Slide: 2,\r\n    Presentation: 3,\r\n    Video2: 4,\r\n    Video3: 5\r\n});\r\n\r\n/**\r\n * @enum {number}\r\n */\r\nexport const SearchResultType = Object.freeze({\r\n    Caption: 1,\r\n    Slide: 2\r\n});\r\n\r\nexport const MediaErrorType = Object.freeze({\r\n    CustomError: 0,\r\n    AbortedError: 1,\r\n    NetworkError: 2,\r\n    DecodeError: 3,\r\n    SrcNotSupported: 4,\r\n    Encrypted: 5\r\n});\r\n\r\n/**\r\n * @typedef {Object} PresentationMetadata\r\n * @property {string} title\r\n * @property {string} poster\r\n * @property {string} playerPresentationStatusMessage\r\n * @property {number} playerPresentationStatus\r\n * @property {number} duration\r\n * @property {string} playStatus\r\n * @property {number} unixTime\r\n * @property {Array} presenters\r\n * @property {Array} supportingLinks\r\n * @property {string} description\r\n * @property {string} compliancePolicyMarkdown\r\n * @property {number} bookmark\r\n * @property {boolean} is360Video\r\n * @property {boolean} isLiveCountdownEnabled\r\n * @property {boolean} isLiveIndicationDelayed\r\n */\r\n\r\n/**\r\n * \r\n * @param {string} presentationId\r\n * @returns {Promise<PresentationMetadata>}\r\n */\r\nexport function getMetadata(presentationId) {\r\n    return getPlayerOptions(presentationId).then(presentationOptions => {\r\n        return {\r\n            title: JSON.parse(`\"${presentationOptions.d.Presentation?.Title}\"`),\r\n            poster: appendAuthTicket(presentationId, presentationOptions.d.Presentation?.ThumbnailUrl),\r\n            playerPresentationStatusMessage: presentationOptions.d.PlayerPresentationStatusMessage,\r\n            playerPresentationStatus: presentationOptions.d.PlayerPresentationStatus,\r\n            duration: presentationOptions.d.Presentation?.Duration,\r\n            serverClockSkew: presentationOptions.d.Presentation?.ServerClockSkew ?? 0,\r\n            playStatus: presentationOptions.d.Presentation?.PlayStatus,\r\n            unixTime: presentationOptions.d.Presentation?.UnixTime,\r\n            presenters: presentationOptions.d.Presentation?.Presenters?.map(presenter => {\r\n                return {\r\n                    name: JSON.parse(`\"${presenter.Name}\"`),\r\n                    bioUrl: JSON.parse(`\"${presenter.BioUrl}\"`),\r\n                    imageUrl: presenter.ImageUrl || presentationOptions.d.PlayerLayoutOptions?.Images?.DefaultPresenterImage?.ImageFilename\r\n                };\r\n            }) ?? [],\r\n            description: presentationOptions.d.Presentation?.Description,\r\n            supportingLinks: presentationOptions.d.Presentation?.SupportingLinks?.map?.(link => {\r\n                return {\r\n                    title: JSON.parse(`\"${link.Description}\"`),\r\n                    url: JSON.parse(`\"${link.Url}\"`)\r\n                }\r\n            }) ?? [],\r\n            compliancePolicyMarkdown: presentationOptions.d.GlobalOptions?.CompliancePolicyMarkdown,\r\n            bookmark: presentationOptions.d.PresentationBookmark?.position,\r\n            is360Video: presentationOptions.d.Presentation?.Is360Video,\r\n            isLiveCountdownEnabled: presentationOptions.d.Presentation?.LiveCountdownEnabled,\r\n            isLiveIndicationDelayed: presentationOptions.d.Presentation?.LiveIndicationDelayed,\r\n        }\r\n    });\r\n}\r\n\r\n/**\r\n * @typedef {Object} VideoSource\r\n * @property {string} src\r\n * @property {string} type\r\n * @property {number} segmentLength\r\n * @property {number} streamType\r\n */\r\n\r\nfunction isHlsMime(type) {\r\n    return type === 'audio/x-mpegurl';\r\n}\r\n\r\nfunction prioritizeHls(a, b) {\r\n    if (isHlsMime(a.type) && !isHlsMime(b.type)) {\r\n        return -1;\r\n    }\r\n    else if (isHlsMime(b.type) && !isHlsMime(a.type)) {\r\n        return 1;\r\n    }\r\n    else {\r\n        return 0;\r\n    }\r\n}\r\n\r\n/**\r\n * @typedef {Object} MediaStream\r\n * @property {string} streamType\r\n * @property {VideoSource[]} items\r\n * @property {boolean} playbackAudioSource\r\n * @property {number} priority\r\n * @property {string} [slideBaseUrl]\r\n */\r\n\r\n/**\r\n * \r\n * @param {any} presentationId\r\n * @returns {Promise<MediaStream[]>}\r\n */\r\nexport function getStreams(presentationId) {\r\n    return getPlayerOptions(presentationId).then(presentationOptions => {\r\n        const streams = presentationOptions.d.Presentation?.Streams\r\n            ?.filter(stream => (stream.VideoUrls.length > 0 || stream.HasSlideContent))\r\n            .slice()\r\n            .sort((a, b) => sortByObjectProperty(a, b, 'Priority')) ?? [];\r\n\r\n        return streams.map(stream => {\r\n            switch (stream.StreamType) {\r\n                case ContentStreamType.Video1:\r\n                case ContentStreamType.Video2:\r\n                case ContentStreamType.Video3: {\r\n                    const videoUrls = stream.VideoUrls.map(videoUrl => {\r\n                        const locationUrl = new URL(videoUrl.Location);\r\n                        locationUrl.protocol = window.location.protocol;\r\n                        return {\r\n                            src: locationUrl.href,\r\n                            type: videoUrl.MimeType,\r\n                            segmentLength: videoUrl.SegmentLength,\r\n                            streamType: stream.StreamType\r\n                        }\r\n                    }) ?? [];\r\n                    videoUrls.sort(prioritizeHls);\r\n                    return {\r\n                        id: stream.Id,\r\n                        audioOnly: stream.AudioOnly,\r\n                        streamType: stream.StreamType,\r\n                        items: videoUrls,\r\n                        playbackAudioSource: stream.PlaybackAudioSource,\r\n                        priority: stream.Priority\r\n                    };\r\n                }\r\n                case ContentStreamType.Slide:\r\n                    const slides = stream.Slides.map(slide => {\r\n                        return {\r\n                            number: slide.Number,\r\n                            text: slide.Text,\r\n                            time: slide.Time,\r\n                            streamType: ContentStreamType.Slide\r\n                        }\r\n                    });\r\n                    return {\r\n                        id: stream.Id,\r\n                        audioOnly: stream.AudioOnly,\r\n                        streamType: stream.StreamType,\r\n                        items: slides,\r\n                        slideBaseUrl: stream.SlideBaseUrl,\r\n                        playbackAudioSource: stream.PlaybackAudioSource,\r\n                        priority: stream.Priority\r\n                    }\r\n                default:\r\n                    break;\r\n            }\r\n        });\r\n    });\r\n}\r\n/**\r\n * \r\n * @param {string} presentationId\r\n * @returns {Promise<string>}\r\n */\r\nexport function getAudioDescriptionUrl(presentationId) {\r\n    return getPlayerOptions(presentationId).then(presentationOptions => (\r\n        appendAuthTicket(presentationId, presentationOptions.d.Presentation?.AudioDescriptionsUrl)\r\n    ));\r\n}\r\n\r\n/**\r\n * @typedef {Object} DownloadInfo\r\n * @property {string} text\r\n * @property {string} url\r\n */\r\n\r\n/**\r\n * \r\n * @param {string} presentationId\r\n * @returns {Promise<Array<DownloadInfo>>}\r\n */\r\nexport function getDownloads(presentationId) {\r\n    return isPresentationId(presentationId) ? getPlayerOptions(presentationId).then(presentationOptions => {\r\n        const result = [];\r\n        if (presentationOptions.d.Presentation?.TranscriptUrl) {\r\n            const transcriptUrl = presentationOptions.d.Presentation?.TranscriptUrl\r\n            const txtIndex = transcriptUrl.indexOf('.txt');\r\n            const cleanTranscriptUrl = transcriptUrl.slice(0, txtIndex);\r\n\r\n            for (let i = 0; i < presentationOptions.d.Presentation?.Transcripts.length; i++) {\r\n                const language = presentationOptions.d.Presentation.Transcripts[i].Language;\r\n                const languageCode = presentationOptions.d.Presentation.Transcripts[i].DetailedLanguageCode;\r\n                const languageTranscriptUrl = cleanTranscriptUrl + '_' + languageCode + '.txt';\r\n                let transcriptLinkText = `${language} Transcript (.txt)`\r\n                let finalTranscriptUrl = appendAuthTicket(presentationId, languageTranscriptUrl);\r\n\r\n                //Don't show language if only one transcript exists\r\n                if (presentationOptions.d.Presentation?.Transcripts.length === 1) {\r\n                    transcriptLinkText = 'Transcript (.txt)';\r\n                    finalTranscriptUrl = appendAuthTicket(presentationId, transcriptUrl);\r\n                }\r\n                \r\n                result.push({\r\n                    text: transcriptLinkText,\r\n                    url: finalTranscriptUrl\r\n                });\r\n            }\r\n\r\n            if (presentationOptions.d.Presentation?.Transcripts.length > 1) {\r\n                const zipTranscriptsUrl = cleanTranscriptUrl + 's.zip';\r\n                result.push({\r\n                    text: `Transcripts (.zip)`,\r\n                    url: appendAuthTicket(presentationId, zipTranscriptsUrl)\r\n                });\r\n            }\r\n        }\r\n        if (presentationOptions.d.Presentation?.PodcastUrl) {\r\n            result.push({\r\n                text: 'Audio (.mp3 Podcast)',\r\n                url: appendAuthTicket(presentationId, presentationOptions.d.Presentation?.PodcastUrl)\r\n            });\r\n        }\r\n        if (presentationOptions.d.Presentation?.VodcastUrl) {\r\n            result.push({\r\n                text: 'Video (.mp4 Vodcast)',\r\n                url: appendAuthTicket(presentationId, presentationOptions.d.Presentation?.VodcastUrl)\r\n            });\r\n        }\r\n        return result;\r\n    }) : Promise.resolve([{ text: 'Example', url: location.href }]);\r\n}\r\n\r\n/**\r\n * \r\n * @param {string} presentationId\r\n * @returns {Promise<VTTCue[]>}\r\n */\r\nexport function getCaptions(presentationId) {\r\n    return getPlayerOptions(presentationId).then(presentationOptions => {\r\n        const captions = presentationOptions.d.Presentation?.Transcripts ?? [];\r\n        return captions;\r\n    });\r\n}\r\n\r\n/**\r\n * \r\n * @param {string} presentationId\r\n * @returns {Promise<TimedEvent[]>}\r\n */\r\nexport function getChapters(presentationId) {\r\n    return getPlayerOptions(presentationId).then(presentationOptions => {\r\n        return (presentationOptions.d.Presentation?.Chapters ?? []).map(chapter => {\r\n            //Parsing to JSON handles decoding any encoding done by server-side\r\n            const chapterText = JSON.parse(`\"${chapter.Text}\"`);\r\n            return Object.assign({}, chapter, { Text: chapterText });\r\n        });\r\n    });\r\n}\r\n\r\n/**\r\n * \r\n * @param {string} presentationId\r\n * @returns {Promise<TimedEvent[]>}\r\n */\r\nexport function getHotspots(presentationId) {\r\n    return getPlayerOptions(presentationId).then(presentationOptions => {\r\n        return (presentationOptions.d.Presentation?.Hotspots ?? []).map(hotspot => {\r\n            //Parse out the properties in hotspot text and then merge it with the info found elsewhere in the hotspot object\r\n            const hotspotProperties = JSON.parse(hotspot.Text);\r\n            return { ...hotspot, ...hotspotProperties };\r\n        });\r\n    });\r\n}\r\n\r\n/**\r\n * @typedef {Object} PresentationOptions\r\n * @property {boolean} HasSearchableText\r\n * @property {boolean} ForumEnabled\r\n * @property {boolean} SharingEnabled\r\n * @property {boolean} PollingEnabled\r\n * @property {boolean} HasQuizzes\r\n */\r\n\r\n/**\r\n * \r\n * @param {string} presentationId\r\n * @returns {Promise<PresentationOptions>}\r\n */\r\n\r\nexport function getPresentationOptions(presentationId) {\r\n    return getPlayerOptions(presentationId).then(presentationOptions => {\r\n        return {\r\n            HasSearchableText: presentationOptions.d.Presentation?.HasSearchableText,\r\n            ForumEnabled: presentationOptions.d.Presentation?.ForumEnabled,\r\n            SharingEnabled: presentationOptions.d.Presentation?.SharingEnabled,\r\n            PollingEnabled: presentationOptions.d.Presentation?.PollingEnabled,\r\n            HasQuizzes: presentationOptions.d.Presentation?.HasQuizzes,\r\n        }\r\n    });\r\n}\r\n\r\n/**\r\n * @param {string} presentationId\r\n * @returns {Promise<{completedDurationInMs:number,liveStartUnixTimeInMs:number,playStatus:string}>}\r\n */\r\nexport function getLiveStatus(presentationId) {\r\n    return fetch(`${Path.PlayerService}/GetLiveStatus`, {\r\n        method: 'POST',\r\n        headers: { 'Content-Type': 'application/json' },\r\n        mode: 'cors',\r\n        body: JSON.stringify({ presentationId })\r\n    }).then(result => result.json()).then(jsonData => ({\r\n        completedDurationInMs: jsonData.d.CompletedDurationInMs,\r\n        liveStartUnixTimeInMs: jsonData.d.LiveStartUnixTimeInMs,\r\n        playStatus: jsonData.d.PlayStatus\r\n    }));\r\n}\r\n\r\n/**\r\n * @typedef {Object} TimedEvent\r\n * @property {string} Id\r\n * @property {string} Text\r\n * @property {number} Time\r\n * @property {string} Type\r\n * @property {string} _type\r\n */\r\n\r\n/**\r\n * \r\n * @param {string} presentationId\r\n * @returns {Promise<TimedEvent[]>}\r\n */\r\nexport function getTimedEvents(presentationId) {\r\n    return getPlayerOptions(presentationId).then(presentationOptions => {\r\n        return presentationOptions.d.Presentation?.TimedEvents ?? [];\r\n    });\r\n}\r\n\r\n/**\r\n * @typedef {Object} CompositionMap\r\n * @property {number} Width\r\n * @property {number} Height\r\n * @property {number} Duration\r\n * @property {Array<VisualComposition>} VisualCompositions\r\n */\r\n\r\n/**\r\n * @typedef {Object} VisualComposition\r\n * @property {number} Time\r\n * @property {Array<VisualCompositionItem>} VisualItems\r\n */\r\n\r\n/**\r\n * @typedef {Object} VisualCompositionItem\r\n * @property {string} SourceId\r\n * @property {Rect} TargetRect\r\n */\r\n\r\n/**\r\n * @typedef {Object} Rect\r\n * @property {number} X\r\n * @property {number} Y\r\n * @property {number} Width\r\n * @property {number} Height\r\n */\r\n\r\n/**\r\n *\r\n * @param {string} presentationId\r\n * @returns {Promise<CompositionMap[]>}\r\n */\r\nexport function getCompositionMap(presentationId) {\r\n    return getPlayerOptions(presentationId).then(presentationOptions => {\r\n        return presentationOptions.d.Presentation?.CompositionMap;\r\n    });\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} presentationId\r\n * @returns {Promise<CompositionList[]>}\r\n */\r\nexport function getCompositionList(presentationId) {\r\n    return getPlayerOptions(presentationId).then(presentationOptions => {\r\n        return presentationOptions.d.Presentation?.CompositionList;\r\n    });\r\n}\r\n\r\n/**\r\n * @typedef {Object} PosterInfo\r\n * @property {string} title\r\n * @property {string} poster\r\n * @property {string} playStatus\r\n * @property {number} unixTime\r\n * @property {boolean} hasQuizzes\r\n * @property {string[]} allowedPlayerIFrameAPISites\r\n */\r\n\r\n/**\r\n * \r\n * @param {string} presentationId\r\n * @returns {Promise<PosterInfo>}\r\n */\r\nexport function getPosterInfo(presentationId, coverVisible) {\r\n    const playcoverNullObjectPromise = new Promise((resolve, reject) => {\r\n        const playcoverNullObject = {\r\n            title: null,\r\n            poster: null,\r\n            defaultThumbnailUrl: null,\r\n            playStatus: null,\r\n            unixTime: null,\r\n            hasQuizzes: null,\r\n            allowedPlayerIFrameAPISites: null,\r\n            enableLiveCountdown: null,\r\n            delayLiveIndicationUntilPresentationDate: null\r\n        }\r\n        resolve(playcoverNullObject)\r\n    })\r\n\r\n    if (!isPresentationId(presentationId) || coverVisible === false) {\r\n        return playcoverNullObjectPromise\r\n    }\r\n    else {\r\n        return getPlayCoverInfo(presentationId).then(playCoverOptions => {\r\n            return {\r\n                title: playCoverOptions.d.Title,\r\n                poster: appendAuthTicket(presentationId, playCoverOptions.d?.ThumbnailUrl) ?? playCoverOptions.d.DefaultThumbnailUrl,\r\n                defaultThumbnailUrl: playCoverOptions.d.DefaultThumbnailUrl,\r\n                playStatus: playCoverOptions.d.PlayStatus,\r\n                unixTime: playCoverOptions.d.AirDateUnixTimeInMs,\r\n                hasQuizzes: playCoverOptions.d.HasQuizzes,\r\n                allowedPlayerIFrameAPISites: playCoverOptions.d.AllowedPlayerIFrameAPISites,\r\n                enableLiveCountdown: playCoverOptions.d.IsLiveCountdownEnabled,\r\n                delayLiveIndicationUntilPresentationDate: playCoverOptions.d.IsLiveIndicationDelayed\r\n            }\r\n        });\r\n    }\r\n}\r\n\r\nexport function sendQuestion(playbackTicketId, question) {\r\n    return fetch(`${Path.PlayerService}/SendQuestion`, {\r\n        method: 'POST',\r\n        headers: { 'Content-Type': 'application/json' },\r\n        mode: 'cors',\r\n        body: JSON.stringify({ playbackTicketId, question })\r\n    }).then(result => result.json()).then(jsonData => {\r\n        const { Message, Success } = jsonData.d;\r\n        // Success variable indicates whether question was successfully submited (after server side validation, etc.)\r\n        return { Success, Message };\r\n    });\r\n}\r\n\r\nexport function getShareEmail(playbackTicketId) {\r\n    return fetch(`${Path.PlayerService}/GetInvite`, {\r\n        method: 'POST',\r\n        headers: { 'Content-Type': 'application/json' },\r\n        mode: 'cors',\r\n        body: JSON.stringify({ playbackTicketId })\r\n    }).then(result => result.json()).then(jsonData => {\r\n        return {\r\n            text: jsonData.d.MessageBody,\r\n            title: jsonData.d.Subject,\r\n            url: jsonData.d.MailTo\r\n        }\r\n    });\r\n}\r\n\r\n\r\n/**\r\n * @typedef {Object} PresentationTextSearchResult\r\n * @property {string} text The text excerpt where the result was found.\r\n * @property {number} time The time in milliseconds.\r\n * @property {SearchResultType} type The type of result.\r\n */\r\n\r\n/**\r\n * \r\n * @param {string} playbackTicketId\r\n * @param {string} searchTerm\r\n * @returns {Promise<PresentationTextSearchResult[]>}\r\n */\r\nexport function searchCaptionsAndSlides(playbackTicketId, searchTerm, language) {\r\n    return fetch(`${Path.PlayerService}/SearchPresentationText`, {\r\n        method: 'POST',\r\n        headers: { 'Content-Type': 'application/json' },\r\n        mode: 'cors',\r\n        body: JSON.stringify({ playbackTicketId, searchTerm, language })\r\n    }).then(result => result.json()).then(jsonData => {\r\n        return jsonData.d.SearchResults?.map(searchResult => ({\r\n            text: searchResult.Text,\r\n            time: searchResult.Time,\r\n            type: searchResult.Type\r\n        })) ?? [];\r\n    });\r\n}\r\n","export function sortByObjectProperty(a, b, prop) {\r\n    if (a[prop] > b[prop]) {\r\n        return 1;\r\n    }\r\n    else if (a[prop] < b[prop]) {\r\n        return -1;\r\n    }\r\n    else {\r\n        return 0;\r\n    }\r\n}\r\n","import { Path } from '../api/config.js';\r\n\r\n/**\r\n* Returns a Promise that resolves to a collection of data from GetPlayerOptions.\r\n* @param {string} resourceId\r\n* @returns {Promise<Object>}\r\n*/\r\nexport function getPlayCoverInfo(resourceId) {\r\n    return fetch(`${Path.PlayerService}/GetPlayCoverInfo`, {\r\n        method: 'POST',\r\n        headers: { 'Content-Type': 'application/json' },\r\n        mode: 'cors',\r\n        body: JSON.stringify({\r\n            \"presentationId\": resourceId\r\n        })\r\n    }).then(result => result.json());\r\n}\r\n","import { AntiForgery, Path } from './config.js';\r\n\r\nexport function getPresentationQuiz(presentationId) {\r\n    return fetch(`${Path.WebAppsApi}/PresentationQuiz/GetQuizPlayerDisplay`, {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n            [AntiForgery.Header]: AntiForgery.Token,\r\n            'X-Requested-With': 'XMLHttpRequest'\r\n        },\r\n        mode: 'cors',\r\n        body: JSON.stringify({\r\n            Id: presentationId,\r\n            PresentationId: presentationId,\r\n            AuthTicketId: window.SiteData.AuthTicket,\r\n            MediasiteChannelId: window.SiteData.CollectionId\r\n        })\r\n    }).then(result => result.json()).then(jsonData => {\r\n        if (jsonData.RedirectUrl) {\r\n            location.href = jsonData.RedirectUrl;\r\n            return new Promise();\r\n        }\r\n        else {\r\n            return jsonData;\r\n        }\r\n    });\r\n}\r\n\r\n/**\r\n * \r\n * @param {Object} quizResultParams\r\n * @param {string} quizResultParams.PresentationId\r\n * @param {string} quizResultParams.PresentationQuizId\r\n * @param {string} quizResultParams.AuthTicketId\r\n * @param {string} quizResultParams.MediasiteChannelId\r\n * @param {string} quizResultParams.QuizResultContextId\r\n * \r\n */\r\nexport function getQuizResults(quizResultParams) {\r\n    return fetch(`${Path.WebAppsApi}/QuizResult/FindOrCreateResult`, {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n            [AntiForgery.Header]: AntiForgery.Token\r\n        },\r\n        mode: 'cors',\r\n        body: JSON.stringify(quizResultParams)\r\n    }).then(result => result.json()).then(result => result.Entity);\r\n}\r\n\r\n/**\r\n * \r\n * @param {Object} answerDetails\r\n * @param {string} answerDetails.PresentationQuizId\r\n * @param {string} answerDetails.PresentationId\r\n * @param {string} answerDetails.CatalogId\r\n * @param {string} answerDetails.QuizResultId\r\n * @param {string} answerDetails.SubQuizId\r\n * @param {string} answerDetails.QuestionId\r\n * @param {string} answerDetails.SubmittedAnswer\r\n * @param {string} answerDetails.QuizResultContextId\r\n */\r\nexport function setQuizAnswer(answerDetails) {\r\n\r\n    return fetch(`${Path.WebAppsApi}/QuizResult/SetAnswer`, {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n            [AntiForgery.Header]: AntiForgery.Token\r\n        },\r\n        mode: 'cors',\r\n        body: JSON.stringify(answerDetails)\r\n    }).then(result => result.json());\r\n}\r\n\r\n/**\r\n * \r\n * @param {Object} scoreQuizParams\r\n * @param {string} scoreQuizParams.PresentationId\r\n * @param {string} scoreQuizParams.PresentationQuizId\r\n * @param {string} scoreQuizParams.AuthTicketId\r\n * @param {string} scoreQuizParams.MediasiteChannelId\r\n * @param {string} scoreQuizParams.QuizResultContextId\r\n * \r\n */\r\nexport function scoreQuiz(scoreQuizParams) {\r\n    return fetch(`${Path.WebAppsApi}/QuizResult/ScoreQuiz`, {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n            [AntiForgery.Header]: AntiForgery.Token\r\n        },\r\n        mode: 'cors',\r\n        body: JSON.stringify(scoreQuizParams)\r\n    }).then(result => result.json()).then(result => result.Entity);\r\n}\r\n\r\n\r\nexport function scoreSubQuiz(presentationId, presentationQuizId, subQuizId) {\r\n    return fetch(`${Path.WebAppsApi}/QuizResult/ScoreSubQuiz`, {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n            [AntiForgery.Header]: AntiForgery.Token\r\n        },\r\n        mode: 'cors',\r\n        body: JSON.stringify({\r\n            PresentationQuizId: presentationQuizId,\r\n            PresentationId: presentationId,\r\n            SubQuizId: subQuizId,\r\n            AuthTicketId: window.SiteData.AuthTicket,\r\n            MediasiteChannelId: window.SiteData.CollectionId\r\n        })\r\n    }).then(result => result.json()).then(result => result.Entity);\r\n}\r\n\r\n/**\r\n * \r\n * @param {string} presentationId\r\n * @param {string} presentationQuizId\r\n * @param {string} channelId\r\n */\r\nexport function resetQuizAnswers(presentationId, presentationQuizId) {\r\n\r\n    const data = {\r\n        PresentationQuizId: presentationQuizId,\r\n        PresentationId: presentationId,\r\n        AuthTicketId: window.SiteData.AuthTicket,\r\n        MediasiteChannelId: window.SiteData.CollectionId\r\n    }\r\n\r\n    return fetch(`${Path.WebAppsApi}/QuizResult/ResetAnswers`, {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n            [AntiForgery.Header]: AntiForgery.Token\r\n        },\r\n        mode: 'cors',\r\n        body: JSON.stringify(data)\r\n    }).then(result => result.json());\r\n}\r\n","import api from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/postcss-loader/dist/cjs.js!./modal-dialog.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\n\r\nimport './modal-dialog.css';\r\n\r\nconst _allModals = [];\r\nconst _displayAsPanel = new WeakMap();\r\nconst _showPlayerControls = new WeakMap();\r\n\r\nexport default class ModalDialog extends videojs.getComponent('ModalDialog') {\r\n    /**\r\n     * \r\n     * @param {videojs.Player} player\r\n     * @param {Object} options\r\n     * @param {string} options.text\r\n     * @param {OVERLAY_POSITION} [options.position]\r\n     * @param {string} [options.className]\r\n     * @param {boolean} [options.displayAsPanel]\r\n     * @param {boolean} [options.solidBackground]\r\n     * @param {boolean} [options.showPlayerControls]\r\n     */\r\n    constructor(player, options) {\r\n        super(player, options);\r\n        this.addClass('mediasite-player__modal-dialog');\r\n        this.displayAsPanel = options.displayAsPanel || false;\r\n        this.solidBackground = options.solidBackground ?? true;\r\n        _allModals.push(this);\r\n\r\n        //the option to show the player controls needs to know about the player setting to show the player controls\r\n        //therefore, we wait until the loader has finished before finding out if the modal dialog option of showing the player controls\r\n        //should be applied or not\r\n        player.on('presentationloaded', () => {            \r\n            const playerHasControls = this.player().controls();\r\n            if (playerHasControls && options.showPlayerControls) {\r\n                this.showPlayerControls = true;\r\n            } else {\r\n                this.showPlayerControls = false;\r\n            }\r\n        });\r\n    }\r\n\r\n    open(...args) {\r\n        super.open(...args);\r\n\r\n        this.one('animationend', () => {\r\n            this.el().querySelector('input')?.focus();\r\n        });\r\n\r\n        if (this.displayAsPanel) {\r\n            const existingModal = _allModals.find(modal => modal.displayAsPanel && modal.opened() && modal !== this);\r\n            existingModal?.close();\r\n        }\r\n\r\n        if (this.showPlayerControls) {\r\n            this.player().controls(true);\r\n        }\r\n\r\n        this.triggerLayoutUpdate();\r\n\r\n        this.trigger('modalopened');\r\n    }\r\n\r\n    close(...args) {\r\n        if (super.opened()) {\r\n            super.close(...args);\r\n            const exitClass = 'mediasite-player__modal-dialog--exiting';\r\n            try {\r\n                this.addClass(exitClass);\r\n                this.one('animationend', () => {\r\n                    this.removeClass(exitClass);\r\n                    this.triggerLayoutUpdate();\r\n                });\r\n            }\r\n            catch (e) { }\r\n        }\r\n    }\r\n\r\n    triggerLayoutUpdate() {\r\n        if (_allModals.some(modal => modal.displayAsPanel && modal.opened())) {\r\n            this.player().addClass('mediasite-player--sidebar-open');\r\n            this.player().controls(true);\r\n        }\r\n        else {\r\n            this.player().removeClass('mediasite-player--sidebar-open');\r\n        }\r\n        this.player().trigger('playerresize');\r\n    }\r\n\r\n    get displayAsPanel() {\r\n        return _displayAsPanel.get(this);\r\n    }\r\n\r\n    set displayAsPanel(displayAsPanel) {\r\n        _displayAsPanel.set(this, displayAsPanel);\r\n\r\n        if (displayAsPanel) {\r\n            this.addClass('mediasite-player__modal-dialog--panel');\r\n        }\r\n        else {\r\n            this.removeClass('mediasite-player__modal-dialog--panel');\r\n        }\r\n\r\n        this.triggerLayoutUpdate();\r\n    }\r\n\r\n    get solidBackground() {\r\n        return this.hasClass('mediasite-player__modal-dialog--solid-background');\r\n    }\r\n\r\n    set solidBackground(solidBackground) {\r\n        if (solidBackground) {\r\n            this.addClass('mediasite-player__modal-dialog--solid-background');\r\n        }\r\n        else {\r\n            this.removeClass('mediasite-player__modal-dialog--solid-background');\r\n        }\r\n    }\r\n\r\n    get showPlayerControls() {\r\n        return _showPlayerControls.get(this);\r\n    }\r\n\r\n    set showPlayerControls(shouldShow) {\r\n        _showPlayerControls.set(this, shouldShow);        \r\n\r\n        if (shouldShow) {\r\n            this.addClass('mediasite-player__modal-dialog---show-controls');\r\n        }\r\n        else {\r\n            this.removeClass('mediasite-player__modal-dialog---show-controls');\r\n        }\r\n\r\n        this.triggerLayoutUpdate();\r\n    }\r\n\r\n    /**\r\n     * See the 'condtionalBlur' comment for more details, but this function moves the focus off the modal when it opens back to where the focus was before\r\n     * if the controls are enabled to be shown.\r\n     */\r\n    conditionalFocus_() {\r\n        super.conditionalFocus_();\r\n\r\n        if (this.showPlayerControls) {\r\n            this.previouslyActiveEl_.focus();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * This is how the official Video.js \"TextTrackSettings\" component resets focus to the captions button on close.\r\n     * I don't like how it's labeled in the Video.js source code as a private function, but it appears to be the\r\n     * only way to do this accessibly without reimplementing more of the modal component.\r\n     * @see {@link https://github.com/videojs/video.js/blob/main/src/js/tracks/text-track-settings.js#L589}\r\n     * @private\r\n     */\r\n    conditionalBlur_() {\r\n        if (this.previouslyActiveEl_ && this.previouslyActiveEl_.classList.contains('vjs-menu-item')) {\r\n            // ModalDialog component automatically focuses this.previouslyActiveEl_ on close; setting it here lets us override which button gets focused\r\n            this.previouslyActiveEl_ = this.previouslyActiveEl_.closest('.vjs-menu-button').querySelector('.vjs-menu-button');\r\n        }\r\n        super.conditionalBlur_();\r\n    }\r\n\r\n    dispose() {\r\n        super.dispose();\r\n        const indexInArray = _allModals.indexOf(this);\r\n        if (indexInArray > -1) {\r\n            _allModals.splice(indexInArray, 1);\r\n        }\r\n    }\r\n}\r\n","import api from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/postcss-loader/dist/cjs.js!./overlay.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\n\r\nimport './overlay.css';\r\n\r\n/**\r\n * @enum {string}\r\n **/\r\nexport const OverlayPosition = Object.freeze({\r\n    TopLeft: 'top-left',\r\n    TopRight: 'top-right',\r\n    BottomLeft: 'bottom-left',\r\n    BottomRight: 'bottom-right',\r\n    Center: 'center'\r\n});\r\n\r\nexport default class Overlay extends videojs.getComponent('Component') {\r\n    /**\r\n     * \r\n     * @param {videojs.Player} player\r\n     * @param {Object} options\r\n     * @param {string} options.text\r\n     * @param {OverlayPosition} [options.position]\r\n     * @param {string} [options.className]\r\n     */\r\n    constructor(player, options) {\r\n        super(player, options);\r\n    }\r\n\r\n    createEl(tag, props = {}, attributes = {}) {\r\n        const options = this.options();\r\n        const overlayClassPosition = options.position ?? OverlayPosition.Center;\r\n\r\n        tag = options.url ? 'a' : 'div';\r\n        props = Object.assign({\r\n            textContent: options.text,\r\n            className: `mediasite-player__overlay mediasite-player__overlay--${overlayClassPosition} ${options.className ?? ''}`.trim()\r\n        });\r\n\r\n        if (options.url) {\r\n            props.href = options.url;\r\n            props.target = '_blank';\r\n        }\r\n\r\n        return super.createEl.call(this, tag, props, attributes);\r\n    }\r\n}\r\n","export function getScriptRoot() {\r\n    const url = new URL(document.currentScript?.src ?? '');\r\n    return url.href.split('/').slice(0, -1).join('/');\r\n}\r\n","import { getScriptRoot } from '.';\r\n__webpack_public_path__ = `${getScriptRoot()}/`;\r\n","//there is some functionality that different modals that get displayed in the control bar all use\r\n/**\r\n * Converts the provided time string (like HH:MM:SS or MM:SS) into the number of milliseconds\r\n * @param {string} durationDisplay\r\n */\r\nexport function getMsFromString(durationDisplay) {\r\n    var i, segments = durationDisplay.split(\":\");\r\n\r\n    //if the first segement only has one digit for hours, add a padding 0 to the front of it\r\n    if (segments[0].length === 1) {\r\n        segments[0] = `0${segments[0]}`;\r\n    }\r\n\r\n    for (i = 0; i < segments.length; i++) {\r\n        if (isNaN(parseInt(segments[i], 10)) || segments[i].length != 2 || segments[i] < 0) {\r\n            return -1;\r\n        }\r\n    }\r\n\r\n    var timeInMS = 0;\r\n\r\n    switch (segments.length) {\r\n        case 3:\r\n            timeInMS = segments[0] * 3600000 + segments[1] * 60000 + segments[2] * 1000;\r\n            break;\r\n        case 2:\r\n            timeInMS = segments[0] * 60000 + segments[1] * 1000;\r\n            break;\r\n        case 1:\r\n            timeInMS = segments[0] * 1000;\r\n            break;\r\n    }\r\n\r\n    return timeInMS;\r\n}\r\n\r\n/**\r\n * Mirrors the checkbox 'checked' attribute to the field 'interactable' attribute.\r\n */ \r\nexport function enableFieldByCheckbox(field, checkbox) {\r\n    field.disabled = !checkbox.checked;\r\n\r\n    // When timeCheckbox changes, toggle timeField disabled\r\n    checkbox.addEventListener('change', event => {\r\n        field.disabled = !checkbox.checked;\r\n        field.required = checkbox.checked;\r\n    });\r\n}\r\n/**\r\n * Adds padding of 0s before the time given.\r\n * If our video is longer than an hour, add enough padding for hours.\r\n * Else, keep it to just minutes and seconds.\r\n * @param {function} formattingMethod (videojs.formatTime)\r\n */ \r\nexport function padTimeBasedUponDuration(formattingMethod, time, duration) {\r\n    let needPadding = false;\r\n    let guide = 600;\r\n\r\n    //the normal time formatting only include one digit for hours\r\n    //if the video is longer than 10 hours, add a tens digit for hours\r\n    if (duration >= 36000) {\r\n        needPadding = true;\r\n        guide = 3600;\r\n    } else if (duration >= 3600) {\r\n        guide = 3600;\r\n    }\r\n\r\n    let formattedString = formattingMethod(time, guide);\r\n\r\n    if (needPadding) {\r\n        formattedString.padStart(8, '0');\r\n    }\r\n    return formattedString;\r\n}\r\n\r\n/**\r\n * Returns a regex that matches the format of the string to make sure its value is in the same format before submitting.\r\n */ \r\nexport function createValidationForTimeString(formattedString) {\r\n    let segments = formattedString.split(\":\");\r\n\r\n    if (segments.length == 2) {\r\n        return \"^[0-5]\\\\d:[0-5]\\\\d$\";\r\n    } else if (segments.length == 3) {\r\n        if (segments[0].length == 2) {\r\n            return \"^\\\\d\\\\d:[0-5]\\\\d:[0-5]\\\\d$\";\r\n        } else if (segments[0].length == 1) {\r\n            return \"^\\\\d:[0-5]\\\\d:[0-5]\\\\d$\";\r\n        }\r\n    }\r\n\r\n    return \"\";\r\n}","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./ask-a-question.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\n\r\nimport ModalDialog from '../../components/modal-dialog.js';\r\n\r\nimport generateQuestionForm from './ask-a-question/question-form.js';\r\nimport { getMsFromString, enableFieldByCheckbox, padTimeBasedUponDuration, createValidationForTimeString } from '../../util/shared-control-bar.js';\r\n\r\nimport './ask-a-question.css';\r\nimport { sendQuestion } from '../../api/presentation.js';\r\n\r\nimport QuestionAnswerIcon from '../../assets/images/question_answer-white-24dp.svg';\r\nimport { isPresentationId } from '../../util';\r\n\r\nconst _modal = new WeakMap();\r\nconst _content = new WeakMap();\r\nconst _submitter = new WeakMap();\r\nconst _email = new WeakMap();\r\nlet localize;\r\n\r\n/**\r\n * The AskAQuestion module.\r\n * @member {AskAQuestionPlugin} askAQuestion\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Provides a modal dialog for the user to submit a question to the presenter, if enabled.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass AskAQuestionPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, options);\r\n\r\n        const modal = new ModalDialog(player, {\r\n            temporary: false,\r\n            uncloseable: false,\r\n            pauseOnOpen: false,\r\n            description: localize('Ask a Question'),\r\n            displayAsPanel: true\r\n        });\r\n        modal.addClass('mediasite-player__ask-a-question-modal');\r\n        modal.addClass('mediasite-player__control-bar-modal');\r\n        _modal.set(this, modal);\r\n        player.controlbarMenu().addMenuItem(localize('Ask a Question'), { id: this.name, icon: QuestionAnswerIcon, callback: () => this.openModal() });\r\n\r\n        player.ready(() => {\r\n            player.layout().addChild(modal);\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Opens the Ask a Question modal dialog.\r\n     * @example\r\n     * player.askAQuestion.openModal();\r\n     */\r\n    openModal() {\r\n        if (isPresentationId(this.player.loader().presentationId) && this.enabled) {\r\n            const modal = _modal.get(this);\r\n            const content = generateQuestionForm(this.player);\r\n            _content.set(this, content);\r\n\r\n            this.setupModalContent(content);\r\n            modal.fillWith(content);\r\n            modal.open();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Closes the Ask a Question modal dialog.\r\n     * @example\r\n     * player.askAQuestion.closeModal();\r\n     */\r\n    closeModal() {\r\n        _modal.get(this).close();\r\n    }\r\n\r\n    /**\r\n     * @private\r\n     * @param {HTMLDivElement} content\r\n     */\r\n    setupModalContent(content) {\r\n        const form = content.querySelector('form');\r\n        const nameField = content.querySelector('input[name=name]');\r\n        const emailField = content.querySelector('input[name=email]');\r\n        const timeCheckbox = content.querySelector('input[type=checkbox]');\r\n        const timeField = content.querySelector('input[name=time]');\r\n\r\n        //populate the name and email field with what was previously submitted, if applicatable\r\n        nameField.value = _submitter.get(this) ?? '';\r\n        emailField.value = _email.get(this) ?? '';\r\n\r\n        enableFieldByCheckbox(timeField, timeCheckbox);\r\n        timeField.value = padTimeBasedUponDuration(videojs.formatTime, this.player.currentTime(), this.player.duration());\r\n        timeField.setAttribute(\"pattern\", createValidationForTimeString(timeField.value));\r\n\r\n        // When submitButton is clicked, validate and submit\r\n        form.addEventListener('submit', event => {\r\n            event.preventDefault();\r\n            this.handleSubmit();\r\n        });\r\n    }\r\n\r\n    handleSubmit() {\r\n        /** @type {HTMLFormElement} */\r\n        const formEl = _content.get(this).querySelector('form');\r\n        const nameValue = formEl.querySelector('input[name=name]').value;\r\n        const emailValue = formEl.querySelector('input[name=email]').value;\r\n\r\n        //save the name and email for when the form loads again\r\n        _submitter.set(this, nameValue);\r\n        _email.set(this, emailValue);\r\n\r\n        this.disableFormControls();\r\n        const question = {\r\n            Submitter: nameValue,\r\n            SubmitterEmail: emailValue,\r\n            Subject: formEl.querySelector('input[name=subject]').value,\r\n            QuestionText: formEl.querySelector('textarea').value,\r\n            TimeInPresentation: formEl.querySelector('input[type=checkbox]').checked ? getMsFromString(formEl.querySelector('input[name=time]').value) : 0\r\n        };\r\n        sendQuestion(this.player.reporting().playbackTicket, question)\r\n            .then(result => this.handleSubmitComplete(result))\r\n            .catch(error => this.handleSubmitError(error));\r\n    }\r\n\r\n    /**\r\n     * @private\r\n     * @param {object} submitResult\r\n     * @param {boolean} submitResult.Success\r\n     * @param {string} submitResult.Message\r\n     */\r\n    handleSubmitComplete(submitResult) {\r\n        if (submitResult?.Success) {\r\n            alert('Your question has been sent.');\r\n            _modal.get(this).close();\r\n        }\r\n        else if (submitResult?.Message != null) {\r\n            this.handleSubmitErrorMessage(submitResult.Message)\r\n        }\r\n        else {\r\n            this.handleSubmitError()\r\n        }\r\n    }\r\n\r\n    handleSubmitErrorMessage(message) {\r\n        alert(`${message}`)\r\n        this.enableFormControls();\r\n    }\r\n\r\n    handleSubmitError() {\r\n        alert('Error!');\r\n        this.enableFormControls();\r\n    }\r\n\r\n    enableFormControls() {\r\n        const formEl = _content.get(this).querySelector('form');\r\n        for (const el of Array.from(formEl.querySelectorAll('input:not([name=time]), textarea'))) {\r\n            el.disabled = false;\r\n        }\r\n\r\n        const timeCheckbox = formEl.querySelector('input[type=checkbox]');\r\n        const timeField = formEl.querySelector('input[name=time]');\r\n        if (timeCheckbox.checked) {\r\n            timeField.disabled = false;\r\n        }\r\n    }\r\n\r\n    disableFormControls() {\r\n        const formEl = _content.get(this).querySelector('form');\r\n        for (const el of Array.from(formEl.querySelectorAll('input, textarea'))) {\r\n            el.disabled = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the Ask a Question feature is enabled.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.askAQuestion.enabled = true;\r\n     */\r\n    get enabled() {\r\n        return this.player.controlbarMenu().isMenuItemEnabled(this.name);\r\n    }\r\n\r\n    set enabled(enabled) {\r\n        if (enabled) {\r\n            this.player.controlbarMenu().enableMenuItem(this.name);\r\n        }\r\n        else {\r\n            this.player.controlbarMenu().disableMenuItem(this.name);\r\n        }\r\n    }\r\n\r\n    dispose() {\r\n        if (this.player?.usingPlugin('controlbarMenu')) {\r\n            this.player.controlbarMenu().removeMenuItem(this.name);\r\n        }\r\n        \r\n        super.dispose();\r\n    }\r\n}\r\n\r\nexport default AskAQuestionPlugin;\r\n","export default function generateQuestionForm(player) {\r\n    const localize = player.localize?.bind(player);\r\n    const template = `<h2 class=\"ask-a-question-header\">${localize('Ask a Question')}</h2>\r\n<form>\r\n    <p><label>* ${localize('Name')}<br><input name=\"name\" required /></label></p>\r\n    <p><label>${localize('Email')}<br><input type=\"email\" name=\"email\" /></label></p>\r\n    <p><label>* ${localize('Subject')}<br><input name=\"subject\" maxlength=\"' + o.subject.maxLength + '\" required /></label></p>\r\n    <p><label>* ${localize('Message')}<br><textarea name=\"message\" rows=\"8\" cols=\"30\" required></textarea></label></p>\r\n    <p><fieldset class=\"time-fieldset\"><legend class=\"vjs-hidden\">${localize('Time')}</legend><input type=\"checkbox\" name=\"timeCheckbox\" aria-label=\"${localize('Enable Time')}\"/><span>${localize('Time at')}</span><input name=\"time\" pattern=\"^\\\\d\\\\d:[0-5]\\\\d:[0-5]\\\\d$\" aria-label=\"${localize('Time')}\" /></fieldset></p>\r\n    <p><small>* ${localize('Required Field')}</small></p>\r\n    <p class=\"text-align-center\"><input class=\"question-submit-button player-primary-button\" type=\"submit\" value=\"${localize('Submit')}\" /></p>\r\n</form>`;\r\n\r\n    const container = document.createElement('div');\r\n    container.innerHTML = template;\r\n    return container;\r\n}","import videojs from 'video.js';\r\n\r\n/** @type {WeakMap<AudioDescriptionsPlayer, boolean>} */\r\nconst _enabled = new WeakMap();\r\n\r\nconst POOR_SYNC = 0.5; // seconds\r\nconst VERY_BAD_SYNC = 1.0; // seconds\r\nconst SYNC_CORRECTION = 0.1;\r\n\r\nexport default class AudioDescriptionsPlayer extends videojs.getComponent('Component') {\r\n    /**\r\n     * \r\n     * @param {videojs.Player} player\r\n     * @param {any} options\r\n     */\r\n    constructor(player, options) {\r\n        super(player, options);\r\n    }\r\n\r\n    createEl(tag, props = {}, attributes = {}) {\r\n        tag = 'audio';\r\n        props = Object.assign({});\r\n        attributes = Object.assign({});\r\n\r\n        return super.createEl.call(this, tag, props, attributes);\r\n    }\r\n\r\n    /**\r\n     * @type {boolean}\r\n     */\r\n    set enabled(enabled) {\r\n        _enabled.set(this, enabled);\r\n        this.el().muted = !enabled;\r\n        if (enabled) {\r\n            this.el().volume = this.player().volume();\r\n            this.el().muted = this.player().muted();\r\n        }\r\n    }\r\n    \r\n    get enabled() {\r\n        return _enabled.get(this);\r\n    }\r\n\r\n    set src(src) {\r\n        const player = this.player();\r\n\r\n        if (src) {\r\n            this.el().src = src;\r\n\r\n            this.handlePlayerSeeking();\r\n            if (player.paused()) {\r\n                this.el().pause();\r\n            }\r\n            else {\r\n                this.el().play();\r\n            }\r\n\r\n            // Set up event listeners\r\n            this.on(player, 'seeking', this.handlePlayerSeeking);\r\n            this.on(player, 'timeupdate', this.handlePlayerTimeupdate);\r\n            this.on(player, 'playing', this.handlePlayerPlaying);\r\n            this.on(player, 'pause', this.handlePlayerPause);\r\n            this.on(player, 'ratechange', this.handlePlayerRatechange);\r\n            this.on(player, 'volumechange', this.handlePlayerVolumeChange);\r\n        }\r\n        else {\r\n            this.el().pause();\r\n            this.el().removeAttribute('src');\r\n\r\n            this.off(player, 'seeking', this.handlePlayerSeeking);\r\n            this.off(player, 'timeupdate', this.handlePlayerTimeupdate);\r\n            this.off(player, 'playing', this.handlePlayerPlaying);\r\n            this.off(player, 'pause', this.handlePlayerPause);\r\n            this.off(player, 'ratechange', this.handlePlayerRatechange);\r\n            this.off(player, 'volumechange', this.handlePlayerVolumeChange);\r\n        }\r\n    }\r\n\r\n    get src() {\r\n        return this.el().src;\r\n    }\r\n\r\n    /**\r\n     * @param {Event} event\r\n     */\r\n    handlePlayerSeeking(event) {\r\n        this.el().currentTime = this.player().currentTime();\r\n    }\r\n\r\n    /**\r\n     * @param {Event} event\r\n     */\r\n    handlePlayerTimeupdate(event) {\r\n        const playerTime = this.player().currentTime();\r\n        const playerRate = this.player().playbackRate();\r\n        const audioTime = this.el().currentTime;\r\n        const diff = audioTime - playerTime;\r\n\r\n        if (Math.abs(diff) > VERY_BAD_SYNC) {\r\n            this.handlePlayerSeeking();\r\n        }\r\n        else {\r\n            const currentPlaybackRate = this.el().playbackRate;\r\n            let correctedRate = playerRate;\r\n            if (diff > POOR_SYNC) {\r\n                correctedRate = playerRate - SYNC_CORRECTION;\r\n            }\r\n            else if (diff < -POOR_SYNC) {\r\n                correctedRate = playerRate + SYNC_CORRECTION;\r\n            }\r\n\r\n            if (correctedRate !== currentPlaybackRate) {\r\n                this.el().playbackRate = correctedRate;\r\n                this.player().audioDescriptions().log(`Adjusting audio descriptions playback rate: ${correctedRate}`);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @param {Event} event\r\n     */\r\n    handlePlayerPlaying(event) {\r\n        this.el().play();\r\n    }\r\n\r\n    /**\r\n     * @param {Event} event\r\n     */\r\n    handlePlayerPause(event) {\r\n        this.el().pause();\r\n        this.handlePlayerSeeking();\r\n    }\r\n\r\n    /**\r\n     * @param {Event} event\r\n     */\r\n    handlePlayerRatechange(event) {\r\n        this.el().playbackRate = this.player().playbackRate();\r\n    }\r\n\r\n    /**\r\n     * @param {Event} event\r\n     */\r\n    handlePlayerVolumeChange(event) {\r\n        if (_enabled.get(this)) {\r\n            this.el().volume = this.player().volume();\r\n            this.el().muted = this.player().muted();\r\n        }\r\n    }\r\n}\r\n","import videojs from 'video.js';\r\n\r\nimport AudioDescriptionsPlayer from './audio-descriptions/audio-descriptions-player.js';\r\n\r\nconst _audioPlayer = new WeakMap();\r\nlet localize;\r\n\r\n/**\r\n * The AudioDescriptions module.\r\n * @member {AudioDescriptionsPlugin} audioDescriptions\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Configures an audio descriptions track to play along with the main source video. Playback and audio volume are kept in sync with the main source video automatically.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass AudioDescriptionsPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, options);\r\n\r\n        player.ready(() => {\r\n            player.collapsedButtons?.push({\r\n                pluginName: this.name,\r\n                label: localize('Audio Descriptions'),\r\n                buttonName: 'AudioTrackButton',\r\n                class: 'vjs-audio-button'\r\n            });\r\n        });\r\n    }\r\n\r\n    /**\r\n     * The source URL of an audio descriptions file to play along with the main media. If <code>null</code>, the existing audio descriptions track will be removed (if there is one).\r\n     * @type {string}\r\n     * @example\r\n     * player.audioDescriptions.src = '/path/to/audio/file.mp3';\r\n     */\r\n    set src(src) {\r\n        const player = this.player;\r\n        localize = player.localize?.bind(player);\r\n        let audioPlayer = _audioPlayer.get(this);\r\n\r\n        const audioTrackList = player.audioTracks();\r\n        const existingTrack = getAudioDescriptionsTrack(player);\r\n        const mainTrack = getMainTrack(player);\r\n        mainTrack.label = localize('Main');\r\n\r\n        if (src) {\r\n            // Make sure there's an audio player component for the audio descriptions\r\n            if (!audioPlayer) {\r\n                audioPlayer = new AudioDescriptionsPlayer(player);\r\n                audioPlayer.enabled = false;\r\n\r\n                audioTrackList.addEventListener('change', () => {\r\n                    for (let i = 0; i < audioTrackList.length; i++) {\r\n                        if (audioTrackList[i].kind === 'main-desc' && audioTrackList[i].enabled) {\r\n                            audioPlayer.enabled = true;\r\n                        }\r\n                        else {\r\n                            audioPlayer.enabled = false;\r\n                        }\r\n                    }\r\n                });\r\n\r\n                _audioPlayer.set(this, audioPlayer);\r\n                player.addChild(audioPlayer);\r\n            }\r\n\r\n            // Add the track to the player, if it does not already exist\r\n            if (!existingTrack) {\r\n                audioTrackList.addTrack(new videojs.AudioTrack({\r\n                    kind: 'main-desc',\r\n                    label: localize('Audio Descriptions'),\r\n                    language: 'en'\r\n                }));\r\n            }\r\n\r\n            audioPlayer.src = src;\r\n        }\r\n        else {\r\n            removeAudioComponent(player);\r\n            removeAudioDescriptionsTrack(player);\r\n        }\r\n    }\r\n\r\n    get src() {\r\n        return _audioPlayer.get(this)?.src;\r\n    }\r\n\r\n    clear() {\r\n        removeAudioComponent(this.player);\r\n        removeAudioDescriptionsTrack(this.player);\r\n    }\r\n\r\n    dispose() {\r\n        removeAudioComponent(this.player);\r\n        removeAudioDescriptionsTrack(this.player);\r\n\r\n        super.dispose();\r\n    }\r\n}\r\n\r\n/**\r\n * @private\r\n * @param {videojs.Player} player\r\n */\r\nfunction getMainTrack(player) {\r\n    return Array.from(player.audioTracks())\r\n        .find(track => track.kind === 'main');\r\n}\r\n\r\n/**\r\n * @private\r\n * @param {videojs.Player} player\r\n */\r\nfunction getAudioDescriptionsTrack(player) {\r\n    return Array.from(player?.audioTracks() ?? [])\r\n        .find(track => track.kind === 'main-desc');\r\n}\r\n\r\n/**\r\n * @private\r\n * @param {videojs.Player} player\r\n */\r\nfunction removeAudioDescriptionsTrack(player) {\r\n    const audioTrackList = player?.audioTracks();\r\n    const existingTrack = getAudioDescriptionsTrack(player);\r\n\r\n    if (existingTrack) {\r\n        audioTrackList.removeTrack(existingTrack);\r\n\r\n        // Enable the main track so Video.js UI in the ControlBar properly resets\r\n        Array.from(audioTrackList).find(track => track.kind === 'main').enabled = true;\r\n    }\r\n}\r\n\r\n/**\r\n * @private\r\n * @param {videojs.Player} player\r\n */\r\nfunction removeAudioComponent(player) {\r\n    const audioPlayer = _audioPlayer.get(this);\r\n    if (audioPlayer) {\r\n        audioPlayer.src = null;\r\n        player.removeChild(audioPlayer);\r\n        _audioPlayer.delete(this);\r\n    }\r\n}\r\n\r\nexport default AudioDescriptionsPlugin;\r\n","import videojs from 'video.js';\r\n\r\n//TODO: Create message that shows when presentation is audio only, with no video or slide stream shown\r\nexport default class AudioOnlyPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);    \r\n    }\r\n\r\n    hideAudioOnlyVideo() {\r\n            const element = this.player.tech(true).el();\r\n            element.style.left = '0px';\r\n            element.style.top = `0px`;\r\n            element.style.width = `0px`;\r\n            element.style.height = `0.01px`;\r\n    }\r\n}\r\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./background.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\nimport './background.css';\r\n\r\nconst _compositionMap = new WeakMap();\r\nconst _isMultiStream = new WeakMap();\r\nconst _backgroundContainer = new WeakMap();\r\n\r\nconst DEFAULT_COLOR = \"#000000\";\r\n\r\n/**\r\n * The Background module.\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Configures the background for single stream presentations\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n */\r\nclass BackgroundPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        const Component = videojs.getComponent('Component');\r\n        const backgroundComponent = new Component(this.player, { name: 'Background' });        \r\n        backgroundComponent.addClass('mediasite-player__background');\r\n        backgroundComponent.addClass('vjs-hidden');\r\n\r\n        _backgroundContainer.set(this, backgroundComponent);\r\n\r\n        this.player.ready(() => {\r\n            this.player.layout().addChild(backgroundComponent);\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Set the composition map on the background plugin\r\n     * @type {object}\r\n     * @example\r\n     * player.background().compositionMap = {}\r\n     */\r\n    get compositionMap() {\r\n        return _compositionMap.get(this);\r\n    }\r\n\r\n    set compositionMap(map) {\r\n        _compositionMap.set(this, map);\r\n        this.shouldUpdateBackground(map);\r\n    }\r\n\r\n    /**\r\n     * Set whether or not there are more than one stream with this presentation. If so, this plugin will let the multistream plugin handle the background logic instead\r\n     */ \r\n    get isMultiStream() {\r\n        return _isMultiStream.get(this);\r\n    }\r\n\r\n    set isMultiStream(hasMultipleStreams) {\r\n        _isMultiStream.set(this, hasMultipleStreams);\r\n    }\r\n\r\n    shouldUpdateBackground(compositionMap) {\r\n        //don't bother creating a background here if we have multiple stream, let the multistream plugin handle that\r\n        if (this.isMultiStream) {\r\n            return;\r\n        }\r\n\r\n        const composition = compositionMap?.VisualCompositions[0];\r\n        //if the video we're looking already fills the canvas, don't bother adding a background since it wouldn't be seen\r\n        const doesFill = this.doesVisualElementFillCanvas(composition.VisualItems.find(item => item.ZIndex === 1));        \r\n        if (doesFill) {\r\n            return;\r\n        }\r\n\r\n        //grab the background image and color to determine what we should do about them\r\n        const backgroundComposition = composition.VisualItems.find(item => item.ZIndex === 0);\r\n\r\n        let image, color;\r\n        if (backgroundComposition) {\r\n            image = backgroundComposition.SourceId;\r\n        }\r\n\r\n        if (composition.BaseColor) {\r\n            color = composition.BaseColor;\r\n        }    \r\n\r\n        //update the background if we have an image, or a color that isn't the default\r\n        if (image || (color && color != DEFAULT_COLOR)) {\r\n            this.addBackground(image, color);\r\n        }\r\n    }\r\n\r\n    addBackground(backgroundImageUrl, color) {\r\n        const backgroundContainer = _backgroundContainer.get(this);\r\n        backgroundContainer.addChild(this.player.tech(true));\r\n\r\n        backgroundContainer.el().style.setProperty('--background-color', color);\r\n        backgroundContainer.el().style.setProperty('--background-url', `url('${backgroundImageUrl}')`);\r\n\r\n        backgroundContainer.removeClass(\"vjs-hidden\");\r\n    }\r\n\r\n    doesVisualElementFillCanvas(visualElement) {\r\n        if (!visualElement) {\r\n            return false;\r\n        }\r\n        const targetRect = visualElement?.TargetRect;\r\n\r\n        return (targetRect.Height === 1 && targetRect.Width === 1);\r\n    }\r\n\r\n    clear() {\r\n        const backgroundContainer = _backgroundContainer.get(this);\r\n        if (backgroundContainer.hasClass('vjs-hidden')) {\r\n            return;\r\n        }\r\n\r\n        const tech = this.player.tech(true);\r\n        this.player.layout().addChild(tech, {}, 0);\r\n\r\n        backgroundContainer.addClass('vjs-hidden');\r\n    }\r\n\r\n    dispose() {\r\n        this.clear();\r\n        super.dispose();\r\n    }\r\n}\r\n\r\nexport default BackgroundPlugin;\r\n","import videojs from 'video.js';\r\n\r\nexport const BannerBehavior = Object.freeze({\r\n    Disabled: 'Disabled',\r\n    AutoHide: 'AutoHide',\r\n    Static: 'Static'\r\n});\r\n\r\nconst AUTO_HIDE_CLASS = 'mediasite-player__banner-img--auto-hide';\r\n\r\nlet localize;\r\n\r\nexport default class BannerLink extends videojs.getComponent('ClickableComponent') {\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n\r\n        super(player, options);\r\n\r\n        player.ready(() => {\r\n            this.controlText(localize(\"Video banner\"));\r\n        });\r\n    }\r\n\r\n    createEl(tag, props = {}, attributes = {}) {\r\n        tag = 'a';\r\n        props = Object.assign({\r\n            className: `mediasite-player__banner-img ${AUTO_HIDE_CLASS}`\r\n        });\r\n        attributes = Object.assign({\r\n            target: '_blank',\r\n            alt: localize(\"Video banner\")\r\n        });\r\n\r\n        return super.createEl.call(this, tag, props, attributes);\r\n    }\r\n\r\n    get behavior() {\r\n        return this.hasClass(AUTO_HIDE_CLASS) ? BannerBehavior.AutoHide : BannerBehavior.Static;\r\n    }\r\n\r\n    set behavior(behavior) {\r\n        if (behavior === BannerBehavior.AutoHide) {\r\n            this.addClass(AUTO_HIDE_CLASS);\r\n        }\r\n        else if (behavior === BannerBehavior.Static) {\r\n            this.removeClass(AUTO_HIDE_CLASS);\r\n        }\r\n        else if (behavior === BannerBehavior.Disabled) {\r\n        }\r\n        else {\r\n            throw new Error(`Invalid banner image behavior \"${behavior}\".`);\r\n        }\r\n    }\r\n\r\n}\r\n","export function getDominantColor(imageUrl) {\r\n    const image = document.createElement('img'); \r\n    image.setAttribute('src', imageUrl);\r\n\r\n    if (image.width) {\r\n        return Promise.resolve(processLoadedImage(image));\r\n    }\r\n    else {\r\n        return new Promise(resolve => {\r\n            image.addEventListener('load', () => {\r\n                resolve(processLoadedImage(image));\r\n            });\r\n        })\r\n    }\r\n}\r\n\r\nfunction processLoadedImage(image) {\r\n    const imageData = getPixels(image);\r\n\r\n    if (imageData) {\r\n        const sampledPixels  = sampleTopBottomEdges(imageData);\r\n        return simpleAverage(sampledPixels);\r\n    } else {\r\n        return false;\r\n    }\r\n}\r\n\r\nfunction getPixels(img) {\r\n    try {\r\n        const canvas = document.createElement('canvas');\r\n        canvas.width = img.naturalWidth;\r\n        canvas.height = img.naturalHeight;\r\n\r\n        var context = canvas.getContext('2d');\r\n        context.drawImage(img, 0, 0);\r\n\r\n        return context.getImageData(0, 0, canvas.width, canvas.height);\r\n    } catch (e) {\r\n        // probably local file security error\r\n    }\r\n}\r\n\r\nfunction sampleTopBottomEdges (imageData) {\r\n    const pixelsPerEdge = 6;\r\n    const pixels = [];\r\n\r\n    for (let x = 0, max = imageData.width, step = Math.floor(max / pixelsPerEdge); x < max; x += step) {\r\n        pixels.push(getPixel(imageData, x, 0));\r\n        pixels.push(getPixel(imageData, x, imageData.height - 1));\r\n    }\r\n    \r\n    return pixels;\r\n}\r\n\r\nfunction getPixel(imageData, x, y) {\r\n    const start = (y * imageData.width + x) * 4;\r\n    return imageData.data.slice(start, start + 4);\r\n} \r\n\r\nfunction simpleAverage(pixels) {\r\n    let num = 0;\r\n    const sum = [0, 0, 0, 0];\r\n\r\n    for (let i = 0, length = pixels.length; i < length; i++) {\r\n        var pixel = pixels[i];\r\n        if (!pixel[3]) {\r\n            continue;\r\n        };\r\n\r\n        sum[0] += pixel[0];\r\n        sum[1] += pixel[1];\r\n        sum[2] += pixel[2];\r\n        sum[3] += pixel[3];\r\n        num++;\r\n    }\r\n\r\n    if (num) {\r\n        sum[0] /= num;\r\n        sum[1] /= num;\r\n        sum[2] /= num;\r\n        sum[3] /= num;\r\n    }\r\n    sum[3] = sum[3] || 255;\r\n\r\n    return { \r\n        r: sum[0],\r\n        g: sum[1],\r\n        b: sum[2],\r\n        a: sum[3] / 256\r\n    };\r\n};\r\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./banner.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\n\r\nimport BannerLink from './banner/banner-link.js';\r\nimport { getDominantColor } from './banner/get-dominant-color.js';\r\nimport { generateEndedOverlay } from './banner/ended-modal-template.js';\r\n\r\nimport './banner.css';\r\nimport ModalDialog from '../../components/modal-dialog.js';\r\nimport Overlay, { OverlayPosition } from '../../components/overlay.js';\r\n\r\nconst _bannerLink = new WeakMap();\r\nconst _img = new WeakMap();\r\nconst _bannerWidth = new WeakMap();\r\nconst _bannerHeight = new WeakMap();\r\nconst _enabled = new WeakMap();\r\nconst _isLooping = new WeakMap();\r\n\r\nconst _endedEnabled = new WeakMap();\r\nconst _renderIn360 = new WeakMap();\r\nconst _endedModal = new WeakMap();\r\nconst _endedLink = new WeakMap();\r\nconst _endedImg = new WeakMap();\r\nconst _endedText = new WeakMap();\r\nconst _replayButton = new WeakMap();\r\nconst _returnButton = new WeakMap();\r\nlet localize;\r\n\r\n/**\r\n * The Banner module.\r\n * @member {BannerPlugin} banner\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Configures a banner image and link that may be displayed at the top of the player area.<br><br>\r\n * Note: the banner image will only be displayed if {@link BannerPlugin#enabled} is set to <code>true</code>, and {@link BannerPlugin#src} and {@link BannerPlugin#href} have each been set to a non-empty string.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass BannerPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, options);\r\n        _enabled.set(this, false);\r\n        _endedEnabled.set(this, false);\r\n\r\n        player.ready(() => {\r\n            const bannerLink = new BannerLink(player);\r\n\r\n            const img = document.createElement('img');\r\n\r\n            img.setAttribute(\"alt\", localize(\"Video banner\"));\r\n            bannerLink.el().appendChild(img);\r\n            player.layout().addChild(bannerLink);\r\n\r\n            _bannerLink.set(this, bannerLink);\r\n            _img.set(this, img);\r\n\r\n            this.enabled = false;\r\n\r\n            const overlayContents = generateEndedOverlay(player);\r\n            const endedLink = overlayContents.querySelector('a');\r\n            _endedLink.set(this, endedLink);\r\n\r\n            const endedImg = overlayContents.querySelector('img');\r\n            _endedImg.set(this, endedImg);\r\n\r\n            const endedText = overlayContents.querySelector('.vjs-presentation-ended-text');\r\n            _endedText.set(this, endedText);\r\n\r\n            const replayButton = overlayContents.querySelector('.mediasite-player__presentation-ended-replay-button');\r\n            this.on(replayButton, 'click', this.handleClickedReplay);\r\n            _replayButton.set(this, replayButton);\r\n\r\n            const returnButton = overlayContents.querySelector('.mediasite-player__presentation-ended-return-button');\r\n            this.on(returnButton, 'click', this.handleClickedReturn);\r\n            _returnButton.set(this, returnButton);\r\n\r\n            const endedOverlay = new Overlay(player, {\r\n                text: '',\r\n                position: OverlayPosition.Center\r\n            });\r\n\r\n            for (const childEl of Array.from(overlayContents.children)) {\r\n                endedOverlay.el().appendChild(childEl);\r\n            }\r\n\r\n            const endedModal = new ModalDialog(player, {\r\n                content: [endedOverlay.el()],\r\n                solidBackground: false,\r\n                uncloseable: true,\r\n                temporary: false,\r\n                label: localize('Presentation Ended'),\r\n                showPlayerControls: !this.#shouldHideReplay()\r\n            });\r\n            endedModal.addClass('mediasite-player__presentation-ended-modal');\r\n            player.layout().addChild(endedModal);\r\n            _endedModal.set(this, endedModal);\r\n\r\n            this.on(player, 'ended', this.#handlePresentationEnded);\r\n            \r\n        });\r\n    }\r\n\r\n    triggerResize() {\r\n        this.player.trigger('playerresize');\r\n    }\r\n\r\n    updateLayout() {\r\n        const bannerLink = _bannerLink.get(this);\r\n        if (this.src && this.enabled) {\r\n            bannerLink.removeClass('vjs-hidden');\r\n        }\r\n        else {\r\n            bannerLink.addClass('vjs-hidden');\r\n        }\r\n        this.triggerResize();\r\n    }\r\n\r\n    /**\r\n     * The path to an image to display.\r\n     * @type {string}\r\n     * @example\r\n     * player.banner.src = '/path/to/image.jpg';\r\n     */\r\n    get src() {\r\n        return _img.get(this)?.src;\r\n    }\r\n\r\n    set src(src) {\r\n        this.player.ready(() => {\r\n            _img.get(this).src = src;\r\n            this.updateLayout();\r\n        });\r\n    }\r\n\r\n    /**\r\n     * A link to which the banner should point.\r\n     * @type {string}\r\n     * @example\r\n     * player.banner.href = '/path/to/web/page/';\r\n     */\r\n    get href() {\r\n        return _bannerLink.get(this).el().href;\r\n    }\r\n\r\n    set href(href) {\r\n        this.player.ready(() => {\r\n            const bannerEl = _bannerLink.get(this).el();\r\n            if (!href?.length) {\r\n                bannerEl.removeAttribute('href');\r\n                bannerEl.setAttribute('tabindex', -1);\r\n                bannerEl.setAttribute('aria-disabled', true);\r\n            } else {\r\n                bannerEl.href = href;\r\n            }\r\n            this.updateLayout();\r\n        });\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the Banner feature is enabled.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.banner.enabled = true;\r\n     */\r\n    get enabled() {\r\n        return _enabled.get(this);\r\n    }\r\n\r\n    set enabled(enabled) {\r\n        this.player.ready(() => {\r\n            _enabled.set(this, enabled);\r\n            this.updateLayout();\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Configures how the banner is positioned in the layout.\r\n     * @type {'Static'|'AutoHide'}\r\n     * @example\r\n     * player.banner.behavior = 'AutoHide';\r\n     */\r\n    get behavior() {\r\n        return _bannerLink.get(this)?.behavior;\r\n    }\r\n\r\n    set behavior(behavior) {\r\n        this.player.ready(() => {\r\n            _bannerLink.get(this).behavior = behavior;\r\n            this.updateLayout();\r\n        });\r\n        \r\n    }\r\n\r\n    /**\r\n     * The desired display width of the banner.\r\n     * @type {number}\r\n     * @example\r\n     * player.banner.width = 500;\r\n     */\r\n    get width() {\r\n        return parseInt(_bannerWidth.get(this), 10);\r\n    }\r\n\r\n    set width(width) {\r\n        this.player.ready(() => {\r\n            _bannerLink.get(this).el().style.setProperty('--banner-width', width + \"px\");\r\n            _bannerWidth.set(this, width);\r\n            this.triggerResize();\r\n        });\r\n    }\r\n\r\n    /**\r\n     * The desired display height of the banner.\r\n     * @type {number}\r\n     * @example\r\n     * player.banner.height = 100;\r\n     */\r\n    get height() {\r\n        return parseInt(_bannerHeight.get(this), 10);\r\n    }\r\n\r\n    set height(height) {\r\n        this.player.ready(() => {\r\n            _bannerLink.get(this).el().style.setProperty('--banner-height', height + \"px\");\r\n            _bannerHeight.set(this, height);\r\n            this.triggerResize();\r\n        });\r\n    }\r\n\r\n    /** \r\n     * The path to a banner image to display when the presentation has ended.\r\n     * @type {string}\r\n     * @example\r\n     * player.banner.endedSrc = '/path/to/image.jpg';\r\n     */\r\n    get endedSrc() {\r\n        return _endedImg.get(this)?.src;\r\n    }\r\n\r\n    set endedSrc(endedSrc) {\r\n        this.player.ready(() => {\r\n            const endedImg = _endedImg.get(this);\r\n            const endedText = _endedText.get(this);\r\n            if (endedSrc) {\r\n                endedImg.src = endedSrc;\r\n                endedImg.style.display = \"block\";\r\n                endedText.style.display = \"none\";\r\n\r\n                getDominantColor(endedSrc).then(color => {\r\n                    const endedModal = _endedModal.get(this);\r\n                    endedModal.el().style.setProperty('--ended-banner-bg-color', `rgba(${color.r}, ${color.g}, ${color.b}, ${color.a})`);\r\n                });\r\n            }\r\n            else {\r\n                endedImg.removeAttribute('src');\r\n                endedImg.style.display = \"none\";\r\n                endedText.style.display = \"block\";\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * A URL to use as a link for the Presentation Ended banner image, if present.\r\n     * @type {string}\r\n     * @example\r\n     * player.banner.endedHref = '/path/to/web/page';\r\n     */\r\n    get endedHref() {\r\n        return _endedLink.get(this)?.href;\r\n    }\r\n\r\n    set endedHref(endedHref) {\r\n        this.player.ready(() => {\r\n            const endedLink = _endedLink.get(this);\r\n            if (endedHref) {\r\n                endedLink.href = endedHref;\r\n            }\r\n            else {\r\n                endedLink.removeAttribute('href');\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * The desired display width of the Presentation Ended banner.\r\n     * @type {number}\r\n     * @example\r\n     * player.banner.endedWidth = 500;\r\n     */\r\n    get endedWidth() {\r\n        const endedImg = _endedImg.get(this);\r\n        return endedImg ? parseInt(endedImg.width, 10) : 0;\r\n    }\r\n\r\n    set endedWidth(endedWidth) {\r\n        this.player.ready(() => {\r\n            const endedImg = _endedImg.get(this);\r\n            endedImg.width = endedWidth;\r\n            _endedModal.get(this).el().style.setProperty('--ended-banner-width', `${endedWidth}px`);\r\n        });\r\n    }\r\n\r\n    /**\r\n     * The desired display height of the Presentation Ended banner.\r\n     * @type {number}\r\n     * @example\r\n     * player.banner.endedHeight = 100;\r\n     */\r\n    get endedHeight() {\r\n        const endedImg = _endedImg.get(this);\r\n        return endedImg ? parseInt(endedImg.height, 10) : 0;\r\n    }\r\n\r\n    set endedHeight(endedHeight) {\r\n        this.player.ready(() => {\r\n            const endedImg = _endedImg.get(this);\r\n            endedImg.height = endedHeight;\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Whether or not to show the \"Presentation Ended\" banner at the end of the presentation.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.banner.endedEnabled = true;\r\n     */\r\n    get endedEnabled() {\r\n        return _endedEnabled.get(this);\r\n    }\r\n\r\n    set endedEnabled(endedEnabled) {\r\n        _endedEnabled.set(this, endedEnabled);\r\n\r\n        if (endedEnabled && this.player.currentTime() === this.player.duration()) {\r\n            this.#handlePresentationEnded();\r\n        }\r\n        else {\r\n            const endedModal = _endedModal.get(this);\r\n            if (endedModal?.opened()) {\r\n                endedModal.close();\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n    * A boolean indicating whether or not we should render in XR or not\r\n    * @type {boolean}\r\n    * @example\r\n    * player.banner.renderIn360 = true;\r\n    */\r\n    get renderIn360() {\r\n        return _renderIn360.get(this);\r\n    }\r\n\r\n    set renderIn360(renderIn360) {\r\n        _renderIn360.set(this, renderIn360);\r\n    }\r\n\r\n    /**\r\n     * Whether or not we immediately restart the presentation when we hit the end of the presentation.\r\n     * Done this way, rather than setting the element itself, to better work with our other plugins\r\n     */ \r\n    get isLooping() {\r\n        return _isLooping.get(this);\r\n    }\r\n\r\n    set isLooping(loop) {\r\n        _isLooping.set(this, loop);\r\n    }\r\n\r\n    #handlePresentationEnded() {\r\n        if (this.player.error()) {\r\n            //if it is a live presentation and there is an error, the live plugin will determine whether it is actually\r\n            //the end of the presentation or an error, so we shouldn't display a false presentation ended message\r\n            return\r\n        }\r\n        //if we're looping, don't show the modal, but rather return back to the start of the presentation\r\n        if (_isLooping.get(this)) {\r\n            this.restartPresentation();\r\n            return;\r\n        }\r\n\r\n        //if the playlist has another presentation, let it render its own modal, rather than the presentation ended modal\r\n        const isUsingPlaylist = this.player.usingPlugin('playlist');\r\n        if (isUsingPlaylist && this.player.playlist().isAutoPlaying()) {\r\n            return;\r\n        }\r\n\r\n        const endedModal = _endedModal.get(this);\r\n        //if (this.endedEnabled && this.endedSrc && !endedModal.opened?.()) {\r\n        if (this.endedEnabled && !endedModal.opened?.()) {\r\n            if (_renderIn360.get(this)) {\r\n                let modalBtns = [];\r\n                if (!this.#shouldHideReplay()) {\r\n                    modalBtns.push({\r\n                        text: localize(\"Replay\"),\r\n                        icon: \"0xf116\",\r\n                        action: this.handleClickedReplay.bind(this)\r\n                    });\r\n                }\r\n\r\n                if (!this.#shouldHideReturnToPrevious()) {\r\n                    modalBtns.push({\r\n                        text: localize(\"Back to Previous\"),\r\n                        icon: \"0xf120\",\r\n                        action: this.handleClickedReturn.bind(this)\r\n                    });\r\n                }\r\n\r\n                this.player.video360?.().displayModal(\"Presentation Ended\", modalBtns);\r\n\r\n                this.one(this.player, 'timeupdate', function () {\r\n                    this.player.video360?.().removeModal();\r\n                });\r\n            } else {\r\n                const replayButton = _replayButton.get(this);\r\n                const hideReplay = this.#shouldHideReplay();\r\n                this.#toggleDisplayBtn(replayButton, hideReplay);\r\n\r\n                const returnButton = _returnButton.get(this);\r\n                const hideReturn = this.#shouldHideReturnToPrevious();\r\n                this.#toggleDisplayBtn(returnButton, hideReturn);\r\n\r\n                endedModal.open();\r\n\r\n                this.one(this.player, 'timeupdate', function () {\r\n                    endedModal.close();\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    #toggleDisplayBtn(button, isHidden) {\r\n        if (isHidden) {\r\n            button.classList.add('vjs-hidden');\r\n        } else {\r\n            button.classList.remove('vjs-hidden');\r\n        }\r\n    }\r\n\r\n    #shouldHideReplay() {\r\n        return this.player.usingPlugin('live') || this.player.usingPlugin('guided');\r\n    }\r\n\r\n    #shouldHideReturnToPrevious() {\r\n        //if we're still in the orginial presentation, no need to have an option to return to it \r\n        const isOrginal = this.player.loader().isCurrentPresentationOriginal();\r\n\r\n        if (isOrginal) {\r\n            return true;\r\n        }\r\n\r\n        //if we're using the playlist plugin, ask it if the current presentation is in the playlist\r\n        if (videojs.getPlugin(\"playlist\")) {\r\n            const currentPresentationId = this.player.loader().presentationId;\r\n            const inPlaylist = this.player.playlist().isInPlaylist(currentPresentationId);\r\n\r\n            return inPlaylist;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    handleClickedReturn() {\r\n        this.player.loader().loadPreviousPresentation();\r\n    }\r\n\r\n    handleClickedReplay() {\r\n        if (_renderIn360.get(this)) {\r\n            this.player.video360?.().removeModal();\r\n        } else {\r\n            _endedModal.get(this)?.close();\r\n        }\r\n        \r\n        this.restartPresentation();\r\n    }\r\n\r\n    restartPresentation() {\r\n        this.player.currentTime(0);\r\n        this.player.one('timeupdate', () => {\r\n            this.player.play();\r\n        });\r\n    }\r\n\r\n    dispose() {\r\n        const bannerLink = _bannerLink.get(this);\r\n        const endedModal = _endedModal.get(this);\r\n        this.player.layout().removeChild(bannerLink);\r\n        this.player.layout().removeChild(endedModal);\r\n    }\r\n}\r\n\r\nexport default BannerPlugin;\r\n","export function generateEndedOverlay(player) {\r\n    const localize = player.localize?.bind(player);\r\n    const template =  `<div>\r\n        <a target=\"_blank\">\r\n            <img class=\"vjs-presentation-ended-image\" alt=\"${localize('Presentation Ended')}\" width=\"520\" height=\"70\">\r\n            <div aria-hidden=\"true\" class=\"vjs-presentation-ended-text\">${localize('Presentation Ended')}</div>\r\n        </a>\r\n        <div class=\"mediasite-player__presentation-ended-replay-holder\">\r\n            <button type=\"button\" class=\"mediasite-player__presentation-ended-replay-button\">\r\n                <span aria-hidden=\"true\" class=\"vjs-icon-replay\"></span>\r\n                <span>${localize('Replay')}</span>\r\n            </button>\r\n            <button type=\"button\" class=\"mediasite-player__presentation-ended-return-button\">\r\n                <span aria-hidden=\"true\" class=\"vjs-icon-previous-item\"></span>\r\n                <span>${localize('Back to Previous')}</span>\r\n            </button>\r\n        </div>\r\n    </div>`;\r\n\r\n    const element = document.createElement('div');\r\n    element.innerHTML = template;\r\n    return element.firstElementChild;\r\n}","/**\r\n* Checks to make sure window.localStorage is available.  localStorage throws an exception (it does not show up as null or undefined)\r\n*  when (third party) cookies are disabled.  Perform this check whenever localStorage needs to be accessed.\r\n*/\r\nexport function localStorageAvailable() {\r\n    try {\r\n        window.localStorage.setItem('test', 0);\r\n        window.localStorage.removeItem('test');\r\n        return true;\r\n    } catch {\r\n        return false;\r\n    }\r\n}","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./captions.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\nimport { makeVTT } from './captions/make-vtt.js';\r\nimport './captions.css';\r\nimport { localStorageAvailable } from '../../util';\r\n\r\nconst SETTINGS_KEY = 'mediasite-player-captions-track';\r\nconst _initialTrack = new WeakMap();\r\nconst _enabled = new WeakMap();\r\nconst _languageStrings = new WeakMap();\r\nlet localize;\r\n\r\n/**\r\n * The Captions module.\r\n * @member {CaptionsPlugin} captions\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Configures closed captions that may be displayed during playback.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass CaptionsPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, options);\r\n\r\n        this.languageStrings = [];\r\n        _enabled.set(this, true);\r\n        if (localStorageAvailable()) {\r\n            this.initialTrackLanguage = localStorage[SETTINGS_KEY];\r\n        }\r\n\r\n        player.ready(() => {\r\n            this.#updateControlBarButtonVisibility();\r\n            this.on(player, ['useractive', 'userinactive'], this.#handleUserActiveChange);\r\n            this.on(player, 'texttrackchange', this.#handleTextTrackChange);\r\n\r\n            player.collapsedButtons?.push({\r\n                pluginName: this.name,\r\n                label: localize('Captions'),\r\n                buttonName: 'SubsCapsButton',\r\n                class: 'vjs-subs-caps-button'\r\n            });\r\n        });\r\n    }\r\n\r\n    /**\r\n    * Sets a list of captions that should be available to the user in the player UI.\r\n    * @param {string} language The language code for the provided captions.\r\n    * @param {string} label A label to use in the UI for this set of captions.\r\n    * @param {string} captionsUrl A url to a vtt file stream\r\n    * @example\r\n    * player.captions.set('en', 'English', 'https:/dev-machine.sonicfoundry.net/Mediasite/streams/FileServer/Presentation/PresentationId/captions_languageCode.vtt?playbackTicket=ticketId');\r\n    */\r\n    set(language, label, captionsUrl, detailedLanguage) {\r\n        const tracks = this.player.textTracks();\r\n        const initialTrackLanguage = this.initialTrackLanguage;\r\n\r\n        for (let i = 0; i < tracks.length; i++) {\r\n            if (tracks[i].language === language && tracks[i].kind === 'captions') {\r\n                const oldTrack = tracks[i];\r\n                this.off(oldTrack, ['cuechange', 'modechange'], this.#handleCaptionChange);\r\n                this.player.removeRemoteTextTrack(oldTrack);\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (captionsUrl) {\r\n            const track = this.player.addRemoteTextTrack({\r\n                src: captionsUrl,\r\n                kind: 'captions',\r\n                label: label ?? language,\r\n                language: language,\r\n                mode: 'disabled'\r\n            });\r\n\r\n            this.languageStrings.push(detailedLanguage);\r\n\r\n            this.on(track, ['cuechange', 'modechange'], this.#handleCaptionChange);\r\n        }\r\n    }\r\n\r\n    /**\r\n    * Gets the list of captions that are available for the given language.\r\n    * If no language is passed, returns the list of active captions\r\n    * @param {string} language The language code of the captions to be retrieved.\r\n    * @returns {VTTCue[]}\r\n    * @example\r\n    * const englishCaptions = player.captions.get('en');\r\n    */\r\n    get(language) {\r\n        const tracks = this.player.textTracks();\r\n        const captions = [];\r\n\r\n        // Check for active caption language if no language passed to get\r\n        if (language == null) {\r\n            language = Array.from(tracks).find(track => track.mode === 'showing')?.language;\r\n        }\r\n\r\n        for (let i = 0; i < tracks.length; i++) {\r\n            if (tracks[i].language === language && tracks[i].kind === 'captions') {\r\n                captions.push(...Array.from(tracks[i].cues ?? []));\r\n                break;\r\n            }\r\n        }\r\n        return captions;\r\n    }\r\n\r\n    /**\r\n    * Gets the currently selected caption language\r\n    * @param {bool} detailed Whether to return the detailedLanguage string\r\n    * @returns {string}\r\n    * @example\r\n    * const captionsLang = player.captions.getSelectedLanguage();\r\n    */\r\n    getSelectedLanguage(detailed) {\r\n        const tracks = this.player.textTracks();\r\n        const activeTrack = Array.from(tracks).find(track => track.mode === 'showing');\r\n\r\n        if (detailed) {\r\n            return this.languageStrings.find(function (val) {\r\n                return activeTrack?.language && val.startsWith(activeTrack?.language);\r\n            });\r\n        }\r\n\r\n        return activeTrack?.language;\r\n    }\r\n\r\n    /**\r\n     * Returns an array containing VTTCue objects for the captions that apply to the current playback time, if any.\r\n     * @param {string} language\r\n     * @returns {VTTCue[]}\r\n     * @example\r\n     * const currentlyDisplayedCaptions = player.captions.getCurrentCaptions('en');\r\n     */\r\n    getCurrentCaptions(language) {\r\n        const captions = [];\r\n\r\n        if (language !== null) {\r\n            const tracks = Array.from(this.player.textTracks()).filter(track => track.kind === 'captions');\r\n            const languageToCheck = language || tracks[0]?.language; // Fall back to the first language if nothing is passed\r\n\r\n            for (const track of Array.from(tracks)) {\r\n                if (track.language === languageToCheck) {\r\n                    if (track.activeCues) {\r\n                        captions.push(...Array.from(track.activeCues));\r\n                    }                    \r\n                }\r\n            }\r\n        }\r\n        \r\n        return captions;\r\n    }\r\n\r\n    /**\r\n     * Returns the TextTrack that corresponds to a given language\r\n     */\r\n    getCaptionTrack(language) {\r\n        if (language == null) {\r\n            return;\r\n        }\r\n        const tracks = this.player.textTracks();\r\n        let captionTrack;\r\n        for (let i = 0; i < tracks.length; i++) {\r\n            if (tracks[i].kind === 'captions' && tracks[i].language === language) {\r\n                captionTrack = tracks[i];\r\n            }\r\n        }\r\n\r\n        return captionTrack;\r\n    }\r\n\r\n    /**\r\n     * Returns the TextTracks that correspond to the captions\r\n     */\r\n    getAllCaptionTracks() {\r\n        const tracks = this.player.textTracks();\r\n        const captionTracks = [];\r\n        for (let i = 0; i < tracks.length; i++) {\r\n            if (tracks[i].kind === 'captions') {\r\n                captionTracks.push(tracks[i]);\r\n            }\r\n        }\r\n\r\n        return captionTracks;\r\n    }\r\n\r\n    /**\r\n     * Used to toggle the captions either on or off. Currently used in the hot keys \r\n    */\r\n    toggleCaptions() {\r\n        this.visible = !this.visible;\r\n    }\r\n\r\n    /**\r\n     * The language of the captions track that should be showing. When this value is a string (for example, <code>'en'</code>), the track with the matching language will be shown. If this value is <code>true</code>, the first available track (if any) will be shown.\r\n     * @type {?(string|boolean)}\r\n     * @example <caption>Showing English captions (if available).</caption>\r\n     * player.captions.visible = 'en';\r\n     */\r\n    set visible(language) {\r\n        const tracks = Array.from(this.player.textTracks()).filter(track => track.kind === 'captions');\r\n\r\n        let found = false;\r\n        for (const track of tracks) {\r\n            if (track.language === language || (language === true && !found)) {\r\n                track.mode = 'showing';\r\n                found = true;\r\n            }\r\n            else {\r\n                track.mode = 'hidden';\r\n            }\r\n        }\r\n    }\r\n\r\n    get visible() {\r\n        const tracks = Array.from(this.player.textTracks());\r\n        return tracks.find(track => {\r\n            return track.mode === 'showing';\r\n        })?.language ?? null;\r\n    }\r\n\r\n    /**\r\n     * Whether or not to enable the captions UI.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.captions.enabled = true;\r\n     */\r\n    get enabled() {\r\n        return _enabled.get(this);\r\n    }\r\n\r\n    set enabled(enabled) {\r\n        _enabled.set(this, enabled);\r\n        this.#updateControlBarButtonVisibility();\r\n    }\r\n\r\n\r\n    /**\r\n     * What caption text track language should load if any.\r\n     * @type {string}\r\n     * @example\r\n     * player.captions.initialTrackLanguage = \"en-US\";\r\n     */\r\n    get initialTrackLanguage() {\r\n        return _initialTrack.get(this);\r\n    }\r\n\r\n    set initialTrackLanguage(track) {\r\n        _initialTrack.set(this, track);\r\n    }\r\n    /**\r\n     * Array of full language descriptors with locale.\r\n     * @type {string[]}\r\n     * @example\r\n     * player.captions.languageStrings = [ \"en-US\" ];\r\n     */\r\n    get languageStrings() {\r\n        return _languageStrings.get(this);\r\n    }\r\n\r\n    set languageStrings(lang) {\r\n        _languageStrings.set(this, lang);\r\n    }\r\n\r\n    #updateControlBarButtonVisibility() {\r\n        const subsCapsButton = this.player.getDescendant('ControlBar', 'SubsCapsButton');\r\n        const hasCaptionTracks = Array.from(this.player.textTracks()).filter(track => track.kind === 'captions').length > 0;\r\n        const hasLiveCaptions = this.player.usingPlugin('live') && this.player.live().liveCaptions;\r\n\r\n        if (_enabled.get(this) && (hasCaptionTracks || hasLiveCaptions)) {\r\n            subsCapsButton.removeClass('vjs-hidden');\r\n        }\r\n        else {\r\n            subsCapsButton.addClass('vjs-hidden');\r\n        }\r\n    }\r\n\r\n    #handleCaptionChange() {\r\n        const currentCaptions = this.getCurrentCaptions(this.visible);\r\n        this.player.trigger('captionchanged', currentCaptions);\r\n    }\r\n\r\n    #handleUserActiveChange() {\r\n        this.player.getChild('TextTrackDisplay').updateDisplay();\r\n    }\r\n\r\n    #handleTextTrackChange() {\r\n        const captionTracks = Array.from(this.player.textTracks()).filter(track => track.kind === 'captions');\r\n        if (captionTracks.length > 0) {\r\n            const currentTrack = captionTracks.find(track => track.mode === 'showing');\r\n            //if the caption track exists and has changed, the captions have changed\r\n            this.#handleCaptionChange();\r\n            if (localStorageAvailable()) {\r\n                localStorage[SETTINGS_KEY] = currentTrack?.language;\r\n            }\r\n        }\r\n    }\r\n\r\n    clear() {\r\n        const captionTracks = this.getAllCaptionTracks();\r\n\r\n        captionTracks.forEach((track) => {\r\n            this.player.removeRemoteTextTrack(track);\r\n        })\r\n        \r\n        this.enabled = false;\r\n    }\r\n\r\n    dispose() {\r\n        this.off(this.player, ['useractive', 'userinactive'], this.#handleUserActiveChange);\r\n        this.off(this.player, 'texttrackchange', this.#handleTextTrackChange);\r\n        super.dispose();\r\n    }\r\n}\r\n\r\nexport default CaptionsPlugin;\r\n","import videojs from 'video.js';\r\nimport './captions-settings.css';\r\nimport { localStorageAvailable } from '../../util';\r\n\r\nlet localize;\r\n\r\nclass CaptionsSettingsPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, options);\r\n\r\n        //when the player is ready, modify the DOM to match the new design for the caption settings\r\n        player.ready(() => {\r\n            //an object of partial id selectors paired with the value of what we want it to say\r\n            //example: label id='captions-foreground-opacity-vjs_video_3_component_959' will then say localize(\"Text Opacity\")\r\n            const captionOptionLabels = {\r\n                'captions-foreground-color': localize(\"Text Color\"),\r\n                'captions-foreground-opacity': localize(\"Text Opacity\"),\r\n                'captions-background-color': localize(\"Background Color\"),\r\n                'captions-background-opacity': localize(\"Background Opacity\"),\r\n                'captions-window-color': localize(\"Window Color\"),\r\n                'captions-window-opacity': localize(\"Window Opacity\")\r\n            };\r\n            \r\n            const captionOptionsParent = document.querySelector(\".vjs-modal-dialog.vjs-text-track-settings > .vjs-modal-dialog-content\"); \r\n\r\n            if (captionOptionsParent) {\r\n                let captionHeader = document.createElement(\"h2\");\r\n                captionHeader.innerText = localize(\"Caption Settings\");\r\n                captionOptionsParent.prepend(captionHeader);\r\n                const captionOptions = captionOptionsParent.querySelectorAll(\"fieldset.vjs-track-setting\");\r\n\r\n                for (let caption of captionOptions) {\r\n                   this.#setupOptionDropdowns(caption);\r\n                }\r\n\r\n                //grab the label that corresponds with the option and set its text to be whatever the value is in captionOptionLabels\r\n                for (const [captionLabelSelector, captionLabelWording] of Object.entries(captionOptionLabels)) {\r\n                    let targetCaption = captionOptionsParent.querySelector(`label[id*=${captionLabelSelector}]`);\r\n                    if (targetCaption) {\r\n                        targetCaption.innerText = captionLabelWording;\r\n                    }\r\n                }\r\n\r\n                const captionCloseBtn = document.querySelector(\".vjs-modal-dialog.vjs-text-track-settings .vjs-done-button\");\r\n                captionCloseBtn.classList.add(\"player-primary-button\");\r\n                captionCloseBtn.innerText = localize(\"Update\");\r\n\r\n                //move the reset button to the bottom of its parent so that it is now the bottom button for screen readers\r\n                captionCloseBtn.parentNode.prepend(captionCloseBtn);\r\n            }\r\n\r\n            //add custom fonts to the font dropdown\r\n            this.addFont(\"OpenDyslexic\", \"opendyslexic\");\r\n        });\r\n\r\n        player.on(\"presentationloaded\", () => {\r\n            this.addHeaderToDropdown(localize(\"Captions\"));\r\n        });\r\n    }\r\n\r\n    //Adds a header to the captions selection dropdown, since one does not come by default\r\n    addHeaderToDropdown(headerText) {\r\n        const captionsDropdown = document.querySelector(\".vjs-subs-caps-button > .vjs-menu .vjs-menu-content\");\r\n        const captionsHeader = document.createElement(\"li\");\r\n        captionsHeader.textContent = headerText;\r\n        captionsHeader.classList.add(\"vjs-menu-title\");\r\n        captionsHeader.tabIndex = -1;\r\n\r\n        captionsDropdown.prepend(captionsHeader);\r\n    }\r\n\r\n    /**\r\n     * Displays a new font option based upon first parameter and adds a class based upon the second parameter (font-{fontClass}).\r\n     * @param {string} fontDisplay\r\n     * @param {string} fontClass\r\n     */\r\n    addFont(fontDisplay, fontClass) {\r\n        const newFontOption = this.#createFontOption(fontDisplay, fontClass);\r\n\r\n        //adds the new option to the caption font dropdown\r\n        const fontMenuDropdown = document.querySelector(\".vjs-font-family.vjs-track-setting select\");\r\n        fontMenuDropdown.add(newFontOption);   \r\n\r\n        //adds a class to the 'vjs-text-track-display' element if the user previously selected that font\r\n        const textTrackCue = document.querySelector('.vjs-text-track-display');\r\n        let _localStorage = localStorageAvailable() ? localStorage : null;\r\n\r\n        let currentCustomFont = _localStorage?.getItem('custom-text-track-settings');\r\n\r\n        //sets the added font option as the active font option if selected previously\r\n        if (currentCustomFont != null) {\r\n            textTrackCue.classList.add(this.#generateFontClass(currentCustomFont));\r\n           \r\n            //set the active option to whatever was selected in our local storage            \r\n            for (let i = 0; i < fontMenuDropdown.options.length; i++) {\r\n                if (fontMenuDropdown.options[i].getAttribute('data-font') === currentCustomFont) {\r\n                    fontMenuDropdown.selectedIndex = i;\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        \r\n        //whenever the font dropdown changes, we need to update the class added to the 'vjs-text-track-display' element\r\n        fontMenuDropdown.addEventListener('change', (event) => {\r\n            //remove the previously added font class, if applicable\r\n            if (currentCustomFont != null) {\r\n                textTrackCue.classList.remove(this.#generateFontClass(currentCustomFont));\r\n            }\r\n\r\n            //if the new option is a custom option, add a class and update local storage. If not, clear out the old value\r\n            const updatedFont = event.target.selectedOptions[0].getAttribute('data-font');\r\n            if (updatedFont != null) {\r\n                textTrackCue.classList.add(this.#generateFontClass(updatedFont));\r\n                _localStorage?.setItem('custom-text-track-settings', updatedFont);\r\n            } else {\r\n                _localStorage?.removeItem('custom-text-track-settings');\r\n            }\r\n\r\n            currentCustomFont = updatedFont;\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Creates a new option element that's formatted with the arguments provided.\r\n     * @param {any} fontDisplay\r\n     * @param {any} fontClass\r\n     */\r\n    #createFontOption(fontDisplay, fontClass) {\r\n        const newFontOption = document.createElement(\"option\");\r\n        newFontOption.textContent = localize(fontDisplay);\r\n        newFontOption.setAttribute('value', 'default');\r\n        newFontOption.setAttribute('data-font', fontClass);\r\n        return newFontOption;\r\n    }\r\n\r\n    #generateFontClass(fontName) {\r\n        return `font-${fontName}`;\r\n    }\r\n\r\n    /* \r\n     * The structure of some of the caption options are the following\r\n     * <fieldset>\r\n     *  <legend>Visible Title</legend>\r\n     *  <label>Hidden Label</label>\r\n     *  <select></select>\r\n     *  <span>\r\n     *      <label>Hidden Label</label>\r\n     *      <select></select>\r\n     *  </span>\r\n     * </fieldset>\r\n     * \r\n     * The goal is to hide the legend and instead make the labels be visual. To best make this work, we need to move the first select and label\r\n     * to make them not direct children of the fieldset\r\n     * \r\n     * <fieldset>\r\n     *  <legend class=\"hidden\">Hidden Title</legend>\r\n     *  <span>\r\n     *      <label>Visible Label</label>\r\n     *      <select></select>\r\n     *  </span>\r\n     *  <span>\r\n     *      <label>Visible Label</label>\r\n     *      <select></select>\r\n     *  </span>\r\n     * </fieldset>\r\n     */\r\n    #setupOptionDropdowns(fieldsetEl) {\r\n        //if there's more than one select, move element around. See method description\r\n        if (fieldsetEl.querySelectorAll(\"select\").length > 1) {\r\n\r\n            //find and create the elements needed for the restructuring \r\n            let fieldsetLegend = fieldsetEl.querySelector(\"legend\");\r\n            let firstLabel = fieldsetEl.querySelector(\"legend + label\");\r\n            let firstSelect = fieldsetEl.querySelector(\"legend + label + select\");\r\n            let span = document.createElement(\"span\");\r\n\r\n            //move and hide the legend from being seen\r\n            fieldsetLegend.classList.add(\"vjs-hidden\");\r\n            fieldsetLegend.after(span);\r\n\r\n            //due to the query the reset function uses to find the select for each caption option\r\n            //the select will need to have the same class list for its parent after moving\r\n            span.classList = fieldsetEl.classList;\r\n\r\n            //move the select and label to be children of the span we made            \r\n            span.appendChild(firstLabel);\r\n            span.appendChild(firstSelect);\r\n        }\r\n\r\n    }\r\n}\r\n\r\nexport default CaptionsSettingsPlugin;","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./captions-settings.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\n\r\nconst _chaptersTrack = new WeakMap();\r\nconst _enabled = new WeakMap();\r\nconst _showChapterList = new WeakMap();\r\n\r\nlet localize;\r\n\r\n/**\r\n * The Chapters module.\r\n * @member {ChaptersPlugin} chapters\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Configures a list of chapters that will be available to the user in the UI.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass ChaptersPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, options);\r\n\r\n        const track = new videojs.TextTrack({\r\n            tech: player,\r\n            kind: 'chapters',\r\n            label: localize('Chapters'),\r\n            language: 'en',\r\n            default: true\r\n        });\r\n        this.on(track, 'cuechange', this.#handleChapterChange);\r\n        _chaptersTrack.set(this, track);\r\n\r\n        const tracks = this.player.textTracks();\r\n        tracks.addTrack(track);\r\n\r\n        player.ready(() => {\r\n            player.collapsedButtons?.push({\r\n                pluginName: this.name,\r\n                label: localize('Chapters'),\r\n                buttonName: 'ChaptersButton',\r\n                class: 'vjs-chapters-button'\r\n            });\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Adds the given chapter to the player and returns its ID.\r\n     * @param {VTTCue} chapter\r\n     * @returns {string}\r\n     * @example\r\n     * player.chapters.add(new VTTCue(10, 20, 'A chapter that starts at 10 seconds and ends at 20 seconds.'));\r\n     */\r\n    add(chapter) {\r\n        const track = _chaptersTrack.get(this);\r\n        track.addCue(chapter);\r\n\r\n        const ChaptersTrackMenuItem = videojs.getComponent('ChaptersTrackMenuItem');\r\n        const menuItem = new ChaptersTrackMenuItem(this.player, { track, cue: chapter });\r\n        const chaptersButton = this.player.getDescendant('ControlBar', 'ChaptersButton');\r\n        chaptersButton.menu.addItem(menuItem);\r\n\r\n        this.player.seekBarSegments().add({\r\n            id: chapter.id,\r\n            startTime: chapter.startTime,\r\n            endTime: chapter.endTime,\r\n            label: chapter.text,\r\n            progress: true\r\n        });\r\n\r\n        this.#updateVisibility();\r\n\r\n        return chapter.id;\r\n    }\r\n\r\n    /**\r\n     * Removes the chapter with the given ID from the player.\r\n     * @param {string} id\r\n     * @example\r\n     * player.chapters.remove('chapterId');\r\n     */\r\n    remove(id) {\r\n        const track = _chaptersTrack.get(this);\r\n        const chaptersButton = this.player.getDescendant('ControlBar', 'ChaptersButton');\r\n\r\n        for (const cue of Array.from(track.cues)) {\r\n            if (cue.id === id) {\r\n                const menuItem = chaptersButton.menu.children().find(item => item.cue?.id === id);\r\n                chaptersButton.menu.removeChild(menuItem);\r\n                track.removeCue(cue);\r\n                break;\r\n            }\r\n        }\r\n\r\n        this.player.seekBarSegments().remove(id);\r\n\r\n        this.#updateVisibility();\r\n    }\r\n\r\n    /**\r\n     * Gets the chapter with the given ID.\r\n     * @param {string} id\r\n     * @returns {VTTCue}\r\n     * @example\r\n     * const chapterCue = player.chapters.get('chapterId');\r\n     */\r\n    get(id) {\r\n        const track = _chaptersTrack.get(this);\r\n        return Array.from(track.cues).find(cue => cue.id === id) ?? null;\r\n    }\r\n\r\n    /**\r\n     * Gets an array containing all available chapters.\r\n     * @returns {VTTCue[]}\r\n     * @example\r\n     * const allChapters = player.chapters.getAll();\r\n     **/\r\n    getAll() {\r\n        const track = _chaptersTrack.get(this);\r\n        return Array.from(track.cues);\r\n    }\r\n\r\n    /**\r\n     * Called by the hotkey, this presses the chapters button so that the list of chapters is displayed and the focus is within it\r\n     */\r\n    toggleChaptersButton() {\r\n        const chaptersButton = this.player.getDescendant('ControlBar', 'ChaptersButton');\r\n        chaptersButton.pressButton();\r\n    }\r\n\r\n    #handleChapterChange() {\r\n        const track = _chaptersTrack.get(this);\r\n        const currentChapter = track.activeCues[0] ?? null;\r\n        this.player.trigger('chapterchanged', currentChapter);\r\n    }\r\n\r\n    #updateVisibility() {\r\n        const enabled = _enabled.get(this);\r\n        const track = _chaptersTrack.get(this);\r\n        const cues = Array.from(track.cues);\r\n\r\n        // Logic for hidiing or showing chapters button and timeline markers\r\n        if (enabled && cues.length > 0) {\r\n            //if seeking is disabled, hide the option to select a chapter, but still display the chapter segments\r\n            const showChapterList = _showChapterList.get(this);\r\n            \r\n            this.#setVisiblityofChapterButton(showChapterList);\r\n            for (const { id } of cues) {\r\n                this.player.seekBarSegments().update(id, {});\r\n            }\r\n            this.#updateTimeTooltip();\r\n        }\r\n        else {\r\n            // Hide chapters button and timeline markers\r\n            this.#setVisiblityofChapterButton(false);\r\n            for (const { id } of cues) {\r\n                this.player.seekBarSegments().update(id, null);\r\n            }\r\n        }\r\n    }\r\n\r\n    #setVisiblityofChapterButton(visiblity) {\r\n        const chaptersButton = this.player.getDescendant('ControlBar', 'ChaptersButton');\r\n        if (visiblity) {\r\n            chaptersButton.removeClass('vjs-hidden');\r\n        } else {\r\n            chaptersButton.addClass('vjs-hidden');\r\n        }\r\n    }\r\n\r\n    #updateTimeTooltip() {\r\n        const player = this.player\r\n        const timeTooltip = player.getChild('ControlBar')?.getChild('ProgressControl')?.getChild('SeekBar')?.getChild('MouseTimeDisplay')?.getChild('TimeTooltip');\r\n        const track = _chaptersTrack.get(this);\r\n        const cues = Array.from(track.cues)\r\n\r\n        if (timeTooltip != null) {\r\n            // Videojs has internal logic to determine when the tooltip should be updated, and how to handle the edges of screen\r\n            // want to add logic to add chapter names, without losing any logic from future videojs updates by overwriting\r\n            // So overwrite update function with function containing update function, plus added chapterName logic\r\n            timeTooltip.update = (function () {\r\n                const cached_timeTooltipUpdate = timeTooltip.update;\r\n                return function (seekBarRect, seekBarPoint, time) {\r\n                    cached_timeTooltipUpdate.apply(this, arguments);\r\n                    const timeNumber = seekBarPoint * player.duration();\r\n                    let chapterName = '';\r\n\r\n                    for (const cue of cues) {\r\n                        if (timeNumber >= cue.startTime && timeNumber < cue.endTime) {\r\n                            chapterName = cue.text;\r\n                            break;\r\n                        }\r\n                        else if (timeNumber === cue.endTime && timeNumber === player.duration()) {\r\n                            chapterName = cue.text;\r\n                            break;\r\n                        }\r\n                    }\r\n\r\n                    if (chapterName === '') {\r\n                        this.write(`${time}`)\r\n                    }\r\n                    else {\r\n                        this.write(`${time} - ${chapterName}`)\r\n                    }\r\n                }\r\n            }());\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Whether or not to enable the chapters UI.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.chapters.enabled = true;\r\n     */\r\n    get enabled() {\r\n        return _enabled.get(this) ?? false;\r\n    }\r\n\r\n    set enabled(enabled) {\r\n        _enabled.set(this, enabled);\r\n        this.#updateVisibility();\r\n    }\r\n\r\n    /**\r\n     * Whether or not to display just the chapters button.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.chapters.showChapterList = true;\r\n     */\r\n    get showChapterList() {\r\n        return _showChapterList.get(this) ?? false;\r\n    }\r\n\r\n    set showChapterList(showChapterList) {\r\n        _showChapterList.set(this, showChapterList);\r\n        this.#updateVisibility();\r\n    }\r\n\r\n    clear() {\r\n        const chapterInfos = this.getAll();\r\n\r\n        chapterInfos.forEach((chapter) => {\r\n            this.remove(chapter.id);\r\n        });\r\n\r\n        this.enabled = false;\r\n    }\r\n}\r\n\r\nexport default ChaptersPlugin;\r\n","export function getFullscreenToggleIndex(player) {\r\n    return player.getChild('ControlBar').children().indexOf(\r\n        player.getDescendant('ControlBar', 'FullscreenToggle')\r\n    );\r\n}\r\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/postcss-loader/dist/cjs.js!./overflow-menu-item.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\nimport './overflow-menu-item.css';\r\n\r\nconst MenuItem = videojs.getComponent('MenuItem');\r\nlet localize;\r\n\r\nconst _callback = new WeakMap();\r\nexport class OverflowMenuItem extends MenuItem {\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, options);\r\n        _callback.set(this, options.callback);\r\n\r\n        const { icon, iconClass } = options;\r\n        if (icon) {\r\n            this.el().style.backgroundImage = `url(\"${icon}\")`;\r\n        }\r\n\r\n        if (iconClass) {\r\n            let iconSpan = document.createElement(\"span\");\r\n            this.el().classList.add(iconClass);\r\n            this.el().classList.add(\"flex-menu-item\");\r\n            iconSpan.classList.add(\"vjs-icon-placeholder\");\r\n            iconSpan.classList.add(\"icon-mobile\");\r\n            this.el().prepend(iconSpan);\r\n        }\r\n\r\n        if (options.dismissable) {\r\n            this.addClass('mediasite-player__controlbar-dismissable-item');\r\n            const theButton = this.el().appendChild(document.createElement('button'));\r\n            theButton.type = 'button';\r\n            theButton.setAttribute('aria-label', localize('Dismiss notification'));\r\n        }\r\n    }\r\n\r\n    handleClick(event) {\r\n        let type = 'invoke';\r\n        if (this.options().dismissable && event.target.tagName.toLowerCase() === 'button') {\r\n            type = 'dismiss';\r\n        }\r\n        _callback.get(this)({ type });\r\n    }\r\n}\r\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/postcss-loader/dist/cjs.js!./overflow-menu-button.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\nimport { v4 as uuid } from 'uuid';\r\nimport { OverflowMenuItem } from './overflow-menu-item.js';\r\nimport './overflow-menu-button.css';\r\nimport ExpandLessIcon from '../../../assets/images/three-dots-menu.svg';\r\n\r\nconst MenuButtonComponent = videojs.getComponent('MenuButton');\r\nlet localize;\r\n\r\n/**\r\n * @typedef {Object} OverflowMenuButtonData\r\n * @property {string} id\r\n * @property {string} label\r\n * @property {string} icon\r\n * @property {boolean} visible\r\n * @property {function} callback\r\n * @property {string} [icon]\r\n * @property {boolean} dismissable\r\n * @property {Array<OverflowMenuButtonData>} subItems\r\n */\r\n\r\nconst _currentMenu = new WeakMap();\r\n\r\n/** @type {WeakMap<OverflowMenuButton, OverflowMenuButtonData} */\r\nconst _menuItems = new WeakMap();\r\nexport class OverflowMenuButton extends MenuButtonComponent {\r\n    constructor(player, options = {}) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, Object.assign({ name: 'OverflowMenuButton' }, options));\r\n        this.addClass('mediasite-player__custom-controlbar-button');\r\n        this.el().style.setProperty('--custom-controlbar-icon', `url(\"${options.icon || ExpandLessIcon}\")`);\r\n        this.controlText(localize('Show more'));\r\n        _menuItems.set(this, []);\r\n        _currentMenu.set(this, null);\r\n    }\r\n\r\n    createItems() {\r\n        /** @type {Array<OverflowMenuButtonData>} */\r\n        const menuItems = _menuItems.get(this) ?? [];\r\n        \r\n        return menuItems.reduce((allItems, currentItem) => {\r\n            if (currentItem.visible) {\r\n                const menuItem = new OverflowMenuItem(this.player(), {\r\n\t\t\t\t\tlabel: currentItem.label,\r\n                    icon: currentItem.icon,\r\n                    iconClass: currentItem.iconClass,\r\n\t\t\t\t\tcallback: (event) => this.handleItemClick(currentItem.id, event),\r\n\t\t\t\t\tdismissable: currentItem.dismissable\r\n\t\t\t\t});\r\n                allItems.push(menuItem);\r\n            }\r\n            return allItems;\r\n        }, []);\r\n    }\r\n\r\n    handleItemClick(itemId, event = {}) {\r\n        _menuItems.get(this).find(item => item.id === itemId).callback(event); \r\n    }\r\n\r\n    addMenuItem(label, { id = uuid(), icon, visible = true, callback = () => { }, dismissable = false, iconClass = null }) {\r\n        _menuItems.get(this).push({ label, id, icon, iconClass, visible, callback, dismissable});\r\n        this.update();\r\n        return id;\r\n    }\r\n\r\n    updateMenuItem(id, { label, icon, visible, callback, dismissable, iconClass }) {\r\n        const menuItems = _menuItems.get(this);\r\n        const itemIndex = menuItems.findIndex(item => item.id === id);\r\n        if (itemIndex > -1) {\r\n            const updatedItem = Object.assign({}, menuItems[itemIndex]);\r\n            updatedItem.label = label ?? updatedItem.label;\r\n            updatedItem.icon = icon ?? updatedItem.icon;\r\n            updatedItem.iconClass = iconClass ?? updatedItem.iconClass;\r\n            updatedItem.visible = visible ?? updatedItem.visible;\r\n            updatedItem.callback = callback ?? updatedItem.callback;\r\n            updatedItem.dismissable = (dismissable !== undefined && dismissable) ?? updatedItem.dismissable;\r\n\r\n            const newMenuItems = menuItems.slice();\r\n            newMenuItems.splice(itemIndex, 1, updatedItem);\r\n            _menuItems.set(this, newMenuItems);\r\n            this.update();\r\n        }\r\n    }\r\n\r\n    removeMenuItem(itemId) {\r\n        if (this.hasItem(itemId)) {\r\n            const menuItems = _menuItems.get(this);\r\n            menuItems.splice(menuItems.findIndex(item => item.id === itemId), 1);\r\n            this.update();\r\n\r\n            if (menuItems.length === 0) {\r\n                this.setTimeout(() => this.unpressButton(), 0);\r\n            }\r\n        }\r\n    }\r\n\r\n    hasItem(itemId) {\r\n        return _menuItems.get(this).some(item => item.id === itemId);\r\n    }\r\n\r\n    isItemVisible(itemId) {\r\n        return _menuItems.get(this).find(item => item.id === itemId)?.visible;\r\n    }\r\n\r\n    showMenuItem(itemId) {\r\n        if (this.hasItem(itemId)) {\r\n            const item = _menuItems.get(this).find(item => item.id === itemId);\r\n            item.visible = true;\r\n            this.update();\r\n        }\r\n    }\r\n\r\n    hideMenuItem(itemId) {\r\n        if (this.hasItem(itemId)) {\r\n            const item = _menuItems.get(this).find(item => item.id === itemId);\r\n            item.visible = false;\r\n            this.update();\r\n        }\r\n    }\r\n}\r\n","import videojs from 'video.js';\r\nimport { getFullscreenToggleIndex } from '../../util';\r\nimport { OverflowMenuButton } from './controlbar-menu/overflow-menu-button.js';\r\n\r\n/**\r\n * @typedef {Object} OverflowMenuItemData\r\n * @property {string} [id]\r\n * @property {string} [label]\r\n * @property {string} [icon]\r\n * @property {boolean} [visible]\r\n * @property {function} callback\r\n * @property {Array<OverflowMenuItemData>} subItems\r\n */\r\n\r\n/** \r\n *  @type {WeakMap<ControlbarMenuPlugin, OverflowMenuButton>}\r\n *  @private\r\n */\r\nconst _menuButton = new WeakMap();\r\n\r\n/**\r\n * The ControlbarMenu module.\r\n * @member {ControlbarMenuPlugin} controlbarMenu\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Provides developers with the ability to add menu items to the control bar.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass ControlbarMenuPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        const button = new OverflowMenuButton(player);\r\n        _menuButton.set(this, button);\r\n\r\n        player.ready(() => {\r\n            player.getChild('ControlBar').addChild(button, null, getFullscreenToggleIndex(player) + 1);\r\n        });\r\n\r\n        player.one('play', () => {\r\n            const controlBar = player.getChild('ControlBar');\r\n            const playerEl = player.contentEl();\r\n            playerEl.style.setProperty('--control-bar-height', `${controlBar.contentEl().clientHeight}px`);\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Adds a menu item to the control bar menu.\r\n     * @param {string} label A label to display for the menu item.\r\n     * @param {OverflowMenuItemData} [options]\r\n     * @returns {string} The ID of the menu item.\r\n     * @example\r\n     * const itemId = player.controlbarMenu.addMenuItem('Click here', {\r\n     *     callback: () => console.log('I was clicked!')\r\n     * });\r\n     */\r\n    addMenuItem(label, options) {\r\n        const menuButton = _menuButton.get(this);\r\n        return menuButton.addMenuItem(label, options);\r\n    }\r\n\r\n    /**\r\n     * Updates an existing menu item.\r\n     * @param {string} id\r\n     * @param {OverflowMenuItemData} options\r\n     * @example\r\n     * player.controlbarMenu.update('itemId', {\r\n     *     label: 'Changed the label',\r\n     *     callback: () => console.log('Changed the callback')\r\n     * });\r\n     */\r\n    updateMenuItem(id, options) {\r\n        _menuButton.get(this).updateMenuItem(id, options);\r\n    }\r\n\r\n    /**\r\n     * Determines if the given menu item is enabled and visible in the control bar menu.\r\n     * @param {string} itemId The ID of a menu item that was previously added via [addMenuItem]{@link ControlbarMenuPlugin#addMenuItem}.\r\n     * @returns {boolean}\r\n     * @example\r\n     * const isItemEnabled = player.controlbarMenu.isMenuItemEnabled('itemId');\r\n     */\r\n    isMenuItemEnabled(itemId) {\r\n        return _menuButton.get(this).isItemVisible(itemId);\r\n    }\r\n\r\n    /**\r\n     * Shows the given menu item in the control bar menu.\r\n     * @param {string} itemId The ID of a menu item that was previously added via [addMenuItem]{@link ControlbarMenuPlugin#addMenuItem}.\r\n     * @example\r\n     * player.controlbarMenu.enableMenuItem('itemId');\r\n     */\r\n    enableMenuItem(itemId) {\r\n        _menuButton.get(this).showMenuItem(itemId);\r\n    }\r\n\r\n    /**\r\n     * Hides the given menu item in the control bar menu.\r\n     * @param {string} itemId The ID of a menu item that was previously added via [addMenuItem]{@link ControlbarMenuPlugin#addMenuItem}.\r\n     * @example\r\n     * player.controlbarMenu.disableMenuItem('itemId');\r\n     */\r\n    disableMenuItem(itemId) {\r\n        _menuButton.get(this).hideMenuItem(itemId);\r\n    }\r\n\r\n    /**\r\n     * Removes the given menu item from the control bar menu.\r\n     * @param {string} itemId The ID of a menu item that was previously added via [addMenuItem]{@link ControlbarMenuPlugin#addMenuItem}.\r\n     * @example\r\n     * player.controlbarMenu.removeMenuItem('itemId');\r\n     */\r\n    removeMenuItem(itemId) {\r\n        _menuButton.get(this).removeMenuItem(itemId);\r\n    }\r\n\r\n    dispose() {\r\n        const menuButton = _menuButton.get(this);\r\n        menuButton.dispose();\r\n\r\n        const controlbar = this.player.getChild('ControlBar');\r\n        controlbar.removeChild(menuButton);\r\n\r\n        super.dispose();\r\n    }\r\n}\r\n\r\nexport default ControlbarMenuPlugin;\r\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./downloads.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\n\r\nimport ModalDialog from '../../components/modal-dialog.js';\r\nimport DownloadIcon from '../../assets/images/download-white-24dp.svg';\r\nimport { isPresentationId } from '../../util';\r\n\r\nimport './downloads.css';\r\n\r\nconst _enabled = new WeakMap();\r\nconst _downloads = new WeakMap();\r\nconst _modal = new WeakMap();\r\nlet localize;\r\n\r\n/**\r\n * The Downloads module.\r\n * @member {DownloadsPlugin} downloads\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Configures a list of downloadable content that is made available to the user via the control bar menu.<br><br>\r\n * Note: the Downloads button will only be displayed in the control bar menu if {@link DownloadsPlugin#enabled} is set to <code>true</code>, and at least one item has been added to the list of downloads via {@link DownloadsPlugin#add}.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass DownloadsPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, options);\r\n\r\n        const modal = new ModalDialog(player, {\r\n            temporary: false,\r\n            uncloseable: false,\r\n            pauseOnOpen: false,\r\n            description: localize('Downloads'),\r\n            displayAsPanel: true\r\n        });\r\n        _modal.set(this, modal);\r\n        modal.addClass('mediasite-player__downloads-modal');\r\n        modal.addClass('mediasite-player__control-bar-modal');\r\n        _enabled.set(this, false);\r\n        _downloads.set(this, []);\r\n\r\n        player.controlbarMenu().addMenuItem(localize('Downloads'), { id: this.name, icon: DownloadIcon, callback: () => this.openModal() });\r\n\r\n        player.ready(() => {\r\n            player.layout().addChild(modal);\r\n            this.#updateVisibility();\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Opens the Downloads modal dialog.\r\n     * @example\r\n     * player.downloads.openModal();\r\n     */\r\n    openModal() {\r\n        if (isPresentationId(this.player.loader().presentationId) && this.enabled) {\r\n            const modal = _modal.get(this);\r\n            modal.open();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Closes the Downloads modal dialog.\r\n     * @example\r\n     * player.downloads.closeModal();\r\n     */\r\n    closeModal() {\r\n        const modal = _modal.get(this);\r\n        if (modal?.opened()) {\r\n            modal.close();\r\n        }\r\n    }\r\n\r\n    #updateModalContent() {\r\n        const modal = _modal.get(this);\r\n        if (modal) {\r\n            const downloads = _downloads.get(this);\r\n            const heading = document.createElement('h2');\r\n            heading.textContent = localize('Downloads');\r\n\r\n            const listElement = document.createElement('ul');\r\n            listElement.classList.add('mediasite-player__downloads');\r\n            for (const { text, url } of downloads) {\r\n                const listItem = listElement.appendChild(document.createElement('li'));\r\n                const link = listItem.appendChild(document.createElement('a'));\r\n                link.download = '';\r\n                link.href = url;\r\n                link.textContent = text;\r\n            }\r\n\r\n\r\n            modal.fillWith([heading, listElement]);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Adds an item to the list of downloads.\r\n     * @param {string} url A path to the item to download.\r\n     * @param {string} text A label for the item's entry in the Downloads control bar menu.\r\n     * @example\r\n     * player.downloads.add('https://mediasite.com', 'Mediasite');\r\n     */\r\n    add(url, text) {\r\n        const downloads = _downloads.get(this);\r\n        _downloads.set(this, [...downloads, { text, url }]);\r\n\r\n        this.#updateVisibility();\r\n    }\r\n\r\n    /**\r\n     * Removes an item from the list of downloads that was previously added via [add]{@link MediasitePlayer.downloads#add}.\r\n     * @param {string} url The path to the item.\r\n     * @example\r\n     * player.downloads.remove('https://mediasite.com');\r\n     */\r\n    remove(url) {\r\n        const downloads = _downloads.get(this);\r\n        _downloads.set(this, downloads.filter(item => item.url !== url));\r\n\r\n        this.#updateVisibility();\r\n    }\r\n\r\n    #updateVisibility() {\r\n        // If enabled + downloads available, show toolbar button\r\n        const downloads = _downloads.get(this);\r\n\r\n        if (_enabled.get(this) && downloads.length > 0) {\r\n            this.player.controlbarMenu().enableMenuItem(this.name);\r\n        }\r\n        else {\r\n            this.player.controlbarMenu().disableMenuItem(this.name);\r\n            this.closeModal();\r\n        }\r\n        this.#updateModalContent();\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the Downloads feature is enabled.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.downloads.enabled = true;\r\n     */\r\n    get enabled() {\r\n        return _enabled.get(this);\r\n    }\r\n\r\n    set enabled(enabled) {\r\n        _enabled.set(this, enabled);\r\n        this.#updateVisibility();\r\n    }\r\n\r\n    dispose() {\r\n        if (this.player?.usingPlugin('controlbarMenu')) {\r\n            this.player.controlbarMenu().removeMenuItem(this.name);\r\n        }\r\n\r\n        super.dispose();\r\n    }\r\n}\r\n\r\nexport default DownloadsPlugin;\r\n","import videojs from 'video.js';\r\n\r\nimport HelpIcon from '../../assets/images/help-white-24dp.svg';\r\nimport { isPresentationId } from '../../util';\r\n\r\nconst _url = new WeakMap();\r\nconst _enabled = new WeakMap();\r\nlet localize;\r\n\r\n/**\r\n * The Help module.\r\n * @member {HelpPlugin} help\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Configures the Help button that is displayed in the controlbar menu.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n */\r\nclass HelpPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, options);\r\n        _enabled.set(this, true);\r\n\r\n        player.ready(() => {\r\n            player.controlbarMenu().addMenuItem(localize('Help'), { id: this.name, icon: HelpIcon, callback: () => this.handleClick() });\r\n            player.controlbarMenu().disableMenuItem(this.name);\r\n        });\r\n    }\r\n\r\n    handleClick() {\r\n        if (isPresentationId(this.player.loader().presentationId) && this.enabled) {\r\n            window.open(_url.get(this));\r\n        }\r\n    }\r\n\r\n    /**\r\n     * The URL that will be opened in a new window when the user clicks on the Help button.\r\n     * @type {string}\r\n     * @example\r\n     * player.help.url = 'https://mediasite.com';\r\n     */\r\n    get url() {\r\n        return _url.get(this);\r\n    }\r\n\r\n    set url(url) {\r\n        _url.set(this, url);\r\n        this.#updateVisibility();\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the Help UI is enabled.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.help.enabled = true;\r\n     */\r\n    get enabled() {\r\n        return _enabled.get(this);\r\n    }\r\n\r\n    set enabled(enabled) {\r\n        _enabled.set(this, enabled);\r\n        this.#updateVisibility();\r\n    }\r\n\r\n    #updateVisibility() {\r\n        if (this.enabled && this.url) {\r\n            this.player.controlbarMenu().enableMenuItem(this.name);\r\n        }\r\n        else {\r\n            this.player.controlbarMenu().disableMenuItem(this.name);\r\n        }\r\n    }\r\n\r\n    dispose() {\r\n        if (this.player?.usingPlugin('controlbarMenu')) {\r\n            this.player.controlbarMenu().removeMenuItem(this.name);\r\n        }\r\n\r\n        super.dispose();\r\n    }\r\n}\r\n\r\nexport default HelpPlugin;\r\n","import * as THREE from 'three';\r\n\r\nimport { TriggerEffects, HoverEffects, DefaultSizing, InteractionValues } from './enums.js';\r\n\r\nimport { createMessageTextMesh, createBackgroundMesh, createButton } from './component360.js'\r\nimport { backgroundColor, textColor, font } from './styles360.js';\r\n\r\n/** @type  {WeakMap<object, THREE.Group>} */\r\nconst _relativeHotspotsGroup = new WeakMap();\r\n\r\nconst DEFAULT_COLOR = 0x02528A; //fallback value for color just in case someone doesn't configure a hotspot correctly\r\nconst DEFAULT_OPACITY = .75; //fallback value for opacity just in case someone doesn't configure a hotspot correctly\r\n\r\n/**\r\n * \r\n * A class for any interaction that hotspots/interactions solely does with 360 \r\n */\r\nexport default class Hotspot360 {\r\n\tconstructor(player) {\r\n\t\tthis.player = player;\r\n\r\n\t\t//remove all the relative hotspots when we switch presentations\r\n\t\tthis.player.on(\"loadnewpresentation\", () => {\r\n\t\t\t_relativeHotspotsGroup.delete(this);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a circular hotspot in the world space based upon the properties of a hotspot\r\n\t * @param {any} hotspot\r\n\t */\r\n\tcreateAreaHotspot(hotspot) {\r\n\t\tconst xr = this.player.xr();\r\n\t\tlet material;\r\n\r\n\t\tconst areaProperties = {\r\n\t\t\tcolor: hotspot.Color != null ? hotspot.Color : DEFAULT_COLOR,\r\n\t\t\topacity: hotspot.Opacity > 0 ? hotspot.Opacity : DEFAULT_OPACITY,\r\n\t\t\tlinewidth: 4,\r\n\t\t\ttransparent: true,\r\n\t\t\tdepthWrite: false,\r\n\t\t\tdepthTest: false\r\n\t\t};\r\n\r\n\t\tif (hotspot.HasNoFill) {\r\n\t\t\tmaterial = new THREE.LineBasicMaterial(areaProperties);\r\n\t\t} else {\r\n\t\t\tmaterial = new THREE.MeshBasicMaterial(areaProperties);\r\n\t\t}\r\n\r\n\t\tlet hotspotMesh;\r\n\r\n\t\tif (hotspot.Shape === \"Rectangle\") {\r\n\t\t\thotspotMesh = this.#createRectangleHotspotMesh(hotspot, material);\r\n\t\t} else {\r\n\t\t\thotspotMesh = this.#createCircleHotspotMesh(hotspot, material);\r\n\t\t\thotspotMesh.lookAt(xr.camera.position);\r\n\t\t}\r\n\r\n\t\t//The raycast uses the name to reference back to the id that the hotspots have in hotspots.js\r\n\t\thotspotMesh.name = hotspot.TimedId;\r\n\t\thotspotMesh.triggerDelay = InteractionValues.TriggerDelay;\r\n\t\thotspotMesh.triggerEffect = TriggerEffects.Hotspot;\r\n\t\thotspotMesh.triggerParam = hotspot.TimedId;\r\n\r\n\t\thotspotMesh.visible = false;\r\n\t\txr.scene.add(hotspotMesh);\r\n\r\n\t\treturn hotspotMesh;\r\n\t}\r\n\r\n\t#createCircleHotspotMesh(hotspot, material) {\r\n\t\t//math to get the coordinates of the middle of the hotspot\r\n\t\tconst yOffset = hotspot.Y + (hotspot.Height / 2);\r\n\t\tconst xOffset = hotspot.X + (hotspot.Width / 2);\r\n\r\n\t\tconst position = this.#getPointIn3DSpace(xOffset, yOffset);\r\n\r\n\t\t//we have two different approaching to how to render our hotspots, either circles or spheres\r\n\t\t//if spheres, due to them being 3D shapes, we can render their origin directly on the sphere and they will render partically within the sphere\r\n\t\t//if circles, we then need to render them fully within the outer sphere, so we need to have the point we're rendering be closer to the center\r\n\t\t//depending on how big the hotspot is\r\n\t\tconst calcRadius = (InteractionValues.VideoSphereRadius - (InteractionValues.VideoSphereRadius * hotspot.Width));\r\n\t\tconst zPoint = position.z * calcRadius;\r\n\t\tconst xPoint = position.x * calcRadius;\r\n\t\tconst yPoint = position.y * calcRadius;\r\n\r\n\t\tconst geometry = new THREE.CircleGeometry(InteractionValues.VideoSphereRadius * hotspot.Height * (Math.PI / 2), 128);\r\n\r\n\t\tlet mesh;\r\n\t\tif (hotspot.HasNoFill) {\r\n\t\t\t//render the other one like normal, but have it have a opacity of 0\r\n\t\t\tmesh = new THREE.Mesh(geometry, new THREE.MeshBasicMaterial({\r\n\t\t\t\topacity: 0,\r\n\t\t\t\ttransparent: true,\r\n\t\t\t\tdepthWrite: false,\r\n\t\t\t\tdepthTest: false\r\n\t\t\t}));\r\n\r\n\t\t\t//then create a line out of the same geometry and set it as a child of normal one\r\n\t\t\t//first, we need to remove the first vertex, which is the center point of the circle\r\n\t\t\t//we will then have just the outer line of the circle to create a line out of\r\n\t\t\tconst circleGeometry = geometry.clone();\r\n\t\t\tconst itemSize = 3;\r\n\t\t\tcircleGeometry.setAttribute('position',\r\n\t\t\t\tnew THREE.BufferAttribute(\r\n\t\t\t\t\tcircleGeometry.attributes.position.array.slice(itemSize,\r\n\t\t\t\t\t\tcircleGeometry.attributes.position.array.length - itemSize\r\n\t\t\t\t\t), itemSize\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t\tcircleGeometry.index = null;\r\n\t\t\tconst outline = new THREE.LineLoop(circleGeometry, material);\r\n\t\t\tmesh.add(outline);\r\n\t\t} else {\r\n\t\t\tmesh = new THREE.Mesh(geometry, material);\r\n\t\t}\r\n\r\n\t\t//why is x negative? How the video is wrapped on the sphere is that the ends of the video meet on the x-axis.\r\n\t\t//This means that the center of the presentation that we start looking at is directly opposite that\r\n\t\tmesh.position.set(-xPoint, yPoint, zPoint);\r\n\t\treturn mesh;\r\n\t}\r\n\r\n\t#createRectangleHotspotMesh(hotspot, material) {\r\n\t\t//math to get the corners of the rectangle\r\n\t\tconst leftX = hotspot.X;\r\n\t\tconst rightX = hotspot.X + hotspot.Width;\r\n\t\tconst topY = hotspot.Y;\r\n\t\tconst bottomY = hotspot.Y + hotspot.Height;\r\n\r\n\t\tconst topLeft = this.#getPointIn3DSpace(leftX, topY);\r\n\t\tconst topRight = this.#getPointIn3DSpace(rightX, topY);\r\n\t\tconst bottomLeft = this.#getPointIn3DSpace(leftX, bottomY);\r\n\t\tconst bottomRight = this.#getPointIn3DSpace(rightX, bottomY);\r\n\r\n\t\t//construct a geometry using the points found for the corners\r\n\t\tconst geometry = new THREE.BufferGeometry();\r\n\t\tconst offset = InteractionValues.VideoSphereRadius;\r\n\t\t//why is x negative? How the video is wrapped on the sphere is that the ends of the video meet on the x-axis.\r\n\t\t//This means that the center of the presentation that we start looking at is directly opposite that\r\n\t\tconst vertices = new Float32Array([\r\n\t\t\t-bottomLeft.x * offset, bottomLeft.y * offset, bottomLeft.z * offset,\r\n\t\t\t-bottomRight.x * offset, bottomRight.y * offset, bottomRight.z * offset,\r\n\t\t\t-topRight.x * offset, topRight.y * offset, topRight.z * offset,\r\n\t\t\t-topLeft.x * offset, topLeft.y * offset, topLeft.z * offset\r\n\t\t]);\r\n\r\n\t\tconst indices = [\r\n\t\t\t0, 1, 2,\r\n\t\t\t2, 3, 0,\r\n\t\t];\r\n\r\n\t\tgeometry.setIndex(indices);\r\n\t\t// itemSize = 3 because there are 3 values (components) per vertex\r\n\t\tgeometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n\r\n\t\tlet mesh;\r\n\t\tif (hotspot.HasNoFill) {\r\n\t\t\t//render the other one like normal, but have it have a opacity of 0\r\n\t\t\tmesh = new THREE.Mesh(geometry, new THREE.MeshBasicMaterial({\r\n\t\t\t\topacity: 0,\r\n\t\t\t\ttransparent: true,\r\n\t\t\t\tdepthWrite: false,\r\n\t\t\t\tdepthTest: false\r\n\t\t\t}));\r\n\t\t\t//then create a line out of the same geometryand set it as a child of normal one\r\n\t\t\tconst outline = new THREE.Line(geometry, material);\r\n\t\t\tmesh.add(outline);\r\n\t\t} else {\r\n\t\t\tmesh = new THREE.Mesh(geometry, material);\r\n\t\t}\r\n\r\n\t\treturn mesh;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a text element based upon the hotspot information passed into it and adds it to the scene.\r\n\t * @param {any} hotspot\r\n\t */\r\n\tcreateTextHotspot(hotspot) {\r\n\t\tconst xr = this.player.xr();\r\n\r\n\t\t//math to get the coordinates of the middle of the hotspot\r\n\t\tconst yOffset = hotspot.Y + (hotspot.Height / 2);\r\n\t\tconst xOffset = hotspot.X + (hotspot.Width / 2);\r\n\r\n\t\tconst position = this.#getClampedPosition(xOffset, yOffset);\r\n\r\n\t\tconst calcRadius = DefaultSizing.Distance * 2;\r\n\t\tconst zPoint = position.z * calcRadius;\r\n\t\tconst xPoint = position.x * calcRadius;\r\n\t\tconst yPoint = position.y * calcRadius;\r\n\r\n\t\tconst hotspotTextSize = hotspot.TextSize;\r\n\t\tlet textSize;\r\n\r\n\t\tif (hotspotTextSize === \"Small\") {\r\n\t\t\ttextSize = .75;\r\n\t\t} else if (hotspotTextSize === \"Medium\") {\r\n\t\t\ttextSize = 1.25;\r\n\t\t} else {\r\n\t\t\ttextSize = 2;\r\n\t\t}\r\n\r\n\t\tconst hotspotMesh = this.#createMessageWithLineBreaks(hotspot.DisplayText, .05, textSize, hotspot.Width * DefaultSizing.Scale / textSize, 0, hotspot.Color, hotspot.SecondaryColor);\r\n\r\n\t\thotspotMesh.position.set(-xPoint, yPoint, zPoint);\r\n\t\thotspotMesh.name = hotspot.TimedId;\r\n\r\n\t\thotspotMesh.visible = false;\r\n\t\thotspotMesh.lookAt(xr.camera.position);\r\n\t\tthis.#addToViewpointRelativeHotspots(hotspotMesh);\r\n\r\n\t\treturn hotspotMesh;\r\n\t}\r\n\r\n\t/**\r\n\t * Converts the given piece of text into a mesh that line breaks when it reaches its max width\r\n\t * @param {any} message\r\n\t * @param {any} padding\r\n\t * @param {any} height\r\n\t * @param {any} width\r\n\t * @param {any} opacity\r\n\t * @param {any} msgColor\r\n\t * @param {any} outlineColor\r\n\t */\r\n\t#createMessageWithLineBreaks(message, padding = .25, height = DefaultSizing.Height, width = DefaultSizing.Height, opacity = 1, msgColor = textColor(), outlineColor = null) {\r\n\t\tconst lines = this.#getLinesFromMessage(message, width);\r\n\t\tconst totalLines = lines.length;\r\n\t\tconst lineMeshes = [];\r\n\r\n\t\tlines.forEach(line => {\r\n\t\t\tconst textMesh = createMessageTextMesh(line, height, msgColor, font(), outlineColor);\r\n\t\t\tlineMeshes.push(textMesh);\r\n\t\t});\r\n\r\n\t\tconst longestTextWidth = this.#getLengthofWidestMesh(lineMeshes);\r\n\t\tconst renderWidth = longestTextWidth + padding;\r\n\t\tconst renderHeight = lineMeshes[0].geometry.parameters.height + padding;\r\n\t\tconst backgroundMesh = createBackgroundMesh(renderWidth, renderHeight * totalLines, backgroundColor(), opacity);\r\n\r\n\t\tconst lineYOffset = (totalLines - 1) / 2;\r\n\r\n\t\tlet linesCreated = 0;\r\n\t\tlineMeshes.forEach(lineMesh => {\r\n\t\t\tbackgroundMesh.add(lineMesh);\r\n\t\t\tlineMesh.position.set(0, (lineYOffset - linesCreated) * renderHeight, DefaultSizing.TextOffset);\r\n\t\t\tlinesCreated++;\r\n\t\t});\r\n\r\n\t\treturn backgroundMesh;\r\n\t}\r\n\r\n\t/**\r\n\t * Breaks a message down into an array of string where each of them have a length less than the width passed in.\r\n\t * @param {string} text\r\n\t * @param {width} maxWidth\r\n\t * @return {Array<string>} lines\r\n\t */\r\n\t#getLinesFromMessage(text, maxWidth) {\r\n\t\tconst canvas = document.createElement('canvas');\r\n\t\tconst context = canvas.getContext('2d');\r\n\t\tconst contextFont = `normal ${DefaultSizing.Scale}px ${font()}`;\r\n\t\tcontext.font = contextFont;\r\n\r\n\t\tconst words = text.split(\" \");\r\n\t\tconst lines = [];\r\n\t\tlet currentLine = words[0];\r\n\r\n\t\tfor (let index = 1; index < words.length; index++) {\r\n\t\t\tconst word = words[index];\r\n\t\t\tconst width = context.measureText(currentLine + \" \" + word).width;\r\n\t\t\tif (width / DefaultSizing.Scale < maxWidth) {\r\n\t\t\t\tcurrentLine += \" \" + word;\r\n\t\t\t} else {\r\n\t\t\t\tlines.push(currentLine);\r\n\t\t\t\tcurrentLine = word;\r\n\t\t\t}\r\n\t\t}\r\n\t\tlines.push(currentLine);\r\n\t\treturn lines;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the longest width in a collection of meshes\r\n\t * @param {Array<THREE.Mesh>} meshes\r\n\t * @returns {number} width\r\n\t */\r\n\t#getLengthofWidestMesh(meshes) {\r\n\t\tlet longestWidth = 0;\r\n\t\tmeshes.forEach(mesh => {\r\n\t\t\tconst width = mesh.geometry.parameters.width;\r\n\r\n\t\t\tif (longestWidth < width) {\r\n\t\t\t\tlongestWidth = width;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn longestWidth;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a button that is added to the scene based upon the hotspot information passed into it.\r\n\t * @param {any} hotspot\r\n\t */\r\n\tcreateButtonHotspot(hotspot) {\r\n\t\tconst xr = this.player.xr();\r\n\r\n\t\t//math to get the coordinates of the middle of the hotspot\r\n\t\tconst yOffset = hotspot.Y + (hotspot.Height / 2);\r\n\t\tconst xOffset = hotspot.X + (hotspot.Width / 2);\r\n\r\n\t\tconst position = this.#getClampedPosition(xOffset, yOffset);\r\n\r\n\t\tconst calcRadius = DefaultSizing.Distance * 2;\r\n\t\tconst zPoint = position.z * calcRadius;\r\n\t\tconst xPoint = position.x * calcRadius;\r\n\t\tconst yPoint = position.y * calcRadius;\r\n\r\n\t\tconst hotspotTextSize = hotspot.TextSize;\r\n\t\tlet textSize;\r\n\r\n\t\tif (hotspotTextSize === \"Small\") {\r\n\t\t\ttextSize = .75;\r\n\t\t} else if (hotspotTextSize === \"Medium\") {\r\n\t\t\ttextSize = 1.25;\r\n\t\t} else {\r\n\t\t\ttextSize = 2;\r\n\t\t}\r\n\r\n\t\tconst hotspotMesh = createButton(hotspot.DisplayText, textSize, textSize, hotspot.Color, hotspot.SecondaryColor);\r\n\r\n\t\thotspotMesh.position.set(-xPoint, yPoint, zPoint);\r\n\t\thotspotMesh.name = hotspot.TimedId;\r\n\t\thotspotMesh.triggerDelay = InteractionValues.TriggerDelay;\r\n\t\thotspotMesh.triggerEffect = TriggerEffects.Hotspot;\r\n\t\thotspotMesh.triggerParam = hotspot.TimedId;\r\n\t\thotspotMesh.hoverEffect = HoverEffects.Scale;\r\n\r\n\t\thotspotMesh.visible = false;\r\n\t\thotspotMesh.lookAt(xr.camera.position);\r\n\r\n\t\tthis.#addToViewpointRelativeHotspots(hotspotMesh);\r\n\r\n\t\treturn hotspotMesh;\r\n\t}\r\n\r\n\t/**\r\n\t * When provided offsets that range from 0 - 1, where 1 returns maxAngle / 2 and 0 return -maxAngle / 2\r\n\t * and provided clamp angles, so that if offsets was 1 it would return clampAngle / 2 and 0 return -clampAngle / 2\r\n\t * return a Vector3 in 3D space that matches those two new clamped angles\r\n\t * @param {number} xOffset\r\n\t * @param {number} yOffset\r\n\t * @param {number} xClampAngle\r\n\t * @param {number} yClampAngle\r\n\t */\r\n\t#getClampedPosition(xOffset, yOffset, xClampAngle = 80, yClampAngle = 50) {\r\n\t\tconst xMaxAngle = 180;\r\n\t\tconst yMaxAngle = 90;\r\n\r\n\t\tconst movedOffsetX = xOffset * (xClampAngle * 2) - xClampAngle;\r\n\t\tconst translatedOffsetX = (movedOffsetX + xMaxAngle) / (xMaxAngle * 2);\r\n\r\n\t\tconst movedOffsetY = yOffset * (yClampAngle * 2) - yClampAngle;\r\n\t\tconst translatedOffsetY = (movedOffsetY + yMaxAngle) / (yMaxAngle * 2);\r\n\r\n\t\treturn this.#getPointIn3DSpace(translatedOffsetX, translatedOffsetY);\r\n\t}\r\n\r\n\t#getPointIn3DSpace(x, y) {\r\n\t\t//Who's ready for some trig!!! Goal: to figure out where on the outer sphere (where the video is being rendered onto) we're rendering the hotspot\r\n\r\n\t\t/* okay, so we have the x offset, which is basically how far left/right into the presentation the hotspot is\r\n\t\t   well, the horizontal distance has now been wrapped into a circle and we know how far into the circle we are (the xOffset)\r\n\t\t   we need to convert this straight distance into a curved distance, i.e. radians\r\n\t\t   we also need to multiply by 2 since before we were working on a scale to 0 - 1 and 2π radians = 360 degree */\r\n\t\tconst theta = x * 2 * Math.PI;\r\n\r\n\t\t//simarly, we need to get our vertical angle. We do the same math, but don't multiply by 2 since the vertical\r\n\t\t//range we're dealing with is only 0 to π radians, in other words, 0 - 180 degrees\r\n\t\tconst phi = y * Math.PI;\r\n\r\n\t\t//we got our angles in radians! Now, we can do some caluculations to figure out the point in the space\r\n\t\t//the following math has been pulled from here: https://stackoverflow.com/a/969880/11466368\r\n\t\t//x = r * cos(phi) * sin(theta)\r\n\t\t//y = r * sin(phi) * sin(theta)\r\n\t\t//z = r * cos(theta)\r\n\t\t//if you wish to know the why behind the math, read this wikipedia section: https://en.wikipedia.org/wiki/Spherical_coordinate_system#Coordinate_system_conversions\r\n\t\tlet zPoint = Math.sin(phi) * Math.cos(theta);\r\n\t\tlet xPoint = Math.sin(phi) * Math.sin(theta);\r\n\t\tlet yPoint = Math.cos(phi);\r\n\r\n\t\treturn {\r\n\t\t\tx: xPoint,\r\n\t\t\ty: yPoint,\r\n\t\t\tz: zPoint\r\n\t\t}\r\n\t}\r\n\r\n\t//To get the buttons and text to follow the camera, we add them to a group that moves to where the camera is looking\r\n\t//rather than trying to move each hotspot when they appear on screen\r\n\t#addToViewpointRelativeHotspots(hotspot) {\r\n\t\tlet hotspotGroup = _relativeHotspotsGroup.get(this);\r\n\r\n\t\tif (!hotspotGroup) {\r\n\t\t\tconst xr = this.player.xr();\r\n\t\t\thotspotGroup = new THREE.Group();\r\n\t\t\thotspotGroup.position.set(0, 0, -1);\r\n\t\t\txr.scene.add(hotspotGroup);\r\n\t\t}\r\n\r\n\t\thotspotGroup.add(hotspot);\r\n\t\t_relativeHotspotsGroup.set(this, hotspotGroup);\r\n\t}\r\n\r\n\t/**\r\n\t * Moves the holder of the hotspots that move with the camera to update its position and move to where the camera is looking \r\n\t * \r\n\t*/\r\n\tupdatePositionOfRelativeHotspots() {\r\n\t\tconst normalizedVector = this.player.video360?.().getCameraDirectionNormalized();\r\n\t\tconst hotspotGroup = _relativeHotspotsGroup.get(this);\r\n\r\n\t\tif (hotspotGroup) {\r\n\t\t\thotspotGroup.position.set(normalizedVector.x, normalizedVector.y, normalizedVector.z);\r\n\t\t\thotspotGroup.lookAt(0, 0, 0);\r\n\t\t}\r\n\t}\r\n}","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./hotspots.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\n\r\nimport { QueryStringParamProvider } from '../../implementations/player-page/helpers.js';\r\nimport { getInteractionColorsFromColor } from '../../util';\r\nimport Hotspot360 from '../conditional/360/hotspot-360.js';\r\nimport './hotspots.css';\r\n\r\nlet _shouldRenderHotspots;\r\nlet _isCurrentVideo360;\r\nlet _renderedHotspots = [];\r\nlet _hotspotInfos = [];\r\nlet _hotspotsComponent;\r\n\r\n/** @type {Hotspot360} */\r\nlet hotspot360;\r\n\r\nconst HOTSPOT_DEFAULT_COLOR = \"#02528A\";\r\nconst HOTSPOT_DEFAULT_OPACITY = 0.75;\r\n/**\r\n * The Hotspots plugin, which handles adding and rendering the hotspots\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass HotspotsPlugin extends videojs.getPlugin('plugin') {\r\n\tconstructor(player, options) {\r\n\t\tsuper(player, options);\r\n\r\n\t\thotspot360 = new Hotspot360(player);\r\n\r\n\t\tconst paramProvider = new QueryStringParamProvider(location.search);\r\n\t\t_shouldRenderHotspots = (paramProvider.getParamCaseSensitive(\"hotspots\") !== \"false\");\r\n\r\n\t\tthis.createHotspotHolder();\r\n\r\n\t\tthis.player.one('loadedmetadata', () => {\r\n\t\t\tif (isNaN(this.aspect) || !this.aspect) {\r\n\t\t\t\tthis.aspect = this.player.videoWidth() / this.player.videoHeight();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetIs360(is360) {\r\n\t\t_isCurrentVideo360 = is360;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates the DOM element to hold the hotspots in that matches the size of the primary stream\r\n\t*/\r\n\tcreateHotspotHolder() {\r\n\t\tconst Component = videojs.getComponent('Component');\r\n\t\tconst hotspotsComponent = new Component(this.player, { name: 'Hotspots' });\r\n\t\thotspotsComponent.addClass('mediasite-player__hotspots_wrapper');\r\n\t\thotspotsComponent.addClass('vjs-hidden');\r\n\r\n\t\tconst hotspotsContainer = document.createElement('div');\r\n\t\thotspotsContainer.classList.add('mediasite-player__hotspots_container');\r\n\r\n\t\thotspotsComponent.el().appendChild(hotspotsContainer);\r\n\r\n\t\tthis.player.ready(() => {\r\n\t\t\tthis.player.layout().addChild(hotspotsComponent);\r\n\t\t});\r\n\r\n\t\t_hotspotsComponent = hotspotsComponent;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates the timed events for showing/hiding the hotspots on the presentation and then renders them\r\n\t * @param {any} hotspots\r\n\t */\r\n\tadd(hotspots) {\r\n\t\tif (!_shouldRenderHotspots) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (hotspots.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (let index = 0; index < hotspots.length; index++) {\r\n\t\t\tconst hotspot = hotspots[index];\r\n\t\t\tconst timedId = this.player.timedEvents().add(\r\n\t\t\t\t{\r\n\t\t\t\t\ttime: hotspot.StartTime / 1000,\r\n\t\t\t\t\tduration: (hotspot.EndTime / 1000) - (hotspot.StartTime / 1000),\r\n\t\t\t\t\ttype: 'hotspot'\r\n\t\t\t\t},\r\n\t\t\t\tthis.showHotspot.bind(this),\r\n\t\t\t\tthis.hideHotspot.bind(this)\r\n\t\t\t);\r\n\r\n\t\t\thotspot.TimedId = timedId;\t\t\t\r\n\r\n\t\t\t//convert opacity from percentage into decimal\r\n\t\t\tif (hotspot.Opacity > 1) {\r\n\t\t\t\thotspot.Opacity = hotspot.Opacity / 100;\r\n\t\t\t}\r\n\r\n\t\t\t_hotspotInfos[timedId] = hotspot;\r\n\t\t}\r\n\r\n\t\t//depending if we have XR loaded, either render through XR or load it to the DOM\r\n\t\t//since we've render hotspots, let's activate the raycaster to check if the user looks at them\r\n\t\tif (_isCurrentVideo360) {\r\n\t\t\tconst xr = this.player.xr();\r\n\r\n\t\t\t//'hasPlayerLoadedXR' gets set to true when 'initialized' is triggered in the xr plugin\r\n\t\t\t//And so, if 'initialized' has already been trigged, add hotspots now. If it hasn't, wait until it has been triggered then do it\r\n\t\t\tif (xr.hasPlayerLoadedXR) {\r\n\t\t\t\tthis.#createHotspotsin360(hotspots);\r\n\t\t\t} else {\r\n\t\t\t\txr.one(\"initialized\", () => {\r\n\t\t\t\t\tthis.#createHotspotsin360(hotspots);\r\n\t\t\t\t});\t\t\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\thotspots.forEach((hotspot) => {\r\n\t\t\t\t_renderedHotspots[hotspot.TimedId] = this.renderHotspot(hotspot);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t_hotspotsComponent.removeClass('vjs-hidden');\r\n\t}\r\n\r\n\t#createHotspotsin360(hotspots) {\r\n\t\thotspots.forEach((hotspot) => {\r\n\t\t\tswitch (hotspot.Type) {\r\n\t\t\t\tcase \"Text\":\r\n\t\t\t\t\t_renderedHotspots[hotspot.TimedId] = hotspot360.createTextHotspot(hotspot);\r\n\t\t\t\t\tbreak;\t\t\t\t\r\n\t\t\t\tcase \"Button\":\r\n\t\t\t\t\t_renderedHotspots[hotspot.TimedId] = hotspot360.createButtonHotspot(hotspot);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"Hotspot\":\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t_renderedHotspots[hotspot.TimedId] = hotspot360.createAreaHotspot(hotspot);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t});\r\n\t}\r\n\r\n\t// Displays the hotspot with the id given by the timed event\r\n\tshowHotspot(id) {\r\n\t\tconst targetHotspot = _renderedHotspots[id];\r\n\t\tif (!targetHotspot) {\r\n\t\t\tconsole.log(`Attempted to render a hotspot with id ${id} and failed.`);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst hotspotInfo = _hotspotInfos[id];\r\n\r\n\t\tif (hotspotInfo.HasFocus) {\r\n\t\t\t//if we're seeking when we trigger the interaction, wait until seeking is done before pausing the player\r\n\t\t\tif (this.player.seeking()) {\r\n\t\t\t\tthis.player.one(\"seeked\", () => {\r\n\t\t\t\t\tthis.player.pause();\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tthis.player.pause();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (_isCurrentVideo360) {\r\n\t\t\tswitch (hotspotInfo.Type) {\r\n\t\t\t\tcase \"Text\":\r\n\t\t\t\tcase \"Button\":\r\n\t\t\t\t\thotspot360.updatePositionOfRelativeHotspots();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"Hotspot\":\r\n\t\t\t\tdefault:\t\t\t\t\t\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\ttargetHotspot.visible = true;\t\t\t\r\n\t\t} else {\r\n\t\t\ttargetHotspot.classList.remove('vjs-hidden');\r\n\t\t}\r\n\t}\r\n\r\n\t// Hides the hotspot with the id given by the timed event\r\n\thideHotspot(id) {\r\n\t\tconst targetHotspot = _renderedHotspots[id];\r\n\t\tif (_isCurrentVideo360) {\r\n\t\t\ttargetHotspot.visible = false;\r\n\t\t} else {\r\n\t\t\ttargetHotspot.classList.add('vjs-hidden');\r\n\t\t}\r\n\t}\r\n\r\n\t// Triggers the event associated with the hotspot with said id\r\n\ttriggerHotspot(id) {\r\n\t\tconst hotspotInfo = _hotspotInfos[id];\r\n\t\tconst effect = hotspotInfo.InteractionEffect;\r\n\t\tconst parameter = hotspotInfo.InteractionParam;\r\n\r\n\t\tif (!parameter) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//Deduce what the effect of the hotspot should be then call some sort of function with the parameter that was passed in\r\n\t\tswitch (effect) {\r\n\t\t\tcase \"timeChange\":\t\t\t\t\r\n\t\t\t\tconst targetTime = parameter / 1000;\r\n\t\t\t\tthis.player.currentTime(targetTime);\r\n\t\t\t\tthis.player.play();\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"presentationChange\":\r\n\t\t\t\tthis.player.loader().loadNewPresentation(parameter);\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"urlChange\":\r\n\t\t\t\tthis.player.pause();\r\n\t\t\t\twindow.open(parameter, '_blank');\r\n\t\t\t\tif (_isCurrentVideo360) {\r\n\t\t\t\t\t//after we trigger it, let's disable it in 360 so that we don't keep on triggering it when we move to a new tab\r\n\t\t\t\t\tthis.setDisableHotspot(id, true);\r\n\r\n\t\t\t\t\tlet modalBtns = [];\r\n\t\t\t\t\tmodalBtns.push({\r\n\t\t\t\t\t\ttext: \"Resume Presentation\",\r\n\t\t\t\t\t\ticon: \"0xf101\",\r\n\t\t\t\t\t\taction: this.handleURlChangeResumeButton.bind(this)\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tthis.player.video360?.().displayModal(\"Opended a URL in a new tab.\", modalBtns);\r\n\r\n\t\t\t\t\tthis.player.one('play', () => {\r\n\t\t\t\t\t\tthis.player.video360?.().removeModal();\r\n\t\t\t\t\t\tthis.setDisableHotspot(id, false);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthis.player.log(`A hotspot with an unknown interaction effect of ${effect} has been triggered.`);\r\n\t\t}\r\n\t}\r\n\r\n\t// allows a hotspot to be seen, but not interactable. Useful if a hotspot should only be triggered once\r\n\tsetDisableHotspot(id, isDisabled) {\r\n\t\tconst targetHotspot = _renderedHotspots[id];\r\n\t\t//Right now, there is no non-360 need to disable a hotspot\r\n\t\tif (_isCurrentVideo360) {\r\n\t\t\ttargetHotspot.disabled = isDisabled;\r\n\t\t}\r\n\t}\r\n\r\n\thandleURlChangeResumeButton() {\r\n\t\tthis.player.play();\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a DOM element for the hotspot. Update when non-circle sizing exists, along with any additional properities to a hotspot\r\n\t * @param {any} hotspot\r\n\t */\r\n\trenderHotspot(hotspot) {\r\n\t\tlet hotspotDOM = document.createElement('div');\r\n\t\thotspotDOM.classList.add('mediasite-player__hotspot', 'vjs-hidden');\r\n\t\thotspotDOM.style.setProperty('left', `${hotspot.X * 100}%`);\r\n\t\thotspotDOM.style.setProperty('top', `${hotspot.Y * 100}%`);\r\n\t\thotspotDOM.setAttribute(\"aria-live\", \"polite\");\r\n\r\n\t\tswitch (hotspot.Type) {\r\n\t\t\tcase \"Button\":\r\n\t\t\t\thotspotDOM = this.#renderButtonHotspot(hotspot, hotspotDOM);\r\n\t\t\t\tconst hotspotButtonDOM = hotspotDOM.querySelector(\".mediasite-player__hotspot-button\");\r\n\t\t\t\thotspotButtonDOM.addEventListener(\"click\", () => {\r\n\t\t\t\t\tthis.triggerHotspot(hotspot.TimedId);\r\n\t\t\t\t});\r\n\t\t\t\thotspotButtonDOM.addEventListener(\"keydown\", (event) => {\r\n\t\t\t\t\tif (event.key.toLowerCase() === 'enter' || event.key.toLowerCase() === 'space') {\r\n\t\t\t\t\t\tthis.triggerHotspot(hotspot.TimedId);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"Text\":\r\n\t\t\t\thotspotDOM = this.#renderTextHotspot(hotspot, hotspotDOM);\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"Hotspot\":\r\n\t\t\tdefault:\r\n\t\t\t\thotspotDOM = this.#renderAreaHotspot(hotspot, hotspotDOM);\t\r\n\t\t\t\thotspotDOM.addEventListener(\"click\", () => {\r\n\t\t\t\t\tthis.triggerHotspot(hotspot.TimedId);\r\n\t\t\t\t});\r\n\t\t\t\thotspotDOM.addEventListener(\"keydown\", (event) => {\r\n\t\t\t\t\tif (event.key.toLowerCase() === 'enter' || event.key.toLowerCase() === 'space') {\r\n\t\t\t\t\t\tthis.triggerHotspot(hotspot.TimedId);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\t_hotspotsComponent.el().querySelector(\".mediasite-player__hotspots_container\").appendChild(hotspotDOM);\r\n\t\treturn hotspotDOM;\r\n\t}\r\n\r\n\t#renderAreaHotspot(hotspot, hotspotDOM) {\r\n\t\thotspotDOM.style.setProperty('height', `${hotspot.Height * 100}%`);\r\n\t\thotspotDOM.style.setProperty('width', `${hotspot.Width * 100}%`);\r\n\t\thotspotDOM.setAttribute(\"role\", \"button\");\r\n\t\thotspotDOM.setAttribute(\"tabindex\", \"0\");\r\n\t\tconst hotspotDescription = `Hotspot with Left: ${Math.round(hotspot.X * 100)}% \r\n\t\t\t\tTop: ${Math.round(hotspot.Y * 100)}% \r\n\t\t\t\tHeight: ${Math.round(hotspot.Height * 100)}% \r\n\t\t\t\tWidth: ${Math.round(hotspot.Width * 100)}%`;\r\n\t\thotspotDOM.setAttribute(\"aria-label\", hotspotDescription);\r\n\r\n\t\t//if the hotspot color or opacity aren't valid, use defaults\r\n\t\tconst hotspotColor = hotspot.Color != null ? hotspot.Color : HOTSPOT_DEFAULT_COLOR;\r\n\t\tif (hotspot.HasNoFill) {\r\n\t\t\thotspotDOM.style.setProperty('background-color', `transparent`);\r\n\t\t\thotspotDOM.style.setProperty('border', `4px solid ${hotspotColor}`);\r\n\t\t} else {\r\n\t\t\thotspotDOM.style.setProperty('background-color', `${hotspotColor}`);\t\t\t\r\n\t\t}\r\n\r\n\t\thotspot.Opacity > 0 ? hotspotDOM.style.setProperty('opacity', `${hotspot.Opacity}`) : hotspotDOM.style.setProperty('opacity', `${HOTSPOT_DEFAULT_OPACITY}`);\t\t\r\n\r\n\t\tswitch (hotspot.Shape) {\r\n\t\t\tcase \"Rectangle\":\r\n\t\t\t\thotspotDOM.classList.add('mediasite-player__hotspot-rectangle');\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"Circle\":\r\n\t\t\tdefault:\r\n\t\t\t\thotspotDOM.classList.add('mediasite-player__hotspot-circle');\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn hotspotDOM;\r\n\t}\r\n\r\n\t//For the button, since it can't be resized, we render a div to hold the button that is the size in the editor and then\r\n\t//have that parent hold the button div and justify it depending on it position on the page\r\n\t#renderButtonHotspot(hotspot, hotspotDOMHolder) {\r\n\t\thotspotDOMHolder.classList.add('mediasite-player__hotspot-holder');\r\n\r\n\t\thotspotDOMHolder.style.setProperty('height', `${hotspot.Height * 100}%`);\r\n\t\thotspotDOMHolder.style.setProperty('width', `${hotspot.Width * 100}%`);\r\n\r\n\t\tconst xAlignment = this.#getAlignmentValue(hotspot.X);\r\n\t\tconst yAlignment = this.#getAlignmentValue(hotspot.Y);\r\n\r\n\t\thotspotDOMHolder.style.setProperty('justify-content', xAlignment);\r\n\t\thotspotDOMHolder.style.setProperty('align-items', yAlignment);\r\n\r\n\t\tconst hotspotDOM = document.createElement('div');\r\n\t\thotspotDOM.classList.add('mediasite-player__hotspot-button');\r\n\t\thotspotDOM.setAttribute(\"role\", \"button\");\r\n\t\thotspotDOM.setAttribute(\"tabindex\", \"0\");\r\n\r\n\t\thotspotDOM.textContent = hotspot.DisplayText;\r\n\r\n\t\tconst mainInteractionColors = getInteractionColorsFromColor(hotspot.Color, hotspot.SecondaryColor);\r\n\t\thotspotDOM.style.setProperty(\"--main-background-color\", `${mainInteractionColors.MainColor}`);\r\n\t\thotspotDOM.style.setProperty(\"--main-background-hover-color\", `${mainInteractionColors.HoverColor}`);\r\n\t\thotspotDOM.style.setProperty('--main-background-active-color', `${mainInteractionColors.ActiveColor}`);\r\n\t\thotspotDOM.style.setProperty('--main-secondary-color', `${mainInteractionColors.TextColor}`);\r\n\t\thotspotDOM.style.setProperty('--main-secondary-hover-color', `${mainInteractionColors.HoverTextColor}`);\r\n\t\thotspotDOM.style.setProperty('--main-secondary-active-color', `${mainInteractionColors.ActiveTextColor}`);\r\n\r\n\t\thotspotDOM.style.fontSize = this.#convertTextSizeIntoPx(hotspot.TextSize);\r\n\t\thotspotDOMHolder.appendChild(hotspotDOM);\r\n\r\n\t\treturn hotspotDOMHolder;\r\n\t}\r\n\r\n\t#getAlignmentValue(offset) {\r\n\t\tconst firstBreakPoint = .33;\r\n\t\tconst secondBreakPoint = .67;\r\n\r\n\t\tif (offset <= firstBreakPoint) {\r\n\t\t\treturn 'flex-start';\r\n\t\t} else if (offset <= secondBreakPoint) {\r\n\t\t\treturn 'center';\t\t\t\r\n\t\t} else {\r\n\t\t\treturn 'flex-end';\r\n\t\t}\t\t\r\n\t}\r\n\r\n\t#renderTextHotspot(hotspot, hotspotDOM) {\r\n\t\thotspotDOM.style.setProperty('height', `${hotspot.Height * 100}%`);\r\n\t\thotspotDOM.style.setProperty('width', `${hotspot.Width * 100}%`);\r\n\r\n\t\thotspotDOM.classList.add('mediasite-player__hotspot-text');\r\n\t\thotspotDOM.textContent = hotspot.DisplayText;\r\n\t\thotspotDOM.style.setProperty('color', `${hotspot.Color}`);\r\n\t\thotspotDOM.style.setProperty('--secondary-color', `${hotspot.SecondaryColor}`);\r\n\t\thotspotDOM.style.setProperty('--text-alignment', `${hotspot.TextAlignment}`);\r\n\r\n\t\thotspotDOM.style.fontSize = this.#convertTextSizeIntoPx(hotspot.TextSize);\t\t\r\n\r\n\t\treturn hotspotDOM;\r\n\t}\r\n\r\n\t#convertTextSizeIntoPx(fontSize) {\r\n\t\tswitch (fontSize) {\r\n\t\t\tcase \"Small\":\r\n\t\t\t\treturn \"12px\";\r\n\t\t\tcase \"Medium\":\r\n\t\t\t\treturn \"18px\";\r\n\t\t\tcase \"Large\":\r\n\t\t\t\treturn \"24px\";\r\n\t\t\tdefault:\r\n\t\t\t\treturn \"12px\";\r\n\t\t}\r\n\t}\r\n\r\n\tdeleteHotspot(id) {\r\n\t\tconst targetHotspot = _renderedHotspots[id];\r\n\t\tif (_isCurrentVideo360) {\r\n\t\t\tthis.player.video360?.().removeObject(targetHotspot);\r\n\t\t} else {\r\n\t\t\ttargetHotspot.remove();\r\n\t\t}\r\n\t}\r\n\r\n\tclear() {\r\n\t\tconst timedEventIds = Object.keys(_renderedHotspots);\r\n\r\n\t\tfor (const id of timedEventIds) {\r\n\t\t\tthis.deleteHotspot(id);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default HotspotsPlugin;","/*\r\n * Copied over from Sf.GetNavBarColors and modified to work with a background and text color.\r\n * Orginal function based all four color purely upon the background color.\r\n */\r\nexport function getInteractionColorsFromColor(background, text) {\r\n    const backgroundHSL = hexToHsl(background);\r\n\r\n    const h = backgroundHSL.h;\r\n    const s = backgroundHSL.s;\r\n    const l = backgroundHSL.l;\r\n\r\n    const shouldHoverDarken = (l > 50);\r\n\r\n    let backgroundHoverLightness = l + 10;\r\n    let backgroundActiveLightness = l - 10;\r\n    if (shouldHoverDarken) {\r\n        backgroundHoverLightness = l - 10;\r\n        backgroundActiveLightness = l + 10;\r\n    }\r\n\r\n    var colorInHSL = 'hsl(' + h + ', ' + s + '%, ' + l + '%)';\r\n    var hoverColorInHSL = 'hsl(' + h + ', ' + s + '%, ' + backgroundHoverLightness + '%)';\r\n    var activeColorInHSL = 'hsl(' + h + ', ' + s + '%, ' + backgroundActiveLightness + '%)';\r\n\r\n    const textHSL = hexToHsl(text);\r\n\r\n    let textHoverLightness = textHSL.l + 10;\r\n    let textActiveLightness = textHSL.l - 10;\r\n    if (shouldHoverDarken) {\r\n        textHoverLightness = textHSL.l - 10;\r\n        textActiveLightness = textHSL.l + 10;\r\n    }\r\n\r\n    var textColorInHSL = 'hsl(' + textHSL.h + ', ' + textHSL.s + '%, ' + textHSL.l + '%)';\r\n    var hoverTextColorInHSL = 'hsl(' + textHSL.h + ', ' + textHSL.s + '%, ' + textHoverLightness + '%)';\r\n    var activeTextColorInHSL = 'hsl(' + textHSL.h + ', ' + textHSL.s + '%, ' + textActiveLightness + '%)';\r\n\r\n    return {\r\n        MainColor: colorInHSL,\r\n        HoverColor: hoverColorInHSL,\r\n        ActiveColor: activeColorInHSL,\r\n        TextColor: textColorInHSL,\r\n        HoverTextColor: hoverTextColorInHSL,\r\n        ActiveTextColor: activeTextColorInHSL\r\n    };\r\n\r\n    function hexToHsl(hex) {\r\n        let hexToParse;\r\n        if (hex.length === 4) {\r\n            hexToParse = `#${hex.substring(1)}${hex.substring(1)}`;\r\n        } else {\r\n            hexToParse = hex;\r\n        }\r\n        var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hexToParse);\r\n\r\n        //Getthe hsl values (convert to rgb first)\r\n        var r = parseInt(result[1], 16);\r\n        var g = parseInt(result[2], 16);\r\n        var b = parseInt(result[3], 16);\r\n\r\n        r /= 255, g /= 255, b /= 255;\r\n        var max = Math.max(r, g, b), min = Math.min(r, g, b);\r\n        var h, s, l = (max + min) / 2;\r\n\r\n        if (max == min) {\r\n            h = s = 0; // achromatic\r\n        } else {\r\n            var d = max - min;\r\n            s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n            switch (max) {\r\n                case r: h = (g - b) / d + (g < b ? 6 : 0); break;\r\n                case g: h = (b - r) / d + 2; break;\r\n                case b: h = (r - g) / d + 4; break;\r\n            }\r\n            h /= 6;\r\n        }\r\n\r\n        s = s * 100;\r\n        s = Math.round(s);\r\n        l = l * 100;\r\n        l = Math.round(l);\r\n        h = Math.round(360 * h);\r\n\r\n        return {\r\n            s: s,\r\n            l: l,\r\n            h: h\r\n        }\r\n    }\r\n\r\n    function hslToHex(hsl) {\r\n        hsl = hsl.match(/^hsla?\\(\\s?(\\d+)(?:deg)?,?\\s(\\d+)%,?\\s(\\d+)%,?\\s?(?:\\/\\s?\\d+%|\\s+[\\d+]?\\.?\\d+)?\\)$/i);\r\n        if (!hsl) {\r\n            return null;\r\n        }\r\n        let h = hsl[1];\r\n        let s = hsl[2];\r\n        let l = hsl[3];\r\n        h /= 360;\r\n        s /= 100;\r\n        l /= 100;\r\n        let r, g, b;\r\n        if (s === 0) {\r\n            r = g = b = l;\r\n        } else {\r\n            const hue2rgb = function (p, q, t) {\r\n                if (t < 0) t += 1;\r\n                if (t > 1) t -= 1;\r\n                if (t < 1 / 6) return p + (q - p) * 6 * t;\r\n                if (t < 1 / 2) return q;\r\n                if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\r\n                return p;\r\n            };\r\n            const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\r\n            const p = 2 * l - q;\r\n            r = hue2rgb(p, q, h + 1 / 3);\r\n            g = hue2rgb(p, q, h);\r\n            b = hue2rgb(p, q, h - 1 / 3);\r\n        }\r\n        const toHex = function (x) {\r\n            const hex = Math.round(x * 255).toString(16);\r\n            return hex.length === 1 ? '0' + hex : hex;\r\n        };\r\n        return '#' + toHex(r) + toHex(g) + toHex(b);\r\n    }\r\n}","import videojs from 'video.js';\r\n\r\nconst _existingLayout = new WeakMap();\r\n\r\n/**\r\n * Gets a reference to the main layout container within the player. Most child components added by plugins should be inserted here.\r\n * @memberof MediasitePlayer#\r\n * @returns {videojs.Component}\r\n * @example\r\n * player.layout().addChild(someCustomVideoJsComponent);\r\n */\r\nfunction layout() {\r\n    let existingLayout = _existingLayout.get(this);\r\n    if (!existingLayout) {\r\n        const Component = videojs.getComponent('Component');\r\n        existingLayout = new Component(this);\r\n        existingLayout.addClass('mediasite-player__layout');\r\n        _existingLayout.set(this, existingLayout);\r\n\r\n        // Video element gets special treatment in iOS from Video.js and lives at index 0. Attempting to use 0 causes errors in Safari.\r\n        this.ready(() => this.addChild(existingLayout, {}, 1));\r\n    }\r\n    return existingLayout;\r\n}\r\n\r\nexport default layout;\r\n","import deepmerge from 'deepmerge';\r\nimport { isPlainObject } from 'is-plain-object';\r\nimport { runPlayerExtension } from '../../../util/player-extensions.js';\r\n\r\n/**\r\n * \r\n * @param {any} player\r\n * @param {string} presentationId\r\n * @param {PlayCoverData} playCoverData\r\n * @param {PresentationData} presentationData\r\n * @param {Array<LoaderCallback>} loaderHooks\r\n * @returns {Promise<PresentationData>}\r\n */\r\nexport function applyLoaderCallbacks(player, presentationId, playCoverData, presentationData, loaderHooks) {\r\n    const hooks = loaderHooks.map(hook => hook?.(presentationId, playCoverData, presentationData));\r\n    const extensions = presentationData.playerExtensions ?? [];\r\n    const extensionHooks = getPlayerExtensionHooks(player, extensions);\r\n    hooks.push(...extensionHooks);\r\n\r\n    return Promise.all(hooks).then(pluginResults => {\r\n        const result = deepmerge.all(\r\n            [presentationData, ...pluginResults.filter(val => val !== undefined)],\r\n            { isMergeableObject: isPlainObject }\r\n        );\r\n        return result;\r\n    });\r\n}\r\n\r\nfunction getPlayerExtensionHooks(player, extensions) {\r\n    const SKIP_EXTENSION_TYPES = ['Mediasite.Player.PollNotification', 'Mediasite.Player.SurveyExtension', 'Mediasite.Player.CopyrightExtension'];\r\n    const results = [];\r\n\r\n    extensions.forEach(function (extension) {\r\n        if (SKIP_EXTENSION_TYPES.includes(extension.ExtensionType)) {\r\n            // Some legacy extensions are now built into the player.\r\n            // The server-side data for those extensions still necessary, \r\n            // so leave all that in and specifically don't load the,\r\n            // now unnecessary, extension code.\r\n            return;\r\n        }\r\n\r\n        let promise = runPlayerExtension(videojs, player, extension);\r\n        results.push(promise);\r\n    });\r\n\r\n    return results;\r\n}\r\n","\r\nexport async function runPlayerExtension(videojs, player, extension) {\r\n    const extensionUrl = `${extension.ExtensionBasePath}extension.js`;\r\n    let result;\r\n\r\n    try {\r\n        player.log(`Attempting to run player extension of type ${extension.ExtensionType} from URL ${extensionUrl}`);\r\n\r\n        const { default: extensionFunc } = await import(/* webpackIgnore: true */ extensionUrl);\r\n\r\n        result = extensionFunc(videojs, player, extension.Data);\r\n        if (!isPromise(result)) {\r\n            result = Promise.resolve();\r\n        }\r\n    } catch (err) {\r\n        player.log(`Failed to run player extension of type ${extension.ExtensionType} from URL ${extensionUrl}`);\r\n        result = Promise.reject(`${err.name}: ${err.message}`);\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\nfunction isPromise(val) {\r\n    return typeof val === 'object' && typeof val.then === 'function';\r\n}","import { PlayerPresentationStatus } from '../../../api/presentation.js';\r\n\r\n/**\r\n * @param {PresentationData} presentationData\r\n * @returns {Promise<PresentationData>}\r\n */\r\nexport function ensurePresentationAvailable(presentationData) {\r\n    const availableStatuses = [\r\n        PlayerPresentationStatus.Viewable,\r\n        PlayerPresentationStatus.Scheduled\r\n    ];\r\n    const { playerPresentationStatus: status } = presentationData.metadata;\r\n    if (availableStatuses.includes(status)) {\r\n        return Promise.resolve(presentationData);\r\n    }\r\n    else {\r\n        return Promise.reject(presentationData.metadata.playerPresentationStatusMessage);\r\n    }\r\n}\r\n","import videojs from 'video.js';\r\n\r\nimport { loadPresentationData, overrideServerSettings, ensurePresentationAvailable, applyLoaderCallbacks, applyPlayerSource, applyPlayerOptions } from './loader/';\r\nimport { isPresentationId } from '../../util';\r\nimport { QueryStringParamProvider, getPresentationId } from '../../implementations/player-page/helpers.js';\r\nimport { getPosterInfo, PresentationStatus } from '../../api/presentation';\r\nimport { reportMediaOpen } from '../../api/player';\r\n\r\nconst _options = new WeakMap();\r\nconst _currentOptions = new WeakMap();\r\nconst _presentationId = new WeakMap();\r\nconst _previousPresentationIds = new WeakMap();\r\nconst _isLoadingNewPresentation = new WeakMap();\r\n\r\nconst _playCoverData = new WeakMap();\r\nconst _presentationData = new WeakMap();\r\n\r\nconst _playCoverPromise = new WeakMap();\r\nconst _presentationPromise = new WeakMap();\r\n\r\nconst _playCoverCallbacks = new WeakMap();\r\nconst _presentationCallbacks = new WeakMap();\r\n\r\n/**\r\n * The Loader module.\r\n * @member {LoaderPlugin} loader\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Provides methods to assist with the loading of Mediasite data from the server.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass LoaderPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        _playCoverCallbacks.set(this, []);\r\n        _presentationCallbacks.set(this, []);\r\n\r\n        const { presentationId, ...initOptions } = options;\r\n        if (presentationId) {\r\n            this.init(presentationId, initOptions);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * The ID of the Mediasite presentation associated with this player\r\n     * @type {string}\r\n     * @example\r\n     * const presentationId = player.loader.presentationId;\r\n     */\r\n    get presentationId() {\r\n        return _presentationId.get(this);\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the play cover has been loaded yet.\r\n     * @type {boolean}\r\n     * @example\r\n     * const isPlayCoverLoaded = player.loader.playCoverLoaded;\r\n     */\r\n    get playCoverLoaded() {\r\n        return !(!_playCoverData.get(this));\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the presentation has been loaded yet and the play cover dismissed.\r\n     * @type {boolean}\r\n     * @example\r\n     * const isPresentationLoaded = player.loader.presentationLoaded;\r\n     */\r\n    get presentationLoaded() {\r\n        return !(!_presentationData.get(this));\r\n    }\r\n\r\n    /**\r\n    * Sets up the player for the given presentation and begins loading the play cover data.\r\n    * @param {string} presentationId The ID of the presentation to load.\r\n    * @param {Object} [options]\r\n    * @param {number} [options.playFrom] A time in seconds at which to begin playback.\r\n    * @param {Object} [options.overrides]\r\n    * @private\r\n    * @returns {Promise} A Promise that is resolved with the play cover data when the play cover has finished loading.\r\n    */\r\n    init(presentationId, options = {}) {\r\n        let playCoverPromise = _playCoverPromise.get(this);\r\n\r\n        if (!playCoverPromise) {\r\n            this.log(`Attempting to load play cover data for presentation with ID: ${presentationId}`);\r\n            this.player.addClass('vjs-waiting');\r\n\r\n            _presentationId.set(this, presentationId);\r\n            _options.set(this, options);\r\n\r\n            let coverVisible = options.overrides?.playcover?.visible;\r\n            playCoverPromise = getPosterInfo(presentationId, coverVisible).then(async (playCoverData) => {\r\n                //if either we're already live or if we're autoplaying, we want to hide the playcover\r\n                const params = new QueryStringParamProvider(location.search);\r\n                const autoPlayParam = params.getParamFromOptions(['autostart', 'autoplay']);\r\n                if (playCoverData.playStatus == PresentationStatus.Live) {\r\n                    if (autoPlayParam === 'false') {\r\n                        coverVisible = true;\r\n                    } else {\r\n                        coverVisible = false;\r\n                    }\r\n                } else if (autoPlayParam === 'true') {\r\n                    coverVisible = false;\r\n                }\r\n\r\n                options.overrides.playcover.visible = coverVisible;\r\n                _options.set(this, options);\r\n\r\n                //Sets title in playcover lower left\r\n                this.player.metadata().title = playCoverData.title;\r\n                this.player.playcover().visible = coverVisible;\r\n\r\n                if (coverVisible) {\r\n                    // Todo: include this in the playCoverCallbacks so that loading is delayed until the poster image has been loaded over the network\r\n                    const posterPromise = new Promise((resolve, reject) => {\r\n                        if (!playCoverData.poster) {\r\n                            reject();\r\n                        } else {\r\n                            const img = document.createElement('img');\r\n                            img.addEventListener('load', () => {\r\n                                this.player.poster(playCoverData.poster);\r\n                                resolve();\r\n                            });\r\n                            img.src = playCoverData.poster;\r\n                        }\r\n                    }).catch(() => {\r\n                        this.log('There was not a valid playcover poster to display.');\r\n                    });\r\n                }\r\n                const playCoverCallbacks = _playCoverCallbacks.get(this);\r\n                const { playerOptions } = await applyLoaderCallbacks(this.player, presentationId, playCoverData, { playerOptions: _options.get(this)?.overrides ?? {} }, playCoverCallbacks);\r\n                applyPlayerOptions(this.player, playerOptions);\r\n\r\n                _playCoverData.set(this, playCoverData);\r\n                this.player.removeClass('vjs-waiting');\r\n                this.player.trigger('playcoverloaded');\r\n                this.log('Finished loading play cover data.');\r\n\r\n                if (!coverVisible || !isPresentationId(presentationId)) {\r\n                    this.loadPresentation();\r\n                }\r\n\r\n                if (isPresentationId(presentationId) && playCoverData.playStatus === PresentationStatus.NotAvailable) {\r\n                    this.player.playcover().showPlayButton = false;\r\n                    this.player.removeClass('vjs-waiting');\r\n                    this.player.showMessage('The presentation is currently unavailable. Please try again later.', { uncloseable: true });\r\n                }\r\n\r\n                return playCoverData;\r\n            });\r\n\r\n            _playCoverPromise.set(this, playCoverPromise);\r\n        }\r\n\r\n        return playCoverPromise;\r\n    }\r\n\r\n\r\n    applyLiveWait(presentationData) {\r\n        const streams = presentationData.streams;\r\n        if (presentationData?.metadata?.playStatus === 'OnDemand' || presentationData?.metadata?.playStatus === 'NotAvailable' || presentationData?.metadata?.playStatus == null || !this.player?.live) {\r\n            return Promise.resolve(presentationData);\r\n        } else {\r\n            this.player.live().segmentLength = streams.find(src => this.player.canPlayType(src?.items[0]?.type))?.items[0]?.segmentLength ?? this.player.live()?.segmentLength;\r\n            return this.player.live().waitUntilSafe().then(() => {\r\n                return Promise.resolve(presentationData);\r\n            });\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n    * Begins loading the presentation, requesting the needed data from the server in the process.\r\n    * @returns {Promise<PresentationData>} A Promise that is resolved when the presentation has finished loading and the play cover has been dismissed.\r\n    * @example\r\n    * player.loader.loadPresentation().then(() => {\r\n    *     console.log('Presentation has been loaded, and the play cover has been dismissed.');\r\n    * });\r\n    */\r\n    loadPresentation() {\r\n        let presentationPromise = _presentationPromise.get(this);\r\n\r\n        if (!presentationPromise) {\r\n            this.log(`Attempting to load presentation data for presentation with ID: ${this.presentationId}`);\r\n            this.player.addClass('vjs-waiting');\r\n\r\n            const presentationCallbacks = _presentationCallbacks.get(this);\r\n            presentationPromise = loadPresentationData(this.presentationId)\r\n                .then(data => overrideServerSettings(data, _options.get(this)?.overrides))\r\n                .then(ensurePresentationAvailable)\r\n                .then(data => this.applyLiveWait(data))\r\n                .then(data => applyLoaderCallbacks(this.player, this.presentationId, _playCoverData.get(this), data, presentationCallbacks))\r\n                .then(data => applyPlayerSource(this.player, data)).then(async (presentationData) => {\r\n                    const duration = this.player.duration();\r\n                    this.initBookmarkStorage(duration, presentationData.metadata.serverClockSkew);\r\n                    const playFrom = _options.get(this).playFrom ?? (presentationData.metadata.bookmark || this.getStoredBookmarkPosition());\r\n\r\n                    const playStatus = presentationData.metadata.playStatus;\r\n                    const isDVR = presentationData.playerOptions.live?.enableDvr;\r\n\r\n                    let seekDisabledInQuizSettings = false;\r\n                    if (this.player.usingPlugin('quizzes')) {\r\n                        seekDisabledInQuizSettings = !this.player.quizzes().enableSeeking;\r\n                    }\r\n\r\n                    //during live presentation, a user isn't able to seek, unless it is DVR. Thus, we should be at the live edge\r\n                    if (playStatus === PresentationStatus.Live || playStatus === PresentationStatus.LivePaused) {\r\n                        //if it is DVR, respect the playfrom value. If it is infinity, that's slang for moving it to the edge of the presentation\r\n                        if (isDVR) {\r\n                            if (playFrom === Infinity) {\r\n                                this.player.getChild('LiveTracker')?.seekToLiveEdge();\r\n                            } else {\r\n                                this.seekToPlayFrom(playFrom);\r\n                            }\r\n                        } else {\r\n                            this.player.getChild('LiveTracker')?.seekToLiveEdge();\r\n                        }\r\n                    } else { //Dealing with playfrom when it comes to On Demand content\r\n                        //move the player's current time to the playfrom time as long as quizzing's seeking is not disabled\r\n                        //why just quizzing disabling seeking? This would enable someone to use the playfrom parameter to retake a subquiz\r\n                        //which would be cheating possibly\r\n                        if (!seekDisabledInQuizSettings) {\r\n                            this.seekToPlayFrom(playFrom);\r\n                        }\r\n                    }\r\n\r\n                    //if the duration parameter has been set, pause the video after the amount of time stated in the parameter\r\n                    this.initDurationPause(_options.get(this).duration, playFrom, duration);\r\n\r\n                    this.player.bookmarkStorage().lastStartTime = playFrom >= 0 ? playFrom : 0;\r\n                    this.player.inactivity().sessionTimeout = presentationData.playerOptions?.inactivity?.sessionTimeout;\r\n                    const playbackTicket = this.player.reporting().playbackTicket;\r\n                    if (playbackTicket) {\r\n                        reportMediaOpen(playbackTicket);\r\n                    }\r\n                    this.player.reporting().reportToDataProvider(this.player.reporting().playbackTicket);\r\n                    this.player.reporting().trackPresentation();\r\n                    //Sets title for info sidebar when playcover doesn't exist\r\n                    this.player.metadata().title = presentationData.metadata.title;\r\n\r\n                    if (presentationData.playerOptions?.seekThumbnails?.enabled && !seekDisabledInQuizSettings) {\r\n                        this.player.seekThumbnails().init(presentationData.playerOptions?.seekThumbnails?.thumbData);\r\n                    }\r\n\r\n                    this.player.removeClass('vjs-waiting');\r\n                    _presentationData.set(this, presentationData);\r\n                    this.player.trigger('presentationloaded');\r\n                    this.log('Finished loading presentation data.');\r\n                    return presentationData;\r\n                }).catch((error) => { //this does swallow a lot of code errors that occur when developing, so consider commenting out when deving\r\n                    //let's make sure we display any issues that went wrong to the user so that they don't just sit and watch the spinner forever (MVP#1104)\r\n                    this.player.error(error.message);\r\n                });\r\n\r\n            _presentationPromise.set(this, presentationPromise);\r\n            _currentOptions.set(this, _options.get(this));\r\n        }\r\n\r\n        return presentationPromise;\r\n    }\r\n\r\n    /**\r\n     * @callback LoaderCallback\r\n     * @param {string} presentationId\r\n     * @param {PresentationData} presentationData\r\n     * @param {PlayCoverData} playCoverData\r\n     */\r\n\r\n    /**\r\n     * Registers a callback that will be passed the play cover information once loading has completed, but before the \"loading\" spinner has been dismissed.\r\n     * @param {LoaderCallback} callback\r\n     */\r\n    onLoadPlayCover(callback) {\r\n        _playCoverCallbacks.get(this).push(callback);\r\n    }\r\n\r\n    /**\r\n     * Registers a callback that will be passed the presentation information once loading has completed, but before the play cover has been dismissed or playback begun.\r\n     * @param {LoaderCallback} callback\r\n     */\r\n    onLoadPresentation(callback) {\r\n        _presentationCallbacks.get(this).push(callback);\r\n    }\r\n\r\n    /**\r\n     * Initializes the bookmarkStorage plugin by setting presentation Id, duration, and server clock skew.\r\n     * @param {number} duration\r\n     * @param {number} skew\r\n     */\r\n    initBookmarkStorage(duration, skew) {\r\n        if (!this.player.reporting().includeBookmark) {\r\n            return;\r\n        }\r\n        const storage = this.player.bookmarkStorage();\r\n        storage.presentationId = this.presentationId;\r\n        storage.presentationDuration = duration;\r\n        storage.clockSkew = skew;\r\n    }\r\n\r\n    /**\r\n     * Gets the position in seconds from any locally stored bookmark.\r\n     * @returns {number} the position, in seconds, to start playback from\r\n     */\r\n    getStoredBookmarkPosition() {\r\n        if (!this.player.reporting().includeBookmark) {\r\n            return 0;\r\n        }\r\n        const storage = this.player.bookmarkStorage();\r\n        return storage.retrieve().position ?? 0;\r\n    }\r\n\r\n    /**\r\n     * Creates a timed event after x amount of seconds to pause the presentation\r\n     * @param {any} durationPause\r\n     * @param {any} playFrom\r\n     */\r\n    initDurationPause(durationPause, playFrom, duration) {\r\n        if (!durationPause) {\r\n            return;\r\n        }\r\n        //offset the pausing by where the video is starting to play from\r\n        //either through the PlayFrom parameter or bookmarking\r\n        if (playFrom && playFrom !== Infinity && playFrom + durationPause < duration) {\r\n            durationPause += playFrom;\r\n        }\r\n\r\n        this.player.timedEvents().add({\r\n            id: 'duration-pause',\r\n            time: durationPause,\r\n            duration: 1,\r\n            type: 'hidden'\r\n        }, () => this.player.pause());\r\n    }\r\n\r\n    /**\r\n     * Seeks the presentation to the specific time, checking that we aren't trying to just end the video\r\n     * @param {any} playFrom\r\n     */\r\n    seekToPlayFrom(playFrom) {\r\n        if (playFrom !== Math.round(this.player.duration())) {\r\n            this.player.currentTime(playFrom);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Transitions the player to a new presentation without leaving the page\r\n     * @param {string} presentationId\r\n     * @param {boolean} savePreviousId\r\n     */\r\n    loadNewPresentation(presentationId, savePreviousId = true) {\r\n        if (!isPresentationId(presentationId) || _isLoadingNewPresentation.get(this)) {\r\n            return;\r\n        }\r\n        const previousOptions = _currentOptions.get(this);\r\n        previousOptions.overrides.playcover.visible = false;\r\n\r\n        if (savePreviousId) {\r\n            this.#savePreviousId();\r\n        }\r\n\r\n        //we want to stay in the same XR state we were in when we triggered the new presentation, so let's grab the xr state now and ask the\r\n        //video 360 plugin to stick us back in XR if we were before the switch\r\n        let inXR = false;\r\n        const isPreviousVideo360 = _presentationData.get(this).metadata.is360Video;\r\n\r\n        if (isPreviousVideo360) {\r\n            inXR = this.player.video360?.().isInXR();\r\n            this.player.xr().hasPlayerLoadedXR = false; //resets this values that gets set to true when the presentation loads its XR info\r\n        }\r\n\r\n        _playCoverPromise.set(this, null);\r\n        _presentationPromise.set(this, null);\r\n        _isLoadingNewPresentation.set(this, true);\r\n\r\n        //any plugin that adds elements without overriding the previous option needs to be cleared out before loading in the new presentation\r\n        this.#resetPlugins();\r\n\r\n        //we don't want future items in the playlist to also loop\r\n        this.player.banner().isLooping = false;\r\n\r\n        //configure the player so that it is prepared to handle the new presentation\r\n        this.player.pause();\r\n        this.player.autoplay(true);\r\n\r\n        this.player.trigger(\"loadnewpresentation\");\r\n\r\n        this.init(presentationId, previousOptions).then(() => {\r\n            if (inXR) {\r\n                this.player.video360?.().enterXROnInit();\r\n            }\r\n        });\r\n\r\n        this.player.one('presentationloaded', () => {\r\n            const isNextVideo360 = _presentationData.get(this).metadata.is360Video;\r\n            // deactive any 360 stuff if the next video isn't 360\r\n            if (isPreviousVideo360 && !isNextVideo360) {\r\n                this.player.video360?.().xrDispose();\r\n            }\r\n            _isLoadingNewPresentation.set(this, false);\r\n        });\r\n\r\n        this.player.currentTime(0);\r\n    }\r\n\r\n    #savePreviousId() {\r\n        const previousPresentationId = _presentationId.get(this);\r\n        let previousPresentationIds = _previousPresentationIds?.get(this);\r\n        if (!previousPresentationIds) {\r\n            previousPresentationIds = [];\r\n        }\r\n\r\n        previousPresentationIds.push(previousPresentationId);\r\n        _previousPresentationIds.set(this, previousPresentationIds);\r\n    }\r\n\r\n    #resetPlugins() {\r\n        this.player.audioDescriptions().clear();\r\n        this.player.background().clear();\r\n        this.player.captions().clear();\r\n        this.player.chapters().clear();\r\n        this.player.seekBarSegments().clear();\r\n        this.player.hotspots().clear();\r\n        this.player.timedEvents().clear();\r\n\r\n        if (videojs.getPlugin(\"conviva\")) {\r\n            this.player.conviva().dispose();\r\n        }\r\n\r\n        if (videojs.getPlugin(\"quizzes\")) {\r\n            this.player.quizzes().dispose();\r\n        }\r\n\r\n        if (videojs.getPlugin(\"multistream\")) {\r\n            this.player.multistream().dispose();\r\n        }        \r\n    }\r\n\r\n    /**\r\n     * Loads the previous presentation that was loaded before the current one\r\n     */\r\n    loadPreviousPresentation() {\r\n        const previousPresentationId = _previousPresentationIds?.get(this).pop();\r\n        this.loadNewPresentation(previousPresentationId, false);\r\n    }\r\n\r\n    /**\r\n     * Checks to see if the presentation we are currently on is the presentation that was first loaded \r\n     */\r\n    isCurrentPresentationOriginal() {\r\n        const currentPresentationId = _presentationId.get(this);\r\n        const originalPresentationId = getPresentationId(location.pathname, window.SiteData?.PresentationId);\r\n\r\n        return (currentPresentationId === originalPresentationId);\r\n    }\r\n}\r\n\r\nexport default LoaderPlugin;\r\n","import { getMetadata, getStreams, getAudioDescriptionUrl, getDownloads, getCaptions, getChapters, getHotspots, getTimedEvents, getCompositionMap, getCompositionList, getPresentationOptions } from '../../../api/presentation';\r\nimport { getOptions, getExtensions } from '../../../api/player';\r\n\r\n/**\r\n * @param {string} presentationId\r\n * @returns {Promise<PresentationData>}\r\n */\r\nexport async function loadPresentationData(presentationId) {\r\n    const [\r\n        metadata,\r\n        streams,\r\n        audioDescriptionUrl,\r\n        downloads,\r\n        captions,\r\n        chapters,\r\n        hotspots,\r\n        timedEvents,\r\n        playerOptions,\r\n        playerExtensions,\r\n        compositionMap,\r\n        compositionList,\r\n        presentationOptions\r\n    ] = await Promise.all([\r\n        getMetadata(presentationId),\r\n        getStreams(presentationId),\r\n        getAudioDescriptionUrl(presentationId),\r\n        getDownloads(presentationId),\r\n        getCaptions(presentationId),\r\n        getChapters(presentationId),\r\n        getHotspots(presentationId),\r\n        getTimedEvents(presentationId),\r\n        getOptions(presentationId),\r\n        getExtensions(presentationId),\r\n        getCompositionMap(presentationId),\r\n        getCompositionList(presentationId),\r\n        getPresentationOptions(presentationId)\r\n    ]);\r\n\r\n    return {\r\n        metadata,\r\n        streams,\r\n        audioDescriptionUrl,\r\n        downloads,\r\n        captions,\r\n        chapters,\r\n        hotspots,\r\n        timedEvents,\r\n        playerOptions,\r\n        playerExtensions,\r\n        compositionMap,\r\n        compositionList,\r\n        presentationOptions\r\n    }\r\n}\r\n","/**\r\n * @param {PresentationData} presentationData\r\n * @param {any} overrides\r\n * @returns {Promise<PresentationData>}\r\n */\r\nexport function overrideServerSettings(presentationData, overrides = {}) {\r\n    // Apply user overrides passed to init() earlier\r\n    const playerOptions = Object.assign({}, presentationData.playerOptions);\r\n    for (const [key, value] of Object.entries(overrides)) {\r\n        switch (typeof playerOptions[key]) {\r\n            case 'object':\r\n                playerOptions[key] = Object.assign({}, playerOptions[key], value);\r\n                break;\r\n            default:\r\n                playerOptions[key] = value;\r\n                break;\r\n        }\r\n    }\r\n\r\n    return Promise.resolve(Object.assign({}, presentationData, { playerOptions }));\r\n}\r\n","import { applyPlayerOptions } from './';\r\nimport { TimedEventType } from '../../../api/presentation';\r\n\r\nimport { v4 as uuid } from 'uuid';\r\n\r\n/**\r\n * \r\n * @param {any} player\r\n * @param {PresentationData} presentationData\r\n * @returns {Promise<PresentationData>}\r\n */\r\nexport async function applyPlayerSource(player, presentationData) {\r\n    const videoUrls = presentationData.streams?.[0]?.items ?? [];\r\n    const localize = player.localize?.bind(player);\r\n\r\n    if (videoUrls.length > 0) {\r\n        player.src(videoUrls);\r\n        await new Promise(resolve => {\r\n            player.any(['loadeddata', 'loadedmetadata', 'timeupdate'], resolve);\r\n        });\r\n    }\r\n    \r\n    // Apply base presentation data\r\n    player.metadata().datetime = presentationData.metadata.unixTime;\r\n    player.metadata().description = presentationData.metadata.description;\r\n    player.metadata().presenters = presentationData.metadata.presenters;\r\n    player.metadata().supportingLinks = presentationData.metadata.supportingLinks;\r\n    player.metadata().compliancePolicyMarkdown = presentationData.metadata.compliancePolicyMarkdown;\r\n    player.reporting().playbackTicket = presentationData.playerOptions.playbackTicket;\r\n\r\n    if (presentationData.audioDescriptionUrl) {\r\n        player.audioDescriptions().src = presentationData.audioDescriptionUrl;\r\n    }\r\n    if (presentationData.captions) {\r\n        player.captions().enabled = true;\r\n        configureCaptions(player, presentationData.captions);\r\n    }\r\n    if (presentationData.chapters) {\r\n        player.chapters().enabled = true;\r\n        configureChapters(player, presentationData.chapters, localize);\r\n    }\r\n    if (presentationData.hotspots) {\r\n        player.hotspots().setIs360(presentationData.metadata.is360Video);\r\n        player.hotspots().add(presentationData.hotspots);\r\n    }\r\n\r\n    if (presentationData.timedEvents) {\r\n        for (const timedEvent of presentationData.timedEvents) {\r\n            // we're handling chapters in their own section, so let's not repeat it here\r\n            if (timedEvent.Type === TimedEventType.Chapter || timedEvent.Type === TimedEventType.Hotspot) {\r\n                continue;\r\n            }\r\n            player.timedEvents().add({\r\n                id: timedEvent.Id,\r\n                time: timedEvent.Time / 1000,\r\n                type: timedEvent.Type,\r\n                payload: timedEvent.Text\r\n            });\r\n        }\r\n    }\r\n    // Apply player options\r\n    const { playerOptions } = presentationData;\r\n    applyPlayerOptions(player, playerOptions);\r\n\r\n    if (presentationData.streams.length === 1 && presentationData.streams[0].audioOnly === true) {\r\n        player.audioOnly().hideAudioOnlyVideo();\r\n        player.settings().enablePIP = false;\r\n    }\r\n\r\n    if (player.downloads().enabled) {\r\n        for (const { text, url } of presentationData.downloads) {\r\n            player.downloads().add(url, localize(text));\r\n        }\r\n    }\r\n\r\n    return presentationData;\r\n}\r\n\r\nfunction configureCaptions(player, captionInfos) {\r\n    captionInfos.forEach(captionInfo => {\r\n        const { LanguageCode, Language, CaptionsUrl, DetailedLanguageCode } = captionInfo;\r\n        player.captions().set(LanguageCode, Language, CaptionsUrl, DetailedLanguageCode);\r\n    });\r\n    // Check and try to load selected language from previous play session\r\n    const initialTrackLanguage = player.captions().initialTrackLanguage;\r\n    const initialTextTrack = player.captions().getCaptionTrack(initialTrackLanguage);\r\n    if (initialTextTrack) {\r\n        initialTextTrack.mode = 'showing';\r\n    }\r\n}\r\n\r\nfunction configureChapters(player, chapterInfos, localize) {\r\n    //Adds a seekbar segment with a blank label that starts at 0:00 and ends at the beginning of the first configured chapter\r\n    //Fills the blank seekbar space at the beginning created when breaking up the seekbar into chapter sections\r\n    if (chapterInfos[0]?.Time !== 0.0 && chapterInfos[0] != null) {\r\n        const currentChapterStart = 0.0 / 1000;\r\n        const nextChapterStart = (chapterInfos[0]?.Time ?? 0) / 1000;\r\n        const currentChapterEnd = nextChapterStart || player.duration();\r\n\r\n        player.seekBarSegments().add({\r\n            startTime: currentChapterStart,\r\n            endTime: currentChapterEnd,\r\n            progress: true\r\n        });\r\n    }\r\n    for (let i = 0; i < chapterInfos.length; i++) {\r\n        const chapter = chapterInfos[i];\r\n        const currentChapterStart = chapter.Time / 1000;\r\n        let nextChapterStart;\r\n        if (chapterInfos[i + 1]?.Time != null) {\r\n            nextChapterStart = (chapterInfos[i + 1].Time) / 1000;\r\n        } else {\r\n            nextChapterStart = null;\r\n        }\r\n        let currentChapterEnd;\r\n        if (nextChapterStart != null) {\r\n            currentChapterEnd = nextChapterStart;\r\n        } else {\r\n            currentChapterEnd = player.duration();\r\n        }\r\n        const cue = new VTTCue(currentChapterStart, currentChapterEnd, chapter.Text);\r\n        cue.id = chapter.Id;\r\n\r\n        if (!cue.text) {\r\n            cue.text = localize('Chapter');\r\n        }\r\n\r\n        player.chapters().add(cue);\r\n        //creates a timed event for the chapter that lasts as long as the chapter itself\r\n        player.timedEvents().add({\r\n            id: cue.id,\r\n            time: currentChapterStart,\r\n            duration: currentChapterEnd - currentChapterStart,\r\n            type: TimedEventType.Chapter,\r\n            payload: cue.text\r\n        });\r\n    }\r\n}","import videojs from 'video.js';\r\n\r\nconst _tbody = new WeakMap();\r\n\r\nexport class LogTable extends videojs.getComponent('Component') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        const thead = this.el().appendChild(document.createElement('thead'));\r\n        const sourceEl = thead.appendChild(document.createElement('th'));\r\n        const descriptionEl = thead.appendChild(document.createElement('th'));\r\n        const timeEl = thead.appendChild(document.createElement('th'));\r\n\r\n        sourceEl.textContent = 'Source';\r\n        descriptionEl.textContent = 'Description';\r\n        timeEl.textContent = 'Time';\r\n\r\n        const tbody = this.el().appendChild(document.createElement('tbody'));\r\n        _tbody.set(this, tbody);\r\n    }\r\n\r\n    createEl(tag, props = {}, attributes = {}) {\r\n        tag = 'table';\r\n        return super.createEl.call(this, tag, props, attributes);\r\n    }\r\n\r\n    addLog({ source, description, time }) {\r\n        const tbody = _tbody.get(this);\r\n\r\n        const tr = tbody.appendChild(document.createElement('tr'));\r\n        const sourceEl = tr.appendChild(document.createElement('td'));\r\n        const descriptionEl = tr.appendChild(document.createElement('td'));\r\n        const timeEl = tr.appendChild(document.createElement('td'));\r\n\r\n        sourceEl.textContent = source;\r\n        descriptionEl.textContent = description;\r\n        timeEl.textContent = new Date(time).toLocaleTimeString();\r\n    }\r\n}\r\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./logging.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\nimport { LogTable } from './logging/log-table.js';\r\nimport LoggingIcon from '../../assets/images/receipt_white_24dp.svg';\r\nimport './logging.css';\r\n\r\nconst _loggingWindow = new WeakMap();\r\nconst _loggingInterval = new WeakMap();\r\nconst _logs = new WeakMap();\r\nconst _table = new WeakMap();\r\n\r\n/**\r\n * The Logging module.\r\n * @member {LoggingPlugin} logging\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Configures the visibility of a logging interface that lists various player-related events as they occur.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass LoggingPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n        _logs.set(this, []);\r\n\r\n        const Component = videojs.getComponent('Component');\r\n        const loggingWindow = new Component(player);\r\n        loggingWindow.addClass('mediasite-player__logging-window');\r\n        loggingWindow.addClass('vjs-hidden');\r\n\r\n        _loggingWindow.set(this, loggingWindow);\r\n        _loggingInterval.set(this, loggingWindow.setInterval(() => this.#updateUI(), 250));\r\n\r\n        const header = loggingWindow.el().appendChild(document.createElement('header'));\r\n        header.textContent = 'Logging';\r\n\r\n        const closeButton = header.appendChild(document.createElement('button'));\r\n        closeButton.type = 'button';\r\n        closeButton.textContent = '×';\r\n        closeButton.setAttribute('aria-label', 'Close');\r\n        closeButton.style = 'position:absolute;right:0;cursor:pointer;';\r\n        this.on(closeButton, 'click', () => this.visible = false);\r\n\r\n        const table = new LogTable(player, options);\r\n        _table.set(this, table);\r\n        loggingWindow.addChild(table);\r\n\r\n        this.on(this.player, 'keydown', (event) => {\r\n            if (['l', 'L'].includes(event.key)) {\r\n                if (event.ctrlKey && event.altKey && event.shiftKey) {\r\n                    this.visible = !this.visible;\r\n                }\r\n            }\r\n        });\r\n\r\n        this.on(this.player, 'play', () => this.log('Started playback.'));\r\n        this.on(this.player, 'pause', () => this.log('Paused playback.'));\r\n\r\n        player.ready(() => {\r\n            player.layout().addChild(loggingWindow);\r\n\r\n            const params = new URLSearchParams(location.search.toLowerCase());\r\n            if (params.get('loadlog') === 'true') {\r\n                this.visible = true;\r\n                this.player.controlbarMenu().addMenuItem('Show log window', { id: this.name, icon: LoggingIcon, callback: () => this.visible = true });\r\n            }\r\n        });\r\n    }\r\n\r\n    #updateUI() {\r\n        const logs = _logs.get(this);\r\n        const newLogs = this.player.log.history().filter(log => !logs.includes(log));\r\n        const table = _table.get(this);\r\n\r\n        const loggingWindowEl = _loggingWindow.get(this).el();\r\n        const isAtBottom = Math.round(loggingWindowEl.scrollHeight - loggingWindowEl.scrollTop) === loggingWindowEl.clientHeight;\r\n        for (const log of newLogs) {\r\n            logs.push(log);\r\n            const containerEl = _loggingWindow.get(this).el();\r\n            if (containerEl.children.length < Infinity) {\r\n                const source = log[0].split(':').filter(item => !!item).splice(-1)[0].trim();\r\n                const time = new Date(Math.ceil(performance.timing.navigationStart + performance.now()));\r\n                const description = log.reduce((result, current, currentIndex) => {\r\n                    return result + ((currentIndex && typeof current === 'string') ? ` ${current}` : '');\r\n                }, '');\r\n                if (source !== 'VIDEOJS') {\r\n                    table.addLog({ source, description, time });\r\n                }\r\n            }\r\n        }\r\n\r\n        if (isAtBottom) {\r\n            loggingWindowEl.scrollTo(0, loggingWindowEl.scrollHeight);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Whether or not the logging window is currently visible.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.logging.visible = true;\r\n     */\r\n    get visible() {\r\n        const loggingWindow = _loggingWindow.get(this);\r\n        return loggingWindow && !loggingWindow.hasClass('vjs-hidden');\r\n    }\r\n    set visible(visible) {\r\n        const loggingWindow = _loggingWindow.get(this);\r\n\r\n        if (visible) {\r\n            loggingWindow.removeClass('vjs-hidden');\r\n        }\r\n        else {\r\n            loggingWindow.addClass('vjs-hidden');\r\n        }\r\n    }\r\n\r\n    dispose() {\r\n        clearInterval(_loggingInterval.get(this));\r\n\r\n        if (this.player?.usingPlugin('controlbarMenu')) {\r\n            this.player.controlbarMenu().removeMenuItem(this.name);\r\n        }\r\n        \r\n        super.dispose();\r\n    }\r\n}\r\n\r\nexport default LoggingPlugin;\r\n","let localize;\r\n\r\nexport function generateMetadataContainer(player) {\r\n    localize = player.localize?.bind(player);\r\n    const template = `<div>\r\n    <div class=\"mediasite-player__metadata-modal-header\">\r\n        <h2 class=\"mediasite-player__metadata-modal-title\"></h2>\r\n        <p class=\"mediasite-player__date-time-duration-container\">\r\n            <small class=\"mediasite-player__metadata-modal-date\"></small>\r\n            <small class=\"mediasite-player__metadata-modal-time\"></small>\r\n            <small class=\"mediasite-player__metadata-modal-duration\"></small>\r\n        </p>\r\n    </div>\r\n    <h3>${localize('Description')}:</h3>\r\n    <div class=\"mediasite-player__metadata-modal-description\"></div>\r\n    <div>\r\n        <h3>${localize('Presenters')}:</h3>\r\n        <ul class=\"mediasite-player__metadata-modal-speaker-list\"></ul>\r\n        <h3>${localize('Links')}:</h3>\r\n        <ul class=\"mediasite-player__metadata-modal-links-list\"></ul>\r\n        <div class=\"mediasite-player__metadata-modal-compliance-policy\" hidden></div>\r\n    </div>\r\n</div>`;\r\n\r\n    return convertTextToElement(template);\r\n}\r\n\r\nexport function generateSpeakerBio(name, imgUrl, bioUrl) {\r\n    let textHTML = '<li class=\"mediasite-player__speaker-bio\">';\r\n\r\n    if (imgUrl) {\r\n        textHTML += `<img alt=\"${name}\" src=\"${imgUrl}\">`;\r\n    }\r\n    else {\r\n        textHTML += `<div id=\"default-presenter\" alt=\"${name}\"></div>`;\r\n    }\r\n\r\n    if (bioUrl) {\r\n        textHTML += `<a href=\"${bioUrl}\" target=\"_blank\">${name}</a></li>`;\r\n    } else {\r\n        textHTML += `<span>${name}</span></li>`;\r\n    }\r\n\r\n    return convertTextToElement(textHTML);\r\n}\r\n\r\nexport function generateLink(title, url) {\r\n    return convertTextToElement(`<li><a href=\"${url}\" target=\"_blank\">${title}</a></li>`);\r\n}\r\n\r\nfunction convertTextToElement(html) {\r\n    const container = document.createElement('div');\r\n    container.innerHTML = html;\r\n    return container.firstElementChild;\r\n}\r\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./metadata.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\nimport marked from 'marked';\r\n\r\nimport ModalDialog from '../../components/modal-dialog.js';\r\nimport { generateMetadataContainer, generateSpeakerBio, generateLink } from './metadata/metadata-template.js';\r\n\r\nimport InfoIcon from '../../assets/images/info-white-24dp.svg';\r\nimport './metadata.css';\r\n\r\nconst _modal = new WeakMap();\r\nconst _titleEl = new WeakMap();\r\nconst _dateEl = new WeakMap();\r\nconst _timeEl = new WeakMap();\r\nconst _durationEl = new WeakMap();\r\nconst _descriptionEl = new WeakMap();\r\nconst _compliancePolicyEl = new WeakMap();\r\nconst _presentersContainerEl = new WeakMap();\r\nconst _supportingLinksContainerEl = new WeakMap();\r\nlet localize;\r\n\r\n/**\r\n * The Metadata module.\r\n * @member {MetadataPlugin} metadata\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Configures the metadata visible in various parts of the UI.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass MetadataPlugin extends videojs.getPlugin('plugin') {\r\n    /**\r\n     * \r\n     * @param {videojs.Player} player\r\n     * @param {Object} [options]\r\n     */\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, options);\r\n\r\n        const modalContentEl = generateMetadataContainer(player);\r\n        _titleEl.set(this, modalContentEl.querySelector('.mediasite-player__metadata-modal-title'));\r\n        _dateEl.set(this, modalContentEl.querySelector('.mediasite-player__metadata-modal-date'));\r\n        _timeEl.set(this, modalContentEl.querySelector('.mediasite-player__metadata-modal-time'));\r\n        _durationEl.set(this, modalContentEl.querySelector('.mediasite-player__metadata-modal-duration'));\r\n        _descriptionEl.set(this, modalContentEl.querySelector('.mediasite-player__metadata-modal-description'));\r\n        _presentersContainerEl.set(this, modalContentEl.querySelector('.mediasite-player__metadata-modal-speaker-list'));\r\n        _supportingLinksContainerEl.set(this, modalContentEl.querySelector('.mediasite-player__metadata-modal-links-list'));\r\n        _compliancePolicyEl.set(this, modalContentEl.querySelector('.mediasite-player__metadata-modal-compliance-policy'));\r\n\r\n        this.on(player, 'durationchange', this.#updateDuration);\r\n\r\n        // Set up modal and title overlay\r\n        const modal = new ModalDialog(player, {\r\n            temporary: false,\r\n            uncloseable: false,\r\n            pauseOnOpen: false,\r\n            description: 'Presentation Metadata',\r\n            displayAsPanel: true,\r\n            content: Array.from(modalContentEl.children)\r\n        });\r\n        modal.addClass('mediasite-player__metadata-modal');\r\n        modal.addClass('mediasite-player__control-bar-modal');\r\n        _modal.set(this, modal);\r\n\r\n        player.ready(() => {\r\n            player.layout().addChild(modal);\r\n            player.controlbarMenu().addMenuItem(localize('Info'), { id: this.name, icon: InfoIcon, callback: () => modal.open() });\r\n        });\r\n    }\r\n\r\n    /** \r\n     * The title of the current source media.<br><br>Note: also automatically sets the title displayed on the play cover. \r\n     * @type {string}\r\n     * @see {@link PlaycoverPlugin#title}\r\n     * @example\r\n     * player.metadata.title = 'This is the presentation title';\r\n     */\r\n    set title(title) {\r\n        _titleEl.get(this).textContent = title;\r\n        this.player.playcover().title = title;\r\n    }\r\n    get title() {\r\n        return _titleEl.get(this).textContent;\r\n    }\r\n\r\n    /** \r\n     * The date/time associated with the source media.\r\n     * @type {number}\r\n     * @example\r\n     * player.metadata.datetime = Date.now();\r\n     */\r\n    set datetime(datetime = Date.now()) {\r\n        const dateEl = _dateEl.get(this);\r\n        const timeEl = _timeEl.get(this);\r\n        const date = new Date(datetime);\r\n        dateEl.dataset.value = datetime;\r\n        dateEl.textContent = date.toLocaleDateString();\r\n        timeEl.textContent = date.toLocaleTimeString([], { timeStyle: 'short' });\r\n    }\r\n    get datetime() {\r\n        return parseInt(_dateEl.get(this).dataset.value, 10);\r\n    }\r\n\r\n    /**\r\n     * Description text that is associated with the source material.\r\n     * @type {string}\r\n     * @example\r\n     * player.metadata.description = 'This is some description text to be displayed in the metadata panel within the player.';\r\n     */\r\n    set description(description = '') {\r\n        const el = _descriptionEl.get(this);\r\n        el.innerHTML = JSON.parse(`\"${description.replaceAll('\\\\n', '<br>')}\"`);\r\n        el.dataset.value = description;\r\n        el.hidden = !(description && description.length > 0);\r\n    }\r\n    get description() {\r\n        return _descriptionEl.get(this).dataset.value;\r\n    }\r\n\r\n    /**\r\n     * A string of text that will be parsed as Markdown and displayed in the metadata modal dialog.\r\n     * @type {string}\r\n     * @example\r\n     * player.metadata.compliancePolicyMarkdown = 'This *is* **Markdown**';\r\n     */\r\n    set compliancePolicyMarkdown(compliancePolicyMarkdown) {\r\n        const el = _compliancePolicyEl.get(this);\r\n        if (compliancePolicyMarkdown) {\r\n            el.hidden = false;\r\n            el.innerHTML = marked(compliancePolicyMarkdown);\r\n            el.dataset.value = compliancePolicyMarkdown;\r\n            const links = el.querySelectorAll('a');\r\n            links.forEach((link) => link.target = '_blank');\r\n        }\r\n        else {\r\n            el.hidden = true;\r\n        }\r\n    }\r\n    get compliancePolicyMarkdown() {\r\n        return _compliancePolicyEl.get(this).dataset.value;\r\n    }\r\n\r\n    /**\r\n     * A list of presenters associated with the current source media.\r\n     * @type {Presenter[]}\r\n     * @example\r\n     * player.metadata.presenters = [{\r\n     *     bioUrl: '/path/to/bio/page/',\r\n     *     imageUrl: '/path/to/image.jpg',\r\n     *     name: 'James T. Kirk'\r\n     * }];\r\n     */\r\n    set presenters(presenters) {\r\n        const presenterContainer = _presentersContainerEl.get(this);\r\n        presenterContainer.innerHTML = '';\r\n        presenterContainer.dataset.value = JSON.stringify(presenters);\r\n\r\n        for (let i = 0; i < presenters.length; i++) {\r\n            const presenter = presenters[i];\r\n            const el = generateSpeakerBio(presenter.name, presenter.imageUrl, presenter.bioUrl);\r\n            presenterContainer.appendChild(el);\r\n        }\r\n    }\r\n\r\n    get presenters() {\r\n        return JSON.parse(_presentersContainerEl.get(this).dataset.value);\r\n    }\r\n\r\n    /**\r\n     * A list of links to display in the metadata modal dialog.\r\n     * @type {SupportingLink[]}\r\n     * @example\r\n     * player.metadata.supportingLinks = [{\r\n     *     title: 'Mediasite',\r\n     *     url: 'https://mediasite.com'\r\n     * }];\r\n     */\r\n    set supportingLinks(supportingLinks) {\r\n        const containerEl = _supportingLinksContainerEl.get(this);\r\n        containerEl.innerHTML = '';\r\n        containerEl.dataset.value = JSON.stringify(supportingLinks);\r\n\r\n        for (let i = 0; i < supportingLinks.length; i++) {\r\n            const currentLink = supportingLinks[i];\r\n\r\n            const el = generateLink(currentLink.title, currentLink.url);\r\n            containerEl.appendChild(el);\r\n        }\r\n    }\r\n\r\n    get supportingLinks() {\r\n        const containerEl = _supportingLinksContainerEl.get(this);\r\n        return containerEl.dataset.value ? JSON.parse(containerEl.dataset.value) : [];\r\n    }\r\n\r\n    /**\r\n     * Opens the metadata modal.\r\n     * @example\r\n     * player.metadata.openModal();\r\n     */\r\n    openModal() {\r\n        _modal.get(this).open();\r\n    }\r\n\r\n    /**\r\n     * Closes the metadata modal.\r\n     * @example\r\n     * player.metadata.closeModal();\r\n     */\r\n    closeModal() {\r\n        _modal.get(this).close();\r\n    }\r\n\r\n    #updateDuration() {\r\n        const isLive = this.player.usingPlugin('live');\r\n        let seconds = this.player.duration();\r\n        if (isLive) {\r\n            seconds = this.player.liveTracker.liveCurrentTime();\r\n\r\n            if (seconds === Infinity) {\r\n                seconds = 0;\r\n            }\r\n\r\n            setTimeout(() => this.#updateDuration(), 1000);\r\n        }\r\n\r\n        _durationEl.get(this).textContent = localize('Duration') + `: ${videojs.formatTime(seconds)}`;\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the date/time of publication should be displayed in the metadata UI.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.metadata.showPublishDateTime = true;\r\n     */\r\n    get showPublishDateTime() {\r\n        const dateEl = _dateEl.get(this);\r\n        const timeEl = _timeEl.get(this);\r\n        return !(dateEl.classList.contains('vjs-hidden') || timeEl.classList.contains('vjs-hidden'));\r\n    }\r\n\r\n    set showPublishDateTime(showPublishDateTime) {\r\n        const dateEl = _dateEl.get(this);\r\n        const timeEl = _timeEl.get(this);\r\n\r\n        if (showPublishDateTime) {\r\n            dateEl.classList.remove('vjs-hidden');\r\n            timeEl.classList.remove('vjs-hidden');\r\n        }\r\n        else {\r\n            dateEl.classList.add('vjs-hidden');\r\n            timeEl.classList.add('vjs-hidden');\r\n        }\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the Info button should be shown in the controlbar menu.\r\n     * @type {boolean}\r\n     */\r\n    get showControlBarButton() {\r\n        return this.player.controlbarMenu().isMenuItemEnabled(this.name);\r\n    }\r\n\r\n    set showControlBarButton(showControlBarButton) {\r\n        if (showControlBarButton) {\r\n            this.player.controlbarMenu().enableMenuItem(this.name);\r\n        }\r\n        else {\r\n            this.player.controlbarMenu().disableMenuItem(this.name);\r\n        }\r\n    }\r\n\r\n    dispose() {\r\n        const modal = _modal.get(this);\r\n        modal.dispose();\r\n\r\n        this.player?.removeChild(modal);\r\n\r\n        if (this.player?.usingPlugin('controlbarMenu')) {\r\n            this.player.controlbarMenu().removeMenuItem(this.name);\r\n        }\r\n\r\n        super.dispose();\r\n    }\r\n}\r\n\r\nexport default MetadataPlugin;\r\n\r\n/**\r\n * @typedef {Object} Presenter\r\n * @alias Presenter\r\n * @memberof MetadataPlugin\r\n * @property {string} bioUrl\r\n * @property {string} imageUrl\r\n * @property {string} name\r\n */\r\n\r\n/**\r\n * @typedef {Object} SupportingLink\r\n * @alias SupportingLink\r\n * @memberof MetadataPlugin\r\n * @property {string} title\r\n * @property {string} url\r\n */\r\n","import videojs from 'video.js';\r\nimport { v4 as uuid } from 'uuid';\r\nimport InfoIcon from '../../../assets/images/info-white-24dp.svg';\r\nimport './notification-item.css';\r\n\r\nconst TIMEOUT = 5000;\r\nlet localize;\r\n\r\nclass NotificationItem extends videojs.getComponent('Component') {\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, options);\r\n        const titleId = uuid();\r\n        const descriptionId = uuid();\r\n\r\n        this.el().setAttribute('role', 'listitem');\r\n        this.el().setAttribute('aria-labelledby', titleId);\r\n        this.addClass('mediasite-player__notification-item');\r\n\r\n        const animationClass = 'mediasite-player__notification-item--animating-in';\r\n        this.addClass(animationClass);\r\n        this.one('animationend', () => {\r\n            this.removeClass(animationClass);\r\n        });\r\n\r\n        const clickableEl = this.contentEl().appendChild(document.createElement('button'));\r\n        clickableEl.className = 'mediasite-player__notification-clickable-surface';\r\n        clickableEl.setAttribute('aria-labelledby', titleId);\r\n        clickableEl.style.setProperty('--notification-icon', `url(\"${options.icon ?? InfoIcon}\")`);\r\n        clickableEl.addEventListener('click', () => this.trigger('callback'));\r\n\r\n        const notificationTitle = clickableEl.appendChild(document.createElement('span'));\r\n        notificationTitle.className = 'mediasite-player__notification-title';\r\n        notificationTitle.textContent = options.title;\r\n        notificationTitle.id = titleId;\r\n\r\n        if (options.description) {\r\n            const notificationDescription = clickableEl.appendChild(document.createElement('span'));\r\n            notificationDescription.className = 'mediasite-player__notification-description';\r\n            notificationDescription.textContent = options.description;\r\n            notificationDescription.id = descriptionId;\r\n            this.el().setAttribute('aria-describedby', descriptionId);\r\n            clickableEl.setAttribute('aria-describedby', descriptionId);\r\n        }\r\n\r\n        const closeButton = this.contentEl().appendChild(document.createElement('button'));\r\n        closeButton.className = 'mediasite-player__notification-close-button';\r\n        closeButton.setAttribute('aria-label', localize('Dismiss notification'));\r\n        closeButton.addEventListener('click', () => this.trigger('dismiss'));\r\n\r\n        if (options.timeout === Infinity) {\r\n            return;\r\n        }\r\n        this.setTimeout(() => this.trigger('timeout'), options.timeout || TIMEOUT);\r\n    }\r\n\r\n    animateUp() {\r\n        return this.animate('up', true);\r\n    }\r\n\r\n    animateDown() {\r\n        return this.animate('down', true);\r\n    }\r\n\r\n    animateOut() {\r\n        return this.animate('out', false);\r\n    }\r\n\r\n    animate(direction, cleanup) {\r\n        return new Promise(resolve => {\r\n            const animationClass = `mediasite-player__notification-item--animating-${direction}`;\r\n            this.addClass(animationClass);\r\n            this.one('animationend', () => {\r\n                if (cleanup) {\r\n                    this.removeClass(animationClass);\r\n                }\r\n                resolve();\r\n            });\r\n        });\r\n    }\r\n}\r\n\r\nexport { NotificationItem };\r\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/postcss-loader/dist/cjs.js!./notification-item.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./notifications.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\nimport { OverflowMenuButton } from './controlbar-menu/overflow-menu-button.js';\r\nimport { NotificationItem } from './notifications/notification-item.js';\r\nimport NotificationsIcon from '../../assets/images/notifications_white_24dp.svg';\r\nimport InfoIcon from '../../assets/images/info-white-24dp.svg';\r\nimport './notifications.css';\r\n\r\n/**\r\n * @typedef {Object} NotificationsMenuButtonData\r\n * @property {string} [id]\r\n * @property {string} text The text to display.\r\n * @property {string} [description] Descriptive text for the notification.\r\n * @property {function} callback\r\n */\r\n\r\nconst _menuButton = new WeakMap();\r\nconst _notificationContainer = new WeakMap();\r\nlet localize;\r\n\r\n/**\r\n * The Notifications module.\r\n * @member {NotificationsPlugin} notifications\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Enables displaying custom notifications in the player.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass NotificationsPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, options);\r\n\r\n        // Create controlbar button + menu\r\n        const menuButton = new OverflowMenuButton(player, {\r\n            name: 'NotificationsMenuButton',\r\n            icon: NotificationsIcon\r\n        });\r\n        menuButton.addClass('mediasite-player__controlbar-notifications-button');\r\n        menuButton.controlText(localize('Notifications'));\r\n        _menuButton.set(this, menuButton);\r\n\r\n        const Component = videojs.getComponent('Component');\r\n        const notificationContainer = new Component(player);\r\n        notificationContainer.el().setAttribute('role', 'list');\r\n        notificationContainer.addClass('mediasite-player__notifications-container');\r\n        _notificationContainer.set(this, notificationContainer);\r\n\r\n        player.ready(() => {\r\n            const overflowButtonIndex = player.getChild('ControlBar').children().indexOf(\r\n                player.getDescendant('ControlBar', 'OverflowMenuButton')\r\n            );\r\n            player.getChild('ControlBar').addChild(menuButton, null, overflowButtonIndex);\r\n            player.layout().addChild(notificationContainer);\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Adds a notification to the notification queue and shows it.\r\n     * @param {string} title\r\n     * @param {Object} options\r\n     * @param {function({ type: 'invoke'|'dismiss' })} [options.callback]\r\n     * @param {string} [options.description] Descriptive text to show on a second line.\r\n     * @param {string} [options.icon] URL-encoded image to use as the icon for this notification.\r\n     * @param {number} [options.timeout] How long to display the notification, in milliseconds. May be Infinity. Defaults to 5000ms.\r\n     * @param {string} [options.id] An optional ID for the notification in case you want to remove it later. Defaults to an automatically generated unique ID.\r\n     * @returns {string} The ID of the notification.\r\n     * @example\r\n     * const notificationId = player.notifications().add('This is a notification', {\r\n     *     timeout: Infinity,\r\n     *     description: 'Some extra text'\r\n     * });\r\n     */\r\n    add(title, options = {}) {\r\n        if (typeof options === 'function') {\r\n            options = {\r\n                callback: options\r\n            }\r\n        }\r\n\r\n        const { callback = () => { }, description,  icon = InfoIcon, timeout } = options;\r\n\r\n        const notificationId = _menuButton.get(this).addMenuItem(title, {\r\n            callback: (...args) => {\r\n                const [ event ] = args;\r\n                this.remove(notificationId);\r\n                if (event.type === 'invoke') {\r\n                    return callback(...args);\r\n                }\r\n            },\r\n            dismissable: true,\r\n            icon\r\n        });\r\n\r\n        const notificationContainer = _notificationContainer.get(this);\r\n        const notificationItem = new NotificationItem(this.player, {\r\n            title,\r\n            id: notificationId,\r\n            description: description,\r\n            timeout: timeout,\r\n            icon: icon\r\n        });\r\n        notificationContainer.addChild(notificationItem);\r\n\r\n        const existingChildren = notificationContainer.children();\r\n        const itemIndex = existingChildren.indexOf(notificationItem);\r\n        for (let i = 0; i < itemIndex; i++) {\r\n            existingChildren[i].animateUp();\r\n        }\r\n\r\n        notificationItem.one(['dismiss', 'timeout'], () => this.removeDisplayItem(notificationId));\r\n        notificationItem.one('callback', () => {\r\n            this.remove(notificationId)\r\n            setTimeout(() => {\r\n                callback();\r\n            }, 0);\r\n        });\r\n\r\n        this.log(title, \"notification added.\")\r\n\r\n        return notificationId;\r\n    }\r\n\r\n    /**\r\n     * Removes the notification with the given ID.\r\n     * @param {string} id\r\n     * @example\r\n     * player.notifications.remove('notificationId');\r\n     */\r\n    remove(id) {\r\n        setTimeout(() => {\r\n            _menuButton.get(this).removeMenuItem(id);\r\n        }, 0);\r\n        this.removeDisplayItem(id);\r\n    }\r\n\r\n    /**\r\n     * Removes the banner associated with the notification with the given ID, but does not remove it from the controlbar menu.\r\n     * @param {string} id\r\n     * @example\r\n     * player.notifications.removeDisplayItem('notificationId');\r\n     */\r\n    removeDisplayItem(id) {\r\n        const notificationContainer = _notificationContainer.get(this);\r\n        const notificationItem = notificationContainer.children().find(child => child.id() === id);\r\n        \r\n        if (notificationItem) {\r\n            const existingChildren = notificationContainer.children();\r\n            const itemIndex = existingChildren.indexOf(notificationItem);\r\n            for (let i = 0; i < itemIndex; i++) {\r\n                existingChildren[i].animateDown();\r\n            }\r\n\r\n            notificationItem.animateOut().then(() => {\r\n                notificationContainer.removeChild(notificationItem);\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Returns a boolean based upon if the provided id is actually being displayed as a notification\r\n     * @param {string} id\r\n     */\r\n    hasDisplayItem(id) {\r\n        return _menuButton.get(this).hasItem(id);\r\n    }\r\n\r\n    setupMuteNotification() {\r\n        this.player.one('loadeddata', () => {\r\n            const notificationId = this.add(localize('Video is muted'), {\r\n                description: localize('Click here to unmute'),\r\n                callback: () => this.player.muted(false),\r\n                timeout: Infinity\r\n            });\r\n            this.player.one('volumechange', () => {\r\n                this.remove(notificationId);\r\n            });\r\n        });\r\n    }\r\n\r\n    dispose() {\r\n        const menuButton = _menuButton.get(this);\r\n        menuButton.dispose();\r\n\r\n        const controlbar = this.player.getChild('ControlBar');\r\n        controlbar.removeChild(menuButton);\r\n\r\n        this.player.layout().removeChild(_notificationContainer.get(this));\r\n\r\n        super.dispose();\r\n    }\r\n}\r\n\r\nexport default NotificationsPlugin;\r\n","import videojs from 'video.js';\r\n\r\nlet localize;\r\n\r\nexport default class PlaycoverPlayButton extends videojs.getComponent('Button') {\r\n    /**\r\n     * \r\n     * @param {videojs.Player} player\r\n     */\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, options);\r\n\r\n        player.ready(() => {\r\n            const playIconWrapper = document.createElement('div');\r\n            videojs.dom.addClass(playIconWrapper, 'mediasite-player__play-cover-play-icon-wrapper');\r\n            playIconWrapper.setAttribute('aria-label', localize('Play Video'));\r\n            this.el().appendChild(playIconWrapper);\r\n            this.controlText(localize('Play Video'));\r\n        });\r\n    }\r\n\r\n    createEl(tag, props = {}, attributes = {}) {\r\n        tag = 'div';\r\n        props = Object.assign({\r\n            className: 'mediasite-player__playcover-play-button'\r\n        });\r\n\r\n        attributes = Object.assign({\r\n            alt: localize('Play Video')\r\n        });\r\n\r\n        return super.createEl.call(this, tag, props, attributes);\r\n    }\r\n}","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./playcover.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\n\r\nexport default class PlaycoverContentWrapper extends videojs.getComponent('Component') {\r\n    /**\r\n     * \r\n     * @param {videojs.Player} player\r\n     */\r\n    constructor(player, options) {\r\n        super(player, options);\r\n    }\r\n\r\n    createEl(tag, props = {}, attributes = {}) {\r\n        tag = 'div';\r\n        props = Object.assign({\r\n            className: 'mediasite-player__playcover-content-wrapper'\r\n        });\r\n\r\n        return super.createEl.call(this, tag, props, attributes);\r\n    }\r\n}","import videojs from 'video.js';\r\n\r\nimport './playcover.css';\r\nimport PlaycoverPlayButton from '../bundled/playcover/playcover-play-button.js'\r\nimport PlaycoverContentWrapper from '../bundled/playcover/playcover-content-wrapper.js'\r\n\r\nconst _poster = new WeakMap();\r\nconst _playButton = new WeakMap();\r\nconst _title = new WeakMap();\r\n\r\n/**\r\n * The Playcover module.\r\n * @member {PlaycoverPlugin} playcover\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Provides configuration options for the play button and poster image that display before media has been loaded.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass PlaycoverPlugin extends videojs.getPlugin('plugin') {\r\n    /**\r\n     * \r\n     * @param {videojs.Player} player\r\n     * @param {Object} [options]\r\n     */\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        player.ready(() => {\r\n            const playcoverContentWrapper = new PlaycoverContentWrapper(player, { name: 'PlaycoverContentWrapper' });\r\n            const playButton = new PlaycoverPlayButton(player, { name: 'PlaycoverPlayButton' });\r\n            playcoverContentWrapper.addChild(playButton);\r\n\r\n            const title = videojs.dom.createEl('h1', {\r\n                className: 'mediasite-player__title-overlay',\r\n                id: 'mediasite-player-title-overlay'\r\n            });\r\n\r\n            const poster = player.getChild('PosterImage');\r\n            poster.addClass('mediasite-player__play-cover');\r\n            poster.addClass('mediasite-player__play-cover--preloading');\r\n            poster.addChild(playcoverContentWrapper);\r\n            poster.el().appendChild(title);\r\n\r\n            _poster.set(this, poster);\r\n            _playButton.set(this, playButton);\r\n            _title.set(this, title);\r\n\r\n            player.one('playcoverloaded', () => {\r\n                poster.removeClass('mediasite-player__play-cover--preloading');\r\n            });\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Sets the play cover custom content.\r\n     * Passing null, undefined, '', or anything other than a videojs component, \r\n     * removes any existing custom content without replacing\r\n     * @param {videojs.Component} vjsComponent\r\n     * @example\r\n     * player.playcover.addComponent(someCustomVideoJsComponent);\r\n     */\r\n    setPlaycoverCustomContent(vjsComponent, index) {\r\n        const playcoverContentWrapper = this.player.getChild('PosterImage').getChild('PlaycoverContentWrapper');\r\n        const children = playcoverContentWrapper.children();\r\n        const playButton = _playButton.get(this);\r\n        for (const child of children) {\r\n            if (child !== playButton) {\r\n                playcoverContentWrapper.removeChild(child);\r\n            }\r\n        }\r\n        if (vjsComponent != null && vjsComponent !== '') {\r\n            try {\r\n                vjsComponent.addClass('mediasite-player__playcover-custom-content')\r\n                playcoverContentWrapper.addChild(vjsComponent, null, index);\r\n            } catch (e) {\r\n                this.log(e)\r\n            };\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Adds the given component to the play cover.\r\n     * @param {videojs.Component} vjsComponent \r\n     * @example\r\n     * player.playcover.addComponent(someCustomVideoJsComponent);\r\n     */\r\n    addComponent(vjsComponent, index) {\r\n        const poster = this.player.getChild('PosterImage');\r\n        poster.addChild(vjsComponent, null, index);\r\n    }\r\n\r\n    /**\r\n     * Removes the given component from the play cover if it exists.\r\n     * @param {videojs.Component} vjsComponent \r\n     * @example\r\n     * player.playcover.removeComponent(someCustomVideoJsComponent);\r\n     */\r\n    removeComponent(vjsComponent) {\r\n        const poster = this.player.getChild('PosterImage');\r\n        poster.removeChild(vjsComponent);\r\n    }\r\n\r\n    /**\r\n     * Removes any custom components that have been added to the play cover.\r\n     * @example\r\n     * player.playcover.removeAllComponents();\r\n     */\r\n    removeAllComponents() {\r\n        const poster = this.player.getChild('PosterImage');\r\n        const playcoverContentWrapper = poster.getChild('PlaycoverContentWrapper');\r\n        const children = poster.children();\r\n        const title = _title.get(this);\r\n        for (const child of children) {\r\n            if (child !== title && child !== playcoverContentWrapper) {\r\n                poster.removeChild(child);\r\n            }\r\n        }\r\n        this.setPlaycoverCustomContent(null);\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not to show a play button.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.playcover.showPlayButton = true;\r\n     */\r\n    set showPlayButton(showPlayButton) {\r\n        this.player.ready(() => {\r\n            const bigPlayButton = _playButton.get(this);\r\n            if (showPlayButton) {\r\n                bigPlayButton.removeClass('vjs-hidden');\r\n            }\r\n            else {\r\n                bigPlayButton.addClass('vjs-hidden');\r\n            }\r\n        });\r\n    }\r\n\r\n    get showPlayButton() {\r\n        return !_playButton.get(this).hasClass('vjs-hidden');\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the play cover is clickable.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.playcover.clickable = true;\r\n     */\r\n    set clickable(clickable) {\r\n        this.#canClick = clickable;\r\n\r\n        const bigPlayButton = _playButton.get(this);\r\n        const poster = _poster.get(this);\r\n\r\n        this.off(bigPlayButton, ['tap', 'click'], this.#handlePlayCoverClick);\r\n        this.off(poster, ['tap', 'click'], this.#handlePlayCoverClick);\r\n        poster.addClass('not-clickable');\r\n\r\n        if (clickable) {\r\n            this.on(bigPlayButton, ['tap', 'click'], this.#handlePlayCoverClick);\r\n            this.on(poster, ['tap', 'click'], this.#handlePlayCoverClick);\r\n            poster.removeClass('not-clickable');\r\n        }\r\n    }\r\n\r\n    get clickable() {\r\n        return this.#canClick;\r\n    }\r\n\r\n    /**\r\n     * Sets the title text that is displayed on the play cover.<br><br>Note: this property gets automatically populated whenever {@link MetadataPlugin#title} is set.\r\n     * @type {string}\r\n     * @example\r\n     * player.playcover.title = 'Title to be shown on the play cover';\r\n     */\r\n    set title(title) {\r\n        this.player.ready(() => {\r\n            _title.get(this).textContent = title;\r\n        });\r\n    }\r\n    get title() {\r\n        return _title.get(this).textContent;\r\n    }\r\n\r\n    /**\r\n     * A boolean configuring whether or not the presentation title should be visible on the play cover.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.playcover.showTitle = true;\r\n     */\r\n    set showTitle(showTitle) {\r\n        this.player.ready(() => {\r\n            const title = _title.get(this);\r\n            if (showTitle) {\r\n                title.classList.remove('vjs-hidden');\r\n            }\r\n            else {\r\n                title.classList.add('vjs-hidden');\r\n            }\r\n        });\r\n    }\r\n    get showTitle() {\r\n        return !_title.get(this).classList.contains('vjs-hidden');\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the play cover should be visible.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.playcover.visible = true;\r\n     */\r\n    set visible(visible) {\r\n        this.player.ready(() => {\r\n            const poster = _poster.get(this);\r\n\r\n            if (visible) {\r\n                poster.removeClass('vjs-hidden');\r\n                this.clickable = this.clickable;\r\n            }\r\n            else {\r\n                poster.addClass('vjs-hidden');\r\n                this.player.addClass('vjs-has-started');\r\n                this.clickable = false;\r\n            }\r\n        });\r\n    }\r\n\r\n    get visible() {\r\n        const poster = _poster.get(this);\r\n        return poster ? !poster.hasClass('vjs-hidden') : false;\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the play cover should dim the poster image.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.playcover.dimmed = true;\r\n     */\r\n    set dimmed(dimmed) {\r\n        this.player.ready(() => {\r\n            const poster = _poster.get(this);\r\n            if (dimmed) {\r\n                poster.addClass('mediasite-player__play-cover--dimmed');\r\n            }\r\n            else {\r\n                poster.removeClass('mediasite-player__play-cover--dimmed');\r\n            }\r\n        });\r\n    }\r\n\r\n    get dimmed() {\r\n        return _poster.get(this).hasClass('mediasite-player__play-cover--dimmed');\r\n    }\r\n\r\n    #handlePlayCoverClick(event) {\r\n\r\n        //Jump out if click was on an anchor tag in the play cover button\r\n        if (event.target && event.target.tagName.toLowerCase() === 'a') return;\r\n        if (event.target && event.target.id.toLowerCase() === 'reset-answers') return;\r\n\r\n        this.player.loader().loadPresentation().then(() => this.visible = false);\r\n        this.player.play();\r\n        this.player.trigger('playcoverclick');\r\n    }\r\n\r\n    #canClick = true;\r\n\r\n    dispose() {\r\n        this.removeAllComponents();\r\n        super.dispose();\r\n    }\r\n}\r\n\r\nexport default PlaycoverPlugin;\r\n","import videojs from 'video.js';\r\n\r\nimport PollIcon from '../../assets/images/poll-white-24dp.svg';\r\nimport { isPresentationId } from '../../util';\r\n\r\nconst _enabled = new WeakMap();\r\nconst _url = new WeakMap();\r\nconst _popup = new WeakMap();\r\nlet localize;\r\n\r\n/**\r\n * The Polls module.\r\n * @member {PollsPlugin} polls\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Configures the Polls button in the control bar menu.<br><br>\r\n * Note: the Polls button will only be displayed in the control bar menu if {@link PollsPlugin#enabled} is set to <code>true</code>, and {@link PollsPlugin#url} has been set to a non-empty string.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass PollsPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, options);\r\n        _enabled.set(this, false);\r\n\r\n        player.ready(() => {\r\n            player.controlbarMenu().addMenuItem(localize('Show Polls'), { id: this.name, icon: PollIcon, callback: () => this.#handleClick() });\r\n        });\r\n    }\r\n\r\n    #handleClick() {\r\n        this.open();\r\n    }\r\n\r\n    /**\r\n     * The path to the polling webpage.\r\n     * @type {string}\r\n     * @example\r\n     * player.polls.url = 'https://mediasite.com';\r\n     */\r\n    get url() {\r\n        return _url.get(this);\r\n    }\r\n\r\n    set url (url) {\r\n        _url.set(this, url);\r\n        this.#updateVisibility();\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the Polls feature is enabled.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.polls.enabled = true;\r\n     */\r\n    get enabled() {\r\n        return _enabled.get(this);\r\n    }\r\n\r\n    set enabled(enabled) {\r\n        _enabled.set(this, enabled);\r\n        this.#updateVisibility();\r\n    }\r\n\r\n    #updateVisibility() {\r\n        if (_enabled.get(this) && _url.get(this)) {\r\n            this.player.controlbarMenu().enableMenuItem(this.name);\r\n        }\r\n        else {\r\n            this.player.controlbarMenu().disableMenuItem(this.name);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Opens the configured polling URL in a new popup window.\r\n     * @example\r\n     * player.polls.open();\r\n     */\r\n    open() {\r\n        if (!this.enabled) {\r\n            return;\r\n        }\r\n        // Opens the popout window\r\n        // Todo: handle original playFrom and duration query string params, if present\r\n\r\n        // Note: we can only do this if we know the presentation ID.\r\n        if (isPresentationId(this.player.loader().presentationId)) {\r\n            const popup = window.open(_url.get(this), 'polls',\r\n                `width=800,height=600,scrollbars=yes,resizable=yes`\r\n            );\r\n            popup.focus();\r\n            _popup.set(this, popup);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Closes the popup window if it is currently open.\r\n     * @example\r\n     * player.polls.close();\r\n     */\r\n    close() {\r\n        _popup.get(this)?.close?.();\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the popup window is currently open.\r\n     * @type {boolean}\r\n     * @example\r\n     * const isPollModalOpen = player.polls.isOpen();\r\n     */\r\n    get isOpen() {\r\n        const popup = _popup.get(this);\r\n        return !(!popup || (popup?.closed));\r\n    }\r\n\r\n    dispose() {\r\n        if (this.player?.usingPlugin('controlbarMenu')) {\r\n            this.player.controlbarMenu().removeMenuItem(this.name);\r\n        }\r\n        \r\n        super.dispose();\r\n    }\r\n}\r\n\r\nexport default PollsPlugin;\r\n","import videojs from 'video.js';\r\n\r\nimport { getFullscreenToggleIndex, isPresentationId } from '../../util';\r\nimport { Path } from '../../api/config.js';\r\n\r\nimport OpenInNewIcon from '../../assets/images/open_in_new-white-24dp.svg';\r\n\r\nconst _menuButton = new WeakMap();\r\nconst _popup = new WeakMap();\r\nconst _message = new WeakMap();\r\nlet localize;\r\n\r\n/**\r\n * Returns a reference to the Popout module.\r\n * @function popout\r\n * @returns {PopoutPlugin}\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Configures the Popout feature.<br><br>\r\n * Note: Popout functionality can only be enabled if the current player instance is running at a URL other than the default player page, or is currently embedded in an <code>&lt;iframe&gt;</code>. Setting {@link PopoutPlugin#enabled} will have no effect unless at least one of these conditions is true.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass PopoutPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, options);\r\n\r\n        // Add a MenuButton to the ControlBar\r\n        const MenuButton = videojs.getComponent('MenuButton');\r\n        const button = new MenuButton(player, { name: 'PopoutMenuButton' });\r\n        button.addClass('mediasite-player__custom-controlbar-button');\r\n        button.addClass('vjs-popout-button');\r\n        button.controlText(localize('Pop Out'));\r\n        button.el().style.setProperty('--custom-controlbar-icon', `url(\"${OpenInNewIcon}\")`);\r\n\r\n        this.on(button, ['click', 'touchstart'], this.open);\r\n\r\n        _menuButton.set(this, button);\r\n\r\n        player.ready(() => {\r\n            player.getChild('ControlBar').addChild(button, null, getFullscreenToggleIndex(player) - 1);\r\n            player.collapsedButtons?.push({\r\n                pluginName: this.name,\r\n                label: localize('Pop Out'),\r\n                buttonName: 'PopoutMenuButton',\r\n                class: 'vjs-popout-button',\r\n                iconUrl: OpenInNewIcon\r\n            });\r\n        });\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the Popout feature is enabled.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.popout.enabled = true;\r\n     */\r\n    get enabled() {\r\n        return !_menuButton.get(this).hasClass('vjs-hidden');\r\n    }\r\n\r\n    set enabled(enabled) {\r\n        // Only allow enabling the popout feature if we're embedded or not running on the main player page.\r\n        const menuButton = _menuButton.get(this);\r\n        const inIFrame = window.parent !== window;\r\n        const onPlayerPage = location.pathname.startsWith(Path.ApplicationRoot);\r\n        if (enabled && (inIFrame || !onPlayerPage)) {\r\n            menuButton.removeClass('vjs-hidden');\r\n        }\r\n        else {\r\n            menuButton.addClass('vjs-hidden');\r\n            _popup.get(this)?.close?.();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Pauses playback and opens the presentation in a new window on the main player page.\r\n     * @example\r\n     * player.popout.open();\r\n     */\r\n    open() {\r\n        this.player.pause();\r\n\r\n        // Note: we can only do this if we know the presentation ID.\r\n        const id = this.player.loader()?.presentationId;\r\n        if (isPresentationId(id)) {\r\n            const playFrom = Math.floor(this.player.currentTime() * 1000); // playFrom param expects ms\r\n            // If embedded in channel we pass collection id for channel registration authentication\r\n            const channelId = window?.SiteData?.CollectionId;\r\n            const playLink = channelId ? `${Path.ApplicationRoot}/${id}?playFrom=${playFrom}&popout=true&Collection=${channelId}` : `${Path.ApplicationRoot}/${id}?playFrom=${playFrom}&popout=true`;\r\n            const windowName = this.player.loader()?.presentationId ?? 'playerpreview';\r\n            const windowOptions = `width=800,height=600,scrollbars=yes,resizable=yes`;\r\n\r\n            const popup = window.open(playLink, windowName, windowOptions);\r\n\r\n            popup.focus();\r\n            popup.addEventListener('unload', () => this.#handlePopupClose());\r\n            _popup.set(this, popup);\r\n\r\n            const popoutModalMessage = this.player.showMessage(localize('Opened presentation in a new window.'));\r\n            _message.set(this, popoutModalMessage);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Closes the popout window if it is currently open.\r\n     * @example\r\n     * player.popout.close();\r\n     */\r\n    close() {\r\n        _popup.get(this)?.close?.();\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the popout window is currently open.<br><br>Note: this does NOT indicate if this player instance itself is displaying as a popout; rather, it indicates whether or not a child window (the \"popout\" player) is present.\r\n     * @type {boolean}\r\n     * @example\r\n     * const isPopoutOpen = player.popout.isOpen();\r\n     */\r\n    get isOpen() {\r\n        const popup = _popup.get(this);\r\n        return !(!popup || (popup?.closed));\r\n    }\r\n\r\n    #handlePopupClose() {\r\n        const popup = _popup.get(this);\r\n        setTimeout(() => {\r\n            if (popup.closed) {\r\n                _popup.set(this, null);\r\n\r\n                const popoutModalMessage = _message.get(this);\r\n                if (popoutModalMessage) {\r\n                    popoutModalMessage.close();\r\n                    _message.set(this);\r\n                }\r\n            }\r\n        }, 0);\r\n    }\r\n\r\n    dispose() {\r\n        const menuButton = _menuButton.get(this);\r\n\r\n        menuButton?.dispose();\r\n        this.player.getChild('ControlBar')?.removeChild(menuButton);\r\n\r\n        if (this.isOpen) {\r\n            this.close();\r\n        }\r\n\r\n        super.dispose();\r\n    }\r\n}\r\n\r\nexport default PopoutPlugin;\r\n","/**\r\n    * Dynamically loads an external JavaScript file containing one or more custom plugins.<br><br>\r\n    * You must wrap your plugin in a function that accepts one argument, <code>videojs</code>, and returns a reference to your actual plugin implementation. A reference to the same Video.js instance used by this <code>MediasitePlayer</code> instance will be passed to the wrapper function, and the wrapper function must return a reference to a valid Video.js plugin function or class.<br><br>\r\n    * Please see the examples below for how to correctly structure a plugin file.\r\n    * @memberof MediasitePlayer#\r\n    * @param {string} url The path to a JavaScript module which exposes one or more plugin wrapper functions as named exports. The name of each export found in the module will be used as the name of the plugin when registering it with the player.\r\n    * @see {@link https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/export}\r\n    * @returns {Promise<Array<string>>} A Promise that is resolved with an array containing the names of the plugins that have been registered.\r\n    * \r\n    * @example <caption>JavaScript file containing a Video.js basic plugin:</caption>\r\n    * export function myPluginName(videojs) {\r\n    *     return function() {\r\n    *         // A Video.js \"basic plugin\" implementation.\r\n    *     }\r\n    * }\r\n    * \r\n    * @example <caption>JavaScript file containing a Video.js advanced plugin:</caption>\r\n    * export function myPluginName(videojs) {\r\n    *     return class extends videojs.getPlugin('plugin') {\r\n    *         // A Video.js \"advanced plugin\" implementation.\r\n    *     }\r\n    * }\r\n    * \r\n    * @example <caption>Loading an external Video.js plugin into an instance of MediasitePlayer:</caption>\r\n    * const myPlayer = new MediasitePlayer(videoElement);\r\n    * myPlayer.registerExternalPlugin('/path/to/plugin.js').then(() => {\r\n    *     // Plugin is now ready for use.\r\n    *     myPlayer.plugins.myPluginName();\r\n    * });\r\n    * \r\n    * @example <caption>Loading an external Video.js plugin into an instance of MediasitePlayer with {@link https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await|async/await} syntax:</caption>\r\n    * const myPlayer = new MediasitePlayer(videoElement);\r\n    * await myPlayer.registerExternalPlugin('/path/to/plugin.js');\r\n    * \r\n    * // Plugin is now ready for use.\r\n    * myPlayer.plugins.myPluginName();\r\n    */\r\nfunction registerExternalPlugin(url) {\r\n    if (typeof url === 'string') {\r\n        this.log(`Attempting to load external Video.js plugin(s) from URL: ${url}`);\r\n        return import(/* webpackIgnore: true */ url).then(module => {\r\n            const moduleEntries = Object.entries(module);\r\n            const filteredEntries = moduleEntries.filter(([pluginName]) => pluginName !== 'default');\r\n    \r\n            if (moduleEntries.length !== filteredEntries.length) {\r\n                console.warn('Ignored default export in external plugin script. Please use named exports for your plugins: https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/export');\r\n            }\r\n    \r\n            if (filteredEntries.length > 0) {\r\n                this.log(`Registering ${filteredEntries.length} external plugin${filteredEntries.length > 1 ? 's' : ''}...`);\r\n                for (const [pluginName, pluginWrapper] of filteredEntries) {\r\n                    const pluginFn = pluginWrapper(videojs);\r\n                    this.registerPlugin(pluginName, pluginFn);\r\n                }\r\n            }\r\n            else {\r\n                this.log.error('External plugin script did not contain any named exports. No plugins have been registered.');\r\n            }\r\n\r\n            return filteredEntries.map(entry => entry[0]);\r\n        }).catch(error => {\r\n            this.log.error('Failed to load external plugin(s).');\r\n            throw error;\r\n        });\r\n    }\r\n    else {\r\n        return Promise.resolve([]);\r\n    }\r\n}\r\n\r\nexport default registerExternalPlugin;\r\n","import videojs from 'video.js';\r\n\r\nconst Plugin = videojs.getPlugin('plugin');\r\n\r\n/**\r\n* Registers a Video.js plugin with the player to extend its functionality.\r\n* @memberof MediasitePlayer#\r\n* @param {string} name The name of the plugin to load. The plugin will be made available on this player instance as a property with the given key.\r\n* @param {function} fn A function containing the plugin implementation.\r\n* @example\r\n* player.registerPlugin('myPlugin', function () { console.log('Called the plugin function.') });\r\n* player.plugins.myPlugin();\r\n*/\r\nfunction registerPlugin(name, fn) {\r\n    if (name && fn) {\r\n        if (!videojs.getPlugin(name)) {\r\n            videojs.registerPlugin(name, fn);\r\n        }\r\n\r\n        this.trigger('registercustomplugin', { name, isBasic: Plugin.isBasic(fn) });\r\n        this.log(`Registered Video.js plugin: ${name}`);\r\n    }\r\n}\r\n\r\nexport default registerPlugin;\r\n","import videojs from 'video.js';\r\n\r\nconst ErrorNames = {\r\n    timeAnomaly: 'Time Anomaly'\r\n}\r\n\r\nconst _lastPositionChange = new WeakMap();\r\nconst _firstPositionChangeOfSegment = new WeakMap();\r\nconst _tolerance = new WeakMap();\r\nconst _playbackRate = new WeakMap();\r\n\r\nexport default class ReportingPlayDetector extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        this.lastPositionChange = null;\r\n        this.firstPositionChangeOfSegment = null;\r\n\r\n        this.tolerance = 0.5; // The amount above/below the expected position that is still considered a hit.\r\n        this.playbackRate = 1.0;\r\n    }\r\n\r\n    set firstPositionChangeOfSegment(change) {\r\n        _firstPositionChangeOfSegment.set(this, change);\r\n    }\r\n\r\n    get firstPositionChangeOfSegment() {\r\n        return _firstPositionChangeOfSegment.get(this);\r\n    }\r\n\r\n    set lastPositionChange(change) {\r\n        _lastPositionChange.set(this, change);\r\n    }\r\n\r\n    get lastPositionChange() {\r\n        return _lastPositionChange.get(this);\r\n    }\r\n\r\n    set tolerance(tolerance) {\r\n        _tolerance.set(this, tolerance);\r\n    }\r\n\r\n    get tolerance() {\r\n        return _tolerance.get(this);\r\n    }\r\n\r\n    set playbackRate(rate) {\r\n        _playbackRate.set(this, rate);\r\n    }\r\n\r\n    get playbackRate() {\r\n        return _playbackRate.get(this);\r\n    }\r\n\r\n    // True eventing is overkill. We just need a single function to call when each \"event\" occurs.\r\n    segmentStartAction(startPosition) {};\r\n    segmentEndAction(startPosition, endPosition, isImportant) {};\r\n\r\n    handlePlaybackRateChange(rate) {\r\n        this.playbackRate = rate;\r\n\r\n        // TODO: Attempt minimize segment end actions caused by changes in playback rate.\r\n    };\r\n\r\n    handlePositionChange(position) {\r\n        let playing;\r\n        const clockTimeInSeconds = this.getCurrentTime() / 1000;\r\n        const positionChange = { time: clockTimeInSeconds, position: position };\r\n\r\n        if (this.lastPositionChange) {\r\n            try {\r\n                playing = this.isProbablyPlaying(this.lastPositionChange.time, this.lastPositionChange.position, positionChange.time, positionChange.position, this.playbackRate, this.tolerance);\r\n            } catch (err) {\r\n                if (err.name = ErrorNames.timeAnomaly) {\r\n                    // Times should always be increasing.\r\n                    // However, there are some conditions that can cause JavaScript to report a \r\n                    // time value that is earlier than the previous one. For example, the client \r\n                    // computer's time may have been updated via NTP.\r\n\r\n                    this.log('Times provided by timeProvider were out of order.');\r\n                }\r\n\r\n                // We certainly can't say that we're playing. Bite the bullet and  end the\r\n                // current segment so we can start fresh with a new segment.\r\n                playing = false;\r\n            }\r\n\r\n            if (playing) {\r\n\r\n                if (!this.firstPositionChangeOfSegment) {\r\n                    this.startSegment();\r\n                }\r\n\r\n            } else { // Seek or something. Does not look to be \"just playing along\".\r\n                this.endSegment();\r\n            }\r\n        }\r\n\r\n        this.lastPositionChange = positionChange;\r\n    };\r\n\r\n    getCurrentTime() {\r\n        const useModernMode = (window.performance && typeof window.performance.now === 'function');\r\n        if (useModernMode) {\r\n            return window.performance.now();\r\n        } else {\r\n            return new Date().getTime();\r\n        }\r\n    };\r\n\r\n    endSegment(isImportantNotification) {\r\n        isImportantNotification = isImportantNotification || false;\r\n\r\n        if (this.firstPositionChangeOfSegment && this.lastPositionChange) {\r\n            // Notify segment was played!\r\n            this.segmentEndAction(this.firstPositionChangeOfSegment.position, this.lastPositionChange.position, isImportantNotification);\r\n        }\r\n\r\n        // Clear segment start.\r\n        // This will result in the start of a new segment with the next qualifying position changes.\r\n        this.firstPositionChangeOfSegment = null;\r\n    };\r\n\r\n\r\n    startSegment() {\r\n        // Set segment start if empty.\r\n        this.firstPositionChangeOfSegment = this.lastPositionChange;\r\n\r\n        // Report segment start!\r\n        this.segmentStartAction(this.firstPositionChangeOfSegment.position);\r\n    }\r\n\r\n    isProbablyPlaying(time1, position1, time2, position2, playbackRate, toleranceFactor) {\r\n        let deltaTime, deltaPosition, expectedPositionChange;\r\n        const enforceNonNegativeNumber = function (val) {\r\n            if (typeof val !== 'number') {\r\n                val = 0;\r\n            }\r\n\r\n            return Math.max(0, val);\r\n        };\r\n\r\n        time1 = enforceNonNegativeNumber(time1);\r\n        position1 = enforceNonNegativeNumber(position1);\r\n        time2 = enforceNonNegativeNumber(time2);\r\n        position2 = enforceNonNegativeNumber(position2);\r\n        playbackRate = enforceNonNegativeNumber(playbackRate);\r\n        toleranceFactor = enforceNonNegativeNumber(toleranceFactor);\r\n\r\n        if (time1 > time2) {\r\n            // Non-increasing clock times represent a programming error so we throw!\r\n            throw { name: 'Argument Error', message: 'time2 must be greater than time1.' };\r\n        }\r\n\r\n        if (position1 > position2) {\r\n            // Non-increasing positions indicate a seek or perhaps a pause.\r\n            return false;\r\n        }\r\n\r\n        deltaTime = time2 - time1;\r\n        deltaPosition = position2 - position1;\r\n\r\n        expectedPositionChange = deltaTime * playbackRate;\r\n\r\n        return Math.abs(expectedPositionChange - deltaPosition) <= (expectedPositionChange * toleranceFactor);\r\n    };\r\n}\r\n","import videojs from 'video.js';\r\n\r\nconst _segments = new WeakMap();\r\n\r\nclass ReportingTimelineSegments extends videojs.getPlugin('plugin') {\r\n    /**\r\n     *\r\n     * @param {videojs.Player} player\r\n     * @param {Object} options\r\n     */\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        this.segments = [];\r\n    }\r\n\r\n    set segments(segments) {\r\n        _segments.set(this, segments);\r\n    }\r\n\r\n    get segments() {\r\n        return _segments.get(this);\r\n    }\r\n\r\n    addSegment(start, end) {\r\n        const segmentsArray = this.segments;\r\n        segmentsArray.push({ start, end });\r\n        this.segments = segmentsArray;\r\n    };\r\n\r\n    getAllSegments() {\r\n        const segments = this.segments;\r\n        let result = [];\r\n        let i;\r\n        for (i = 0; i < segments.length; i += 1) {\r\n            result.push(this.cloneSegment(segments[i]));\r\n        }\r\n        return result;\r\n    };\r\n\r\n    cloneSegment(segment) {\r\n        const start = segment.start;\r\n        const end = segment.end;\r\n        return { start: start, end: end };\r\n    }\r\n\r\n    reset() {\r\n        this.segments = [];\r\n    };\r\n}\r\n\r\nexport default ReportingTimelineSegments","import videojs from 'video.js';\r\nimport { reportMediaView } from '../../api/player';\r\n\r\nimport ReportingPlayDetector from './reporting/reporting-play-detector.js'\r\nimport ReportingTimelineSegments from './reporting/reporting-timeline-segments.js'\r\n\r\nconst _segmentsMemory = new WeakMap();\r\nconst _playDetector = new WeakMap();\r\nconst _includeBookmark = new WeakMap();\r\n\r\nconst DETECTOR_TOLERANCE_FACTOR = 0.5;\r\nconst INACTIVITY_DELAY = 2 * 1000; // milliseconds\r\nconst HEARTBEAT_DELAY = 30 * 1000; // milliseconds\r\nconst SEGMENT_COMBINATION_TOLERANCE_SECONDS = 1;\r\nconst NO_BOOKMARK_ZONE_SIZE = 3; // seconds withing video duration in which we won't bookmark.\r\n\r\n/**\r\n * The Reporting module.\r\n * @member {ReportingPlugin} reporting\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Tracks the time ranges that have been played so far and periodically reports them back to the server.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nexport default class ReportingPlugin extends videojs.getPlugin('plugin') {\r\n    /**\r\n     *\r\n     * @param {videojs.Player} player\r\n     * @param {Object} [options]\r\n     */\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        /**\r\n         * A playback ticket used to identify the current presentation when reporting playback statistics back to the server.\r\n         * @type {string}\r\n         * @memberof MediasitePlayer.reporting\r\n         */\r\n        this.playbackTicket = options?.playbackTicket ?? '';\r\n\r\n        this.isLive = this.player.usingPlugin('live');\r\n        this.serviceReportMediaViewCalledCount = 0;\r\n        const segmentsMemory = new ReportingTimelineSegments(player);\r\n\r\n        this.segmentsMemory = segmentsMemory\r\n\r\n        this.playDetector = new ReportingPlayDetector(player);\r\n        this.playDetector.tolerance = DETECTOR_TOLERANCE_FACTOR;\r\n        this.playDetector.segmentStartAction = this.handleSegmentStart.bind(this);\r\n        this.playDetector.segmentEndAction = this.handleSegmentEnd.bind(this);\r\n    }\r\n\r\n    /**\r\n    * Whether or not the current playback time should be included in the reporting data. Setting this to <code>true</code> makes it possible to resume playback at the same position the next time the presentation is loaded.\r\n    * @type {boolean}\r\n    * @example\r\n    * player.reporting.includeBookmark = true;\r\n    */\r\n    get includeBookmark() {\r\n        return _includeBookmark.get(this) ?? true;\r\n    }\r\n\r\n    set includeBookmark(includeBookmark) {\r\n        _includeBookmark.set(this, includeBookmark);\r\n    }\r\n\r\n    set segmentsMemory(segments) {\r\n        _segmentsMemory.set(this, segments);\r\n    }\r\n\r\n    get segmentsMemory() {\r\n        return _segmentsMemory.get(this);\r\n    }\r\n\r\n    set playDetector(playDetector) {\r\n        _playDetector.set(this, playDetector);\r\n    }\r\n\r\n    get playDetector() {\r\n        return _playDetector.get(this);\r\n    }\r\n\r\n    scheduleHeartbeat() {\r\n        this.player.clearTimeout(this.heartbeatTimeout);\r\n        this.heartbeatTimeout = this.player.setTimeout(this.onHeartbeat.bind(this), HEARTBEAT_DELAY);\r\n    }\r\n\r\n    onHeartbeat() {\r\n        try {\r\n\r\n            // Cause a segment end so we can report it.\r\n            this.playDetector.endSegment();\r\n\r\n            this.reportSegmentsSinceLastReport();\r\n\r\n        } catch (err) {\r\n            this.log('Error in Playback Reporting onHeartbeat');\r\n        }\r\n\r\n        // See you again soon!\r\n        this.scheduleHeartbeat();\r\n    }\r\n\r\n    reportSegmentsSinceLastReport(synchronous) {\r\n        var segments = this.segmentsMemory.getAllSegments();\r\n        this.segmentsMemory.reset();\r\n\r\n        this.reportPlayed(segments, synchronous);\r\n    }\r\n\r\n    handleSegmentStart(startPosition) {\r\n        this.player.clearTimeout(this.inactivityTimeout);\r\n    }\r\n\r\n    handleSegmentEnd(startPosition, endPosition, isImportant) {\r\n        this.segmentsMemory.addSegment(startPosition, endPosition);\r\n        this.player.clearTimeout(this.inactivityTimeout);\r\n    }\r\n\r\n    onPlaybackRateChanged() {\r\n        const newPlaybackRate = this.player.playbackRate();\r\n        this.playDetector.handlePlaybackRateChange(newPlaybackRate);\r\n    }\r\n\r\n    onPositionChanged() {\r\n        const position = this.player.currentTime();\r\n        this.player.clearTimeout(this.inactivityTimeout);\r\n        // ... but assume playback stopped if we don't hear more soon\r\n        this.inactivityTimeout = this.player.setTimeout(function () {\r\n            this.playDetector.endSegment();\r\n        }.bind(this), INACTIVITY_DELAY);\r\n\r\n        this.playDetector.handlePositionChange(position); // playDetector works in milliseconds.\r\n    };\r\n\r\n    trackPresentation() {\r\n        this.isLive = this.player.usingPlugin('live');\r\n\r\n        this.on(this.player, 'timeupdate', this.onPositionChanged);\r\n\r\n        this.on(this.player, 'ratechange', this.onPlaybackRateChanged);\r\n\r\n\r\n        // When the session ends, make sure to report end!\r\n        window.addEventListener('beforeunload', e => {\r\n            this.playDetector.endSegment();\r\n            this.reportSegmentsSinceLastReport(true);\r\n        });\r\n\r\n        this.scheduleHeartbeat();\r\n    };\r\n\r\n    reportToDataProvider(playbackTicketId) {\r\n        if (!playbackTicketId) {\r\n            this.log(\"Reporting cannot report to data provider: no playback ticket or data provider\");\r\n            return;\r\n        }\r\n        this.playbackTicket = playbackTicketId;\r\n    };\r\n\r\n    reportPlayed(segments, synchronous) {\r\n        let serviceSegments;\r\n        let bookmarkPosition;\r\n\r\n        if (!this.playbackTicket) {\r\n            // Function was called before playbackTicketId and dataProvider were provided.\r\n            return;\r\n        }\r\n\r\n        bookmarkPosition = this.calcBookmarkPosition(segments, this.isLive);\r\n        serviceSegments = this.toServiceSegments(segments);\r\n\r\n        if (serviceSegments.length < 1) {\r\n            // There are no non-zero duration segments.\r\n            return;\r\n        }\r\n\r\n        reportMediaView(this.playbackTicket, this.includeBookmark ? bookmarkPosition : 0, serviceSegments);\r\n\r\n        if (this.includeBookmark) {\r\n            const bookmarkStorage = this.player.bookmarkStorage();\r\n            bookmarkStorage.save(bookmarkPosition);\r\n        }\r\n\r\n        this.serviceReportMediaViewCalledCount += 1;\r\n        this.log('ReportMediaView ' + this.makeReportMediaViewDescription(serviceSegments, bookmarkPosition));\r\n        this.log('ReportMediaView has been called ' + this.serviceReportMediaViewCalledCount + ' times.');\r\n    }\r\n\r\n    toServiceSegments(inputArray) {\r\n        // Transforms an array of TimelineSegments into an array of segment \r\n        // objects appropriate for data provider's ReportMediaView method. \r\n        // \r\n        // Positions in the output are expressed in integers.\r\n        // Abutting segments are combined in the output.\r\n\r\n\r\n        let i, seg, start, end, duration;\r\n        let resultArray = [];\r\n\r\n        const getLastItem = function () {\r\n            if (resultArray.length < 1) {\r\n                return null;\r\n            }\r\n\r\n            return resultArray[resultArray.length - 1];\r\n        };\r\n\r\n        const getLastEnd = function () {\r\n            const lastItem = getLastItem();\r\n\r\n            if (!lastItem) {\r\n                return NaN;\r\n            }\r\n\r\n            return lastItem.StartTime + lastItem.Duration;\r\n        };\r\n\r\n        const extendLastItem = function (start, duration) {\r\n            let lastItem, newEnd, newDuration;\r\n\r\n            newEnd = start + duration;\r\n            lastItem = getLastItem();\r\n            newDuration = newEnd - lastItem.StartTime;\r\n            lastItem.Duration = newDuration;\r\n        };\r\n\r\n        const addNewItem = function (start, duration) {\r\n            resultArray.push({ StartTime: start, Duration: duration });\r\n        };\r\n\r\n        const add = function (start, duration) {\r\n            if (duration <= 0) {\r\n                // Zero durations can be skipped.\r\n                return;\r\n            }\r\n\r\n            if (Math.abs(start - getLastEnd()) <= SEGMENT_COMBINATION_TOLERANCE_SECONDS) {\r\n                // This segment starts at or very near the end of the last one.\r\n                extendLastItem(start, duration);\r\n            } else {\r\n                // This segment is not a continuation of the last.\r\n                addNewItem(start, duration);\r\n            }\r\n        };\r\n\r\n        for (i = 0; i < inputArray.length; i += 1) {\r\n            seg = inputArray[i];\r\n            start = Math.max(0, Math.floor(seg.start));\r\n            end = Math.max(0, Math.floor(seg.end));\r\n            duration = Math.max(0, end - start);\r\n\r\n            add(start, duration);\r\n        }\r\n\r\n        return resultArray;\r\n    };\r\n\r\n    makeReportMediaViewDescription(serviceSegments, bookmarkPosition) {\r\n        let i;\r\n        const joint = ', ';\r\n        let parts = [];\r\n\r\n        function seviceSegmentDescription(serviceSegment) {\r\n            const start = secondsToMinutesAndSeconds(serviceSegment.StartTime);\r\n            const end = secondsToMinutesAndSeconds(serviceSegment.StartTime + serviceSegment.Duration);\r\n\r\n            return '(' + start + ' - ' + end + ')';\r\n        }\r\n\r\n        function secondsToMinutesAndSeconds(totalSeconds) {\r\n            let m, ss;\r\n            const isNegative = totalSeconds < 0;\r\n\r\n            totalSeconds = Math.floor(Math.abs(totalSeconds));\r\n            m = Math.floor(totalSeconds / 60) + '';\r\n            ss = (totalSeconds % 60) + '';\r\n            while (ss.length < 2) {\r\n                ss = '0' + ss;\r\n            }\r\n            if (isNegative) {\r\n                m = '-' + m;\r\n            }\r\n            return m + ':' + ss;\r\n        }\r\n\r\n        for (i = 0; i < serviceSegments.length; i += 1) {\r\n            parts.push(seviceSegmentDescription(serviceSegments[i]));\r\n        }\r\n\r\n        return 'segments: [' + parts.join(joint) + '], bookmarkPosition: ' + secondsToMinutesAndSeconds(bookmarkPosition);\r\n    }\r\n\r\n    calcBookmarkPosition(segments, isLive) {\r\n        let result = 0;\r\n\r\n        if (!isLive && segments.length > 0) {\r\n            result = Math.floor(segments[segments.length - 1].end);\r\n\r\n            if (this.isInNoBookmarkZone(result)) {\r\n                // No sense bookmarking a position sooo close to \r\n                // the video duration. Interpret this to mean we \r\n                // reached the end and should clear out (zero) \r\n                // the bookmark.\r\n                result = 0;\r\n            }\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    isInNoBookmarkZone(position) {\r\n        const diff = this.player.duration() - position;\r\n        return diff >= 0 && diff <= NO_BOOKMARK_ZONE_SIZE;\r\n    }\r\n}\r\n\r\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./search.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\n\r\nexport default function generateSearchResult(text, time, type, index, player) {\r\n    const localize = player.localize?.bind(player);\r\n    const TIME_ARIA_LABEL = localize('%%0%% hours, %%1%% minutes, %%2%% seconds');\r\n    const SEARCH_RESULTS_ARIA_LABEL = localize('Search result %%0%%.  %%1%%.  %%2%%');\r\n\r\n    const container = document.createElement('div');\r\n    const timeString = new Date(time * 1000).toISOString().substr(11, 8);\r\n    const hoursMinutesSeconds = timeString.split(':').map(value => parseInt(value, 10));\r\n\r\n    const timeAriaLabel = replacePlaceholders(TIME_ARIA_LABEL, ...hoursMinutesSeconds);\r\n    const ariaLabel = replacePlaceholders(SEARCH_RESULTS_ARIA_LABEL, index + 1, timeAriaLabel, text);\r\n\r\n    container.innerHTML = `<li data-time=\"${time}\" class=\"mediasite-player__search-result-list-item\" tabindex=\"0\" role=\"button\" aria-label=\"${ariaLabel}\">\r\n        <span>${text}</span>\r\n        <small>${videojs.formatTime(time, 3600)}</small>\r\n        <small>${type}</small>\r\n    </li>`;\r\n    return container.firstChild;\r\n}\r\n\r\nconst replaceRegex = /%%\\d*%%/;\r\nfunction replacePlaceholders(templateString, ...rest) {\r\n    return rest.reduce((previous, current) => (\r\n        previous.replace(replaceRegex, current)\r\n    ), templateString);\r\n}\r\n","import videojs from 'video.js';\r\n\r\nimport ModalDialog from '../../components/modal-dialog.js';\r\n\r\nimport generateSearchForm from './search/search-form.js';\r\n\r\nimport './search.css';\r\nimport { searchCaptionsAndSlides, SearchResultType } from '../../api/presentation.js';\r\n\r\nimport SearchIcon from '../../assets/images/search-white-24dp.svg';\r\nimport generateSearchResult from './search/search-result.js';\r\nimport { isPresentationId } from '../../util';\r\n\r\nconst _modal = new WeakMap();\r\nconst _formEl = new WeakMap();\r\nconst _resultsEl = new WeakMap();\r\nlet localize;\r\n\r\n/**\r\n * The Search module.\r\n * @member {SearchPlugin} search\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Lets the users search for and navigate to slides and captions within the presentation.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass SearchPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, options);\r\n\r\n        const modal = new ModalDialog(player, {\r\n            temporary: false,\r\n            uncloseable: false,\r\n            pauseOnOpen: false,\r\n            description: localize('Search'),\r\n            displayAsPanel: true\r\n        });\r\n        _modal.set(this, modal);\r\n        modal.addClass('mediasite-player__search-modal');\r\n        modal.addClass('mediasite-player__control-bar-modal');\r\n        player.controlbarMenu().addMenuItem(localize('Search'), { id: this.name, icon: SearchIcon, callback: () => this.openModal() });\r\n\r\n        player.ready(() => {\r\n            player.layout().addChild(modal);\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Opens the Search modal dialog.\r\n     * @example\r\n     * player.search.openModal();\r\n     **/\r\n    openModal() {\r\n        if (isPresentationId(this.player.loader().presentationId) && this.enabled) {\r\n            const modal = _modal.get(this);\r\n            const content = generateSearchForm(this.player);\r\n            this.#setupModalContent(content);\r\n            modal.fillWith(content);\r\n            modal.open();\r\n            _formEl.set(this, content);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Closes the Search modal dialog.\r\n     * @example\r\n     * player.search.closeModal();\r\n     **/\r\n    closeModal() {\r\n        _modal.get(this).close();\r\n    }\r\n\r\n    /**\r\n     * @private\r\n     * @param {HTMLDivElement} content\r\n     */\r\n    #setupModalContent(content) {\r\n        const form = content.querySelector('form');\r\n\r\n        // When submitButton is clicked, validate and submit\r\n        form.addEventListener('submit', event => {\r\n            event.preventDefault();\r\n            this.#handleSubmit();\r\n        });\r\n    }\r\n\r\n    #handleSubmit() {\r\n        /** @type {HTMLFormElement} */\r\n        const formEl = _formEl.get(this).querySelector('form');\r\n        const searchTerm = formEl.querySelector('input').value;\r\n\r\n        this.#disableFormControls();\r\n\r\n        const resultsEl = _resultsEl.get(this);\r\n        if (resultsEl) {\r\n            resultsEl.remove();\r\n            _resultsEl.set(this, null);\r\n        }\r\n\r\n        let captionLanguage;\r\n        if (this.player.usingPlugin('captions')) {\r\n            captionLanguage = this.player.captions()?.getSelectedLanguage(true);\r\n        }\r\n\r\n        searchCaptionsAndSlides(this.player.reporting().playbackTicket, searchTerm, captionLanguage)\r\n            .then(result => this.#handleSearchComplete(searchTerm, result))\r\n            .catch(error => this.#handleSearchError(error));\r\n    }\r\n\r\n    /**\r\n     * @private\r\n     * @param {Array<{text:string,time:number,type:number}>} results\r\n     */\r\n    #handleSearchComplete(searchTerm, results) {\r\n        const RESULT_TYPE_MAPPING = [\r\n            '',\r\n            localize('Closed caption'),\r\n            localize('Slide')\r\n        ];\r\n\r\n        this.#enableFormControls();\r\n\r\n        //display search results sorted by time, rather than type\r\n        results.sort((a, b) => a.time - b.time);\r\n\r\n        const resultContainer = document.createElement('ul');\r\n        resultContainer.className = 'mediasite-player__search-results-list';\r\n        _resultsEl.set(this, resultContainer);\r\n        if (results.length > 0) {\r\n            for (const result of results) {\r\n                const resultEl = generateSearchResult(\r\n                    result.type === SearchResultType.Caption ? result.text : localize('[Search result in slide text.]'),\r\n                    result.time / 1000,\r\n                    RESULT_TYPE_MAPPING[result.type],\r\n                    results.indexOf(result),\r\n                    this.player\r\n                );\r\n                resultContainer.appendChild(resultEl);\r\n                for (const type of ['click', 'keydown']) {\r\n                    resultEl.addEventListener(type, event => this.#handleClickedSearchResult(event));\r\n                }\r\n            }\r\n\r\n            const modal = _modal.get(this);\r\n            modal.contentEl().appendChild(resultContainer);\r\n            resultContainer.firstElementChild?.focus();\r\n        }\r\n\r\n        const form = _formEl.get(this);\r\n        form.querySelector('.mediasite-player__search-notice').textContent = `${localize('Found')} ${results.length} ${localize('results for')} '${searchTerm}'.`;\r\n    }\r\n\r\n    #handleSearchError() {\r\n        this.player.showMessage(localize('There was a problem getting search results. Try refreshing the page and searching again.'));\r\n        this.#enableFormControls();\r\n    }\r\n\r\n    #handleClickedSearchResult(event) {\r\n        if (event.type === 'keydown' && !(event.keyCode === 13 || event.keyCode === 32)) {\r\n            return;\r\n        }\r\n\r\n        const time = parseFloat(event.currentTarget.dataset.time);\r\n        this.player.currentTime(time);\r\n    }\r\n\r\n    #enableFormControls() {\r\n        const formEl = _formEl.get(this).querySelector('form');\r\n        for (const el of Array.from(formEl.querySelectorAll('input'))) {\r\n            el.disabled = false;\r\n        }\r\n    }\r\n\r\n    #disableFormControls() {\r\n        const formEl = _formEl.get(this).querySelector('form');\r\n        for (const el of Array.from(formEl.querySelectorAll('input'))) {\r\n            el.disabled = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the Search feature is enabled in the UI.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.search.enabled = true;\r\n     */\r\n    get enabled() {\r\n        return this.player.controlbarMenu().isMenuItemEnabled(this.name);\r\n    }\r\n\r\n    set enabled(enabled) {\r\n        if (enabled) {\r\n            this.player.controlbarMenu().enableMenuItem(this.name);\r\n        }\r\n        else {\r\n            this.player.controlbarMenu().disableMenuItem(this.name);\r\n        }\r\n    }\r\n\r\n    dispose() {\r\n        const modal = _modal.get(this);\r\n        this.player.layout().removeChild(modal);\r\n\r\n        if (this.player?.usingPlugin('controlbarMenu')) {\r\n            this.player.controlbarMenu().removeMenuItem(this.name);\r\n        }\r\n\r\n        super.dispose();\r\n    }\r\n}\r\n\r\nexport default SearchPlugin;\r\n","export default function generateSearchForm(player) {\r\n    const localize = player.localize?.bind(player);\r\n    const template = `<h2 id=\"mediasite-player__search-header\">${localize('Search Slides and Closed Captions')}</h2>\r\n<form>\r\n    <p class=\"search-box-holder\">\r\n        <input type=\"search\" required aria-labelledby=\"mediasite-player__search-header\" placeholder=\"${localize('Search')}...\"\r\n        aria-label=\"${localize(\"Search this presentation's slides and closed caption text\")}\"/>\r\n        <button class=\"search-button\" aria-label=\"${localize('Search')} value=\"${localize('Search')}\">\r\n            <svg viewBox=\"0 0 1024 1024\"><path class=\"path1\" d=\"M848.471 928l-263.059-263.059c-48.941 36.706-110.118 55.059-177.412 55.059-171.294 0-312-140.706-312-312s140.706-312 312-312c171.294 0 312 140.706 312 312 0 67.294-24.471 128.471-55.059 177.412l263.059 263.059-79.529 79.529zM189.623 408.078c0 121.364 97.091 218.455 218.455 218.455s218.455-97.091 218.455-218.455c0-121.364-103.159-218.455-218.455-218.455-121.364 0-218.455 97.091-218.455 218.455z\"></path></svg>\r\n        </button>\r\n    </p>\r\n    <p class=\"mediasite-player__search-notice\"></p>\r\n</form>`;\r\n\r\n    const container = document.createElement('div');\r\n    container.innerHTML = template;\r\n    return container;\r\n}\r\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/postcss-loader/dist/cjs.js!./seekbar-segment.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/postcss-loader/dist/cjs.js!./seekbar-segment-progress-bar.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\n\r\nimport './seekbar-segment-progress-bar.css'\r\n\r\nconst _startTime = new WeakMap();\r\nconst _endTime = new WeakMap();\r\n\r\nconst DEFAULT_PROGRESS_WIDTH = 0;\r\n\r\nexport default class SeekBarSegmentProgressBar extends videojs.getComponent('Component') {\r\n    /**\r\n     *\r\n     * @param {videojs.Player} player\r\n     * @param {Object} options\r\n     * @param {number} options.startTime\r\n     * @param {number} options.endTime\r\n     */\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        player.ready(() => {\r\n            const { startTime, endTime } = options;\r\n\r\n            this.startTime = startTime;\r\n            this.endTime = endTime;\r\n            this.segmentWidth = this.el().parentElement.getBoundingClientRect().width;\r\n\r\n            const resizeOb = new ResizeObserver(entries => {\r\n                for (const entry of entries) {\r\n                    this.updateWidth();\r\n                }\r\n            })\r\n\r\n            resizeOb.observe(this.player().getChild('ControlBar').getChild('ProgressControl').getChild('SeekBar').getChild('PlayProgressBar').el());\r\n        });\r\n    }\r\n\r\n    set startTime(startTime) {\r\n        _startTime.set(this, startTime);\r\n    }\r\n\r\n    get startTime() {\r\n        return _startTime.get(this);\r\n    }\r\n\r\n    set endTime(endTime) {\r\n        _endTime.set(this, endTime);\r\n    }\r\n\r\n    get endTime() {\r\n        return _endTime.get(this);\r\n    }\r\n\r\n    set width(width) {\r\n        this.el().style.width = width;\r\n    }\r\n\r\n    get width() {\r\n        return this.el().style.width;\r\n    }\r\n\r\n    updateWidth() {\r\n        const startTime = this.startTime;\r\n        const endTime = this.endTime;\r\n        const segmentWidth = this.el().parentElement.getBoundingClientRect().width;\r\n        const playProgressBarPosition = this.player().getChild('ControlBar').getChild('ProgressControl').getChild('SeekBar').getChild('PlayProgressBar').el().getBoundingClientRect().width;\r\n        const seekBarWidth = this.player().getChild('ControlBar').getChild('ProgressControl').getChild('SeekBar').el().getBoundingClientRect().width;\r\n\r\n        const startPosition = (startTime / this.player().duration()) * seekBarWidth;\r\n        const endPosition = (endTime / this.player().duration()) * seekBarWidth;\r\n\r\n        if (playProgressBarPosition > endPosition) {\r\n            this.width = '100%';\r\n        } else if (playProgressBarPosition < startPosition) {\r\n            this.width = '0%';\r\n        } else {\r\n            this.width = `${((playProgressBarPosition - startPosition) / segmentWidth) * 100}%`;\r\n        }\r\n\r\n    }\r\n\r\n    createEl(tag, props = {}, attributes = {}) {\r\n        tag = 'div';\r\n        props = Object.assign({\r\n            className: 'mediasite-player__seekbar-segment-progress-bar'\r\n        });\r\n        attributes = Object.assign({\r\n            style: `width: ${DEFAULT_PROGRESS_WIDTH}%`\r\n        });\r\n        return super.createEl.call(this, tag, props, attributes);\r\n    }\r\n\r\n}","import videojs from 'video.js';\r\n\r\nimport './seekbar-segment.css';\r\n\r\nimport SeekBarSegmentProgressBar from './seekbar-segment-progress-bar.js'\r\n\r\nconst _startTime = new WeakMap();\r\nconst _endTime = new WeakMap();\r\nconst _label = new WeakMap();\r\nconst _spacerWidth = new WeakMap();\r\nconst _progress = new WeakMap();\r\n\r\nconst DEFAULT_SPACER_WIDTH_PIXELS = 6;\r\n\r\nexport default class SeekBarSegment extends videojs.getComponent('Component') {\r\n    /**\r\n     * \r\n     * @param {videojs.Player} player\r\n     * @param {Object} options\r\n     * @param {number} options.startTime\r\n     * @param {number} options.endTime\r\n     * @param {string} options.label\r\n     * @param {number} options.spacerWidth\r\n     * @param {boolean} options.progress\r\n     */\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        player.ready(() => {\r\n            const { startTime, endTime, label, spacerWidth, progress } = options;\r\n            this.startTime = startTime;\r\n            this.endTime = endTime;\r\n            this.label = label;\r\n            this.spacerWidth = spacerWidth ?? DEFAULT_SPACER_WIDTH_PIXELS;\r\n            this.progress = progress;\r\n\r\n            this.createSegment();\r\n\r\n            const resizeOb = new ResizeObserver(entries => {\r\n                for (const entry of entries) {\r\n                    this.onResize();\r\n                }\r\n            })\r\n\r\n\r\n            resizeOb.observe(this.player().getChild('ControlBar').getChild('ProgressControl').getChild('SeekBar').getChild('PlayProgressBar').el());\r\n        });\r\n    }\r\n\r\n    onResize() {\r\n        this.createSegment();\r\n    }\r\n\r\n    set hidden(hidden) {\r\n        if (hidden) {\r\n            this.addClass('vjs-hidden');\r\n        }\r\n        else {\r\n            this.removeClass('vjs-hidden');\r\n        }\r\n    }\r\n\r\n    get hidden() {\r\n        return this.hasClass('vjs-hidden');\r\n    }\r\n\r\n    set startTime(startTime) {\r\n        _startTime.set(this, startTime);\r\n        this.label = this.label;\r\n    }\r\n\r\n    get startTime() {\r\n        return _startTime.get(this);\r\n    }\r\n\r\n    set endTime(endTime) {\r\n        _endTime.set(this, endTime);\r\n        this.label = this.label;\r\n    }\r\n\r\n    get endTime() {\r\n        return _endTime.get(this);\r\n    }\r\n\r\n    set label(label) {\r\n        _label.set(this, label);\r\n        const el = this.el();\r\n\r\n        if (label) {\r\n            el.style.setProperty('--tooltip-content', `\"${videojs.formatTime(this.startTime)} - ${label}\"`);\r\n            el.setAttribute('aria-label', label);\r\n        } else {\r\n            el.style.setProperty('--tooltip-content', `\"${videojs.formatTime(this.startTime)}`);\r\n        }\r\n    }\r\n\r\n    get label() {\r\n        return _label.get(this);\r\n    }\r\n\r\n    set spacerWidth(spacerWidth) {\r\n        _spacerWidth.set(this, spacerWidth);\r\n    }\r\n\r\n    get spacerWidth() {\r\n        return _spacerWidth.get(this);\r\n    }\r\n\r\n    set progress(progress) {\r\n        _progress.set(this, progress);\r\n        if (progress === true) {\r\n            this.updateSeekBarStyles();\r\n            this.addProgressBar();\r\n        } else {\r\n            this.updateSeekBarStyles();\r\n            this.removeProgressBar();\r\n        }\r\n    }\r\n\r\n    get progress() {\r\n        return _progress.get(this);\r\n    }\r\n\r\n    updateSeekBarStyles() {\r\n        const seekBar = this.player().getChild('ControlBar').getChild('ProgressControl').getChild('SeekBar').el();\r\n        const playProgressBar = this.player().getChild('ControlBar').getChild('ProgressControl').getChild('SeekBar').getChild('PlayProgressBar').el();\r\n        if (this.progress === true) {\r\n            seekBar.style.backgroundColor = 'transparent';\r\n            seekBar.style.overflowX = 'visible';\r\n            playProgressBar.style.backgroundColor = 'transparent';\r\n        } else {\r\n            seekBar.style.backgroundColor = '#676767';\r\n            seekBar.style.overflowX = 'hidden';\r\n            playProgressBar.style.backgroundColor = '#ec8b00';\r\n        }\r\n    }\r\n\r\n    addProgressBar() {\r\n        const player = this.player();\r\n\r\n        const startTime = this.startTime;\r\n        const endTime = this.endTime;\r\n\r\n        const seekBarSegmentProgressBar = new SeekBarSegmentProgressBar(player, { name: 'SeekBarSegmentProgressBar', startTime, endTime });\r\n        this.addChild(seekBarSegmentProgressBar);\r\n    }\r\n\r\n    removeProgressBar() {\r\n        this.el().removeChild('SeekBarSegmentProgressBar');\r\n    }\r\n\r\n    createSegment() {\r\n        const player = this.player();\r\n        const seekBarWidth = player.getChild('ControlBar').getChild('ProgressControl').getChild('SeekBar').el().getBoundingClientRect().width;\r\n        const presentationDuration = player.duration();\r\n        const spacerWidth = this.spacerWidth;\r\n        const spacerHalfWidth = spacerWidth / 2;\r\n        const startPosition = this.startTime / presentationDuration;\r\n        const endPosition = this.endTime / presentationDuration;\r\n        //sometimes, the start/end positions math can lead to floating decimals, rather than a rounded number\r\n        //rounding the positions messes up the positing with the timeline cursor, so new values are created for rounding\r\n        const roundedStartPosition = this.#roundToHundredth(startPosition);\r\n        const roundedEndPosition = this.#roundToHundredth(endPosition);\r\n        \r\n        const seekBarSegmentWidth = (seekBarWidth * (endPosition - startPosition));\r\n\r\n        let segmentWidth;\r\n        let segmentLeftPosition;\r\n\r\n        if (roundedStartPosition === 0 && roundedEndPosition === 1) {\r\n            segmentWidth = seekBarSegmentWidth;\r\n            segmentLeftPosition = startPosition;\r\n        } else if (seekBarSegmentWidth < spacerWidth) {\r\n            segmentWidth = seekBarSegmentWidth;\r\n            segmentLeftPosition = startPosition * seekBarWidth;\r\n        } else if (roundedStartPosition === 0) {\r\n            segmentWidth = (endPosition * seekBarWidth) - spacerHalfWidth;\r\n            segmentLeftPosition = startPosition;\r\n        } else if (roundedEndPosition === 1) {\r\n            segmentWidth = seekBarWidth * (roundedEndPosition - startPosition);\r\n            segmentLeftPosition = (startPosition * seekBarWidth) + spacerHalfWidth;\r\n        } else {\r\n            segmentWidth = seekBarSegmentWidth - spacerWidth;\r\n            segmentLeftPosition = (startPosition * seekBarWidth) + spacerHalfWidth;\r\n        }\r\n\r\n        this.el().style.setProperty('--seekbar-width', seekBarWidth);\r\n        this.el().style.setProperty('--seekbar-segment-width', segmentWidth);\r\n        this.el().style.setProperty('--seekbar-segment-pos-left', segmentLeftPosition);\r\n    }\r\n\r\n    #roundToHundredth(num) {\r\n        return Math.ceil(num * 100) / 100;\r\n    }\r\n\r\n    createEl(tag, props = {}, attributes = {}) {\r\n        tag = 'div';\r\n        props = Object.assign({\r\n            className: 'mediasite-player__seekbar-segment'\r\n        });\r\n\r\n        return super.createEl.call(this, tag, props, attributes);\r\n    }\r\n}","import videojs from 'video.js';\r\nimport Fn from 'video.js';\r\n\r\nimport { v4 as uuid } from 'uuid';\r\n\r\nimport SeekBarSegment from './seekbar-segments/seekbar-segment.js';\r\n\r\nconst _seekBarSegments = new WeakMap();\r\n\r\n/**\r\n * @typedef {Object} seekBarSegmentConfig\r\n * @alias SeekBarSegmentsConfig\r\n * @memberof SeekBarSegmentsPlugin\r\n * @property {string} [id] An ID by which to identify the segment.\r\n * @property {number} time The time in seconds.\r\n * @property {string} label A label that will be visible in the UI.\r\n * @property {number} [spacerWidth] The segment width in pixels.\r\n * @property {boolean} [progress] Whether a PlayProgressBar should be added to the segment\r\n */\r\n\r\n/**\r\n * The SeekBarSegments module.\r\n * @member {SeekBarSegmentsPlugin} seekBarSegments\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Configures segments to break up seekbar into sections.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass SeekBarSegmentsPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n        _seekBarSegments.set(this, {});\r\n    }\r\n    /**\r\n     * \r\n     * @param {SeekBarSegmentsConfig} segmentConfig A segment to add to the timeline.\r\n     * @returns {string} The segment's ID.\r\n     * @example\r\n     * const segmentId = player.seekBarSegments.add({\r\n     *     startTime: 0.0,\r\n     *     endTime: 20.0,\r\n     *     label: 'Introduction',\r\n     *     spacerWidth: 5,\r\n     *     progress: true\r\n     * });\r\n     */\r\n    add(segmentConfig) {\r\n        const { startTime, endTime, label, spacerWidth, progress } = segmentConfig;\r\n        const id = segmentConfig.id ?? uuid();\r\n        const seekBarSegment = new SeekBarSegment(this.player, { startTime, endTime, label, spacerWidth, progress });\r\n        const seekBar = this.player.getChild('ControlBar').getChild('ProgressControl').getChild('SeekBar');\r\n        seekBar.addChild(seekBarSegment);\r\n        _seekBarSegments.get(this)[id] = seekBarSegment;\r\n\r\n        this.#sortAll();\r\n\r\n        return id;\r\n    }\r\n\r\n    /**\r\n     * Removes a segment from the seekbar.\r\n     * @param {string} id The segment's unique ID.\r\n     * @example\r\n     * player.seekBarSegments.remove('segmentId');\r\n     */\r\n    remove(id) {\r\n        const segment = _seekBarSegments.get(this)[id];\r\n        if (segment) {\r\n            const controlBar = this.player.getChild('ControlBar').getChild('ProgressControl').getChild('SeekBar');\r\n            controlBar.removeChild(segment);\r\n            delete _seekBarSegments.get(this)[id];\r\n            this.#sortAll();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Updates the timeline segment with the given ID.\r\n     * @param {string} id\r\n     * @param {Object} data\r\n     * @param {number} data.startTime The start time in seconds.\r\n     * @param {number} data.endTime The end time in seconds.\r\n     * @param {string} data.label A label for the segment.\r\n     * @param {number} data.spacerWidth The width of a segment.\r\n     * @param {boolean} data.progress Whether a segment includes a progress bar.\r\n     * @example\r\n     * player.seekBarSegments.update('segmentId', { });\r\n     */\r\n    update(id, data) {\r\n        const { startTime, endTime, label, spacerWidth, progress } = (data ?? {});\r\n\r\n        const segment = _seekBarSegments.get(this)[id];\r\n        if (segment) {\r\n            // Update timeline segment\r\n            if (startTime) {\r\n                segment.startTime = startTime;\r\n            }\r\n            if (endTime) {\r\n                segment.endTime = endTime;\r\n            }\r\n            if (label) {\r\n                segment.label = label;\r\n            }\r\n            if (spacerWidth) {\r\n                segment.spacerWidth = spacerWidth;\r\n            }\r\n            if (progress) {\r\n                segment.progress = progress;\r\n            }\r\n            segment.hidden = !data;\r\n        }\r\n\r\n        this.#sortAll();\r\n    }\r\n\r\n    /**\r\n     * Gets the data for the timeline segment with the given ID.\r\n     * @param {string} id\r\n     * @returns {{text:string,time:number,spacerWidth:number}}\r\n     * @example\r\n     * const segment = player.seekBarSegments.get('segmentId');\r\n     */\r\n    get(id) {\r\n        const segment = _seekBarSegments.get(this)[id];\r\n        if (segment) {\r\n            return {\r\n                text: segment.label,\r\n                time: segment.time,\r\n                spacerWidth: segment.spacerWidth\r\n            }\r\n        }\r\n    }\r\n\r\n    #sortAll() {\r\n        const playProgressBar = this.player.getChild('ControlBar').getChild('ProgressControl').getChild('SeekBar').getChild('PlayProgressBar');\r\n        const currentSegments = playProgressBar.children();\r\n\r\n        for (const seekBarSegment of currentSegments) {\r\n            playProgressBar.removeChild(seekBarSegment);\r\n        }\r\n\r\n        const seekBarSegments = Object.values(_seekBarSegments.get(this)).sort((a, b) => {\r\n            if (a.startTime > b.endTime) {\r\n                return 1;\r\n            }\r\n            else if (a.startTime < b.endTime) {\r\n                return 0;\r\n            }\r\n            return 0;\r\n        });\r\n\r\n        for (const seekBarSegment of seekBarSegments) {\r\n            playProgressBar.addChild(seekBarSegment);\r\n        }\r\n    }\r\n\r\n    clear() {\r\n        const seekBarSegments = _seekBarSegments.get(this);\r\n        for (const segmentId of Object.keys(seekBarSegments)) {\r\n            this.remove(segmentId);\r\n        }\r\n\r\n        //creating the seekbar segements changes the seek bar and play progress bar. This reverts the inline style changes they make\r\n        const seekBar = this.player.getChild('ControlBar').getChild('ProgressControl').getChild('SeekBar').el();\r\n        seekBar.removeAttribute(\"style\");\r\n\r\n        const playProgressBar = this.player.getChild('ControlBar').getChild('ProgressControl').getChild('SeekBar').getChild('PlayProgressBar').el();\r\n        playProgressBar.style.removeProperty('background-color');\r\n    }\r\n\r\n    dispose() {\r\n        this.clear();\r\n        super.dispose();\r\n    }\r\n}\r\n\r\nexport default SeekBarSegmentsPlugin;\r\n","import videojs from 'video.js';\r\nimport 'videojs-sprite-thumbnails';\r\n\r\nconst _enabled = new WeakMap();\r\nconst _width = new WeakMap();\r\nconst _height = new WeakMap();\r\nconst _columns = new WeakMap();\r\nconst _rows = new WeakMap();\r\nconst _interval = new WeakMap();\r\nconst _aspectRatio = new WeakMap();\r\n\r\nconst REFERENCE_WIDTH = 1920;\r\nconst MIN_DOWNLINK_SPEED_MBPS = 0; // default is 1.5, we set it to 0 to disable the downlink check (MVP #2429)\r\n\r\n/**\r\n * The Thumbnails module.\r\n * @member {ThumbnailsPlugin} seekThumbnails\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Configures seek thumbnails to show an image preview on seek or hover over the seek bar.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass SeekThumbnailsPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n    }\r\n\r\n    /**\r\n     * Initializes the plugin with the given data.\r\n     * @param {VTTCue} chapter\r\n     * @returns {string}\r\n     * @example\r\n     * player.thumbnails.init({});\r\n     */\r\n    init(options) {\r\n        if (!options || !Object.keys(options)) {\r\n            this.enabled = false;\r\n            return;\r\n        }\r\n\r\n        this.height = options.Height;\r\n        this.width = options.Width;\r\n        if (options.Height && options.Width) {\r\n            this.aspectRatio = options.Width / options.Height;\r\n        }\r\n        \r\n        this.player.spriteThumbnails({\r\n            interval: options.Interval,\r\n            url: options.URL,\r\n            idxTag: function (index) {\r\n                return `000${index + 1}`.slice(-4);\r\n            },\r\n            width: this.width,\r\n            height: this.height,\r\n            columns: options.Columns,\r\n            rows: options.Rows,\r\n            downlink: MIN_DOWNLINK_SPEED_MBPS,\r\n            responsive: REFERENCE_WIDTH\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Whether or not to enable the thumbnails UI.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.thumbnails.enabled = true;\r\n     */\r\n    get enabled() {\r\n        return _enabled.get(this) ?? false;\r\n    }\r\n\r\n    set enabled(enabled) {\r\n        if (!enabled) {\r\n            this.player.removeClass('vjs-sprite-thumbnails');\r\n        }\r\n        _enabled.set(this, enabled);\r\n    }\r\n\r\n    /**\r\n     * The desired display width of the thumbnail.\r\n     * @type {number}\r\n     * @example\r\n     * player.thumbnails.width = 500;\r\n     */\r\n    get width() {\r\n        return _width.get(this); //* ratio;\r\n    }\r\n\r\n    set width(width) {\r\n        _width.set(this, width);\r\n    }\r\n\r\n    /**\r\n     * The desired display height of the thumbnail\r\n     * @type {number}\r\n     * @example\r\n     * player.thumbnails.height = 100;\r\n     */\r\n    get height() {\r\n        return _height.get(this);\r\n    }\r\n\r\n    set height(height) {\r\n        _height.set(this, height);\r\n    }\r\n\r\n    /**\r\n     * Aspect ratio of the thumbnail image.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.thumbnails.aspectRatio = 1.8;\r\n     */\r\n    get aspectRatio() {\r\n        let ratio = _aspectRatio.get(this);\r\n        if (!ratio && this.width && this.height) {\r\n            ratio = this.width / this.height;\r\n        }\r\n        return ratio ?? 1.78;\r\n    }\r\n\r\n    set aspectRatio(ratio) {\r\n        _aspectRatio.set(this, ratio);\r\n    }\r\n\r\n    /**\r\n     * The number of images stacked horizontally in the thumbnail source image\r\n     * @type {number}\r\n     * @example\r\n     * player.thumbnails.columns = 5;\r\n     */\r\n    get columns() {\r\n        return _columns.get(this);\r\n    }\r\n\r\n    set columns(columns) {\r\n        _columns.set(this, columns);\r\n    }\r\n\r\n    /**\r\n     * The number of images stacked vertically in the thumbnail source image\r\n     * @type {number}\r\n     * @example\r\n     * player.thumbnails.rows = 5;\r\n     */\r\n    get rows() {\r\n        return _rows.get(this);\r\n    }\r\n\r\n    set rows(rows) {\r\n        _rows.set(this, rows);\r\n    }\r\n\r\n    /**\r\n     * The thumbnail refresh rate in seconds\r\n     * @type {number}\r\n     * @example\r\n     * player.thumbnails.interval = 10;\r\n     */\r\n    get interval() {\r\n        return _interval.get(this);\r\n    }\r\n\r\n    set interval(interval) {\r\n        _interval.set(this, interval);\r\n    }\r\n}\r\n\r\nexport default SeekThumbnailsPlugin;\r\n\r\nexport function fixTimeTooltipUpdate(player) {\r\n\r\n    // attempt to find the timeline tooltip\r\n    const timeTooltip = player.getChild('ControlBar')?.getChild('ProgressControl')?.getChild('SeekBar')?.getChild('MouseTimeDisplay')?.getChild('TimeTooltip');\r\n    if (timeTooltip != null) {\r\n\r\n        // override the update function with the fix that has been added to later versions of videojs: https://github.com/videojs/video.js/issues/8273\r\n        timeTooltip.update = (function () {\r\n            return function (seekBarRect, seekBarPoint, content) {\r\n                var tooltipRect = videojs.dom.findPosition(this.el_);\r\n                var playerRect = videojs.dom.getBoundingClientRect(this.player_.el());\r\n                var seekBarPointPx = seekBarRect.width * seekBarPoint; // do nothing if either rect isn't available\r\n                // for example, if the player isn't in the DOM for testing\r\n\r\n                if (!playerRect || !tooltipRect) {\r\n                    return;\r\n                } // This is the space left of the `seekBarPoint` available within the bounds\r\n                // of the player. We calculate any gap between the left edge of the player\r\n                // and the left edge of the `SeekBar` and add the number of pixels in the\r\n                // `SeekBar` before hitting the `seekBarPoint`\r\n\r\n\r\n                var spaceLeftOfPoint = seekBarRect.left - playerRect.left + seekBarPointPx; // This is the space right of the `seekBarPoint` available within the bounds\r\n                // of the player. We calculate the number of pixels from the `seekBarPoint`\r\n                // to the right edge of the `SeekBar` and add to that any gap between the\r\n                // right edge of the `SeekBar` and the player.\r\n\r\n                var spaceRightOfPoint = seekBarRect.width - seekBarPointPx + (playerRect.right - seekBarRect.right); // This is the number of pixels by which the tooltip will need to be pulled\r\n                // further to the right to center it over the `seekBarPoint`.\r\n\r\n                // spaceRightOfPoint is always NaN for mouse time display\r\n                // because the seekbarRect does not have a right property. This causes\r\n                // the mouse tool tip to be truncated when it's close to the right edge of the player.\r\n                // In such cases, we ignore the `playerRect.right - seekBarRect.right` value when calculating.\r\n                // For the sake of consistency, we ignore seekBarRect.left - playerRect.left for the left edge.\r\n                if (!spaceRightOfPoint) {\r\n                    spaceRightOfPoint = seekBarRect.width - seekBarPointPx;\r\n                    spaceLeftOfPoint = seekBarPointPx;\r\n                }\r\n\r\n                var pullTooltipBy = tooltipRect.width / 2; // Adjust the `pullTooltipBy` distance to the left or right depending on\r\n                // the results of the space calculations above.\r\n\r\n                if (spaceLeftOfPoint < pullTooltipBy) {\r\n                    pullTooltipBy += pullTooltipBy - spaceLeftOfPoint;\r\n                } else if (spaceRightOfPoint < pullTooltipBy) {\r\n                    pullTooltipBy = spaceRightOfPoint;\r\n                } // Due to the imprecision of decimal/ratio based calculations and varying\r\n                // rounding behaviors, there are cases where the spacing adjustment is off\r\n                // by a pixel or two. This adds insurance to these calculations.\r\n\r\n\r\n                if (pullTooltipBy < 0) {\r\n                    pullTooltipBy = 0;\r\n                } else if (pullTooltipBy > tooltipRect.width) {\r\n                    pullTooltipBy = tooltipRect.width;\r\n                } // prevent small width fluctuations within 0.4px from\r\n                // changing the value below.\r\n                // This really helps for live to prevent the play\r\n                // progress time tooltip from jittering\r\n\r\n\r\n                pullTooltipBy = Math.round(pullTooltipBy);\r\n                this.el_.style.right = \"-\" + pullTooltipBy + \"px\";\r\n                this.write(content);\r\n            }\r\n        }());\r\n    }\r\n}\r\n","import videojs from 'video.js';\r\n\r\nconst _enablePlayPause = new WeakMap();\r\nconst _enableFullScreen = new WeakMap();\r\nconst _enableSpeedControl = new WeakMap();\r\nconst _enableSeeking = new WeakMap();\r\nconst _enableSwapStreams = new WeakMap();\r\nconst _playbackRates = new WeakMap();\r\nconst _enablePIP = new WeakMap();\r\n\r\n/**\r\n * The Settings module.\r\n * @member {SettingsPlugin} settings\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Allows for the configuration of player behavior and parts of the UI.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass SettingsPlugin extends videojs.getPlugin('plugin') {\r\n    /**\r\n     * A boolean indicating whether or not the UI should allow the user to play or pause the video.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.settings.enablePlayPause = true;\r\n     */\r\n    get enablePlayPause() {\r\n        return _enablePlayPause.get(this) ?? true;\r\n    }\r\n\r\n    set enablePlayPause(enablePlayPause) {\r\n        _enablePlayPause.set(this, enablePlayPause);\r\n        const playButton = this.player.getDescendant('ControlBar', 'PlayToggle');\r\n        if (enablePlayPause) {\r\n            playButton.removeClass('vjs-hidden');\r\n        }\r\n        else {\r\n            playButton.addClass('vjs-hidden');\r\n        }\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the UI should allow the user to enter full screen mode.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.settings.enableFullScreen = true;\r\n     */\r\n    get enableFullScreen() {\r\n        return _enableFullScreen.get(this) ?? true;\r\n    }\r\n\r\n    set enableFullScreen(enableFullScreen) {\r\n        _enableFullScreen.set(this, enableFullScreen);\r\n        const fullscreenToggle = this.player.getDescendant('ControlBar', 'FullscreenToggle');\r\n        if (enableFullScreen) {\r\n            fullscreenToggle.removeClass('vjs-hidden');\r\n        }\r\n        else {\r\n            fullscreenToggle.addClass('vjs-hidden');\r\n        }\r\n\r\n        if (this.player.isFullscreen()) {\r\n            this.player.exitFullscreen();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the UI should allow the user to set the playback rate.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.settings.enableSpeedControl = true;\r\n     */\r\n    get enableSpeedControl() {\r\n        return _enableSpeedControl.get(this) ?? true;\r\n    }\r\n\r\n    set enableSpeedControl(enableSpeedControl) {\r\n        _enableSpeedControl.set(this, enableSpeedControl);\r\n        const speedControl = this.player.getDescendant('ControlBar', 'PlaybackRateMenuButton');\r\n        if (enableSpeedControl) {\r\n            speedControl.removeClass('vjs-hidden');\r\n        }\r\n        else {\r\n            speedControl.addClass('vjs-hidden');\r\n        }\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the UI should allow the user to seek.\r\n     * @type {boolean}\r\n     * @example\r\n     * player.settings.enableSeeking = true;\r\n     */\r\n    get enableSeeking() {\r\n        return _enableSeeking.get(this) ?? true;\r\n    }\r\n    set enableSeeking(enableSeeking) {\r\n        _enableSeeking.set(this, enableSeeking);\r\n        const progressControl = this.player.getChild('ControlBar').getChild('ProgressControl');\r\n        const playProgressBar = progressControl.getChild('SeekBar').getChild('PlayProgressBar');\r\n        const timeTooltip = playProgressBar?.getChild('TimeTooltip');\r\n        const forwardSeek = this.player.getChild('ControlBar').getChild('SeekForwardButton');\r\n        const backwardSeek = this.player.getChild('ControlBar').getChild('SeekBackButton');\r\n\r\n        if (enableSeeking) {\r\n            progressControl?.enable();\r\n            playProgressBar?.el().style.setProperty('--seek-thumb-color', `#ec8b00`);\r\n            timeTooltip?.removeClass('vjs-hidden')\r\n            forwardSeek.show();\r\n            backwardSeek.show();\r\n        } else {\r\n            progressControl?.disable();\r\n            progressControl?.on(progressControl.el(), 'mousemove', progressControl.handleMouseMove);\r\n            progressControl?.getChild('SeekBar').getChild('MouseTimeDisplay')?.show();\r\n            playProgressBar?.el().style.setProperty('--seek-thumb-color', `transparent`);\r\n            timeTooltip?.addClass('vjs-hidden');\r\n            forwardSeek.hide();\r\n            backwardSeek.hide();\r\n        }\r\n    }\r\n\r\n    /**\r\n    * A boolean indicating whether or not the UI should allow the user to enable picture in picture mode.\r\n    * @type {boolean}\r\n    * @example\r\n    * player.settings.enablePIP = true;\r\n    */\r\n    get enablePIP() {\r\n        return _enablePIP.get(this) ?? true;\r\n    }\r\n    set enablePIP(enablePIP) {\r\n        _enablePIP.set(this, enablePIP);\r\n\r\n        if (enablePIP) {\r\n            this.player.getChild('ControlBar')?.getChild('PictureInPictureToggle')?.show();\r\n        }\r\n        else {\r\n            this.player.getChild('ControlBar')?.getChild('PictureInPictureToggle')?.hide();\r\n        }\r\n    }\r\n\r\n        /**\r\n    * A boolean indicating whether or not the UI should allow the user to enable swapping/cycling streams.\r\n    * @type {boolean}\r\n    * @example\r\n    * player.settings.enableSwapStreams = true;\r\n    */\r\n    get enableSwapStreams() {\r\n        return _enableSwapStreams.get(this) ?? true;\r\n    }\r\n    set enableSwapStreams(enableSwap) {\r\n        _enableSwapStreams.set(this, enableSwap);\r\n\r\n        if (enableSwap) {\r\n            this.player.getChild('ControlBar')?.getChild('SwapStreamsButton')?.show();\r\n        }\r\n        else {\r\n            this.player.getChild('ControlBar')?.getChild('SwapStreamsButton')?.hide();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Gets or sets the player's background color.\r\n     * @type {string}\r\n     * @example\r\n     * player.settings.backgroundColor = '#000';\r\n     */\r\n    get backgroundColor() {\r\n        const computedStyle = getComputedStyle(this.player.el());\r\n        return computedStyle.getPropertyValue('background-color');\r\n    }\r\n\r\n    set backgroundColor(backgroundColor) {\r\n        this.player.el().style.backgroundColor = backgroundColor;\r\n    }\r\n\r\n    /**\r\n     * Gets or sets playback rates offered in the UI.\r\n     * @type {Array.<number>}\r\n     * @example\r\n     * player.settings.playbackRates = [0.5, 1.0, 2.0];\r\n     */\r\n    get playbackRates() {\r\n        return _playbackRates.get(this) ?? [];\r\n    }\r\n\r\n    set playbackRates(rates) {\r\n        _playbackRates.set(this, rates);\r\n        this.player.playbackRates(rates);\r\n    }\r\n}\r\n\r\nexport default SettingsPlugin;\r\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/postcss-loader/dist/cjs.js!./share-form.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\n\r\nimport ModalDialog from '../../components/modal-dialog.js';\r\n\r\nimport generateShareForm from './share/share-form.js';\r\nimport { getMsFromString, enableFieldByCheckbox, padTimeBasedUponDuration, createValidationForTimeString } from '../../util/shared-control-bar.js';\r\nimport './share/share-form.css';\r\n\r\nimport { isPresentationId } from '../../util';\r\nimport { PresentationStatus } from '../../api/presentation';\r\nimport ShareIcon from '../../assets/images/share-white-24dp.svg';\r\n\r\nconst _modal = new WeakMap();\r\nconst _content = new WeakMap();\r\nlet localize;\r\n\r\n/**\r\n * The Share module.\r\n * @member {SharePlugin} share\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Configures the share button that is displayed in the control bar menu.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n */\r\nclass SharePlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, options);\r\n\r\n        const modal = new ModalDialog(player, {\r\n            temporary: false,\r\n            uncloseable: false,\r\n            pauseOnOpen: false,\r\n            description: localize('Share Presentation'),\r\n            displayAsPanel: true\r\n        });\r\n        modal.addClass('mediasite-player__share-modal');\r\n        modal.addClass('mediasite-player__control-bar-modal');\r\n        _modal.set(this, modal);\r\n        player.controlbarMenu().addMenuItem(localize('Share Presentation'), { id: this.name, icon: ShareIcon, callback: () => this.openModal() });\r\n\r\n        player.ready(() => {\r\n            player.layout().addChild(modal);\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Opens the Share modal dialog.\r\n     * @example\r\n     * player.share.openModal();\r\n     */\r\n    openModal() {\r\n        if (isPresentationId(this.player.loader().presentationId) && this.enabled) {\r\n            const modal = _modal.get(this);\r\n            const content = generateShareForm(this.player);\r\n            _content.set(this, content);\r\n\r\n            this.setupModalContent(content);\r\n            modal.fillWith(content);\r\n            modal.open();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Closes the Share modal dialog.\r\n     * @example\r\n     * player.share.closeModal();\r\n     */\r\n    closeModal() {\r\n        _modal.get(this).close();\r\n    }\r\n\r\n    /**\r\n     * Updates the content of the share modal\r\n     * @private\r\n     * @param {HTMLDivElement} content\r\n     * player.share.setupModalContent();\r\n     */\r\n    setupModalContent(content) {\r\n        this.#hideIfLive(content.querySelector('.time-fieldset'));\r\n\r\n        //set up the time checkbox and field the same way as the ask a question modal\r\n        const timeCheckbox = content.querySelector('input[type=checkbox]');\r\n        const timeField = content.querySelector('input[name=time]');\r\n\r\n        enableFieldByCheckbox(timeField, timeCheckbox);\r\n        timeField.value = padTimeBasedUponDuration(videojs.formatTime, this.player.currentTime(), this.player.duration());\r\n        timeField.setAttribute(\"pattern\", createValidationForTimeString(timeField.value));\r\n\r\n        const presentationLinkField = content.querySelector(\"#share-presentation-link\");\r\n\r\n        let copyURL = new URL(`${location.protocol}//${location.host}${location.pathname}`);\r\n        this.#updateTextarea(presentationLinkField, copyURL);\r\n\r\n        // When timeCheckbox changes, add or remove the playfrom parameter\r\n        timeCheckbox.addEventListener('change', event => {\r\n            if (!timeCheckbox.checked) {\r\n                if (copyURL.searchParams.has(\"playfrom\")) {\r\n                    copyURL.searchParams.delete(\"playfrom\");\r\n                }\r\n                this.#updateTextarea(presentationLinkField, copyURL);\r\n            } else {\r\n                this.#updateTextarea(presentationLinkField, this.#addTimeValueToURL(copyURL, timeField.value));\r\n            }\r\n        });\r\n\r\n        timeField.addEventListener('change', event => {\r\n            this.#updateTextarea(presentationLinkField, this.#addTimeValueToURL(copyURL, timeField.value));\r\n            });\r\n\r\n        this.#copyTextareaOnClick(content.querySelector(\"#share-copy-link\"), presentationLinkField);\r\n\r\n        //allows the pop-up for the time field validation to work without submitting anything\r\n        this.#disableFormSubmit(content.querySelector('form'));\r\n        \r\n        }\r\n\r\n    /**\r\n     * Depending if the video is live or not, hide the provided element.\r\n     **/\r\n    #hideIfLive(elementToHide) {\r\n        let liveStatus = this.player.live?.().status;\r\n        //if we're doing a live video, remove the ability to copy the time\r\n        if (liveStatus && liveStatus !== PresentationStatus.OnDemand) {\r\n            elementToHide.classList.add(\"vjs-hidden\");\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Adds the time value into the url through the playfrom parameter.\r\n     * Updates it if there already is a playfrom parameter.\r\n     * Removes the playfrom parameter if the value provided is invalid.\r\n     **/\r\n    #addTimeValueToURL(url, timeValue) {\r\n        let convertedValue = getMsFromString(timeValue);\r\n\r\n        //we can't have a negative time value to travel to, so remove the playfrom if one is attempted\r\n        if (convertedValue < 0) {\r\n            if (url.searchParams.has(\"playfrom\")) {\r\n                url.searchParams.delete(\"playfrom\");\r\n            }\r\n\r\n            return url;\r\n        }\r\n\r\n        if (url.searchParams.has(\"playfrom\")) {\r\n            url.searchParams.set(\"playfrom\", convertedValue);\r\n        } else {\r\n            url.searchParams.append(\"playfrom\", convertedValue);\r\n        }\r\n        return url;\r\n    }\r\n\r\n    /**\r\n     * Updates the text area with the string version of whatever value is provided.\r\n    */\r\n    #updateTextarea(textarea, value) {\r\n        textarea.value = value.toString();\r\n    }\r\n\r\n    /**\r\n     * Sets up an element to copy the value of the textarea to the user's clipboard when the element is clicked.\r\n    */ \r\n    #copyTextareaOnClick(clickElement, textarea) {\r\n        if (!clickElement || !textarea) {\r\n            return;\r\n        }\r\n        clickElement.addEventListener('click', event => {\r\n            textarea.select();\r\n            navigator.clipboard.writeText(textarea.value);\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Prevents the form provided from submitting anything on submit.\r\n     */\r\n    #disableFormSubmit(form) {\r\n        if (!form) {\r\n            return;\r\n        }\r\n        form.addEventListener('submit', event => {\r\n            event.preventDefault();\r\n        });\r\n    }\r\n\r\n    /**\r\n     * A boolean indicating whether or not the Share feature is enabled in the UI.<br><br>\r\n     * Note: disabling the player's Share feature will not prevent users from sharing the page or its content via default browser means (such as the location bar).\r\n     * @type {boolean}\r\n     * @example\r\n     * player.share.enabled = true;\r\n     */\r\n    get enabled() {\r\n        return this.player.controlbarMenu().isMenuItemEnabled(this.name);\r\n    }\r\n\r\n    set enabled(enabled) {\r\n        if (enabled) {\r\n            this.player.controlbarMenu().enableMenuItem(this.name);\r\n        }\r\n        else {\r\n            this.player.controlbarMenu().disableMenuItem(this.name);\r\n        }\r\n    }\r\n\r\n    dispose() {\r\n        if (this.player?.usingPlugin('controlbarMenu')) {\r\n            this.player.controlbarMenu().removeMenuItem(this.name);\r\n        }\r\n\r\n        super.dispose();\r\n    }\r\n}\r\n\r\nexport default SharePlugin;\r\n","export default function generateShareForm(player) {\r\n    const localize = player.localize?.bind(player);\r\n    const template = `<h2 id=\"mediasite-player__search-header\">${localize('Share Presentation')}</h2>\r\n<form>\r\n    <p><fieldset class=\"time-fieldset\"><legend class=\"vjs-hidden\">${localize('Time')}</legend><input type=\"checkbox\" name=\"timeCheckbox\" aria-label=\"${localize('Start Time')}\"/><span>${localize('Time at')}</span><input name=\"time\" pattern=\"^\\\\d\\\\d:[0-5]\\\\d:[0-5]\\\\d$\" aria-label=\"${localize('Time')}\" /></fieldset></p>\r\n    <p class=\"share-presentation-holder\">\r\n        <textarea id=\"share-presentation-link\" type=\"text\" name=\"share-link\" readonly=\"readonly\"></textarea>\r\n        <a id=\"share-copy-link\" class=\"player-primary-link\"/>${localize('Copy')}</a>\r\n    </p>\r\n</form>`;\r\n\r\n    const container = document.createElement('div');\r\n    container.innerHTML = template;\r\n    return container;\r\n}","import videojs from 'video.js';\r\nimport Overlay, { OverlayPosition } from '../../components/overlay.js';\r\nimport ModalDialog from '../../components/modal-dialog.js';\r\n\r\n/**\r\n * Shows a short string of plain text in a basic modal.\r\n * @memberof MediasitePlayer#\r\n * @param {string} message\r\n * @param {Object} [options]\r\n * @param {boolean} [options.uncloseable]\r\n * @returns {videojs.ModalDialog}\r\n * @example\r\n * player.showMessage('This message shows in a nicely-styled modal dialog.');\r\n */\r\nfunction showMessage(message, options = {}) {\r\n    if (typeof message === 'string') {\r\n        const player = this;\r\n        const { url, classes, ...rest } = options;\r\n        \r\n        const overlay = new Overlay(player, {\r\n            text: message,\r\n            url,\r\n            position: OverlayPosition.Center,\r\n            className: classes ? classes.join(' ') : ''\r\n        });\r\n\r\n        if (classes) {\r\n            //When the modal opens, it slides in.  The styling added gets a bit jumpy until the modal is all the way open.\r\n            //Hide the overlay until the modal is all the way open.\r\n            overlay.el().style.display = 'none';\r\n            setTimeout(function () {\r\n                overlay.el().style.display = 'block';\r\n            }, 250);\r\n        }\r\n\r\n        const modal = new ModalDialog(player, {\r\n            text: message,\r\n            content: [overlay.el()],\r\n            solidBackground: false,\r\n            ...rest\r\n        });\r\n\r\n        modal.addClass(\"mediasite-player__show-message-modal\");\r\n        player.addChild(modal);\r\n        modal.open();\r\n        return modal;\r\n    }\r\n}\r\n\r\nexport default showMessage;\r\n","const LAYOUTS = {\r\n    '2x2': [\r\n        { top: 0, left: 0, width: .5, height: .5 },\r\n        { top: 0, left: .5, width: .5, height: .5 },\r\n        { top: .5, left: 0, width: .5, height: .5 },\r\n        { top: .5, left: .5, width: .5, height: .5 }\r\n    ],\r\n    '3x1': [\r\n        { top: .125, left: .375, width: .25, height: .75 },\r\n        { top: .25, left: .0625, width: .25, height: .5 },\r\n        { top: .25, left: .6875, width: .25, height: .5 }\r\n    ],\r\n    '2x1': [\r\n        { top: .25, left: 0, width: 0.496875, height: .5 },\r\n        { top: .25, left: .503125, width: 0.496875, height: .5 }\r\n    ],\r\n    'timed': [\r\n        { top: .25, left: 0, width: .5, height: .5, time: 31.97, duration: 7 },\r\n        { top: .25, left: .5, width: .5, height: .5, time: 31.97, duration: 7 },\r\n\r\n        { top: .1657, left: 0, width: .66, height: .6616, time: 43.57, duration: 6.5 },\r\n        { top: .1657, left: .6625, width: .3346, height: .3218, time: 43.67, duration: 6.5 },\r\n        { top: .4917, left: .6625, width: .3346, height: .3218, time: 43.67, duration: 6.5 },\r\n\r\n        { top: 0, left: 0, width: .5, height: .5, time: 55.23, duration: 5.77 },\r\n        { top: 0, left: .5, width: .5, height: .5, time: 55.23, duration: 5.77 },\r\n        { top: .5, left: 0, width: .5, height: .5, time: 55.23, duration: 5.77 },\r\n        { top: .5, left: .5, width: .5, height: .5, time: 55.23, duration: 5.77 },\r\n\r\n        { top: .1157, left: 0, width: .7463, height: .7671, time: 61.07, duration: 12.16 },\r\n        { top: .1157, left: .7495, width: .2419, height: .7671, time: 61.07, duration: 12.16 },\r\n\r\n        { top: .7417, left: .7400, width: .2419, height: .2412, time: 89.43, duration: 9.07 },\r\n\r\n        { top: .0625, left: .0427, width: .4141, height: .4141, time: 98.57, duration: 9.13 }\r\n    ],\r\n    'demo': [\r\n        { top: 0, left: 0, width: .5, height: .5, time: 0, duration: 65 },\r\n        { top: 0, left: .5, width: .5, height: .5, time: 0, duration: 65 },\r\n        { top: .5, left: 0, width: .5, height: .5, time: 0, duration: 65 },\r\n        { top: .5, left: .5, width: .5, height: .5, time: 0, duration: 65 },\r\n\r\n        { top: 1 / 6, left: 0, width: 2 / 3, height: 2 / 3, time: 67, duration: 48 },\r\n        { top: 1 / 6, left: 2 / 3, width: 1 / 3, height: 1 / 3, time: 67, duration: 48 },\r\n        { top: 1 / 2, left: 2 / 3, width: 1 / 3, height: 1 / 3, time: 67, duration: 48 },\r\n\r\n        { top: .25, left: 0, width: 0.5, height: .5, time: 117, duration: 75 },\r\n        { top: .25, left: 0.5, width: 0.5, height: .5, time: 117, duration: 75 }\r\n    ]\r\n}\r\n\r\nexport default LAYOUTS;\r\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./smartzoom.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\nimport { v4 as uuid } from 'uuid';\r\nimport LAYOUTS from './smartzoom/layouts.js';\r\nimport { calcDimensions } from '../../util';\r\nimport { QueryStringParamProvider } from 'PLAYER_SRC/implementations/player-page/helpers.js';\r\n\r\nimport './smartzoom.css';\r\n\r\nconst _wrapper = new WeakMap();\r\nconst _controlsOverlay = new WeakMap();\r\nconst _clickToExit = new WeakMap();\r\nconst _canvas = new WeakMap();\r\nconst _target = new WeakMap();\r\nconst _aspect = new WeakMap();\r\nlet localize;\r\n\r\n/**\r\n * The Smartzoom module.\r\n * @member {SmartzoomPlugin} smartzoom\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Allows the user to zoom into specific regions within the video. Works by resizing the <video> element and cropping away the non-zoomed areas with CSS <code>clip-path</code>.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass SmartzoomPlugin extends videojs.getPlugin('plugin') {\r\n    /**\r\n     * \r\n     * @param {videojs.Player} player\r\n     * @param {Object} [options]\r\n     */\r\n    constructor(player, options) {\r\n        localize = player.localize?.bind(player);\r\n        super(player, options);\r\n\r\n        // Temp, for ease of testing:\r\n        const params = new URLSearchParams(location.search);\r\n        const presetName = params.get('smartzoom');\r\n        const testRegions = LAYOUTS[presetName] ?? [];\r\n\r\n        this.regionCount = 0;\r\n        this.activeRegion = null;\r\n        this.lastFocused = null;\r\n\r\n        this.on(player, 'playerresize', this.#handlePlayerResize);\r\n\r\n        this.windowResizeListener = () => this.#handlePlayerResize();\r\n        window.addEventListener('resize', this.windowResizeListener);\r\n\r\n        const Component = videojs.getComponent('Component');\r\n        const component = new Component(player, { name: 'SmartZoom' });\r\n        component.addClass('mediasite-player__smartzoom-wrapper');\r\n        const paramProvider = new QueryStringParamProvider(location.search);\r\n        if (paramProvider.getParam('DisableInteractiveOverlays')?.toLowerCase() === 'true') {\r\n            component.addClass('mediasite-player__disabled-interactive');\r\n        }\r\n        _wrapper.set(this, component);\r\n\r\n        const canvas = document.createElement('canvas');\r\n        canvas.classList.add('mediasite-player__smartzoom-canvas');\r\n        _canvas.set(this, canvas);\r\n        component.el().appendChild(canvas);\r\n\r\n        const smartzoomContainer = document.createElement('div');\r\n        smartzoomContainer.classList.add('mediasite-player__smartzoom-controls-overlay');\r\n        _controlsOverlay.set(this, smartzoomContainer);\r\n\r\n        component.el().appendChild(smartzoomContainer);\r\n\r\n        const clickToExit = document.createElement('div');\r\n        _clickToExit.set(this, clickToExit);\r\n        clickToExit.classList.add('mediasite-player__smart-zoom-exit-container');\r\n        clickToExit.addEventListener('click', (...args) => this.#handleClickToExit(...args));\r\n        clickToExit.hidden = true;\r\n\r\n        const clickToExitButton = document.createElement('button');\r\n        clickToExitButton.classList.add('mediasite-player__smart-zoom-exit-button')\r\n        clickToExitButton.addEventListener('keydown', (...args) => this.#handleClickToExitKeydown(...args));\r\n        clickToExitButton.setAttribute('aria-label', localize('Close'));\r\n        clickToExit.appendChild(clickToExitButton);\r\n\r\n        component.el().appendChild(clickToExit);\r\n\r\n        player.ready(() => {\r\n            player.layout().addChild(component);\r\n            this.#moveComponentAfterVideo();\r\n\r\n            // Default to the main video element as a target\r\n            this.target = player.tech(true).el();\r\n\r\n            // Update dimensions\r\n            this.#handlePlayerResize();\r\n        });\r\n\r\n        player.one('loadedmetadata', () => {\r\n            for (let i = 0; i < testRegions.length; i++) {\r\n                const current = testRegions[i];\r\n                this.addRegion(current);\r\n            }\r\n        });\r\n\r\n        player.one(['loadeddata', 'loadedmetadata'], () => {\r\n            if (isNaN(this.aspect) || !this.aspect) {\r\n                this.aspect = player.videoWidth() / player.videoHeight();\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * The HTML element that will be resized when the user clicks a clickable region.\r\n     * @type {HTMLElement}\r\n     * @example\r\n     * player.smartzoom.target = someHtmlElementWithinPlayer;\r\n     */\r\n    get target() {\r\n        return _target.get(this);\r\n    }\r\n\r\n    set target(target) {\r\n        const oldTarget = _target.get(this);\r\n        if (oldTarget) {\r\n            oldTarget.classList.remove('mediasite-player__smartzoomable');\r\n        }\r\n\r\n        target?.classList?.add('mediasite-player__smartzoomable');\r\n        _target.set(this, target);\r\n        this.#handlePlayerResize();\r\n    }\r\n\r\n    /**\r\n     * The aspect ratio of the current presentation. Used when calculating content dimensions during resizing.\r\n     * @type {number}\r\n     * @example\r\n     * player.smartzoom.aspect = 16 / 9;\r\n     */\r\n    get aspect() {\r\n        return _aspect.get(this);\r\n    }\r\n\r\n    set aspect(aspect) {\r\n        _aspect.set(this, aspect);\r\n        this.#handlePlayerResize();\r\n    }\r\n\r\n    /** @private */\r\n    #handlePlayerResize() {\r\n        try {\r\n            const controlsOverlay = _controlsOverlay.get(this);\r\n\r\n            if (controlsOverlay) {\r\n                const wrapperEl = _wrapper.get(this).el();\r\n                let targetAspect = _aspect.get(this);\r\n\r\n                const region = this.activeRegion;\r\n                const size = calcDimensions(wrapperEl, targetAspect, region);\r\n\r\n                const targetHeight = size.height;\r\n                const targetWidth = size.width;\r\n                const scale = size.scale;\r\n\r\n                const xOffset = region ? region.left : 0;\r\n                const yOffset = region ? region.top : 0;\r\n                const clipWidth = region ? region.width : 1;\r\n                const clipHeight = region ? region.height : 1;\r\n\r\n                const targetEl = _target.get(this);\r\n                targetEl.style.setProperty('--video-width', isNaN(targetWidth) ? '100%' : `${targetWidth}px`);\r\n                targetEl.style.setProperty('--video-height', isNaN(targetHeight) ? '100%' : `${targetHeight}px`);\r\n\r\n                //allows other plugins to understand the height and width of what smartzoom is interacting with\r\n                targetEl.parentElement.style.setProperty('--video-width', isNaN(targetWidth) ? '100%' : `${targetWidth}px`);\r\n                targetEl.parentElement.style.setProperty('--video-height', isNaN(targetHeight) ? '100%' : `${targetHeight}px`);\r\n\r\n                targetEl.style.setProperty('--video-scale', scale);\r\n                targetEl.style.setProperty('--video-x-offset', `${xOffset * 100}%`);\r\n                targetEl.style.setProperty('--video-y-offset', `${yOffset * 100}%`);\r\n                targetEl.style.setProperty('--video-clip-width', `${clipWidth * 100}%`);\r\n                targetEl.style.setProperty('--video-clip-height', `${clipHeight * 100}%`);\r\n\r\n                if (!region) {\r\n                    controlsOverlay.style.width = `${targetWidth}px`;\r\n                    controlsOverlay.style.height = `${targetHeight}px`;\r\n                }\r\n            }\r\n        }\r\n        catch (e) { }\r\n    }\r\n\r\n    /** @private */\r\n    #handleRegionKeydown(event) {\r\n        if (event.keyCode == 13 || event.keyCode == 32) {\r\n            event.preventDefault();\r\n            event.stopPropagation();\r\n            this.#handleRegionClick(event);\r\n        }\r\n    }\r\n\r\n    /** @private */\r\n    #handleRegionClick(event) {\r\n        this.lastFocused = document.activeElement;\r\n        this.activeRegion = JSON.parse(event.target.dataset.region);\r\n        const region = this.activeRegion;\r\n\r\n        this.zoom(region.left, region.top, region.width, region.height);\r\n    }\r\n\r\n    /** @private */\r\n    #handleClickToExitKeydown(event) {\r\n        if (event.keyCode == 13 || event.keyCode == 32) {\r\n            event.preventDefault();\r\n            event.stopPropagation();\r\n            this.#handleClickToExit(event);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @private\r\n     * @param {string} id\r\n     */\r\n    #handleRegionStart(id) {\r\n        this.unzoom();\r\n\r\n        const el = _controlsOverlay.get(this).querySelector(`.mediasite-player__smartzoom-region[data-id=\"${id}\"]`);\r\n        if (el) {\r\n            el.style.display = '';\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @private\r\n     * @param {string} id\r\n     */\r\n    #handleRegionEnd(id) {\r\n        this.unzoom();\r\n\r\n        const el = _controlsOverlay.get(this).querySelector(`.mediasite-player__smartzoom-region[data-id=\"${id}\"]`);\r\n        if (el) {\r\n            el.style.display = 'none';\r\n        }\r\n    }\r\n\r\n    /** @private */\r\n    #handleClickToExit(event) {\r\n        this.unzoom();\r\n    }\r\n\r\n    /** @private */\r\n    #moveComponentBeforeVideo() {\r\n        try {\r\n            // Note: This can fail on iOS Safari because the <video> element gets replaced during init\r\n            //       and addChild() still references the old video element when trying to insert a child\r\n            //       at a specific index\r\n            const component = _wrapper.get(this);\r\n            this.player.layout().addChild(component, {}, 0);\r\n        }\r\n        catch (e) { }\r\n    }\r\n\r\n    /** @private */\r\n    #moveComponentAfterVideo() {\r\n        const component = _wrapper.get(this);\r\n        const indexBeforeTech = this.player.layout().children().length - 1;\r\n        this.player.layout().addChild(component, {}, indexBeforeTech);\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @param {Object} region\r\n     * @param {number} region.left The X coordinate of the region with respect to the overall dimensions of the presentation media.\r\n     * @param {number} region.top The Y coordinate of the region with respect to the overall dimensions of the presentation media.\r\n     * @param {number} region.width The width of the region with respect to the overall dimensions of the presentation media.\r\n     * @param {number} region.height The height of the region with respect to the overall dimensions of the presentation media.\r\n     * @param {number} region.time The time in seconds at which the clickable region should become available to the user.\r\n     * @param {number} region.duration A number of seconds for which the clickable region should remain available to the user after it has appeared.\r\n     * @param {string} [region.id] A string by which to identify the region. If none is provided, one will be generated dynamically.\r\n     * @returns {string} The ID value that was passed in the options object, or a dynamically generated ID if one was not specified.\r\n     * @example\r\n     * const regionId = player.smartzoom.addRegion({\r\n     *     left: 0,\r\n     *     top: 0,\r\n     *     width: 0.5,\r\n     *     height: 0.5,\r\n     *     time: 0,\r\n     *     duration: 10\r\n     * });\r\n     */\r\n    addRegion(region) {\r\n        const { left, top, width, height, time, duration, id = uuid() } = region;\r\n\r\n        if (time !== undefined && duration !== undefined) {\r\n            // Create a timed event. Cutting the duration short by 1s gives us a chance to\r\n            // anticipate the change and reset zoom during playback.\r\n            this.player.timedEvents().add(\r\n                { id, time, duration: duration - 1, type: 'hidden' },\r\n                (...args) => this.#handleRegionStart(...args),\r\n                (...args) => this.#handleRegionEnd(...args)\r\n            );\r\n        }\r\n\r\n        const rect = document.createElement('div');\r\n        rect.classList.add('mediasite-player__smartzoom-region');\r\n        rect.style.left = `${left * 100}%`;\r\n        rect.style.top = `${top * 100}%`;\r\n        rect.style.width = `${width * 100}%`;\r\n        rect.style.height = `${height * 100}%`;\r\n        rect.addEventListener('click', (...args) => this.#handleRegionClick(...args));\r\n        rect.addEventListener('keydown', (...args) => this.#handleRegionKeydown(...args));\r\n        rect.dataset.region = JSON.stringify(region);\r\n        rect.dataset.id = id;\r\n\r\n        rect.setAttribute('role', 'button');\r\n        rect.setAttribute('tabindex', 0);\r\n        rect.setAttribute('aria-label', 'Click to expand');\r\n\r\n        _controlsOverlay.get(this).appendChild(rect);\r\n\r\n        const currentTime = this.player.currentTime();\r\n        if (currentTime < time || currentTime > (time + duration)) {\r\n            this.#handleRegionEnd(id);\r\n        }\r\n\r\n        this.#incrementRegionCount();\r\n\r\n        this.log(`Added region: ${JSON.stringify(region)}`);\r\n\r\n        return id;\r\n    }\r\n\r\n    /**\r\n     * Removes the clickable region with the given ID.\r\n     * @param {string} id The ID of the region to remove.\r\n     * @example\r\n     * player.smartzoom.removeRegion('regionId');\r\n     */\r\n    removeRegion(id) {\r\n        if (id) {\r\n            const smartzoomContainer = _controlsOverlay.get(this);\r\n            for (let i = 0; i < smartzoomContainer.children.length; i++) {\r\n                const current = smartzoomContainer.children[i];\r\n                if (current.dataset?.id === id) {\r\n                    current.remove();\r\n                    break;\r\n                }\r\n            }\r\n            this.player.timedEvents().remove(id);\r\n            this.#decrementRegionCount();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Assigns size and location to the clickable region with the given ID.\r\n     * @param {string} id The ID of the region to remove.\r\n     * @param {object} data The left, top, height, and width values to assign to the region.\r\n     * @example\r\n     * player.smartzoom.moveRegion('regionId', rect);\r\n     */\r\n    moveRegion(id, data) {\r\n        if (!id || !data) {\r\n            return;\r\n        }\r\n\r\n        const { left, top, width, height } = data;\r\n        const el = _controlsOverlay.get(this).querySelector(`.mediasite-player__smartzoom-region[data-id=\"${id}\"]`);\r\n        if (el) {\r\n            el.style.left = `${left * 100}%`;\r\n            el.style.top = `${top * 100}%`;\r\n            el.style.width = `${width * 100}%`;\r\n            el.style.height = `${height * 100}%`;\r\n            el.dataset.region = JSON.stringify(data);\r\n        }\r\n    }\r\n\r\n    /** @private */\r\n    #incrementRegionCount() {\r\n        this.regionCount += 1;\r\n        this.#reactToRegionCountChange();\r\n    }\r\n\r\n    /** @private */\r\n    #decrementRegionCount() {\r\n        this.regionCount -= 1;\r\n        this.#reactToRegionCountChange();\r\n    }\r\n\r\n    /** @private */\r\n    #reactToRegionCountChange() {\r\n        if (this.regionCount > 1) {\r\n            this.player.addClass('mediasite-player--smartzoom-enabled');\r\n        } else {\r\n            this.player.removeClass('mediasite-player--smartzoom-enabled');\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Zooms and crops the video to only show the specified area. Measurements should be values between 0.0 and 1.0. This does not necessarily have to correspond to a smartzoom region added via {@link SmartzoomPlugin#addRegion}, and can in fact be used to zoom into arbitrary portions of the video at will.\r\n     * @param {number} x An X coordinate with respect to the overall dimensions of the presentation media.\r\n     * @param {number} y A Y coordinate with respect to the overall dimensions of the presentation media.\r\n     * @param {number} width A width with respect to the overall dimensions of the presentation media.\r\n     * @param {number} height A height with respect to the overall dimensions of the presentation media.\r\n     * @example\r\n     * player.smartzoom.zoom(0, 0, 0.5, 0.5);\r\n     */\r\n    zoom(x, y, width, height) {\r\n        this.activeRegion = { left: x, top: y, width, height };\r\n        const region = this.activeRegion;\r\n\r\n        // Get the original onscreen dimensions\r\n        const targetEl = _target.get(this);\r\n        const canvasEl = _canvas.get(this);\r\n        const targetBounds = targetEl.getBoundingClientRect();\r\n        const targetAspect = _aspect.get(this);\r\n\r\n        const targetWidth = targetBounds.width;\r\n        const targetHeight = targetBounds.height;\r\n\r\n        const regionAspect = (region.width * targetWidth) / (region.height * targetHeight);\r\n\r\n        // Trigger resize so video is in its new position\r\n        this.#handlePlayerResize();\r\n\r\n        // Get the new onscreen dimensions\r\n        const newBounds = targetEl.getBoundingClientRect();\r\n        const scale = newBounds.width / targetBounds.width;\r\n\r\n        // Set up animation starting values\r\n        const videoStartTransition = '';\r\n        const videoStartTransform = `scale(${1 / scale}) translate(-50%, -50%)`;\r\n        const canvasStartVisibility = 'visible';\r\n        const canvasStartTransition = '';\r\n        const canvasStartOpacity = 1;\r\n\r\n        // Set up animation ending values\r\n        const videoEndTransition = 'transform .2s ease';\r\n        const videoEndTransform = '';\r\n        const canvasEndVisibility = 'hidden';\r\n        let canvasEndTransition = 'visibility 0s linear .2s';\r\n        let canvasEndOpacity = canvasStartOpacity;\r\n\r\n        if (targetAspect !== regionAspect) {\r\n            canvasEndTransition = 'opacity .2s ease, visibility 0s linear .2s';\r\n            canvasEndOpacity = 0;\r\n        }\r\n\r\n        // Apply starting values\r\n        this.#moveComponentBeforeVideo();\r\n        targetEl.style.transition = videoStartTransition;\r\n        targetEl.style.transform = videoStartTransform;\r\n\r\n        canvasEl.style.visibility = canvasStartVisibility;\r\n        canvasEl.style.transition = canvasStartTransition;\r\n        canvasEl.style.opacity = canvasStartOpacity;\r\n        canvasEl.style.width = `${targetBounds.width}px`;\r\n        canvasEl.style.height = `${targetBounds.height}px`;\r\n        drawFrame(_canvas.get(this), targetEl, 0, 0, 1, 1);\r\n\r\n        // Force layout\r\n        void (targetEl.offsetHeight);\r\n\r\n        // Apply ending values and listen for transitionend\r\n        const transitionCleanup = () => {\r\n            targetEl.removeEventListener('transitionend', transitionCleanup);\r\n            targetEl.style.transition = '';\r\n            canvasEl.style.transition = '';\r\n            canvasEl.style.visibility = '';\r\n            canvasEl.style.width = '';\r\n            canvasEl.style.height = '';\r\n            canvasEl.style.opacity = '';\r\n            this.#moveComponentAfterVideo();\r\n\r\n            // Focus \"exit\" button when transition finishes\r\n            _clickToExit.get(this).querySelector('button')?.focus();\r\n        }\r\n\r\n        targetEl.addEventListener('transitionend', transitionCleanup);\r\n        targetEl.style.transition = videoEndTransition;\r\n        targetEl.style.transform = videoEndTransform;\r\n\r\n        canvasEl.style.transition = canvasEndTransition;\r\n        canvasEl.style.opacity = canvasEndOpacity;\r\n        canvasEl.style.visibility = canvasEndVisibility;\r\n\r\n        // Hide clickable regions and show the \"exit\" button\r\n        const smartzoomContainer = _controlsOverlay.get(this);\r\n        smartzoomContainer.style.setProperty('display', 'none');\r\n        _clickToExit.get(this).hidden = false;\r\n\r\n        this.log(`Zoomed in on region: ${JSON.stringify(region)}}`);\r\n        this.player.toggleClass('mediasite-player--smartzoom-zoomed');\r\n    }\r\n\r\n    /**\r\n     * Resets the zoom and crop levels back to their default so the entire video is visible.\r\n     * @example\r\n     * player.smartzoom.unzoom();\r\n     */\r\n    unzoom(immediateRezoom) {\r\n        const region = this.activeRegion;\r\n\r\n        if (region) {\r\n            this.activeRegion = null;\r\n\r\n            // Get the original onscreen dimensions\r\n            const targetEl = _target.get(this);\r\n            const canvasEl = _canvas.get(this);\r\n            const targetBounds = targetEl.getBoundingClientRect();\r\n            const targetAspect = _aspect.get(this);\r\n\r\n            const targetWidth = targetBounds.width;\r\n            const targetHeight = targetBounds.height;\r\n\r\n            const regionAspect = (region.width * targetWidth) / (region.height * targetHeight);\r\n            const regionOriginalX = targetBounds.left + (region.left * targetBounds.width);\r\n            const regionOriginalY = targetBounds.top + (region.top * targetBounds.height);\r\n            const regionOriginalWidth = targetBounds.width * region.width;\r\n\r\n            // Trigger resize so video is in its new position\r\n            this.#handlePlayerResize();\r\n\r\n            // Get the new onscreen dimensions\r\n            const newBounds = targetEl.getBoundingClientRect();\r\n            const regionNewX = newBounds.left + (region.left * newBounds.width);\r\n            const regionNewY = newBounds.top + (region.top * newBounds.height);\r\n            const regionNewWidth = newBounds.width * region.width;\r\n            const regionNewHeight = newBounds.height * region.height;\r\n\r\n            // Set up animation starting values\r\n            const canvasStartVisibility = 'visible';\r\n            const canvasStartTransition = '';\r\n            const canvasStartOpacity = 1;\r\n            const canvasStartMargin = 0;\r\n            const canvasStartPosition = 'fixed';\r\n\r\n            const translation = `translate(${regionOriginalX - regionNewX}px, ${regionOriginalY - regionNewY}px)`;\r\n            const canvasStartTransform = `${translation} scale(${regionOriginalWidth / regionNewWidth})`;\r\n\r\n            const videoStartTransition = '';\r\n            const videoStartOpacity = 0;\r\n\r\n            // Set up animation ending values\r\n            const canvasEndTransition = `opacity .05s ease .15s, transform .2s ease, visibility 0s linear .2s`;\r\n            const canvasEndTransform = null;\r\n            const canvasEndOpacity = 0;\r\n            const canvasEndVisibility = 'hidden';\r\n\r\n            const videoEndOpacity = 1;\r\n            let videoEndTransition = videoStartTransition;\r\n            if (targetAspect !== regionAspect) {\r\n                videoEndTransition = 'opacity .2s ease';\r\n            }\r\n\r\n            // Apply starting values\r\n            this.#moveComponentAfterVideo();\r\n            canvasEl.style.transition = canvasStartTransition;\r\n            canvasEl.style.transform = canvasStartTransform;\r\n            canvasEl.style.opacity = canvasStartOpacity;\r\n            canvasEl.style.visibility = canvasStartVisibility;\r\n            targetEl.style.transition = videoStartTransition;\r\n            targetEl.style.opacity = videoStartOpacity;\r\n            \r\n            canvasEl.style.margin = canvasStartMargin;\r\n            canvasEl.style.position = canvasStartPosition;\r\n            canvasEl.style.left = `${regionNewX}px`;\r\n            canvasEl.style.top = `${regionNewY}px`;\r\n            canvasEl.style.width = `${regionNewWidth}px`;\r\n            canvasEl.style.height = `${regionNewHeight}px`;\r\n            drawFrame(canvasEl, targetEl, region.left, region.top, region.width, region.height);\r\n            \r\n            // Force layout\r\n            void (targetEl.offsetHeight);\r\n\r\n            // Apply ending values and listen for transitionend\r\n            const transitionCleanup = () => {\r\n                canvasEl.removeEventListener('transitionend', transitionCleanup);\r\n                canvasEl.style.transition = '';\r\n                canvasEl.style.left = '';\r\n                canvasEl.style.top = '';\r\n                canvasEl.style.width = '';\r\n                canvasEl.style.height = '';\r\n                canvasEl.style.margin = '';\r\n                canvasEl.style.visibility = '';\r\n                canvasEl.style.opacity = '';\r\n                canvasEl.style.position = '';\r\n\r\n                targetEl.style.opacity = '';\r\n                targetEl.style.transition = '';\r\n\r\n                if (!immediateRezoom) {\r\n                    // Manage focus for accessibility\r\n                    this.lastFocused?.focus();\r\n                    this.lastFocused = null;\r\n                }\r\n            }\r\n\r\n            canvasEl.addEventListener('transitionend', transitionCleanup);\r\n            canvasEl.style.transition = canvasEndTransition;\r\n            canvasEl.style.transform = canvasEndTransform;\r\n            canvasEl.style.opacity = canvasEndOpacity;\r\n            canvasEl.style.visibility = canvasEndVisibility;\r\n\r\n            targetEl.style.transition = videoEndTransition;\r\n            targetEl.style.opacity = videoEndOpacity;\r\n\r\n            // Show clickable regions and hide the \"exit\" button\r\n            const smartzoomContainer = _controlsOverlay.get(this);\r\n            smartzoomContainer.style.display = null;\r\n            _clickToExit.get(this).hidden = true;\r\n\r\n            this.log(`Zoomed out from region: ${JSON.stringify(region)}`);\r\n            this.player.toggleClass('mediasite-player--smartzoom-zoomed');\r\n        }\r\n    }\r\n\r\n    dispose() {\r\n        window.removeEventListener('resize', this.windowResizeListener);\r\n        this.unzoom();\r\n\r\n        if (this.player.usingPlugin('timedEvents')) {\r\n            const smartzoomContainer = _controlsOverlay.get(this);\r\n            for (let i = 0; i < smartzoomContainer.children.length; i++) {\r\n                const current = smartzoomContainer.children[i];\r\n                this.player.timedEvents().remove(current.dataset.id);\r\n            }\r\n        }\r\n\r\n        const wrapper = _wrapper.get(this);\r\n        wrapper.dispose();\r\n        this.player.layout().removeChild(wrapper);\r\n\r\n        super.dispose();\r\n    }\r\n}\r\n\r\nfunction drawFrame(canvas, targetEl, x, y, width, height) {\r\n    const targetWidth = targetEl.videoWidth ?? 0;\r\n    const targetHeight = targetEl.videoHeight ?? 0;\r\n\r\n    canvas.width = targetWidth;\r\n    canvas.height = targetHeight;\r\n\r\n    // try/catch in case of error drawing due to memory, CORS, etc.\r\n    try {\r\n        const context = canvas.getContext('2d');\r\n        context.drawImage(targetEl, targetWidth * x, targetHeight * y, targetWidth * width, targetHeight * height, 0, 0, targetWidth, targetHeight);\r\n    }\r\n    catch (e) {\r\n\r\n    }\r\n}\r\n\r\nexport default SmartzoomPlugin;\r\n","export function calcDimensions(parentElement, aspectRatio, region) {\r\n    const bounds = parentElement.getBoundingClientRect();\r\n    const containerAspect = bounds.width / bounds.height;\r\n\r\n    const targetWidth = aspectRatio > containerAspect ? bounds.width : bounds.height * aspectRatio;\r\n    const targetHeight = aspectRatio > containerAspect ? bounds.width / aspectRatio : bounds.height;\r\n    let changedScale = 1;\r\n\r\n    if (region) {\r\n        const regionRatio = (region.width * targetWidth) / (region.height * targetHeight);\r\n        changedScale = containerAspect > regionRatio ? bounds.height / (targetHeight * region.height) : bounds.width / (targetWidth * region.width);\r\n    }\r\n\r\n    return {\r\n        width: targetWidth,\r\n        height: targetHeight,\r\n        scale: changedScale\r\n    }\r\n}","import videojs from 'video.js';\r\n\r\nimport { v4 as uuid } from 'uuid';\r\n\r\nconst _activeCues = new WeakMap();\r\nconst _startCallbacks = {};\r\nconst _endCallbacks = {};\r\n\r\n/**\r\n * @typedef {Object} TimedEvent\r\n * @alias TimedEvent\r\n * @memberof TimedEventsPlugin\r\n * @property {string} [id] An ID by which to identify the event.\r\n * @property {number} time The time in seconds.\r\n * @property {string} type The type of event. If the type is 'hidden', 'timedeventreached' events won't be fired on the player for this event.\r\n * @property {string} payload A string of arbitrary data to associate with the event for future reference.\r\n * @property {number} [duration] The duration in seconds.\r\n * @property {string} [marker] Causes a timeline marker to be created with the given label.\r\n */\r\n\r\n/**\r\n * The TimedEvents module.\r\n * @member {TimedEventsPlugin} timedEvents\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Enables registering callbacks that will fire at specific times during playback.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass TimedEventsPlugin extends videojs.getPlugin('plugin') {\r\n    /**\r\n     * \r\n     * @param {videojs.Player} player\r\n     * @param {Object} [options]\r\n     */\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        _activeCues.set(this, []);\r\n\r\n        this.metadataTrack = new videojs.TextTrack({\r\n            tech: player,\r\n            kind: 'metadata',\r\n            mode: 'hidden'\r\n        });\r\n\r\n        this.on(this.metadataTrack, 'cuechange', this.#cueChanged);\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @param {TimedEvent} timedEvent A timed event to register.\r\n     * @param {TimedEventCallback} startCallback A function that will be called with the event's unique ID whenever the playback time enters the event's time span.\r\n     * @param {TimedEventCallback} endCallback A function that will be called with the event's unique ID whenever the playback time exits the event's time span.\r\n     * @example\r\n     * const eventId = player.timedEvents.add(\r\n     *     {\r\n     *         time: 20,\r\n     *         type: 'my-custom-type',\r\n     *         payload: { custom: 'data' }\r\n     *     },\r\n     *     id => console.log(`Timed event callback for event with id ${id}`),\r\n     *     id => console.log(`Timed event callback for event with id ${id}`)\r\n     * );\r\n     */\r\n    add(timedEvent, startCallback, endCallback) {\r\n        const { time, duration = 0, type, payload, marker } = timedEvent;\r\n        const id = timedEvent.id ?? uuid();\r\n\r\n        if (!Array.from(this.metadataTrack.cues).some(cue => cue.id === id)) {\r\n            this.metadataTrack.addCue({\r\n                startTime: time,\r\n                endTime: time + duration,\r\n                id,\r\n                text: JSON.stringify({\r\n                    type,\r\n                    payload\r\n                })\r\n            });\r\n            _startCallbacks[id] = () => {\r\n                startCallback?.(id);\r\n                this.#logStart(JSON.stringify({\r\n                    type,\r\n                    payload\r\n                }));\r\n            };            \r\n            _endCallbacks[id] = () => {\r\n                endCallback?.(id);\r\n                this.#logEnd(JSON.stringify({\r\n                    type,\r\n                    payload\r\n                }));\r\n            }; \r\n\r\n            if (marker) {\r\n                this.player.timelineMarkers().add({ id, time, label: marker });\r\n            }\r\n\r\n            return id;\r\n        }\r\n    }\r\n\r\n    //Some logging methods to help determine if timed events occured\r\n    #logStart(info) {\r\n        this.log(`Started timed event ${info} at ${this.player.currentTime()}`);\r\n    }\r\n\r\n    #logEnd(info) {\r\n        this.log(`Ended timed event ${info} at ${this.player.currentTime()}`);\r\n    }\r\n\r\n    /**\r\n     * Removes a timed event (as well as its marker in the seek bar, if present).\r\n     * @param {string} id The event's unique ID.\r\n     * @example\r\n     * player.timedEvents.remove('eventId');\r\n     */\r\n    remove(id) {\r\n        for (let i = 0; i < this.metadataTrack.cues.length; i++) {\r\n            const cue = this.metadataTrack.cues[i];\r\n            if (cue.id === id) {\r\n                this.metadataTrack.removeCue(cue);\r\n                delete _startCallbacks[cue.id];\r\n                delete _endCallbacks[cue.id];\r\n\r\n                if (this.player.usingPlugin('timelineMarkers')) {\r\n                    this.player.timelineMarkers().remove(cue.id);\r\n                }\r\n\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Updates the timed event with the given ID.\r\n     * @param {string} id\r\n     * @param {TimedEvent} timedEvent\r\n     * @example\r\n     * player.timedEvents.update('eventId', { });\r\n     */\r\n    update(id, timedEvent) {\r\n        const { time, duration, type, marker, payload = {} } = timedEvent;\r\n\r\n        const cue = Array.from(this.metadataTrack.cues).find(cue => cue.id === id);\r\n        if (cue) {\r\n            if (typeof time === 'number') {\r\n                cue.startTime = time;\r\n            }\r\n            if (typeof duration === 'number') {\r\n                cue.endTime = cue.startTime + duration;\r\n            }\r\n        }\r\n\r\n        const data = JSON.parse(cue.text);\r\n\r\n        if (payload) {\r\n            Object.assign(data, { payload });\r\n        }\r\n        if (type) {\r\n            Object.assign(data, { type });\r\n        }\r\n\r\n        cue.text = JSON.stringify(data);\r\n\r\n        this.player.timelineMarkers().update(id, { time, label: marker });\r\n    }\r\n\r\n    /**\r\n     * Returns a list of TimedEvent objects with the given type.\r\n     * @param {string} eventType The type of event to receive. If not passed, all events will be returned (excluding events of type 'hidden').\r\n     * @returns {TimedEvent[]}\r\n     * @example\r\n     * const allEventsOfType = player.timedEvents.getAll('my-custom-type');\r\n     */\r\n    getAll(eventType) {\r\n        return Array.from(this.metadataTrack.cues).reduce((all, current) => {\r\n            try {\r\n                const { type, payload } = JSON.parse(current.text);\r\n                if ((eventType && eventType === type) || (!eventType && type !== 'hidden')) {\r\n                    all.push({\r\n                        id: current.id,\r\n                        time: current.startTime,\r\n                        type,\r\n                        payload\r\n                    });\r\n                }\r\n            }\r\n            catch (e) {\r\n                console.error(e);\r\n            }\r\n            return all;\r\n        }, []);\r\n    }\r\n\r\n    /**\r\n    * Returns the TimedEvent with the given ID.\r\n    * @param {string} id\r\n    * @returns {?TimedEvent}\r\n    * @example\r\n    * const timedEvent = player.timedEvents.get('eventId');\r\n    */\r\n    get(id) {\r\n        const cue = Array.from(this.metadataTrack.cues).find(cue => cue.id === id);\r\n        return cue ? {\r\n            id: cue.id,\r\n            time: cue.startTime,\r\n            duration: cue.endTime - cue.startTime,\r\n            ...JSON.parse(cue.text)\r\n        } : null;\r\n    }\r\n\r\n    /**\r\n     * @private\r\n     */\r\n    #cueChanged() {\r\n        // Check active cues.\r\n        const previousCues = _activeCues.get(this);\r\n        const activeCues = Array.from(this.metadataTrack.activeCues);\r\n\r\n        for (let i = 0; i < this.metadataTrack.cues.length; i++) {\r\n            const cue = this.metadataTrack.cues[i];\r\n            const id = cue.id;\r\n            const isActive = activeCues.some(item => item.id === cue.id);\r\n            const wasActive = previousCues.some(item => item.id === cue.id);\r\n\r\n            let callback;\r\n            if (isActive && !wasActive) {\r\n                callback = _startCallbacks[id];\r\n\r\n                const { startTime: time } = cue;\r\n                const { type, payload } = JSON.parse(cue.text);\r\n                if (type !== 'hidden') {\r\n                    this.player.trigger('timedeventreached', {\r\n                        id,\r\n                        time,\r\n                        type,\r\n                        payload\r\n                    });\r\n                }\r\n            }\r\n            else if (wasActive && !isActive) {\r\n                callback = _endCallbacks[id];\r\n            }\r\n            else {\r\n                // No change for this cue\r\n            }\r\n\r\n            callback?.(id);\r\n        }\r\n\r\n        _activeCues.set(this, activeCues);\r\n    }\r\n\r\n    clear() {\r\n        for (const { id } of Array.from(this.metadataTrack.cues)) {\r\n            this.remove(id);\r\n        }\r\n    }\r\n\r\n    dispose() {\r\n        for (const { id } of Array.from(this.metadataTrack.cues)) {\r\n            this.remove(id);\r\n        }\r\n\r\n        super.dispose();\r\n    }\r\n}\r\n\r\n/**\r\n * A callback function that is invoked when the timed event occurs.\r\n * @callback TimedEventCallback\r\n * @alias TimedEventCallback\r\n * @memberof TimedEventsPlugin\r\n * @param {string} id The unique ID of the event that occurred.\r\n */\r\n\r\nexport default TimedEventsPlugin;\r\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/postcss-loader/dist/cjs.js!./timeline-marker.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\n\r\nconst DEFAULT_MARKER_ICON = `<svg viewBox=\"0 0 10 8\" xmlns=\"http://www.w3.org/2000/svg\">\r\n    <path d = \"M5.82199 6.81355C5.42431 7.38756 4.57569 7.38756 4.17801 6.81355L0.891225 2.0695C0.431746 1.40629 0.906401 0.500001 1.71322 0.500001L8.28678 0.5C9.0936 0.5 9.56825 1.40629 9.10877 2.06949L5.82199 6.81355Z\"/>\r\n</svg >`\r\n\r\nexport default class TimelineMarkerIcon extends videojs.getComponent('Component') {\r\n    /**\r\n     * \r\n     * @param {videojs.Player} player\r\n     */\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        player.ready(() => {\r\n            const { shape } = options;\r\n            const timelineMarkerIcon = this.generateMarkerIcon(shape);\r\n            this.el().appendChild(timelineMarkerIcon);\r\n        });\r\n    }\r\n\r\n    generateMarkerIcon(shape) {\r\n        const container = document.createElement('div');\r\n        videojs.dom.addClass(container, 'mediasite-player__timeline-marker-icon');\r\n        if (shape == null || shape === \"\") {\r\n            container.innerHTMl = DEFAULT_MARKER_ICON;\r\n        } else {\r\n            container.innerHTML = shape;\r\n        }\r\n        return container;\r\n    }\r\n\r\n    createEl(tag, props = {}, attributes = {}) {\r\n        tag = 'div';\r\n        props = Object.assign({\r\n            className: 'mediasite-player__timeline-marker-icon-wrapper'\r\n        });\r\n\r\n        return super.createEl.call(this, tag, props, attributes);\r\n    }\r\n}","import videojs from 'video.js';\r\n\r\nimport './timeline-marker.css';\r\nimport TimelineMarkerIcon from './timeline-marker-icon.js';\r\n\r\nconst _time = new WeakMap();\r\nconst _label = new WeakMap();\r\nconst _color = new WeakMap();\r\nconst _shape = new WeakMap();\r\n\r\nconst DEFAULT_MARKER_ICON = `<svg viewBox=\"0 0 10 8\" xmlns=\"http://www.w3.org/2000/svg\">\r\n    <path d = \"M5.82199 6.81355C5.42431 7.38756 4.57569 7.38756 4.17801 6.81355L0.891225 2.0695C0.431746 1.40629 0.906401 0.500001 1.71322 0.500001L8.28678 0.5C9.0936 0.5 9.56825 1.40629 9.10877 2.06949L5.82199 6.81355Z\"/>\r\n</svg >`\r\n\r\nconst DEFAULT_COLOR = \"#d4bf86\";\r\n\r\nexport default class TimelineMarker extends videojs.getComponent('ClickableComponent') {\r\n    /**\r\n     * \r\n     * @param {videojs.Player} player\r\n     * @param {Object} options\r\n     * @param {number} options.time\r\n     * @param {string} options.label\r\n     */\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        player.ready(() => {\r\n            const { time, label, color, shape } = options;\r\n\r\n            //creates a span for the label to exist in\r\n            const labelDiv = document.createElement(\"span\");\r\n            labelDiv.classList.add(\"mediasite-player__timeline-marker-label\");\r\n            this.el().appendChild(labelDiv);\r\n\r\n            this.time = time;\r\n            this.label = label;\r\n            this.color = color ?? this.color;\r\n            this.shape = shape ?? this.shape;\r\n\r\n            this.setMarkerIcon();            \r\n\r\n            this.on('mousedown', this.handleMouseDown);\r\n            this.on('click', this.handleClick);\r\n            this.on(player, 'durationchange', this.handleDurationChange);\r\n        });\r\n    }\r\n\r\n    handleMouseDown(event) {\r\n        if (this.player().settings().enableSeeking) {\r\n            event.stopPropagation();\r\n        }\r\n    }\r\n\r\n    handleClick() {\r\n        if (this.player().settings().enableSeeking) {\r\n            this.player().currentTime(this.time);\r\n            this.player().trigger('timelinemarkerclicked', this.time);\r\n        }\r\n    }\r\n\r\n    handleDurationChange() {\r\n        this.time = this.time;\r\n    }\r\n\r\n    set hidden(hidden) {\r\n        if (hidden) {\r\n            this.addClass('vjs-hidden');\r\n        }\r\n        else {\r\n            this.removeClass('vjs-hidden');\r\n        }\r\n    }\r\n\r\n    get hidden() {\r\n        return this.hasClass('vjs-hidden');\r\n    }\r\n\r\n    set time(time) {\r\n        _time.set(this, time);\r\n        const position = time / this.player().duration();\r\n        this.el().style.setProperty('--timeline-marker-pos', position);\r\n        this.label = this.label;\r\n    }\r\n\r\n    get time() {\r\n        return _time.get(this);\r\n    }\r\n\r\n    set label(label) {\r\n        //prevent empty string or undefined variables from being set as labels\r\n        if (!label) {\r\n            return;\r\n        }\r\n        _label.set(this, label);\r\n        const el = this.el();\r\n        //modify the label's content and position so that it properly reflects what needs to be said\r\n        //and is fully on screen the while doing it\r\n        const labelEl = el.querySelector(\".mediasite-player__timeline-marker-label\");\r\n\r\n        if (labelEl) {\r\n            labelEl.innerHTML = `${videojs.formatTime(this.time)} - ${label}`;\r\n            this.#sizeLabel(labelEl);\r\n        }\r\n\r\n        el.setAttribute('aria-label', label);\r\n    }\r\n\r\n    #sizeLabel(labelEl) {\r\n        //grabs the amount of px control of the padding left and converts it to an int\r\n        //used for giving a natural spacing to the label\r\n        let horizontalPadding = window.getComputedStyle(labelEl).paddingLeft;\r\n        if (horizontalPadding) {\r\n            horizontalPadding = parseInt(horizontalPadding, 10);\r\n        } else {\r\n            horizontalPadding = 0;\r\n        }\r\n\r\n        //check the bounding rectangle to see where this label is positioned on the screen\r\n        //and compare it to where the video player element is on screen\r\n        //if it is too far left or right, add margin to bring it back on screen\r\n        //postive margin-left to move left, negative margin-left to move right, since margin-right\r\n        //would only move the element if there was something else to the right of it\r\n        const labelBounding = labelEl.getBoundingClientRect();\r\n        const playerBounding = this.player().el().getBoundingClientRect();\r\n\r\n        if (labelBounding.left < playerBounding.left) {\r\n            let leftOffset = playerBounding.left - labelBounding.left;\r\n            leftOffset += horizontalPadding;\r\n            labelEl.style.setProperty('margin-left', `${leftOffset}px`);\r\n        }\r\n        if (labelBounding.right > playerBounding.right) {\r\n            let rightOffset = labelBounding.right - playerBounding.right;\r\n            rightOffset += horizontalPadding;\r\n            labelEl.style.setProperty('margin-left', `-${rightOffset}px`);\r\n        }\r\n    }\r\n\r\n    get label() {\r\n        return _label.get(this);\r\n    }\r\n\r\n    set color(color) {\r\n        let markerColor = color ?? DEFAULT_COLOR;\r\n        _color.set(this, markerColor);\r\n        this.el().style.setProperty('--timeline-marker-color', `${markerColor}`);\r\n    }\r\n\r\n    get color() {\r\n        return _color.get(this);\r\n    }\r\n\r\n    set shape(shape) {\r\n        if (shape != null && shape.length > 0) {\r\n            _shape.set(this, shape);\r\n        } else {\r\n            _shape.set(this, DEFAULT_MARKER_ICON);\r\n        }\r\n        this.setMarkerIcon();\r\n    }\r\n\r\n    get shape() {\r\n        return _shape.get(this);\r\n    }\r\n\r\n    setMarkerIcon() {\r\n        const shape = this.shape;\r\n\r\n        const children = this.children();\r\n        for (const child of children) {\r\n            this.removeChild(child);\r\n        }\r\n\r\n        const customIcon = new TimelineMarkerIcon(this.player(), { name: \"TimelineMarkerIcon\", shape: shape });\r\n        this.addChild(customIcon);\r\n    }\r\n\r\n    createEl(tag, props = {}, attributes = {}) {\r\n        tag = 'div';\r\n        props = Object.assign({\r\n            className: 'mediasite-player__timeline-marker'\r\n        });\r\n\r\n        return super.createEl.call(this, tag, props, attributes);\r\n    }\r\n}\r\n","import videojs from 'video.js';\r\n\r\nimport { v4 as uuid } from 'uuid';\r\n\r\nimport TimelineMarker from './timeline-markers/timeline-marker.js';\r\n\r\nconst _timelineMarkers = new WeakMap();\r\n\r\n/**\r\n * @typedef {Object} TimelineMarkerConfig\r\n * @alias TimelineMarkerConfig\r\n * @memberof TimelineMarkersPlugin\r\n * @property {string} [id] An ID by which to identify the marker.\r\n * @property {number} time The time in seconds.\r\n * @property {string} label A label that will be visible in the UI.\r\n * @property {string} [color] A color with which to display the marker.\r\n * @property {string} [shape] The inline html svg text for the marker.\r\n */\r\n\r\n/**\r\n * The TimelineMarkers module.\r\n * @member {TimelineMarkersPlugin} timelineMarkers\r\n * @memberof MediasitePlayer#\r\n */\r\n\r\n/**\r\n * Configures clickable markers that are displayed on the seekbar.\r\n * @hideconstructor\r\n * @extends {external:\"videojs.Plugin\"}\r\n **/\r\nclass TimelineMarkersPlugin extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n        _timelineMarkers.set(this, {});\r\n    }\r\n    /**\r\n     * \r\n     * @param {TimelineMarkerConfig} markerConfig A marker to add to the timeline.\r\n     * @returns {string} The marker's ID.\r\n     * @example\r\n     * const markerId = player.timelineMarkers.add({\r\n     *     time: 10,\r\n     *     label: 'Marker at 10 seconds'\r\n     * });\r\n     */\r\n    add(markerConfig) {\r\n        const { time, label, color, shape } = markerConfig;\r\n        const id = markerConfig.id ?? uuid();\r\n\r\n        const timelineMarker = new TimelineMarker(this.player, { time, label, color, shape });\r\n        const controlBar = this.player.getChild('ControlBar');\r\n        controlBar.addChild(timelineMarker);\r\n        _timelineMarkers.get(this)[id] = timelineMarker;\r\n\r\n        this.#sortAll();\r\n\r\n        return id;\r\n    }\r\n\r\n    /**\r\n     * Removes a marker from the seekbar.\r\n     * @param {string} id The marker's unique ID.\r\n     * @example\r\n     * player.timelineMarkers.remove('markerId');\r\n     */\r\n    remove(id) {\r\n        const marker = _timelineMarkers.get(this)[id];\r\n        if (marker) {\r\n            const controlBar = this.player.getChild('ControlBar');\r\n            controlBar.removeChild(marker);\r\n            delete _timelineMarkers.get(this)[id];\r\n            this.#sortAll();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Updates the timeline marker with the given ID.\r\n     * @param {string} id\r\n     * @param {Object} data\r\n     * @param {number} data.time The time in seconds.\r\n     * @param {string} data.label A label for the marker.\r\n     * @param {string} data.color A color for the marker.\r\n     * @param {string} data.shape The inline html svg for the marker icon.\r\n     * @example\r\n     * player.timelineMarkers.update('markerId', { });\r\n     */\r\n    update(id, data) {\r\n        const { time, label, color, shape } = (data ?? {});\r\n\r\n        const marker = _timelineMarkers.get(this)[id];\r\n        if (marker) {\r\n            // Update timeline marker\r\n            if (time) {\r\n                marker.time = time;\r\n            }\r\n            if (label) {\r\n                marker.label = label;\r\n            }\r\n            if (color) {\r\n                marker.color = color;\r\n            }\r\n            if (shape) {\r\n                marker.shape = shape;\r\n            }\r\n            marker.hidden = !data;\r\n        }\r\n\r\n        this.#sortAll();\r\n    }\r\n\r\n    /**\r\n     * Gets the data for the timeline marker with the given ID.\r\n     * @param {string} id\r\n     * @returns {{text:string,time:number,color:string,path:string,viewBox:string}}\r\n     * @example\r\n     * const marker = player.timelineMarkers.get('markerId');\r\n     */\r\n    get(id) {\r\n        const marker = _timelineMarkers.get(this)[id];\r\n        if (marker) {\r\n            return {\r\n                text: marker.label,\r\n                time: marker.time,\r\n                color: marker.color,\r\n                shape: marker.shape\r\n            }\r\n        }\r\n    }\r\n\r\n    #sortAll() {\r\n        const timelineMarkers = Object.values(_timelineMarkers.get(this)).sort((a, b) => {\r\n            if (a.time > b.time) {\r\n                return 1;\r\n            }\r\n            else if (a.time < b.time) {\r\n                return 0;\r\n            }\r\n            return 0;\r\n        });\r\n\r\n        const controlBar = this.player.getChild('ControlBar');\r\n        for (const timelineMarker of timelineMarkers) {\r\n            controlBar.addChild(timelineMarker);\r\n        }\r\n    }\r\n\r\n    dispose() {\r\n        const timelineMarkers = _timelineMarkers.get(this);\r\n        for (const markerId of Object.keys(timelineMarkers)) {\r\n            this.remove(markerId);\r\n        }\r\n\r\n        super.dispose();\r\n    }\r\n}\r\n\r\nexport default TimelineMarkersPlugin;\r\n","import videojs from 'video.js';\r\nimport { localStorageAvailable } from '../../util';\r\n\r\nconst _defaultPositionValue = 0.0;\r\nconst _minimumPositionValue = 0.0;\r\nconst _maximumPositionValue = 10000 * 24.0 * 60.0 * 60.0;\r\nconst _noBookmarkZoneSize = 3;\r\nconst _maximumBookmarks = 10;\r\nconst _bookmarksKeyName = \"bookmarks\";\r\nconst _lastStartTime = new WeakMap();\r\nconst _presentationId = new WeakMap();\r\nconst _presentationDuration = new WeakMap();\r\nconst _isLive = new WeakMap();\r\nconst _clockSkew = new WeakMap();\r\n\r\n\r\nclass BookmarkStorePlugin extends videojs.getPlugin('plugin') {\r\n    \r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        player.ready(() => {\r\n            this.on(player, 'ended', this.#handlePresentationEnded);\r\n            if (localStorageAvailable()) {\r\n                this.log('Local storage is available.');\r\n            } else {\r\n                this.log('Local storage is unavailable.');\r\n            }\r\n        });\r\n    }\r\n\r\n    get isLive() {\r\n        return _isLive.get(this) ?? false;\r\n    }\r\n\r\n    set isLive(isLive) {\r\n        _isLive.set(this, isLive);\r\n    }\r\n\r\n    get clockSkew() {\r\n        return _clockSkew.get(this) ?? 0;\r\n    }\r\n\r\n    set clockSkew(clockSkew) {\r\n        _clockSkew.set(this, clockSkew);\r\n    }\r\n\r\n    get lastStartTime() {\r\n        return _lastStartTime.get(this) ?? null;\r\n    }\r\n\r\n    set lastStartTime(lastStartTime) {\r\n        _lastStartTime.set(this, lastStartTime);\r\n    }\r\n\r\n    get presentationId() {\r\n        return _presentationId.get(this);\r\n    }\r\n\r\n    set presentationId(presentationId) {\r\n        _presentationId.set(this, presentationId);\r\n    }\r\n\r\n    get presentationDuration() {\r\n        return _presentationDuration.get(this);\r\n    }\r\n\r\n    set presentationDuration(presentationDuration) {\r\n        _presentationDuration.set(this, presentationDuration);\r\n    }\r\n\r\n    save(position) {\r\n        //bail if we don't have access to local storage, or is live, or _lastStartTime is null\r\n        if (!localStorageAvailable() || this.isLive || this.lastStartTime === null) {\r\n            return;\r\n        }\r\n\r\n        //bail if position = _lastStartTime\r\n        var durationViewed = (position - this.lastStartTime);\r\n        if (durationViewed === 0) {\r\n            return;\r\n        }\r\n\r\n        //grab bookmarks from storage\r\n        var bookmarks = JSON.parse(localStorage.getItem(_bookmarksKeyName));\r\n        var bookmarksOriginalString = JSON.stringify(bookmarks);\r\n\r\n        if (bookmarks === null) { bookmarks = []; }\r\n\r\n        //delete existing bookmark\r\n        for (var i = 0; i < bookmarks.length; i++) {\r\n            if (bookmarks[i].presentationId === this.presentationId) {\r\n                bookmarks.splice(i, 1);\r\n            }\r\n        }\r\n\r\n        //add bookmark (if valid position)\r\n        if (position > _minimumPositionValue && position < _maximumPositionValue && Math.abs(this.presentationDuration - position) > _noBookmarkZoneSize) {\r\n            var _date = new Date();\r\n            var _timestamp = Date.UTC(_date.getFullYear(), _date.getMonth(), _date.getDate(), _date.getHours(), _date.getMinutes(), _date.getSeconds(), _date.getMilliseconds());\r\n            _timestamp = _timestamp - this.clockSkew; // adjust for server skew\r\n            bookmarks.push({ presentationId: this.presentationId, position: position, savedAt: _timestamp / 1000 });\r\n        }\r\n\r\n        //truncate\r\n        bookmarks.sort(this.compareSavedAt);\r\n        while (bookmarks.length > _maximumBookmarks) {\r\n            bookmarks.shift();\r\n        }\r\n\r\n        //store bookmarks (if any change) in localstorage\r\n        if (JSON.stringify(bookmarks) !== bookmarksOriginalString) {\r\n            if (bookmarks.length === 0) {\r\n                localStorage.removeItem(_bookmarksKeyName);\r\n            } else {\r\n                localStorage.setItem(_bookmarksKeyName, JSON.stringify(bookmarks));\r\n            }\r\n        }\r\n\r\n        this.lastStartTime = position;\r\n        return bookmarks.length;\r\n\r\n    };\r\n\r\n    retrieve() {\r\n        if (!localStorageAvailable()) {\r\n            return _defaultPositionValue;\r\n        }\r\n\r\n        var bookmarks = JSON.parse(localStorage.getItem(_bookmarksKeyName));\r\n\r\n        var bookmark = { position: 0, savedAt: 0 };\r\n\r\n        if (bookmarks !== null) {\r\n            for (var i = 0; i < bookmarks.length; i++) {\r\n                if (bookmarks[i].presentationId === this.presentationId) {\r\n                    bookmark.position = Math.min(Math.max(bookmarks[i].position, _minimumPositionValue), _maximumPositionValue);\r\n                    bookmark.savedAt = bookmarks[i].savedAt;\r\n                    return bookmark;\r\n                }\r\n            }\r\n        }\r\n\r\n        return bookmark;\r\n\r\n    };\r\n\r\n    #handlePresentationEnded() {\r\n        this.save(this.presentationDuration);\r\n    }\r\n\r\n    compareSavedAt(a, b) {\r\n        if (a.savedAt < b.savedAt)\r\n            return -1;\r\n        if (a.savedAt > b.savedAt)\r\n            return 1;\r\n        return 0;\r\n    };\r\n\r\n    watchViewTracking(viewTracking, playbackTicketId) {\r\n        var self = this;\r\n        viewTracking.addHandler({\r\n            start: function (start) {\r\n                self.start(start);\r\n            },\r\n            end: function (start, end, important) {\r\n                self.save(end, playbackTicketId);\r\n            }\r\n        });\r\n    };\r\n}\r\n\r\nexport default BookmarkStorePlugin;\r\n","\r\n// Very simple implementation of a state machine.\r\nexport default class SimpleStateMachine {\r\n\r\n    #states;\r\n    #currentStateName;\r\n    #currentState;\r\n\r\n    constructor(states, initialStateName) {\r\n        this.#states = states;\r\n        this.#currentStateName = initialStateName;\r\n        this.#currentState = states && states[initialStateName];\r\n        this.#currentState?.onEnter();\r\n    }\r\n\r\n\r\n    get currentStateName() {\r\n        return this.#currentStateName;\r\n    }\r\n\r\n    get currentState() {\r\n        return this.#currentState;\r\n    }\r\n\r\n    changeState(toStateName) {\r\n        if (this.#currentStateName === toStateName) {\r\n            return;\r\n        }\r\n\r\n        const toState = this.#states[toStateName];\r\n\r\n        this.#currentState.onExit();\r\n\r\n        this.#currentStateName = toStateName;\r\n        this.#currentState = toState;\r\n\r\n        toState.onEnter();\r\n    };\r\n}","import videojs from 'video.js';\r\nimport SimpleStateMachine from '../../util/simple-state-machine.js';\r\n\r\nconst Plugin = videojs.getPlugin('plugin');\r\n\r\nconst DEFAULT_SESSION_TIMEOUT = 20 * 60 * 1000;\r\n\r\n\r\n\r\n\r\nclass InactivityPlugin extends Plugin {\r\n\r\n    #sessionTimeout = DEFAULT_SESSION_TIMEOUT;\r\n\r\n    #stateMachine;\r\n    #inactiveStartTime = Date.now();\r\n    #inactiveCheckingIntervalId;\r\n\r\n\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        const states = this.#makeStates(\r\n            this.#log.bind(this),\r\n            this.#changeState.bind(this),\r\n            this.#beginInactiveChecking.bind(this),\r\n            this.#stopInactiveChecking.bind(this),\r\n            this.#doReload.bind(this),\r\n            this.#isLivePlayback.bind(this)\r\n        );\r\n        this.#stateMachine = new SimpleStateMachine(states, 'inactive');\r\n\r\n        player.ready(() => {\r\n            player.on('play', this.#handlePlay.bind(this));\r\n            player.on('pause', this.#handlePause.bind(this));\r\n            player.on('seeking', this.#handleSeeking.bind(this));\r\n            player.on('ended', this.#handleEnded.bind(this));\r\n        });\r\n    }\r\n\r\n    get sessionTimeout() {\r\n        return this.#sessionTimeout;\r\n    }\r\n\r\n    set sessionTimeout(milliseconds) {\r\n        this.#sessionTimeout = milliseconds;\r\n    }\r\n\r\n    #makeStates(log, changeState, beginInactiveChecking, stopInactiveChecking, doReload, isLivePlayback) {\r\n\r\n        const states = {\r\n            active: {\r\n                onEnter: function () {},\r\n                onExit: function () {},\r\n\r\n                handlePlay: function () {},\r\n                handleSeeking: function () {},\r\n                handlePause: function () {\r\n                    changeState('inactive');\r\n                },\r\n                handleEnded: function () {\r\n                    changeState('inactive');\r\n                },\r\n                handleInactivityExceeded: function () {}\r\n            },\r\n            inactive: {\r\n                onEnter: function () {\r\n                    beginInactiveChecking();\r\n                },\r\n                onExit: function () {\r\n                    stopInactiveChecking();\r\n                },\r\n\r\n                handlePlay: function () {\r\n                    changeState('active');\r\n                },\r\n                handleSeeking: function () {\r\n                    changeState('inactive');\r\n                },\r\n                handlePause: function () {},\r\n                handleEnded: function () {},\r\n                handleInactivityExceeded: function () {\r\n                    changeState('dead');\r\n                }\r\n            },\r\n            dead: {\r\n                onEnter: function () {\r\n                    log('Inactivity threshold exceeded.');\r\n                    if (isLivePlayback()) {\r\n                        doReload();\r\n                    }\r\n                },\r\n                onExit: function () {},\r\n\r\n                handlePlay: function () {\r\n                    doReload();\r\n                },\r\n                handleSeeking: function () {\r\n                    doReload();\r\n                },\r\n                handlePause: function () {},\r\n                handleEnded: function () {},\r\n                handleInactivityExceeded: function () {}\r\n            }\r\n        };\r\n\r\n        return states;\r\n    }\r\n\r\n    #handlePlay() {\r\n        this.#stateMachine.currentState.handlePlay();\r\n    }\r\n\r\n    #handlePause() {\r\n        this.#stateMachine.currentState.handlePause();\r\n    }\r\n\r\n    #handleSeeking() {\r\n        this.#stateMachine.currentState.handleSeeking();\r\n    }\r\n\r\n    #handleEnded() {\r\n        this.#stateMachine.currentState.handleEnded();\r\n    }\r\n\r\n\r\n    #log(message) {\r\n        this.player.log(message);\r\n    }\r\n\r\n    #changeState(toStateName) {\r\n        this.#stateMachine.changeState(toStateName);\r\n    }\r\n\r\n    #beginInactiveChecking() {\r\n        clearInterval(this.#inactiveCheckingIntervalId);\r\n        this.#inactiveStartTime = Date.now();\r\n        this.#inactiveCheckingIntervalId = setInterval(this.#inactivityExceededCheck.bind(this), 1000);\r\n    }\r\n\r\n    #stopInactiveChecking() {\r\n        clearInterval(this.#inactiveCheckingIntervalId);\r\n    }\r\n\r\n    #isLivePlayback() {\r\n        return this.player.usingPlugin('live');\r\n    }\r\n\r\n    #doReload() {\r\n        // Reloading the page is not really compatible with directly with \r\n        // player's use in contexts outside of MVP's player page.\r\n        // TODO: Reload the player/presentation without reloading the page.\r\n        window.location.reload();\r\n    }\r\n\r\n\r\n    #inactivityExceededCheck() {\r\n        const now = Date.now();\r\n        if (now > this.#inactiveStartTime + this.sessionTimeout) {\r\n            this.#stateMachine.currentState.handleInactivityExceeded();\r\n        }\r\n    }\r\n\r\n}\r\n\r\nexport default InactivityPlugin;","import videojs from 'video.js';\r\nimport { isPresentationId } from '../../util';\r\nimport { ContentStreamType } from \"../../api/presentation\";\r\n\r\nexport class ConvivaPluginStub extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        player.loader().onLoadPlayCover(onLoadPlayCover.bind(player));\r\n        player.loader().onLoadPresentation(onLoadPresentation.bind(player));\r\n    }\r\n}\r\n\r\nfunction shouldLoad(presentationId, playCoverData, presentationData) {\r\n    const urlSearchParams = new URLSearchParams(location.search);\r\n    const queryStringEnableTouchstone = urlSearchParams.get('useConvivaTouchstone') === 'true';\r\n\r\n    const { playerOptions } = presentationData;\r\n\r\n    return (playerOptions.conviva?.enabled || queryStringEnableTouchstone) && isPresentationId(presentationId);\r\n}\r\n\r\nfunction onLoadPlayCover(presentationId, playCoverData, presentationData) {\r\n    const { conviva: convivaSettings } = presentationData.playerOptions ?? {};\r\n\r\n    if (convivaSettings?.enabled === false || !isPresentationId(presentationId)) {\r\n        return {\r\n            playerOptions: {\r\n                conviva: undefined\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nasync function onLoadPresentation(presentationId, playCoverData, presentationData) {\r\n    const player = this;\r\n    const urlSearchParams = new URLSearchParams(location.search);\r\n    const queryStringEnableTouchstone = urlSearchParams.get('useConvivaTouchstone') === 'true';\r\n\r\n    const { metadata, playerOptions, streams } = presentationData;\r\n    const { conviva: convivaSettings } = playerOptions;\r\n\r\n    if (shouldLoad(...arguments)) {\r\n        if (!videojs.getPlugin('conviva')) {\r\n            const { ConvivaPlugin } = await import(/* webpackChunkName: 'conviva' */ './conviva.js');\r\n            player.registerPlugin('conviva', ConvivaPlugin);\r\n        }\r\n\r\n        const firstPlayableItem = getFirstPlayableItem(player, streams);\r\n        const map = presentationData.compositionMap;\r\n        const comp = map?.VisualCompositions[0];\r\n\r\n        const convivaConfiguration = {\r\n            presentationId,\r\n            serviceUrl: queryStringEnableTouchstone ? DEFAULT_TOUCHSTONE_ULR_TEST : convivaSettings.convivaServiceUrl,\r\n            customerId: convivaSettings.convivaCustomerId,\r\n            title: metadata.title,\r\n            isLive: player.usingPlugin('live'),\r\n            is360: presentationData.metadata.is360Video.toString(),\r\n            hasQuizzing: player.usingPlugin('quizzes').toString(),\r\n            playerType: convivaSettings.playerType,\r\n            duration: metadata.duration / 1000,\r\n            recordedDateString: new Date(metadata.unixTime).toLocaleDateString(),\r\n            numberOfSlides: getSlideCount(streams),\r\n            numberOfVideos: getVideoCount(streams, comp),\r\n            playerId: convivaSettings.playerId,\r\n            layoutId: convivaSettings.layoutId,\r\n            siteName: convivaSettings.siteName,\r\n            siteVersion: convivaSettings.siteVersion,\r\n            siteBuildNumber: convivaSettings.siteBuildNumber,\r\n            playerName: convivaSettings.playerName,\r\n            userNameHash: convivaSettings.userNameHash,\r\n            multisiteId: convivaSettings.multisiteId,\r\n            streamType: firstPlayableItem?.type,\r\n            streamUrl: firstPlayableItem?.src\r\n        };\r\n\r\n        player.conviva().init(convivaConfiguration);\r\n    }\r\n    else {\r\n        return {\r\n            playerOptions: {\r\n                conviva: undefined\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nconst DEFAULT_TOUCHSTONE_ULR_TEST = 'https://sonicfoundry-test.testonly.conviva.com';\r\n\r\nfunction getFirstPlayableItem(player, streams) {\r\n    // Find the first stream that the player thinks it can play\r\n    let result = null;\r\n    for (const stream of streams) {\r\n        for (const item of stream.items) {\r\n            if (player.canPlayType(item.type)) {\r\n                result = item;\r\n                break;\r\n            }\r\n        }\r\n        if (result) {\r\n            break;\r\n        }\r\n    }\r\n    return result;\r\n}\r\n\r\nfunction getVideoCount(streams, composition) {\r\n    let videoAmount = 0;\r\n\r\n    for (const stream of streams) {\r\n        if (stream.audioOnly === true || !findVisualItemBySourceId(composition, stream.id)) {\r\n            //AudioOnly streams are hidden, but kept in player for audio\r\n            //Streams not in composition are not included\r\n            continue;\r\n        } else if (stream.streamType !== ContentStreamType.Slide) {\r\n            videoAmount++;\r\n        }\r\n    }\r\n\r\n    return videoAmount;\r\n}\r\n\r\nfunction findVisualItemBySourceId(composition, sourceId) {\r\n    return composition.VisualItems.find(item => item.SourceId === sourceId);\r\n}\r\n\r\nfunction getSlideCount(streams) {\r\n    const slideStream = streams.find(stream => stream.streamType === ContentStreamType.Slide);\r\n\r\n    if (slideStream) {\r\n        return slideStream.items.length;\r\n    }\r\n    return 0;\r\n}\r\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./guided.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\nimport { QueryStringParamProvider } from '../../implementations/player-page/helpers.js';\r\nimport './guided.css';\r\n\r\nexport class GuidedPluginStub extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        player.loader().onLoadPresentation(onLoadPresentation.bind(player));\r\n    }\r\n}\r\n\r\nfunction shouldLoad(presentationId, playCoverData, presentationData) {\r\n    const paramProvider = new QueryStringParamProvider(location.search);\r\n    return paramProvider.getParam(\"guided\") === 'true';\r\n}\r\n\r\nasync function onLoadPresentation(presentationId, playCoverData, presentationData) {\r\n    const player = this;\r\n\r\n    if (shouldLoad(...arguments)) {\r\n        if (!videojs.getPlugin('guided')) {\r\n            const { GuidedPlugin } = await import(/* webpackChunkName: 'guided' */ './guided.js');\r\n            player.registerPlugin('guided', GuidedPlugin);\r\n        }\r\n\r\n        player.guided().init();\r\n    }\r\n}","import videojs from 'video.js';\r\n\r\nexport class IFramePluginStub extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        player.loader().onLoadPlayCover(onLoadPlayCover.bind(player));\r\n    }\r\n}\r\n\r\nfunction shouldLoad(presentationId, playCoverData, presentationData) {\r\n    return window.parent !== window;\r\n}\r\n\r\nasync function onLoadPlayCover(presentationId, playCoverData, presentationData) {\r\n    const player = this;\r\n    const { allowedPlayerIFrameAPISites } = playCoverData;\r\n    if (shouldLoad(...arguments)) {\r\n        if (!videojs.getPlugin('iframe')) {\r\n            const { IFramePlugin } = await import(/* webpackChunkName: 'iframe' */ './iframe.js');\r\n            player.registerPlugin('iframe', IFramePlugin);\r\n        }\r\n        \r\n        player.iframe().init({ allowedPlayerIFrameAPISites });\r\n    }\r\n}\r\n","import videojs from 'video.js';\r\nimport { PresentationStatus } from '../../api/presentation';\r\n\r\nexport class LivePluginStub extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        player.loader().onLoadPlayCover(onLoadPlayCover.bind(player));\r\n        player.loader().onLoadPresentation(onLoadPresentation.bind(player));\r\n    }\r\n}\r\n\r\nfunction isLivePresentation(playStatus) {\r\n    return playStatus === PresentationStatus.ScheduledForLive\r\n        || playStatus === PresentationStatus.OpenForLive\r\n        || playStatus === PresentationStatus.Live\r\n        || playStatus === PresentationStatus.LivePaused\r\n        || playStatus === PresentationStatus.LiveEnded;\r\n}\r\n\r\nfunction shouldLoad(presentationId, playCoverData, presentationData) {\r\n    const { playStatus } = playCoverData;\r\n    return isLivePresentation(playStatus);\r\n}\r\n\r\nfunction isLivePlayable(playStatus) {\r\n    return playStatus === PresentationStatus.Live\r\n        || playStatus === PresentationStatus.LivePaused;\r\n}\r\n\r\nasync function initializeLivePlugin(presentationId, liveOptions, player) {\r\n    //Import live plugin and register with player\r\n    if (!videojs.getPlugin('live')) {\r\n        const { LivePlugin } = await import(/* webpackChunkName: 'live' */ './live.js');\r\n        player.registerPlugin('live', LivePlugin);\r\n    }\r\n    //Initialize live plugin with presentation data\r\n    player.live().init({\r\n        presentationId,\r\n        playStatus: liveOptions.playStatus,\r\n        unixTime: liveOptions.unixTime,\r\n        enableCountdown: liveOptions.enableLiveCountdown,\r\n        delayLiveIndicationUntilPresentationDate: liveOptions.delayLiveIndicationUntilPresentationDate\r\n    });\r\n}\r\n\r\nasync function onLoadPlayCover(presentationId, playCoverData, presentationData) {\r\n    const player = this;\r\n    if (shouldLoad(...arguments)) {\r\n        await initializeLivePlugin(presentationId, playCoverData, player)\r\n        return {\r\n            playerOptions: {\r\n                playcover: {\r\n                    showPlayButton: isLivePlayable(playCoverData.playStatus)\r\n                        && !(playCoverData.delayLiveIndicationUntilPresentationDate && Date.now() < playCoverData.unixTime)\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nasync function onLoadPresentation(presentationId, playCoverData, presentationData) {\r\n    const player = this;\r\n    const { metadata: liveOptions } = presentationData\r\n    //If playcover is hidden (playstatus == null), check if live plugin needs to be added\r\n    if (!playCoverData.playStatus) {\r\n        //Overwrite playStatus based on data from loaded presentation for shouldLoad check\r\n        playCoverData.playStatus = liveOptions.playStatus;\r\n\r\n        if (shouldLoad(presentationId, playCoverData, presentationData)) {\r\n            await initializeLivePlugin(presentationId, liveOptions, player)\r\n        }\r\n    }\r\n    const { metadata, streams, playerOptions } = presentationData;\r\n    //Get slidestream from presentation streams\r\n    const slideStream = streams.find(stream => {\r\n        return stream.streamType === 2;\r\n    });\r\n\r\n    if (isLivePresentation(metadata.playStatus)) {\r\n        //On media load, if slidestream exists, start looking for new events from last loaded slide event as opposed to first event in presentation\r\n        player.live().lastLiveEventTime = slideStream?.items[slideStream.items.length - 1]?.time ?? -1;\r\n\r\n        const { enableDvr, enableLiveCaptions } = playerOptions?.live ?? {};\r\n        player.live().enableDvr = enableDvr ?? false;\r\n        player.live().liveCaptions = enableLiveCaptions ?? false;\r\n\r\n        return {\r\n            metadata: {\r\n                bookmark: Infinity\r\n            },\r\n            playerOptions: {\r\n                settings: {\r\n                    enableSeeking: enableDvr,\r\n                    enableSpeedControl: false\r\n                }\r\n            }\r\n        }\r\n    }\r\n    else {\r\n        return Promise.resolve({\r\n            playerOptions: { live: undefined }\r\n        });\r\n    }\r\n}\r\n","import StreamSwapIcon from '../assets/images/Stream_Swap_Icon.svg';\r\n\r\nconst MenuButtonComponent = videojs.getComponent('MenuButton');\r\nlet localize;\r\n\r\nexport class SwapStreamsButton extends MenuButtonComponent {\r\n    constructor(player, options = {}) {\r\n        localize = player.localize?.bind(player);\r\n        const multiStream = player.multistream();\r\n\r\n        options.clickHandler = () => {\r\n            multiStream.incrementCompositionIndex();\r\n            multiStream.applyNewCompositionMap();\r\n        };\r\n\r\n        super(player, Object.assign({ name: 'SwapStreamsButton' }, options));\r\n        this.addClass('mediasite-player__swap-streams-button');\r\n        this.addClass('mediasite-player__custom-controlbar-button');\r\n        this.addClass('hide-small');\r\n\r\n        this.el().style.setProperty('--custom-controlbar-icon', `url(\"${StreamSwapIcon}\")`);\r\n\r\n        this.controlText(localize('Change Primary Content'));\r\n\r\n        this.player = player;\r\n\r\n        player.ready(() => {\r\n            player.collapsedButtons?.push({\r\n                pluginName: 'SwapStreamsButton',\r\n                label: localize('Change Primary Content'),\r\n                buttonName: 'SwapStreamsButton',\r\n                class: 'vjs-swap-streams-button',\r\n                handler: this.options_.clickHandler,\r\n                iconUrl: StreamSwapIcon\r\n            });\r\n        });\r\n    }\r\n}","import videojs from 'video.js';\r\nimport { SwapStreamsButton } from '../../components/swap-streams-button.js';\r\nimport { getFullscreenToggleIndex } from '../../util';\r\n\r\nconst AUDIO_ONLY_STREAM_DIMENSIONS = {\r\n    x: 0,\r\n    y: 0,\r\n    width: 0,\r\n    height: 0\r\n};\r\n\r\nexport class MultistreamPluginStub extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        player.loader().onLoadPresentation(onLoadPresentation.bind(player));\r\n    }\r\n}\r\n\r\nfunction sortByPlaybackAudioSource(a, b) {\r\n    if (a.playbackAudioSource && !b.playbackAudioSource) {\r\n        return -1;\r\n    }\r\n    if (b.playbackAudioSource && !a.playbackAudioSource) {\r\n        return 1;\r\n    }\r\n    return 0;\r\n}\r\n\r\nfunction shouldLoad(presentationId, playCoverData, presentationData) {\r\n    return (presentationData?.streams?.length ?? 0) > 1;\r\n}\r\n\r\nfunction findVisualItemBySourceId(composition, sourceId) {\r\n    return composition.VisualItems.find(item => item.SourceId === sourceId);\r\n}\r\n\r\nfunction organizeStreams(composition, streams) {\r\n    let organizedStreams = [];\r\n    for (let i = 0; i < streams.length; i++) {\r\n        let stream = streams[i];\r\n        if (stream.audioOnly === true) {\r\n            //AudioOnly streams are hidden, but kept in player for audio\r\n            organizedStreams.push(Object.assign({}, stream, AUDIO_ONLY_STREAM_DIMENSIONS));\r\n        } else if (!findVisualItemBySourceId(composition, stream.id)) {\r\n            //Streams not in composition are not included\r\n            continue;\r\n        } else {\r\n            //Streams in composition are assigned dimensions\r\n            const visualItem = findVisualItemBySourceId(composition, stream.id);\r\n            const streamLayoutInfo = {\r\n                x: visualItem.TargetRect.X,\r\n                y: visualItem.TargetRect.Y,\r\n                width: visualItem.TargetRect.Width,\r\n                height: visualItem.TargetRect.Height\r\n            };\r\n            organizedStreams.push(Object.assign({}, stream, streamLayoutInfo));\r\n        }\r\n    }\r\n    return organizedStreams.sort(sortByPlaybackAudioSource);\r\n}\r\n\r\n// Parses the information from the composition model to set up the background styling of the multi-stream player\r\nfunction setupBackground(player, comp) {\r\n    const backgroundComposition = comp.VisualItems.find(item => item.ZIndex === 0);\r\n    if (backgroundComposition) {\r\n        player.multistream().setBackgroundImage(backgroundComposition.SourceId);\r\n    }\r\n\r\n    //rather than else if, we'll pull the color into the player even if there is a background image\r\n    //although it isn't seen right now if there is, due to the background image fully covering the space\r\n    if (comp.BaseColor) {\r\n        player.multistream().setBackgroundColor(comp.BaseColor);\r\n    }    \r\n}\r\n\r\nasync function onLoadPresentation(presentationId, playCoverData, presentationData) {\r\n    const player = this;\r\n    if (shouldLoad(...arguments)) {\r\n        if (!videojs.getPlugin('multistream')) {\r\n            const { MultistreamPlugin } = await import(/* webpackChunkName: 'multistream' */ './multistream.js');\r\n            player.registerPlugin('multistream', MultistreamPlugin);\r\n        }\r\n        \r\n        player.multistream().init();\r\n\r\n        const map = presentationData.compositionMap;\r\n        const comp = map?.VisualCompositions[0];\r\n        setupBackground(player, comp);\r\n\r\n        let streams = presentationData.streams;\r\n\r\n        //Filter streams absent from composition, hide audioonly streams, assign dimensions included streams\r\n        const organizedStreams = organizeStreams(comp, streams);\r\n        //loader needs presentationData to have organized streams when adding src to player\r\n        presentationData.streams = organizedStreams;\r\n        // Wait for each stream to load\r\n        const multistreams = organizedStreams.slice(1);\r\n        const multistreamPlugin = player.multistream();\r\n        return Promise.all(multistreams.map(stream => {\r\n            return multistreamPlugin.add(stream);\r\n        })).then(() => {\r\n            // \"Priority\" property determines the order in which streams should appear on screen\r\n            // PlaybackAudioSource determines which stream is the \"main\" one attached to the top-level player.\r\n            // Set the priority of the main stream in the multistream plugin layout\r\n            const { x, y, width, height } = organizedStreams[0];\r\n            multistreamPlugin.setMainStreamSize(x, y, width, height);\r\n            \r\n            const aspect = map.Width / map.Height;\r\n            multistreamPlugin.aspect = aspect;\r\n\r\n            // Initialize the stream swap button\r\n            if (presentationData.playerOptions?.settings?.enableSwapStreams) {\r\n                multistreamPlugin.compositionList = presentationData.compositionList;\r\n                multistreamPlugin.primarySourceId = organizedStreams[0].id;\r\n\r\n                const swapButton = new SwapStreamsButton(player);\r\n                player.getChild('ControlBar').addChild(swapButton, null, getFullscreenToggleIndex(player) - 1);\r\n            }\r\n\r\n            return { organizedStreams };\r\n        });\r\n    }\r\n}\r\n","import videojs from 'video.js';\r\nimport { getPresentationId, QueryStringParamProvider } from '../../implementations/player-page/helpers.js';\r\n\r\nexport class PlaylistPluginStub extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        player.loader().onLoadPresentation(onLoadPresentation.bind(player));\r\n    }\r\n}\r\n\r\nfunction shouldLoad(presentationId, playCoverData, presentationData) {\r\n    const paramProvider = new QueryStringParamProvider(location.search);\r\n    return paramProvider.getParam(\"playlistid\");\r\n}\r\n\r\nasync function onLoadPresentation(presentationId, playCoverData, presentationData) {\r\n    const player = this;\r\n\r\n    if (shouldLoad(...arguments)) {\r\n        if (!videojs.getPlugin('playlist')) {\r\n            const { PlaylistPlugin } = await import(/* webpackChunkName: 'playlist' */ './playlist.js');\r\n            player.registerPlugin('playlist', PlaylistPlugin);\r\n        }\r\n\r\n        const paramProvider = new QueryStringParamProvider(location.search);\r\n        const playlistId = paramProvider.getParam(\"playlistid\");\r\n        const homePresentationId = getPresentationId(location.pathname, window.SiteData?.PresentationId);       \r\n        const isOnMenuPage = (presentationId == homePresentationId);        \r\n\r\n        if (isOnMenuPage) {\r\n            const loopParam = paramProvider.getParam(\"loop\");\r\n            const isHomeLooping = (loopParam === \"true\");\r\n\r\n            player.banner().isLooping = isHomeLooping\r\n        }\r\n\r\n        //check the metadata to know if we should render in 360 or not\r\n        const is360 = presentationData.metadata.is360Video;\r\n\r\n        //grab the default thumbnail image so that can be rendered if a presentation has no thumbnail\r\n        const defaultImgSrc = playCoverData.defaultThumbnailUrl;\r\n\r\n        player.playlist().init(playlistId, presentationId, is360, defaultImgSrc);\r\n    }\r\n}\r\n","import videojs from 'video.js';\r\n\r\nexport class PollNotificationPluginStub extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        player.loader().onLoadPresentation(onLoadPresentation.bind(player));\r\n    }\r\n}\r\n\r\nfunction shouldLoad(presentationId, playCoverData, presentationData) {\r\n    const { playerExtensions } = presentationData;\r\n    return playerExtensions?.some(ext => ext.ExtensionType === 'Mediasite.Player.PollNotification');\r\n}\r\n\r\nasync function onLoadPresentation(presentationId, playCoverData, presentationData) {\r\n    const player = this;\r\n    const { playerExtensions } = presentationData;\r\n    const pollNotificationConfig = playerExtensions?.find(ext => ext.ExtensionType === 'Mediasite.Player.PollNotification');\r\n\r\n    if (shouldLoad(...arguments)) {\r\n        if (!videojs.getPlugin('pollNotification')) {\r\n            const { PollNotificationPlugin } = await import(/* webpackChunkName: 'poll-notification' */ './poll-notification.js');\r\n            player.registerPlugin('pollNotification', PollNotificationPlugin);\r\n        }\r\n    }\r\n}\r\n","import videojs from 'video.js';\r\n\r\nexport class PostPresentationLinkPluginStub extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        player.loader().onLoadPresentation(onLoadPresentation.bind(player));\r\n    }\r\n}\r\n\r\nfunction shouldLoad(presentationId, playCoverData, presentationData) {\r\n    const { playerExtensions } = presentationData;\r\n    return playerExtensions?.some(ext => ext.ExtensionType === 'Mediasite.Player.SurveyExtension');\r\n}\r\n\r\nasync function onLoadPresentation(presentationId, playCoverData, presentationData) {\r\n    const player = this;\r\n    if (shouldLoad(...arguments)) {\r\n        if (!videojs.getPlugin('postPresentationLink')) {\r\n            const { PostPresentationLinkPlugin } = await import(/* webpackChunkName: 'post-presentation-link' */ './post-presentation-link.js');\r\n            player.registerPlugin('postPresentationLink', PostPresentationLinkPlugin);\r\n        }\r\n        \r\n        const { playerExtensions } = presentationData;\r\n        const surveyExtensionConfig = playerExtensions?.find(ext => ext.ExtensionType === 'Mediasite.Player.SurveyExtension');\r\n\r\n        const { URL: surveyUrl, Message: surveyMessage } = JSON.parse(surveyExtensionConfig?.Data ?? '{}');\r\n\r\n        player.postPresentationLink().init({ url: surveyUrl, message: surveyMessage });\r\n    }\r\n}\r\n","import videojs from 'video.js';\r\n\r\nexport class PreRollPluginStub extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        player.loader().onLoadPresentation(onLoadPresentation.bind(player));\r\n    }\r\n}\r\n\r\nfunction shouldLoad(presentationId, playCoverData, presentationData) {\r\n    const { playerExtensions } = presentationData;\r\n    return playerExtensions?.some(ext => ext.ExtensionType === 'Mediasite.Player.CopyrightExtension');\r\n}\r\n\r\nasync function onLoadPresentation(presentationId, playCoverData, presentationData) {\r\n    const player = this;\r\n    if (shouldLoad(...arguments)) {\r\n        if (!videojs.getPlugin('preRoll')) {\r\n            const { PreRollPlugin } = await import(/* webpackChunkName: 'pre-roll' */ './pre-roll.js');\r\n            player.registerPlugin('preRoll', PreRollPlugin);\r\n        }\r\n\r\n        try {\r\n            const extensionData = presentationData.playerExtensions.find(ext => ext.ExtensionType === 'Mediasite.Player.CopyrightExtension').Data;\r\n            const { Text: text, Seconds: seconds } = JSON.parse(extensionData);\r\n            player.preRoll().init({ text, seconds: parseInt(seconds, 10) });\r\n        }\r\n        catch (e) {\r\n            this.log.warn('Unable to parse config data for the pre-roll message. Pre-roll message will not be displayed.');\r\n        }\r\n    }\r\n}\r\n","import videojs from 'video.js';\r\nimport * as API from '../../api';\r\nimport { QueryStringParamProvider } from 'PLAYER_SRC/implementations/player-page/helpers.js';\r\n\r\nexport class QuizzesPluginStub extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        player.loader().onLoadPlayCover(onLoadPlayCover.bind(player));\r\n        player.loader().onLoadPresentation(onLoadPresentation.bind(player));\r\n    }\r\n}\r\n\r\nfunction shouldLoad(presentationId, playCoverData, presentationData) {\r\n    const paramProvider = new QueryStringParamProvider(location.search);\r\n    const previewQuizzes = (paramProvider.getParam('previewQuizzes')?.toLowerCase() === 'true');\r\n    const noQuizzes = (paramProvider.getParam('quizzes')?.toLowerCase() === 'false');\r\n    window.SiteData.QuizResultContextId = paramProvider.getParam('QuizResultContextId')?.toLowerCase();\r\n    const { playerOptions } = presentationData;\r\n    const { quizzes: quizOptions } = playerOptions;\r\n\r\n    if (noQuizzes) {\r\n        playCoverData.hasQuizzes = false;\r\n    }\r\n\r\n    if ((playCoverData.hasQuizzes && (quizOptions?.enabled !== false)) || previewQuizzes) {\r\n        document.querySelector('.mediasite-standalone-player-container').className += ' has-quizzes';\r\n        return API.Quizzes.getPresentationQuiz(presentationId).then(quizData => quizData?.Quizzes?.length > 0 ? quizData : false);\r\n    }\r\n    else {\r\n        return Promise.resolve(false);\r\n    }\r\n}\r\n\r\nasync function initializeQuizPlugin(quizData, player) {\r\n    if (quizData) {\r\n        if (!videojs.getPlugin('quizzes')) {\r\n            const { QuizzesPlugin } = await import(/* webpackChunkName: 'quizzes' */ './quizzes.js');\r\n            player.registerPlugin('quizzes', QuizzesPlugin);\r\n        }\r\n\r\n        player.quizzes().init({ quizData });\r\n    }\r\n}\r\n\r\nfunction onLoadPlayCover(presentationId, playCoverData, presentationData) {\r\n    const player = this;\r\n    return shouldLoad(...arguments).then(async quizData => {\r\n        await initializeQuizPlugin(quizData, player);\r\n    });\r\n}\r\n\r\nasync function onLoadPresentation(presentationId, playCoverData, presentationData) {\r\n    const player = this;\r\n    if (!playCoverData.poster) {\r\n        playCoverData.hasQuizzes = presentationData.presentationOptions.HasQuizzes;\r\n        await shouldLoad(presentationId, playCoverData, presentationData).then(async quizData => {\r\n            await initializeQuizPlugin(quizData, player);\r\n        });\r\n    }\r\n\r\n    if (player.usingPlugin('quizzes')) {\r\n        const { playerOptions } = presentationData;\r\n        const quizTimes = presentationData.timedEvents.filter(event => event.Type === API.Presentation.TimedEventType.PresentationSubQuiz);\r\n\r\n        if (quizTimes.length > 0 && player.quizzes) {\r\n            const quizzingBuffer = 50;\r\n            //since quizzes can only be configured to be placed on the exact second, plus two quizzes cannot be the same time\r\n            //we can get away with presuming that, if a quiz is at 0, it is the first quiz and\r\n            //if a quiz is within a second of the end, it is the last quiz\r\n            //having a quiz at exactly 0 means that we can't have the slider move past the starting time, which means it can't trigger on restart or seeking\r\n            if (quizTimes[0].Time == 0) {\r\n                quizTimes[0].Time = quizzingBuffer;\r\n            }\r\n\r\n            //Backoff last quiz position if it is in the exact location of the end of the media\r\n            //has to be greater than the duration of the quiz timed event (current 750 ms)\r\n            if (quizTimes[quizTimes.length - 1].Time >= (presentationData.compositionMap.Duration - (750 + quizzingBuffer))) {\r\n                quizTimes[quizTimes.length - 1].Time = presentationData.compositionMap.Duration - (750 + quizzingBuffer);\r\n            }\r\n\r\n            var quizResultParams = {\r\n                PresentationId: presentationId,\r\n                PresentationQuizId: player.quizzes().quizData.Id,\r\n                AuthTicketId: window.SiteData.AuthTicket,\r\n                MediasiteChannelId: window.SiteData.CollectionId,\r\n                QuizResultContextId: window.SiteData.QuizResultContextId\r\n            }\r\n\r\n            return API.Quizzes.getQuizResults(quizResultParams).then(quizResults => {\r\n                player.quizzes().addQuizzes(quizTimes, quizResults);\r\n                const enableSeeking = !player.quizzes().quizData.DisableSeeking\r\n                return {\r\n                    playerOptions: Object.assign({}, playerOptions, {\r\n                        chapters: Object.assign({}, playerOptions.settings, {\r\n                            showChapterList: enableSeeking\r\n                        }),\r\n                        search: Object.assign({}, playerOptions.settings, {\r\n                            enabled: enableSeeking\r\n                        }),\r\n                        settings: Object.assign({}, playerOptions.settings, {\r\n                            enableSeeking: enableSeeking\r\n                        })\r\n                    })\r\n                };\r\n            });\r\n        }\r\n        else {\r\n            return {\r\n                playerOptions: {\r\n                    quizzes: undefined\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./video360.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import videojs from 'video.js';\r\nimport 'videojs-xr';\r\nimport 'videojs-xr/dist/videojs-xr.css';\r\nimport './video360.css';\r\nimport { QueryStringParamProvider } from 'PLAYER_SRC/implementations/player-page/helpers.js';\r\n\r\nexport class Video360PluginStub extends videojs.getPlugin('plugin') {\r\n    constructor(player, options) {\r\n        super(player, options);\r\n\r\n        player.loader().onLoadPresentation(onLoadPresentation.bind(player));\r\n    }\r\n}\r\n\r\nfunction shouldLoad(presentationId, playCoverData, presentationData) {\r\n    const paramProvider = new QueryStringParamProvider(location.search);\r\n    const disableOverlays = (paramProvider.getParam('DisableInteractiveOverlays')?.toLowerCase() === 'true');\r\n    return presentationData.metadata.is360Video && !disableOverlays;\r\n}\r\n\r\nasync function onLoadPresentation(presentationId, playCoverData, presentationData) {\r\n    const player = this;\r\n\r\n    if (shouldLoad(...arguments)) {\r\n        player.xr();\r\n\r\n        if (!videojs.getPlugin('video360')) {\r\n            const { Video360Plugin } = await import(/* webpackChunkName: 'video360' */ './video360.js');\r\n            player.registerPlugin('video360', Video360Plugin);\r\n        }\r\n\r\n        player.video360().init();\r\n    }\r\n}","export const hotkeysConfig = {\r\n    seekStep: 10,\r\n    enableModifiersForNumbers: false,\r\n    enableHoverScroll: true,\r\n    playPauseKey: (event, player) => {\r\n        return event.which === 32 && player.settings().enablePlayPause;\r\n    },\r\n    rewindKey: (event, player) => {\r\n        return event.which === 37 && player.settings().enableSeeking && !event.shiftKey;\r\n    },\r\n    forwardKey: (event, player) => {\r\n        return event.which === 39 && player.settings().enableSeeking && !event.shiftKey;\r\n    },\r\n    fullscreenKey: (event, player) => {\r\n        return event.which === 70 && player.settings().enableFullScreen;\r\n    },\r\n    //if any of these are updated, make sure the 'modifyControlText' function in the player is updated accordingly\r\n    customKeys: {\r\n        questionKey: setupCustomKey(\"q\", \"askAQuestion\", \"openModal\"),\r\n        toggleCaptionsKey: setupCustomKey(\"c\", \"captions\", \"toggleCaptions\"),\r\n        toggleChapterssKey: setupCustomKey(\"C\", \"chapters\", \"toggleChaptersButton\"),        \r\n        searchKey: setupCustomKey(\"s\", \"search\", \"openModal\"),\r\n        infoKey: setupCustomKey(\"i\", \"metadata\", \"openModal\"),\r\n        shareKey: setupCustomKey(\"e\", \"share\", \"openModal\"),\r\n        helpKey: setupCustomKey(\"h\", \"help\", \"handleClick\"),\r\n        downloadKey: setupCustomKey(\"d\", \"downloads\", \"openModal\"),\r\n        pollsKey: setupCustomKey(\"p\", \"polls\", \"open\"),\r\n        nextPresentationKey: setupCustomKey(\">\", \"playlist\", \"simulateNextBtnClick\"),\r\n        prevPresentationKey: setupCustomKey(\"<\", \"playlist\", \"simulatePrevBtnClick\"),\r\n        homePresentationKey: setupCustomKey(\"?\", \"playlist\", \"simulateHomeBtnClick\"),\r\n        arrowKeyShift: {\r\n            key: event => event.which === 39 || event.which === 37,\r\n            handler: (player, options, event) => {\r\n                if (player.settings().enableSeeking) {\r\n                    //Skip Back 1 second\r\n                    if (event.which === 37 && event.shiftKey) {\r\n                        player.currentTime(player.currentTime() - 1);\r\n                    }\r\n\r\n                    //Skip Forward 1 second\r\n                    if (event.which === 39 && event.shiftKey) {\r\n                        player.currentTime(player.currentTime() + 1);\r\n                    }\r\n                }\r\n            }\r\n        },\r\n        audioKey: {\r\n            key: event => event.key === 'a',\r\n            handler: (player, options, event) => {\r\n                const audioBtn = player.getDescendant('ControlBar', 'AudioTrackButton');\r\n                if (audioBtn) {\r\n                    audioBtn.pressButton();\r\n                }\r\n            }\r\n        },\r\n        playbackKey: {\r\n            key: event => event.key === 'r',\r\n            handler: (player, options, event) => {\r\n                const playbackBtn = player.getDescendant('ControlBar', 'PlaybackRateMenuButton');\r\n                if (playbackBtn) {\r\n                    playbackBtn.pressButton();\r\n                }\r\n            }\r\n        },\r\n        captionSettingsKey: {\r\n            key: event => event.key === 'v',\r\n            handler: (player, options, event) => {\r\n                //TextTrackSettings is video.js's name for the Caption Settings modal\r\n                const captionsModal = player.getChild(\"TextTrackSettings\");\r\n                if (captionsModal) {\r\n                    const captionsPlugin = player.captions();\r\n                    //visible instead of enabled due to enabled always being set to true on construction\r\n                    if (captionsPlugin.visible) {\r\n                        captionsModal.open();\r\n                    }\r\n                }\r\n            }\r\n        },\r\n        swapStreamsKey: {\r\n            key: event => event.key === '.',\r\n            handler: (player, options, event) => {\r\n                const swapBtn = player.getDescendant('ControlBar', 'SwapStreamsButton');\r\n                if (swapBtn && player.settings()?.enableSwapStreams) {\r\n                    swapBtn.options_.clickHandler.call(swapBtn, options, event);\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\n/*\r\n * A generic function for setting up the custom keys\r\n * A capitalized letter means that the user should also press 'shift'\r\n */ \r\nfunction setupCustomKey(targetKey, plugin, functionToCall) {\r\n    return {\r\n        key: event => event.key === targetKey,\r\n        handler: (player, options, event) => {\r\n            //checks if the plugin requested does exist before trying to get the plugin and call the corresponding function\r\n            let playerPlugin = player[plugin];\r\n            if (playerPlugin) {\r\n                playerPlugin()[functionToCall]();\r\n            }\r\n        }\r\n    }\r\n}","//a converstion of the class found on line 431 in Mediasite.Core.js\r\n//allows for simple usage and creation of Cookies\r\nexport default class Cookie {\r\n    #valueDelimiter = \"&\";\r\n\r\n    #values = {};\r\n    #expires = null;\r\n    #path = null;\r\n    #name = '';\r\n\r\n    constructor(name) {\r\n        this.#name = name;\r\n        this.readCookieData();\r\n    }\r\n\r\n    get name() {\r\n        return this.#name;\r\n    }\r\n\r\n    get expires() {\r\n        return this.#expires;\r\n    }\r\n\r\n    set expires(date) {\r\n        this.#expires = date;\r\n    }\r\n\r\n    get path() {\r\n        return this.#path;\r\n    }\r\n\r\n    set path(newPath) {\r\n        this.#path = newPath;\r\n    }\r\n\r\n    get values() {\r\n        return this.#values;\r\n    }\r\n\r\n    setValue(name, value) {\r\n        this.#values[name] = value;\r\n        this.writeCookieData();\r\n    }\r\n\r\n    getValue(name, defaultValue) {\r\n        if (!this.#values[name]) {\r\n            return defaultValue;\r\n        }\r\n        return this.#values[name];\r\n    }\r\n\r\n    getValueAsNumber(name, defaultValue) {\r\n        return Number(this.getValue(name, defaultValue));\r\n    }\r\n\r\n    getValueAsBool(name, defaultValue) {\r\n        if (!this.#values[name]) {\r\n            return defaultValue;\r\n        }\r\n        if (this.#values[name].toLowerCase() === \"true\") {\r\n            return true;\r\n        }\r\n        else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    readCookieData() {\r\n        var i, parts;\r\n\r\n        if (document.cookie) {\r\n            var begin = document.cookie.indexOf(this.#name + \"=\");\r\n            if (begin !== -1) {\r\n                begin += this.#name.length + 1;\r\n                var end = document.cookie.indexOf(\";\", begin);\r\n                if (end === -1) {\r\n                    end = document.cookie.length;\r\n                }\r\n\r\n                var rawCookie = document.cookie.substring(begin, end);\r\n                var entries = rawCookie.split(this.#valueDelimiter);\r\n\r\n                for (i = 0; i < entries.length; i++) {\r\n                    parts = entries[i].split(\"=\");\r\n\r\n                    if (parts.length === 2) {\r\n                        this.#values[parts[0]] = decodeURIComponent(parts[1]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    writeCookieData() {\r\n        var key, now, newCookie;\r\n        if (!this.#expires) {\r\n            now = new Date();\r\n            this.#expires = new Date(now.getFullYear() + 1, now.getMonth(), now.getDate());\r\n        }\r\n\r\n        var cookieData = \"\";\r\n        for (key in this.#values) {\r\n            if (this.#values.hasOwnProperty(key)) {\r\n                cookieData += key + \"=\" + encodeURIComponent(this.#values[key]) + this.#valueDelimiter;\r\n            }\r\n        }\r\n        cookieData = cookieData.substring(0, cookieData.length - 1);\r\n\r\n        newCookie = this.#name + \"=\" + cookieData +\r\n            ((this.#path) ? \"; path=\" + this.#path : \"\") +\r\n            ((this.#expires) ? \"; expires=\" + !this.#expires.toGMTString() : \"\");\r\n\r\n        document.cookie = newCookie;\r\n    }\r\n}","import api from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/postcss-loader/dist/cjs.js!./seek-button.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import SeekForward from '../assets/images/seek-forward.svg';\r\nimport SeekBackward from '../assets/images/seek-back.svg';\r\n\r\nimport \"./seek-button.css\";\r\n\r\nconst MenuButtonComponent = videojs.getComponent('MenuButton');\r\nlet localize;\r\n\r\nexport class SeekButton extends MenuButtonComponent {\r\n    constructor(player, options = {}) {\r\n        localize = player.localize?.bind(player);\r\n\r\n        const isForward = options.isForward;\r\n        const name = isForward ? \"SeekForwardButton\" : \"SeekBackButton\";\r\n\r\n        options.clickHandler = () => {\r\n            player.currentTime(player.currentTime() + (options.seekDuration * ((isForward) ? 1 : -1)));\r\n        }\r\n\r\n        super(player, Object.assign({ name: name }, options));\r\n        this.addClass('mediasite-player__seek-button');\r\n        this.addClass('mediasite-player__custom-controlbar-button');\r\n\r\n        this.el().style.setProperty('--custom-controlbar-icon', `url(\"${(isForward) ? SeekForward : SeekBackward}\")`);\r\n\r\n        if (isForward) {\r\n            this.controlText(localize(`Seek forward ${options.seekDuration} seconds (→)`));\r\n        } else {\r\n            this.controlText(localize(`Seek back ${options.seekDuration} seconds (←)`));\r\n        }\r\n    }\r\n}","import api from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../node_modules/css-loader/dist/cjs.js!../node_modules/postcss-loader/dist/cjs.js!./player.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../node_modules/css-loader/dist/cjs.js!../node_modules/postcss-loader/dist/cjs.js!./player-branding.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import './util/webpack-public-path.js';\r\nimport videojs from 'video.js';\r\nimport 'video.js/dist/video-js.min.css';\r\nimport 'videojs-hotkeys';\r\n\r\nimport { applyConfig } from './api/config';\r\nimport { getCurrentLanguage } from './util/localization.js';\r\n\r\nimport * as bundledPlugins from './plugins/bundled';\r\nimport * as conditionalPlugins from './plugins/conditional';\r\nimport { hotkeysConfig, isPresentationId, Cookie } from './util';\r\nimport { QueryStringParamProvider } from \"./implementations/player-page/helpers.js\";\r\nimport { SeekButton } from './components/seek-button.js';\r\nimport { fixTimeTooltipUpdate } from './plugins/bundled/seek-thumbnails.js';\r\n\r\nimport './player.css';\r\nimport './player-branding.css';\r\n\r\nconst pluginNames = [];\r\nconst allPluginEntries = [\r\n    ...Object.entries(bundledPlugins),\r\n    ...Object.entries(conditionalPlugins)\r\n];\r\n\r\nconst bundledPluginOptions = Object.freeze(allPluginEntries.reduce((all, [pluginName, pluginFn]) => {\r\n    videojs.registerPlugin(pluginName, pluginFn);;\r\n    all[pluginName] = Object.freeze({});\r\n    pluginNames.push(pluginName);\r\n    return all;\r\n}, {}));\r\nObject.freeze(pluginNames);\r\n\r\nconst _player = new WeakMap();\r\n\r\nlet localize;\r\n\r\n/** Media player capable of playing Mediasite presentations. */\r\nclass MediasitePlayer {\r\n    /**\r\n     * \r\n     * @param {HTMLVideoElement} videoEl A video element to transform into a Mediasite player.\r\n     * @param {Object} options\r\n     * @param {string} options.presentationId The ID of a Mediasite presentation.\r\n     * @param {Object<string, function>} [options.events] A dictionary of event listeners to attach to the player.\r\n     * @param {string} [options.mediasiteRoot='/Mediasite'] The path to a Mediasite server root. The player will attempt to infer this value if it is omitted.\r\n     * @param {Object} [options.apiConfig] Options to configure communication with Mediasite servers.\r\n     * @param {boolean} [options.controls=true] Whether or not to display the standard controls. Set to <code>false</code> for a \"chromeless\" player.\r\n     * @param {boolean} [options.fill=false] Whether or not the player should try to fill the entire container.\r\n     * @param {boolean} [options.fluid=true] Whether or not the player height should automatically adjust to maintain the loaded video's aspect ratio.\r\n     * @param {boolean} [options.autoplay=false] Enables autoplay on this player's HTML video element.\r\n     * @param {number[]} [options.playbackRates=[0.5, .75, 1.0, 1.25, 1.5, 1.75, 2.0]] An array of playback rates that should be available to the user via the control bar.\r\n     * @param {string} [options.language]\r\n     * @param {Array} [options.hooks] An array of plugin hooks to attach to this player.\r\n     */\r\n    constructor(videoEl, options) {\r\n        const { presentationId, events, mediasiteRoot, apiConfig, plugins: customPlugins = {}, controls = true, fill = false, fluid = true, autoplay = false, loop = false, playbackRates = [0.5, .75, 1.0, 1.25, 1.5, 1.75, 2.0], language = getCurrentLanguage(), lockControls = false, ...pluginOptions } = options;\r\n\r\n        if (mediasiteRoot || apiConfig) {\r\n            applyConfig({ mediasiteRoot, ...apiConfig });\r\n        }\r\n\r\n        videojs.options.vhs.limitRenditionByPlayerDimensions = false;\r\n\r\n        const player = videojs(videoEl, {\r\n            controls,\r\n            fill,\r\n            fluid,\r\n            autoplay,\r\n            responsive: true,\r\n            playbackRates,\r\n            userActions: {\r\n                hotkeys: false,\r\n                click: this.#clickHandler, //overrides the default click + double click so that we can check the player settings to see if they are allowed to play/pause or fullscreen\r\n                doubleClick: this.#doubleClickHandler,\r\n            },\r\n            liveui: true,\r\n            crossOrigin: 'anonymous',\r\n            language,\r\n            plugins: bundledPluginOptions,\r\n            html5: {\r\n                nativeTextTracks: false,\r\n                nativeAudioTracks: false,\r\n                preloadTextTracks: false //don't automatically load all caption vtt files.  An asynchronous solution may be coming from videojs, but as of 12/23 it doesn't exist yet.\r\n            },\r\n            persistTextTrackSettings: true,\r\n            inactivityTimeout: lockControls ? 0 : 2000\r\n        });\r\n\r\n        //there is a bug in the TimeTooltip class (videojs version 7.18.1) that has been fixed in a subsequent videojs version. The bug results in the video\r\n        //thumbnails appearing outside of the video area when hovering over the far right side of the timeline. This issue is documented here: https://github.com/videojs/video.js/issues/8273\r\n        //The following method call will override the tooltip update method and is essentially a copy of the (very minor) fix to that method that was introduced in\r\n        //a later version of videojs (8.14+).\r\n        fixTimeTooltipUpdate(player);\r\n\r\n        player.collapsedButtons = [];\r\n\r\n        localize = player.localize?.bind(player);\r\n\r\n        player.ready(() => {\r\n            player.layout().addChild(player.tech(true), {}, 0);\r\n            player.hotkeys(hotkeysConfig);\r\n            this.#modifyControlText();\r\n\r\n            const Plugin = videojs.getPlugin('plugin');\r\n            for (const [name, fn] of Object.entries(bundledPlugins)) {\r\n                this[name] = Plugin.isBasic(fn) ? player[name].bind(player) : player[name]();\r\n            }\r\n\r\n            player.on('registercustomplugin', (event, { name, isBasic }) => {\r\n                this[name] = isBasic ? player[name].bind(player) : player[name]();\r\n            });\r\n\r\n            for (const [name, fn] of Object.entries(customPlugins)) {\r\n                player.registerPlugin(name, fn);\r\n            }\r\n\r\n            this.setupVolumeCooking();\r\n            this.#setSeekingButtons(player);\r\n            //rather than added 'loop' to the video.js player, tell the plugin in charge of the end modal that it should loop\r\n            player.banner().isLooping = loop;\r\n\r\n            //handles setting up the player to allow it to successfully autoplay\r\n            const params = new QueryStringParamProvider(location.search);\r\n            const autoMute = params.getParam('automute')?.toLowerCase();\r\n            if ((player.autoplay() && autoMute !== 'false') || autoMute === 'true') {\r\n                player.muted(true);\r\n\r\n                player.notifications().setupMuteNotification();\r\n            }\r\n\r\n            player.collapsedButtons?.push({\r\n                label: localize('Picture in Picture'),\r\n                buttonName: 'PictureInPictureToggle',\r\n                class: 'vjs-picture-in-picture-control'\r\n            });\r\n\r\n            const playRate = player.playbackRate();\r\n\r\n            player.collapsedButtons?.push({\r\n                name: 'PlaybackRateOverflowButton',\r\n                label: (playRate ?? 1) + 'x -- ' + localize('Playback Rate'),\r\n                buttonName: 'PlaybackRateMenuButton',\r\n                class: 'vjs-playback-rate'\r\n            });\r\n        });\r\n\r\n        player.one('playing', () => {\r\n            this.populateMenuButtons(player);\r\n            this.setShowMoreButtonVisibility(player);\r\n        });\r\n\r\n        player.on('ratechange', () => {\r\n            const rate = player.playbackRate();\r\n            const overflowButton = player.getChild('ControlBar')?.getChild('OverflowMenuButton');\r\n            const playbackMenuItem = overflowButton?.items.find(x => x.options().iconClass === 'vjs-playback-rate');\r\n            if (playbackMenuItem) {\r\n                const textElement = playbackMenuItem.el().querySelector('span.vjs-menu-item-text');\r\n                if (textElement) {\r\n                    textElement.textContent = rate + 'x -- ' + localize('Playback Rate');\r\n                }\r\n            }\r\n        });\r\n\r\n        player.addClass('video-js');\r\n        player.addClass('mediasite-player');\r\n        player.getChild('ControlBar').addClass('mediasite-player__main-control-bar');\r\n        player.getChild(\"ErrorDisplay\").addClass('mediasite-player__modal-dialog');\r\n        player.getDescendant('ControlBar', 'CurrentTimeDisplay').show();\r\n        player.getDescendant('ControlBar', 'TimeDivider').show();\r\n        player.getDescendant('ControlBar', 'DurationDisplay').show();\r\n\r\n        // Set up a default audio track\r\n        const audioTrackList = player.audioTracks();\r\n        const mainTrack = new videojs.AudioTrack({\r\n            kind: 'main',\r\n            label: 'English',\r\n            language: 'en',\r\n            enabled: true\r\n        });\r\n        audioTrackList.addTrack(mainTrack);\r\n\r\n        player.loader().init(presentationId, pluginOptions);\r\n\r\n        _player.set(this, player);\r\n    }\r\n\r\n    /**\r\n     * Setups a cookie that handles a user's volume between videos\r\n     * */\r\n    setupVolumeCooking() {\r\n        const player = _player.get(this);\r\n        //setting up a cookie to keep track of the user's volume between videos\r\n        const volumeCookie = new Cookie(\"MediasitePlayerOptions\");\r\n        const volumeString = \"Volume\";\r\n        const muteString = \"Muted\";\r\n\r\n        //if there is no value for 'Volume' this will return 'false'\r\n        const volumeValue = volumeCookie.getValueAsNumber(volumeString, false);\r\n\r\n        if (volumeValue) {\r\n            player.volume(volumeValue);\r\n        }\r\n\r\n        const mutedValue = volumeCookie.getValueAsBool(muteString, false);\r\n\r\n        if (mutedValue) {\r\n            player.muted(true);\r\n        }\r\n\r\n        //update the cookie whenever the volume changes\r\n        player.on('volumechange', () => {\r\n            volumeCookie.setValue(volumeString, player.volume());\r\n            volumeCookie.setValue(muteString, player.muted());\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Adds all enabled control bar buttons to the overflow menu.  These will be hidden on larger\r\n     * screens and shown when the screen is smaller.  The opposite will occur with the control buttons\r\n     * themselves.  The Show More and Playback Speed buttons are excluded from this behavior.\r\n    */\r\n    populateMenuButtons(player) {\r\n        const controlBarMenu = player.controlbarMenu();\r\n\r\n        for (var i = 0; i < player.collapsedButtons?.length ?? 0; i++) {\r\n            const buttonData = player.collapsedButtons[i];\r\n            const pluginButton = player.getDescendant('ControlBar', buttonData.buttonName);\r\n            if (pluginButton && !pluginButton.el().classList.contains('vjs-hidden')) {\r\n                controlBarMenu.addMenuItem(localize(buttonData.label), {\r\n                    name: buttonData.pluginName,\r\n                    id: buttonData.pluginName,\r\n                    iconClass: buttonData.class,\r\n                    icon: buttonData.iconUrl,\r\n                    callback: () => {\r\n                        setTimeout(() => {\r\n                            buttonData.handler ? buttonData.handler() : pluginButton.handleClick();\r\n                            //fixes issue where you can't click the scrollbar for the menu on chrome\r\n                            pluginButton.menu.el().addEventListener(\"mousedown\", (e) => {                                \r\n                                if (e.clientX >= e.target.clientWidth || e.clientY >= e.target.clientHeight) {\r\n                                    e.preventDefault();\r\n                                }\r\n                            });\r\n                        }, 250);\r\n                    }\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Hides the show more button on large screens if there are no menu items, and on small screens if\r\n     * there are no buttons that will collapse into the menu\r\n    */\r\n    setShowMoreButtonVisibility(player) {\r\n        var overflowButton = player.getDescendant('ControlBar', 'OverflowMenuButton').el();\r\n        var overflowItems = [...overflowButton.querySelector('ul.vjs-menu-content').children];\r\n        var flexItems = overflowItems.filter(x => x.classList.contains('flex-menu-item'));\r\n        if (!overflowItems.length) {\r\n            overflowButton.classList.add('hide-small');\r\n        } else if (overflowItems.length - flexItems.length < 1) {\r\n            overflowButton.classList.add('hide-large');\r\n        }\r\n    }\r\n\r\n    #setSeekingButtons(player) {\r\n        const seekDuration = 10;\r\n        const controlBar = player.getChild('ControlBar');\r\n        const backSeekButton = new SeekButton(player, {\r\n            seekDuration: seekDuration,\r\n            isForward: false\r\n        });\r\n        const forwardSeekButton = new SeekButton(player, {\r\n            seekDuration: seekDuration, \r\n            isForward: true\r\n        });\r\n        forwardSeekButton.addClass('hide-small');\r\n\r\n        player.ready(() => {\r\n            controlBar.addChild(forwardSeekButton, null, 1);\r\n            controlBar.addChild(backSeekButton, null, 1);\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Overrides the default of whether we should be allowed to play/pause on clicking the video\r\n     * @param {any} event\r\n     */\r\n    #clickHandler(event) {\r\n        const params = new QueryStringParamProvider(location.search);\r\n        const clickToPlay = params.getParam('clickToPlay')?.toLowerCase();\r\n        if (clickToPlay === 'false') {\r\n            return;\r\n        }\r\n\r\n        if (this.settings().enablePlayPause) {\r\n            if (this.paused()) {\r\n                this.play();\r\n            } else {\r\n                this.pause();\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Overrides the default of whether we should be allowed to toggle fullscreen \r\n     * @param {any} event\r\n     */\r\n    #doubleClickHandler(event) {\r\n        if (this.settings().enableFullScreen) {\r\n            if (this.isFullscreen()) {\r\n                this.exitFullscreen();\r\n            } else {\r\n                this.requestFullscreen();\r\n            }\r\n        }        \r\n    }\r\n\r\n    /**\r\n     * Updates the control text of the player to reference the hotkeys used to access them\r\n     * If one changes the hotkeys, make sure to edit this function as well as the hotkeys.js\r\n    */\r\n    #modifyControlText() {\r\n        const player = _player.get(this);\r\n\r\n        const muteToggle = player.getDescendant('ControlBar', 'VolumePanel', 'MuteToggle');\r\n        const playToggle = player.getDescendant('ControlBar', 'PlayToggle');\r\n\r\n        player.on(\"presentationloaded\", () => {\r\n            this.#addHotkeyToControlText(player.getDescendant('ControlBar', 'PlaybackRateMenuButton'), 'R');\r\n            this.#addHotkeyToControlText(player.getDescendant('ControlBar', 'ChaptersButton'), 'C + Shift');\r\n            this.#addHotkeyToControlText(player.getDescendant('ControlBar', 'AudioTrackButton'), 'A');\r\n            this.#addHotkeyToControlText(player.getDescendant('ControlBar', 'SubsCapsButton'), 'C');\r\n            this.#addHotkeyToControlText(player.getDescendant('ControlBar', 'FullscreenToggle'), 'F');\r\n            this.#addHotkeyToControlText(player.getDescendant('ControlBar', 'SwapStreamsButton'), '.');\r\n            this.#addHotkeyToControlText(muteToggle, 'M');\r\n        });\r\n\r\n        player.on('play', () => {\r\n            this.#addHotkeyToControlText(playToggle, 'Spacebar');\r\n        });\r\n        \r\n        player.on('pause', () => {\r\n            this.#addHotkeyToControlText(playToggle, 'Spacebar');\r\n        });\r\n\r\n        player.on('volumechange', () => {\r\n            this.#addHotkeyToControlText(muteToggle, 'M');\r\n        });\r\n    }\r\n\r\n    /**\r\n     * A function for formatting an element's control text\r\n     * @param {Component} element\r\n     * @param {string} key\r\n     */\r\n    #addHotkeyToControlText(element, key) {\r\n        if (!element) {\r\n            return;\r\n        }\r\n\r\n        const controlText = element.controlText();\r\n        if (controlText.slice(-3) !== `(${key})`) {\r\n            element.controlText(`${controlText} (${key})`);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * Begins playback.\r\n     * @returns {Promise} A Promise that is resolved once playback has actually started, or rejected if enablePlayPause has been disabled in the player settings.\r\n     */\r\n    play() {\r\n        if (_player.get(this).settings?.().enablePlayPause) {\r\n            return isPresentationId(_player.get(this).loader().presentationId) ? _player.get(this).play() : Promise.resolve();\r\n        }\r\n        else {\r\n            return Promise.reject(Error('Unable to play: play/pause functions are currently disabled.'));\r\n        }\r\n    }\r\n\r\n    /** Pauses playback. */\r\n    pause() {\r\n        if (_player.get(this).settings?.().enablePlayPause) {\r\n            return _player.get(this).pause();\r\n        }\r\n        else {\r\n            _player.get(this).log('Attempted to pause, but pausing is disabled in the UI.');\r\n            throw Error('Unable to pause: play/pause functions are currently disabled.');\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Whether or not playback is currently paused.\r\n     * @returns {boolean}\r\n     */\r\n    paused() {\r\n        return _player.get(this).paused();\r\n    }\r\n\r\n    /**\r\n     * Seeks the player to the given time in seconds, or returns the current time.\r\n     * @param {number} [seconds] The time in seconds to which to seek. If omitted, the player's current time will be returned and no seeking will be performed.\r\n     */\r\n    currentTime(seconds) {\r\n        if (seconds === undefined || _player.get(this).settings?.().enableSeeking) {\r\n            return (isPresentationId(_player.get(this).loader().presentationId) || seconds === undefined) ? _player.get(this).currentTime(seconds) : 0;\r\n        }\r\n        else {\r\n            _player.get(this).log('Attempted to seek, but seeking is disabled in the UI.');\r\n            throw Error('Unable to seek: seek function is currently disabled.');\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Requests the player to open in full screen mode. Note: in modern browsers this only works if called directly from an event handler for a user gesture.\r\n     * @param {FullscreenOptions} options\r\n     */\r\n    requestFullscreen(options) {\r\n        if (_player.get(this).settings?.().enableFullScreen) {\r\n            return isPresentationId(_player.get(this).loader().presentationId) ? _player.get(this).requestFullscreen(options) : null;\r\n        }\r\n        else {\r\n            _player.get(this).log('Attempted to enter full screen, but full screen mode is disabled.');\r\n            throw Error('Unable to enter full screen: full screen function is currently disabled.');\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Sets the player's playback rate, or returns the current rate.\r\n     * @param {number} [rate] The playback rate. If omitted, the player's current playback rate will be returned without modification.\r\n     * @returns {number|undefined} The current playback rate when getting, or undefined when setting.\r\n     */\r\n    playbackRate(rate) {\r\n        if (rate === undefined || _player.get(this).settings?.().enableSpeedControl) {\r\n            return _player.get(this).playbackRate(rate);\r\n        }\r\n        else {\r\n            _player.get(this).log('Attempted to set the playback rate, but changing playback rates is disabled.');\r\n            throw Error('Unable to set playback rate: changing the playback rate is currently disabled.');\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Activates or deactivates the related plugins that change their functionality when seeking is enabled or not\r\n     * @param {boolean} enableSeeking\r\n     */\r\n    enableSeeking(enableSeeking) {\r\n        if (_player.usingPlugin('quizzes')) {\r\n            _player.get(this).quizzes().enableSeeking = enableSeeking;\r\n        }\r\n\r\n        _player.get(this).settings().enableSeeking = enableSeeking;\r\n        _player.get(this).chapters().showChapterList = enableSeeking;\r\n        _player.get(this).search().enabled = enableSeeking;\r\n    }\r\n\r\n    /**\r\n     * Returns the total duration of the media in seconds.\r\n     * @returns {number}\r\n     */\r\n    duration() { return _player.get(this).duration() }\r\n\r\n    /**\r\n     * Sets the player volume to the given value, or returns the current volume.\r\n     * @param {number} [newValue] A volume level between 0.0 and 1.0. If omitted, the player's current volume will be returned without modification.\r\n     * @returns {number|undefined} The current volume when getting, or undefined when setting.\r\n     */\r\n    volume(newValue) { return _player.get(this).volume(newValue) }\r\n\r\n    /**\r\n     * Mutes/unmutes the player, or returns a boolean indicating whether the player is currently muted.\r\n     * @param {boolean} [newValue] Whether or not the player should be muted. If omitted, a boolean will be returned indicating whether or not the player is currently muted.\r\n     * @returns {boolean|undefined} Whether or not the player is currently muted when getting, or undefined when setting.\r\n     */\r\n    muted(newValue) { return _player.get(this).muted(newValue) }\r\n\r\n    /**\r\n     * Attaches an event listener for the given event type.\r\n     * @param {string|string[]} type The type of event for which to listen, or an array of event types.\r\n     * @param {function(Event)} fn The handler to call when the event occurs.\r\n     */\r\n    on(type, fn) { return _player.get(this).on(type, fn) }\r\n\r\n    /** \r\n     * Detaches a previously registered event listener.\r\n     * @param {string|string[]} type The type of event listener to remove.\r\n     * @param {function(Event)} fn A reference to the function that was previously registered as an event listener for this event.\r\n     */\r\n    off(type, fn) { return _player.get(this).off(type, fn) }\r\n\r\n    /**\r\n     * Registers an event listener that will only fire once, the first time the event occurs.\r\n     * @param {string|string[]} type The type of event for which to listen, or an array of event types.\r\n     * @param {function(Event)} fn The handler to call when the event occurs.\r\n     */\r\n    one(type, fn) { return _player.get(this).one(type, fn) }\r\n\r\n    /** Gracefully destroys this player instance and releases any resources it is using. */\r\n    dispose() { return _player.get(this).dispose() }\r\n\r\n    //Dynamically loads an external JavaScript file containing one or more custom plugins.<br><br>\r\n    //@param { string } url The path to a JavaScript module which exposes one or more plugin wrapper functions as named exports.The name of each export found in the module will be used as the name of the plugin when registering it with the player.\r\n\r\n    registerExternalPlugin(url) { return _player.get(this).registerExternalPlugin(url) }\r\n\r\n    /**\r\n     * A reference to the Video.js library itself.\r\n     * @type {videojs}\r\n     */\r\n    get videojs () {\r\n        return videojs;\r\n    }\r\n}\r\n\r\n/**\r\n * The base Plugin class from Video.js.\r\n * @external \"videojs.Plugin\"\r\n * @see {@link https://docs.videojs.com/plugin}\r\n */\r\n\r\nexport default MediasitePlayer;\r\nexport { pluginNames };\r\nexport { default as videojs } from 'video.js';\r\nexport { Config } from './api';\r\n","import api from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/postcss-loader/dist/cjs.js!./player-page.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","/** \r\n * An implementation of the player which runs on its own standalone page. Not intended to be consumed as a module.\r\n */\r\n\r\nimport MediasitePlayer, { pluginNames } from '../player.js';\r\nimport { getPlayFrom, getDuration, getPresentationId, getLockControls, QueryStringParamProvider } from './player-page/helpers.js';\r\nimport { isPresentationId } from '../util';\r\nimport './player-page.css';\r\n\r\n// Initialize a new Player instance by passing a <video> element to the constructor:\r\nconst paramProvider = new QueryStringParamProvider(location.search);\r\nconst presentationId = getPresentationId(location.pathname, window.SiteData?.PresentationId);\r\n\r\nconst isAutoPlay = paramProvider.getParamFromOptions(['autostart', 'autoplay'])?.toLowerCase() === 'true';\r\n\r\nconst player = new MediasitePlayer(document.querySelector('.mediasite-standalone-player-container > video'), {\r\n    presentationId,\r\n    apiConfig: {\r\n        AntiForgery: {\r\n            Header: window.SiteData.AntiForgeryHeaderName,\r\n            Token: window.SiteData.AntiForgeryToken\r\n        },\r\n        Path: {\r\n            ApplicationRoot: window.SiteData.ApplicationRoot,\r\n            ApplicationScriptsRoot: window.SiteData.ApplicationScriptsRoot,\r\n            PlayerService: window.SiteData.PlayerService,\r\n            FileServer: window.SiteData.FileServer,\r\n            WebAppsApi: window.SiteData.WebAppsApi\r\n        }\r\n    },\r\n    controls: paramProvider.getParam('controls')?.toLowerCase() !== 'false',\r\n    autoplay: isAutoPlay,\r\n    loop: paramProvider.getParam('loop')?.toLowerCase() === 'true',\r\n    fill: true,\r\n    fluid: false,\r\n    playFrom: getPlayFrom(location.search),\r\n    duration: getDuration(location.search),\r\n    lockControls: getLockControls(location.search),\r\n\r\n    overrides: {\r\n        playcover: {\r\n            visible: paramProvider.getParamFromOptions(['cover', 'playcover'])?.toLowerCase() !== 'false' && !isAutoPlay,\r\n            showPlayButton: paramProvider.getParam('coverplaybutton')?.toLowerCase() !== 'false',\r\n            showTitle: paramProvider.getParam('covertitle')?.toLowerCase() !== 'false'\r\n        },\r\n        ...pluginNames.reduce((all, pluginName) => {\r\n            if (paramProvider.getParamCaseSensitive(pluginName)?.toLowerCase() === 'false') {\r\n                all[pluginName] = { enabled: false };\r\n            }\r\n            return all;\r\n        }, {})\r\n    }\r\n});\r\n\r\nplayer.one('playcoverloaded', () => {\r\n    if (isPresentationId(presentationId) && !player.playcover) {\r\n        //MVP #661 Make sure we remove preloading class if the listener in playcover.js didn't fire\r\n        let elapsed = 0;\r\n        const interval = setInterval(() => {\r\n            elapsed += 250;\r\n            if (elapsed >= 30000) {\r\n                clearInterval(interval);\r\n            }\r\n            if (!player.playcover) {\r\n                return;\r\n            }\r\n            const poster = player.playcover.player.getChild('PosterImage');\r\n            if (poster.hasClass('mediasite-player__play-cover--preloading')) {\r\n                poster.removeClass('mediasite-player__play-cover--preloading');\r\n                clearInterval(interval);\r\n            }\r\n        }, 250);\r\n    }\r\n});\r\n\r\nplayer.one('presentationloaded', () => {\r\n    if (!isPresentationId(presentationId)) {\r\n        player.playcover.visible = false;\r\n    }\r\n});\r\n\r\nwindow.MediasitePlayer = player;\r\n","import { isPresentationId } from '../../util';\r\n\r\nexport function getPlayFrom(queryString) {\r\n    const urlParams = new URLSearchParams(queryString.toLowerCase());\r\n    const playFromParam = urlParams.get('playfrom');\r\n    if (playFromParam) {\r\n        return parseFloat(playFromParam) / 1000;\r\n    }\r\n}\r\n\r\nexport function getDuration(queryString) {\r\n    const urlParams = new URLSearchParams(queryString.toLowerCase());\r\n    const durationParam = urlParams.get('duration');\r\n    if (durationParam) {\r\n        return parseFloat(durationParam) / 1000;\r\n    }\r\n}\r\n\r\nexport function getPresentationId(pathname, dataPresentationId) {\r\n    if (isPresentationId(dataPresentationId)) {\r\n        return dataPresentationId;\r\n    }\r\n\r\n    const splitPath = pathname.split('/');\r\n    const presentationId = splitPath[splitPath.length - 1];\r\n\r\n    if (isPresentationId(presentationId)) {\r\n        return presentationId;\r\n    }\r\n\r\n    //a reason why this might not be an id if because, previously, we added the player guids to the URL with dashes,\r\n    //so just in case someone is still using an old URL (MVP #1144), let's try and remove any dashes and see if it is a presentation id\r\n    const dashlessId = presentationId.replace(/-/g, \"\");\r\n    if (isPresentationId(dashlessId)) {\r\n        return dashlessId;\r\n    }\r\n\r\n    //99% of the time we won't reach this code, but there might be someone throwing around extra '/' in our URLs (MVP #714)\r\n    //if that's the case, let's do the extra work and scan the whole URL to find the part of the URL that's the presentation ID\r\n    const foundId = splitPath.find(part => isPresentationId(part));\r\n\r\n    //if there is a valid id in the pathname, return it. If there isn't (we might be showing a player or layout id instead), return whatever was after the last slash\r\n    return foundId ?? presentationId;\r\n}\r\n\r\nexport function getLockControls(queryString) {\r\n    const urlParams = new URLSearchParams(queryString.toLowerCase());\r\n    const lockControlsValue = urlParams.get('lockcontrols');\r\n    return (lockControlsValue === 'true');\r\n}\r\n\r\nexport class QueryStringParamProvider {\r\n    #rawParams;\r\n    #lowerParams;\r\n\r\n    constructor(queryString) {\r\n        this.#rawParams = new URLSearchParams(queryString.toLowerCase());\r\n        this.#lowerParams = new URLSearchParams();\r\n        for (const [name, value] of this.#rawParams) {\r\n            this.#lowerParams.append(name.toLowerCase(), value);\r\n        }\r\n    }\r\n\r\n    getParam(paramName) {\r\n        paramName = paramName.toLowerCase();\r\n        return this.#lowerParams.get(paramName);\r\n    }\r\n\r\n    getParamCaseSensitive(paramName, defaultValue) {\r\n        return this.#rawParams.get(paramName);\r\n    }\r\n\r\n    /**\r\n     * When passing in an array of options, it will return the value that it first finds. If none is found, return null.\r\n     * @param {Array} paramArray\r\n     */\r\n    getParamFromOptions(paramArray) {\r\n        let returnParam = null;\r\n        for (let param of paramArray) {\r\n            let paramName = param.toLowerCase();\r\n            let paramOption = this.#lowerParams.get(paramName);\r\n            if (paramOption !== null) {\r\n                returnParam = paramOption;\r\n                break;\r\n            }\r\n        }\r\n\r\n        return returnParam;\r\n    }\r\n}","export function applyPlayerOptions(player, playerOptions) {\r\n    for (const [pluginKey, pluginOptions] of Object.entries(playerOptions)) {\r\n        if (player[pluginKey]) {\r\n            if (typeof pluginOptions === 'object') {\r\n                const plugin = player[pluginKey]();\r\n                for (const [optionKey, optionValue] of Object.entries(pluginOptions)) {\r\n                    if (optionValue !== undefined) {\r\n                        plugin[optionKey] = optionValue;\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                player[pluginKey]?.(pluginOptions);\r\n            }\r\n        }\r\n        else {\r\n            if (pluginOptions) {\r\n                console.warn(`Plugin or option \"${pluginKey}\" doesn't exist. Custom options that were passed for this plugin or option will be ignored.`);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import * as THREE from 'three';\r\nimport { backgroundColor, textColor, font } from './styles360.js';\r\nimport { DefaultSizing, InteractionValues } from './enums.js';\r\n\r\n/**\r\n* Provides a mesh that can be rendered with a camera or scene based upon the message and wanted height.\r\n* @param {string} message\r\n* @param {number} padding //provides distance between when the text ends and the background ends, similar to padding in CSS\r\n* @param {number} height\r\n*/\r\nexport function createMessage(message, padding = .25, height = DefaultSizing.Height, width = null, opacity = 1, messageColor = textColor()) {\r\n\tconst textMesh = createMessageTextMesh(message, height, messageColor);\r\n\r\n\tconst textMeshMetrics = textMesh.geometry.parameters;\r\n\r\n\t//create the background mesh behind the text that scales to the length of the mesh of the text\r\n\tlet renderWidth;\r\n\r\n\tif (!width) {\r\n\t\trenderWidth = textMeshMetrics.width + padding;\r\n\t} else {\r\n\t\trenderWidth = width;\r\n\t}\r\n\r\n\tconst renderHeight = textMeshMetrics.height + padding;\r\n\r\n\tconst backgroundMesh = createBackgroundMesh(renderWidth, renderHeight, backgroundColor(), opacity);\r\n\tbackgroundMesh.add(textMesh);\r\n\ttextMesh.position.set(0, 0, DefaultSizing.TextOffset);\r\n\treturn backgroundMesh;\r\n}\r\n\r\n/**\r\n* Creates a pill-shaped button based upon the passed in parameters.\r\n* @param {any} message\r\n* @param {any} padding\r\n* @param {any} height\r\n* @param {any} buttonColor\r\n* @param {any} btnTextColor\r\n*/\r\nexport function createButton(message, padding = .25, height = DefaultSizing.Height, buttonColor = backgroundColor(), btnTextColor = textColor()) {\r\n\tconst textMesh = createMessageTextMesh(message, height, btnTextColor);\r\n\tconst textMeshMetrics = textMesh.geometry.parameters;\r\n\r\n\tconst renderHeight = textMeshMetrics.height + padding;\r\n\tconst renderWidth = textMeshMetrics.width + padding;\r\n\r\n\tconst backgroundMesh = createBackgroundMesh(renderWidth, renderHeight, buttonColor);\r\n\tconst leftSideBtn = createHalfCircle(renderHeight, buttonColor);\r\n\tconst rightSideBtn = createHalfCircle(renderHeight, buttonColor);\r\n\r\n\t//creates an invisible mesh behind the button pieces so that the raycaster can interact with all of it\r\n\tconst btnGroupMesh = createBackgroundMesh(renderWidth + renderHeight, renderHeight + padding, buttonColor, 0);\r\n\tbtnGroupMesh.add(backgroundMesh);\r\n\tbtnGroupMesh.add(textMesh);\r\n\tbtnGroupMesh.add(leftSideBtn);\r\n\tbtnGroupMesh.add(rightSideBtn);\r\n\r\n\ttextMesh.position.set(0, 0, DefaultSizing.TextOffset);\r\n\tleftSideBtn.position.set(-(renderWidth / 2), 0, 0);\r\n\trightSideBtn.position.set(renderWidth / 2, 0, 0);\r\n\tleftSideBtn.rotateOnAxis(new THREE.Vector3(0, 0, 1), 90 / 180 * Math.PI); //inline math here to highlight radians, not degrees for rotation\r\n\trightSideBtn.rotateOnAxis(new THREE.Vector3(0, 0, 1), -90 / 180 * Math.PI);\r\n\r\n\treturn btnGroupMesh;\r\n}\r\n\r\n/**\r\n* Converts the text given into a text mesh with the text rendered onto it.\r\n* @param {any} message\r\n* @param {any} height\r\n* @param {any} fontFamily\r\n*/\r\nexport function createMessageTextMesh(message, height = DefaultSizing.Height, messageColor = textColor(), fontFamily = font(), outlineColor = null) {\r\n\tconst canvas = document.createElement('canvas');\r\n\tconst context = canvas.getContext('2d');\r\n\r\n\t//depending on the message, we need to scale the meshes to fully fit the message\r\n\tconst contextFont = `normal ${DefaultSizing.Scale}px ${fontFamily}`;\r\n\tcontext.font = contextFont;\r\n\tconst metrics = context.measureText(message);\r\n\r\n\tcanvas.width = metrics.width;\r\n\tcanvas.height = DefaultSizing.Scale;\r\n\r\n\t//figure out the color and then render the message on the context\r\n\trenderMessage(context, message, metrics.width, messageColor, contextFont, outlineColor);\r\n\r\n\t//create the mesh with the canvas that has just been rendered to\r\n\treturn createTextMesh(canvas, metrics.width, height, messageColor);\r\n}\r\n\r\n/**\r\n * Returns a mesh based upon the dimensions and color provided.\r\n * @param {number} x\r\n * @param {number} y\r\n * @param {string} color\r\n */\r\nexport function createBackgroundMesh(x, y, color, opacity = 1) {\r\n\tconst geometry = new THREE.PlaneGeometry(x, y);\r\n\tlet material;\r\n\t//let's only add the 'transparent: true' property if the opacity is actually not 1\r\n\tif (opacity === 1) {\r\n\t\tmaterial = new THREE.MeshBasicMaterial({\r\n\t\t\tcolor: color,\r\n\t\t\tside: THREE.DoubleSide\r\n\t\t});\r\n\t} else {\r\n\t\tmaterial = new THREE.MeshBasicMaterial({\r\n\t\t\tcolor: color,\r\n\t\t\tside: THREE.DoubleSide,\r\n\t\t\ttransparent: true,\r\n\t\t\topacity: opacity,\r\n\t\t\tdepthWrite: (opacity !== 0),\r\n\t\t\tdepthTest: (opacity !== 0)\r\n\t\t});\r\n\t}\r\n\tconst mesh = new THREE.Mesh(geometry, material);\r\n\treturn mesh;\r\n}\r\n\r\n/**\r\n * Creates a circle texture that slowly fills in when progress is made.\r\n * @param {number} size\r\n */\r\nexport function createLoadingIndicator(size = .5) {\r\n\tconst material = updateLoadingIndicator(0);\r\n\tconst geometry = new THREE.PlaneGeometry(size, size);\r\n\tconst mesh = new THREE.Mesh(geometry, material);\r\n\tmesh.renderOrder = 10;\r\n\treturn mesh;\r\n}\r\n\r\n/**\r\n * Fills in the loading indicator with the percentage between how much time has passed and the amount of time that needs to pass for something to happen.\r\n * @param {number} viewTime\r\n * @param {number} triggerDelay\r\n */\r\nexport function updateLoadingIndicator(viewTime, triggerDelay, color = '#FFFFFF') {\r\n\tif (!triggerDelay) {\r\n\t\ttriggerDelay = InteractionValues.TriggerDelay;\r\n\t}\r\n\tconst percentLoaded = viewTime / triggerDelay;\r\n\r\n\treturn new THREE.MeshBasicMaterial({\r\n\t\tcolor: color,\r\n\t\tside: THREE.DoubleSide,\r\n\t\tmap: createCircleTexture(color, 50, percentLoaded),\r\n\t\ttransparent: true,\r\n\t\topacity: .75,\r\n\t});\r\n}\r\n\r\n/**\r\n * Generates a texture of an outlined colored circle that it as completed as the percent filled parameter\r\n * @param {any} color\r\n * @param {any} strokeWidth\r\n * @param {any} percentFilled\r\n */\r\nexport function createCircleTexture(color, strokeWidth, percentFilled) {\r\n\t//canvas textures are rendered as 256 x 256, any larger and it'll throw a warning and auto-scale it down\r\n\tconst textureMaxSize = 256;\r\n\t//when drawing the circle, space is needed between the end of the circle and the end of the box that the texture is in\r\n\t//otherwise, the it'll look like a little squished as it runs out of room\r\n\tconst bufferSpace = 5;\r\n\r\n\tconst matCanvas = document.createElement('canvas');\r\n\tmatCanvas.width = matCanvas.height = textureMaxSize;\r\n\r\n\tconst matContext = matCanvas.getContext('2d');\r\n\tmatContext.lineWidth = strokeWidth;\r\n\tmatContext.strokeStyle = color;\r\n\r\n\tconst texture = new THREE.Texture(matCanvas);\r\n\tconst circleSize = textureMaxSize - strokeWidth - bufferSpace;\r\n\tconst center = textureMaxSize / 2;\r\n\tmatContext.beginPath();\r\n\t//5th parameter here deals with how far the arc is drawn, and since 2π radians = 360 degree, we use the percent to control how much of the circle we draw\r\n\tmatContext.arc(center, center, circleSize / 2, 0, percentFilled * 2 * Math.PI, false);\r\n\r\n\tif (percentFilled >= 1) {\r\n\t\tmatContext.closePath();\r\n\t}\r\n\r\n\tmatContext.stroke();\r\n\ttexture.needsUpdate = true;\r\n\treturn texture;\r\n}\r\n\r\n/**\r\n* Deletes the object by disposing of its parts\r\n* @param {any} object\r\n*/\r\nexport function deleteObject(object) {\r\n\tif (!(object instanceof THREE.Object3D)) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\t// for better memory management and performance, dispose of the individual parts\r\n\tif (object.geometry) {\r\n\t\tobject.geometry.dispose();\r\n\t}\r\n\r\n\tif (object.material) {\r\n\t\tif (object.material instanceof Array) {\r\n\t\t\tobject.material.forEach(material => material.dispose());\r\n\t\t} else {\r\n\t\t\tobject.material.dispose();\r\n\t\t}\r\n\t}\r\n\t\r\n\treturn true;\r\n}\r\n\r\n/**\r\n * Creates a mesh based upon the canvas (which should have text written on its context)\r\n * and sizes it based upon the provided dimensions.\r\n * @param {HTMLCanvasElement} canvas\r\n * @param {number} width\r\n * @param {number} height\r\n * @param {string} textColor\r\n */\r\nfunction createTextMesh(canvas, width, height, textColor) {\r\n\tconst texture = new THREE.Texture(canvas);\r\n\ttexture.needsUpdate = true;\r\n\r\n\tconst material = new THREE.MeshBasicMaterial({\r\n\t\tcolor: textColor,\r\n\t\tside: THREE.DoubleSide,\r\n\t\tmap: texture,\r\n\t\ttransparent: true,\r\n\t\tdepthWrite: false,\r\n\t\tdepthTest: false\r\n\t});\r\n\r\n\tconst geometry = new THREE.PlaneGeometry(\r\n\t\t(height * width) / DefaultSizing.Scale,\r\n\t\theight\r\n\t);\r\n\r\n\tconst plane = new THREE.Mesh(geometry, material);\r\n\treturn plane;\r\n}\r\n\r\n/**\r\n * Creates a half circle based upon size and color. Most useful for creating rounded edges\r\n * @param {any} size\r\n * @param {any} color\r\n */\r\nfunction createHalfCircle(size, color) {\r\n\treturn new THREE.Mesh(\r\n\t\tnew THREE.CircleGeometry(size / 2, 90, 0, Math.PI), //CircleGeometry uses radius, not diameter, so we need to divide by 2 to get it to be the same height as a plane geometry\r\n\t\tnew THREE.MeshBasicMaterial({\r\n\t\t\tcolor: color\r\n\t\t})\r\n\t);\r\n}\r\n\r\n/**\r\n * Updates the provided context with the provided formatting and renders the message onto the context.\r\n * @param {CanvasRenderingContext2D} context\r\n * @param {string} message\r\n * @param {number} width\r\n * @param {string} textColor\r\n * @param {string} font\r\n */\r\nfunction renderMessage(context, message, width, textColor, font, outlineColor) {\r\n\tcontext.font = font;\r\n\tcontext.textAlign = 'center';\r\n\tcontext.textBaseline = 'middle';\r\n\r\n\tif (outlineColor) {\r\n\t\tcontext.strokeStyle = outlineColor;\r\n\t\tcontext.lineWidth = 1;\r\n\t\tcontext.strokeText(message, width / 2, DefaultSizing.Scale / 2);\r\n\t}\r\n\r\n\tcontext.fillStyle = textColor;\r\n\tcontext.fillText(message, width / 2, DefaultSizing.Scale / 2);\r\n}\r\n","export const TriggerEffects = Object.freeze({\r\n    Hotspot: 'Hotspot',\r\n    Pager: 'Pager',\r\n    Presentation: 'Presentation',\r\n    Play: 'Play',\r\n    Pause: 'Pause',\r\n    Restart: 'Restart',\r\n    Next: 'Next',\r\n    Previous: 'Previous',\r\n    Home: 'Home',\r\n    Custom: 'Custom'\r\n});\r\n\r\nexport const HoverEffects = Object.freeze({\r\n    Scale: 'Scale',\r\n    BorderScale: 'BorderScale',\r\n    PauseCountdown: 'PauseCountdown',\r\n    Custom: 'Custom'\r\n});\r\n\r\nexport const UIPieces = Object.freeze({\r\n    Border: 'Border',\r\n    Close: 'Close',\r\n    Title: 'Title'\r\n});\r\n\r\nexport const DefaultSizing = Object.freeze({\r\n    Height: 1, //how tall the text is, width is based upon the message\r\n    Scale: 100, //the higher the scale, the more crisp text will look\r\n    TextOffset: .1,  //we can't have text/icons with the same 'z' position, since that clips into each other\r\n    Distance: 10, //the distance for something to be easily read. Anything closer and it becomes harder to read\r\n});\r\n\r\nexport const InteractionValues = Object.freeze({\r\n    VideoSphereRadius: 256, //pulled from the xr plugin code\r\n    TriggerDelay: 2000 //how long it takes before gazing with something interacts with it\r\n});","let _playerColor = \"#ED8B00\";\r\nlet _backgroundColor = \"#262626\";\r\nlet _textColor = \"#FFFFFF\";\r\nlet _font = \"Arial\";\r\n\r\nexport function setPlayerColors() {\r\n\tconst playerSelector = document.querySelector(\".mediasite-player\");\r\n\r\n\tif (playerSelector) {\r\n\t\tconst playerStyle = getComputedStyle(playerSelector);\r\n\t\tplayerColor(playerStyle.getPropertyValue('--player-primary-color').trim());\r\n\t}\r\n\r\n\tconst modalSelector = document.querySelector(\".video-js .mediasite-player__modal-dialog\");\r\n\r\n\tif (modalSelector) {\r\n\t\tconst modalStyle = getComputedStyle(modalSelector);\r\n\t\tbackgroundColor(this, modalStyle.getPropertyValue('--modal-dialog-bg-color').trim());\r\n\t\ttextColor(this, modalStyle.getPropertyValue('--modal-dialog-fg-color').trim());\r\n\t}\r\n}\r\n\r\n/**\r\n* Updates the primary color from the player or returns the current saved value for the player\r\n* @param {string} playerColor\r\n* @return {string}\r\n*/\r\nexport function playerColor(playerColor) {\r\n\tif (playerColor) {\r\n\t\t_playerColor = playerColor;\r\n\t} else {\r\n\t\treturn _playerColor;\r\n\t}\t\r\n}\r\n\r\n/**\r\n* Updates the background color from the player or returns the current saved background value for the player\r\n* @param {string} backgroundColor\r\n* @return {string}\r\n*/\r\nexport function backgroundColor(backgroundColor) {\r\n\tif (backgroundColor) {\r\n\t\t_backgroundColor = backgroundColor;\r\n\t} else {\r\n\t\treturn _backgroundColor;\r\n\t}\r\n}\r\n\r\n/**\r\n* Updates the text color from the player or returns the current saved value for the player\r\n* @param {string} textColor\r\n* @return {string}\r\n*/\r\nexport function textColor(textColor) {\r\n\tif (textColor) {\r\n\t\t_textColor = textColor;\r\n\t} else {\r\n\t\treturn _textColor;\r\n\t}\r\n}\r\n\r\n/**\r\n* Updates the font or returns the saved font value\r\n* @param {string} font\r\n* @return {string}\r\n*/\r\nexport function font(font) {\r\n\tif (font) {\r\n\t\t_font = font;\r\n\t} else {\r\n\t\treturn _font;\r\n\t}\r\n}","import { Path } from '../api/config.js';\r\nimport { PlayerPresentationStatus } from '../api/presentation.js';\r\n\r\nlet playerOptionsRequests = {};\r\n\r\n/**\r\n * Returns a Promise that resolves to a collection of data from GetPlayerOptions.\r\n * @param {string} resourceId\r\n * @returns {Promise<Object>}\r\n */\r\nexport function getPlayerOptions(resourceId) {\r\n    if (!playerOptionsRequests[resourceId]) {\r\n        let urlReferrer = null;\r\n        if (window.self != window.top) {\r\n            try {\r\n                let containerUrl = window.parent.document.location.href;\r\n                if (containerUrl) urlReferrer = containerUrl;\r\n            } catch { }\r\n        }\r\n        playerOptionsRequests[resourceId] = fetch(`${Path.PlayerService}/GetPlayerOptions`, {\r\n            method: 'POST',\r\n            headers: { 'Content-Type': 'application/json' },\r\n            mode: 'cors',\r\n            body: JSON.stringify({\r\n                \"getPlayerOptionsRequest\": {\r\n                    \"QueryString\": location.search,\r\n                    \"ResourceId\": resourceId,\r\n                    \"UrlReferrer\": urlReferrer\r\n                }\r\n            })\r\n        }).then(result => result.json().then(jsonData => {\r\n            if (!result.ok) {\r\n                throw Error(jsonData?.Message);\r\n            }\r\n            if (jsonData.d.PlayerPresentationStatus === PlayerPresentationStatus.NotAuthorized ||\r\n                jsonData.d.PlayerPresentationStatus === PlayerPresentationStatus.NotYetAvailable ||\r\n                jsonData.d.PlayerPresentationStatus === PlayerPresentationStatus.NotFound) {\r\n                throw Error(jsonData.d.PlayerPresentationStatusMessage);\r\n            } else if (jsonData.d.PlayerPresentationStatus === PlayerPresentationStatus.Viewable) {\r\n                delete playerOptionsRequests[resourceId];\r\n                return jsonData;\r\n            }\r\n            else if (jsonData.d.LoginUrl) {\r\n                window.location = `${jsonData.d.LoginUrl}?ReturnUrl=${encodeURIComponent(window.location)}`\r\n                return new Promise();\r\n            }\r\n        }));\r\n    }\r\n    return playerOptionsRequests[resourceId];\r\n}\r\n\r\n/**\r\n * Todo: modernize GetPlayerOptions\r\n * \r\n * The GetPlayerOptions API returns a large JSON object with many properties to sift through. As\r\n * a result, it's rather unweildly because it contains a lot of information we don't always need.\r\n * \r\n * It also returns different data structures depending on a few server-side conditions, so the\r\n * JSON response object doesn't necessarily always have the same set of properties.\r\n * \r\n * The various functions in src/api/ use this helper to to request data from GetPlayerOptions with less boilerplate.\r\n * They should ultimately be updated to get their data from actual specialized API endpoints once they\r\n * are developed.\r\n * \r\n */\r\n","/**\r\n * @param {string} resourceId\r\n */\r\nexport function isPresentationId(resourceId) {\r\n    return typeof resourceId === \"string\" && /[0-9A-F]{32,32}1d/i.test(resourceId);\r\n}\r\n","import videojs from 'video.js';\r\n\r\n//import 'MEDIASITE/Server/Player/Player/Javascript/Scripts/babelfish.js'; // imports BabelFish to window.BabelFish\r\n\r\n// Bundle and register all Video.js languages\r\nfunction importAll(r) {\r\n    r.keys().forEach(r);\r\n}\r\n\r\nimportAll(require.context('video.js/dist/lang/', true, /\\.js$/));\r\n\r\nconst LocalizedDictionary = window.SiteData?.LocalizedDictionary ?? window.LocalizedStrings ?? [];\r\nconst Culture = (window.SiteData ?? window.ApplicationData?.SiteData)?.Culture;\r\n\r\n// Set up BabelFish.js for SOFO-specific translations\r\n/*const babelFish = new window.BabelFish({\r\n    dictionary: LocalizedDictionary\r\n});*/\r\n\r\n// Add SOFO translations into Video.js\r\nvideojs.addLanguage(Culture, Object.fromEntries(LocalizedDictionary.map(item => {\r\n    return [item.text, item.translation];\r\n})));\r\n\r\n/**\r\n * \r\n * @param {...any} args\r\n * @returns {string}\r\n */\r\n/*export function translate(...args) {\r\n    return babelFish.translate(...args);\r\n}*/\r\n\r\n/**\r\n * @returns {string}\r\n */\r\nexport function getCurrentLanguage() {\r\n    //return Culture?.split('-')?.[0] ?? 'en';\r\n    return Culture;\r\n}\r\n\r\nconst replaceRegex = /%%\\d*%%/;\r\nexport function replacePlaceholders(templateString, ...rest) {\r\n    return rest.reduce((previous, current) => (\r\n        previous.replace(replaceRegex, current)\r\n    ), templateString);\r\n}","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/getUrl.js\";\nimport ___CSS_LOADER_URL_IMPORT_0___ from \"../assets/images/close-x-black.svg\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".video-js .mediasite-player__modal-dialog {\\r\\n    --modal-dialog-fg-color: #fff;\\r\\n    --modal-dialog-bg-color: #222;\\r\\n    --close-button-icon-size: 25px;\\r\\n    --modal-dialog-width: 600px;\\r\\n    background-color: rgba(0, 0, 0, .75);\\r\\n    animation: .2s modal-surface-enter ease-out;\\r\\n    font-size: 1.25em;\\r\\n    overflow: hidden;\\r\\n    z-index: var(--modal-dialog-z-index);\\r\\n    color: var(--modal-dialog-fg-color);\\r\\n}\\r\\n\\r\\n.video-js .mediasite-player__modal-dialog.mediasite-player__modal-dialog---show-controls {\\r\\n    height: calc(100% - var(--control-bar-height));\\r\\n}\\r\\n\\r\\n.video-js:is(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .mediasite-player__modal-dialog--panel {\\r\\n    grid-area: sidebar;\\r\\n    z-index: var(--modal-dialog-panel-z-index);\\r\\n    height: calc(100% - var(--control-bar-height));\\r\\n}\\r\\n\\r\\n.video-js:is(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .mediasite-player__modal-dialog--panel.mediasite-player__modal-dialog--solid-background {\\r\\n    background: var(--modal-dialog-bg-color);\\r\\n    transition: background-color .1s ease;\\r\\n}\\r\\n\\r\\n@media (pointer: coarse) {\\r\\n    .video-js:is(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .mediasite-player__modal-dialog--panel {\\r\\n        padding-bottom: 1em;\\r\\n    }\\r\\n}\\r\\n\\r\\n.mediasite-player__modal-dialog :is(h1, h2, h3, h4, h5, h6) {\\r\\n    font-weight: 300;\\r\\n}\\r\\n\\r\\n.mediasite-player__modal-dialog :where(textarea, input:not([type=\\\"submit\\\"]):not([type=\\\"checkbox\\\"]):not([type=\\\"radio\\\"])) {\\r\\n    width: 100%;\\r\\n}\\r\\n\\r\\n.mediasite-player__modal-dialog :where(input, textarea, fieldset) {\\r\\n    transition: background-color .1s ease, color .1s ease, border-color .1s ease;\\r\\n    border: 1px solid #999;\\r\\n    background-color: var(--modal-dialog-bg-color);\\r\\n}\\r\\n\\r\\n/*disabled light theming for the time being, as there is a discussion about themeing in the player and designs are made only in dark theme \\r\\n@media screen and (prefers-color-scheme: light) {\\r\\n    .video-js .mediasite-player__modal-dialog {\\r\\n        --modal-dialog-fg-color: #333;\\r\\n        --modal-dialog-bg-color: #fff;\\r\\n    }\\r\\n\\r\\n    .mediasite-player__modal-dialog :where(input, textarea, fieldset) {\\r\\n        color: inherit;\\r\\n        border: 1px solid currentcolor;\\r\\n    }\\r\\n}*/\\r\\n\\r\\n.video-js .mediasite-player__modal-dialog--exiting {\\r\\n    animation: .075s modal-surface-exit ease-in;\\r\\n    animation-fill-mode: forwards;\\r\\n    display: block !important;\\r\\n}\\r\\n\\r\\n.video-js .mediasite-player__modal-dialog--exiting .vjs-modal-dialog-content {\\r\\n    animation: .05s modal-content-exit ease-in;\\r\\n    animation-fill-mode: forwards;\\r\\n}\\r\\n\\r\\n.mediasite-player__modal-dialog .vjs-modal-dialog-content {\\r\\n    width: var(--modal-dialog-width);\\r\\n    max-width: 100%;\\r\\n    margin: 0 auto;\\r\\n    position: static;\\r\\n    overflow-y: auto;\\r\\n    animation: .2s modal-content-enter ease-out;\\r\\n}\\r\\n\\r\\n.mediasite-player__modal-dialog.mediasite-player__modal-dialog--solid-background .vjs-modal-dialog-content {\\r\\n    color: var(--modal-dialog-fg-color);\\r\\n    background-color: var(--modal-dialog-bg-color);\\r\\n    transition: background-color .1s ease, color .1s ease;\\r\\n}\\r\\n\\r\\n.mediasite-player__modal-dialog .vjs-modal-dialog-content > :last-child:not(.mediasite-player__overlay) {\\r\\n    padding-bottom: 2em;\\r\\n}\\r\\n\\r\\n.mediasite-player__modal-dialog a[href] {\\r\\n    color: inherit;\\r\\n}\\r\\n\\r\\n/* Error Display Specfic CSS*/\\r\\n.mediasite-player .vjs-error-display.vjs-modal-dialog {\\r\\n    display: flex;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-error-display .vjs-modal-dialog-content {\\r\\n    display: flex;\\r\\n    align-items: center;\\r\\n    height: auto;\\r\\n    background-color: var(--modal-dialog-bg-color);\\r\\n    border-radius: 0.25em;\\r\\n    font-size: 2em;\\r\\n    padding: 50px;\\r\\n    margin: auto;\\r\\n}\\r\\n\\r\\n/*When quizzing is embedded the quiz nav bar covers the close button*/\\r\\n.has-quizzes .mediasite-player__modal-dialog.mediasite-player__show-message-modal .vjs-close-button,\\r\\n.has-quizzes .mediasite-player__modal-dialog.mediasite-player__pre-roll-message-modal .vjs-close-button {\\r\\n    margin-top: 50px;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-control.vjs-close-button {\\r\\n    --close-button-icon-size: 25px;\\r\\n    width: var(--close-button-icon-size);\\r\\n    height: var(--close-button-icon-size);\\r\\n    top: var(--close-button-icon-size);\\r\\n    right: calc(15px + .5em);\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-control.vjs-close-button .vjs-icon-placeholder::before {\\r\\n    content: \\\"\\\";\\r\\n    font-size: 18px;\\r\\n    background-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");\\r\\n    filter: invert(100%) sepia(20%) saturate(176%) hue-rotate(193deg) brightness(110%) contrast(95%); /*filter to change the fill to #F9F9F9*/\\r\\n    background-position: center;\\r\\n    background-repeat: no-repeat;\\r\\n    width: var(--close-button-icon-size);\\r\\n    height: var(--close-button-icon-size);\\r\\n    top: calc(100% - var(--close-button-icon-size));\\r\\n    left: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-control.vjs-close-button:hover .vjs-icon-placeholder::before,\\r\\n.mediasite-player .vjs-control.vjs-close-button:focus .vjs-icon-placeholder::before {\\r\\n    transform: scale(1.2);\\r\\n    filter: invert(92%) sepia(5%) saturate(28%) hue-rotate(202deg) brightness(104%) contrast(93%); /*filter to change the fill to #EFEFF0*/\\r\\n}\\r\\n\\r\\n/*disabled light theming for the time being, as there is a discussion about themeing in the player and designs are made only in dark theme */\\r\\n/*filter to change the fill to #25282A\\r\\n@media screen and (prefers-color-scheme: light) {\\r\\n    .mediasite-player .vjs-control.vjs-close-button .vjs-icon-placeholder::before {\\r\\n        filter: invert(11%) sepia(5%) saturate(827%) hue-rotate(161deg) brightness(98%) contrast(89%);         \\r\\n    }\\r\\n}*/\\r\\n\\r\\n/*Fix for overlapping quiz information on mobile*/\\r\\n.video-js .mediasite-player__control-bar-modal {\\r\\n    grid-area: video;\\r\\n}\\r\\n\\r\\n.video-js .mediasite-player__control-bar-modal .vjs-modal-dialog-content {\\r\\n    width: 1200px;\\r\\n    /*Fix issue where close button would overlap with interactables in setting modals*/\\r\\n    padding-right: calc(24px + var(--close-button-icon-size) + .5em);\\r\\n}\\r\\n\\r\\n/* Shared CSS for the modals within the 'learn more' area of the control bar */\\r\\n.mediasite-player__control-bar-modal .vjs-modal-dialog-content h2 {\\r\\n    margin-top: 0;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog-content .time-fieldset {\\r\\n    display: flex;\\r\\n    border: 0;\\r\\n    padding: .5em 0;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog-content .time-fieldset span {\\r\\n    padding: 0 .5em;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog-content .time-fieldset input:is([name=time]) {\\r\\n    width: auto;\\r\\n    margin: 0;\\r\\n    border: 0;\\r\\n    font-size: 1em;\\r\\n    padding: 0 2px 1px;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog-content .time-fieldset input[name=time][required] {\\r\\n    color: white;\\r\\n    accent-color: var( --player-light-gray);\\r\\n    border-bottom: 1px solid var(--modal-dialog-fg-color);\\r\\n    padding-top: 1px; /* to balance out the 1px gained on the bottom */\\r\\n    width: 60px;\\r\\n}\\r\\n\\r\\n@media (max-width: 500px) {\\r\\n    .mediasite-player__control-bar-modal .vjs-modal-dialog-content h2 {\\r\\n        padding-right: 25px;\\r\\n    }\\r\\n}\\r\\n\\r\\n@keyframes modal-surface-enter {\\r\\n    from {\\r\\n        opacity: 0;\\r\\n    }\\r\\n\\r\\n    to {\\r\\n        opacity: 1;\\r\\n    }\\r\\n}\\r\\n\\r\\n@keyframes modal-content-enter {\\r\\n    from {\\r\\n        transform: translateY(2em);\\r\\n    }\\r\\n\\r\\n    to {\\r\\n        transform: translateY(0);\\r\\n    }\\r\\n}\\r\\n\\r\\n@keyframes modal-surface-exit {\\r\\n    from {\\r\\n        opacity: 1;\\r\\n    }\\r\\n\\r\\n    to {\\r\\n        opacity: 0;\\r\\n    }\\r\\n}\\r\\n\\r\\n@keyframes modal-content-exit {\\r\\n    from {\\r\\n        transform: translateY(0);\\r\\n    }\\r\\n\\r\\n    to {\\r\\n        transform: translateY(2em);\\r\\n    }\\r\\n}\\r\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/components/modal-dialog.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,6BAA6B;IAC7B,6BAA6B;IAC7B,8BAA8B;IAC9B,2BAA2B;IAC3B,oCAAoC;IACpC,2CAA2C;IAC3C,iBAAiB;IACjB,gBAAgB;IAChB,oCAAoC;IACpC,mCAAmC;AACvC;;AAEA;IACI,8CAA8C;AAClD;;AAEA;IACI,kBAAkB;IAClB,0CAA0C;IAC1C,8CAA8C;AAClD;;AAEA;IACI,wCAAwC;IACxC,qCAAqC;AACzC;;AAEA;IACI;QACI,mBAAmB;IACvB;AACJ;;AAEA;IACI,gBAAgB;AACpB;;AAEA;IACI,WAAW;AACf;;AAEA;IACI,4EAA4E;IAC5E,sBAAsB;IACtB,8CAA8C;AAClD;;AAEA;;;;;;;;;;;EAWE;;AAEF;IACI,2CAA2C;IAC3C,6BAA6B;IAC7B,yBAAyB;AAC7B;;AAEA;IACI,0CAA0C;IAC1C,6BAA6B;AACjC;;AAEA;IACI,gCAAgC;IAChC,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAChB,2CAA2C;AAC/C;;AAEA;IACI,mCAAmC;IACnC,8CAA8C;IAC9C,qDAAqD;AACzD;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,cAAc;AAClB;;AAEA,6BAA6B;AAC7B;IACI,aAAa;AACjB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,YAAY;IACZ,8CAA8C;IAC9C,qBAAqB;IACrB,cAAc;IACd,aAAa;IACb,YAAY;AAChB;;AAEA,qEAAqE;AACrE;;IAEI,gBAAgB;AACpB;;AAEA;IACI,8BAA8B;IAC9B,oCAAoC;IACpC,qCAAqC;IACrC,kCAAkC;IAClC,wBAAwB;AAC5B;;AAEA;IACI,WAAW;IACX,eAAe;IACf,yDAA2D;IAC3D,gGAAgG,EAAE,uCAAuC;IACzI,2BAA2B;IAC3B,4BAA4B;IAC5B,oCAAoC;IACpC,qCAAqC;IACrC,+CAA+C;IAC/C,OAAO;AACX;;AAEA;;IAEI,qBAAqB;IACrB,6FAA6F,EAAE,uCAAuC;AAC1I;;AAEA,4IAA4I;AAC5I;;;;;EAKE;;AAEF,iDAAiD;AACjD;IACI,gBAAgB;AACpB;;AAEA;IACI,aAAa;IACb,kFAAkF;IAClF,gEAAgE;AACpE;;AAEA,8EAA8E;AAC9E;IACI,aAAa;AACjB;;AAEA;IACI,aAAa;IACb,SAAS;IACT,eAAe;AACnB;;AAEA;IACI,eAAe;AACnB;;AAEA;IACI,WAAW;IACX,SAAS;IACT,SAAS;IACT,cAAc;IACd,kBAAkB;AACtB;;AAEA;IACI,YAAY;IACZ,uCAAuC;IACvC,qDAAqD;IACrD,gBAAgB,EAAE,gDAAgD;IAClE,WAAW;AACf;;AAEA;IACI;QACI,mBAAmB;IACvB;AACJ;;AAEA;IACI;QACI,UAAU;IACd;;IAEA;QACI,UAAU;IACd;AACJ;;AAEA;IACI;QACI,0BAA0B;IAC9B;;IAEA;QACI,wBAAwB;IAC5B;AACJ;;AAEA;IACI;QACI,UAAU;IACd;;IAEA;QACI,UAAU;IACd;AACJ;;AAEA;IACI;QACI,wBAAwB;IAC5B;;IAEA;QACI,0BAA0B;IAC9B;AACJ\",\"sourcesContent\":[\".video-js .mediasite-player__modal-dialog {\\r\\n    --modal-dialog-fg-color: #fff;\\r\\n    --modal-dialog-bg-color: #222;\\r\\n    --close-button-icon-size: 25px;\\r\\n    --modal-dialog-width: 600px;\\r\\n    background-color: rgba(0, 0, 0, .75);\\r\\n    animation: .2s modal-surface-enter ease-out;\\r\\n    font-size: 1.25em;\\r\\n    overflow: hidden;\\r\\n    z-index: var(--modal-dialog-z-index);\\r\\n    color: var(--modal-dialog-fg-color);\\r\\n}\\r\\n\\r\\n.video-js .mediasite-player__modal-dialog.mediasite-player__modal-dialog---show-controls {\\r\\n    height: calc(100% - var(--control-bar-height));\\r\\n}\\r\\n\\r\\n.video-js:is(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .mediasite-player__modal-dialog--panel {\\r\\n    grid-area: sidebar;\\r\\n    z-index: var(--modal-dialog-panel-z-index);\\r\\n    height: calc(100% - var(--control-bar-height));\\r\\n}\\r\\n\\r\\n.video-js:is(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .mediasite-player__modal-dialog--panel.mediasite-player__modal-dialog--solid-background {\\r\\n    background: var(--modal-dialog-bg-color);\\r\\n    transition: background-color .1s ease;\\r\\n}\\r\\n\\r\\n@media (pointer: coarse) {\\r\\n    .video-js:is(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .mediasite-player__modal-dialog--panel {\\r\\n        padding-bottom: 1em;\\r\\n    }\\r\\n}\\r\\n\\r\\n.mediasite-player__modal-dialog :is(h1, h2, h3, h4, h5, h6) {\\r\\n    font-weight: 300;\\r\\n}\\r\\n\\r\\n.mediasite-player__modal-dialog :where(textarea, input:not([type=\\\"submit\\\"]):not([type=\\\"checkbox\\\"]):not([type=\\\"radio\\\"])) {\\r\\n    width: 100%;\\r\\n}\\r\\n\\r\\n.mediasite-player__modal-dialog :where(input, textarea, fieldset) {\\r\\n    transition: background-color .1s ease, color .1s ease, border-color .1s ease;\\r\\n    border: 1px solid #999;\\r\\n    background-color: var(--modal-dialog-bg-color);\\r\\n}\\r\\n\\r\\n/*disabled light theming for the time being, as there is a discussion about themeing in the player and designs are made only in dark theme \\r\\n@media screen and (prefers-color-scheme: light) {\\r\\n    .video-js .mediasite-player__modal-dialog {\\r\\n        --modal-dialog-fg-color: #333;\\r\\n        --modal-dialog-bg-color: #fff;\\r\\n    }\\r\\n\\r\\n    .mediasite-player__modal-dialog :where(input, textarea, fieldset) {\\r\\n        color: inherit;\\r\\n        border: 1px solid currentcolor;\\r\\n    }\\r\\n}*/\\r\\n\\r\\n.video-js .mediasite-player__modal-dialog--exiting {\\r\\n    animation: .075s modal-surface-exit ease-in;\\r\\n    animation-fill-mode: forwards;\\r\\n    display: block !important;\\r\\n}\\r\\n\\r\\n.video-js .mediasite-player__modal-dialog--exiting .vjs-modal-dialog-content {\\r\\n    animation: .05s modal-content-exit ease-in;\\r\\n    animation-fill-mode: forwards;\\r\\n}\\r\\n\\r\\n.mediasite-player__modal-dialog .vjs-modal-dialog-content {\\r\\n    width: var(--modal-dialog-width);\\r\\n    max-width: 100%;\\r\\n    margin: 0 auto;\\r\\n    position: static;\\r\\n    overflow-y: auto;\\r\\n    animation: .2s modal-content-enter ease-out;\\r\\n}\\r\\n\\r\\n.mediasite-player__modal-dialog.mediasite-player__modal-dialog--solid-background .vjs-modal-dialog-content {\\r\\n    color: var(--modal-dialog-fg-color);\\r\\n    background-color: var(--modal-dialog-bg-color);\\r\\n    transition: background-color .1s ease, color .1s ease;\\r\\n}\\r\\n\\r\\n.mediasite-player__modal-dialog .vjs-modal-dialog-content > :last-child:not(.mediasite-player__overlay) {\\r\\n    padding-bottom: 2em;\\r\\n}\\r\\n\\r\\n.mediasite-player__modal-dialog a[href] {\\r\\n    color: inherit;\\r\\n}\\r\\n\\r\\n/* Error Display Specfic CSS*/\\r\\n.mediasite-player .vjs-error-display.vjs-modal-dialog {\\r\\n    display: flex;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-error-display .vjs-modal-dialog-content {\\r\\n    display: flex;\\r\\n    align-items: center;\\r\\n    height: auto;\\r\\n    background-color: var(--modal-dialog-bg-color);\\r\\n    border-radius: 0.25em;\\r\\n    font-size: 2em;\\r\\n    padding: 50px;\\r\\n    margin: auto;\\r\\n}\\r\\n\\r\\n/*When quizzing is embedded the quiz nav bar covers the close button*/\\r\\n.has-quizzes .mediasite-player__modal-dialog.mediasite-player__show-message-modal .vjs-close-button,\\r\\n.has-quizzes .mediasite-player__modal-dialog.mediasite-player__pre-roll-message-modal .vjs-close-button {\\r\\n    margin-top: 50px;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-control.vjs-close-button {\\r\\n    --close-button-icon-size: 25px;\\r\\n    width: var(--close-button-icon-size);\\r\\n    height: var(--close-button-icon-size);\\r\\n    top: var(--close-button-icon-size);\\r\\n    right: calc(15px + .5em);\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-control.vjs-close-button .vjs-icon-placeholder::before {\\r\\n    content: \\\"\\\";\\r\\n    font-size: 18px;\\r\\n    background-image: url(\\\"../assets/images/close-x-black.svg\\\");\\r\\n    filter: invert(100%) sepia(20%) saturate(176%) hue-rotate(193deg) brightness(110%) contrast(95%); /*filter to change the fill to #F9F9F9*/\\r\\n    background-position: center;\\r\\n    background-repeat: no-repeat;\\r\\n    width: var(--close-button-icon-size);\\r\\n    height: var(--close-button-icon-size);\\r\\n    top: calc(100% - var(--close-button-icon-size));\\r\\n    left: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-control.vjs-close-button:hover .vjs-icon-placeholder::before,\\r\\n.mediasite-player .vjs-control.vjs-close-button:focus .vjs-icon-placeholder::before {\\r\\n    transform: scale(1.2);\\r\\n    filter: invert(92%) sepia(5%) saturate(28%) hue-rotate(202deg) brightness(104%) contrast(93%); /*filter to change the fill to #EFEFF0*/\\r\\n}\\r\\n\\r\\n/*disabled light theming for the time being, as there is a discussion about themeing in the player and designs are made only in dark theme */\\r\\n/*filter to change the fill to #25282A\\r\\n@media screen and (prefers-color-scheme: light) {\\r\\n    .mediasite-player .vjs-control.vjs-close-button .vjs-icon-placeholder::before {\\r\\n        filter: invert(11%) sepia(5%) saturate(827%) hue-rotate(161deg) brightness(98%) contrast(89%);         \\r\\n    }\\r\\n}*/\\r\\n\\r\\n/*Fix for overlapping quiz information on mobile*/\\r\\n.video-js .mediasite-player__control-bar-modal {\\r\\n    grid-area: video;\\r\\n}\\r\\n\\r\\n.video-js .mediasite-player__control-bar-modal .vjs-modal-dialog-content {\\r\\n    width: 1200px;\\r\\n    /*Fix issue where close button would overlap with interactables in setting modals*/\\r\\n    padding-right: calc(24px + var(--close-button-icon-size) + .5em);\\r\\n}\\r\\n\\r\\n/* Shared CSS for the modals within the 'learn more' area of the control bar */\\r\\n.mediasite-player__control-bar-modal .vjs-modal-dialog-content h2 {\\r\\n    margin-top: 0;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog-content .time-fieldset {\\r\\n    display: flex;\\r\\n    border: 0;\\r\\n    padding: .5em 0;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog-content .time-fieldset span {\\r\\n    padding: 0 .5em;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog-content .time-fieldset input:is([name=time]) {\\r\\n    width: auto;\\r\\n    margin: 0;\\r\\n    border: 0;\\r\\n    font-size: 1em;\\r\\n    padding: 0 2px 1px;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog-content .time-fieldset input[name=time][required] {\\r\\n    color: white;\\r\\n    accent-color: var( --player-light-gray);\\r\\n    border-bottom: 1px solid var(--modal-dialog-fg-color);\\r\\n    padding-top: 1px; /* to balance out the 1px gained on the bottom */\\r\\n    width: 60px;\\r\\n}\\r\\n\\r\\n@media (max-width: 500px) {\\r\\n    .mediasite-player__control-bar-modal .vjs-modal-dialog-content h2 {\\r\\n        padding-right: 25px;\\r\\n    }\\r\\n}\\r\\n\\r\\n@keyframes modal-surface-enter {\\r\\n    from {\\r\\n        opacity: 0;\\r\\n    }\\r\\n\\r\\n    to {\\r\\n        opacity: 1;\\r\\n    }\\r\\n}\\r\\n\\r\\n@keyframes modal-content-enter {\\r\\n    from {\\r\\n        transform: translateY(2em);\\r\\n    }\\r\\n\\r\\n    to {\\r\\n        transform: translateY(0);\\r\\n    }\\r\\n}\\r\\n\\r\\n@keyframes modal-surface-exit {\\r\\n    from {\\r\\n        opacity: 1;\\r\\n    }\\r\\n\\r\\n    to {\\r\\n        opacity: 0;\\r\\n    }\\r\\n}\\r\\n\\r\\n@keyframes modal-content-exit {\\r\\n    from {\\r\\n        transform: translateY(0);\\r\\n    }\\r\\n\\r\\n    to {\\r\\n        transform: translateY(2em);\\r\\n    }\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \":root {\\r\\n    --mediasite-player-overlay-margin: .5em;\\r\\n}\\r\\n\\r\\n.video-js .mediasite-player__overlay {\\r\\n    position: absolute;\\r\\n}\\r\\n\\r\\n.mediasite-player__overlay {\\r\\n    color: #fff;\\r\\n    background-color: rgba(0, 0, 0, .75);\\r\\n    -webkit-backdrop-filter: blur(10px);\\r\\n            backdrop-filter: blur(10px);\\r\\n    padding: .5em .75em;\\r\\n    font-size: 1.25em;\\r\\n    line-height: 1.5;\\r\\n    border-radius: .25em;\\r\\n    width: -webkit-max-content;\\r\\n    width: max-content;\\r\\n    max-width: min(calc(100% - (2 * var(--mediasite-player-overlay-margin))), 600px);\\r\\n    transition: color .1s ease, background-color .1s ease;\\r\\n}\\r\\n\\r\\n/*disabled light theming for the time being, as there is a discussion about themeing in the player and designs are made only in dark theme \\r\\n@media screen and (prefers-color-scheme: light) {\\r\\n    .mediasite-player__overlay {\\r\\n        color: #333;\\r\\n        background-color: rgba(255, 255, 255, .75);\\r\\n    }\\r\\n}*/\\r\\n\\r\\n.mediasite-player__overlay--center {\\r\\n    top: 50%;\\r\\n    left: 50%;\\r\\n    transform: translate(-50%, -50%);\\r\\n    text-align: center;\\r\\n}\\r\\n\\r\\n.mediasite-player__overlay--top-left {\\r\\n    top: var(--mediasite-player-overlay-margin);\\r\\n    left: var(--mediasite-player-overlay-margin);\\r\\n}\\r\\n\\r\\n.mediasite-player__overlay--top-right {\\r\\n    top: var(--mediasite-player-overlay-margin);\\r\\n    right: var(--mediasite-player-overlay-margin);\\r\\n}\\r\\n\\r\\n.mediasite-player__overlay--bottom-left {\\r\\n    bottom: var(--mediasite-player-overlay-margin);\\r\\n    left: var(--mediasite-player-overlay-margin);\\r\\n}\\r\\n\\r\\n.mediasite-player__overlay--bottom-left {\\r\\n    bottom: var(--mediasite-player-overlay-margin);\\r\\n    right: var(--mediasite-player-overlay-margin);\\r\\n}\\r\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/components/overlay.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,uCAAuC;AAC3C;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,WAAW;IACX,oCAAoC;IACpC,mCAA2B;YAA3B,2BAA2B;IAC3B,mBAAmB;IACnB,iBAAiB;IACjB,gBAAgB;IAChB,oBAAoB;IACpB,0BAAkB;IAAlB,kBAAkB;IAClB,gFAAgF;IAChF,qDAAqD;AACzD;;AAEA;;;;;;EAME;;AAEF;IACI,QAAQ;IACR,SAAS;IACT,gCAAgC;IAChC,kBAAkB;AACtB;;AAEA;IACI,2CAA2C;IAC3C,4CAA4C;AAChD;;AAEA;IACI,2CAA2C;IAC3C,6CAA6C;AACjD;;AAEA;IACI,8CAA8C;IAC9C,4CAA4C;AAChD;;AAEA;IACI,8CAA8C;IAC9C,6CAA6C;AACjD\",\"sourcesContent\":[\":root {\\r\\n    --mediasite-player-overlay-margin: .5em;\\r\\n}\\r\\n\\r\\n.video-js .mediasite-player__overlay {\\r\\n    position: absolute;\\r\\n}\\r\\n\\r\\n.mediasite-player__overlay {\\r\\n    color: #fff;\\r\\n    background-color: rgba(0, 0, 0, .75);\\r\\n    backdrop-filter: blur(10px);\\r\\n    padding: .5em .75em;\\r\\n    font-size: 1.25em;\\r\\n    line-height: 1.5;\\r\\n    border-radius: .25em;\\r\\n    width: max-content;\\r\\n    max-width: min(calc(100% - (2 * var(--mediasite-player-overlay-margin))), 600px);\\r\\n    transition: color .1s ease, background-color .1s ease;\\r\\n}\\r\\n\\r\\n/*disabled light theming for the time being, as there is a discussion about themeing in the player and designs are made only in dark theme \\r\\n@media screen and (prefers-color-scheme: light) {\\r\\n    .mediasite-player__overlay {\\r\\n        color: #333;\\r\\n        background-color: rgba(255, 255, 255, .75);\\r\\n    }\\r\\n}*/\\r\\n\\r\\n.mediasite-player__overlay--center {\\r\\n    top: 50%;\\r\\n    left: 50%;\\r\\n    transform: translate(-50%, -50%);\\r\\n    text-align: center;\\r\\n}\\r\\n\\r\\n.mediasite-player__overlay--top-left {\\r\\n    top: var(--mediasite-player-overlay-margin);\\r\\n    left: var(--mediasite-player-overlay-margin);\\r\\n}\\r\\n\\r\\n.mediasite-player__overlay--top-right {\\r\\n    top: var(--mediasite-player-overlay-margin);\\r\\n    right: var(--mediasite-player-overlay-margin);\\r\\n}\\r\\n\\r\\n.mediasite-player__overlay--bottom-left {\\r\\n    bottom: var(--mediasite-player-overlay-margin);\\r\\n    left: var(--mediasite-player-overlay-margin);\\r\\n}\\r\\n\\r\\n.mediasite-player__overlay--bottom-left {\\r\\n    bottom: var(--mediasite-player-overlay-margin);\\r\\n    right: var(--mediasite-player-overlay-margin);\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".mediasite-player__custom-controlbar-button.mediasite-player__seek-button > .vjs-menu-button {\\r\\n    background-size: 2em;\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/components/seek-button.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,oBAAoB;AACxB\",\"sourcesContent\":[\".mediasite-player__custom-controlbar-button.mediasite-player__seek-button > .vjs-menu-button {\\r\\n    background-size: 2em;\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \":root {\\r\\n    background-color: #000;\\r\\n    overflow: hidden\\r\\n}\\r\\n\\r\\n.mediasite-standalone-player-container {\\r\\n    position: fixed;\\r\\n    top: 0;\\r\\n    left: 0;\\r\\n    width: 100%;\\r\\n    height: 100%;\\r\\n}\\r\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/implementations/player-page.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,sBAAsB;IACtB;AACJ;;AAEA;IACI,eAAe;IACf,MAAM;IACN,OAAO;IACP,WAAW;IACX,YAAY;AAChB\",\"sourcesContent\":[\":root {\\r\\n    background-color: #000;\\r\\n    overflow: hidden\\r\\n}\\r\\n\\r\\n.mediasite-standalone-player-container {\\r\\n    position: fixed;\\r\\n    top: 0;\\r\\n    left: 0;\\r\\n    width: 100%;\\r\\n    height: 100%;\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/* These CSS Changes are pulled from the design Storybook \\r\\n    https://enhance-develop.dev-vidable.com/storybook/index.html?path=/story/enhance-theme--buttons\\r\\n*/\\r\\n\\r\\n:root {\\r\\n    --player-primary-color: #ED8B00;\\r\\n    --player-primary-color-interact: #ffb750;\\r\\n    --player-gray: #525252;\\r\\n    --player-light-gray: #898D8D;\\r\\n    --player-green: #8BCC27;\\r\\n    --player-text-color-against-primary: #000000;\\r\\n    --player-text-color-against-interact: var(--player-text-color-against-primary);\\r\\n    --player-font-family-title: 'Gilroy', Verdana, sans-serif;\\r\\n    --player-font-family-default: 'proxima-nova', Verdana, sans-serif;\\r\\n}\\r\\n\\r\\nselect {\\r\\n    background-image: url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%23F9F9F9' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\\\");\\r\\n    background-position: right 0.5rem center;\\r\\n    background-repeat: no-repeat;\\r\\n    background-size: 1.5em 1.5em;\\r\\n    color: white;\\r\\n    padding-right: 2.5rem;\\r\\n    -webkit-print-color-adjust: exact;\\r\\n            color-adjust: exact;\\r\\n}\\r\\n\\r\\nlabel, legend {\\r\\n    display: block;\\r\\n    font-size: 0.875rem;\\r\\n    line-height: 1.25rem;\\r\\n    font-weight: 500;\\r\\n}\\r\\n\\r\\n[type=\\\"checkbox\\\"] {\\r\\n    -webkit-appearance: none;\\r\\n            appearance: none;\\r\\n    display: inline-block;\\r\\n    vertical-align: middle;\\r\\n    background-origin: border-box;\\r\\n    border-radius: 0.25rem;\\r\\n    border-width: 1px;\\r\\n    border-color: var(--player-primary-color);\\r\\n    background-color: var( --player-light-gray);\\r\\n    color: var(--player-primary-color);\\r\\n    accent-color: var(--modal-dialog-fg-color);\\r\\n    height: 1rem;\\r\\n    width: 1rem;\\r\\n    padding: 0;\\r\\n    transition-duration: 200ms;\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n[type=\\\"checkbox\\\"]:hover {\\r\\n    border-width: 2px;\\r\\n}\\r\\n\\r\\n[type=\\\"checkbox\\\"]:focus, [type=\\\"checkbox\\\"]:active {\\r\\n    outline: 2px solid transparent;\\r\\n    outline-offset: 2px;\\r\\n    box-shadow: var(--modal-dialog-fg-color) 0px 0px 0px 2px, \\r\\n        var(--player-primary-color) 0px 0px 0px 4px;\\r\\n}\\r\\n\\r\\n[type=\\\"checkbox\\\"]:checked {\\r\\n    background-image: url(\\\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\\\");\\r\\n    border-color: transparent;\\r\\n    background-color: currentColor;\\r\\n    background-size: 100% 100%;\\r\\n    background-position: center;\\r\\n    background-repeat: no-repeat;\\r\\n}\\r\\n\\r\\n[type='text'], [type='email'], [type='url'], [type='password'], [type='number'], [type='date'],\\r\\n[type='datetime-local'], [type='month'], [type='search'], [type='tel'], [type='time'],\\r\\n[name=\\\"name\\\"], [name=\\\"subject\\\"], [name=\\\"message\\\"],\\r\\n[type='week'], [multiple], textarea, select {\\r\\n    color: var(--modal-dialog-fg-color);\\r\\n    -webkit-appearance: none;\\r\\n            appearance: none;\\r\\n    border-width: 1px;\\r\\n    border-radius: 0px;\\r\\n    padding: .5rem .75rem;\\r\\n    font-size: 1rem;\\r\\n    line-height: 1.5rem;\\r\\n}\\r\\n\\r\\n@media (min-width: 640px) {\\r\\n    [type=\\\"text\\\"], [type=\\\"search\\\"], [type=\\\"password\\\"], [type=\\\"email\\\"],\\r\\n    [name=\\\"name\\\"], [name=\\\"subject\\\"], [name=\\\"message\\\"], select {\\r\\n        font-size: 0.875rem;\\r\\n        line-height: 1.25rem;\\r\\n    }\\r\\n}\\r\\n\\r\\n[type=\\\"text\\\"], [type=\\\"search\\\"], [type=\\\"password\\\"], [type=\\\"email\\\"],\\r\\n[name=\\\"name\\\"], [name=\\\"subject\\\"], [name=\\\"message\\\"], select {\\r\\n    display: block;\\r\\n    border-radius: 0.375rem;\\r\\n    --tw-border-opacity: 1;\\r\\n    border-color: rgb(137 141 141 / var(--tw-border-opacity));\\r\\n    --tw-bg-opacity: 1;\\r\\n    background-color: rgb(84 89 91 / var(--tw-bg-opacity));\\r\\n    transition-duration: 200ms;\\r\\n    accent-color: var(--player-light-gray);\\r\\n}\\r\\n\\r\\n.button-large {\\r\\n    padding: .75rem 1.5rem;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player .player-primary-button,\\r\\n.video-js.mediasite-player .player-outline-button {\\r\\n    border-width: 2px;\\r\\n    border-radius: 30px;\\r\\n    border-style: solid;\\r\\n    padding: .75em 2.75em;\\r\\n    font-size: 1em;\\r\\n    font-weight: 700;\\r\\n    font-family: var(--player-font-family-default);\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player .player-primary-button {\\r\\n    background-color: var(--player-primary-color);\\r\\n    color: var(--player-text-color-against-primary);\\r\\n    border-color: var(--player-primary-color);\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player .player-primary-button:hover,\\r\\n.video-js.mediasite-player .player-primary-button:focus {\\r\\n    background-color: var(--player-primary-color-interact);\\r\\n    color: var(--player-text-color-against-interact);\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player .player-outline-button {\\r\\n    color: var(--modal-dialog-fg-color);\\r\\n    background-color: transparent;\\r\\n    border-color: var(--player-primary-color);\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player .player-outline-button:hover,\\r\\n.video-js.mediasite-player .player-outline-button:focus {\\r\\n    background-color: var(--player-primary-color-interact);\\r\\n    color: var(--player-text-color-against-interact);\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player .player-primary-link {\\r\\n    color: var(--player-primary-color);\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player .player-primary-link:hover,\\r\\n.video-js.mediasite-player .player-primary-link:focus {\\r\\n    color: var(--player-primary-color-interact);\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/player-branding.css\"],\"names\":[],\"mappings\":\"AAAA;;CAEC;;AAED;IACI,+BAA+B;IAC/B,wCAAwC;IACxC,sBAAsB;IACtB,4BAA4B;IAC5B,uBAAuB;IACvB,4CAA4C;IAC5C,8EAA8E;IAC9E,yDAAyD;IACzD,iEAAiE;AACrE;;AAEA;IACI,mPAAmP;IACnP,wCAAwC;IACxC,4BAA4B;IAC5B,4BAA4B;IAC5B,YAAY;IACZ,qBAAqB;IACrB,iCAAmB;YAAnB,mBAAmB;AACvB;;AAEA;IACI,cAAc;IACd,mBAAmB;IACnB,oBAAoB;IACpB,gBAAgB;AACpB;;AAEA;IACI,wBAAgB;YAAhB,gBAAgB;IAChB,qBAAqB;IACrB,sBAAsB;IACtB,6BAA6B;IAC7B,sBAAsB;IACtB,iBAAiB;IACjB,yCAAyC;IACzC,2CAA2C;IAC3C,kCAAkC;IAClC,0CAA0C;IAC1C,YAAY;IACZ,WAAW;IACX,UAAU;IACV,0BAA0B;IAC1B,eAAe;AACnB;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,8BAA8B;IAC9B,mBAAmB;IACnB;mDAC+C;AACnD;;AAEA;IACI,sQAAsQ;IACtQ,yBAAyB;IACzB,8BAA8B;IAC9B,0BAA0B;IAC1B,2BAA2B;IAC3B,4BAA4B;AAChC;;AAEA;;;;IAII,mCAAmC;IACnC,wBAAgB;YAAhB,gBAAgB;IAChB,iBAAiB;IACjB,kBAAkB;IAClB,qBAAqB;IACrB,eAAe;IACf,mBAAmB;AACvB;;AAEA;IACI;;QAEI,mBAAmB;QACnB,oBAAoB;IACxB;AACJ;;AAEA;;IAEI,cAAc;IACd,uBAAuB;IACvB,sBAAsB;IACtB,yDAAyD;IACzD,kBAAkB;IAClB,sDAAsD;IACtD,0BAA0B;IAC1B,sCAAsC;AAC1C;;AAEA;IACI,sBAAsB;AAC1B;;AAEA;;IAEI,iBAAiB;IACjB,mBAAmB;IACnB,mBAAmB;IACnB,qBAAqB;IACrB,cAAc;IACd,gBAAgB;IAChB,8CAA8C;IAC9C,eAAe;AACnB;;AAEA;IACI,6CAA6C;IAC7C,+CAA+C;IAC/C,yCAAyC;AAC7C;;AAEA;;IAEI,sDAAsD;IACtD,gDAAgD;AACpD;;AAEA;IACI,mCAAmC;IACnC,6BAA6B;IAC7B,yCAAyC;AAC7C;;AAEA;;IAEI,sDAAsD;IACtD,gDAAgD;AACpD;;AAEA;IACI,kCAAkC;IAClC,eAAe;AACnB;;AAEA;;IAEI,2CAA2C;AAC/C\",\"sourcesContent\":[\"/* These CSS Changes are pulled from the design Storybook \\r\\n    https://enhance-develop.dev-vidable.com/storybook/index.html?path=/story/enhance-theme--buttons\\r\\n*/\\r\\n\\r\\n:root {\\r\\n    --player-primary-color: #ED8B00;\\r\\n    --player-primary-color-interact: #ffb750;\\r\\n    --player-gray: #525252;\\r\\n    --player-light-gray: #898D8D;\\r\\n    --player-green: #8BCC27;\\r\\n    --player-text-color-against-primary: #000000;\\r\\n    --player-text-color-against-interact: var(--player-text-color-against-primary);\\r\\n    --player-font-family-title: 'Gilroy', Verdana, sans-serif;\\r\\n    --player-font-family-default: 'proxima-nova', Verdana, sans-serif;\\r\\n}\\r\\n\\r\\nselect {\\r\\n    background-image: url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%23F9F9F9' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\\\");\\r\\n    background-position: right 0.5rem center;\\r\\n    background-repeat: no-repeat;\\r\\n    background-size: 1.5em 1.5em;\\r\\n    color: white;\\r\\n    padding-right: 2.5rem;\\r\\n    color-adjust: exact;\\r\\n}\\r\\n\\r\\nlabel, legend {\\r\\n    display: block;\\r\\n    font-size: 0.875rem;\\r\\n    line-height: 1.25rem;\\r\\n    font-weight: 500;\\r\\n}\\r\\n\\r\\n[type=\\\"checkbox\\\"] {\\r\\n    appearance: none;\\r\\n    display: inline-block;\\r\\n    vertical-align: middle;\\r\\n    background-origin: border-box;\\r\\n    border-radius: 0.25rem;\\r\\n    border-width: 1px;\\r\\n    border-color: var(--player-primary-color);\\r\\n    background-color: var( --player-light-gray);\\r\\n    color: var(--player-primary-color);\\r\\n    accent-color: var(--modal-dialog-fg-color);\\r\\n    height: 1rem;\\r\\n    width: 1rem;\\r\\n    padding: 0;\\r\\n    transition-duration: 200ms;\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n[type=\\\"checkbox\\\"]:hover {\\r\\n    border-width: 2px;\\r\\n}\\r\\n\\r\\n[type=\\\"checkbox\\\"]:focus, [type=\\\"checkbox\\\"]:active {\\r\\n    outline: 2px solid transparent;\\r\\n    outline-offset: 2px;\\r\\n    box-shadow: var(--modal-dialog-fg-color) 0px 0px 0px 2px, \\r\\n        var(--player-primary-color) 0px 0px 0px 4px;\\r\\n}\\r\\n\\r\\n[type=\\\"checkbox\\\"]:checked {\\r\\n    background-image: url(\\\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\\\");\\r\\n    border-color: transparent;\\r\\n    background-color: currentColor;\\r\\n    background-size: 100% 100%;\\r\\n    background-position: center;\\r\\n    background-repeat: no-repeat;\\r\\n}\\r\\n\\r\\n[type='text'], [type='email'], [type='url'], [type='password'], [type='number'], [type='date'],\\r\\n[type='datetime-local'], [type='month'], [type='search'], [type='tel'], [type='time'],\\r\\n[name=\\\"name\\\"], [name=\\\"subject\\\"], [name=\\\"message\\\"],\\r\\n[type='week'], [multiple], textarea, select {\\r\\n    color: var(--modal-dialog-fg-color);\\r\\n    appearance: none;\\r\\n    border-width: 1px;\\r\\n    border-radius: 0px;\\r\\n    padding: .5rem .75rem;\\r\\n    font-size: 1rem;\\r\\n    line-height: 1.5rem;\\r\\n}\\r\\n\\r\\n@media (min-width: 640px) {\\r\\n    [type=\\\"text\\\"], [type=\\\"search\\\"], [type=\\\"password\\\"], [type=\\\"email\\\"],\\r\\n    [name=\\\"name\\\"], [name=\\\"subject\\\"], [name=\\\"message\\\"], select {\\r\\n        font-size: 0.875rem;\\r\\n        line-height: 1.25rem;\\r\\n    }\\r\\n}\\r\\n\\r\\n[type=\\\"text\\\"], [type=\\\"search\\\"], [type=\\\"password\\\"], [type=\\\"email\\\"],\\r\\n[name=\\\"name\\\"], [name=\\\"subject\\\"], [name=\\\"message\\\"], select {\\r\\n    display: block;\\r\\n    border-radius: 0.375rem;\\r\\n    --tw-border-opacity: 1;\\r\\n    border-color: rgb(137 141 141 / var(--tw-border-opacity));\\r\\n    --tw-bg-opacity: 1;\\r\\n    background-color: rgb(84 89 91 / var(--tw-bg-opacity));\\r\\n    transition-duration: 200ms;\\r\\n    accent-color: var(--player-light-gray);\\r\\n}\\r\\n\\r\\n.button-large {\\r\\n    padding: .75rem 1.5rem;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player .player-primary-button,\\r\\n.video-js.mediasite-player .player-outline-button {\\r\\n    border-width: 2px;\\r\\n    border-radius: 30px;\\r\\n    border-style: solid;\\r\\n    padding: .75em 2.75em;\\r\\n    font-size: 1em;\\r\\n    font-weight: 700;\\r\\n    font-family: var(--player-font-family-default);\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player .player-primary-button {\\r\\n    background-color: var(--player-primary-color);\\r\\n    color: var(--player-text-color-against-primary);\\r\\n    border-color: var(--player-primary-color);\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player .player-primary-button:hover,\\r\\n.video-js.mediasite-player .player-primary-button:focus {\\r\\n    background-color: var(--player-primary-color-interact);\\r\\n    color: var(--player-text-color-against-interact);\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player .player-outline-button {\\r\\n    color: var(--modal-dialog-fg-color);\\r\\n    background-color: transparent;\\r\\n    border-color: var(--player-primary-color);\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player .player-outline-button:hover,\\r\\n.video-js.mediasite-player .player-outline-button:focus {\\r\\n    background-color: var(--player-primary-color-interact);\\r\\n    color: var(--player-text-color-against-interact);\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player .player-primary-link {\\r\\n    color: var(--player-primary-color);\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player .player-primary-link:hover,\\r\\n.video-js.mediasite-player .player-primary-link:focus {\\r\\n    color: var(--player-primary-color-interact);\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../node_modules/css-loader/dist/runtime/getUrl.js\";\nimport ___CSS_LOADER_URL_IMPORT_0___ from \"../../../Manage/WebApps.Mvc/ClientSide/Assets/Fonts/OpenDyslexic_Regular.otf\";\nimport ___CSS_LOADER_URL_IMPORT_1___ from \"../../../Manage/WebApps.Mvc/ClientSide/Assets/Fonts/OpenDyslexic_Bold.otf\";\nimport ___CSS_LOADER_URL_IMPORT_2___ from \"../../../Manage/WebApps.Mvc/ClientSide/Assets/Fonts/OpenDyslexic_Italic.otf\";\nimport ___CSS_LOADER_URL_IMPORT_3___ from \"../../../Manage/WebApps.Mvc/ClientSide/Assets/Fonts/OpenDyslexic_Bold_Italic.otf\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"@font-face {\\r\\n    font-family: 'OpenDyslexic Regular';\\r\\n    src: local('OpenDyslexic Regular'), url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \") format('opentype');\\r\\n}\\r\\n\\r\\n@font-face {\\r\\n    font-family: 'OpenDyslexic Regular';\\r\\n    src: local('OpenDyslexic Bold'), url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \") format('opentype');\\r\\n    font-weight: bold;\\r\\n}\\r\\n\\r\\n@font-face {\\r\\n    font-family: 'OpenDyslexic Regular';\\r\\n    src: local('OpenDyslexic Italic'), url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \") format('opentype');\\r\\n    font-style: italic;\\r\\n}\\r\\n\\r\\n@font-face {\\r\\n    font-family: 'OpenDyslexic Regular';\\r\\n    src: local('OpenDyslexic Italic'), url(\" + ___CSS_LOADER_URL_REPLACEMENT_3___ + \") format('opentype');\\r\\n    font-weight: bold;\\r\\n    font-style: italic;\\r\\n}\\r\\n\\r\\n\\r\\n:root {\\r\\n    --banner-z-index: 1;\\r\\n    --vjs-menu-hover-z-index: 2;\\r\\n    --modal-dialog-panel-z-index: 2;\\r\\n    --play-cover-z-index: 3;\\r\\n    --player-controls-z-index: 3;\\r\\n    --loading-spinner-z-index: 4;\\r\\n    --modal-dialog-z-index: 5;\\r\\n    --sidebar-width: 500px;\\r\\n    --site-font-family: inherit;\\r\\n    --custom-font-family-gilroy: Gilroy, Verdana, sans-serif;\\r\\n    --custom-font-family-verdana: Verdana, Helvetica, sans-serif;\\r\\n    --custom-font-family-proximanova: proxima-nova, Verdana, sans-serif;\\r\\n}\\r\\n\\r\\n*:not(.video-js, .vjs-icon-placeholder, .vjs-icon-replay, .vjs-icon-previous-item, .vjs-slider-bar, .vjs-volume-level, .player-primary-button, .player-outline-button):not(.vjs-text-track-display *):not(.mediasite-player__playcover-custom-content *):not(.mediasite-player__quiz-intro *) {\\r\\n    font-family: var(--site-font-family);\\r\\n}\\r\\n\\r\\n.mediasite-player__playcover-custom-content h1, .mediasite-player__quiz-intro h1 {\\r\\n    font-family: var(--custom-font-family-gilroy) !important;\\r\\n}\\r\\n\\r\\n.mediasite-player__playcover-custom-content div, .mediasite-player__playcover-custom-content p {\\r\\n    font-family: var(--custom-font-family-verdana) !important;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player .player-primary-button, .video-js.mediasite-player .player-outline-button {\\r\\n    font-family: var(--custom-font-family-proximanova) !important;\\r\\n}\\r\\n\\r\\n.mediasite-player {\\r\\n    overflow: hidden;\\r\\n}\\r\\n\\r\\n.mediasite-player__layout {\\r\\n    display: grid;\\r\\n    grid-template-columns: 1fr minmax(0, var(--sidebar-width));\\r\\n    grid-template-rows: auto auto 1fr;\\r\\n    grid-template-areas: 'pre-banner pre-banner' 'banner banner' 'video video';\\r\\n    position: absolute;\\r\\n    top: 0;\\r\\n    left: 0;\\r\\n    width: 100%;\\r\\n    height: 100%;\\r\\n}\\r\\n\\r\\n.video-js button.vjs-big-play-button {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.mediasite-player--sidebar-open:is(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) > .mediasite-player__layout {\\r\\n    grid-template-areas: 'pre-banner pre-banner' 'banner banner' 'video sidebar';\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-tech {\\r\\n    grid-area: video;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-current-time {\\r\\n    display: block;\\r\\n}\\r\\n\\r\\n.mediasite-player:not(.vjs-live) :where(.vjs-time-divider, .vjs-duration) {\\r\\n    display: block;\\r\\n}\\r\\n\\r\\n.mediasite-player.vjs-live .vjs-playback-rate {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.mediasite-player.video-js .vjs-time-control,\\r\\n.mediasite-player.vjs-live .vjs-seek-to-live-control {\\r\\n    font-size: 1.2em;\\r\\n    line-height: 2.5em;\\r\\n}\\r\\n\\r\\n.mediasite-player.vjs-live .vjs-seek-to-live-control {\\r\\n    padding-left: 1em;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-remaining-time {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n/*the next three rules move the current time and total time closer to the '/' in between them*/\\r\\n.vjs-current-time.vjs-time-control.vjs-control {\\r\\n    padding-right: 0;\\r\\n}\\r\\n\\r\\n.vjs-duration.vjs-time-control.vjs-control {\\r\\n    padding-left: 0;\\r\\n}\\r\\n\\r\\n.vjs-time-control.vjs-time-divider {\\r\\n    padding: 0 .5em;\\r\\n    min-width: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-progress-control {\\r\\n    position: absolute;\\r\\n    top: 0;\\r\\n    left: 0;\\r\\n    width: 100%;\\r\\n    height: 2em;\\r\\n    padding-top: 0.5em;\\r\\n    background-image: linear-gradient(0deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.125) 30%, rgba(0,0,0,0.125) 45%, rgba(0,0,0,0) 100%);\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-progress-control.vjs-control .vjs-progress-holder .vjs-mouse-display .vjs-time-tooltip {\\r\\n    white-space: nowrap;\\r\\n    text-overflow: ellipsis;\\r\\n    overflow-x: hidden;\\r\\n}\\r\\n\\r\\n.vjs-control-bar::after {\\r\\n    content: \\\"\\\";\\r\\n    position: absolute;\\r\\n    top: 0;\\r\\n    left: 0;\\r\\n    width: 100%;\\r\\n    height: 100%;\\r\\n    z-index: -1;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-control-bar {\\r\\n    font-size: 125%;\\r\\n}\\r\\n\\r\\n@media (pointer: coarse) and (min-width: 500px) {\\r\\n    .mediasite-player .vjs-control-bar {\\r\\n        font-size: 150%;\\r\\n    }\\r\\n}\\r\\n\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .vjs-mouse-display .vjs-time-tooltip {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-control-bar > * {\\r\\n    box-sizing: border-box;\\r\\n}\\r\\n\\r\\n/* Padding chosen so that hovering over the timeline doesn't also interact with icons below it */\\r\\n.mediasite-player .mediasite-player__main-control-bar {\\r\\n    padding-top: 2.25em;\\r\\n    box-sizing: content-box;\\r\\n    z-index: var(--player-controls-z-index);\\r\\n}\\r\\n\\r\\n/*Used by hotspot editor to hide play controls when moving or resizing a hotspot*/\\r\\n.mediasite-player .mediasite-player__main-control-bar.hide-player-controls {\\r\\n    visibility: visible;\\r\\n    opacity: 0;\\r\\n    pointer-events:none;\\r\\n    transition: visibility .5s,opacity .5s;\\r\\n}\\r\\n\\r\\n.vjs-menu li {\\r\\n    padding-left: .5em;\\r\\n    padding-right: .5em;\\r\\n}\\r\\n\\r\\n.vjs-menu li.vjs-menu-title {\\r\\n    text-transform: none;\\r\\n    border-bottom: 1px solid white;\\r\\n    font-weight: normal;\\r\\n    font-size: 1.5em;\\r\\n}\\r\\n\\r\\n.vjs-menu li.vjs-menu-item {\\r\\n    text-transform: none;\\r\\n    font-size: 1.2em;\\r\\n}\\r\\n\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .vjs-menu .vjs-menu-content .vjs-menu-title {\\r\\n    font-size: 1.25em;\\r\\n}\\r\\n\\r\\n/* Shrinks the sizes of the items so that they can all fit when the screen gets small and the number of items gets large */\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .vjs-menu .vjs-menu-content .vjs-menu-item {\\r\\n    --bg-size: .85em;\\r\\n    --bg-pos: .85em center;\\r\\n    line-height: 1.2em;\\r\\n    font-size: 1em;\\r\\n}\\r\\n\\r\\n.vjs-menu-button-popup .vjs-menu {\\r\\n    width: auto;\\r\\n    left: auto;\\r\\n    right: 0;\\r\\n}\\r\\n\\r\\n.video-js :is(.vjs-control-bar, .vjs-menu-button-popup .vjs-menu .vjs-menu-content) {\\r\\n    background-color: rgba(38, 38, 38, .95);\\r\\n}\\r\\n\\r\\n.vjs-menu-button-popup .vjs-menu .vjs-menu-content {\\r\\n    z-index: var(--vjs-menu-hover-z-index);\\r\\n    width: -webkit-max-content;\\r\\n    width: max-content;\\r\\n    max-width: 18em;\\r\\n    border: 1px solid #333;\\r\\n    box-shadow: 0 0 1em rgba(0, 0, 0, .25);\\r\\n    right: 0;\\r\\n    bottom: 1em;\\r\\n}\\r\\n\\r\\n.vjs-chapters-button.vjs-menu-button-popup .vjs-menu .vjs-menu-content {\\r\\n    min-width: 11em; /* Forces it to be wide enough to contain the Chapters title fully */\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-custom-control-spacer {\\r\\n    display: block;\\r\\n    flex: 1;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-slider {\\r\\n    background-color: #676767;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-slider:focus {\\r\\n    text-shadow: none;\\r\\n    box-shadow: none;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-play-progress {\\r\\n    --seek-thumb-color: #ec8b00;\\r\\n    background-color: #ec8b00;\\r\\n    overflow-x: visible;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-play-progress::before {\\r\\n    z-index: 2;\\r\\n    color: var(--seek-thumb-color);\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-progress-holder .vjs-load-progress {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.vjs-button:focus {\\r\\n    outline: 1px solid;\\r\\n}\\r\\n\\r\\n/*Util Classes*/\\r\\n.text-align-center {\\r\\n    text-align: center !important;\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/player.css\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\"@font-face {\\r\\n    font-family: 'OpenDyslexic Regular';\\r\\n    src: local('OpenDyslexic Regular'), url('~MEDIASITE/Server/Manage/WebApps.Mvc/ClientSide/Assets/Fonts/OpenDyslexic_Regular.otf') format('opentype');\\r\\n}\\r\\n\\r\\n@font-face {\\r\\n    font-family: 'OpenDyslexic Regular';\\r\\n    src: local('OpenDyslexic Bold'), url('~MEDIASITE/Server/Manage/WebApps.Mvc/ClientSide/Assets/Fonts/OpenDyslexic_Bold.otf') format('opentype');\\r\\n    font-weight: bold;\\r\\n}\\r\\n\\r\\n@font-face {\\r\\n    font-family: 'OpenDyslexic Regular';\\r\\n    src: local('OpenDyslexic Italic'), url('~MEDIASITE/Server/Manage/WebApps.Mvc/ClientSide/Assets/Fonts/OpenDyslexic_Italic.otf') format('opentype');\\r\\n    font-style: italic;\\r\\n}\\r\\n\\r\\n@font-face {\\r\\n    font-family: 'OpenDyslexic Regular';\\r\\n    src: local('OpenDyslexic Italic'), url('~MEDIASITE/Server/Manage/WebApps.Mvc/ClientSide/Assets/Fonts/OpenDyslexic_Bold_Italic.otf') format('opentype');\\r\\n    font-weight: bold;\\r\\n    font-style: italic;\\r\\n}\\r\\n\\r\\n\\r\\n:root {\\r\\n    --banner-z-index: 1;\\r\\n    --vjs-menu-hover-z-index: 2;\\r\\n    --modal-dialog-panel-z-index: 2;\\r\\n    --play-cover-z-index: 3;\\r\\n    --player-controls-z-index: 3;\\r\\n    --loading-spinner-z-index: 4;\\r\\n    --modal-dialog-z-index: 5;\\r\\n    --sidebar-width: 500px;\\r\\n    --site-font-family: inherit;\\r\\n    --custom-font-family-gilroy: Gilroy, Verdana, sans-serif;\\r\\n    --custom-font-family-verdana: Verdana, Helvetica, sans-serif;\\r\\n    --custom-font-family-proximanova: proxima-nova, Verdana, sans-serif;\\r\\n}\\r\\n\\r\\n*:not(.video-js, .vjs-icon-placeholder, .vjs-icon-replay, .vjs-icon-previous-item, .vjs-slider-bar, .vjs-volume-level, .player-primary-button, .player-outline-button):not(.vjs-text-track-display *):not(.mediasite-player__playcover-custom-content *):not(.mediasite-player__quiz-intro *) {\\r\\n    font-family: var(--site-font-family);\\r\\n}\\r\\n\\r\\n.mediasite-player__playcover-custom-content h1, .mediasite-player__quiz-intro h1 {\\r\\n    font-family: var(--custom-font-family-gilroy) !important;\\r\\n}\\r\\n\\r\\n.mediasite-player__playcover-custom-content div, .mediasite-player__playcover-custom-content p {\\r\\n    font-family: var(--custom-font-family-verdana) !important;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player .player-primary-button, .video-js.mediasite-player .player-outline-button {\\r\\n    font-family: var(--custom-font-family-proximanova) !important;\\r\\n}\\r\\n\\r\\n.mediasite-player {\\r\\n    overflow: hidden;\\r\\n}\\r\\n\\r\\n.mediasite-player__layout {\\r\\n    display: grid;\\r\\n    grid-template-columns: 1fr minmax(0, var(--sidebar-width));\\r\\n    grid-template-rows: auto auto 1fr;\\r\\n    grid-template-areas: 'pre-banner pre-banner' 'banner banner' 'video video';\\r\\n    position: absolute;\\r\\n    top: 0;\\r\\n    left: 0;\\r\\n    width: 100%;\\r\\n    height: 100%;\\r\\n}\\r\\n\\r\\n.video-js button.vjs-big-play-button {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.mediasite-player--sidebar-open:is(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) > .mediasite-player__layout {\\r\\n    grid-template-areas: 'pre-banner pre-banner' 'banner banner' 'video sidebar';\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-tech {\\r\\n    grid-area: video;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-current-time {\\r\\n    display: block;\\r\\n}\\r\\n\\r\\n.mediasite-player:not(.vjs-live) :where(.vjs-time-divider, .vjs-duration) {\\r\\n    display: block;\\r\\n}\\r\\n\\r\\n.mediasite-player.vjs-live .vjs-playback-rate {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.mediasite-player.video-js .vjs-time-control,\\r\\n.mediasite-player.vjs-live .vjs-seek-to-live-control {\\r\\n    font-size: 1.2em;\\r\\n    line-height: 2.5em;\\r\\n}\\r\\n\\r\\n.mediasite-player.vjs-live .vjs-seek-to-live-control {\\r\\n    padding-left: 1em;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-remaining-time {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n/*the next three rules move the current time and total time closer to the '/' in between them*/\\r\\n.vjs-current-time.vjs-time-control.vjs-control {\\r\\n    padding-right: 0;\\r\\n}\\r\\n\\r\\n.vjs-duration.vjs-time-control.vjs-control {\\r\\n    padding-left: 0;\\r\\n}\\r\\n\\r\\n.vjs-time-control.vjs-time-divider {\\r\\n    padding: 0 .5em;\\r\\n    min-width: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-progress-control {\\r\\n    position: absolute;\\r\\n    top: 0;\\r\\n    left: 0;\\r\\n    width: 100%;\\r\\n    height: 2em;\\r\\n    padding-top: 0.5em;\\r\\n    background-image: linear-gradient(0deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.125) 30%, rgba(0,0,0,0.125) 45%, rgba(0,0,0,0) 100%);\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-progress-control.vjs-control .vjs-progress-holder .vjs-mouse-display .vjs-time-tooltip {\\r\\n    white-space: nowrap;\\r\\n    text-overflow: ellipsis;\\r\\n    overflow-x: hidden;\\r\\n}\\r\\n\\r\\n.vjs-control-bar::after {\\r\\n    content: \\\"\\\";\\r\\n    position: absolute;\\r\\n    top: 0;\\r\\n    left: 0;\\r\\n    width: 100%;\\r\\n    height: 100%;\\r\\n    z-index: -1;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-control-bar {\\r\\n    font-size: 125%;\\r\\n}\\r\\n\\r\\n@media (pointer: coarse) and (min-width: 500px) {\\r\\n    .mediasite-player .vjs-control-bar {\\r\\n        font-size: 150%;\\r\\n    }\\r\\n}\\r\\n\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .vjs-mouse-display .vjs-time-tooltip {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-control-bar > * {\\r\\n    box-sizing: border-box;\\r\\n}\\r\\n\\r\\n/* Padding chosen so that hovering over the timeline doesn't also interact with icons below it */\\r\\n.mediasite-player .mediasite-player__main-control-bar {\\r\\n    padding-top: 2.25em;\\r\\n    box-sizing: content-box;\\r\\n    z-index: var(--player-controls-z-index);\\r\\n}\\r\\n\\r\\n/*Used by hotspot editor to hide play controls when moving or resizing a hotspot*/\\r\\n.mediasite-player .mediasite-player__main-control-bar.hide-player-controls {\\r\\n    visibility: visible;\\r\\n    opacity: 0;\\r\\n    pointer-events:none;\\r\\n    transition: visibility .5s,opacity .5s;\\r\\n}\\r\\n\\r\\n.vjs-menu li {\\r\\n    padding-left: .5em;\\r\\n    padding-right: .5em;\\r\\n}\\r\\n\\r\\n.vjs-menu li.vjs-menu-title {\\r\\n    text-transform: none;\\r\\n    border-bottom: 1px solid white;\\r\\n    font-weight: normal;\\r\\n    font-size: 1.5em;\\r\\n}\\r\\n\\r\\n.vjs-menu li.vjs-menu-item {\\r\\n    text-transform: none;\\r\\n    font-size: 1.2em;\\r\\n}\\r\\n\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .vjs-menu .vjs-menu-content .vjs-menu-title {\\r\\n    font-size: 1.25em;\\r\\n}\\r\\n\\r\\n/* Shrinks the sizes of the items so that they can all fit when the screen gets small and the number of items gets large */\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .vjs-menu .vjs-menu-content .vjs-menu-item {\\r\\n    --bg-size: .85em;\\r\\n    --bg-pos: .85em center;\\r\\n    line-height: 1.2em;\\r\\n    font-size: 1em;\\r\\n}\\r\\n\\r\\n.vjs-menu-button-popup .vjs-menu {\\r\\n    width: auto;\\r\\n    left: auto;\\r\\n    right: 0;\\r\\n}\\r\\n\\r\\n.video-js :is(.vjs-control-bar, .vjs-menu-button-popup .vjs-menu .vjs-menu-content) {\\r\\n    background-color: rgba(38, 38, 38, .95);\\r\\n}\\r\\n\\r\\n.vjs-menu-button-popup .vjs-menu .vjs-menu-content {\\r\\n    z-index: var(--vjs-menu-hover-z-index);\\r\\n    width: max-content;\\r\\n    max-width: 18em;\\r\\n    border: 1px solid #333;\\r\\n    box-shadow: 0 0 1em rgba(0, 0, 0, .25);\\r\\n    right: 0;\\r\\n    bottom: 1em;\\r\\n}\\r\\n\\r\\n.vjs-chapters-button.vjs-menu-button-popup .vjs-menu .vjs-menu-content {\\r\\n    min-width: 11em; /* Forces it to be wide enough to contain the Chapters title fully */\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-custom-control-spacer {\\r\\n    display: block;\\r\\n    flex: 1;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-slider {\\r\\n    background-color: #676767;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-slider:focus {\\r\\n    text-shadow: none;\\r\\n    box-shadow: none;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-play-progress {\\r\\n    --seek-thumb-color: #ec8b00;\\r\\n    background-color: #ec8b00;\\r\\n    overflow-x: visible;\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-play-progress::before {\\r\\n    z-index: 2;\\r\\n    color: var(--seek-thumb-color);\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-progress-holder .vjs-load-progress {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.vjs-button:focus {\\r\\n    outline: 1px solid;\\r\\n}\\r\\n\\r\\n/*Util Classes*/\\r\\n.text-align-center {\\r\\n    text-align: center !important;\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".mediasite-player__ask-a-question-modal [name=\\\"name\\\"],\\r\\n.mediasite-player__ask-a-question-modal [name=\\\"subject\\\"],\\r\\n.mediasite-player__ask-a-question-modal [name=\\\"email\\\"] {\\r\\n    max-width: 300px;\\r\\n}\\r\\n\\r\\n.mediasite-player__ask-a-question-modal [name=\\\"name\\\"],\\r\\n.mediasite-player__ask-a-question-modal [name=\\\"subject\\\"],\\r\\n.mediasite-player__ask-a-question-modal [name=\\\"email\\\"],\\r\\n.mediasite-player__ask-a-question-modal [name=\\\"message\\\"] {\\r\\n    margin-top: .25em;\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/ask-a-question.css\"],\"names\":[],\"mappings\":\"AAAA;;;IAGI,gBAAgB;AACpB;;AAEA;;;;IAII,iBAAiB;AACrB\",\"sourcesContent\":[\".mediasite-player__ask-a-question-modal [name=\\\"name\\\"],\\r\\n.mediasite-player__ask-a-question-modal [name=\\\"subject\\\"],\\r\\n.mediasite-player__ask-a-question-modal [name=\\\"email\\\"] {\\r\\n    max-width: 300px;\\r\\n}\\r\\n\\r\\n.mediasite-player__ask-a-question-modal [name=\\\"name\\\"],\\r\\n.mediasite-player__ask-a-question-modal [name=\\\"subject\\\"],\\r\\n.mediasite-player__ask-a-question-modal [name=\\\"email\\\"],\\r\\n.mediasite-player__ask-a-question-modal [name=\\\"message\\\"] {\\r\\n    margin-top: .25em;\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".mediasite-player__background {\\r\\n    display: flex;\\r\\n    position: absolute;\\r\\n    top: 50%;\\r\\n    left: 50%;\\r\\n    transform: translateX(-50%) translateY(-50%);\\r\\n    width: 100vw;\\r\\n    max-width: 177.78vh;\\r\\n    /* 16/9 = 1.778 */\\r\\n    height: 56.25vw;\\r\\n    /* height/width ratio = 9/16 = .5625  */\\r\\n    max-height: 100vh;\\r\\n    background-color: var(--background-color);\\r\\n    background-image: var(--background-url);\\r\\n    background-repeat: no-repeat;\\r\\n    background-position: center;\\r\\n    background-size: 100% 100%;\\r\\n}\\r\\n\\r\\n.mediasite-player .mediasite-player__background .vjs-tech {\\r\\n    margin: auto;\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/background.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,aAAa;IACb,kBAAkB;IAClB,QAAQ;IACR,SAAS;IACT,4CAA4C;IAC5C,YAAY;IACZ,mBAAmB;IACnB,iBAAiB;IACjB,eAAe;IACf,uCAAuC;IACvC,iBAAiB;IACjB,yCAAyC;IACzC,uCAAuC;IACvC,4BAA4B;IAC5B,2BAA2B;IAC3B,0BAA0B;AAC9B;;AAEA;IACI,YAAY;AAChB\",\"sourcesContent\":[\".mediasite-player__background {\\r\\n    display: flex;\\r\\n    position: absolute;\\r\\n    top: 50%;\\r\\n    left: 50%;\\r\\n    transform: translateX(-50%) translateY(-50%);\\r\\n    width: 100vw;\\r\\n    max-width: 177.78vh;\\r\\n    /* 16/9 = 1.778 */\\r\\n    height: 56.25vw;\\r\\n    /* height/width ratio = 9/16 = .5625  */\\r\\n    max-height: 100vh;\\r\\n    background-color: var(--background-color);\\r\\n    background-image: var(--background-url);\\r\\n    background-repeat: no-repeat;\\r\\n    background-position: center;\\r\\n    background-size: 100% 100%;\\r\\n}\\r\\n\\r\\n.mediasite-player .mediasite-player__background .vjs-tech {\\r\\n    margin: auto;\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".mediasite-player__banner-img {\\r\\n    grid-area: banner;\\r\\n    justify-self: center;\\r\\n    position: relative;\\r\\n}\\r\\n\\r\\n.mediasite-player__banner-img > img {\\r\\n    object-fit: contain;\\r\\n    max-width: var(--banner-width);\\r\\n    max-height: var(--banner-height);\\r\\n}\\r\\n\\r\\n.mediasite-player__banner-img--auto-hide {\\r\\n    grid-area: video;\\r\\n    height: -webkit-max-content;\\r\\n    height: max-content;\\r\\n    transition: visibility 0s, opacity .1s;\\r\\n    margin-top: 1em;\\r\\n    z-index: var(--banner-z-index);\\r\\n}\\r\\n\\r\\n.mediasite-player__banner-img--auto-hide > img {\\r\\n    box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);\\r\\n}\\r\\n\\r\\n.vjs-has-started.vjs-user-inactive.vjs-playing .mediasite-player__banner-img--auto-hide {\\r\\n    visibility: hidden;\\r\\n    opacity: 0;\\r\\n    transition-duration: 0s, 1s;\\r\\n    transition-delay: 1s, 0s;\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-modal {\\r\\n    --ended-banner-bg-color: #333;\\r\\n    --ended-banner-width: 520px;\\r\\n    display: flex;\\r\\n    align-items: center;\\r\\n    border-radius: .25em;\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-modal .mediasite-player__overlay {\\r\\n    width: var(--ended-banner-width);\\r\\n    max-width: calc(100% - 2em);\\r\\n    padding: 0;\\r\\n    background-color: transparent;\\r\\n    overflow: hidden;\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-modal .mediasite-player__overlay :is(a, img) {\\r\\n    display: block;\\r\\n    max-width: 100%;\\r\\n    height: auto;\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-modal .mediasite-player__overlay > :not(a) {\\r\\n    background-color: var(--ended-banner-bg-color);\\r\\n    padding: 1em 1em 0;\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-modal .mediasite-player__overlay::before {\\r\\n    content: \\\"\\\";\\r\\n    display: block;\\r\\n    background-color: var(--ended-banner-bg-color);\\r\\n    padding-top: 1em;\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-modal .mediasite-player__overlay .vjs-presentation-ended-image{\\r\\n    display:none;\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-modal .mediasite-player__overlay .vjs-presentation-ended-text{\\r\\n    padding: 20px;\\r\\n    background-color: var(--ended-banner-bg-color);\\r\\n    color: white;\\r\\n    font-size: 24px;\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-modal.mediasite-player__modal-dialog,\\r\\n.mediasite-player__show-message-modal.mediasite-player__modal-dialog {\\r\\n    z-index: calc(var(--modal-dialog-z-index) - 1);\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-modal.mediasite-player__modal-dialog---show-controls,\\r\\n.mediasite-player__show-message-modal.mediasite-player__modal-dialog---show-controls {\\r\\n    z-index: 1;\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-replay-holder {\\r\\n    padding-bottom: 1.5em !important;\\r\\n}\\r\\n\\r\\n.video-js .mediasite-player__presentation-ended-replay-holder button {\\r\\n    display: flex;\\r\\n    justify-content: center;\\r\\n    margin: auto;\\r\\n    cursor: pointer;\\r\\n    font-size: 1.1em;\\r\\n    transition: text-shadow .1s ease;\\r\\n    color: var(--ended-banner-bg-color);\\r\\n    filter: grayscale(100%) contrast(10000%) invert(1);\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-replay-holder button:is(:hover, :active) {\\r\\n    text-shadow: 0 0 .75em var(--ended-banner-bg-color);\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-replay-holder button > span:first-of-type {\\r\\n    margin-right: .25em;\\r\\n}\\r\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/banner.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,iBAAiB;IACjB,oBAAoB;IACpB,kBAAkB;AACtB;;AAEA;IACI,mBAAmB;IACnB,8BAA8B;IAC9B,gCAAgC;AACpC;;AAEA;IACI,gBAAgB;IAChB,2BAAmB;IAAnB,mBAAmB;IACnB,sCAAsC;IACtC,eAAe;IACf,8BAA8B;AAClC;;AAEA;IACI,kEAAkE;AACtE;;AAEA;IACI,kBAAkB;IAClB,UAAU;IACV,2BAA2B;IAC3B,wBAAwB;AAC5B;;AAEA;IACI,6BAA6B;IAC7B,2BAA2B;IAC3B,aAAa;IACb,mBAAmB;IACnB,oBAAoB;AACxB;;AAEA;IACI,gCAAgC;IAChC,2BAA2B;IAC3B,UAAU;IACV,6BAA6B;IAC7B,gBAAgB;AACpB;;AAEA;IACI,cAAc;IACd,eAAe;IACf,YAAY;AAChB;;AAEA;IACI,8CAA8C;IAC9C,kBAAkB;AACtB;;AAEA;IACI,WAAW;IACX,cAAc;IACd,8CAA8C;IAC9C,gBAAgB;AACpB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI,aAAa;IACb,8CAA8C;IAC9C,YAAY;IACZ,eAAe;AACnB;;AAEA;;IAEI,8CAA8C;AAClD;;AAEA;;IAEI,UAAU;AACd;;AAEA;IACI,gCAAgC;AACpC;;AAEA;IACI,aAAa;IACb,uBAAuB;IACvB,YAAY;IACZ,eAAe;IACf,gBAAgB;IAChB,gCAAgC;IAChC,mCAAmC;IACnC,kDAAkD;AACtD;;AAEA;IACI,mDAAmD;AACvD;;AAEA;IACI,mBAAmB;AACvB\",\"sourcesContent\":[\".mediasite-player__banner-img {\\r\\n    grid-area: banner;\\r\\n    justify-self: center;\\r\\n    position: relative;\\r\\n}\\r\\n\\r\\n.mediasite-player__banner-img > img {\\r\\n    object-fit: contain;\\r\\n    max-width: var(--banner-width);\\r\\n    max-height: var(--banner-height);\\r\\n}\\r\\n\\r\\n.mediasite-player__banner-img--auto-hide {\\r\\n    grid-area: video;\\r\\n    height: max-content;\\r\\n    transition: visibility 0s, opacity .1s;\\r\\n    margin-top: 1em;\\r\\n    z-index: var(--banner-z-index);\\r\\n}\\r\\n\\r\\n.mediasite-player__banner-img--auto-hide > img {\\r\\n    box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);\\r\\n}\\r\\n\\r\\n.vjs-has-started.vjs-user-inactive.vjs-playing .mediasite-player__banner-img--auto-hide {\\r\\n    visibility: hidden;\\r\\n    opacity: 0;\\r\\n    transition-duration: 0s, 1s;\\r\\n    transition-delay: 1s, 0s;\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-modal {\\r\\n    --ended-banner-bg-color: #333;\\r\\n    --ended-banner-width: 520px;\\r\\n    display: flex;\\r\\n    align-items: center;\\r\\n    border-radius: .25em;\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-modal .mediasite-player__overlay {\\r\\n    width: var(--ended-banner-width);\\r\\n    max-width: calc(100% - 2em);\\r\\n    padding: 0;\\r\\n    background-color: transparent;\\r\\n    overflow: hidden;\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-modal .mediasite-player__overlay :is(a, img) {\\r\\n    display: block;\\r\\n    max-width: 100%;\\r\\n    height: auto;\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-modal .mediasite-player__overlay > :not(a) {\\r\\n    background-color: var(--ended-banner-bg-color);\\r\\n    padding: 1em 1em 0;\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-modal .mediasite-player__overlay::before {\\r\\n    content: \\\"\\\";\\r\\n    display: block;\\r\\n    background-color: var(--ended-banner-bg-color);\\r\\n    padding-top: 1em;\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-modal .mediasite-player__overlay .vjs-presentation-ended-image{\\r\\n    display:none;\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-modal .mediasite-player__overlay .vjs-presentation-ended-text{\\r\\n    padding: 20px;\\r\\n    background-color: var(--ended-banner-bg-color);\\r\\n    color: white;\\r\\n    font-size: 24px;\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-modal.mediasite-player__modal-dialog,\\r\\n.mediasite-player__show-message-modal.mediasite-player__modal-dialog {\\r\\n    z-index: calc(var(--modal-dialog-z-index) - 1);\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-modal.mediasite-player__modal-dialog---show-controls,\\r\\n.mediasite-player__show-message-modal.mediasite-player__modal-dialog---show-controls {\\r\\n    z-index: 1;\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-replay-holder {\\r\\n    padding-bottom: 1.5em !important;\\r\\n}\\r\\n\\r\\n.video-js .mediasite-player__presentation-ended-replay-holder button {\\r\\n    display: flex;\\r\\n    justify-content: center;\\r\\n    margin: auto;\\r\\n    cursor: pointer;\\r\\n    font-size: 1.1em;\\r\\n    transition: text-shadow .1s ease;\\r\\n    color: var(--ended-banner-bg-color);\\r\\n    filter: grayscale(100%) contrast(10000%) invert(1);\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-replay-holder button:is(:hover, :active) {\\r\\n    text-shadow: 0 0 .75em var(--ended-banner-bg-color);\\r\\n}\\r\\n\\r\\n.mediasite-player__presentation-ended-replay-holder button > span:first-of-type {\\r\\n    margin-right: .25em;\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*Parent Element for the Captions Settings*/\\r\\n.vjs-modal-dialog.vjs-text-track-settings {\\r\\n    /* Init variables for the captions settings */\\r\\n    --captions-settings-modal-width: 650px;\\r\\n    --captions-settings-dropdown-width: 18rem;\\r\\n    --captions-settings-button-width: 150px;\\r\\n    --captions-settings-group-spacing: 1rem; /*distance between groups of setting, i.e. colors vs. fonts*/\\r\\n    --captions-settings-section-spacing: .5rem; /*distance between groups of related settings, i.e. text color and opacity vs. background*/\\r\\n    --captions-settings-fieldset-spacing: 1.25rem; /*distance between related settings, i.e. text color vs. text opacity*/\\r\\n    /* Rules for the parent element */\\r\\n    height: 100%;\\r\\n    width: var(--captions-settings-modal-width);\\r\\n    left: calc(100% - var(--captions-settings-modal-width));\\r\\n    font-family: var(--player-font-family-default);\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings .vjs-modal-dialog-content {\\r\\n    display: flex;\\r\\n    flex-direction: column;\\r\\n    height: calc(100% - 35px);\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings h2 {\\r\\n    font-family: var(--player-font-family-title);\\r\\n    font-size: 2.25rem;\\r\\n    margin: 0 0 var(--captions-settings-group-spacing);\\r\\n    line-height: 1;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings .vjs-track-settings-font,\\r\\n.vjs-modal-dialog.vjs-text-track-settings .vjs-track-settings-colors {\\r\\n    display: grid;\\r\\n    grid-template-rows: repeat(3, 1fr);\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings .vjs-track-settings-colors {\\r\\n    margin-top: var(--captions-settings-group-spacing);\\r\\n    gap: var(--captions-settings-section-spacing);\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings .vjs-track-settings-font {\\r\\n    margin-top: calc(var(--captions-settings-group-spacing) * 2);\\r\\n    gap: var(--captions-settings-section-spacing);\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings .vjs-track-settings-controls {\\r\\n    display: flex;\\r\\n    flex-direction: column;\\r\\n    margin-top: calc(var(--captions-settings-group-spacing) * 3);\\r\\n    gap: var(--captions-settings-fieldset-spacing);\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings fieldset {\\r\\n    display: flex;\\r\\n    justify-content: space-around;\\r\\n    gap: var(--captions-settings-fieldset-spacing);\\r\\n    margin: 0;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings fieldset legend {\\r\\n    margin: 0 auto 5px;\\r\\n    width: var(--captions-settings-dropdown-width);\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings fieldset select {\\r\\n    margin: 0;\\r\\n    width: var(--captions-settings-dropdown-width);\\r\\n    max-width: var(--captions-settings-dropdown-width);\\r\\n    padding: .5rem .75rem;\\r\\n    border-width: 1px;\\r\\n    line-height: 1.5;\\r\\n    -webkit-appearance: none;\\r\\n            appearance: none;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings fieldset span label {\\r\\n    position: initial;\\r\\n    height: initial;\\r\\n    width: initial;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings button.player-primary-button {\\r\\n    background-image: none;\\r\\n    font-size: 1.15em;\\r\\n    width: var(--captions-settings-button-width);\\r\\n    margin: auto;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings .vjs-default-button {\\r\\n    background-color: transparent;\\r\\n    background-image: none;\\r\\n    color: white;\\r\\n    font-weight: bold;\\r\\n    font-size: 1.15em;\\r\\n    margin: 0 auto;\\r\\n    width: var(--captions-settings-button-width);\\r\\n    order: 1;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings .vjs-default-button:hover {\\r\\n    text-decoration: underline;\\r\\n}\\r\\n\\r\\n.hidden-legend {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.vjs-text-track-display.font-opendyslexic .vjs-text-track-cue {\\r\\n    font-family: 'OpenDyslexic Regular' !important;\\r\\n}\\r\\n\\r\\n/*Remove this media query to center the three font related dropdowns*/\\r\\n@media (min-width: 700px) {\\r\\n    .vjs-modal-dialog.vjs-text-track-settings .vjs-track-settings-font fieldset {\\r\\n        justify-content: flex-start;\\r\\n    }\\r\\n\\r\\n    .vjs-modal-dialog.vjs-text-track-settings .vjs-track-settings-font legend {\\r\\n        margin: 0 0 5px 0;\\r\\n    }\\r\\n}\\r\\n\\r\\n@media (max-width: 700px) {\\r\\n    .vjs-modal-dialog.vjs-text-track-settings {\\r\\n        --captions-settings-modal-width: 100%;\\r\\n        --captions-settings-group-spacing: 1rem;\\r\\n        --captions-settings-section-spacing: 1rem;\\r\\n        --captions-settings-fieldset-spacing: .5rem;\\r\\n    }\\r\\n\\r\\n    .vjs-modal-dialog.vjs-text-track-settings h2 {\\r\\n        margin: 0;\\r\\n        max-width: calc(100% - 25px);\\r\\n    }\\r\\n\\r\\n    .vjs-modal-dialog.vjs-text-track-settings .vjs-track-settings-font {\\r\\n        margin-top: calc(var(--captions-settings-section-spacing) * 1.5);\\r\\n        gap: var(--captions-settings-fieldset-spacing);\\r\\n    }\\r\\n\\r\\n    .vjs-modal-dialog.vjs-text-track-settings .vjs-track-settings-controls {\\r\\n        margin-top: calc(var(--captions-settings-section-spacing) * 2);\\r\\n    }\\r\\n\\r\\n    .vjs-modal-dialog.vjs-text-track-settings fieldset {\\r\\n        flex-direction: column;\\r\\n        margin: auto;\\r\\n        padding: 0;\\r\\n    }\\r\\n\\r\\n    .vjs-text-track-settings fieldset span {\\r\\n        margin: auto;\\r\\n    }\\r\\n}\\r\\n\\r\\n@media (max-width: 400px) {\\r\\n    .vjs-modal-dialog.vjs-text-track-settings .vjs-modal-dialog-content {\\r\\n        padding: 20px 8px;\\r\\n    }\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/captions-settings.css\"],\"names\":[],\"mappings\":\"AAAA,2CAA2C;AAC3C;IACI,6CAA6C;IAC7C,sCAAsC;IACtC,yCAAyC;IACzC,uCAAuC;IACvC,uCAAuC,EAAE,4DAA4D;IACrG,0CAA0C,EAAE,0FAA0F;IACtI,6CAA6C,EAAE,sEAAsE;IACrH,iCAAiC;IACjC,YAAY;IACZ,2CAA2C;IAC3C,uDAAuD;IACvD,8CAA8C;AAClD;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,yBAAyB;AAC7B;;AAEA;IACI,4CAA4C;IAC5C,kBAAkB;IAClB,kDAAkD;IAClD,cAAc;AAClB;;AAEA;;IAEI,aAAa;IACb,kCAAkC;AACtC;;AAEA;IACI,kDAAkD;IAClD,6CAA6C;AACjD;;AAEA;IACI,4DAA4D;IAC5D,6CAA6C;AACjD;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,4DAA4D;IAC5D,8CAA8C;AAClD;;AAEA;IACI,aAAa;IACb,6BAA6B;IAC7B,8CAA8C;IAC9C,SAAS;AACb;;AAEA;IACI,kBAAkB;IAClB,8CAA8C;AAClD;;AAEA;IACI,SAAS;IACT,8CAA8C;IAC9C,kDAAkD;IAClD,qBAAqB;IACrB,iBAAiB;IACjB,gBAAgB;IAChB,wBAAgB;YAAhB,gBAAgB;AACpB;;AAEA;IACI,iBAAiB;IACjB,eAAe;IACf,cAAc;AAClB;;AAEA;IACI,sBAAsB;IACtB,iBAAiB;IACjB,4CAA4C;IAC5C,YAAY;AAChB;;AAEA;IACI,6BAA6B;IAC7B,sBAAsB;IACtB,YAAY;IACZ,iBAAiB;IACjB,iBAAiB;IACjB,cAAc;IACd,4CAA4C;IAC5C,QAAQ;AACZ;;AAEA;IACI,0BAA0B;AAC9B;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,8CAA8C;AAClD;;AAEA,qEAAqE;AACrE;IACI;QACI,2BAA2B;IAC/B;;IAEA;QACI,iBAAiB;IACrB;AACJ;;AAEA;IACI;QACI,qCAAqC;QACrC,uCAAuC;QACvC,yCAAyC;QACzC,2CAA2C;IAC/C;;IAEA;QACI,SAAS;QACT,4BAA4B;IAChC;;IAEA;QACI,gEAAgE;QAChE,8CAA8C;IAClD;;IAEA;QACI,8DAA8D;IAClE;;IAEA;QACI,sBAAsB;QACtB,YAAY;QACZ,UAAU;IACd;;IAEA;QACI,YAAY;IAChB;AACJ;;AAEA;IACI;QACI,iBAAiB;IACrB;AACJ\",\"sourcesContent\":[\"/*Parent Element for the Captions Settings*/\\r\\n.vjs-modal-dialog.vjs-text-track-settings {\\r\\n    /* Init variables for the captions settings */\\r\\n    --captions-settings-modal-width: 650px;\\r\\n    --captions-settings-dropdown-width: 18rem;\\r\\n    --captions-settings-button-width: 150px;\\r\\n    --captions-settings-group-spacing: 1rem; /*distance between groups of setting, i.e. colors vs. fonts*/\\r\\n    --captions-settings-section-spacing: .5rem; /*distance between groups of related settings, i.e. text color and opacity vs. background*/\\r\\n    --captions-settings-fieldset-spacing: 1.25rem; /*distance between related settings, i.e. text color vs. text opacity*/\\r\\n    /* Rules for the parent element */\\r\\n    height: 100%;\\r\\n    width: var(--captions-settings-modal-width);\\r\\n    left: calc(100% - var(--captions-settings-modal-width));\\r\\n    font-family: var(--player-font-family-default);\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings .vjs-modal-dialog-content {\\r\\n    display: flex;\\r\\n    flex-direction: column;\\r\\n    height: calc(100% - 35px);\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings h2 {\\r\\n    font-family: var(--player-font-family-title);\\r\\n    font-size: 2.25rem;\\r\\n    margin: 0 0 var(--captions-settings-group-spacing);\\r\\n    line-height: 1;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings .vjs-track-settings-font,\\r\\n.vjs-modal-dialog.vjs-text-track-settings .vjs-track-settings-colors {\\r\\n    display: grid;\\r\\n    grid-template-rows: repeat(3, 1fr);\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings .vjs-track-settings-colors {\\r\\n    margin-top: var(--captions-settings-group-spacing);\\r\\n    gap: var(--captions-settings-section-spacing);\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings .vjs-track-settings-font {\\r\\n    margin-top: calc(var(--captions-settings-group-spacing) * 2);\\r\\n    gap: var(--captions-settings-section-spacing);\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings .vjs-track-settings-controls {\\r\\n    display: flex;\\r\\n    flex-direction: column;\\r\\n    margin-top: calc(var(--captions-settings-group-spacing) * 3);\\r\\n    gap: var(--captions-settings-fieldset-spacing);\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings fieldset {\\r\\n    display: flex;\\r\\n    justify-content: space-around;\\r\\n    gap: var(--captions-settings-fieldset-spacing);\\r\\n    margin: 0;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings fieldset legend {\\r\\n    margin: 0 auto 5px;\\r\\n    width: var(--captions-settings-dropdown-width);\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings fieldset select {\\r\\n    margin: 0;\\r\\n    width: var(--captions-settings-dropdown-width);\\r\\n    max-width: var(--captions-settings-dropdown-width);\\r\\n    padding: .5rem .75rem;\\r\\n    border-width: 1px;\\r\\n    line-height: 1.5;\\r\\n    appearance: none;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings fieldset span label {\\r\\n    position: initial;\\r\\n    height: initial;\\r\\n    width: initial;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings button.player-primary-button {\\r\\n    background-image: none;\\r\\n    font-size: 1.15em;\\r\\n    width: var(--captions-settings-button-width);\\r\\n    margin: auto;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings .vjs-default-button {\\r\\n    background-color: transparent;\\r\\n    background-image: none;\\r\\n    color: white;\\r\\n    font-weight: bold;\\r\\n    font-size: 1.15em;\\r\\n    margin: 0 auto;\\r\\n    width: var(--captions-settings-button-width);\\r\\n    order: 1;\\r\\n}\\r\\n\\r\\n.vjs-modal-dialog.vjs-text-track-settings .vjs-default-button:hover {\\r\\n    text-decoration: underline;\\r\\n}\\r\\n\\r\\n.hidden-legend {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.vjs-text-track-display.font-opendyslexic .vjs-text-track-cue {\\r\\n    font-family: 'OpenDyslexic Regular' !important;\\r\\n}\\r\\n\\r\\n/*Remove this media query to center the three font related dropdowns*/\\r\\n@media (min-width: 700px) {\\r\\n    .vjs-modal-dialog.vjs-text-track-settings .vjs-track-settings-font fieldset {\\r\\n        justify-content: flex-start;\\r\\n    }\\r\\n\\r\\n    .vjs-modal-dialog.vjs-text-track-settings .vjs-track-settings-font legend {\\r\\n        margin: 0 0 5px 0;\\r\\n    }\\r\\n}\\r\\n\\r\\n@media (max-width: 700px) {\\r\\n    .vjs-modal-dialog.vjs-text-track-settings {\\r\\n        --captions-settings-modal-width: 100%;\\r\\n        --captions-settings-group-spacing: 1rem;\\r\\n        --captions-settings-section-spacing: 1rem;\\r\\n        --captions-settings-fieldset-spacing: .5rem;\\r\\n    }\\r\\n\\r\\n    .vjs-modal-dialog.vjs-text-track-settings h2 {\\r\\n        margin: 0;\\r\\n        max-width: calc(100% - 25px);\\r\\n    }\\r\\n\\r\\n    .vjs-modal-dialog.vjs-text-track-settings .vjs-track-settings-font {\\r\\n        margin-top: calc(var(--captions-settings-section-spacing) * 1.5);\\r\\n        gap: var(--captions-settings-fieldset-spacing);\\r\\n    }\\r\\n\\r\\n    .vjs-modal-dialog.vjs-text-track-settings .vjs-track-settings-controls {\\r\\n        margin-top: calc(var(--captions-settings-section-spacing) * 2);\\r\\n    }\\r\\n\\r\\n    .vjs-modal-dialog.vjs-text-track-settings fieldset {\\r\\n        flex-direction: column;\\r\\n        margin: auto;\\r\\n        padding: 0;\\r\\n    }\\r\\n\\r\\n    .vjs-text-track-settings fieldset span {\\r\\n        margin: auto;\\r\\n    }\\r\\n}\\r\\n\\r\\n@media (max-width: 400px) {\\r\\n    .vjs-modal-dialog.vjs-text-track-settings .vjs-modal-dialog-content {\\r\\n        padding: 20px 8px;\\r\\n    }\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".mediasite-player .vjs-text-track-settings {\\r\\n    z-index: var(--modal-dialog-z-index);\\r\\n    -webkit-backdrop-filter: blur(1em);\\r\\n            backdrop-filter: blur(1em);\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-text-track-display {\\r\\n    z-index: var(--banner-z-index);\\r\\n    bottom: 7em;\\r\\n}\\r\\n\\r\\n@media (pointer: coarse) {\\r\\n    .mediasite-player .vjs-text-track-display {\\r\\n        margin-bottom: 1.5em;\\r\\n    }\\r\\n}\\r\\n\\r\\n.mediasite-player--sidebar-open:is(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .vjs-text-track-display {\\r\\n    margin-right: var(--sidebar-width);\\r\\n}\\r\\n\\r\\n.mediasite-standalone-player-container.has-quizzes .vjs-text-track-settings {\\r\\n    top: 38px;\\r\\n    height: calc(100% - 38px);\\r\\n}\\r\\n\\r\\n.vjs-subs-caps-button.vjs-menu-button-popup + .vjs-menu .vjs-menu-content {\\r\\n    max-width: unset;\\r\\n}\\r\\n\\r\\n/* Out of the box, videojs' strings are all lowercase, which looks weird with everything else captialized*/\\r\\n.mediasite-player .vjs-subs-caps-button .vjs-menu-item {\\r\\n    text-transform: capitalize;\\r\\n    padding: .25em 1em;\\r\\n}\\r\\n\\r\\n.vjs-captions-menu-item .vjs-menu-item-text {\\r\\n    display: flex;\\r\\n    justify-content: space-between;\\r\\n    margin: auto;\\r\\n    text-align: left;\\r\\n}\\r\\n\\r\\n.vjs-captions-menu-item .vjs-icon-placeholder {\\r\\n    padding-left: .5em;\\r\\n}\\r\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/captions.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,oCAAoC;IACpC,kCAA0B;YAA1B,0BAA0B;AAC9B;;AAEA;IACI,8BAA8B;IAC9B,WAAW;AACf;;AAEA;IACI;QACI,oBAAoB;IACxB;AACJ;;AAEA;IACI,kCAAkC;AACtC;;AAEA;IACI,SAAS;IACT,yBAAyB;AAC7B;;AAEA;IACI,gBAAgB;AACpB;;AAEA,0GAA0G;AAC1G;IACI,0BAA0B;IAC1B,kBAAkB;AACtB;;AAEA;IACI,aAAa;IACb,8BAA8B;IAC9B,YAAY;IACZ,gBAAgB;AACpB;;AAEA;IACI,kBAAkB;AACtB\",\"sourcesContent\":[\".mediasite-player .vjs-text-track-settings {\\r\\n    z-index: var(--modal-dialog-z-index);\\r\\n    backdrop-filter: blur(1em);\\r\\n}\\r\\n\\r\\n.mediasite-player .vjs-text-track-display {\\r\\n    z-index: var(--banner-z-index);\\r\\n    bottom: 7em;\\r\\n}\\r\\n\\r\\n@media (pointer: coarse) {\\r\\n    .mediasite-player .vjs-text-track-display {\\r\\n        margin-bottom: 1.5em;\\r\\n    }\\r\\n}\\r\\n\\r\\n.mediasite-player--sidebar-open:is(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .vjs-text-track-display {\\r\\n    margin-right: var(--sidebar-width);\\r\\n}\\r\\n\\r\\n.mediasite-standalone-player-container.has-quizzes .vjs-text-track-settings {\\r\\n    top: 38px;\\r\\n    height: calc(100% - 38px);\\r\\n}\\r\\n\\r\\n.vjs-subs-caps-button.vjs-menu-button-popup + .vjs-menu .vjs-menu-content {\\r\\n    max-width: unset;\\r\\n}\\r\\n\\r\\n/* Out of the box, videojs' strings are all lowercase, which looks weird with everything else captialized*/\\r\\n.mediasite-player .vjs-subs-caps-button .vjs-menu-item {\\r\\n    text-transform: capitalize;\\r\\n    padding: .25em 1em;\\r\\n}\\r\\n\\r\\n.vjs-captions-menu-item .vjs-menu-item-text {\\r\\n    display: flex;\\r\\n    justify-content: space-between;\\r\\n    margin: auto;\\r\\n    text-align: left;\\r\\n}\\r\\n\\r\\n.vjs-captions-menu-item .vjs-icon-placeholder {\\r\\n    padding-left: .5em;\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \":root {\\r\\n    --custom-controlbar-icon: none;\\r\\n}\\r\\n\\r\\n.mediasite-player__custom-controlbar-button > .vjs-menu-button {\\r\\n    background-image: var(--custom-controlbar-icon);\\r\\n    background-repeat: no-repeat;\\r\\n    background-position: center;\\r\\n    background-size: 1.5em;\\r\\n}\\r\\n\\r\\n.mediasite-player__custom-controlbar-button > .vjs-menu {\\r\\n    width: 18em;\\r\\n}\\r\\n\\r\\n.mediasite-player__main-control-bar .mediasite-player__custom-controlbar-button .vjs-menu ul.vjs-menu-content {\\r\\n    --controlbar-button-width: 4em;\\r\\n    max-height: calc(100vh - (50px + 1em)); /*Total height of the viewport minus the offset the menu is from the bottom of the viewport */\\r\\n}\\r\\n\\r\\n.video-js:is(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .mediasite-player__custom-controlbar-button.hide-large,\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .mediasite-player__custom-controlbar-button.hide-small {\\r\\n    display: none;\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/controlbar-menu/overflow-menu-button.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,8BAA8B;AAClC;;AAEA;IACI,+CAA+C;IAC/C,4BAA4B;IAC5B,2BAA2B;IAC3B,sBAAsB;AAC1B;;AAEA;IACI,WAAW;AACf;;AAEA;IACI,8BAA8B;IAC9B,sCAAsC,EAAE,6FAA6F;AACzI;;AAEA;;IAEI,aAAa;AACjB\",\"sourcesContent\":[\":root {\\r\\n    --custom-controlbar-icon: none;\\r\\n}\\r\\n\\r\\n.mediasite-player__custom-controlbar-button > .vjs-menu-button {\\r\\n    background-image: var(--custom-controlbar-icon);\\r\\n    background-repeat: no-repeat;\\r\\n    background-position: center;\\r\\n    background-size: 1.5em;\\r\\n}\\r\\n\\r\\n.mediasite-player__custom-controlbar-button > .vjs-menu {\\r\\n    width: 18em;\\r\\n}\\r\\n\\r\\n.mediasite-player__main-control-bar .mediasite-player__custom-controlbar-button .vjs-menu ul.vjs-menu-content {\\r\\n    --controlbar-button-width: 4em;\\r\\n    max-height: calc(100vh - (50px + 1em)); /*Total height of the viewport minus the offset the menu is from the bottom of the viewport */\\r\\n}\\r\\n\\r\\n.video-js:is(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .mediasite-player__custom-controlbar-button.hide-large,\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .mediasite-player__custom-controlbar-button.hide-small {\\r\\n    display: none;\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nimport ___CSS_LOADER_URL_IMPORT_0___ from \"../../../assets/images/close-black-24dp.svg\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".mediasite-player__custom-controlbar-button .vjs-menu-item {\\r\\n    --bg-size: 1em;\\r\\n    --bg-pos: 1em center;\\r\\n    --bg-repeat: no-repeat;\\r\\n    text-align: left;\\r\\n    padding-left: 2.5em;\\r\\n    padding-right: 2.5em;\\r\\n    background-size: var(--bg-size);\\r\\n    background-position: var(--bg-pos);\\r\\n    background-repeat: var(--bg-repeat);\\r\\n    position: relative;\\r\\n}\\r\\n\\r\\n/* Video.js overrides some styles on focus in browsers that support :focus-visible */\\r\\n.mediasite-player .mediasite-player__custom-controlbar-button .vjs-menu-item:focus:not(:focus-visible) {\\r\\n    background-size: var(--bg-size);\\r\\n    background-position: var(--bg-pos);\\r\\n    background-repeat: var(--bg-repeat);\\r\\n}\\r\\n\\r\\n/* Long notifications (such as links) break properly without overflowing the smaller notification */\\r\\n.mediasite-player__controlbar-dismissable-item {\\r\\n    word-break: break-word;\\r\\n}\\r\\n\\r\\n.mediasite-player__controlbar-dismissable-item button {\\r\\n    display: inline-block;\\r\\n    position: absolute;\\r\\n    right: .25em;\\r\\n    top: .25em;\\r\\n    width: 1.25em;\\r\\n    height: 1.25em;\\r\\n    border: 1px solid transparent;\\r\\n    background-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");\\r\\n    background-repeat: no-repeat;\\r\\n    background-size: 100%;\\r\\n    background-position: center;\\r\\n    filter: invert();\\r\\n}\\r\\n\\r\\n/* when hovering over the small notification, it matches the styling in the bigger version */\\r\\n.mediasite-player__controlbar-notifications-button button:hover {\\r\\n    border-color: #666;\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n/* Mobile icons aren't rendered in the same way as other overflow items, so this css wrangling needs to be done to get them to look the same*/\\r\\n.mediasite-player__custom-controlbar-button .icon-mobile {\\r\\n    margin-left: -1.7em;\\r\\n    margin-right: .75em;\\r\\n    line-height: .75em;\\r\\n}\\r\\n\\r\\n/* CSS Related to Hiding Items in the Control Bar and Moving Them Into the Overflow Menu*/\\r\\n.video-js.vjs-layout-small :is(.vjs-current-time, .vjs-duration, .vjs-time-divider, .vjs-volume-control) {\\r\\n    display: unset;\\r\\n}\\r\\n\\r\\n.video-js.vjs-layout-small .vjs-playback-rate.flex-menu-item,\\r\\n.video-js.vjs-layout-x-small .vjs-playback-rate.flex-menu-item,\\r\\n.video-js.vjs-layout-tiny .vjs-playback-rate.flex-menu-item {\\r\\n    display: block;\\r\\n}\\r\\n\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) button.vjs-picture-in-picture-control,\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) div.vjs-popout-button,\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .vjs-playback-rate-value,\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .mediasite-player__main-control-bar div.vjs-menu-button:not(.mediasite-player__custom-controlbar-button),\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .mediasite-player__main-control-bar div.vjs-menu-button:not(.mediasite-player__custom-controlbar-button) button {\\r\\n    width: 0px;\\r\\n}\\r\\n\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) button.vjs-picture-in-picture-control span.vjs-icon-placeholder,\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) div.vjs-popout-button button,\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .vjs-playback-rate-value,\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) div.vjs-menu-button:not(.mediasite-player__custom-controlbar-button) span.vjs-icon-placeholder {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.video-js:is(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .flex-menu-item {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.vjs-swap-streams-button.flex-menu-item .vjs-menu-item-text, .vjs-popout-button.flex-menu-item .vjs-menu-item-text {\\r\\n    margin-left: 0.85em;\\r\\n}\\r\\n\\r\\n.vjs-playback-rate.flex-menu-item .vjs-menu-item-text {\\r\\n    margin-left: -2em;\\r\\n}\\r\\n\\r\\n.vjs-playback-rate.flex-menu-item .vjs-icon-placeholder {\\r\\n    display: none;\\r\\n    width: 0px;\\r\\n    margin: 0px;\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/controlbar-menu/overflow-menu-item.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,cAAc;IACd,oBAAoB;IACpB,sBAAsB;IACtB,gBAAgB;IAChB,mBAAmB;IACnB,oBAAoB;IACpB,+BAA+B;IAC/B,kCAAkC;IAClC,mCAAmC;IACnC,kBAAkB;AACtB;;AAEA,oFAAoF;AACpF;IACI,+BAA+B;IAC/B,kCAAkC;IAClC,mCAAmC;AACvC;;AAEA,mGAAmG;AACnG;IACI,sBAAsB;AAC1B;;AAEA;IACI,qBAAqB;IACrB,kBAAkB;IAClB,YAAY;IACZ,UAAU;IACV,aAAa;IACb,cAAc;IACd,6BAA6B;IAC7B,yDAAoE;IACpE,4BAA4B;IAC5B,qBAAqB;IACrB,2BAA2B;IAC3B,gBAAgB;AACpB;;AAEA,4FAA4F;AAC5F;IACI,kBAAkB;IAClB,eAAe;AACnB;;AAEA,6IAA6I;AAC7I;IACI,mBAAmB;IACnB,mBAAmB;IACnB,kBAAkB;AACtB;;AAEA,yFAAyF;AACzF;IACI,cAAc;AAClB;;AAEA;;;IAGI,cAAc;AAClB;;AAEA;;;;;IAKI,UAAU;AACd;;AAEA;;;;IAII,aAAa;AACjB;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,aAAa;IACb,UAAU;IACV,WAAW;AACf\",\"sourcesContent\":[\".mediasite-player__custom-controlbar-button .vjs-menu-item {\\r\\n    --bg-size: 1em;\\r\\n    --bg-pos: 1em center;\\r\\n    --bg-repeat: no-repeat;\\r\\n    text-align: left;\\r\\n    padding-left: 2.5em;\\r\\n    padding-right: 2.5em;\\r\\n    background-size: var(--bg-size);\\r\\n    background-position: var(--bg-pos);\\r\\n    background-repeat: var(--bg-repeat);\\r\\n    position: relative;\\r\\n}\\r\\n\\r\\n/* Video.js overrides some styles on focus in browsers that support :focus-visible */\\r\\n.mediasite-player .mediasite-player__custom-controlbar-button .vjs-menu-item:focus:not(:focus-visible) {\\r\\n    background-size: var(--bg-size);\\r\\n    background-position: var(--bg-pos);\\r\\n    background-repeat: var(--bg-repeat);\\r\\n}\\r\\n\\r\\n/* Long notifications (such as links) break properly without overflowing the smaller notification */\\r\\n.mediasite-player__controlbar-dismissable-item {\\r\\n    word-break: break-word;\\r\\n}\\r\\n\\r\\n.mediasite-player__controlbar-dismissable-item button {\\r\\n    display: inline-block;\\r\\n    position: absolute;\\r\\n    right: .25em;\\r\\n    top: .25em;\\r\\n    width: 1.25em;\\r\\n    height: 1.25em;\\r\\n    border: 1px solid transparent;\\r\\n    background-image: url(\\\"../../../assets/images/close-black-24dp.svg\\\");\\r\\n    background-repeat: no-repeat;\\r\\n    background-size: 100%;\\r\\n    background-position: center;\\r\\n    filter: invert();\\r\\n}\\r\\n\\r\\n/* when hovering over the small notification, it matches the styling in the bigger version */\\r\\n.mediasite-player__controlbar-notifications-button button:hover {\\r\\n    border-color: #666;\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n/* Mobile icons aren't rendered in the same way as other overflow items, so this css wrangling needs to be done to get them to look the same*/\\r\\n.mediasite-player__custom-controlbar-button .icon-mobile {\\r\\n    margin-left: -1.7em;\\r\\n    margin-right: .75em;\\r\\n    line-height: .75em;\\r\\n}\\r\\n\\r\\n/* CSS Related to Hiding Items in the Control Bar and Moving Them Into the Overflow Menu*/\\r\\n.video-js.vjs-layout-small :is(.vjs-current-time, .vjs-duration, .vjs-time-divider, .vjs-volume-control) {\\r\\n    display: unset;\\r\\n}\\r\\n\\r\\n.video-js.vjs-layout-small .vjs-playback-rate.flex-menu-item,\\r\\n.video-js.vjs-layout-x-small .vjs-playback-rate.flex-menu-item,\\r\\n.video-js.vjs-layout-tiny .vjs-playback-rate.flex-menu-item {\\r\\n    display: block;\\r\\n}\\r\\n\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) button.vjs-picture-in-picture-control,\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) div.vjs-popout-button,\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .vjs-playback-rate-value,\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .mediasite-player__main-control-bar div.vjs-menu-button:not(.mediasite-player__custom-controlbar-button),\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .mediasite-player__main-control-bar div.vjs-menu-button:not(.mediasite-player__custom-controlbar-button) button {\\r\\n    width: 0px;\\r\\n}\\r\\n\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) button.vjs-picture-in-picture-control span.vjs-icon-placeholder,\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) div.vjs-popout-button button,\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .vjs-playback-rate-value,\\r\\n.video-js:not(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) div.vjs-menu-button:not(.mediasite-player__custom-controlbar-button) span.vjs-icon-placeholder {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.video-js:is(.vjs-layout-large, .vjs-layout-x-large, .vjs-layout-huge) .flex-menu-item {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.vjs-swap-streams-button.flex-menu-item .vjs-menu-item-text, .vjs-popout-button.flex-menu-item .vjs-menu-item-text {\\r\\n    margin-left: 0.85em;\\r\\n}\\r\\n\\r\\n.vjs-playback-rate.flex-menu-item .vjs-menu-item-text {\\r\\n    margin-left: -2em;\\r\\n}\\r\\n\\r\\n.vjs-playback-rate.flex-menu-item .vjs-icon-placeholder {\\r\\n    display: none;\\r\\n    width: 0px;\\r\\n    margin: 0px;\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".mediasite-player__downloads li {\\r\\n    margin-bottom: 10px;\\r\\n    font-size: 1rem;\\r\\n}\\r\\n\\r\\n.mediasite-player__downloads li:hover a {\\r\\n    filter: brightness(75%);\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/downloads.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,mBAAmB;IACnB,eAAe;AACnB;;AAEA;IACI,uBAAuB;AAC3B\",\"sourcesContent\":[\".mediasite-player__downloads li {\\r\\n    margin-bottom: 10px;\\r\\n    font-size: 1rem;\\r\\n}\\r\\n\\r\\n.mediasite-player__downloads li:hover a {\\r\\n    filter: brightness(75%);\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".mediasite-player__hotspots_wrapper {\\r\\n    grid-area: video;\\r\\n    position: relative;\\r\\n    display: flex;\\r\\n    justify-content: center;\\r\\n    align-items: center;\\r\\n    pointer-events: none;\\r\\n    z-index: var(--modal-dialog-panel-z-index); /* so they can exist above other stuff that appears on the presentation itself*/\\r\\n}\\r\\n\\r\\n.mediasite-player__hotspots_container {\\r\\n    position: absolute;\\r\\n    height: var(--video-height);\\r\\n    width: var(--video-width);\\r\\n}\\r\\n\\r\\n/*when there is no hotspots, or when we're zoomed in, hide the hotspot container to prevent conflicts in interactivity */\\r\\n.mediasite-player__hotspots_container:empty,\\r\\n.mediasite-player--smartzoom-zoomed .mediasite-player__hotspots_container {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.mediasite-player__hotspot {\\r\\n    position: absolute;\\r\\n    pointer-events: auto;\\r\\n    line-height: 1.42857143;\\r\\n}\\r\\n\\r\\n/* tempory visual change for hotspots to show user can interact with them */\\r\\n.mediasite-player__hotspot:not(.mediasite-player__hotspot-holder):hover,\\r\\n.mediasite-player__hotspot:not(.mediasite-player__hotspot-holder):focus {\\r\\n    outline: 3px solid black;\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n.mediasite-player__hotspot-circle {\\r\\n    border-radius: 1000px;\\r\\n    aspect-ratio: 1/1;\\r\\n}\\r\\n\\r\\n.mediasite-player__hotspot-holder {\\r\\n    display: flex;\\r\\n}\\r\\n\\r\\n.mediasite-player__hotspot-button {\\r\\n    width: -webkit-fit-content;\\r\\n    width: -moz-fit-content;\\r\\n    width: fit-content;\\r\\n    height: -webkit-fit-content;\\r\\n    height: -moz-fit-content;\\r\\n    height: fit-content;\\r\\n    white-space: nowrap;\\r\\n    padding: .75em 2.75em;\\r\\n    border-radius: 200px;\\r\\n    background-color: var(--main-background-color);\\r\\n    color: var(--main-secondary-color);\\r\\n}\\r\\n\\r\\n.mediasite-player__hotspot-button:hover {\\r\\n    background-color: var(--main-background-hover-color);\\r\\n    color: var(--main-secondary-hover-color);\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n.mediasite-player__hotspot-button:active,\\r\\n.mediasite-player__hotspot-button:focus {\\r\\n    background-color: var(--main-background-active-color);\\r\\n    color: var(--main-secondary-active-color);\\r\\n}\\r\\n\\r\\n.mediasite-player__hotspot-text {\\r\\n    pointer-events: none;\\r\\n    padding: 0px 2px;\\r\\n    display: flex;\\r\\n    justify-content: var(--text-alignment);\\r\\n    text-align: var(--text-alignment);\\r\\n    align-content: center;\\r\\n}\\r\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/hotspots.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,gBAAgB;IAChB,kBAAkB;IAClB,aAAa;IACb,uBAAuB;IACvB,mBAAmB;IACnB,oBAAoB;IACpB,0CAA0C,EAAE,+EAA+E;AAC/H;;AAEA;IACI,kBAAkB;IAClB,2BAA2B;IAC3B,yBAAyB;AAC7B;;AAEA,wHAAwH;AACxH;;IAEI,aAAa;AACjB;;AAEA;IACI,kBAAkB;IAClB,oBAAoB;IACpB,uBAAuB;AAC3B;;AAEA,2EAA2E;AAC3E;;IAEI,wBAAwB;IACxB,eAAe;AACnB;;AAEA;IACI,qBAAqB;IACrB,iBAAiB;AACrB;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,0BAAkB;IAAlB,uBAAkB;IAAlB,kBAAkB;IAClB,2BAAmB;IAAnB,wBAAmB;IAAnB,mBAAmB;IACnB,mBAAmB;IACnB,qBAAqB;IACrB,oBAAoB;IACpB,8CAA8C;IAC9C,kCAAkC;AACtC;;AAEA;IACI,oDAAoD;IACpD,wCAAwC;IACxC,eAAe;AACnB;;AAEA;;IAEI,qDAAqD;IACrD,yCAAyC;AAC7C;;AAEA;IACI,oBAAoB;IACpB,gBAAgB;IAChB,aAAa;IACb,sCAAsC;IACtC,iCAAiC;IACjC,qBAAqB;AACzB\",\"sourcesContent\":[\".mediasite-player__hotspots_wrapper {\\r\\n    grid-area: video;\\r\\n    position: relative;\\r\\n    display: flex;\\r\\n    justify-content: center;\\r\\n    align-items: center;\\r\\n    pointer-events: none;\\r\\n    z-index: var(--modal-dialog-panel-z-index); /* so they can exist above other stuff that appears on the presentation itself*/\\r\\n}\\r\\n\\r\\n.mediasite-player__hotspots_container {\\r\\n    position: absolute;\\r\\n    height: var(--video-height);\\r\\n    width: var(--video-width);\\r\\n}\\r\\n\\r\\n/*when there is no hotspots, or when we're zoomed in, hide the hotspot container to prevent conflicts in interactivity */\\r\\n.mediasite-player__hotspots_container:empty,\\r\\n.mediasite-player--smartzoom-zoomed .mediasite-player__hotspots_container {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.mediasite-player__hotspot {\\r\\n    position: absolute;\\r\\n    pointer-events: auto;\\r\\n    line-height: 1.42857143;\\r\\n}\\r\\n\\r\\n/* tempory visual change for hotspots to show user can interact with them */\\r\\n.mediasite-player__hotspot:not(.mediasite-player__hotspot-holder):hover,\\r\\n.mediasite-player__hotspot:not(.mediasite-player__hotspot-holder):focus {\\r\\n    outline: 3px solid black;\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n.mediasite-player__hotspot-circle {\\r\\n    border-radius: 1000px;\\r\\n    aspect-ratio: 1/1;\\r\\n}\\r\\n\\r\\n.mediasite-player__hotspot-holder {\\r\\n    display: flex;\\r\\n}\\r\\n\\r\\n.mediasite-player__hotspot-button {\\r\\n    width: fit-content;\\r\\n    height: fit-content;\\r\\n    white-space: nowrap;\\r\\n    padding: .75em 2.75em;\\r\\n    border-radius: 200px;\\r\\n    background-color: var(--main-background-color);\\r\\n    color: var(--main-secondary-color);\\r\\n}\\r\\n\\r\\n.mediasite-player__hotspot-button:hover {\\r\\n    background-color: var(--main-background-hover-color);\\r\\n    color: var(--main-secondary-hover-color);\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n.mediasite-player__hotspot-button:active,\\r\\n.mediasite-player__hotspot-button:focus {\\r\\n    background-color: var(--main-background-active-color);\\r\\n    color: var(--main-secondary-active-color);\\r\\n}\\r\\n\\r\\n.mediasite-player__hotspot-text {\\r\\n    pointer-events: none;\\r\\n    padding: 0px 2px;\\r\\n    display: flex;\\r\\n    justify-content: var(--text-alignment);\\r\\n    text-align: var(--text-alignment);\\r\\n    align-content: center;\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".mediasite-player__logging-window {\\r\\n    position: absolute;\\r\\n    top: 1em;\\r\\n    right: 1em;\\r\\n    width: 800px;\\r\\n    height: 1024px;\\r\\n    max-width: 50%;\\r\\n    max-height: 50%;\\r\\n    background-color: rgba(0, 0, 0, .95);\\r\\n    -webkit-backdrop-filter: blur(1em);\\r\\n            backdrop-filter: blur(1em);\\r\\n    color: #fff;\\r\\n    z-index: var(--modal-dialog-z-index);\\r\\n    overflow-y: scroll;\\r\\n    overflow-x: hidden;\\r\\n    font-size: 12px;\\r\\n}\\r\\n\\r\\n.mediasite-player__logging-window > table {\\r\\n    width: 100%;\\r\\n    text-align: left;\\r\\n    border-collapse: collapse;\\r\\n    table-layout: fixed;\\r\\n}\\r\\n\\r\\n.mediasite-player__logging-window :where(td, th) {\\r\\n    padding: 1em;\\r\\n    border-bottom: 1px solid #333;\\r\\n}\\r\\n\\r\\n.mediasite-player__logging-window > header {\\r\\n    font-size: 1.5em;\\r\\n    padding: calc((2 / 3) * 1em);\\r\\n}\\r\\n\\r\\n.mediasite-player__logging-window :where(th, header) {\\r\\n    background-color: #111;\\r\\n}\\r\\n\\r\\n.mediasite-player__logging-window td:not(:first-child):not(:last-child) {\\r\\n    overflow-x: auto;\\r\\n}\\r\\n\\r\\n.mediasite-player__logging-window th {\\r\\n    position: sticky;\\r\\n    top: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player__logging-window th:where(:first-child, :last-child) {\\r\\n    width: 100px;\\r\\n}\\r\\n\\r\\n.mediasite-player__logging-window tr:last-child td {\\r\\n    border-bottom: none;\\r\\n}\\r\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/logging.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,kBAAkB;IAClB,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,cAAc;IACd,cAAc;IACd,eAAe;IACf,oCAAoC;IACpC,kCAA0B;YAA1B,0BAA0B;IAC1B,WAAW;IACX,oCAAoC;IACpC,kBAAkB;IAClB,kBAAkB;IAClB,eAAe;AACnB;;AAEA;IACI,WAAW;IACX,gBAAgB;IAChB,yBAAyB;IACzB,mBAAmB;AACvB;;AAEA;IACI,YAAY;IACZ,6BAA6B;AACjC;;AAEA;IACI,gBAAgB;IAChB,4BAA4B;AAChC;;AAEA;IACI,sBAAsB;AAC1B;;AAEA;IACI,gBAAgB;AACpB;;AAEA;IACI,gBAAgB;IAChB,MAAM;AACV;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI,mBAAmB;AACvB\",\"sourcesContent\":[\".mediasite-player__logging-window {\\r\\n    position: absolute;\\r\\n    top: 1em;\\r\\n    right: 1em;\\r\\n    width: 800px;\\r\\n    height: 1024px;\\r\\n    max-width: 50%;\\r\\n    max-height: 50%;\\r\\n    background-color: rgba(0, 0, 0, .95);\\r\\n    backdrop-filter: blur(1em);\\r\\n    color: #fff;\\r\\n    z-index: var(--modal-dialog-z-index);\\r\\n    overflow-y: scroll;\\r\\n    overflow-x: hidden;\\r\\n    font-size: 12px;\\r\\n}\\r\\n\\r\\n.mediasite-player__logging-window > table {\\r\\n    width: 100%;\\r\\n    text-align: left;\\r\\n    border-collapse: collapse;\\r\\n    table-layout: fixed;\\r\\n}\\r\\n\\r\\n.mediasite-player__logging-window :where(td, th) {\\r\\n    padding: 1em;\\r\\n    border-bottom: 1px solid #333;\\r\\n}\\r\\n\\r\\n.mediasite-player__logging-window > header {\\r\\n    font-size: 1.5em;\\r\\n    padding: calc((2 / 3) * 1em);\\r\\n}\\r\\n\\r\\n.mediasite-player__logging-window :where(th, header) {\\r\\n    background-color: #111;\\r\\n}\\r\\n\\r\\n.mediasite-player__logging-window td:not(:first-child):not(:last-child) {\\r\\n    overflow-x: auto;\\r\\n}\\r\\n\\r\\n.mediasite-player__logging-window th {\\r\\n    position: sticky;\\r\\n    top: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player__logging-window th:where(:first-child, :last-child) {\\r\\n    width: 100px;\\r\\n}\\r\\n\\r\\n.mediasite-player__logging-window tr:last-child td {\\r\\n    border-bottom: none;\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nimport ___CSS_LOADER_URL_IMPORT_0___ from \"../../assets/images/DefaultPresenter.svg\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".mediasite-player__metadata-modal .vjs-modal-dialog-content {\\r\\n    display: grid;\\r\\n    grid-template-rows: auto -webkit-max-content;\\r\\n    grid-template-rows: auto max-content;\\r\\n    grid-template-columns: repeat(auto-fit, minmax(min(350px, 100%), 1fr));\\r\\n    align-content: start;\\r\\n}\\r\\n\\r\\n.mediasite-player__metadata-modal h3 {\\r\\n    margin-bottom: .35rem;\\r\\n}\\r\\n\\r\\n.mediasite-player__metadata-modal a:hover {\\r\\n    filter: brightness(75%);\\r\\n}\\r\\n\\r\\n.mediasite-player__metadata-modal-header {\\r\\n    grid-column: 1 / -1;\\r\\n}\\r\\n\\r\\n.mediasite-player__metadata-modal-description {\\r\\n    line-height: 1.75em;\\r\\n}\\r\\n\\r\\n.mediasite-player__metadata-modal-title {\\r\\n    margin-bottom: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player__date-time-duration-container {\\r\\n    margin: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player__date-time-duration-container > * {\\r\\n    color: var(--modal-dialog-fg-color);\\r\\n    padding-right: .75em;\\r\\n    filter: brightness(75%);\\r\\n}\\r\\n\\r\\n.mediasite-player__date-time-duration-container > *:not(:first-child) {\\r\\n    border-left: 1px solid;\\r\\n    padding-left: .75em;\\r\\n}\\r\\n\\r\\n.mediasite-player__metadata-modal-speaker-list {\\r\\n    padding: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player__speaker-bio {\\r\\n    display: grid;\\r\\n    grid-template-columns: 60px 1fr;\\r\\n    grid-gap: 1em;\\r\\n    margin-bottom: 1em;\\r\\n    align-items: center;\\r\\n}\\r\\n\\r\\n    .mediasite-player__speaker-bio #default-presenter {\\r\\n        background-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");\\r\\n        background-repeat: no-repeat;\\r\\n        height: 80px;\\r\\n        width: 60px;\\r\\n    }\\r\\n\\r\\n.mediasite-player__speaker-bio > p, .mediasite-player__metadata-modal-content h2 {\\r\\n    margin-top: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player__speaker-bio > img {\\r\\n    max-width: 100%;\\r\\n}\\r\\n\\r\\n.mediasite-player__metadata-modal-links-list {\\r\\n    list-style: none;\\r\\n    padding: 0;\\r\\n}\\r\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/metadata.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,aAAa;IACb,4CAAoC;IAApC,oCAAoC;IACpC,sEAAsE;IACtE,oBAAoB;AACxB;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,uBAAuB;AAC3B;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,gBAAgB;AACpB;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,mCAAmC;IACnC,oBAAoB;IACpB,uBAAuB;AAC3B;;AAEA;IACI,sBAAsB;IACtB,mBAAmB;AACvB;;AAEA;IACI,UAAU;AACd;;AAEA;IACI,aAAa;IACb,+BAA+B;IAC/B,aAAa;IACb,kBAAkB;IAClB,mBAAmB;AACvB;;IAEI;QACI,yDAAiE;QACjE,4BAA4B;QAC5B,YAAY;QACZ,WAAW;IACf;;AAEJ;IACI,aAAa;AACjB;;AAEA;IACI,eAAe;AACnB;;AAEA;IACI,gBAAgB;IAChB,UAAU;AACd\",\"sourcesContent\":[\".mediasite-player__metadata-modal .vjs-modal-dialog-content {\\r\\n    display: grid;\\r\\n    grid-template-rows: auto max-content;\\r\\n    grid-template-columns: repeat(auto-fit, minmax(min(350px, 100%), 1fr));\\r\\n    align-content: start;\\r\\n}\\r\\n\\r\\n.mediasite-player__metadata-modal h3 {\\r\\n    margin-bottom: .35rem;\\r\\n}\\r\\n\\r\\n.mediasite-player__metadata-modal a:hover {\\r\\n    filter: brightness(75%);\\r\\n}\\r\\n\\r\\n.mediasite-player__metadata-modal-header {\\r\\n    grid-column: 1 / -1;\\r\\n}\\r\\n\\r\\n.mediasite-player__metadata-modal-description {\\r\\n    line-height: 1.75em;\\r\\n}\\r\\n\\r\\n.mediasite-player__metadata-modal-title {\\r\\n    margin-bottom: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player__date-time-duration-container {\\r\\n    margin: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player__date-time-duration-container > * {\\r\\n    color: var(--modal-dialog-fg-color);\\r\\n    padding-right: .75em;\\r\\n    filter: brightness(75%);\\r\\n}\\r\\n\\r\\n.mediasite-player__date-time-duration-container > *:not(:first-child) {\\r\\n    border-left: 1px solid;\\r\\n    padding-left: .75em;\\r\\n}\\r\\n\\r\\n.mediasite-player__metadata-modal-speaker-list {\\r\\n    padding: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player__speaker-bio {\\r\\n    display: grid;\\r\\n    grid-template-columns: 60px 1fr;\\r\\n    grid-gap: 1em;\\r\\n    margin-bottom: 1em;\\r\\n    align-items: center;\\r\\n}\\r\\n\\r\\n    .mediasite-player__speaker-bio #default-presenter {\\r\\n        background-image: url('../../assets/images/DefaultPresenter.svg');\\r\\n        background-repeat: no-repeat;\\r\\n        height: 80px;\\r\\n        width: 60px;\\r\\n    }\\r\\n\\r\\n.mediasite-player__speaker-bio > p, .mediasite-player__metadata-modal-content h2 {\\r\\n    margin-top: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player__speaker-bio > img {\\r\\n    max-width: 100%;\\r\\n}\\r\\n\\r\\n.mediasite-player__metadata-modal-links-list {\\r\\n    list-style: none;\\r\\n    padding: 0;\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".mediasite-player__notifications-container {\\r\\n    font-size: 1rem;\\r\\n    display: flex;\\r\\n    flex-direction: column;\\r\\n    justify-content: flex-end;\\r\\n    width: 22em;\\r\\n    z-index: var(--modal-dialog-z-index);\\r\\n    pointer-events: none;\\r\\n    grid-area: video;\\r\\n    justify-self: end;\\r\\n    margin-bottom: 6em;\\r\\n    margin-right: 1em;\\r\\n    overflow: visible;\\r\\n    position: absolute;\\r\\n    bottom: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player__controlbar-notifications-button > .vjs-menu-button {\\r\\n    --rotate-angle: 30deg;\\r\\n    animation: notifications-appear .5s ease;\\r\\n}\\r\\n\\r\\n@keyframes notifications-appear {\\r\\n    0% {\\r\\n    }\\r\\n\\r\\n    25% {\\r\\n        transform: rotateZ(var(--rotate-angle));\\r\\n    }\\r\\n\\r\\n    50% {\\r\\n        transform: rotateZ(calc(-1 * var(--rotate-angle)));\\r\\n    }\\r\\n\\r\\n    75% {\\r\\n        transform: rotateZ(var(--rotate-angle));\\r\\n    }\\r\\n\\r\\n    100% {\\r\\n        transform: rotateZ(0deg);\\r\\n    }\\r\\n}\\r\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/notifications.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,eAAe;IACf,aAAa;IACb,sBAAsB;IACtB,yBAAyB;IACzB,WAAW;IACX,oCAAoC;IACpC,oBAAoB;IACpB,gBAAgB;IAChB,iBAAiB;IACjB,kBAAkB;IAClB,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,SAAS;AACb;;AAEA;IACI,qBAAqB;IACrB,wCAAwC;AAC5C;;AAEA;IACI;IACA;;IAEA;QACI,uCAAuC;IAC3C;;IAEA;QACI,kDAAkD;IACtD;;IAEA;QACI,uCAAuC;IAC3C;;IAEA;QACI,wBAAwB;IAC5B;AACJ\",\"sourcesContent\":[\".mediasite-player__notifications-container {\\r\\n    font-size: 1rem;\\r\\n    display: flex;\\r\\n    flex-direction: column;\\r\\n    justify-content: flex-end;\\r\\n    width: 22em;\\r\\n    z-index: var(--modal-dialog-z-index);\\r\\n    pointer-events: none;\\r\\n    grid-area: video;\\r\\n    justify-self: end;\\r\\n    margin-bottom: 6em;\\r\\n    margin-right: 1em;\\r\\n    overflow: visible;\\r\\n    position: absolute;\\r\\n    bottom: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player__controlbar-notifications-button > .vjs-menu-button {\\r\\n    --rotate-angle: 30deg;\\r\\n    animation: notifications-appear .5s ease;\\r\\n}\\r\\n\\r\\n@keyframes notifications-appear {\\r\\n    0% {\\r\\n    }\\r\\n\\r\\n    25% {\\r\\n        transform: rotateZ(var(--rotate-angle));\\r\\n    }\\r\\n\\r\\n    50% {\\r\\n        transform: rotateZ(calc(-1 * var(--rotate-angle)));\\r\\n    }\\r\\n\\r\\n    75% {\\r\\n        transform: rotateZ(var(--rotate-angle));\\r\\n    }\\r\\n\\r\\n    100% {\\r\\n        transform: rotateZ(0deg);\\r\\n    }\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nimport ___CSS_LOADER_URL_IMPORT_0___ from \"../../../assets/images/close-black-24dp.svg\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".mediasite-player__notification-item {\\r\\n    --background-opacity: .95;\\r\\n    --border-width: 1px;\\r\\n    --border-color: #333;\\r\\n    --notification-height: 3.5em;\\r\\n    --notification-margin: 1em;\\r\\n    --close-button-size: calc(.5 * var(--notification-height));\\r\\n    --icon-size: 1em;\\r\\n    --animation-duration: calc(1s / 3);\\r\\n    --notification-icon: none;\\r\\n    position: relative;\\r\\n    height: var(--notification-height);\\r\\n    border: var(--border-width) solid var(--border-color);\\r\\n    background-color: rgba(38, 38, 38, var(--background-opacity));\\r\\n    -webkit-backdrop-filter: blur(1em);\\r\\n            backdrop-filter: blur(1em);\\r\\n    box-shadow: 0 0 1em rgba(0, 0, 0, .25);\\r\\n    -webkit-user-select: none;\\r\\n            user-select: none;\\r\\n    cursor: pointer;\\r\\n    pointer-events: all;\\r\\n    font-size: 1.125em;\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-item--animating-in {\\r\\n    animation: notification-enter var(--animation-duration) ease;\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-item:is(:active, :hover) {\\r\\n    --background-opacity: 1;\\r\\n    --border-color: #666;\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-item:not(:last-child) {\\r\\n    margin-bottom: var(--notification-margin);\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-description {\\r\\n    margin-top: .5em;\\r\\n    font-size: .75em;\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-item .mediasite-player__notification-clickable-surface {\\r\\n    --icon-gutter-size: calc(2.5 * var(--icon-size));\\r\\n    position: absolute;\\r\\n    inset: 0;\\r\\n    width: 100%;\\r\\n    cursor: pointer;\\r\\n    border: none;\\r\\n    background-image: var(--notification-icon);\\r\\n    background-position: calc((.5 * var(--icon-gutter-size)) - (.5 * var(--icon-size))) center;\\r\\n    background-repeat: no-repeat;\\r\\n    background-size: var(--icon-size);\\r\\n    padding: 0 var(--icon-gutter-size);\\r\\n    text-align: left;\\r\\n    overflow: hidden;\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-clickable-surface > * {\\r\\n    display: block;\\r\\n    white-space: nowrap;\\r\\n    overflow: hidden;\\r\\n    text-overflow: ellipsis;\\r\\n    line-height: 1.25;\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-item > .mediasite-player__notification-close-button {\\r\\n    position: absolute;\\r\\n    top: 0;\\r\\n    right: 0;\\r\\n    width: var(--close-button-size);\\r\\n    height: var(--close-button-size);\\r\\n    background-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");\\r\\n    background-size: var(--icon-size);\\r\\n    background-repeat: no-repeat;\\r\\n    background-position: center;\\r\\n    filter: invert();\\r\\n    border-left: 1px solid transparent;\\r\\n    border-bottom: 1px solid transparent;\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-item > button:hover {\\r\\n    border-color: var(--border-color);\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-item--animating-out {\\r\\n    --notification-transform: calc(var(--notification-height) + var(--notification-margin));\\r\\n    opacity: 0;\\r\\n    transform: translateX(100%);\\r\\n    animation: notification-exit var(--animation-duration) ease forwards;\\r\\n    margin-top: calc(-1 * var(--notification-transform));\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-item--animating-up {\\r\\n    animation: notification-shift-up var(--animation-duration) ease;\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-item--animating-down {\\r\\n    animation: notification-shift-down var(--animation-duration) ease;\\r\\n}\\r\\n\\r\\n@keyframes notification-enter {\\r\\n    from {\\r\\n        opacity: 0;\\r\\n        transform: translateX(100%);\\r\\n    }\\r\\n    to {\\r\\n        opacity: 1;\\r\\n        transform: translateX(0);\\r\\n    }\\r\\n}\\r\\n\\r\\n@keyframes notification-exit {\\r\\n    from {\\r\\n        transform: translateX(0);\\r\\n        opacity: 1;\\r\\n    }\\r\\n    to {\\r\\n        transform: translateX(100%);\\r\\n        opacity: 0;\\r\\n    }\\r\\n}\\r\\n\\r\\n@keyframes notification-shift-up {\\r\\n    from {\\r\\n        transform: translateY(calc(100% + var(--notification-margin)));\\r\\n    }\\r\\n    to {\\r\\n        transform: translateY(0);\\r\\n    }\\r\\n}\\r\\n\\r\\n@keyframes notification-shift-down {\\r\\n    from {\\r\\n        transform: translateY(calc(-1 * (100% + var(--notification-margin))));\\r\\n    }\\r\\n    to {\\r\\n        transform: translateY(0);\\r\\n    }\\r\\n}\\r\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/notifications/notification-item.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,yBAAyB;IACzB,mBAAmB;IACnB,oBAAoB;IACpB,4BAA4B;IAC5B,0BAA0B;IAC1B,0DAA0D;IAC1D,gBAAgB;IAChB,kCAAkC;IAClC,yBAAyB;IACzB,kBAAkB;IAClB,kCAAkC;IAClC,qDAAqD;IACrD,6DAA6D;IAC7D,kCAA0B;YAA1B,0BAA0B;IAC1B,sCAAsC;IACtC,yBAAiB;YAAjB,iBAAiB;IACjB,eAAe;IACf,mBAAmB;IACnB,kBAAkB;AACtB;;AAEA;IACI,4DAA4D;AAChE;;AAEA;IACI,uBAAuB;IACvB,oBAAoB;AACxB;;AAEA;IACI,yCAAyC;AAC7C;;AAEA;IACI,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,gDAAgD;IAChD,kBAAkB;IAClB,QAAQ;IACR,WAAW;IACX,eAAe;IACf,YAAY;IACZ,0CAA0C;IAC1C,0FAA0F;IAC1F,4BAA4B;IAC5B,iCAAiC;IACjC,kCAAkC;IAClC,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,cAAc;IACd,mBAAmB;IACnB,gBAAgB;IAChB,uBAAuB;IACvB,iBAAiB;AACrB;;AAEA;IACI,kBAAkB;IAClB,MAAM;IACN,QAAQ;IACR,+BAA+B;IAC/B,gCAAgC;IAChC,yDAAkE;IAClE,iCAAiC;IACjC,4BAA4B;IAC5B,2BAA2B;IAC3B,gBAAgB;IAChB,kCAAkC;IAClC,oCAAoC;IACpC,eAAe;AACnB;;AAEA;IACI,iCAAiC;AACrC;;AAEA;IACI,uFAAuF;IACvF,UAAU;IACV,2BAA2B;IAC3B,oEAAoE;IACpE,oDAAoD;AACxD;;AAEA;IACI,+DAA+D;AACnE;;AAEA;IACI,iEAAiE;AACrE;;AAEA;IACI;QACI,UAAU;QACV,2BAA2B;IAC/B;IACA;QACI,UAAU;QACV,wBAAwB;IAC5B;AACJ;;AAEA;IACI;QACI,wBAAwB;QACxB,UAAU;IACd;IACA;QACI,2BAA2B;QAC3B,UAAU;IACd;AACJ;;AAEA;IACI;QACI,8DAA8D;IAClE;IACA;QACI,wBAAwB;IAC5B;AACJ;;AAEA;IACI;QACI,qEAAqE;IACzE;IACA;QACI,wBAAwB;IAC5B;AACJ\",\"sourcesContent\":[\".mediasite-player__notification-item {\\r\\n    --background-opacity: .95;\\r\\n    --border-width: 1px;\\r\\n    --border-color: #333;\\r\\n    --notification-height: 3.5em;\\r\\n    --notification-margin: 1em;\\r\\n    --close-button-size: calc(.5 * var(--notification-height));\\r\\n    --icon-size: 1em;\\r\\n    --animation-duration: calc(1s / 3);\\r\\n    --notification-icon: none;\\r\\n    position: relative;\\r\\n    height: var(--notification-height);\\r\\n    border: var(--border-width) solid var(--border-color);\\r\\n    background-color: rgba(38, 38, 38, var(--background-opacity));\\r\\n    backdrop-filter: blur(1em);\\r\\n    box-shadow: 0 0 1em rgba(0, 0, 0, .25);\\r\\n    user-select: none;\\r\\n    cursor: pointer;\\r\\n    pointer-events: all;\\r\\n    font-size: 1.125em;\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-item--animating-in {\\r\\n    animation: notification-enter var(--animation-duration) ease;\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-item:is(:active, :hover) {\\r\\n    --background-opacity: 1;\\r\\n    --border-color: #666;\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-item:not(:last-child) {\\r\\n    margin-bottom: var(--notification-margin);\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-description {\\r\\n    margin-top: .5em;\\r\\n    font-size: .75em;\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-item .mediasite-player__notification-clickable-surface {\\r\\n    --icon-gutter-size: calc(2.5 * var(--icon-size));\\r\\n    position: absolute;\\r\\n    inset: 0;\\r\\n    width: 100%;\\r\\n    cursor: pointer;\\r\\n    border: none;\\r\\n    background-image: var(--notification-icon);\\r\\n    background-position: calc((.5 * var(--icon-gutter-size)) - (.5 * var(--icon-size))) center;\\r\\n    background-repeat: no-repeat;\\r\\n    background-size: var(--icon-size);\\r\\n    padding: 0 var(--icon-gutter-size);\\r\\n    text-align: left;\\r\\n    overflow: hidden;\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-clickable-surface > * {\\r\\n    display: block;\\r\\n    white-space: nowrap;\\r\\n    overflow: hidden;\\r\\n    text-overflow: ellipsis;\\r\\n    line-height: 1.25;\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-item > .mediasite-player__notification-close-button {\\r\\n    position: absolute;\\r\\n    top: 0;\\r\\n    right: 0;\\r\\n    width: var(--close-button-size);\\r\\n    height: var(--close-button-size);\\r\\n    background-image: url(../../../assets/images/close-black-24dp.svg);\\r\\n    background-size: var(--icon-size);\\r\\n    background-repeat: no-repeat;\\r\\n    background-position: center;\\r\\n    filter: invert();\\r\\n    border-left: 1px solid transparent;\\r\\n    border-bottom: 1px solid transparent;\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-item > button:hover {\\r\\n    border-color: var(--border-color);\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-item--animating-out {\\r\\n    --notification-transform: calc(var(--notification-height) + var(--notification-margin));\\r\\n    opacity: 0;\\r\\n    transform: translateX(100%);\\r\\n    animation: notification-exit var(--animation-duration) ease forwards;\\r\\n    margin-top: calc(-1 * var(--notification-transform));\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-item--animating-up {\\r\\n    animation: notification-shift-up var(--animation-duration) ease;\\r\\n}\\r\\n\\r\\n.mediasite-player__notification-item--animating-down {\\r\\n    animation: notification-shift-down var(--animation-duration) ease;\\r\\n}\\r\\n\\r\\n@keyframes notification-enter {\\r\\n    from {\\r\\n        opacity: 0;\\r\\n        transform: translateX(100%);\\r\\n    }\\r\\n    to {\\r\\n        opacity: 1;\\r\\n        transform: translateX(0);\\r\\n    }\\r\\n}\\r\\n\\r\\n@keyframes notification-exit {\\r\\n    from {\\r\\n        transform: translateX(0);\\r\\n        opacity: 1;\\r\\n    }\\r\\n    to {\\r\\n        transform: translateX(100%);\\r\\n        opacity: 0;\\r\\n    }\\r\\n}\\r\\n\\r\\n@keyframes notification-shift-up {\\r\\n    from {\\r\\n        transform: translateY(calc(100% + var(--notification-margin)));\\r\\n    }\\r\\n    to {\\r\\n        transform: translateY(0);\\r\\n    }\\r\\n}\\r\\n\\r\\n@keyframes notification-shift-down {\\r\\n    from {\\r\\n        transform: translateY(calc(-1 * (100% + var(--notification-margin))));\\r\\n    }\\r\\n    to {\\r\\n        transform: translateY(0);\\r\\n    }\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nimport ___CSS_LOADER_URL_IMPORT_0___ from \"../../assets/images/playcover-button.svg\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".mediasite-player__play-cover > :not(.mediasite-player__playcover-content-wrapper):not(.mediasite-player__playcover-play-button):not(.mediasite-player__title-overlay) {\\r\\n    margin-right: 2em;\\r\\n    margin-bottom: 2em;\\r\\n}\\r\\n\\r\\n.mediasite-player__playcover-content-wrapper {\\r\\n    align-items: center;\\r\\n    display: flex;\\r\\n    margin: min(2em, 5vmin);\\r\\n    padding: min(2em, 5vmin);\\r\\n    border: none;\\r\\n    max-width: max(45%, 60em);\\r\\n    transition: 0; /* Video.js has a default \\\"all\\\" transition, which we want to prevent. */\\r\\n    gap: 3.8em;\\r\\n}\\r\\n\\r\\n.mediasite-player__playcover-content-wrapper.has-quiz {\\r\\n    background-color: rgba(0, 0, 0, .8);\\r\\n    -webkit-backdrop-filter: blur(7px);\\r\\n            backdrop-filter: blur(7px);\\r\\n    border-radius: 5px;\\r\\n    align-items: normal;\\r\\n    padding:70px;\\r\\n}\\r\\n\\r\\n.mediasite-player .mediasite-player__playcover-play-button {\\r\\n    --play-button-size: min(20vmin, 135px);\\r\\n    margin: 0;\\r\\n    padding: 0;\\r\\n    border: none;\\r\\n    width: var(--play-button-size);\\r\\n    height: var(--play-button-size);\\r\\n    max-width: 135px;\\r\\n    max-height: 135px;\\r\\n    min-width: 50px;\\r\\n    min-height: 50px;\\r\\n    flex-shrink: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player .mediasite-player__playcover-play-button .vjs-icon-placeholder::before {\\r\\n    content: none;\\r\\n    top: 50%;\\r\\n    left: 50%;\\r\\n    width: auto;\\r\\n    height: auto;\\r\\n    transform: translate(-50%, -50%);\\r\\n    font-size: var(--play-button-size);\\r\\n}\\r\\n\\r\\n.mediasite-player .mediasite-player__playcover-play-button .mediasite-player__play-cover-play-icon-wrapper {\\r\\n    background-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");\\r\\n    background-size: var(--play-button-size);\\r\\n    background-repeat: no-repeat;\\r\\n    width: 100%;\\r\\n    height: 100%;\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n.mediasite-player .mediasite-player__playcover-play-button .mediasite-player__play-cover-play-icon-wrapper:hover {\\r\\n    filter: saturate(110%) brightness(105%);\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover-play-icon {\\r\\n    fill: #ed8b00;\\r\\n}\\r\\n\\r\\n.mediasite-player:hover .mediasite-player__play-cover-play-icon {\\r\\n    fill: #ffb750;\\r\\n}\\r\\n\\r\\n.mediasite-player__playcover-custom-content {\\r\\n    font-family: Verdana, Helvetica, sans-serif;\\r\\n    font-size: var(--playcover-font-size);\\r\\n    font-style: normal;\\r\\n    font-weight: 400;\\r\\n    text-align: left;\\r\\n    max-width: 100%;\\r\\n    max-height: 80vh;\\r\\n    overflow: auto;\\r\\n}\\r\\n\\r\\n.mediasite-player__playcover-custom-content #reset-answers-button-wrapper {\\r\\n    text-align: center;\\r\\n    margin-top:50px;\\r\\n}\\r\\n\\r\\n\\r\\n\\r\\n@media (min-width: 0px) and (min-height: 0px) {\\r\\n    .mediasite-player__play-cover {\\r\\n        --playcover-font-size: 12px;\\r\\n    }\\r\\n}\\r\\n\\r\\n@media (min-width: 350px) and (min-height: 197px) {\\r\\n    .mediasite-player__play-cover {\\r\\n        --playcover-font-size: 14px;\\r\\n    }\\r\\n}\\r\\n\\r\\n@media (min-width: 500px) and (min-height: 281px) {\\r\\n    .mediasite-player__play-cover {\\r\\n        --playcover-font-size: 16px;\\r\\n    }\\r\\n}\\r\\n\\r\\n@media (min-width: 750px) and (min-height: 422px) {\\r\\n    .mediasite-player__play-cover {\\r\\n        --playcover-font-size: 18px;\\r\\n    }\\r\\n}\\r\\n\\r\\n@media (min-width: 1100px) and (min-height: 619px) {\\r\\n    .mediasite-player__play-cover {\\r\\n        --playcover-font-size: 20px;\\r\\n    }\\r\\n}\\r\\n\\r\\n@media (min-width: 1500px) and (min-height: 844px) {\\r\\n    .mediasite-player__play-cover {\\r\\n        --playcover-font-size: 24px;\\r\\n    }\\r\\n}\\r\\n\\r\\n.mediasite-player__playcover-custom-content > :last-child, .mediasite-player__playcover-custom-content div > :last-child, .mediasite-player__playcover-custom-content p > :last-child {\\r\\n    margin-bottom: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player__playcover-custom-content h1 {\\r\\n    margin: 0;\\r\\n    margin-bottom: 25px;\\r\\n    font-family: Gilroy, Verdana, sans-serif;\\r\\n    font-size: calc(1.25 * var(--playcover-font-size));\\r\\n    font-weight: 400;\\r\\n    line-height: 1em;\\r\\n    letter-spacing: -0.015em;\\r\\n    color: #FFFFFF;\\r\\n}\\r\\n\\r\\n.mediasite-player__playcover-custom-content div, .mediasite-player__playcover-custom-content p {\\r\\n    margin: 0;\\r\\n    margin-bottom: 1em;\\r\\n    font-family: Verdana, Helvetica, sans-serif;\\r\\n    font-size: calc(0.6 * var(--playcover-font-size));\\r\\n    line-height: 1.5em;\\r\\n    letter-spacing: 0em;\\r\\n    color: #C7C8C6;\\r\\n}\\r\\n\\r\\n.video-js:not(.vjs-waiting) .mediasite-player__play-cover > *:not(.vjs-hidden):not(.mediasite-player__playcover-content-wrapper) {\\r\\n    display: block;\\r\\n}\\r\\n\\r\\n.video-js .mediasite-player__play-cover > *:not(.vjs-hidden) {\\r\\n    z-index: 1;\\r\\n    transition: transform .2s ease-out .25s, opacity .2s ease-out .25s, visibility 0s linear, background-color .1s ease, -webkit-backdrop-filter .1s ease;\\r\\n    transition: transform .2s ease-out .25s, opacity .2s ease-out .25s, visibility 0s linear, background-color .1s ease, backdrop-filter .1s ease;\\r\\n    transition: transform .2s ease-out .25s, opacity .2s ease-out .25s, visibility 0s linear, background-color .1s ease, backdrop-filter .1s ease, -webkit-backdrop-filter .1s ease;\\r\\n}\\r\\n\\r\\n.vjs-waiting .mediasite-player__play-cover > *:not(.vjs-hidden) {\\r\\n    visibility: hidden;\\r\\n    opacity: 0;\\r\\n    transition-delay: 0s, 0s, .1s, 0s;\\r\\n    transition-timing-function: ease-in;\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover::before, .mediasite-player__play-cover::after {\\r\\n    content: \\\"\\\";\\r\\n    display: block;\\r\\n    position: absolute;\\r\\n    background-position: center;\\r\\n    background-repeat: no-repeat;\\r\\n    background-image: inherit;\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover::before {\\r\\n    --blurred-bg-offset: 25px;\\r\\n    --blurred-bg-position: calc(-1 * var(--blurred-bg-offset));\\r\\n    --blurred-bg-size: calc(100% + (2 * var(--blurred-bg-offset)));\\r\\n    z-index: 0;\\r\\n    top: var(--blurred-bg-position);\\r\\n    left: var(--blurred-bg-position);\\r\\n    width: var(--blurred-bg-size);\\r\\n    height: var(--blurred-bg-size);\\r\\n    background-size: cover;\\r\\n    filter: blur(15px) brightness(70%) contrast(80%);\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover::after {\\r\\n    z-index: 0;\\r\\n    top: 0;\\r\\n    left: 0;\\r\\n    width: 100%;\\r\\n    height: 100%;\\r\\n    background-size: contain;\\r\\n    filter: drop-shadow(0 0 50px rgba(0, 0, 0, 0.9));\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover--dimmed::before {\\r\\n    filter: blur(15px) brightness(20%) contrast(80%);\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover--dimmed::after {\\r\\n    filter: drop-shadow(0 0 50px rgba(0, 0, 0, 0.9)) brightness(40%);\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover {\\r\\n    z-index: var(--play-cover-z-index);\\r\\n    background-size: 0;\\r\\n    animation: play-cover-fade-in .2s ease;\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover:not(.vjs-hidden) ~ .mediasite-player__layout {\\r\\n    visibility: hidden;\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover--preloading {\\r\\n    visibility: hidden;\\r\\n    animation: none;\\r\\n}\\r\\n\\r\\n@keyframes play-cover-fade-in {\\r\\n    from {\\r\\n        opacity: 0;\\r\\n    }\\r\\n    to {\\r\\n        opacity: 1;\\r\\n    }\\r\\n}\\r\\n\\r\\n.vjs-loading-spinner {\\r\\n    z-index: var(--loading-spinner-z-index);\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover:not(.vjs-hidden) {\\r\\n    display: flex;\\r\\n    justify-content: center;\\r\\n    align-content: center;\\r\\n    align-items: center;\\r\\n    flex-wrap: wrap;\\r\\n    padding: 2em;\\r\\n    background-color: #000;\\r\\n}\\r\\n\\r\\n.mediasite-player--play-cover-loading .mediasite-player__playcover-content-wrapper, .mediasite-player--play-cover-loading .vjs-control-bar {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.vjs-poster > * {\\r\\n    position: relative;\\r\\n    overflow: hidden;\\r\\n}\\r\\n\\r\\n.mediasite-player__title-overlay {\\r\\n    position: absolute;\\r\\n    bottom: 0;\\r\\n    left: 0;\\r\\n    width: 100%;\\r\\n    padding: 1em 1em 0.5em 1em;\\r\\n    margin: 0;\\r\\n    font-size: var(--playcover-font-size);\\r\\n    font-weight: normal;\\r\\n    background: linear-gradient(transparent, #000);\\r\\n    white-space: nowrap;\\r\\n    text-overflow: ellipsis;\\r\\n}\\r\\n\\r\\n.vjs-waiting .mediasite-player__title-overlay {\\r\\n    transform: translateY(100%);\\r\\n}\\r\\n\\r\\n@media(max-width: 500px) {\\r\\n    .mediasite-player__playcover-content-wrapper.has-quiz {\\r\\n        padding: min(2em, 5vmin);\\r\\n    }\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover.not-clickable {\\r\\n    cursor: default;\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/playcover.css\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\".mediasite-player__play-cover > :not(.mediasite-player__playcover-content-wrapper):not(.mediasite-player__playcover-play-button):not(.mediasite-player__title-overlay) {\\r\\n    margin-right: 2em;\\r\\n    margin-bottom: 2em;\\r\\n}\\r\\n\\r\\n.mediasite-player__playcover-content-wrapper {\\r\\n    align-items: center;\\r\\n    display: flex;\\r\\n    margin: min(2em, 5vmin);\\r\\n    padding: min(2em, 5vmin);\\r\\n    border: none;\\r\\n    max-width: max(45%, 60em);\\r\\n    transition: 0; /* Video.js has a default \\\"all\\\" transition, which we want to prevent. */\\r\\n    gap: 3.8em;\\r\\n}\\r\\n\\r\\n.mediasite-player__playcover-content-wrapper.has-quiz {\\r\\n    background-color: rgba(0, 0, 0, .8);\\r\\n    backdrop-filter: blur(7px);\\r\\n    border-radius: 5px;\\r\\n    align-items: normal;\\r\\n    padding:70px;\\r\\n}\\r\\n\\r\\n.mediasite-player .mediasite-player__playcover-play-button {\\r\\n    --play-button-size: min(20vmin, 135px);\\r\\n    margin: 0;\\r\\n    padding: 0;\\r\\n    border: none;\\r\\n    width: var(--play-button-size);\\r\\n    height: var(--play-button-size);\\r\\n    max-width: 135px;\\r\\n    max-height: 135px;\\r\\n    min-width: 50px;\\r\\n    min-height: 50px;\\r\\n    flex-shrink: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player .mediasite-player__playcover-play-button .vjs-icon-placeholder::before {\\r\\n    content: none;\\r\\n    top: 50%;\\r\\n    left: 50%;\\r\\n    width: auto;\\r\\n    height: auto;\\r\\n    transform: translate(-50%, -50%);\\r\\n    font-size: var(--play-button-size);\\r\\n}\\r\\n\\r\\n.mediasite-player .mediasite-player__playcover-play-button .mediasite-player__play-cover-play-icon-wrapper {\\r\\n    background-image: url(../../assets/images/playcover-button.svg);\\r\\n    background-size: var(--play-button-size);\\r\\n    background-repeat: no-repeat;\\r\\n    width: 100%;\\r\\n    height: 100%;\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n.mediasite-player .mediasite-player__playcover-play-button .mediasite-player__play-cover-play-icon-wrapper:hover {\\r\\n    filter: saturate(110%) brightness(105%);\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover-play-icon {\\r\\n    fill: #ed8b00;\\r\\n}\\r\\n\\r\\n.mediasite-player:hover .mediasite-player__play-cover-play-icon {\\r\\n    fill: #ffb750;\\r\\n}\\r\\n\\r\\n.mediasite-player__playcover-custom-content {\\r\\n    font-family: Verdana, Helvetica, sans-serif;\\r\\n    font-size: var(--playcover-font-size);\\r\\n    font-style: normal;\\r\\n    font-weight: 400;\\r\\n    text-align: left;\\r\\n    max-width: 100%;\\r\\n    max-height: 80vh;\\r\\n    overflow: auto;\\r\\n}\\r\\n\\r\\n.mediasite-player__playcover-custom-content #reset-answers-button-wrapper {\\r\\n    text-align: center;\\r\\n    margin-top:50px;\\r\\n}\\r\\n\\r\\n\\r\\n\\r\\n@media (min-width: 0px) and (min-height: 0px) {\\r\\n    .mediasite-player__play-cover {\\r\\n        --playcover-font-size: 12px;\\r\\n    }\\r\\n}\\r\\n\\r\\n@media (min-width: 350px) and (min-height: 197px) {\\r\\n    .mediasite-player__play-cover {\\r\\n        --playcover-font-size: 14px;\\r\\n    }\\r\\n}\\r\\n\\r\\n@media (min-width: 500px) and (min-height: 281px) {\\r\\n    .mediasite-player__play-cover {\\r\\n        --playcover-font-size: 16px;\\r\\n    }\\r\\n}\\r\\n\\r\\n@media (min-width: 750px) and (min-height: 422px) {\\r\\n    .mediasite-player__play-cover {\\r\\n        --playcover-font-size: 18px;\\r\\n    }\\r\\n}\\r\\n\\r\\n@media (min-width: 1100px) and (min-height: 619px) {\\r\\n    .mediasite-player__play-cover {\\r\\n        --playcover-font-size: 20px;\\r\\n    }\\r\\n}\\r\\n\\r\\n@media (min-width: 1500px) and (min-height: 844px) {\\r\\n    .mediasite-player__play-cover {\\r\\n        --playcover-font-size: 24px;\\r\\n    }\\r\\n}\\r\\n\\r\\n.mediasite-player__playcover-custom-content > :last-child, .mediasite-player__playcover-custom-content div > :last-child, .mediasite-player__playcover-custom-content p > :last-child {\\r\\n    margin-bottom: 0;\\r\\n}\\r\\n\\r\\n.mediasite-player__playcover-custom-content h1 {\\r\\n    margin: 0;\\r\\n    margin-bottom: 25px;\\r\\n    font-family: Gilroy, Verdana, sans-serif;\\r\\n    font-size: calc(1.25 * var(--playcover-font-size));\\r\\n    font-weight: 400;\\r\\n    line-height: 1em;\\r\\n    letter-spacing: -0.015em;\\r\\n    color: #FFFFFF;\\r\\n}\\r\\n\\r\\n.mediasite-player__playcover-custom-content div, .mediasite-player__playcover-custom-content p {\\r\\n    margin: 0;\\r\\n    margin-bottom: 1em;\\r\\n    font-family: Verdana, Helvetica, sans-serif;\\r\\n    font-size: calc(0.6 * var(--playcover-font-size));\\r\\n    line-height: 1.5em;\\r\\n    letter-spacing: 0em;\\r\\n    color: #C7C8C6;\\r\\n}\\r\\n\\r\\n.video-js:not(.vjs-waiting) .mediasite-player__play-cover > *:not(.vjs-hidden):not(.mediasite-player__playcover-content-wrapper) {\\r\\n    display: block;\\r\\n}\\r\\n\\r\\n.video-js .mediasite-player__play-cover > *:not(.vjs-hidden) {\\r\\n    z-index: 1;\\r\\n    transition: transform .2s ease-out .25s, opacity .2s ease-out .25s, visibility 0s linear, background-color .1s ease, backdrop-filter .1s ease;\\r\\n}\\r\\n\\r\\n.vjs-waiting .mediasite-player__play-cover > *:not(.vjs-hidden) {\\r\\n    visibility: hidden;\\r\\n    opacity: 0;\\r\\n    transition-delay: 0s, 0s, .1s, 0s;\\r\\n    transition-timing-function: ease-in;\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover::before, .mediasite-player__play-cover::after {\\r\\n    content: \\\"\\\";\\r\\n    display: block;\\r\\n    position: absolute;\\r\\n    background-position: center;\\r\\n    background-repeat: no-repeat;\\r\\n    background-image: inherit;\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover::before {\\r\\n    --blurred-bg-offset: 25px;\\r\\n    --blurred-bg-position: calc(-1 * var(--blurred-bg-offset));\\r\\n    --blurred-bg-size: calc(100% + (2 * var(--blurred-bg-offset)));\\r\\n    z-index: 0;\\r\\n    top: var(--blurred-bg-position);\\r\\n    left: var(--blurred-bg-position);\\r\\n    width: var(--blurred-bg-size);\\r\\n    height: var(--blurred-bg-size);\\r\\n    background-size: cover;\\r\\n    filter: blur(15px) brightness(70%) contrast(80%);\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover::after {\\r\\n    z-index: 0;\\r\\n    top: 0;\\r\\n    left: 0;\\r\\n    width: 100%;\\r\\n    height: 100%;\\r\\n    background-size: contain;\\r\\n    filter: drop-shadow(0 0 50px rgba(0, 0, 0, 0.9));\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover--dimmed::before {\\r\\n    filter: blur(15px) brightness(20%) contrast(80%);\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover--dimmed::after {\\r\\n    filter: drop-shadow(0 0 50px rgba(0, 0, 0, 0.9)) brightness(40%);\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover {\\r\\n    z-index: var(--play-cover-z-index);\\r\\n    background-size: 0;\\r\\n    animation: play-cover-fade-in .2s ease;\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover:not(.vjs-hidden) ~ .mediasite-player__layout {\\r\\n    visibility: hidden;\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover--preloading {\\r\\n    visibility: hidden;\\r\\n    animation: none;\\r\\n}\\r\\n\\r\\n@keyframes play-cover-fade-in {\\r\\n    from {\\r\\n        opacity: 0;\\r\\n    }\\r\\n    to {\\r\\n        opacity: 1;\\r\\n    }\\r\\n}\\r\\n\\r\\n.vjs-loading-spinner {\\r\\n    z-index: var(--loading-spinner-z-index);\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover:not(.vjs-hidden) {\\r\\n    display: flex;\\r\\n    justify-content: center;\\r\\n    align-content: center;\\r\\n    align-items: center;\\r\\n    flex-wrap: wrap;\\r\\n    padding: 2em;\\r\\n    background-color: #000;\\r\\n}\\r\\n\\r\\n.mediasite-player--play-cover-loading .mediasite-player__playcover-content-wrapper, .mediasite-player--play-cover-loading .vjs-control-bar {\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.vjs-poster > * {\\r\\n    position: relative;\\r\\n    overflow: hidden;\\r\\n}\\r\\n\\r\\n.mediasite-player__title-overlay {\\r\\n    position: absolute;\\r\\n    bottom: 0;\\r\\n    left: 0;\\r\\n    width: 100%;\\r\\n    padding: 1em 1em 0.5em 1em;\\r\\n    margin: 0;\\r\\n    font-size: var(--playcover-font-size);\\r\\n    font-weight: normal;\\r\\n    background: linear-gradient(transparent, #000);\\r\\n    white-space: nowrap;\\r\\n    text-overflow: ellipsis;\\r\\n}\\r\\n\\r\\n.vjs-waiting .mediasite-player__title-overlay {\\r\\n    transform: translateY(100%);\\r\\n}\\r\\n\\r\\n@media(max-width: 500px) {\\r\\n    .mediasite-player__playcover-content-wrapper.has-quiz {\\r\\n        padding: min(2em, 5vmin);\\r\\n    }\\r\\n}\\r\\n\\r\\n.mediasite-player__play-cover.not-clickable {\\r\\n    cursor: default;\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".mediasite-player__search-results-list {\\r\\n    padding: 0 !important; /*important to override a last-child selector in modal-dialog*/\\r\\n    background-color: rgba(255, 255, 255, .1);\\r\\n}\\r\\n\\r\\n.mediasite-player__search-result-list-item {\\r\\n    list-style-type: none;\\r\\n    display: grid;\\r\\n    grid-template-rows: auto auto;\\r\\n    grid-template-columns: 1fr auto;\\r\\n    line-height: 1.5;\\r\\n    -webkit-user-select: none;\\r\\n            user-select: none;\\r\\n    cursor: pointer;\\r\\n    padding: .25em .5em;\\r\\n}\\r\\n\\r\\n.mediasite-player__search-result-list-item:is(:hover, :focus) {\\r\\n    background-color: rgba(255, 255, 255, .1);\\r\\n}\\r\\n\\r\\n.mediasite-player__search-result-list-item:active:focus {\\r\\n    background-color: rgba(255, 255, 255, .2);\\r\\n}\\r\\n\\r\\n.mediasite-player__search-result-list-item > span {\\r\\n    grid-column: span 2;\\r\\n}\\r\\n\\r\\n.mediasite-player__search-result-list-item > small {\\r\\n    grid-row: 2;\\r\\n}\\r\\n\\r\\n.mediasite-player__search-modal .search-box-holder {\\r\\n    position: relative;\\r\\n}\\r\\n\\r\\n.mediasite-player__search-modal .search-box-holder input {\\r\\n    padding-right: calc(3em + .75rem); /*width of the search button + the normal padding right for input*/\\r\\n}\\r\\n\\r\\n.mediasite-player__search-modal .search-button {\\r\\n    cursor: pointer;\\r\\n    position: absolute;\\r\\n    top: .5em;\\r\\n    bottom: .5em;\\r\\n    right: 0;\\r\\n    width: 3em;\\r\\n}\\r\\n\\r\\n.mediasite-player__search-modal .search-button svg {\\r\\n    fill: var( --player-primary-color);\\r\\n    height: 100%;\\r\\n}\\r\\n\\r\\n.mediasite-player__search-modal .search-button:hover svg {\\r\\n    fill: var(--player-primary-color-interact);\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/search.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,qBAAqB,EAAE,8DAA8D;IACrF,yCAAyC;AAC7C;;AAEA;IACI,qBAAqB;IACrB,aAAa;IACb,6BAA6B;IAC7B,+BAA+B;IAC/B,gBAAgB;IAChB,yBAAiB;YAAjB,iBAAiB;IACjB,eAAe;IACf,mBAAmB;AACvB;;AAEA;IACI,yCAAyC;AAC7C;;AAEA;IACI,yCAAyC;AAC7C;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,WAAW;AACf;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,iCAAiC,EAAE,kEAAkE;AACzG;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,SAAS;IACT,YAAY;IACZ,QAAQ;IACR,UAAU;AACd;;AAEA;IACI,kCAAkC;IAClC,YAAY;AAChB;;AAEA;IACI,0CAA0C;AAC9C\",\"sourcesContent\":[\".mediasite-player__search-results-list {\\r\\n    padding: 0 !important; /*important to override a last-child selector in modal-dialog*/\\r\\n    background-color: rgba(255, 255, 255, .1);\\r\\n}\\r\\n\\r\\n.mediasite-player__search-result-list-item {\\r\\n    list-style-type: none;\\r\\n    display: grid;\\r\\n    grid-template-rows: auto auto;\\r\\n    grid-template-columns: 1fr auto;\\r\\n    line-height: 1.5;\\r\\n    user-select: none;\\r\\n    cursor: pointer;\\r\\n    padding: .25em .5em;\\r\\n}\\r\\n\\r\\n.mediasite-player__search-result-list-item:is(:hover, :focus) {\\r\\n    background-color: rgba(255, 255, 255, .1);\\r\\n}\\r\\n\\r\\n.mediasite-player__search-result-list-item:active:focus {\\r\\n    background-color: rgba(255, 255, 255, .2);\\r\\n}\\r\\n\\r\\n.mediasite-player__search-result-list-item > span {\\r\\n    grid-column: span 2;\\r\\n}\\r\\n\\r\\n.mediasite-player__search-result-list-item > small {\\r\\n    grid-row: 2;\\r\\n}\\r\\n\\r\\n.mediasite-player__search-modal .search-box-holder {\\r\\n    position: relative;\\r\\n}\\r\\n\\r\\n.mediasite-player__search-modal .search-box-holder input {\\r\\n    padding-right: calc(3em + .75rem); /*width of the search button + the normal padding right for input*/\\r\\n}\\r\\n\\r\\n.mediasite-player__search-modal .search-button {\\r\\n    cursor: pointer;\\r\\n    position: absolute;\\r\\n    top: .5em;\\r\\n    bottom: .5em;\\r\\n    right: 0;\\r\\n    width: 3em;\\r\\n}\\r\\n\\r\\n.mediasite-player__search-modal .search-button svg {\\r\\n    fill: var( --player-primary-color);\\r\\n    height: 100%;\\r\\n}\\r\\n\\r\\n.mediasite-player__search-modal .search-button:hover svg {\\r\\n    fill: var(--player-primary-color-interact);\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".mediasite-player__seekbar-segment-progress-bar {\\r\\n    background-color: #ec8b00;\\r\\n    overflow: hidden;\\r\\n}\\r\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/seekbar-segments/seekbar-segment-progress-bar.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,yBAAyB;IACzB,gBAAgB;AACpB\",\"sourcesContent\":[\".mediasite-player__seekbar-segment-progress-bar {\\r\\n    background-color: #ec8b00;\\r\\n    overflow: hidden;\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".mediasite-player__seekbar-segment {\\r\\n    --seekbar-segment-pos-left: 0;\\r\\n    --seekbar-segment-width: 0;\\r\\n    position: absolute;\\r\\n    top: 0em;\\r\\n    left: calc(var(--seekbar-segment-pos-left) * 1px);\\r\\n    height: 100%;\\r\\n    width: calc((var(--seekbar-segment-width)) * 1px);\\r\\n    background-color: #676767;\\r\\n    display: flex;\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/seekbar-segments/seekbar-segment.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,6BAA6B;IAC7B,0BAA0B;IAC1B,kBAAkB;IAClB,QAAQ;IACR,iDAAiD;IACjD,YAAY;IACZ,iDAAiD;IACjD,yBAAyB;IACzB,aAAa;AACjB\",\"sourcesContent\":[\".mediasite-player__seekbar-segment {\\r\\n    --seekbar-segment-pos-left: 0;\\r\\n    --seekbar-segment-width: 0;\\r\\n    position: absolute;\\r\\n    top: 0em;\\r\\n    left: calc(var(--seekbar-segment-pos-left) * 1px);\\r\\n    height: 100%;\\r\\n    width: calc((var(--seekbar-segment-width)) * 1px);\\r\\n    background-color: #676767;\\r\\n    display: flex;\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#share-presentation-link {\\r\\n    resize: vertical; \\r\\n    height: 100px;\\r\\n    padding-right: 85px;\\r\\n}\\r\\n\\r\\n.share-presentation-holder {\\r\\n    position: relative;\\r\\n}\\r\\n\\r\\n#share-copy-link {\\r\\n    position: absolute;\\r\\n    text-transform: uppercase;\\r\\n    font-weight: bold;\\r\\n    font-size: 1.25em;\\r\\n    top: 50%;\\r\\n    right: 1.25em;\\r\\n    transform: translateY(-50%);\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/share/share-form.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,gBAAgB;IAChB,aAAa;IACb,mBAAmB;AACvB;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,kBAAkB;IAClB,yBAAyB;IACzB,iBAAiB;IACjB,iBAAiB;IACjB,QAAQ;IACR,aAAa;IACb,2BAA2B;AAC/B\",\"sourcesContent\":[\"#share-presentation-link {\\r\\n    resize: vertical; \\r\\n    height: 100px;\\r\\n    padding-right: 85px;\\r\\n}\\r\\n\\r\\n.share-presentation-holder {\\r\\n    position: relative;\\r\\n}\\r\\n\\r\\n#share-copy-link {\\r\\n    position: absolute;\\r\\n    text-transform: uppercase;\\r\\n    font-weight: bold;\\r\\n    font-size: 1.25em;\\r\\n    top: 50%;\\r\\n    right: 1.25em;\\r\\n    transform: translateY(-50%);\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".mediasite-player__smartzoom-wrapper {\\r\\n    grid-area: video;\\r\\n    position: relative;\\r\\n}\\r\\n\\r\\n.vjs-has-started.vjs-user-inactive.vjs-playing .mediasite-player__smartzoom-wrapper,\\r\\n.video-js:not(.mediasite-player--smartzoom-enabled) .mediasite-player__smartzoom-wrapper,\\r\\n.mediasite-player__smartzoom-wrapper.mediasite-player__disabled-interactive {\\r\\n    visibility: hidden;\\r\\n    pointer-events: none;\\r\\n}\\r\\n\\r\\n.mediasite-player__smartzoom-controls-overlay {\\r\\n    position: absolute;\\r\\n    top: 50%;\\r\\n    left: 50%;\\r\\n    transform: translate(-50%, -50%);\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player--smartzoom-enabled .mediasite-player__smartzoom-controls-overlay {\\r\\n    display: block;\\r\\n}\\r\\n\\r\\n.mediasite-player__smartzoom-region {\\r\\n    cursor: pointer;\\r\\n    position: absolute;\\r\\n    border: 2px solid transparent;\\r\\n    transition: border-color .05s ease, background-color .05s ease;\\r\\n}\\r\\n\\r\\n.mediasite-player__smartzoom-region:focus {\\r\\n    outline: none;\\r\\n}\\r\\n\\r\\n.mediasite-player__smartzoom-region:hover, .mediasite-player__smartzoom-region:focus {\\r\\n    background-color: rgba(255, 255, 255, .125);\\r\\n    border-color: rgba(255, 255, 255, .5);\\r\\n    transition-duration: .2s;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player--smartzoom-enabled {\\r\\n    --video-scale: 1;\\r\\n    --video-x-offset: 0px;\\r\\n    --video-y-offset: 0px;\\r\\n    --video-clip-width: 100%;\\r\\n    --video-clip-height: 100%;\\r\\n    --video-width: 100%;\\r\\n    --video-height: auto;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player--smartzoom-enabled .mediasite-player__smartzoomable {\\r\\n    --x1: var(--video-x-offset);\\r\\n    --y1: var(--video-y-offset);\\r\\n    --x2: calc(var(--x1) + var(--video-clip-width));\\r\\n    --y2: var(--y1);\\r\\n    --x3: var(--x2);\\r\\n    --y3: calc(var(--y1) + var(--video-clip-height));\\r\\n    --x4: var(--x1);\\r\\n    --y4: var(--y3);\\r\\n    --x-translation: calc(-1 * (var(--video-x-offset) + (.5 * var(--video-clip-width))));\\r\\n    --y-translation: calc(-1 * (var(--video-y-offset) + (.5 * var(--video-clip-height))));\\r\\n    will-change: transform;\\r\\n    width: 100%;\\r\\n    width: calc(var(--video-width) * var(--video-scale));\\r\\n    height: 100%;\\r\\n    height: calc(var(--video-height) * var(--video-scale));\\r\\n    top: 50%;\\r\\n    left: 50%;\\r\\n    transform-origin: top left;\\r\\n    transform: translate(var(--x-translation), var(--y-translation));\\r\\n    -webkit-clip-path: polygon(var(--x1) var(--y1), var(--x2) var(--y2), var(--x3) var(--y3), var(--x4) var(--y4));\\r\\n            clip-path: polygon(var(--x1) var(--y1), var(--x2) var(--y2), var(--x3) var(--y3), var(--x4) var(--y4));\\r\\n}\\r\\n\\r\\n.mediasite-player__smartzoom-canvas {\\r\\n    position: absolute;\\r\\n    top: 0;\\r\\n    right: 0;\\r\\n    bottom: 0;\\r\\n    left: 0;\\r\\n    margin: auto;\\r\\n    transform-origin: top left;\\r\\n    pointer-events: none;\\r\\n    visibility: hidden;\\r\\n}\\r\\n\\r\\n.mediasite-player__smart-zoom-exit-container {\\r\\n    position: absolute;\\r\\n    top: 0;\\r\\n    right: 0;\\r\\n    bottom: 0;\\r\\n    left: 0;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player--smartzoom-enabled .mediasite-player__smart-zoom-exit-button {\\r\\n    position: absolute;\\r\\n    top: 2rem;\\r\\n    right: 2rem;\\r\\n    width: 2rem;\\r\\n    height: 2rem;\\r\\n    display: flex;\\r\\n    justify-content: center;\\r\\n    align-items: center;\\r\\n    background-color: #ddd;\\r\\n    transition: background-color .2s ease;\\r\\n    color: #333;\\r\\n    border-radius: 50%;\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player--smartzoom-enabled .mediasite-player__smart-zoom-exit-button:hover {\\r\\n    background-color: #fff;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player--smartzoom-enabled .mediasite-player__smart-zoom-exit-button::after {\\r\\n    content: \\\"\\\";\\r\\n    position: absolute;\\r\\n    top: 0;\\r\\n    left: 0;\\r\\n    width: 100%;\\r\\n    height: 100%;\\r\\n    background-image: url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' viewBox='0 0 24 24' width='24'%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3C/svg%3E\\\");\\r\\n    background-repeat: no-repeat;\\r\\n    background-size: 1rem;\\r\\n    background-position: center;\\r\\n}\\r\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/smartzoom.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,gBAAgB;IAChB,kBAAkB;AACtB;;AAEA;;;IAGI,kBAAkB;IAClB,oBAAoB;AACxB;;AAEA;IACI,kBAAkB;IAClB,QAAQ;IACR,SAAS;IACT,gCAAgC;IAChC,aAAa;AACjB;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,6BAA6B;IAC7B,8DAA8D;AAClE;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,2CAA2C;IAC3C,qCAAqC;IACrC,wBAAwB;AAC5B;;AAEA;IACI,gBAAgB;IAChB,qBAAqB;IACrB,qBAAqB;IACrB,wBAAwB;IACxB,yBAAyB;IACzB,mBAAmB;IACnB,oBAAoB;AACxB;;AAEA;IACI,2BAA2B;IAC3B,2BAA2B;IAC3B,+CAA+C;IAC/C,eAAe;IACf,eAAe;IACf,gDAAgD;IAChD,eAAe;IACf,eAAe;IACf,oFAAoF;IACpF,qFAAqF;IACrF,sBAAsB;IACtB,WAAW;IACX,oDAAoD;IACpD,YAAY;IACZ,sDAAsD;IACtD,QAAQ;IACR,SAAS;IACT,0BAA0B;IAC1B,gEAAgE;IAChE,8GAAsG;YAAtG,sGAAsG;AAC1G;;AAEA;IACI,kBAAkB;IAClB,MAAM;IACN,QAAQ;IACR,SAAS;IACT,OAAO;IACP,YAAY;IACZ,0BAA0B;IAC1B,oBAAoB;IACpB,kBAAkB;AACtB;;AAEA;IACI,kBAAkB;IAClB,MAAM;IACN,QAAQ;IACR,SAAS;IACT,OAAO;AACX;;AAEA;IACI,kBAAkB;IAClB,SAAS;IACT,WAAW;IACX,WAAW;IACX,YAAY;IACZ,aAAa;IACb,uBAAuB;IACvB,mBAAmB;IACnB,sBAAsB;IACtB,qCAAqC;IACrC,WAAW;IACX,kBAAkB;IAClB,eAAe;AACnB;;AAEA;IACI,sBAAsB;AAC1B;;AAEA;IACI,WAAW;IACX,kBAAkB;IAClB,MAAM;IACN,OAAO;IACP,WAAW;IACX,YAAY;IACZ,2SAA2S;IAC3S,4BAA4B;IAC5B,qBAAqB;IACrB,2BAA2B;AAC/B\",\"sourcesContent\":[\".mediasite-player__smartzoom-wrapper {\\r\\n    grid-area: video;\\r\\n    position: relative;\\r\\n}\\r\\n\\r\\n.vjs-has-started.vjs-user-inactive.vjs-playing .mediasite-player__smartzoom-wrapper,\\r\\n.video-js:not(.mediasite-player--smartzoom-enabled) .mediasite-player__smartzoom-wrapper,\\r\\n.mediasite-player__smartzoom-wrapper.mediasite-player__disabled-interactive {\\r\\n    visibility: hidden;\\r\\n    pointer-events: none;\\r\\n}\\r\\n\\r\\n.mediasite-player__smartzoom-controls-overlay {\\r\\n    position: absolute;\\r\\n    top: 50%;\\r\\n    left: 50%;\\r\\n    transform: translate(-50%, -50%);\\r\\n    display: none;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player--smartzoom-enabled .mediasite-player__smartzoom-controls-overlay {\\r\\n    display: block;\\r\\n}\\r\\n\\r\\n.mediasite-player__smartzoom-region {\\r\\n    cursor: pointer;\\r\\n    position: absolute;\\r\\n    border: 2px solid transparent;\\r\\n    transition: border-color .05s ease, background-color .05s ease;\\r\\n}\\r\\n\\r\\n.mediasite-player__smartzoom-region:focus {\\r\\n    outline: none;\\r\\n}\\r\\n\\r\\n.mediasite-player__smartzoom-region:hover, .mediasite-player__smartzoom-region:focus {\\r\\n    background-color: rgba(255, 255, 255, .125);\\r\\n    border-color: rgba(255, 255, 255, .5);\\r\\n    transition-duration: .2s;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player--smartzoom-enabled {\\r\\n    --video-scale: 1;\\r\\n    --video-x-offset: 0px;\\r\\n    --video-y-offset: 0px;\\r\\n    --video-clip-width: 100%;\\r\\n    --video-clip-height: 100%;\\r\\n    --video-width: 100%;\\r\\n    --video-height: auto;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player--smartzoom-enabled .mediasite-player__smartzoomable {\\r\\n    --x1: var(--video-x-offset);\\r\\n    --y1: var(--video-y-offset);\\r\\n    --x2: calc(var(--x1) + var(--video-clip-width));\\r\\n    --y2: var(--y1);\\r\\n    --x3: var(--x2);\\r\\n    --y3: calc(var(--y1) + var(--video-clip-height));\\r\\n    --x4: var(--x1);\\r\\n    --y4: var(--y3);\\r\\n    --x-translation: calc(-1 * (var(--video-x-offset) + (.5 * var(--video-clip-width))));\\r\\n    --y-translation: calc(-1 * (var(--video-y-offset) + (.5 * var(--video-clip-height))));\\r\\n    will-change: transform;\\r\\n    width: 100%;\\r\\n    width: calc(var(--video-width) * var(--video-scale));\\r\\n    height: 100%;\\r\\n    height: calc(var(--video-height) * var(--video-scale));\\r\\n    top: 50%;\\r\\n    left: 50%;\\r\\n    transform-origin: top left;\\r\\n    transform: translate(var(--x-translation), var(--y-translation));\\r\\n    clip-path: polygon(var(--x1) var(--y1), var(--x2) var(--y2), var(--x3) var(--y3), var(--x4) var(--y4));\\r\\n}\\r\\n\\r\\n.mediasite-player__smartzoom-canvas {\\r\\n    position: absolute;\\r\\n    top: 0;\\r\\n    right: 0;\\r\\n    bottom: 0;\\r\\n    left: 0;\\r\\n    margin: auto;\\r\\n    transform-origin: top left;\\r\\n    pointer-events: none;\\r\\n    visibility: hidden;\\r\\n}\\r\\n\\r\\n.mediasite-player__smart-zoom-exit-container {\\r\\n    position: absolute;\\r\\n    top: 0;\\r\\n    right: 0;\\r\\n    bottom: 0;\\r\\n    left: 0;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player--smartzoom-enabled .mediasite-player__smart-zoom-exit-button {\\r\\n    position: absolute;\\r\\n    top: 2rem;\\r\\n    right: 2rem;\\r\\n    width: 2rem;\\r\\n    height: 2rem;\\r\\n    display: flex;\\r\\n    justify-content: center;\\r\\n    align-items: center;\\r\\n    background-color: #ddd;\\r\\n    transition: background-color .2s ease;\\r\\n    color: #333;\\r\\n    border-radius: 50%;\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player--smartzoom-enabled .mediasite-player__smart-zoom-exit-button:hover {\\r\\n    background-color: #fff;\\r\\n}\\r\\n\\r\\n.video-js.mediasite-player--smartzoom-enabled .mediasite-player__smart-zoom-exit-button::after {\\r\\n    content: \\\"\\\";\\r\\n    position: absolute;\\r\\n    top: 0;\\r\\n    left: 0;\\r\\n    width: 100%;\\r\\n    height: 100%;\\r\\n    background-image: url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' viewBox='0 0 24 24' width='24'%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3C/svg%3E\\\");\\r\\n    background-repeat: no-repeat;\\r\\n    background-size: 1rem;\\r\\n    background-position: center;\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".mediasite-player__timeline-marker {\\r\\n    --tooltip-content: \\\"\\\";\\r\\n    --timeline-marker-pos: 0;\\r\\n    --timeline-marker-width: .5em;\\r\\n    --timeline-marker-hover-width: calc(1.25 * .8em);\\r\\n    --timeline-marker-hover-height: calc(1.25 * .64em);\\r\\n    --timeline-marker-clickable-width: 1em;\\r\\n    --videojs-seekbar-margin: 10px; /* Video.js margin on left and right of seekbar */\\r\\n    --timeline-marker-color: #d4bf86;\\r\\n    position: absolute;\\r\\n    top: 0.45em;\\r\\n    left: calc(var(--timeline-marker-pos) * (100% - (2 * var(--videojs-seekbar-margin))));\\r\\n    height: 0.64em;\\r\\n    width: 0.8em;\\r\\n    margin-left: var(--videojs-seekbar-margin);\\r\\n    transform: translate(-50%, -50%);\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n.mediasite-player__timeline-marker::before {\\r\\n    content: \\\"\\\";\\r\\n    display: inline-block;\\r\\n    position: absolute;\\r\\n    width: var(--timeline-marker-clickable-width);\\r\\n    height: var(--timeline-marker-clickable-width);\\r\\n    left: 50%;\\r\\n    top: 50%;\\r\\n    background-color: transparent;\\r\\n    transform: translate(-50%, -50%);\\r\\n}\\r\\n\\r\\n.mediasite-player__timeline-marker:hover, .mediasite-player__timeline-marker:focus {\\r\\n    height: var(--timeline-marker-hover-height);\\r\\n    width: var(--timeline-marker-hover-width);\\r\\n    top: 0.6em;\\r\\n}\\r\\n\\r\\n.mediasite-player__timeline-marker-label {\\r\\n    visibility: hidden;\\r\\n    pointer-events: none;\\r\\n    display: inline-block;\\r\\n    position: absolute;\\r\\n    left: 50%;\\r\\n    bottom: calc(100% + .25em);\\r\\n    color: #000;\\r\\n    background-color: rgba(255, 255, 255, .9);\\r\\n    border-radius: .3em;\\r\\n    padding: 6px 8px;\\r\\n    font-size: .9em;\\r\\n    line-height: 1.5;\\r\\n    white-space: nowrap;\\r\\n    overflow: hidden;\\r\\n    text-overflow: ellipsis;\\r\\n    transform: translateX(-50%);\\r\\n}\\r\\n\\r\\n.mediasite-player__timeline-marker:hover .mediasite-player__timeline-marker-label,\\r\\n.mediasite-player__timeline-marker:focus .mediasite-player__timeline-marker-label {\\r\\n    visibility: initial;\\r\\n    pointer-events: initial;\\r\\n}\\r\\n\\r\\n.mediasite-player__timeline-marker-icon {\\r\\n    fill: var(--timeline-marker-color)\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/bundled/timeline-markers/timeline-marker.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,qBAAqB;IACrB,wBAAwB;IACxB,6BAA6B;IAC7B,gDAAgD;IAChD,kDAAkD;IAClD,sCAAsC;IACtC,8BAA8B,EAAE,iDAAiD;IACjF,gCAAgC;IAChC,kBAAkB;IAClB,WAAW;IACX,qFAAqF;IACrF,cAAc;IACd,YAAY;IACZ,0CAA0C;IAC1C,gCAAgC;IAChC,eAAe;AACnB;;AAEA;IACI,WAAW;IACX,qBAAqB;IACrB,kBAAkB;IAClB,6CAA6C;IAC7C,8CAA8C;IAC9C,SAAS;IACT,QAAQ;IACR,6BAA6B;IAC7B,gCAAgC;AACpC;;AAEA;IACI,2CAA2C;IAC3C,yCAAyC;IACzC,UAAU;AACd;;AAEA;IACI,kBAAkB;IAClB,oBAAoB;IACpB,qBAAqB;IACrB,kBAAkB;IAClB,SAAS;IACT,0BAA0B;IAC1B,WAAW;IACX,yCAAyC;IACzC,mBAAmB;IACnB,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,mBAAmB;IACnB,gBAAgB;IAChB,uBAAuB;IACvB,2BAA2B;AAC/B;;AAEA;;IAEI,mBAAmB;IACnB,uBAAuB;AAC3B;;AAEA;IACI;AACJ\",\"sourcesContent\":[\".mediasite-player__timeline-marker {\\r\\n    --tooltip-content: \\\"\\\";\\r\\n    --timeline-marker-pos: 0;\\r\\n    --timeline-marker-width: .5em;\\r\\n    --timeline-marker-hover-width: calc(1.25 * .8em);\\r\\n    --timeline-marker-hover-height: calc(1.25 * .64em);\\r\\n    --timeline-marker-clickable-width: 1em;\\r\\n    --videojs-seekbar-margin: 10px; /* Video.js margin on left and right of seekbar */\\r\\n    --timeline-marker-color: #d4bf86;\\r\\n    position: absolute;\\r\\n    top: 0.45em;\\r\\n    left: calc(var(--timeline-marker-pos) * (100% - (2 * var(--videojs-seekbar-margin))));\\r\\n    height: 0.64em;\\r\\n    width: 0.8em;\\r\\n    margin-left: var(--videojs-seekbar-margin);\\r\\n    transform: translate(-50%, -50%);\\r\\n    cursor: pointer;\\r\\n}\\r\\n\\r\\n.mediasite-player__timeline-marker::before {\\r\\n    content: \\\"\\\";\\r\\n    display: inline-block;\\r\\n    position: absolute;\\r\\n    width: var(--timeline-marker-clickable-width);\\r\\n    height: var(--timeline-marker-clickable-width);\\r\\n    left: 50%;\\r\\n    top: 50%;\\r\\n    background-color: transparent;\\r\\n    transform: translate(-50%, -50%);\\r\\n}\\r\\n\\r\\n.mediasite-player__timeline-marker:hover, .mediasite-player__timeline-marker:focus {\\r\\n    height: var(--timeline-marker-hover-height);\\r\\n    width: var(--timeline-marker-hover-width);\\r\\n    top: 0.6em;\\r\\n}\\r\\n\\r\\n.mediasite-player__timeline-marker-label {\\r\\n    visibility: hidden;\\r\\n    pointer-events: none;\\r\\n    display: inline-block;\\r\\n    position: absolute;\\r\\n    left: 50%;\\r\\n    bottom: calc(100% + .25em);\\r\\n    color: #000;\\r\\n    background-color: rgba(255, 255, 255, .9);\\r\\n    border-radius: .3em;\\r\\n    padding: 6px 8px;\\r\\n    font-size: .9em;\\r\\n    line-height: 1.5;\\r\\n    white-space: nowrap;\\r\\n    overflow: hidden;\\r\\n    text-overflow: ellipsis;\\r\\n    transform: translateX(-50%);\\r\\n}\\r\\n\\r\\n.mediasite-player__timeline-marker:hover .mediasite-player__timeline-marker-label,\\r\\n.mediasite-player__timeline-marker:focus .mediasite-player__timeline-marker-label {\\r\\n    visibility: initial;\\r\\n    pointer-events: initial;\\r\\n}\\r\\n\\r\\n.mediasite-player__timeline-marker-icon {\\r\\n    fill: var(--timeline-marker-color)\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".guided--btn-holder {\\r\\n    position: absolute;\\r\\n    display: flex;\\r\\n    flex-direction: column;\\r\\n    justify-content: center;\\r\\n    align-items: center;\\r\\n    gap: 1em;\\r\\n    height: 100%;\\r\\n    width: 100%;\\r\\n    background-color: rgba(0, 0, 0, 0.8);\\r\\n    z-index: var(--play-cover-z-index);\\r\\n}\\r\\n\\r\\n.guided--btn-holder button {\\r\\n    font-size: 1.5em !important;\\r\\n}\\r\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/guided.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,kBAAkB;IAClB,aAAa;IACb,sBAAsB;IACtB,uBAAuB;IACvB,mBAAmB;IACnB,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,oCAAoC;IACpC,kCAAkC;AACtC;;AAEA;IACI,2BAA2B;AAC/B\",\"sourcesContent\":[\".guided--btn-holder {\\r\\n    position: absolute;\\r\\n    display: flex;\\r\\n    flex-direction: column;\\r\\n    justify-content: center;\\r\\n    align-items: center;\\r\\n    gap: 1em;\\r\\n    height: 100%;\\r\\n    width: 100%;\\r\\n    background-color: rgba(0, 0, 0, 0.8);\\r\\n    z-index: var(--play-cover-z-index);\\r\\n}\\r\\n\\r\\n.guided--btn-holder button {\\r\\n    font-size: 1.5em !important;\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/* \\r\\n* The 360 canvas must be moved to above the player layout element.\\r\\n* Unfortunately, the canvas is not given a class or id by the plugin, \\r\\n* so our selector is brittle.\\r\\n*/\\r\\ncanvas[tabindex=\\\"0\\\"] {\\r\\n    z-index: 1;\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../../../../../GitLabRunner/builds/MaDYF1-sx/0/espial/mediasite/server/mvp/Mediasite/Server/Player/Player/src/plugins/conditional/video360.css\"],\"names\":[],\"mappings\":\"AAAA;;;;CAIC;AACD;IACI,UAAU;AACd\",\"sourcesContent\":[\"/* \\r\\n* The 360 canvas must be moved to above the player layout element.\\r\\n* Unfortunately, the canvas is not given a class or id by the plugin, \\r\\n* so our selector is brittle.\\r\\n*/\\r\\ncanvas[tabindex=\\\"0\\\"] {\\r\\n    z-index: 1;\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","window.SFMP = window.SFMP || {};\r\nSFMP.Utility = (function (module, undefined) {\r\n\r\n    var queryStringParam = {\r\n        COVER_ENABLE_OLD: \"playcover\",\r\n        COVER_ENABLE: \"cover\",\r\n        COVER_TITLE: \"covertitle\",\r\n        COVER_PLAYBUTTON: \"coverplaybutton\",\r\n        COVER_COUNTDOWN: \"covercountdown\",\r\n\r\n        AUTHTICKET: \"authticket\",\r\n        COLLECTION: \"collection\",\r\n        CATALOG: \"catalog\"\r\n    };\r\n\r\n    var basicHtmlSanitationSpec = {\r\n        allowedTags: [\"div\", \"a\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"p\", \"br\", \"ol\", \"ul\", \"li\", \"b\", \"i\", \"u\", \"strong\", \"em\", \"del\", \"sub\", \"sup\"],\r\n        tagAttributes: {\r\n            a: [\r\n                { name: \"href\", filter: cleanHref },\r\n                { name: \"target\" }\r\n            ]\r\n        }\r\n    };\r\n\r\n    function cleanHref(value) {\r\n        var uriExpression = /^http:|https:|mailto:/gi;\r\n        if (uriExpression.test(value)) {\r\n            return encodeURI(value);\r\n        } else {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    function escapeAngleBrackets(text) {\r\n        text = text.replace(/</g, \"&lt;\");\r\n        text = text.replace(/>/g, \"&gt;\");\r\n        return text;\r\n    }\r\n\r\n    function matchToTagInfo(matchArray) {\r\n        var m = matchArray || [\"\", \"\", \"\", \"\"];\r\n        var tagName = m[2].toLowerCase();\r\n        return {\r\n            wholeTag: m[0],\r\n            leftEnd: m[1],\r\n            tagName: tagName,\r\n            rightEnd: m[3],\r\n            isClosingTag: (m[1] === \"</\"),\r\n            bareTag: (m[1] + tagName + m[3])\r\n        }\r\n    }\r\n\r\n    function parseTagAttribute(tagHtml, attributeName) {\r\n        var pattern = attributeName + \"=(\\\\\\\"[^\\\\\\\"]*\\\\\\\"|\\\\\\'[^\\\\\\']*\\\\\\')\";\r\n        var re, match, quotedValue;\r\n\r\n        re = new RegExp(pattern, \"i\");\r\n        match = tagHtml.match(re);\r\n\r\n        if (match === null) {\r\n            return null;\r\n        }\r\n\r\n        quotedValue = match[1];\r\n        return {\r\n            name: attributeName,\r\n            quote: quotedValue.substring(0, 1),\r\n            value: quotedValue.substring(1, quotedValue.length - 1)\r\n        };\r\n\r\n    }\r\n\r\n    function sanitizeOpeningTag(tagInfo, allowedAttributesSpec) {\r\n        var i, name, filter, info, filtered;\r\n        var attributes = [];\r\n        var nullFilter = function (val) { return val; };\r\n\r\n        for (i = 0; i < allowedAttributesSpec.length; i += 1) {\r\n            name = allowedAttributesSpec[i].name;\r\n            filter = allowedAttributesSpec[i].filter || nullFilter;\r\n            info = parseTagAttribute(tagInfo.wholeTag, allowedAttributesSpec[i].name);\r\n            if (info && info.value) {\r\n                filtered = filter(info.value);\r\n                if (filtered) {\r\n                    attributes.push(info.name + \"=\" + info.quote + filtered + info.quote);\r\n                }\r\n            }\r\n        }\r\n\r\n        return \"<\" + tagInfo.tagName + \" \" + attributes.join(\" \") + \">\";\r\n    }\r\n\r\n    function sanitizeHtmlString(htmlString, sanitationSpec) {\r\n        var htmlString = htmlString || \"\";\r\n        var spec = sanitationSpec || basicHtmlSanitationSpec;\r\n        var allowedTags = spec.allowedTags || [];\r\n        var tagAttributes = spec.tagAttributes || {};\r\n\r\n        var tagPattern = \"(<\\\\/?)(\" + allowedTags.join(\"|\") + \")(?=\\\\W)(?:(?!>|\\\\/>).)*(\\\\/?>)\";\r\n        var tagExpression = new RegExp(tagPattern, \"gi\");\r\n\r\n        var output = [];\r\n        var match, tagInfo, allowedAttributes, i, attributeInfo, attributeOut, cleaned;\r\n        var searchStart = 0;\r\n\r\n\r\n        function getNonTagText(startIndex, endIndex) {\r\n            var text = htmlString.substring(startIndex, endIndex);\r\n            return escapeAngleBrackets(text);\r\n        }\r\n\r\n        while ((match = tagExpression.exec(htmlString)) !== null) {\r\n            // Handle non-tag text preceding the next tag. \r\n            if (match.index > searchStart) {\r\n                output.push(getNonTagText(searchStart, match.index));\r\n            }\r\n\r\n            // Handle the matched tag.\r\n            tagInfo = matchToTagInfo(match);\r\n\r\n            allowedAttributes = tagAttributes[tagInfo.tagName];\r\n            if (allowedAttributes && !tagInfo.isClosingTag) {\r\n                cleaned = sanitizeOpeningTag(tagInfo, allowedAttributes);\r\n            } else {\r\n                cleaned = tagInfo.bareTag;\r\n            }\r\n            output.push(cleaned);\r\n\r\n            searchStart = tagExpression.lastIndex;\r\n        }\r\n\r\n        // Handle trailing non-tag text.\r\n        if (htmlString.length > searchStart) {\r\n            output.push(getNonTagText(searchStart, htmlString.length));\r\n        }\r\n\r\n        return output.join(\"\");\r\n    }\r\n    \r\n\r\n\r\n    function assign(target, varArgs) {\r\n        var targetObj, i, sourceObj, propName;\r\n\r\n        if (target == null) {\r\n            throw new TypeError(\"Cannot convert undefined or null to object.\");\r\n        }\r\n\r\n        targetObj = Object(target);\r\n\r\n        for (i = 1; i < arguments.length; i += 1) {\r\n            var sourceObj = arguments[i];\r\n\r\n            if (sourceObj != null) {\r\n                for (propName in sourceObj) {\r\n                    if (Object.prototype.hasOwnProperty.call(sourceObj, propName)) {\r\n                        targetObj[propName] = sourceObj[propName];\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        return targetObj;\r\n    }\r\n\r\n    function isEmbedded() {\r\n        try {\r\n            return (window.self !== window.top);\r\n        } catch (e) {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    function getQueryParam(name) {\r\n        var regexS = \"[\\\\?&]\" + name + \"=([^&#]*)\";\r\n        var regex = new RegExp(regexS, \"i\");\r\n        var results = regex.exec(window.location.href);\r\n        if (results === null) {\r\n            return \"\";\r\n        }\r\n\r\n        var value = decodeURIComponent(results[1].replace(/\\+/g, \" \"));\r\n\r\n        return value;\r\n    }\r\n\r\n    function getAuthTicketFromCookie(resourceId) {\r\n        // Note that this will stop working should auth ticket cookies be marked httponly in the future.\r\n        var pattern = \"MediasiteAuthTickets-(?:[a-fA-F0-9\\\\&=]*)\" + resourceId + \"=([a-fA-F0-9]*)\";\r\n        var regex = new RegExp(pattern, '');\r\n\r\n        var match = document.cookie.match(regex);\r\n        if (match && match.length === 2) {\r\n            return match[1];\r\n        } else {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    function getEffectiveAuthTicket(presentationId, collectionId) {\r\n        var i, ticket;\r\n        var ids = [];\r\n\r\n        // The current collection's auth ticket gets first priority.\r\n        if (collectionId) {\r\n            ids.push(collectionId);\r\n        }\r\n\r\n        // The presentation's auth ticket gets second priority.\r\n        if (presentationId) {\r\n            ids.push(presentationId);\r\n        }\r\n\r\n        for (i = 0; i < ids.length; i += 1) {\r\n            ticket = getAuthTicketFromCookie(ids[i]);\r\n            if (ticket) {\r\n                // Found a ticket, so we're done.\r\n                return ticket;\r\n            }\r\n        }\r\n\r\n        return null; // Failed to find a ticket.\r\n    }\r\n\r\n    function getCollectionIdFromQueryString() {\r\n        // Array of query string params that *could* hold the collection id. \r\n        // The param earlier in the array wins, should more than one exist in the query string.\r\n        var params = [queryStringParam.COLLECTION, queryStringParam.CATALOG];\r\n        var i, value;\r\n        var result = \"\";\r\n\r\n        for (i = 0; i < params.length; i += 1) {\r\n            value = getQueryParam(params[i]);\r\n            if (typeof value === \"string\" && value.length > 0) {\r\n                result = value.slice(0, -2) + '5f';  //make sure collection has MediasiteChannel entitytype prefix 5f\r\n                break;\r\n            }\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    function appendAuthTicket (url, presentationId) {\r\n        if (!url) {\r\n            // Garbage in -- garbage out.\r\n            return url;\r\n        }\r\n\r\n        var connector, collectionId, ticket;\r\n        var fixed = url;\r\n\r\n        function getConnector() { return (fixed.indexOf(\"?\") > -1) ? \"&\" : \"?\" }\r\n\r\n        collectionId = getCollectionIdFromQueryString();\r\n        ticket = getEffectiveAuthTicket(presentationId, collectionId);\r\n\r\n        if (ticket) {\r\n            fixed += getConnector() + queryStringParam.AUTHTICKET + \"=\" + ticket;\r\n        }\r\n\r\n        return fixed;\r\n    }\r\n\r\n    module = module || {};\r\n\r\n    module.queryStringParam = queryStringParam;\r\n\r\n    module.isEmbedded = isEmbedded;\r\n    module.getQueryParam = getQueryParam;\r\n    module.assign = assign;\r\n    module.sanitizeHtmlString = sanitizeHtmlString;\r\n    module.getAuthTicketFromCookie = getAuthTicketFromCookie;\r\n    module.getCollectionIdFromQueryString = getCollectionIdFromQueryString;\r\n    module.getEffectiveAuthTicket = getEffectiveAuthTicket;\r\n    module.appendAuthTicket = appendAuthTicket;\r\n\r\n    return module;\r\n\r\n})(SFMP.Utility);","module.exports = \"data:image/svg+xml,%3csvg width='60' height='80' viewBox='0 0 60 80' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3crect width='60' height='80' fill='%2354595B'/%3e %3cpath d='M36.2776 21.25C36.2776 22.9076 35.6162 24.4973 34.439 25.6694C33.2617 26.8415 31.6649 27.5 30 27.5C28.3351 27.5 26.7383 26.8415 25.561 25.6694C24.3838 24.4973 23.7224 22.9076 23.7224 21.25C23.7224 19.5924 24.3838 18.0027 25.561 16.8306C26.7383 15.6585 28.3351 15 30 15C31.6649 15 33.2617 15.6585 34.439 16.8306C35.6162 18.0027 36.2776 19.5924 36.2776 21.25V21.25ZM20.5836 54.95V60.3125C20.5836 61.5557 21.0796 62.748 21.9626 63.6271C22.8455 64.5061 24.0431 65 25.2918 65H34.7082C35.9569 65 37.1545 64.5061 38.0374 63.6271C38.9204 62.748 39.4165 61.5557 39.4165 60.3125V54.95C39.4164 54.74 39.459 54.5321 39.5415 54.3388C39.624 54.1455 39.7448 53.9708 39.8967 53.825L51.5197 42.6875C51.745 42.4713 51.9002 42.1931 51.9655 41.8884C52.0307 41.5838 52.0031 41.2667 51.886 40.9778C51.7689 40.689 51.5678 40.4416 51.3085 40.2673C51.0491 40.0931 50.7434 40 50.4306 40H9.56631C9.25372 40.0006 8.94843 40.0942 8.68957 40.2686C8.43072 40.4431 8.2301 40.6906 8.11342 40.9793C7.99674 41.268 7.96933 41.5849 8.03469 41.8892C8.10005 42.1935 8.25521 42.4715 8.48028 42.6875L20.1002 53.825C20.2526 53.9705 20.374 54.1451 20.4571 54.3384C20.5401 54.5317 20.5832 54.7397 20.5836 54.95ZM25.2918 30.625C24.0431 30.625 22.8455 31.1189 21.9626 31.9979C21.0796 32.877 20.5836 34.0693 20.5836 35.3125V36.875H39.4165V35.3125C39.4165 34.0693 38.9204 32.877 38.0374 31.9979C37.1545 31.1189 35.9569 30.625 34.7082 30.625H25.2918Z' fill='%23EFEFF0'/%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='100%25' viewBox='0 0 198 195' enable-background='new 0 0 198 195' xml:space='preserve'%3e %3cpath fill='none' opacity='1.000000' stroke='none' d=' M199.000000,72.000000 C199.000000,113.640465 199.000000,154.780930 199.000000,195.960693 C133.068222,195.960693 67.136414,195.960693 1.102301,195.960693 C1.102301,131.109711 1.102301,66.219208 1.102301,1.164350 C66.999664,1.164350 132.999802,1.164350 199.000000,1.164350 C199.000000,24.529984 199.000000,48.014992 199.000000,72.000000 M136.500015,9.067634 C115.670364,9.067240 94.840698,9.053184 74.011108,9.088573 C72.030060,9.091939 69.969269,9.109781 68.082237,9.623345 C58.311554,12.282481 52.493965,26.181160 57.877514,34.892239 C59.136818,36.929916 63.067898,38.955914 65.119888,38.433708 C67.486259,37.831501 69.778305,34.680889 70.894638,32.112000 C71.847855,29.918467 71.091759,26.982140 71.091759,24.285530 C106.583282,24.285530 141.448700,24.285530 176.522110,24.285530 C176.595688,25.958307 176.702927,27.266567 176.703476,28.574873 C176.716064,57.903160 176.633377,87.231964 176.813461,116.559174 C176.839340,120.773125 175.585281,121.850510 171.470383,121.827721 C140.809921,121.657906 110.148155,121.728897 79.486801,121.708282 C78.226273,121.707436 76.965858,121.546471 75.701500,121.459831 C75.743858,120.767723 75.635262,120.330750 75.801544,120.157242 C78.218506,117.635498 80.707069,115.181999 83.109200,112.646523 C86.831573,108.717506 87.238243,104.767654 84.318535,101.656555 C80.971596,98.090157 77.130058,98.144577 73.021400,102.156448 C65.873039,109.136436 58.798756,116.195374 51.821255,123.345955 C48.215332,127.041328 48.280384,131.027863 51.952934,134.776581 C58.942852,141.911484 66.002853,148.980515 73.154640,155.952911 C77.083046,159.782791 80.774788,159.872559 84.087372,156.601044 C87.147507,153.578873 86.919861,149.386292 83.376259,145.611145 C80.723885,142.785477 77.961662,140.062912 74.203667,136.228500 C77.490746,136.228500 79.253967,136.228348 81.017181,136.228516 C112.345161,136.231430 143.673172,136.257019 175.001099,136.224487 C185.318649,136.213776 191.118698,130.426834 191.125076,120.217422 C191.144836,88.556190 191.144882,56.894920 191.119446,25.233692 C191.111359,15.156201 185.090363,9.123105 174.993576,9.081266 C162.495926,9.029478 149.997894,9.067902 136.500015,9.067634 M125.559731,58.399086 C126.218994,59.244961 126.878265,60.090836 128.184509,61.766819 C125.683540,61.766819 124.081985,61.766788 122.480438,61.766823 C90.828178,61.767464 59.175884,61.742081 27.523680,61.784382 C17.822065,61.797348 11.785369,67.599815 11.757231,77.221497 C11.663689,109.206673 11.670721,141.192398 11.746582,173.177643 C11.769520,182.848969 18.057327,188.852341 27.873718,188.922897 C34.703587,188.971970 41.534103,188.930634 48.364330,188.930740 C74.852287,188.931137 101.340240,188.933380 127.828194,188.931992 C140.877945,188.931320 146.124878,183.623367 146.125198,170.431122 C146.125229,169.098434 146.119080,167.765762 146.113403,166.433075 C146.094315,161.938644 143.312180,159.789001 139.357620,159.167831 C135.828156,158.613434 132.302338,161.757690 131.868134,165.689468 C131.582275,168.277802 131.814056,170.923309 131.814056,173.778198 C96.302620,173.778198 61.438122,173.778198 26.456650,173.778198 C26.456650,141.247910 26.456650,109.043571 26.456650,76.628174 C60.315552,76.628174 93.834404,76.628174 127.353264,76.628174 C127.744392,77.144165 128.135529,77.660156 128.526657,78.176147 C125.365967,80.827263 121.974411,83.252731 119.105087,86.188599 C115.776367,89.594505 115.993668,93.928658 119.091911,96.832840 C122.184959,99.732132 125.759094,99.794029 129.294739,96.388008 C136.840744,89.118637 144.268494,81.719406 151.544266,74.179955 C154.633591,70.978676 154.649750,67.045067 151.570694,63.848289 C144.188568,56.183914 136.661514,48.649792 128.965637,41.301167 C125.546516,38.036327 121.690750,38.314373 118.804771,41.525295 C115.927055,44.727016 115.944115,48.176476 118.746323,51.414848 C120.701591,53.674469 122.904297,55.719986 125.559731,58.399086 z'/%3e %3cpath fill='%23FBFBFB' opacity='1.000000' stroke='none' d=' M137.000031,9.067492 C149.997894,9.067902 162.495926,9.029478 174.993576,9.081266 C185.090363,9.123105 191.111359,15.156201 191.119446,25.233692 C191.144882,56.894920 191.144836,88.556190 191.125076,120.217422 C191.118698,130.426834 185.318649,136.213776 175.001099,136.224487 C143.673172,136.257019 112.345161,136.231430 81.017181,136.228516 C79.253967,136.228348 77.490746,136.228500 74.203667,136.228500 C77.961662,140.062912 80.723885,142.785477 83.376259,145.611145 C86.919861,149.386292 87.147507,153.578873 84.087372,156.601044 C80.774788,159.872559 77.083046,159.782791 73.154640,155.952911 C66.002853,148.980515 58.942852,141.911484 51.952934,134.776581 C48.280384,131.027863 48.215332,127.041328 51.821255,123.345955 C58.798756,116.195374 65.873039,109.136436 73.021400,102.156448 C77.130058,98.144577 80.971596,98.090157 84.318535,101.656555 C87.238243,104.767654 86.831573,108.717506 83.109200,112.646523 C80.707069,115.181999 78.218506,117.635498 75.801544,120.157242 C75.635262,120.330750 75.743858,120.767723 75.701500,121.459831 C76.965858,121.546471 78.226273,121.707436 79.486801,121.708282 C110.148155,121.728897 140.809921,121.657906 171.470383,121.827721 C175.585281,121.850510 176.839340,120.773125 176.813461,116.559174 C176.633377,87.231964 176.716064,57.903160 176.703476,28.574873 C176.702927,27.266567 176.595688,25.958307 176.522110,24.285530 C141.448700,24.285530 106.583282,24.285530 71.091759,24.285530 C71.091759,26.982140 71.847855,29.918467 70.894638,32.112000 C69.778305,34.680889 67.486259,37.831501 65.119888,38.433708 C63.067898,38.955914 59.136818,36.929916 57.877514,34.892239 C52.493965,26.181160 58.311554,12.282481 68.082237,9.623345 C69.969269,9.109781 72.030060,9.091939 74.011108,9.088573 C94.840698,9.053184 115.670364,9.067240 137.000031,9.067492 z'/%3e %3cpath fill='%23FBFBFB' opacity='1.000000' stroke='none' d=' M125.278107,58.130112 C122.904297,55.719986 120.701591,53.674469 118.746323,51.414848 C115.944115,48.176476 115.927055,44.727016 118.804771,41.525295 C121.690750,38.314373 125.546516,38.036327 128.965637,41.301167 C136.661514,48.649792 144.188568,56.183914 151.570694,63.848289 C154.649750,67.045067 154.633591,70.978676 151.544266,74.179955 C144.268494,81.719406 136.840744,89.118637 129.294739,96.388008 C125.759094,99.794029 122.184959,99.732132 119.091911,96.832840 C115.993668,93.928658 115.776367,89.594505 119.105087,86.188599 C121.974411,83.252731 125.365967,80.827263 128.526657,78.176147 C128.135529,77.660156 127.744392,77.144165 127.353264,76.628174 C93.834404,76.628174 60.315552,76.628174 26.456650,76.628174 C26.456650,109.043571 26.456650,141.247910 26.456650,173.778198 C61.438122,173.778198 96.302620,173.778198 131.814056,173.778198 C131.814056,170.923309 131.582275,168.277802 131.868134,165.689468 C132.302338,161.757690 135.828156,158.613434 139.357620,159.167831 C143.312180,159.789001 146.094315,161.938644 146.113403,166.433075 C146.119080,167.765762 146.125229,169.098434 146.125198,170.431122 C146.124878,183.623367 140.877945,188.931320 127.828194,188.931992 C101.340240,188.933380 74.852287,188.931137 48.364330,188.930740 C41.534103,188.930634 34.703587,188.971970 27.873718,188.922897 C18.057327,188.852341 11.769520,182.848969 11.746582,173.177643 C11.670721,141.192398 11.663689,109.206673 11.757231,77.221497 C11.785369,67.599815 17.822065,61.797348 27.523680,61.784382 C59.175884,61.742081 90.828178,61.767464 122.480438,61.766823 C124.081985,61.766788 125.683540,61.766819 128.184509,61.766819 C126.878265,60.090836 126.218994,59.244961 125.278107,58.130112 z'/%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='black' width='24px' height='24px'%3e%3cpath d='M0 0h24v24H0z' fill='none'/%3e%3cpath d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3e%3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M23.4676 0.5506C23.1275 0.209753 22.6658 0.0182025 22.1843 0.0182025C21.7028 0.0182025 21.2411 0.209753 20.901 0.5506L12 9.43343L3.09898 0.532398C2.7589 0.19155 2.29719 0 1.8157 0C1.33421 0 0.872503 0.19155 0.532423 0.532398C-0.177474 1.2423 -0.177474 2.38905 0.532423 3.09895L9.43345 12L0.532423 20.901C-0.177474 21.6109 -0.177474 22.7577 0.532423 23.4676C1.24232 24.1775 2.38908 24.1775 3.09898 23.4676L12 14.5665L20.901 23.4676C21.6109 24.1775 22.7577 24.1775 23.4676 23.4676C24.1775 22.7577 24.1775 21.6109 23.4676 20.901L14.5666 12L23.4676 3.09895C24.1593 2.40726 24.1593 1.2423 23.4676 0.5506Z' fill='%23000'/%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' enable-background='new 0 0 24 24' viewBox='0 0 24 24' fill='white' width='24px' height='24px'%3e%3cg%3e%3crect fill='none' height='24' width='24'/%3e%3c/g%3e%3cg%3e%3cpath d='M5,20h14v-2H5V20z M19,9h-4V3H9v6H5l7,7L19,9z'/%3e%3c/g%3e%3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white' width='24px' height='24px'%3e%3cpath d='M0 0h24v24H0z' fill='none'/%3e%3cpath d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z'/%3e%3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white' width='24px' height='24px'%3e%3cpath d='M0 0h24v24H0z' fill='none'/%3e%3cpath d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z'/%3e%3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' height='24px' viewBox='0 0 24 24' width='24px' fill='%23FFFFFF'%3e%3cpath d='M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z'/%3e%3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white' width='24px' height='24px'%3e%3cpath d='M0 0h24v24H0z' fill='none'/%3e%3cpath d='M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z'/%3e%3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg width='150' height='150' viewBox='0 0 150 150' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3ccircle cx='74.9995' cy='75' r='62.5' fill='white'/%3e %3cpath d='M60 108.75L105 75L60 41.25V108.75ZM75 0C33.6 0 0 33.6 0 75C0 116.4 33.6 150 75 150C116.4 150 150 116.4 150 75C150 33.6 116.4 0 75 0ZM75 135C41.925 135 15 108.075 15 75C15 41.925 41.925 15 75 15C108.075 15 135 41.925 135 75C135 108.075 108.075 135 75 135Z' fill='%23ED8B00'/%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white' width='24px' height='24px'%3e%3cpath d='M0 0h24v24H0z' fill='none'/%3e%3cpath d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z'/%3e%3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white' width='24px' height='24px'%3e%3cpath d='M0 0h24v24H0z' fill='none'/%3e%3cpath d='M21 6h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.45-1-1-1zm-4 6V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1z'/%3e%3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' height='24px' viewBox='0 0 24 24' width='24px' fill='%23FFFFFF'%3e%3cpath d='M0 0h24v24H0V0z' fill='none'/%3e%3cpath d='M19.5 3.5L18 2l-1.5 1.5L15 2l-1.5 1.5L12 2l-1.5 1.5L9 2 7.5 3.5 6 2 4.5 3.5 3 2v20l1.5-1.5L6 22l1.5-1.5L9 22l1.5-1.5L12 22l1.5-1.5L15 22l1.5-1.5L18 22l1.5-1.5L21 22V2l-1.5 1.5zM19 19.09H5V4.91h14v14.18zM6 15h12v2H6zm0-4h12v2H6zm0-4h12v2H6z'/%3e%3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white' width='24px' height='24px'%3e%3cpath d='M0 0h24v24H0z' fill='none'/%3e%3cpath d='M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z'/%3e%3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg width='200' height='200' viewBox='0 0 200 200' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M60 180H40V120H20L30 100H60V180Z' fill='white'/%3e %3cpath d='M150 140C150 165 135 180 115 180C95 180 80 165 80 140C80 115 95 100 115 100C135 100 150 115 150 140ZM100 140C100 150 105 160 115 160C125 160 130 150 130 140C130 130 125 120 115 120C105 120 100 130 100 140Z' fill='white'/%3e %3cpath fill-rule='evenodd' clip-rule='evenodd' d='M163.468 51.2991C174.189 65.2706 180 82.3893 180 100H160.013C160.013 86.7892 155.654 73.9475 147.611 63.4667C139.569 52.9858 128.293 45.4515 115.533 42.0323C102.772 38.6131 89.2395 39.5 77.0343 44.5556C69.706 47.5911 63.1021 52.0275 57.5648 57.5647L80.0001 80H20.0001V20L43.4316 43.4315C50.8131 36.0501 59.6165 30.1361 69.3855 26.0897C85.6557 19.3503 103.695 18.168 120.706 22.726C137.716 27.284 152.748 37.3276 163.468 51.2991Z' fill='white'/%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg width='200' height='200' viewBox='0 0 200 200' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath fill-rule='evenodd' clip-rule='evenodd' d='M36.5318 51.2991C25.811 65.2706 20 82.3893 20 100H39.9874C39.9874 86.7892 44.3466 73.9475 52.3888 63.4666C60.4311 52.9858 71.7069 45.4515 84.4676 42.0323C97.2283 38.6131 110.761 39.5 122.966 44.5556C130.294 47.5911 136.898 52.0275 142.435 57.5647L120 80H180V20L156.569 43.4314C149.187 36.0501 140.384 30.1361 130.615 26.0896C114.344 19.3503 96.3052 18.168 79.2945 22.7259C62.2838 27.2839 47.2525 37.3276 36.5318 51.2991Z' fill='white'/%3e %3cpath d='M80 180H60V120H40L50 100H80V180Z' fill='white'/%3e %3cpath d='M170 140C170 165 155 180 135 180C115 180 100 165 100 140C100 115 115 100 135 100C155 100 170 115 170 140ZM120 140C120 150 125 160 135 160C145 160 150 150 150 140C150 130 145 120 135 120C125 120 120 130 120 140Z' fill='white'/%3e %3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white' width='24px' height='24px'%3e%3cpath d='M0 0h24v24H0z' fill='none'/%3e%3cpath d='M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92 1.61 0 2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z'/%3e%3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3c!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --%3e %3c!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e %3csvg version='1.1' id='Capa_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' fill='white' width='342.382px' height='342.382px' viewBox='0 0 342.382 342.382' style='enable-background:new 0 0 342.382 342.382;' xml:space='preserve'%3e %3cg%3e %3cg%3e %3cg%3e %3cpath d='M45.225,125.972C20.284,125.972,0,146.256,0,171.191c0,24.94,20.284,45.219,45.225,45.219 c24.926,0,45.219-20.278,45.219-45.219C90.444,146.256,70.151,125.972,45.225,125.972z'/%3e %3c/g%3e %3cg%3e %3cpath d='M173.409,125.972c-24.938,0-45.225,20.284-45.225,45.219c0,24.94,20.287,45.219,45.225,45.219 c24.936,0,45.226-20.278,45.226-45.219C218.635,146.256,198.345,125.972,173.409,125.972z'/%3e %3c/g%3e %3cg%3e %3cpath d='M297.165,125.972c-24.932,0-45.222,20.284-45.222,45.219c0,24.94,20.29,45.219,45.222,45.219 c24.926,0,45.217-20.278,45.217-45.219C342.382,146.256,322.091,125.972,297.165,125.972z'/%3e %3c/g%3e %3c/g%3e %3c/g%3e %3cg%3e %3c/g%3e %3cg%3e %3c/g%3e %3cg%3e %3c/g%3e %3cg%3e %3c/g%3e %3cg%3e %3c/g%3e %3cg%3e %3c/g%3e %3cg%3e %3c/g%3e %3cg%3e %3c/g%3e %3cg%3e %3c/g%3e %3cg%3e %3c/g%3e %3cg%3e %3c/g%3e %3cg%3e %3c/g%3e %3cg%3e %3c/g%3e %3cg%3e %3c/g%3e %3cg%3e %3c/g%3e %3c/svg%3e\"","var map = {\n\t\"./ar.js\": 3133,\n\t\"./ba.js\": 3893,\n\t\"./bg.js\": 6366,\n\t\"./ca.js\": 2596,\n\t\"./cs.js\": 928,\n\t\"./cy.js\": 6290,\n\t\"./da.js\": 9090,\n\t\"./de.js\": 4049,\n\t\"./el.js\": 5189,\n\t\"./en.js\": 7873,\n\t\"./es.js\": 1048,\n\t\"./fa.js\": 6631,\n\t\"./fi.js\": 6463,\n\t\"./fr.js\": 8738,\n\t\"./gd.js\": 5176,\n\t\"./gl.js\": 6673,\n\t\"./he.js\": 2426,\n\t\"./hi.js\": 2579,\n\t\"./hr.js\": 6047,\n\t\"./hu.js\": 7343,\n\t\"./it.js\": 3652,\n\t\"./ja.js\": 7908,\n\t\"./ko.js\": 2394,\n\t\"./lv.js\": 3194,\n\t\"./nb.js\": 8821,\n\t\"./nl.js\": 2682,\n\t\"./nn.js\": 8964,\n\t\"./oc.js\": 7550,\n\t\"./pl.js\": 5362,\n\t\"./pt-BR.js\": 2565,\n\t\"./pt-PT.js\": 8703,\n\t\"./ro.js\": 6333,\n\t\"./ru.js\": 6901,\n\t\"./sk.js\": 4565,\n\t\"./sl.js\": 963,\n\t\"./sr.js\": 3224,\n\t\"./sv.js\": 3079,\n\t\"./te.js\": 6940,\n\t\"./th.js\": 7399,\n\t\"./tr.js\": 4405,\n\t\"./uk.js\": 6425,\n\t\"./vi.js\": 2406,\n\t\"./zh-CN.js\": 5530,\n\t\"./zh-Hans.js\": 9232,\n\t\"./zh-Hant.js\": 3322,\n\t\"./zh-TW.js\": 421\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 2372;"],"sourceRoot":""}