{"version":3,"file":"pwc-watch.587b6e5b.chunk.js","mappings":"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","sources":["static/svg/ArrowGlyph.svg","static/svg/CamtasiaScreencastLogo.svg","static/svg/ColorSwatch.svg","static/svg/FreehandGlyph.svg","static/svg/MediaProcessingGlyph.svg","static/svg/PlusGlyph.svg","static/svg/ScreencastMarketingLogo.svg","static/svg/SnagitLogo.svg","static/svg/SnagitScreencastLogo.svg","static/svg/SparkleGlyph.svg","static/svg/SparkleGlyph16x16.svg","static/svg/SquareGlyph.svg","static/svg/editMediaCopy.svg","static/svg/editMediaOriginal.svg","static/svg/mediaLocationSeparator.svg","component/App.tsx","component/content/CollectionNavigationPane.tsx","component/content/MediaContent.tsx","component/content/MediaTabsToggleButtons.tsx","component/conversation/AnnotationShapes/Freehand.ts","component/conversation/AnnotationShapes/Square.ts","component/conversation/AnnotationToolBar.tsx","component/conversation/ColorPicker.tsx","component/conversation/Comment.tsx","component/conversation/CommentBody.tsx","component/conversation/CommentFilter.tsx","component/conversation/CommentHeader.tsx","component/conversation/CommentInput.tsx","component/conversation/CommentSubmit.tsx","component/conversation/Conversation.tsx","component/conversation/DeleteCommentAlert.tsx","component/conversation/EditingCommentFooter.tsx","component/conversation/EmojiPickerWrapper.tsx","component/conversation/NonEditingCommentFooter.tsx","component/conversation/NotificationToggle.tsx","component/details/EditDetailsModal.tsx","component/details/MediaDescription.tsx","component/details/MediaDetails.tsx","component/details/MediaDetailsChapters.tsx","component/details/MediaDetailsGenerateMenu.tsx","component/details/MediaDetailsLink.ts","component/details/MediaLocation.tsx","component/details/MediaTitle.tsx","component/details/MoreMenu.tsx","component/display/Image.tsx","component/header/HeaderPlaceholder.tsx","component/marketing/MarketingPane.tsx","component/modals/AddCaptionTrackModal.tsx","component/modals/ClearConversationModal.tsx","component/modals/CreateConversationModal.tsx","component/modals/ReplaceMediaModal/ReplaceMediaModal.tsx","component/modals/ReplaceMediaModal/UploadAudioDescriptionModal.tsx","component/modals/ReplaceMediaModal/UploadProgressModal.tsx","component/modals/SetThumbnailModal.tsx","component/modals/ShareToCollectionEmptyState.tsx","component/modals/ShareToCollectionModal.tsx","component/tabs/DataTable.tsx","component/tabs/DataTableActionButtonGroup.tsx","component/tabs/MediaTabs.tsx","component/tabs/MediaTabsHeader.tsx","component/tabs/SettingsTab.tsx","component/tabs/TabContentWrapper.tsx","component/tabs/TabHeader.tsx","component/tabs/accessibility/AudioDescriptions.tsx","component/tabs/accessibility/AudioDescriptionsMenu.tsx","component/tabs/accessibility/Captions.tsx","component/tabs/accessibility/CaptionsActions.tsx","component/tabs/analytics/AnalyticsSegmentData.tsx","component/tabs/analytics/AnalyticsTab.tsx","component/tabs/analytics/BehaviorFilterMenu.tsx","component/tabs/analytics/CollectionsMenu.tsx","component/tabs/analytics/UserBehaviorData.tsx","component/tabs/conversations/ConversationActionMenu.tsx","component/tabs/conversations/ConversationActionsButtonGroup.tsx","component/tabs/conversations/ConversationEmptyState.tsx","component/tabs/conversations/ConversationSettings.tsx","component/tabs/conversations/ConversationsTab.tsx","component/tabs/details/DetailsTab.tsx","component/tabs/edit-media/EditMediaTab.tsx","component/tabs/privacy/MediaPrivacySettings.tsx","component/tabs/privacy/MediaSettings.tsx","component/tabs/quizzing/QuizzingTab.tsx","component/transcript/TranscriptTab.tsx","component/util/FullscreenHelper.ts","component/util/LocalStorageWrapper.ts","component/util/MediaQueryParamsBuilder.ts","component/util/TestablePopoverButton.tsx","constants/tabNames.ts","index.tsx","service/audioDescriptionApi.ts","service/captionApi.ts","service/transcriptionApi.ts","util/AriaHelper.ts","util/Measurement.ts","util/RehypeTimecodeLinksPlugin.ts","util/UrlUtil.ts","util/UserMessaging.ts","util/Wait.ts"],"sourcesContent":["function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nexport default ({\n  styles = {},\n  ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  viewBox: \"0 0 30 30\",\n  height: \"16\",\n  width: \"16\"\n}, props), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M10.87 6.7l4.92-2.02c.91-.91.4-2.47-.87-2.66l-6.08-.93L1.79.02A1.57 1.57 0 000 1.8l1.08 7.03.92 6.07a1.57 1.57 0 002.67.88l1.94-4.71 20.63 18.28c.73.73 1.8.85 2.38.27.58-.58.46-1.63-.28-2.36L10.87 6.7\",\n  fill: \"currentColor\"\n}));","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nexport default ({\n  styles = {},\n  ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  width: \"30\",\n  height: \"30\",\n  fill: \"none\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n}, props), /*#__PURE__*/React.createElement(\"g\", {\n  clipPath: \"url(#clip0_787_2833)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M18.05 0H1.95C.87 0 0 .87 0 1.95v16.1C0 19.13.87 20 1.95 20h16.1c1.08 0 1.95-.87 1.95-1.95V1.95C20 .87 19.13 0 18.05 0z\",\n  fill: \"url(#paint0_linear_787_2833)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M10.67 14.03l-5.64-3.78h-.01-.01a.02.02 0 000 .02v6.8a.44.44 0 00.68.35l4.98-3.4z\",\n  fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M7.5 8.75L5 10.24l5.67 3.79L13 12.44l-5.5-3.7z\",\n  fill: \"#FCE2C9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M16.06 9.64L5.68 2.58a.44.44 0 00-.68.36v4.15a.02.02 0 000 .01l8 5.34h.01l3.05-2.08a.44.44 0 000-.72z\",\n  fill: \"#fff\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n  clipPath: \"url(#clip1_787_2833)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M28.13 10c1.03 0 1.87.84 1.87 1.88v16.24c0 1.04-.84 1.88-1.88 1.88H11.88A1.88 1.88 0 0110 28.12V11.88c0-1.03.84-1.87 1.88-1.87h16.24z\",\n  fill: \"url(#paint1_linear_787_2833)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M16.42 12.18l-2.88 3.03h10.04c.08 0 .16-.04.21-.1l2.37-2.5a.32.32 0 00.07-.33.3.3 0 00-.28-.2h-9.32a.29.29 0 00-.21.1zM16.42 27.4l-2.88-3.02h10.04c.08 0 .16.03.21.09l2.37 2.5c.09.08.11.22.07.33a.3.3 0 01-.28.2h-9.32a.29.29 0 01-.2-.1\",\n  fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  opacity: \".74\",\n  d: \"M16.46 15.2h-2.92v9.18h2.92V15.2z\",\n  fill: \"#fff\"\n})), /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n  id: \"paint0_linear_787_2833\",\n  x1: \"10\",\n  y1: \"0\",\n  x2: \"10\",\n  y2: \"20\",\n  gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n  stopColor: \"#F9A731\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \"1\",\n  stopColor: \"#EE7B2E\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n  id: \"paint1_linear_787_2833\",\n  x1: \"10\",\n  y1: \"10\",\n  x2: \"10\",\n  y2: \"30\",\n  gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n  stopColor: \"#97C93D\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \"1\",\n  stopColor: \"#3D9544\"\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"clip0_787_2833\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h20v20H0z\"\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"clip1_787_2833\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  transform: \"translate(10 10)\",\n  d: \"M0 0h20v20H0z\"\n}))));","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nexport default ({\n  styles = {},\n  ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  viewBox: \"0 0 28 28\"\n}, props), /*#__PURE__*/React.createElement(\"rect\", {\n  x: \"2\",\n  y: \"2\",\n  width: \"24\",\n  height: \"24\",\n  rx: \"4\",\n  ry: \"4\"\n}));","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nexport default ({\n  styles = {},\n  ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  viewBox: \"0 0 33 30\",\n  height: \"16\",\n  width: \"16\"\n}, props), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M24.33 30c-.33 0-.65-.02-.99-.07-7.57-1.1-7.9-7.3-8.2-14.1-.23-5.55-.47-9.8-4.23-11.99A6.17 6.17 0 005.9 3.3a4.88 4.88 0 00-3 2.78A1.5 1.5 0 11.1 4.94 7.84 7.84 0 014.94.46a9.2 9.2 0 017.49.79c5.16 3.03 5.46 8.39 5.71 14.45.32 7.48.86 10.57 5.63 11.26 2.63.37 4.74-2.01 6.49-4.4a1.5 1.5 0 012.42 1.77C31.4 26.08 28.53 30 24.33 30\",\n  fill: \"currentColor\"\n}));","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nexport default ({\n  styles = {},\n  ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"250\",\n  height: \"160\"\n}, props), /*#__PURE__*/React.createElement(\"g\", {\n  opacity: \".25\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M135.81 105.18v-8L127 95a20.74 20.74 0 00-2.4-5.8l4.68-8-5.44-5.44-8 4.68A21.22 21.22 0 00110 78l-2.2-8.84h-8L97.61 78a21.48 21.48 0 00-5.8 2.4l-8-4.68-5.44 5.44 4.68 8a21.35 21.35 0 00-2.4 5.8l-8.84 2.2v8l8.84 2.2a21.35 21.35 0 002.4 5.8l-4.68 8 5.44 5.44 8-4.68a21.48 21.48 0 005.8 2.4l2.2 8.84h8l2.2-8.84a21.22 21.22 0 005.8-2.4l8 4.68 5.44-5.44-4.68-8a20.74 20.74 0 002.4-5.8zm-32 8a12 12 0 1112-12 12 12 0 01-12 12z\",\n  \"data-name\": \"16x16\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n  \"data-name\": \"16x16\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M178.12 49.43L175.06 42l-9 1.36a21 21 0 00-4.44-4.36l1.26-9.19-7.11-2.94-5.6 7.38a21 21 0 00-6.28 0l-5.41-7.33-7.39 3.06 1.35 9a21 21 0 00-4.44 4.41l-9.18-1.26-2.95 7.1 7.39 5.6a21 21 0 000 6.28l-7.33 5.42 3.07 7.39 9-1.35a21.24 21.24 0 004.44 4.43l-1.26 9.18 7.11 2.94 5.6-7.38a21.25 21.25 0 006.27 0l5.42 7.32L163 86l-1.35-9a21 21 0 004.44-4.44l9.18 1.27 2.95-7.11-7.39-5.6a21.32 21.32 0 000-6.28zm-26.5 19.63a12 12 0 116.49-15.68 12 12 0 01-6.49 15.68z\",\n  \"data-name\": \"settings\"\n}))));","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nexport default ({\n  styles = {},\n  ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"16\",\n  height: \"16\",\n  fill: \"none\"\n}, props), /*#__PURE__*/React.createElement(\"rect\", {\n  x: \"7.5\",\n  y: \"2\",\n  width: \"2\",\n  height: \"12\",\n  rx: \"1\",\n  fill: \"current\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n  x: \"2.5\",\n  y: \"9\",\n  width: \"2\",\n  height: \"12\",\n  rx: \"1\",\n  transform: \"rotate(-90 2.5 9)\",\n  fill: \"current\"\n}));","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nexport default ({\n  styles = {},\n  ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", props, /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"32\",\n  height: \"32\",\n  fill: \"none\"\n}, props), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M28.88 0H3.13A3.12 3.12 0 000 3.13v25.75C0 30.6 1.4 32 3.13 32h25.75C30.6 32 32 30.6 32 28.87V3.13C32 1.4 30.6 0 28.87 0z\",\n  fill: \"url(#paint0_linear_384_120)\"\n}), /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n  id: \"paint0_linear_384_120\",\n  x1: \"16\",\n  y1: \"0\",\n  x2: \"16\",\n  y2: \"32\",\n  gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n  stopColor: \"#F9A731\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \"1\",\n  stopColor: \"#EE7B2E\"\n})))), /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"18\",\n  height: \"24\",\n  fill: \"none\",\n  x: \"7\",\n  y: \"4\"\n}, props), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M9.08 18.44L.05 12.41a.03.03 0 00-.04 0V23.3a.7.7 0 001.09.58l7.98-5.44z\",\n  fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M4.01 10L0 12.37l9.08 6.06 3.72-2.53-8.79-5.92z\",\n  fill: \"#FCE2C9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M17.7 11.42L1.1.12A.7.7 0 000 .7v6.64a.03.03 0 00.01.02L12.8 15.9a.03.03 0 00.03 0l4.88-3.32a.7.7 0 000-1.16z\",\n  fill: \"#fff\"\n})));","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nexport default ({\n  styles = {},\n  ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  id: \"Layer_1\",\n  \"data-name\": \"Layer 1\",\n  xmlns: \"http://www.w3.org/2000/svg\",\n  viewBox: \"0 0 512 512\"\n}, props), /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n  id: \"linear-gradient\",\n  x1: \"256\",\n  y1: \"514\",\n  x2: \"256\",\n  y2: \"2\",\n  gradientTransform: \"matrix(1 0 0 -1 0 514)\",\n  gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \"0\",\n  stopColor: \"#68b0db\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \"1\",\n  stopColor: \"#468cc3\"\n}))), /*#__PURE__*/React.createElement(\"g\", {\n  id: \"Icons\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n  id: \"Snagit\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n  id: \"Snagit_Icon_256px\",\n  \"data-name\": \"Snagit Icon 256px\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n  width: \"512\",\n  height: \"512\",\n  rx: \"50\",\n  fill: \"url(#linear-gradient)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#d8ebf6\",\n  d: \"M93 140h78v77H93zM341 295h78v77h-78z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M155.7 374.42l-60.41 62A8 8 0 00101 450h238.68a8 8 0 005.73-2.42L419.05 372H161.43a8 8 0 00-5.73 2.42zM356.36 137.58l60.41-62A8 8 0 00411 62H172.37a8 8 0 00-5.73 2.42L93 140h257.63a8 8 0 005.73-2.42zM345.38 219.42a8 8 0 00-5.73-2.42H93l73.64 75.58a8 8 0 005.73 2.42H419z\",\n  fill: \"#fff\"\n})))));","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nexport default ({\n  styles = {},\n  ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", props, /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"20\",\n  height: \"20\",\n  fill: \"none\"\n}, props), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M18.05 0H1.95C.87 0 0 .87 0 1.95v16.1C0 19.13.87 20 1.95 20h16.1c1.08 0 1.95-.87 1.95-1.95V1.95C20 .87 19.13 0 18.05 0z\",\n  fill: \"url(#paint0_linear_462_219)\"\n}), /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n  id: \"paint0_linear_462_219\",\n  x1: \"10\",\n  y1: \"0\",\n  x2: \"10\",\n  y2: \"20\",\n  gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n  stopColor: \"#F9A731\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \"1\",\n  stopColor: \"#EE7B2E\"\n})))), /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"12\",\n  height: \"16\",\n  fill: \"none\",\n  x: \"5\",\n  y: \"2.5\"\n}, props), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M5.67 12.03L.03 8.25a.02.02 0 00-.03.02v6.8a.44.44 0 00.69.35l4.98-3.4z\",\n  fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M2.5 6.75L0 8.24l5.67 3.79L8 10.44l-5.5-3.7z\",\n  fill: \"#FCE2C9\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M11.06 7.64L.68.58A.44.44 0 000 .94v4.15a.02.02 0 000 .01l8 5.34h.01l3.05-2.08a.44.44 0 000-.72z\",\n  fill: \"#fff\"\n})), /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"20\",\n  height: \"20\",\n  fill: \"none\",\n  x: \"10\",\n  y: \"10\"\n}, props), /*#__PURE__*/React.createElement(\"rect\", {\n  width: \"20\",\n  height: \"20\",\n  rx: \"2.5\",\n  fill: \"url(#paint0_linear_462_224)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M6.65 2.38a.3.3 0 01.23-.09h9.27a.3.3 0 01.23.1c.05.06.08.13.08.2a.3.3 0 01-.1.22l-2.73 2.51a.31.31 0 01-.21.1H3.75l2.9-3.04M6.84 14.38a.3.3 0 00-.2.08l-2.8 2.52a.31.31 0 00-.09.21c0 .08.03.15.08.21.06.06.14.1.23.1h9.27a.3.3 0 00.21-.1l2.92-3.02H6.84zM3.75 8.33h9.6a.3.3 0 01.2.1l2.9 3.03H6.87a.3.3 0 01-.2-.1L3.74 8.34z\",\n  fill: \"#fff\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  opacity: \".74\",\n  fill: \"#fff\",\n  d: \"M13.33 11.46h3.13v2.92h-3.13zM3.75 5.42h3.13v2.92H3.75z\"\n}), /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n  id: \"paint0_linear_462_224\",\n  x1: \"10\",\n  y1: \"0\",\n  x2: \"10\",\n  y2: \"20\",\n  gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n  stopColor: \"#68B0DB\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \"1\",\n  stopColor: \"#468CC3\"\n})))));","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nexport default ({\n  styles = {},\n  ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"32\",\n  height: \"32\",\n  fill: \"none\"\n}, props), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M18.8 10.16a1.01 1.01 0 011.9 0l1.04 2.81a8.1 8.1 0 004.79 4.79l2.8 1.04c.9.33.9 1.57 0 1.9l-2.8 1.04a8.1 8.1 0 00-4.79 4.79l-1.04 2.8c-.33.9-1.57.9-1.9 0l-1.04-2.8a8.1 8.1 0 00-4.79-4.79l-2.8-1.04a1.01 1.01 0 010-1.9l2.8-1.04a8.1 8.1 0 004.79-4.79l1.04-2.8z\",\n  fill: \"url(#paint0_linear_94_995)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M6.8 2.53a.81.81 0 011.53 0l.5 1.37a4.05 4.05 0 002.4 2.4l1.37.5c.7.27.7 1.27 0 1.53l-1.37.5a4.05 4.05 0 00-2.4 2.4l-.5 1.37a.81.81 0 01-1.52 0l-.51-1.37a4.05 4.05 0 00-2.4-2.4l-1.37-.5a.81.81 0 010-1.52L3.9 6.3a4.05 4.05 0 002.4-2.4l.5-1.37z\",\n  fill: \"url(#paint1_linear_94_995)\"\n}), /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n  id: \"paint0_linear_94_995\",\n  x1: \"2\",\n  y1: \"2\",\n  x2: \"26\",\n  y2: \"27.5\",\n  gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n  stopColor: \"#F84CC8\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \"1\",\n  stopColor: \"#EF8200\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n  id: \"paint1_linear_94_995\",\n  x1: \"2\",\n  y1: \"2\",\n  x2: \"26\",\n  y2: \"27.5\",\n  gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n  stopColor: \"#F84CC8\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \"1\",\n  stopColor: \"#EF8200\"\n}))));","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nexport default ({\n  styles = {},\n  ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  width: \"16\",\n  height: \"16\",\n  fill: \"none\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n}, props), /*#__PURE__*/React.createElement(\"g\", {\n  id: \"sparkle\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n  id: \"Vector\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M9.4 5.08a.5.5 0 01.95 0l.52 1.4a4.05 4.05 0 002.4 2.4l1.4.52a.5.5 0 010 .95l-1.4.52a4.05 4.05 0 00-2.4 2.4l-.52 1.4a.5.5 0 01-.95 0l-.52-1.4a4.05 4.05 0 00-2.4-2.4l-1.4-.52a.5.5 0 010-.95l1.4-.52a4.05 4.05 0 002.4-2.4l.52-1.4z\",\n  fill: \"url(#paint0_linear_192_3333)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M3.4 1.26a.4.4 0 01.76 0l.26.7c.2.55.64.98 1.2 1.19l.68.25a.4.4 0 010 .76l-.69.26c-.55.2-.99.64-1.2 1.2l-.25.68a.4.4 0 01-.76 0l-.25-.69c-.2-.55-.64-.99-1.2-1.2l-.69-.25a.4.4 0 010-.76l.7-.25c.55-.2.98-.64 1.19-1.2l.25-.69z\",\n  fill: \"url(#paint1_linear_192_3333)\"\n}))), /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n  id: \"paint0_linear_192_3333\",\n  x1: \"1\",\n  y1: \"1\",\n  x2: \"13\",\n  y2: \"13.75\",\n  gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n  stopColor: \"#F84CC8\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \"1\",\n  stopColor: \"#EF8200\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n  id: \"paint1_linear_192_3333\",\n  x1: \"1\",\n  y1: \"1\",\n  x2: \"13\",\n  y2: \"13.75\",\n  gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n  stopColor: \"#F84CC8\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \"1\",\n  stopColor: \"#EF8200\"\n}))));","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nexport default ({\n  styles = {},\n  ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  viewBox: \"0 0 30 30\",\n  height: \"16\",\n  width: \"16\"\n}, props), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M25.66 28.64v-1.37H4.34c-.89 0-1.61-.72-1.61-1.61V4.34c0-.89.72-1.61 1.61-1.61h21.32c.89 0 1.61.72 1.61 1.61v21.32c0 .89-.72 1.61-1.61 1.61V30c2.4 0 4.34-1.94 4.34-4.34V4.34C30 1.94 28.06 0 25.66 0H4.34A4.35 4.35 0 000 4.34v21.32C0 28.06 1.94 30 4.34 30h21.32v-1.36\",\n  fill: \"currentColor\"\n}));","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nexport default ({\n  styles = {},\n  ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n  width: \"116\",\n  height: \"96\"\n}, props), /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n  id: \"fcc656f0-7d47-4c11-8201-68917a8aaf65\",\n  \"data-name\": \"New Gradient Swatch 5\",\n  x1: \"21.59\",\n  y1: \"11.59\",\n  x2: \"110.41\",\n  y2: \"100.41\",\n  gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \"0\",\n  stopColor: \"#35abab\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \".67\",\n  stopColor: \"#676e96\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \".89\",\n  stopColor: \"#5c568f\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \"1\",\n  stopColor: \"#56488b\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n  id: \"b3e25ce1-2698-43f1-b976-dc1150fdc957\",\n  x1: \"87.06\",\n  y1: \"46.47\",\n  x2: \"108.06\",\n  y2: \"46.47\",\n  xlinkHref: \"#fcc656f0-7d47-4c11-8201-68917a8aaf65\"\n})), /*#__PURE__*/React.createElement(\"title\", null, \"graphic_spot_video-copy\"), /*#__PURE__*/React.createElement(\"g\", {\n  style: {\n    isolation: \"isolate\"\n  }\n}, /*#__PURE__*/React.createElement(\"g\", {\n  id: \"a71a44cf-c316-4e23-8f44-379b5849a339\",\n  \"data-name\": \"Layer 1\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M98 0H2a2 2 0 00-2 2v76a2 2 0 002 2h96a2 2 0 002-2V2a2 2 0 00-2-2zM68 5a1 1 0 011-1h10a1 1 0 011 1v6a1 1 0 01-1 1H69a1 1 0 01-1-1zM52 5a1 1 0 011-1h10a1 1 0 011 1v6a1 1 0 01-1 1H53a1 1 0 01-1-1zM36 5a1 1 0 011-1h10a1 1 0 011 1v6a1 1 0 01-1 1H37a1 1 0 01-1-1zM20 5a1 1 0 011-1h10a1 1 0 011 1v6a1 1 0 01-1 1H21a1 1 0 01-1-1zM4 5a1 1 0 011-1h10a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1zm12 70a1 1 0 01-1 1H5a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1zm16 0a1 1 0 01-1 1H21a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1zm16 0a1 1 0 01-1 1H37a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1zm16 0a1 1 0 01-1 1H53a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1zm16 0a1 1 0 01-1 1H69a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1zm16 0a1 1 0 01-1 1H85a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1zm0-64a1 1 0 01-1 1H85a1 1 0 01-1-1V5a1 1 0 011-1h10a1 1 0 011 1z\",\n  fill: \"#7ca5cc\",\n  opacity: \".3\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  style: {\n    mixBlendMode: \"multiply\"\n  },\n  opacity: \".2\",\n  fill: \"#7ca5cc\",\n  d: \"M4 16h92v48H4z\"\n}), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M114 16H18a2 2 0 00-2 2v76a2 2 0 002 2h96a2 2 0 002-2V18a2 2 0 00-2-2zm-30 5a1 1 0 011-1h10a1 1 0 011 1v6a1 1 0 01-1 1H85a1 1 0 01-1-1zm-16 0a1 1 0 011-1h10a1 1 0 011 1v6a1 1 0 01-1 1H69a1 1 0 01-1-1zm-16 0a1 1 0 011-1h10a1 1 0 011 1v6a1 1 0 01-1 1H53a1 1 0 01-1-1zm-16 0a1 1 0 011-1h10a1 1 0 011 1v6a1 1 0 01-1 1H37a1 1 0 01-1-1zm-16 0a1 1 0 011-1h10a1 1 0 011 1v6a1 1 0 01-1 1H21a1 1 0 01-1-1zm12 70a1 1 0 01-1 1H21a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1zm16 0a1 1 0 01-1 1H37a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1zm16 0a1 1 0 01-1 1H53a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1zm16 0a1 1 0 01-1 1H69a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1zm16 0a1 1 0 01-1 1H85a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1zm16 0a1 1 0 01-1 1h-10a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1zm0-64a1 1 0 01-1 1h-10a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1z\",\n  fill: \"url(#fcc656f0-7d47-4c11-8201-68917a8aaf65)\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n  x: \"20\",\n  y: \"32\",\n  width: \"92\",\n  height: \"48\",\n  rx: \"1\",\n  style: {\n    mixBlendMode: \"multiply\"\n  },\n  fill: \"#193138\",\n  opacity: \".2\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M20 66.76V79a1 1 0 001 1h90a1 1 0 001-1V66.76a22.85 22.85 0 01-6.94 4.24c-18.25 6.92-34.28-15.59-58-15-6.34.13-15.72 2-27.06 10.76z\",\n  style: {\n    mixBlendMode: \"multiply\"\n  },\n  opacity: \".1\",\n  fill: \"#193138\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n  cx: \"97.56\",\n  cy: \"46.47\",\n  r: \"10.5\",\n  style: {\n    mixBlendMode: \"multiply\"\n  },\n  fill: \"url(#b3e25ce1-2698-43f1-b976-dc1150fdc957)\",\n  opacity: \".2\"\n})))));","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nexport default ({\n  styles = {},\n  ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n  width: \"116\",\n  height: \"96\"\n}, props), /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n  id: \"fb70708b-9235-4ce5-b7b0-5df5377144a2\",\n  \"data-name\": \"New Gradient Swatch 5\",\n  x1: \"25\",\n  y1: \"15\",\n  x2: \"110.41\",\n  y2: \"100.41\",\n  gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \"0\",\n  stopColor: \"#35abab\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \".67\",\n  stopColor: \"#676e96\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \".89\",\n  stopColor: \"#5c568f\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n  offset: \"1\",\n  stopColor: \"#56488b\"\n})), /*#__PURE__*/React.createElement(\"linearGradient\", {\n  id: \"ab27ab33-865f-44bb-a397-eb42ca0a2b2a\",\n  x1: \"87.06\",\n  y1: \"46.47\",\n  x2: \"108.06\",\n  y2: \"46.47\",\n  xlinkHref: \"#fb70708b-9235-4ce5-b7b0-5df5377144a2\"\n})), /*#__PURE__*/React.createElement(\"title\", null, \"graphic_spot_video-edit\"), /*#__PURE__*/React.createElement(\"g\", {\n  style: {\n    isolation: \"isolate\"\n  }\n}, /*#__PURE__*/React.createElement(\"g\", {\n  id: \"bd896cae-7857-48d4-b041-4171bce5e502\",\n  \"data-name\": \"Layer 1\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M114 16H27.49L36 24.51V21a1 1 0 011-1h10a1 1 0 011 1v6a1 1 0 01-1 1h-7.51l28.38 28.38L70 61.81 73.31 70a1.21 1.21 0 01-1.52 1.52l-13.66-5.39L16 24v70a2 2 0 002 2h96a2 2 0 002-2V18a2 2 0 00-2-2zm-30 5a1 1 0 011-1h10a1 1 0 011 1v6a1 1 0 01-1 1H85a1 1 0 01-1-1zm-16 0a1 1 0 011-1h10a1 1 0 011 1v6a1 1 0 01-1 1H69a1 1 0 01-1-1zm-16 0a1 1 0 011-1h10a1 1 0 011 1v6a1 1 0 01-1 1H53a1 1 0 01-1-1zM32 91a1 1 0 01-1 1H21a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1zm16 0a1 1 0 01-1 1H37a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1zm16 0a1 1 0 01-1 1H53a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1zm16 0a1 1 0 01-1 1H69a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1zm16 0a1 1 0 01-1 1H85a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1zm16 0a1 1 0 01-1 1h-10a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1zm0-64a1 1 0 01-1 1h-10a1 1 0 01-1-1v-6a1 1 0 011-1h10a1 1 0 011 1z\",\n  fill: \"url(#fb70708b-9235-4ce5-b7b0-5df5377144a2)\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M112 33v46a1 1 0 01-1 1H21a1 1 0 01-1-1V33a1 1 0 011-1h3l34.13 34.13 13.66 5.43A1.21 1.21 0 0073.31 70L70 61.81l-2.16-5.43L43.49 32H111a1 1 0 011 1z\",\n  style: {\n    mixBlendMode: \"multiply\"\n  },\n  opacity: \".2\",\n  fill: \"#193138\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M112 66.76V79a1 1 0 01-1 1H21a1 1 0 01-1-1V66.76C31.34 58 40.72 56.13 47.06 56H48l10.13 10.13 13.66 5.43A1.21 1.21 0 0073.31 70L70 61.81c12.51 5.91 23.31 13.6 35 9.16a22.85 22.85 0 007-4.21z\",\n  style: {\n    mixBlendMode: \"multiply\"\n  },\n  opacity: \".1\",\n  fill: \"#193138\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n  cx: \"97.56\",\n  cy: \"46.47\",\n  r: \"10.5\",\n  style: {\n    mixBlendMode: \"multiply\"\n  },\n  fill: \"url(#ab27ab33-865f-44bb-a397-eb42ca0a2b2a)\",\n  opacity: \".2\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n  fill: \"#7ca5cc\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M67.87 56.38L73.31 70a1.21 1.21 0 01-1.52 1.52l-13.66-5.39L3 11a2.17 2.17 0 01.21-3l6.5-6.49a2.16 2.16 0 013-.21z\",\n  opacity: \".3\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  style: {\n    mixBlendMode: \"multiply\"\n  },\n  opacity: \".2\",\n  d: \"M19.51 8.02l-9.75 9.74 48.37 48.37 4.84-4.85 4.9-4.9L19.51 8.02z\"\n})))));","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nexport default ({\n  styles = {},\n  ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: \"12\",\n  height: \"12\"\n}, props), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M8 4.5L4.21.71a1 1 0 00-1.42 0l-.08.08a1 1 0 000 1.42L6.5 6 2.71 9.79a1 1 0 000 1.42l.08.08a1 1 0 001.42 0L8 7.5 9.5 6z\"\n}));","import React, {Suspense, useEffect, useRef, useState} from 'react';\nimport {TscStyles} from '@techsmith/tsc-cloud-style-guide';\nimport {IWatchAppModel} from '../model/appModel';\nimport {IMediaDetails} from '../model/mediaDetails';\nimport config from '../service/config';\nimport '../static/css/App.css';\nimport HeaderPlaceholder from './header/HeaderPlaceholder';\nimport VideoPlaceholder from './display/VideoPlaceholder';\nimport Analytics from '../service/analytics';\nimport Header from './header/Header';\nimport MediaContent from './content/MediaContent';\nimport {useTranslation} from 'react-i18next';\nimport {useTscTheme} from '../context/themeProvider';\nimport withMemoizedContexts from '../context/contextContainerHoC';\nimport {foldersStore, updateFoldersData} from '../context/foldersProvider';\nimport {IFolderTreeNode} from '../model/folderTreeNode';\nimport ScreenReaderHelper from './util/ScreenReaderHelper';\nimport {PageWrapper} from './util/StyledElements';\nimport {importMediaInterface} from '../hooks/dynamicImport';\n\nexport const AppBase: React.FC<IAppProps & IStateMappedProps> = ({watchAppModel, folderTree}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [media] = useState(watchAppModel.Media);\n\n   const folderDataUpdated = useRef<boolean>(false);\n   useEffect(() => {\n      if (!folderDataUpdated.current) {\n         void (folderTree || updateFoldersData(config.user.TechSmithId));\n         folderDataUpdated.current = true;\n      }\n   }, [folderDataUpdated]);\n\n   useEffect(() => {\n      void Analytics.initialize();\n\n      const mediaCustomDims: Partial<IMediaDetails> = {};\n      Object.keys(media).filter(key => {\n         const unnecessaryKeys = ['Author', 'Description', 'Groups', 'IsDecorated'];\n         return !unnecessaryKeys.includes(key);\n      }).forEach(key => {\n         mediaCustomDims[key] = media[key];\n      });\n      media && Analytics.aiConfigureCustomDimensions(mediaCustomDims, 'media');\n\n      window.addEventListener(TscStyles.events.modalOpenedOnPage, () => importMediaInterface().then(m => m.pause()));\n   }, []);\n\n   return (\n      <PageWrapper theme={theme}>\n         <ScreenReaderHelper\n            href=\"#start-of-content\"\n            text={t('accessibility.skipLinkText')}\n         />\n         {!config.environmentData.IsLti && (\n            <Suspense fallback={<HeaderPlaceholder />}>\n               <Header\n                  hideSearch={true}\n                  hideEntitlementInfo={true}\n                  hideThemePicker={false}\n                  hideNavLinkTabs={false}\n               />\n            </Suspense>\n         )}\n         <div\n            className=\"app-content-wrapper\"\n            id=\"start-of-content\"\n         >\n            <Suspense fallback={<VideoPlaceholder />}>\n               <MediaContent />\n            </Suspense>\n         </div>\n      </PageWrapper>\n   );\n};\n\ninterface IAppProps {\n   watchAppModel: IWatchAppModel;\n}\n\ninterface IStateMappedProps {\n   folderTree: IFolderTreeNode;\n}\n\nconst mapStatesToProps = (\n   {watchAppModel}: IAppProps,\n   {folderTree}: Partial<IStateMappedProps>\n): IStateMappedProps & IAppProps => ({watchAppModel, folderTree});\n\nexport default withMemoizedContexts(mapStatesToProps, foldersStore)(AppBase);\n","import React, {useState, useRef, memo} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport styled from 'styled-components';\nimport cssConstants from '../../constants/cssConstants';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {ICollectionNavigationResponse} from '../../model/appModel';\nimport {IMediaDetails} from '../../model/mediaDetails';\nimport ReactDOM from 'react-dom';\nimport {isMobile} from 'react-device-detect';\nimport {renderToStaticMarkup} from 'react-dom/server';\nimport MediaProcessingGlyph from '../../static/svg/MediaProcessingGlyph.svg';\nimport {\n   ControlButton,\n   Glyphs,\n   TscButtonType,\n   TscStyles,\n   TscThemeName,\n   TscThemeNames\n} from '@techsmith/tsc-cloud-style-guide';\n\nconst CollectionNavigationPane = styled.div<{theme: TscThemeNames}>`\n   background-color: ${props => props.theme === TscThemeName.dusk ? cssConstants.collectionNavigationPaneBackgroundColorDusk : cssConstants.collectionNavigationPaneBackgroundColorDawn};\n   width: 100%;\n   overflow: hidden;\n   max-width: 64rem;\n   display: flex;\n   justify-content: space-between;\n   background-size: cover;\n   background-origin: border-box;\n   border-radius: ${TscStyles.border.radius.md};\n   border: ${props => props.theme === TscThemeName.dusk ? cssConstants.marketingPaneBorderDawn : 'none'};\n   -webkit-box-align: center;\n   align-items: center;\n   align-content: flex-end;\n   padding: 0.5rem 0.5rem 0.5rem 0.75rem;\n   margin: 0;\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n`;\n\nconst CollectionNameContainer = styled.div`\n   display: flex;\n   flex-direction: column;\n   flex-grow: 1;\n   overflow: hidden;\n   white-space: nowrap;\n   text-overflow: ellipsis;\n   justify-content: center;\n   gap: .25rem;\n   height: 100%;\n   align-items: flex-start;\n`;\n\nconst CollectionTitle = styled.div<{theme: TscThemeNames}>`\n   font-weight: 600;\n   font-size: .75rem;\n   line-height: .75rem;\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.lightMedium : TscStyles.color.text.medium};\n   margin: 0;\n   font-family: sans-serif;\n   text-transform: uppercase;\n`;\n\nconst CollectionLink = styled.a<{theme: TscThemeNames}>`\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n   text-decoration: none;\n   display: inline-block;\n   overflow: hidden;  \n   white-space: nowrap;  \n   text-overflow: ellipsis;  \n   font-weight: 600;\n   font-size: 1rem;\n   font-family: Figtree, sans-serif;\n   line-height: 1rem;\n   max-width: 100%;\n   cursor: pointer;\n\n   &:hover {\n      text-decoration: underline;\n   }\n`;\n\nconst ButtonContainer = styled.div`\n   display: flex;\n   flex: 0 0 auto;\n   align-items: center;\n   -webkit-box-align: center;\n   position:relative;\n`;\n\nconst MediaPositionText = styled.span`\n   display: flex;\n   font-family: Figtree, sans-serif;\n   font-size: 1rem;\n   line-height: 1.25rem;\n   font-weight: 400;\n   margin: 0 .5rem;\n   flex: 1 1 auto;\n   text-overflow: ellipsis;\n   overflow: hidden;\n`;\n\nconst NavigationPreviewContainer = styled.div<{showNavigationPreview: boolean; top: number; right: number}>`\n   border-radius: ${TscStyles.border.radius.lg};\n   position: absolute;\n   z-index:1;\n   text-align: center;\n   display: ${props => props.showNavigationPreview ? 'block' : 'none'};\n   box-shadow: 0px 3px 12px 0px rgba(0, 0, 0, 0.15), 0px 1px 3px 0px rgba(0, 0, 0, 0.10);\n   ${props => props.right && `right: calc(100% - ${props.right + window.scrollX}px);`}; \n\n   &.hover-below {\n      ${props => props.top && `top:  calc(${props.top + window.scrollY}px + .5rem);`};\n   }\n\n   &.hover-above {\n      ${props => props.top && `top: calc(${props.top + window.scrollY}px - 6.5rem);`};\n   }\n`;\n\nconst CollectionNavigationPreviewContent = styled.div<{theme: TscThemeNames}>`\n   height: 4rem;\n   background: ${cssConstants.collectionNavigationPreviewBackground};\n   border-radius: ${TscStyles.border.radius.lg};\n   overflow: hidden;\n   backdrop-filter: blur(8px);\n   justify-content: flex-start;\n   align-items: center;\n   gap: .5rem;\n   display: inline-flex;\n   ${props => props.theme === TscThemeName.dusk && 'box-shadow: 0px 0.5px 1px 1px rgb(255 255 255 / 5%) inset'};\n`;\n\nconst NavigationHoverDetails = styled.div`\n   padding: .5rem 0 .5rem .75rem;\n   flex-direction: column;\n   justify-content: center;\n   align-items: flex-start;\n   gap: .25rem;\n   display: inline-flex;\n   max-width: 16rem;\n   min-width: 9rem;\n`;\n\nconst NavigationDirection = styled.div`\n   color: ${cssConstants.collectionNavigationPaneNavigationDirectionColor};\n   font-size: 14px;\n   font-family: Figtree, sans-serif;\n   font-weight: 600;\n   text-transform: uppercase;\n   word-wrap: break-word;\n`;\n\nconst AdjacentMediaName = styled.div`\n   color: ${TscStyles.color.global.white};\n   max-width: 16rem;\n   font-size: 14px;\n   font-family: Figtree, sans-serif;\n   font-weight: 600;\n   word-wrap: break-word;\n   word-break: break-all;\n   display: -webkit-box;\n   -webkit-line-clamp: 1;\n   -webkit-box-orient: vertical;\n   box-orient: vertical;\n   overflow: hidden;\n   text-overflow: ellipsis;\n   text-align: left;\n   width: max-content;\n`;\n\nconst PreviewThumbnail = styled.div<{source: string}>`\n   background-image: url(${props => props.source});\n   transition: opacity 500ms ease 0s;\n   opacity: 1;\n   background-repeat: no-repeat;\n   background-size: cover;\n   background-position: center center;\n   inset: 0px;\n   width: 7.125rem;\n   height: 4rem;\n`;\n\nexport const MarketingPaneBase: React.FC<ICollectionNavigationPaneProps> = ({collectionNavigationResponse, sortMetric, collectionId}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [mediaDetails, setMediaDetails] = useState(null);\n   const buttonHandlerRef = useRef(null);\n   const [showNavigationPreview, setShowNavigationPreview] = useState(false);\n   const [hoverIsNext, setHoverIsNext] = useState(false);\n   const mediaProcessingSvgDataUri = `data:image/svg+xml;base64,${String(btoa(renderToStaticMarkup(<MediaProcessingGlyph />)))}`;\n   const navigationHoverOffset = 64;\n\n   const getPreviewDisplayClass = () => Number(buttonHandlerRef.current.getBoundingClientRect().bottom) + navigationHoverOffset > Math.max(document.documentElement.clientHeight, window.innerHeight) ? 'hover-above' : 'hover-below';\n\n   const handleButtonHover = (hoveredMediaDetails: IMediaDetails, isNext: boolean) => {\n      setMediaDetails(hoveredMediaDetails);\n      setHoverIsNext(isNext);\n      setShowNavigationPreview(true);\n   };\n\n   const handleButtonUnhover = () => {\n      setShowNavigationPreview(false);\n   };\n\n   return (\n      <CollectionNavigationPane\n         data-test-id=\"collection-navigation-pane\"\n         theme={theme}\n      >\n         <CollectionNameContainer>\n            <CollectionTitle theme={theme}>\n               {t('collectionNavigation.title')}\n            </CollectionTitle>\n            <CollectionLink\n               theme={theme}\n               href={`/collections/${collectionId}`}\n            >\n               {collectionNavigationResponse.CollectionName}\n            </CollectionLink>\n         </CollectionNameContainer>\n         <ButtonContainer ref={buttonHandlerRef}>\n            <div\n               onMouseEnter={collectionNavigationResponse.PreviousMediaDetails && !isMobile ? () => handleButtonHover(collectionNavigationResponse.PreviousMediaDetails, false) : null}\n               onMouseLeave={handleButtonUnhover}\n            >\n               <ControlButton\n                  className=\"controlButton\"\n                  themeName={theme}\n                  buttonType={TscButtonType.tertiary}\n                  testId=\"collection-navigation-previous-button\"\n                  title={t('collectionNavigation.previous')}\n                  glyph={<Glyphs.ArrowLeft16x16 />}\n                  disabled={!collectionNavigationResponse.PreviousMediaDetails}\n                  href={collectionNavigationResponse.PreviousMediaDetails ? `/${collectionNavigationResponse.PreviousMediaDetails.Hash}?collection=${collectionId}&sort=${sortMetric}` : null}\n               />\n            </div>\n            <MediaPositionText tabIndex={0}>\n               {t('collectionNavigation.positionMessage', {currentMediaPosition: collectionNavigationResponse.CurrentMediaPosition, collectionMediaCount: collectionNavigationResponse.MediaCount})}\n            </MediaPositionText>\n            <div\n               onMouseEnter={collectionNavigationResponse.NextMediaDetails && !isMobile ? () => handleButtonHover(collectionNavigationResponse.NextMediaDetails, true) : null}\n               onMouseLeave={handleButtonUnhover}\n            >\n               <ControlButton\n                  className=\"controlButton\"\n                  themeName={theme}\n                  buttonType={TscButtonType.tertiary}\n                  testId=\"collection-navigation-next-button\"\n                  title={t('collectionNavigation.next')}\n                  glyph={<Glyphs.ArrowRight16x16 />}\n                  disabled={!collectionNavigationResponse.NextMediaDetails}\n                  href={collectionNavigationResponse.NextMediaDetails ? `/${collectionNavigationResponse.NextMediaDetails.Hash}?collection=${collectionId}&sort=${sortMetric}` : null}\n               />\n            </div>\n         </ButtonContainer>\n         {ReactDOM.createPortal(\n            <>\n               {mediaDetails && buttonHandlerRef && buttonHandlerRef.current && buttonHandlerRef.current.getBoundingClientRect() && (\n                  <NavigationPreviewContainer\n                     data-test-id=\"collection-navigation-preview-hover\"\n                     className={getPreviewDisplayClass()}\n                     showNavigationPreview={showNavigationPreview}\n                     top={buttonHandlerRef.current.getBoundingClientRect().bottom}\n                     right={buttonHandlerRef.current.getBoundingClientRect().right}\n                  >\n                     <CollectionNavigationPreviewContent theme={theme}>\n                        <NavigationHoverDetails>\n                           <NavigationDirection>\n                              {hoverIsNext ? t('collectionNavigation.next') : t('collectionNavigation.previous')}\n                           </NavigationDirection>\n                           <AdjacentMediaName>\n                              {mediaDetails.Title}\n                           </AdjacentMediaName>\n                        </NavigationHoverDetails>\n                        <PreviewThumbnail source={mediaDetails.ThumbnailUrl ? mediaDetails.ThumbnailUrl : mediaProcessingSvgDataUri} />\n                     </CollectionNavigationPreviewContent>\n                  </NavigationPreviewContainer>\n               )}\n            </>,\n            document.body\n         )}\n      </CollectionNavigationPane>\n   );\n};\n\nexport interface ICollectionNavigationPaneProps {\n   collectionNavigationResponse: ICollectionNavigationResponse;\n   sortMetric: string;\n   collectionId: string;\n}\n\nexport default memo(MarketingPaneBase);\n","import React, {useEffect, useRef, useState, useCallback} from 'react';\nimport smoothscroll from 'smoothscroll-polyfill';\nimport styled from 'styled-components';\nimport Driver from 'driver.js';\nimport {buildSortMetricQueryParams} from '../util/MediaQueryParamsBuilder';\nimport 'driver.js/dist/driver.min.css';\nimport Constants, {AnnotationModes, SortMetric} from '../../constants/Constants';\nimport cssConstants from '../../constants/cssConstants';\nimport PizzaTracker from '../display/PizzaTracker';\nimport SmartPlayer from '../display/SmartPlayer';\nimport config from '../../service/config';\nimport {showWatchProductMessage} from '../../util/MarketingHelper';\nimport MarketingPane from '../marketing/MarketingPane';\nimport ReactionsEmojiMenu from '../reactions/ReactionsMenu';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {mediaTabsStore, updateMediaTabsState} from '../../context/mediaTabsProvider';\nimport {selectedConversationStore, updateSelectedConversationState} from '../../context/selectedConversationProvider';\nimport {useQueryParam, StringParam} from 'use-query-params';\nimport {TscThemeNames, TscStyles, TscThemeName} from '@techsmith/tsc-cloud-style-guide';\nimport {useTranslation} from 'react-i18next';\nimport {IConversationData} from '../../model/conversationModel';\nimport {conversationsStore, updateConversationsFromServer} from '../../context/conversationsProvider';\nimport {IComment} from '../../model/commentModel';\nimport collectionApi from '../../service/collectionApi';\nimport conversationApi from '../../service/conversationApi';\nimport {SetupWorkerState} from '../../model/workerState';\nimport {annotationManagerStore, updateAnnotationManagerState} from '../../context/annotationManagerProvider';\nimport Image from '../display/Image';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {mediaStore} from '../../context/mediaProvider';\nimport logging from '../../service/logging';\nimport {isMobile, isSafari} from 'react-device-detect';\nimport {updateCommentsState} from '../../context/commentsProvider';\nimport {updateReactionsFromServer} from '../../context/reactionsProvider';\nimport ReactionsImageWidget from '../reactions/ReactionsImageWidget';\nimport LocalStorageWrapper from '../util/LocalStorageWrapper';\nimport Axios, {CancelTokenSource} from 'axios';\nimport CollectionNavigationPane from './CollectionNavigationPane';\nimport {displayModes, events} from '@techsmith/techsmith-smartplayer';\nimport {importMediaInterface} from '../../hooks/dynamicImport';\nimport MediaTabs from '../tabs/MediaTabs';\nimport MediaTabsToggleButtons from './MediaTabsToggleButtons';\nimport {transcriptStore} from '../../context/transcriptProvider';\nimport DetailsTab from '../tabs/details/DetailsTab';\nimport MediaDetails from '../details/MediaDetails';\nimport {ITranscript} from '../../model/captionModels';\n\nsmoothscroll.polyfill();\n\nconst cssAspectRatio = '--media-sizing-aspect-ratio';\n\nconst ninetyDegrees = 90;\nconst twoSeventyDegrees = 270;\nconst gap = '.75rem';\nconst reactionsContainerHeight = '2.125rem';\n\nconst ViewPageGrid = styled.div<{annotationMode: AnnotationModes; isSidePanelOpen: boolean; mediaWidth: number; mediaHeight: number; marketingPaneVisible: boolean; smartPlayerDisplayMode: string}>`\n   display: grid;\n   ${props => props.smartPlayerDisplayMode === displayModes.Theater && 'flex-direction: column;'};\n   width: 100%;\n   height: ${props => props.smartPlayerDisplayMode === displayModes.Theater ? '100%' : 'max-content'};\n   padding: ${props => props.smartPlayerDisplayMode === displayModes.Theater ? (props.marketingPaneVisible ? `${cssConstants.viewPageMeasurements.layoutGridVerticalMargin} 0` : 0) : `${cssConstants.viewPageMeasurements.layoutGridVerticalMargin} ${cssConstants.viewPageMeasurements.layoutGridHorizontalMargin}`};\n\n   grid-template-areas:\n      ${props => props.marketingPaneVisible && '\\'leftGutter marketing marketing rightGutter\\''}\n      'leftGutter player sidePanel rightGutter'\n      'leftGutter reactions sidePanel rightGutter'\n      'leftGutter mediaDetails sidePanel rightGutter'\n      'leftGutter manage sidePanel rightGutter';\n   grid-template-rows:\n      ${props => props.marketingPaneVisible && 'min-content'}\n      min-content\n      min-content\n      min-content\n      1fr;\n\n   ${props => props.smartPlayerDisplayMode === displayModes.Theater && props.marketingPaneVisible &&\n      `grid-template-areas:\n         'marketing marketing marketing marketing'\n         'player player player player'\n         'leftGutter reactions ${props.isSidePanelOpen ? 'sidePanel' : 'reactions'} rightGutter'\n         'leftGutter mediaDetails ${props.isSidePanelOpen ? 'sidePanel' : 'mediaDetails'} rightGutter'\n         'leftGutter manage ${props.isSidePanelOpen ? 'sidePanel' : 'manage'} rightGutter';\n      `}\n\n   ${props => props.smartPlayerDisplayMode === displayModes.Theater && !props.marketingPaneVisible &&\n      `grid-template-areas:\n         'player player player player'\n         'leftGutter reactions ${props.isSidePanelOpen ? 'sidePanel' : 'reactions'} rightGutter'\n         'leftGutter mediaDetails ${props.isSidePanelOpen ? 'sidePanel' : 'mediaDetails'} rightGutter'\n         'leftGutter manage ${props.isSidePanelOpen ? 'sidePanel' : 'manage'} rightGutter';\n      `}\n\n   ${props => props.smartPlayerDisplayMode === displayModes.Theater && props.marketingPaneVisible &&\n      `grid-template-rows:\n         min-content\n         auto\n         min-content\n         min-content\n         1fr;\n      `}\n\n   ${props => props.smartPlayerDisplayMode === displayModes.Theater && !props.marketingPaneVisible &&\n      `grid-template-rows:\n         auto\n         min-content\n         min-content\n         1fr;\n      `}\n\n   grid-template-columns: auto auto auto auto;\n   ${props => props.smartPlayerDisplayMode === displayModes.Theater &&\n      `grid-template-columns:\n         1fr\n         minmax(auto, ${cssConstants.contentWidth})\n         ${cssConstants.conversationPanelWidth}\n         1fr;\n      `}\n\n   justify-content: center;\n\n   @media screen and (max-width: ${cssConstants.mediaTabsDisplayBreakpoint}px) {\n      padding: 0;\n      width: 100%;\n      display: flex;\n      flex-direction: column;\n      justify-content: start;\n   }\n`;\n\nconst LeftGutterContainer = styled.div`\n   grid-area: leftGutter;\n`;\n\nconst RightGutterContainer = styled.div`\n   grid-area: rightGutter;\n`;\n\nconst MarketingContainer = styled.div`\n   grid-area: marketing;\n   display: flex;\n   justify-content: center;\n`;\n\nconst CollectionNavigationContainer = styled.div`\n   display: flex;\n   justify-content: center;\n   max-width: 64rem;\n   width: 100%;\n   margin: .5rem auto;\n`;\n\nconst MediaContainer = styled.div`\n   width: 100%;\n   min-width: 0;\n   grid-area: player;\n   display: flex;\n   flex-direction: column;\n   align-content: center;\n   align-items: center;\n   margin-bottom: ${gap};\n\n   @media screen and (max-width: ${cssConstants.mediaTabsDisplayBreakpoint}px)  {\n      margin-bottom: 0;\n   }\n`;\n\nconst MediaDetailsContainer = styled.div`\n   grid-area: mediaDetails;\n   justify-self: end;\n   width: 100%;\n   min-width: 0;\n`;\n\nconst ReactionsContainer = styled.div`\n   grid-area: reactions;\n   display: flex;\n   width: 100%;\n   align-content: space-around;\n   flex-wrap: wrap;\n   justify-content: center;\n   align-items: center;\n   height: ${reactionsContainerHeight};\n   justify-self: end;\n\n   @media screen and (max-width: ${cssConstants.mediaTabsDisplayBreakpoint}px) {\n      margin: .5rem 0;\n   }\n`;\n\nconst SidePanelContainer = styled.div<{theme: TscThemeNames; mediaTabsPanelOpen: boolean; smartPlayerDisplayMode: string; marketingPaneVisible: boolean; isLti: boolean}>`\n   background-color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.medium : TscStyles.color.ui.dawn.light};\n   grid-area: sidePanel;\n   position: ${props => props.mediaTabsPanelOpen ? 'sticky' : 'initial'};\n   top: calc(${props => props.isLti ? '0px' : `var(${cssConstants.variables.headerHeight}, ${cssConstants.headerHeight})`} + ${cssConstants.viewPageMeasurements.layoutGridHorizontalMargin} + ${props => props.marketingPaneVisible ? gap : '0px'});\n   height: calc(100dvh - ${props => props.isLti ? '0px' : `var(${cssConstants.variables.headerHeight}, ${cssConstants.headerHeight}) - var(${cssConstants.variables.marketingBannerHeight}, 0px)`} - ${cssConstants.viewPageMeasurements.layoutGridHorizontalMargin} - ${gap});\n   width: ${props => !props.mediaTabsPanelOpen ? '0px' : props.smartPlayerDisplayMode === displayModes.Theater || !props.mediaTabsPanelOpen ? 'auto' : 'min-content'};\n   margin-left: ${props => props.mediaTabsPanelOpen ? '.75rem' : '0'};\n   box-shadow: 0 3px 6px rgba(0,0,0,.15), 0 0 2px rgba(0,0,0,.1);\n   box-sizing: border-box;\n   border-radius: ${TscStyles.border.radius.xl};\n\n   @media screen and (max-width: ${cssConstants.mediaTabsDisplayBreakpoint}px) {\n      width: auto;\n      flex: 1 1 auto;\n      height: 100%;\n      border-radius: 0;\n   }\n\n   @media screen and (min-height: ${cssConstants.mobileHeightBreakpoint}px) and (max-width: ${cssConstants.mediaTabsDisplayBreakpoint}px) {\n      margin-left: 0;\n   }\n\n   @media screen and (max-height: ${cssConstants.mobileHeightBreakpoint}px) and (max-width: ${cssConstants.mediaTabsDisplayBreakpoint}px) {\n      ${props => props.mediaTabsPanelOpen && 'min-height: 5rem;'}\n      margin-left: 0;\n      overflow: visible;\n   }\n\n   &.driver-highlighted-element {\n      top: 0 !important;\n   }\n`;\n\nconst ReactionsMenuContainer = styled.div<{conversationsEnabled: boolean; theme: TscThemeNames}>`\n   display: flex;\n   justify-content: flex-end;\n   border-radius: ${TscStyles.border.radius.lg};\n   border: 1px solid ${props => props.theme === TscThemeName.dawn ? TscStyles.color.ui.dawn.mediumDark : TscStyles.color.ui.dusk.medium};\n   overflow: hidden;\n   height: 2.125rem;\n   margin-bottom: ${gap};\n\n   .toggle-conversations-panel {\n      ${props => props.conversationsEnabled && `border-radius: 0 ${TscStyles.border.radius.md} ${TscStyles.border.radius.md} 0;`};\n   }\n`;\n\nconst ManagementContainer = styled.div<{mediaTabsPanelOpen: boolean}>`\n   grid-area: manage;\n   display: flex;\n   flex-direction: column;\n   width: 100%;\n   justify-self: end;\n   margin-top: ${gap};\n\n   /* needed to tie/beat 'more' menu of media details window on vertically short viewport */\n   @media screen and (min-width: ${cssConstants.contextMenuBreakpoint}px) {\n      z-index: ${cssConstants.zIndex.viewPageElement};\n   }\n\n   @media screen and (max-width: ${cssConstants.mediaTabsDisplayBreakpoint}px) {\n      margin-top: 0;\n      ${props => props.mediaTabsPanelOpen && 'display: none;'};\n   }\n`;\n\nconst MediaPageWrapper = styled.div<{theme: TscThemeNames}>`\n   display: flex;\n   flex-grow: 1;\n   justify-content: center;\n   width: 100%;\n   align-self: center;\n\n   @media screen and (max-width: ${cssConstants.mediaTabsDisplayBreakpoint}px) {\n      height: calc(100svh - var(${cssConstants.variables.headerHeight}, ${cssConstants.headerHeight}));\n   }\n`;\n\nexport const MediaBase = styled.div<{mediaHeight: number; isSafari: boolean; smartPlayerDisplayMode: string; isVideo: boolean; isReactionsEnabled: boolean; isSidePanelOpen: boolean}>`\n   overflow: auto;\n   aspect-ratio: var(${cssAspectRatio}, 1920 / 1080);\n   display: grid;\n   width: 100vw;\n   max-width: 100%;\n   height: fit-content;\n   max-height: min(${props => props.isVideo ? `${props.mediaHeight}px` : `calc(${props.mediaHeight}px * max(1, var(${cssConstants.variables.zoom}, 1)))`}, calc(100svh - ${props => props.smartPlayerDisplayMode === displayModes.Theater ? gap : `${gap} - ${cssConstants.viewPageMeasurements.layoutGridHorizontalMargin}`} - var(${cssConstants.variables.headerHeight}, ${cssConstants.headerHeight}) - var(${cssConstants.variables.marketingBannerHeight}, 0px) - ${props => props.isReactionsEnabled ? reactionsContainerHeight : '0px'} - var(${cssConstants.variables.mediaDetailsHeight}, 0px)));\n   position: relative;\n   ${props => props.smartPlayerDisplayMode !== displayModes.Theater && props.isVideo && `border-radius: ${TscStyles.border.radius.lg};`}\n\n   &.pizza-tracker {\n      aspect-ratio: 10 / 6;\n      width: 100%;\n\n      #tscMediaContent {\n         height: 100%;\n         width: 100%;\n      }\n   }\n\n   /* Safari fullscreen fix for safari v15.x and lower, because our images trigger the fullscreen zoom element to be a child of */\n   /* this element, safari has a bug where it still lets some parent styling of the fullscreen element bleed down and it screws up */\n   /* full-screen rendering of the sibling, in this case, the zoom mechanics of images, (version 16.x appears to do better and maybe this can go after adoption */\n   &:-webkit-full-screen {\n      margin-left: 0;\n      max-width: 100vw;\n      max-height: 100vh;\n      height: 100vh;\n      width: 100vw;\n      border-radius: 0;\n   }\n\n   @media screen and (max-width: ${cssConstants.mediaTabsDisplayBreakpoint}px) {\n      border-radius: 0;\n   }\n\n   @media screen and (min-height: ${cssConstants.mobileHeightBreakpoint}px) and (max-width: ${cssConstants.mediaTabsDisplayBreakpoint}px)  {\n      ${props => props.isSidePanelOpen && `max-height: calc(50svh - var(${cssConstants.variables.headerHeight}, ${cssConstants.headerHeight}) - ${props.isReactionsEnabled ? '3.125rem' : '0'});`}\n   }\n`;\n\nconst AnnotationControlsHelper = styled.div<{theme: TscThemeNames}>`\n   display: flex;\n   flex-direction: column;\n   align-items: center;\n   text-align: center;\n   margin-top: 0.5rem !important;\n   margin-bottom: 0.5rem;\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.light : TscStyles.color.text.mediumDark};\n   font-family: ${TscStyles.font.family.primary};\n   font-size: 0.875rem;\n`;\n\nexport const AnnotationControlsHelperHeader = styled.div`\n   padding: .25rem 0;\n   font-weight: 600;\n   font-size: 1.125rem;\n`;\n\nconst ConversationReactionsButton = styled.div<{theme: TscThemeNames}>`\n   display: flex;\n   height: 2.125rem;\n   outline: none;\n`;\n\nconst getCommentOrReplyById = (commentsToSearch: IComment[], commentId: string) => {\n   const flatComments = commentsToSearch.reduce((commentsList: IComment[], c: IComment) => commentsList.concat(c, ...c.replies), []);\n   return flatComments.find((c: IComment) => c.id === commentId);\n};\n\nconst getRotatedDimensions = (width: number, height: number, rotation: number) => {\n   // not accounting for rotation other than 90/270 because it is entirely unexpected and therefore unnecessary math\n   // below, if isRotated we invert height/width aspect ratio calc and pass in height instead of width for size constraint\n   const isRotated = rotation === ninetyDegrees || rotation === twoSeventyDegrees;\n   return [\n      isRotated ? height : width,\n      isRotated ? width : height\n   ];\n};\n\nexport const MediaContentBase: React.FC<IStateMappedProps> = ({mediaTabsPanelOpen, hasToggledMediaTabs, annotationMode, conversations, VideoReviewId, Hash, IsVideo, Width, Height, Rotate, IsYouTube, IsReady, transcript}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [conversationLoadingState, setConversationLoadingState] = SetupWorkerState(IsVideo);\n   const [initialSelectedComment, setInitialSelectedComment] = useState(null);\n   const [conversationParam] = useQueryParam(Constants.queryParams.conversation, StringParam);\n   const [collectionId] = useQueryParam('collection', StringParam);\n   const [collectionSortOrder] = useQueryParam('sort', StringParam);\n   const getCollectionNavigationDataCancellationToken = useRef<CancelTokenSource>(null);\n   const [deepLinkedCommentIdCamelCase] = useQueryParam(Constants.queryParams.commentId, StringParam);\n   const [deepLinkedCommentIdLowerCase] = useQueryParam(Constants.queryParams.commentid, StringParam);\n   const deepLinkedCommentId = deepLinkedCommentIdCamelCase ? deepLinkedCommentIdCamelCase : deepLinkedCommentIdLowerCase;\n   const mediaContainerRef = useRef<HTMLDivElement>(null);\n   const rootContainerRef = useRef<HTMLElement>(document.querySelector(':root'));\n   const mediaPageWrapperRef = useRef<HTMLDivElement>(null);\n   const playerSettingsOpen = useRef(false);\n   const conversationCoachMarkRef = useRef<Driver>(null);\n   const [smartPlayerDisplayMode, setSmartPlayerDisplayMode] = useState<string>('normal');\n   const [collectionNavigationResponse, setCollectionNavigationResponse] = useState(null);\n   const [showMediaTabsControlButtons, setShowMediaTabsControlButtons] = useState(false);\n   const [showMediaTabsOnSide, setShowMediaTabsOnSide] = useState(window.innerWidth > cssConstants.mediaTabsDisplayBreakpoint);\n   const [videoPaused, setVideoPaused] = useState(true);\n\n   const onVideoPause = () => {\n      setVideoPaused(true);\n   };\n\n   const onVideoPlay = () => {\n      setVideoPaused(false);\n   };\n\n   const onPlayerSettingsClose = useCallback(() => {\n      playerSettingsOpen.current = false;\n   }, []);\n\n   const onPlayerSettingsOpen = useCallback(() => {\n      playerSettingsOpen.current = true;\n   }, []);\n\n   const generateGetCollectionNavigationDataCancellationToken = () => {\n      const currentCancellationToken = getCollectionNavigationDataCancellationToken.current;\n      if (currentCancellationToken) {\n         currentCancellationToken.cancel();\n      }\n\n      const newCancellationToken = Axios.CancelToken.source();\n      getCollectionNavigationDataCancellationToken.current = newCancellationToken;\n      return newCancellationToken;\n   };\n\n   const getCollectionNavigationData = async () => {\n      if (collectionId) {\n         setCollectionNavigationResponse(await collectionApi.getCollectionNavigationData(collectionId, Hash, buildSortMetricQueryParams(collectionSortOrder as SortMetric), generateGetCollectionNavigationDataCancellationToken()));\n      }\n   };\n\n   useEffect(() => {\n      void getCollectionNavigationData();\n      void importMediaInterface().then(mediaInterface => {\n         mediaInterface.addEventListener(events.External.PlayerSettingsClose, onPlayerSettingsClose);\n         mediaInterface.addEventListener(events.External.PlayerSettingsOpen, onPlayerSettingsOpen);\n         mediaInterface.addEventListener(events.ExternalVideo.VideoPause, onVideoPause);\n         mediaInterface.addEventListener(events.ExternalVideo.VideoPlay, onVideoPlay);\n      });\n\n      return () => {\n         void importMediaInterface().then(mediaInterface => {\n            mediaInterface.removeEventListener(events.External.PlayerSettingsClose, onPlayerSettingsClose);\n            mediaInterface.removeEventListener(events.External.PlayerSettingsOpen, onPlayerSettingsOpen);\n            mediaInterface.removeEventListener(events.ExternalVideo.VideoPause, onVideoPause);\n            mediaInterface.removeEventListener(events.ExternalVideo.VideoPlay, onVideoPlay);\n         });\n      };\n   }, []);\n\n   const updateSelectedConversation = async () => {\n      try {\n         setConversationLoadingState({isWorking: true, hasError: false});\n         const updatedComments: IComment[] = conversationParam ? await conversationApi.getConversationComments(conversationParam) : [];\n         const selectedComment = (deepLinkedCommentId && getCommentOrReplyById(updatedComments, deepLinkedCommentId)) || null;\n\n         const mediaInterface = await importMediaInterface();\n         selectedComment && mediaInterface.addEventListener(events.ExternalVideo.VideoLoadedData, () => {\n            mediaInterface.currentTime = selectedComment.time;\n         });\n\n         setInitialSelectedComment(selectedComment);\n         updateCommentsState({comments: updatedComments});\n         updateSelectedConversationState({VideoReviewId: conversationParam, SelectedComment: selectedComment});\n         updateAnnotationManagerState({annotationMode: selectedComment?.annotation ? AnnotationModes.display : AnnotationModes.none});\n         setConversationLoadingState({isWorking: false, hasError: false});\n      } catch (e) {\n         setConversationLoadingState({isWorking: false, hasError: true});\n         logging.error('Failed to update selected conversation: ', e);\n         e.status === Constants.statusCodes.notFound && (config.watchConfig.isOwnerAdminOrTeamEditor) && updateMediaTabsState({mediaTabsPanelOpen: false});\n         e.status === Constants.statusCodes.notFound && (config.featureSwitches.IsScreencast || config.watchConfig.isOwnerAdminOrTeamEditor) && updateSelectedConversationState({VideoReviewId: '', Title: null, SelectedComment: null, ConversationHash: null});\n      }\n   };\n\n   const shouldDisplayCoachMarkForConversations = (): boolean => {\n      const conversationContainerElement = document.getElementById('side-panel-container');\n      const userHasCloseCoachMark = LocalStorageWrapper.getItem(Constants.localStorageKeys.conversationCoachMark.replace('{userId}', config.user.TechSmithId));\n      return config.featureSwitches.IsScreencast && conversationCoachMarkRef.current && !isMobile && window.innerWidth > cssConstants.mediaTabsDisplayBreakpoint && !userHasCloseCoachMark && !!conversationContainerElement;\n   };\n\n   const displayCoachMarkForConversations = () => {\n      if (shouldDisplayCoachMarkForConversations()) {\n         conversationCoachMarkRef.current.highlight({\n            element: '#side-panel-container',\n            popover: {\n               title: t('conversations.coachMark.title'),\n               description: `${t('conversations.coachMark.message')}${t('conversations.coachMark.screenReaderAlert')}`,\n               position: 'left-top'\n            }\n         });\n\n         setTimeout(() => {\n            const coachMarkCloseButton = document.getElementsByClassName('driver-close-btn')[0] as HTMLElement;\n            coachMarkCloseButton.ariaLabel = t('conversations.coachMark.screenReaderCloseButtonAriaLabel');\n            coachMarkCloseButton && coachMarkCloseButton.focus();\n         }, 0);\n      }\n   };\n\n   const resizeHandler = useCallback(() => {\n      setShowMediaTabsOnSide(window.innerWidth >= cssConstants.mediaTabsDisplayBreakpoint);\n      // We do not want to display this coach mark for conversations under the video\n      if (conversationCoachMarkRef.current && conversationCoachMarkRef.current.isActivated && window.innerWidth <= cssConstants.mediaTabsDisplayBreakpoint) {\n         // library does not have a destroy method. this is a hack around it.\n         const coachMarkButton = document.getElementsByClassName('driver-close-btn')[0] as HTMLElement;\n         if (coachMarkButton) {\n            coachMarkButton.click();\n         }\n      }\n   }, []);\n\n   useEffect(() => {\n      const selectedConversation = conversations?.length ?\n         config.featureSwitches.UseSingleConversation ?\n            conversations[0] :\n            conversations.find(conversation => conversation.VideoReviewId === conversationParam) :\n         null;\n\n      selectedConversation && updateSelectedConversationState({Title: selectedConversation.Title, VideoReviewId: conversationParam, ConversationHash: selectedConversation.ConversationHash});\n\n      displayCoachMarkForConversations();\n   }, [conversations]);\n\n   useEffect(() => {\n      conversationCoachMarkRef.current?.reset();\n      if (!mediaTabsPanelOpen) {\n         return;\n      }\n\n      const hideOnMobileLoad = !deepLinkedCommentId && !hasToggledMediaTabs && mediaPageWrapperRef.current.clientWidth < cssConstants.mediaTabsDisplayBreakpoint;\n      if (IsYouTube || hideOnMobileLoad) {\n         updateMediaTabsState({mediaTabsPanelOpen: false});\n      }\n   }, [mediaTabsPanelOpen]);\n\n   useEffect(() => {\n      void updateSelectedConversation();\n      if (config.featureSwitches.EnableReactions && conversationParam) {\n         void updateReactionsFromServer(conversationParam);\n      }\n   }, [conversationParam]);\n\n   useEffect(() => {\n      void (IsReady && updateConversationsFromServer(Hash));\n   }, [IsReady, Hash]);\n\n   useEffect(() => {\n      const stageBgColor = theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.medium : TscStyles.color.ui.dawn.light;\n      const driver = new Driver({\n         className: 'conversation-coach-mark',\n         padding: 0,\n         opacity: 0.5,\n         allowClose: false,\n         stageBackground: stageBgColor,\n         keyboardControl: false,\n         onDeselected: () => {\n            LocalStorageWrapper.setItem(Constants.localStorageKeys.conversationCoachMark.replace('{userId}', config.user.TechSmithId), 'true');\n         }\n      });\n      conversationCoachMarkRef.current = driver;\n\n      window.addEventListener('resize', resizeHandler);\n\n      return () => {\n         window.removeEventListener('resize', resizeHandler);\n      };\n   }, []);\n\n   useEffect(() => {\n      resizeHandler();\n   }, [mediaTabsPanelOpen]);\n\n   useEffect(() => {\n      const [rotatedMediaWidth, rotatedMediaHeight] = getRotatedDimensions(Width, Height, Rotate);\n      rootContainerRef.current.style.setProperty(cssAspectRatio, `${rotatedMediaWidth} / ${rotatedMediaHeight}`); // We use this instead state so the css var can support the fallback aspect ratio\n   }, [Height, Width, Rotate]);\n\n   const onDisplayModeChange = (displayMode: string) => {\n      setSmartPlayerDisplayMode(displayMode);\n   };\n\n   const showConversation: boolean =\n      (\n         (config.featureSwitches.UseSingleConversation && conversations?.length > 0) ||\n         ((config.watchConfig.isOwnerAdminOrTeamEditor) && !config.environmentData.IsLti) ||\n         !!conversationParam\n      ) && IsReady && !IsYouTube;\n\n   const displayMediaTabsControlButtons = useCallback(() => {\n      setShowMediaTabsControlButtons(true);\n   }, []);\n\n   const hideMediaTabsControlButtons = useCallback(() => {\n      setShowMediaTabsControlButtons(false);\n   }, []);\n\n   const smartPlayerElement = IsReady ?\n      IsVideo ? (\n         <>\n            <SmartPlayer\n               isEmbedded={false}\n               onDisplayModeChange={onDisplayModeChange}\n            />\n            <MediaTabsToggleButtons hidden={!(!mediaTabsPanelOpen && showMediaTabsOnSide && (showMediaTabsControlButtons || videoPaused))} />\n         </>\n      ) : (\n         <Image>\n            <SmartPlayer\n               isEmbedded={false}\n               onDisplayModeChange={onDisplayModeChange}\n            />\n         </Image>\n      )\n      : <></>;\n\n   const nativeMediaHeight = getRotatedDimensions(Width, Height, Rotate)[1];\n   const showMarketingPane = showWatchProductMessage();\n   const viewReviewId = conversations?.length > 0 ? conversations[0].VideoReviewId : null;\n   const mediaTabsEnabled = !!VideoReviewId || (config.featureSwitches.IsScreencast && conversations?.length > 0) || !!transcript || config.watchConfig.isOwnerAdminOrTeamEditor || config.watchConfig.isCaptionAdminOrAssignee;\n\n   return (\n      <MediaPageWrapper\n         ref={mediaPageWrapperRef}\n         theme={theme}\n         data-test-id=\"media-content\"\n      >\n         <ViewPageGrid\n            annotationMode={annotationMode}\n            isSidePanelOpen={mediaTabsPanelOpen && mediaTabsEnabled}\n            mediaWidth={Width}\n            mediaHeight={Height}\n            marketingPaneVisible={showMarketingPane}\n            smartPlayerDisplayMode={smartPlayerDisplayMode}\n         >\n            <LeftGutterContainer />\n            {showMarketingPane && (\n               <MarketingContainer>\n                  <MarketingPane />\n               </MarketingContainer>\n            )}\n            <MediaContainer ref={mediaContainerRef}>\n               <MediaBase\n                  onMouseOver={displayMediaTabsControlButtons}\n                  onMouseOut={hideMediaTabsControlButtons}\n                  className={`media-base ${!IsReady ? 'pizza-tracker' : ''}`}\n                  mediaHeight={nativeMediaHeight}\n                  isSafari={isSafari}\n                  smartPlayerDisplayMode={smartPlayerDisplayMode}\n                  isVideo={IsVideo}\n                  isReactionsEnabled={config.featureSwitches.EnableReactions}\n                  isSidePanelOpen={mediaTabsEnabled && mediaTabsPanelOpen}\n               >\n                  {IsReady ? smartPlayerElement : <PizzaTracker isOwnerOrAdmin={config.watchConfig.isOwnerOrAdmin} />}\n               </MediaBase>\n               {annotationMode === AnnotationModes.edit && (\n                  <AnnotationControlsHelper\n                     theme={theme}\n                     data-test-id=\"annotation-controls-helper\"\n                  >\n                     <AnnotationControlsHelperHeader>\n                        {t('annotation.annotationModeHeader')}\n                     </AnnotationControlsHelperHeader>\n                     <div>\n                        {t('annotation.annotationModeText')}\n                     </div>\n                  </AnnotationControlsHelper>\n               )}\n            </MediaContainer>\n            {!!viewReviewId && showConversation && config.featureSwitches.EnableReactions && (\n               <ReactionsContainer>\n                  <ConversationReactionsButton\n                     id=\"reactions-conversation-visibility-button\"\n                     theme={theme}\n                  >\n                     {!IsVideo && !IsYouTube && viewReviewId && <ReactionsImageWidget isEmbedded={false} />}\n                     <ReactionsMenuContainer\n                        conversationsEnabled={!!viewReviewId}\n                        theme={theme}\n                     >\n                        <ReactionsEmojiMenu\n                           isEmbedded={false}\n                           conversationId={viewReviewId}\n                        />\n                     </ReactionsMenuContainer>\n                  </ConversationReactionsButton>\n               </ReactionsContainer>\n            )}\n            <MediaDetailsContainer>\n               {collectionNavigationResponse && (\n                  <CollectionNavigationContainer>\n                     <CollectionNavigationPane\n                        sortMetric={collectionSortOrder}\n                        collectionId={collectionId}\n                        collectionNavigationResponse={collectionNavigationResponse}\n                     />\n                  </CollectionNavigationContainer>\n               )}\n               {showMediaTabsOnSide && <MediaDetails showMediaLocation={!collectionNavigationResponse} />}\n            </MediaDetailsContainer>\n            <SidePanelContainer\n               data-test-id=\"side-panel-container\"\n               id=\"side-panel-container\"\n               mediaTabsPanelOpen={mediaTabsEnabled && mediaTabsPanelOpen}\n               smartPlayerDisplayMode={smartPlayerDisplayMode}\n               marketingPaneVisible={showMarketingPane}\n               isLti={config.environmentData.IsLti}\n               theme={theme}\n            >\n               {IsReady && (!showMediaTabsOnSide || (mediaTabsEnabled && mediaTabsPanelOpen)) && (\n                  <MediaTabs\n                     canClosePanel={showMediaTabsOnSide}\n                     initialSelectedComment={initialSelectedComment}\n                     conversationLoadingState={conversationLoadingState}\n                     setConversationLoadingState={setConversationLoadingState}\n                     smartPlayerDisplayMode={smartPlayerDisplayMode}\n                  />\n               )}\n            </SidePanelContainer>\n            <ManagementContainer mediaTabsPanelOpen={mediaTabsEnabled && mediaTabsPanelOpen}>\n               {showMediaTabsOnSide && <DetailsTab />}\n            </ManagementContainer>\n            <RightGutterContainer />\n         </ViewPageGrid>\n      </MediaPageWrapper>\n   );\n};\n\nexport interface IStateMappedProps {\n   conversations: IConversationData[];\n   mediaTabsPanelOpen: boolean;\n   hasToggledMediaTabs: boolean;\n   annotationMode: AnnotationModes;\n   VideoReviewId: string;\n   Hash: string;\n   IsVideo: boolean;\n   Width: number;\n   Height: number;\n   Rotate: number;\n   IsYouTube: boolean;\n   IsReady: boolean;\n   transcript: ITranscript;\n}\n\nconst mapStatesToProps = (\n   // eslint-disable-next-line no-empty-pattern\n   {},\n   {mediaTabsPanelOpen, hasToggledMediaTabs}: Partial<IStateMappedProps>,\n   {annotationMode}: Partial<IStateMappedProps>,\n   {conversations}: Partial<IStateMappedProps>,\n   {VideoReviewId}: Partial<IStateMappedProps>,\n   {Hash, IsVideo, Width, Height, IsYouTube, IsReady, Rotate}: Partial<IStateMappedProps>,\n   {transcript}: Partial<IStateMappedProps>\n): IStateMappedProps => ({annotationMode, conversations, mediaTabsPanelOpen, hasToggledMediaTabs, VideoReviewId, Hash, IsVideo, Width, Height, Rotate, IsYouTube, IsReady, transcript});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaTabsStore, annotationManagerStore, conversationsStore, selectedConversationStore, mediaStore, transcriptStore)(MediaContentBase);\n","import React, {useEffect} from 'react';\nimport styled from 'styled-components';\nimport 'driver.js/dist/driver.min.css';\nimport cssConstants from '../../constants/cssConstants';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {Glyphs, ControlButton, TscButtonType, TscThemeName, TscStyles} from '@techsmith/tsc-cloud-style-guide';\nimport {IConversationData} from '../../model/conversationModel';\nimport {conversationsStore} from '../../context/conversationsProvider';\nimport {mediaStore} from '../../context/mediaProvider';\nimport {ITranscript} from '../../model/captionModels';\nimport {transcriptStore} from '../../context/transcriptProvider';\nimport config from '../../service/config';\nimport {selectedConversationStore} from '../../context/selectedConversationProvider';\nimport tabNames from '../../constants/tabNames';\nimport {mediaTabsStore, updateMediaTabsState} from '../../context/mediaTabsProvider';\nimport Constants from '../../constants/Constants';\nimport {showWatchProductMessage} from '../../util/MarketingHelper';\n\nconst MediaTabsToggleButtonsContainer = styled.div<{hideConversationButton: boolean; isVideo: boolean}>`\n   height: 2rem;\n   display: ${props => props.hideConversationButton ? 'none' : 'block'};\n   z-index: ${cssConstants.zIndex.conversation};\n   outline: none;\n   top: 1rem;\n   right: 1.25rem;\n   position: ${props => props.isVideo ? 'absolute' : 'static'};\n\n   button {\n      width: 4rem;\n      height: 4rem;\n      border-radius: ${TscStyles.border.radius.xxl};\n   }\n\n   @media screen and (max-width: ${cssConstants.mediaTabsDisplayBreakpoint}px) {\n      top: 4rem;\n      right: 1.25rem;\n      position: absolute;\n   }\n\n   // hide when width is under mediaTabsDisplayBreakpoint\n   @media screen and (max-width: ${cssConstants.mediaTabsDisplayBreakpoint}px) {\n      display: none;\n   }\n`;\n\nconst MediaTabsToggleButtons = styled.div`\n   display: flex;\n   flex-direction: column;\n   background-color: rgb(46 57 64 / 80%);\n   backdrop-filter: blur(24px);\n   box-shadow: 0px 1px 3px 0px #FFFFFF4D inset;\n   border-radius: ${TscStyles.border.radius.xxl};\n`;\n\nexport const MediaTabsToggleButtonBase: React.FC<IMediaTabsToggleButtonProps & IStateMappedProps> = ({hidden, mediaTabsPanelOpen, conversations, VideoReviewId, transcript, IsVideo}) => {\n   const [hasConversation, setHasConversation] = React.useState(false);\n   const [hasTranscript, setHasTranscript] = React.useState(false);\n\n   useEffect(() => {\n      setHasTranscript(!!transcript);\n   }, [transcript]);\n\n   useEffect(() => {\n      setHasConversation(!!VideoReviewId || (config.featureSwitches.UseSingleConversation && conversations && conversations.length > 0));\n   }, [VideoReviewId, conversations]);\n\n   const onButtonClick = (newTab: string) => {\n      updateMediaTabsState({currentTab: newTab, mediaTabsPanelOpen: true});\n\n      window.setTimeout(() => {\n         document.getElementById('side-panel-container-pane')?.focus({preventScroll: showWatchProductMessage()});\n      }, Constants.getDomElementTimeout);\n   };\n\n   return (\n      <MediaTabsToggleButtonsContainer\n         tabIndex={-1}\n         data-test-id=\"tab-panel-toggle-buttons\"\n         hideConversationButton={hidden || mediaTabsPanelOpen}\n         isVideo={IsVideo}\n      >\n         <MediaTabsToggleButtons>\n            {(hasConversation || config.watchConfig.isOwnerOrAdmin) && (\n               <ControlButton\n                  buttonType={TscButtonType.tertiary}\n                  themeName={TscThemeName.dusk}\n                  isFullWidth={false}\n                  onClick={() => onButtonClick(tabNames.comments)}\n                  title={tabNames.comments}\n                  testId=\"toggle-comments-button\"\n                  glyph={<Glyphs.Comment24x24 />}\n               />\n            )}\n            {hasTranscript && (\n               <ControlButton\n                  buttonType={TscButtonType.tertiary}\n                  themeName={TscThemeName.dusk}\n                  isFullWidth={false}\n                  onClick={() => onButtonClick(tabNames.transcript)}\n                  title={tabNames.transcript}\n                  testId=\"toggle-transcript-button\"\n                  glyph={<Glyphs.Transcript24x24 />}\n               />\n            )}\n            {config.watchConfig.isOwnerOrAdmin && (\n               <ControlButton\n                  buttonType={TscButtonType.tertiary}\n                  themeName={TscThemeName.dusk}\n                  isFullWidth={false}\n                  onClick={() => onButtonClick(tabNames.settings)}\n                  title={tabNames.settings}\n                  testId=\"toggle-settings-button\"\n                  glyph={<Glyphs.EditSettings24x24 />}\n               />\n            )}\n         </MediaTabsToggleButtons>\n      </MediaTabsToggleButtonsContainer>\n   );\n};\n\nexport interface IMediaTabsToggleButtonProps {\n   hidden?: boolean;\n}\n\nexport interface IStateMappedProps {\n   mediaTabsPanelOpen: boolean;\n   conversations: IConversationData[];\n   VideoReviewId: string;\n   transcript: ITranscript;\n   IsVideo: boolean;\n}\n\nconst mapStatesToProps = (\n   {hidden}: IMediaTabsToggleButtonProps,\n   {mediaTabsPanelOpen}: Partial<IStateMappedProps>,\n   {conversations}: Partial<IStateMappedProps>,\n   {VideoReviewId}: Partial<IStateMappedProps>,\n   {transcript}: Partial<IStateMappedProps>,\n   {IsVideo}: Partial<IStateMappedProps>\n): IStateMappedProps & IMediaTabsToggleButtonProps => ({hidden, mediaTabsPanelOpen, conversations, VideoReviewId, transcript, IsVideo});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaTabsStore, conversationsStore, selectedConversationStore, transcriptStore, mediaStore)(MediaTabsToggleButtonBase);\n","import Constants from '../../../constants/Constants';\nimport {fabric} from 'fabric';\n\nconst startDrawing = (canvas: fabric.Canvas, setAnnotationExists: (annotationExists: boolean) => void): void => {\n   canvas.isDrawingMode = true;\n\n   canvas.on('path:created', (event: any) => {\n      const path = event.path as fabric.Path;\n      path.hasControls = false;\n      path.name = Constants.annotation.shape.freehand;\n      path.hasRotatingPoint = false;\n      path.fill = Constants.annotation.transparentColor;\n      setAnnotationExists(true);\n   });\n};\n\nexport default {\n   startDrawing\n};\n","import Constants from '../../../constants/Constants';\nimport {fabric} from 'fabric';\n\nconst turnOnMouseEventListeners = (canvas: fabric.Canvas, setAnnotationExists: (annotationExists: boolean) => void): void => {\n   let startingPoint: fabric.IPoint;\n\n   const mouseDown = (event: any): void => {\n      if (event.target) {\n         return;\n      }\n\n      canvas.on('mouse:move', mouseMove);\n      canvas.on('mouse:up', mouseUp);\n\n      startingPoint = canvas.getPointer(event.e);\n\n      const square = new fabric.Rect({\n         width: 0,\n         height: 0,\n         left: startingPoint.x,\n         top: startingPoint.y,\n         stroke: canvas.freeDrawingBrush.color,\n         strokeWidth: canvas.freeDrawingBrush.width,\n         fill: Constants.annotation.transparentColor,\n         name: Constants.annotation.shape.rect\n      });\n\n      square.setControlsVisibility({bl: true, br: true, mb: true, ml: true, mr: true, mt: true, tl: true, tr: true, mtr: false});\n      canvas.add(square);\n      canvas.setActiveObject(square);\n      canvas.selection = false;\n   };\n\n   const mouseMove = (event: any): void => {\n      const mouse = canvas.getPointer(event.e);\n      const square = canvas.getActiveObject();\n\n      const left = startingPoint.x > mouse.x ? mouse.x : startingPoint.x;\n      const top = startingPoint.y > mouse.y ? mouse.y : startingPoint.y;\n      const width = Math.abs(startingPoint.x - mouse.x);\n      const height = Math.abs(startingPoint.y - mouse.y);\n\n      square.set({left, top, width, height});\n      canvas.requestRenderAll();\n   };\n\n   const mouseUp = (): void => {\n      const square: fabric.Object = canvas.getActiveObject();\n\n      if (square && (square.width === 0 || square.height === 0)) {\n         canvas.remove(square);\n      }\n\n      canvas.discardActiveObject();\n      canvas.selection = true;\n      canvas.fire('object:added', {target: square});\n      setAnnotationExists(true);\n      canvas.requestRenderAll();\n\n      canvas.off('mouse:move', mouseMove);\n      canvas.off('mouse:up', mouseUp);\n   };\n\n   canvas.defaultCursor = 'crosshair';\n   canvas.on('mouse:down', mouseDown);\n};\n\nexport default {\n   turnOnMouseEventListeners\n};","import React, {useState} from 'react';\nimport {ControlButton, TscButtonType, Glyphs} from '@techsmith/tsc-cloud-style-guide';\nimport SquareGlyph from '../../static/svg/SquareGlyph.svg';\nimport FreehandGlyph from '../../static/svg/FreehandGlyph.svg';\nimport ArrowGlyph from '../../static/svg/ArrowGlyph.svg';\nimport ColorPicker from './ColorPicker';\nimport {useTranslation} from 'react-i18next';\nimport Constants, {AnnotationModes, AnnotationColors, AnnotationTools} from '../../constants/Constants';\nimport Freehand from './AnnotationShapes/Freehand';\nimport Square from './AnnotationShapes/Square';\nimport Arrow from './AnnotationShapes/Arrow';\nimport config from '../../service/config';\nimport styled from 'styled-components';\nimport {canvasStore} from '../../context/canvasProvider';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {annotationManagerStore, updateAnnotationManagerState} from '../../context/annotationManagerProvider';\nimport {disableConversationStore} from '../../context/disableConversationProvider';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {mediaStore} from '../../context/mediaProvider';\nimport {updateSelfIdentifiedUserProviderState} from '../../context/selfIdentifiedUserProvider';\nimport {AlertModalPortal} from '../util/ModalPortalHelper';\nimport {Canvas} from 'fabric/fabric-impl';\nimport {importMediaInterface} from '../../hooks/dynamicImport';\n\nconst AnnotationToolBarWrapper = styled.div`\n   display: flex;\n`;\n\nexport const AnnotationToolBarBase: React.FC<IAnnotationToolBarProps & IStateMappedProps> = ({setAnnotationExists, canvasRef, annotationMode, annotationTool, isAnnotatingDisabled, IsVideo}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [showAlert, setShowAlert] = useState(false);\n\n   const resetCanvasState = (): void => {\n      if (!canvasRef) {\n         return;\n      }\n\n      canvasRef.defaultCursor = 'pointer';\n      canvasRef.isDrawingMode = false;\n      canvasRef.off('mouse:down');\n      canvasRef.off('mouse:move');\n      canvasRef.off('mouse:up');\n      canvasRef.off('path:created');\n   };\n\n   React.useEffect(() => {\n      if (annotationTool === AnnotationTools.none) {\n         resetCanvasState();\n         return;\n      }\n\n      if (IsVideo) {\n         void importMediaInterface().then(mediaInterface => {\n            mediaInterface.pause();\n         });\n      }\n\n      if (config.user.TechSmithId === Constants.nullTechSmithId) {\n         updateSelfIdentifiedUserProviderState({showSelfIdentifyModal: true});\n      }\n\n      startAnnotating(annotationTool);\n   }, [annotationTool]);\n\n   React.useEffect(() => {\n      if (annotationMode !== AnnotationModes.edit && annotationTool !== AnnotationTools.none) {\n         canvasRef.isDrawingMode = false;\n         updateAnnotationManagerState({annotationTool: AnnotationTools.none});\n      }\n   }, [annotationMode]);\n\n   const startAnnotating = (tool: AnnotationTools) => {\n      resetCanvasState();\n\n      if (tool === AnnotationTools.arrow) {\n         Arrow.turnOnMouseEventListeners(canvasRef, setAnnotationExists);\n      } else if (tool === AnnotationTools.square) {\n         Square.turnOnMouseEventListeners(canvasRef, setAnnotationExists);\n      } else if (tool === AnnotationTools.freehand) {\n         Freehand.startDrawing(canvasRef, setAnnotationExists);\n      }\n   };\n\n   const onClickTool = (tool: AnnotationTools) => {\n      if (tool === annotationTool) {\n         updateAnnotationManagerState({annotationTool: AnnotationTools.none});\n      } else {\n         updateAnnotationManagerState({annotationTool: tool, annotationMode: AnnotationModes.edit});\n      }\n   };\n\n   const onColorChange = (color: AnnotationColors): void => {\n      updateAnnotationManagerState({annotationColor: color});\n   };\n\n   const clearCanvas = (): void => {\n      updateAnnotationManagerState({annotationMode: AnnotationModes.none, annotationTool: AnnotationTools.none});\n      resetCanvasState();\n      setShowAlert(false);\n      setAnnotationExists(false);\n   };\n\n   const onCancelDeletion = (): void => {\n      setShowAlert(false);\n   };\n\n   const deleteAnnotations = (): void => {\n      if (canvasRef.getObjects().length) {\n         setShowAlert(true);\n      } else {\n         clearCanvas();\n      }\n   };\n\n   const isToolDisabled = isAnnotatingDisabled || !canvasRef;\n   const isSquareActive = annotationTool === AnnotationTools.square && annotationMode === AnnotationModes.edit;\n   const isArrowActive = annotationTool === AnnotationTools.arrow && annotationMode === AnnotationModes.edit;\n   const isFreehandActive = annotationTool === AnnotationTools.freehand && annotationMode === AnnotationModes.edit;\n\n   return (\n      <AnnotationToolBarWrapper>\n         <ControlButton\n            themeName={theme}\n            buttonType={TscButtonType.destructive}\n            isFullWidth={false}\n            onClick={deleteAnnotations}\n            title={t('annotation.exitAnnotationMode')}\n            testId=\"annotation-clear-button\"\n            glyph={<Glyphs.Close16x16 />}\n            disabled={!canvasRef}\n            visible={annotationMode === AnnotationModes.edit}\n         />\n         {showAlert && (\n            <AlertModalPortal\n               title={t('annotation.clearAnnotation')}\n               onClose={onCancelDeletion}\n               closeContent={t('general.cancel')}\n               onConfirm={clearCanvas}\n               confirmContent={t('general.clear')}\n               confirmButtonType={TscButtonType.destructive}\n               onDismiss={onCancelDeletion}\n               dismissContent={t('general.cancel')}\n               testId=\"clear-canvas-alert\"\n            >\n               <div>\n                  {t('annotation.confirmCanvasDeletionText')}\n               </div>\n            </AlertModalPortal>\n         )}\n         <ControlButton\n            className={isSquareActive ? 'active-annotation-tool' : ''}\n            themeName={theme}\n            buttonType={TscButtonType.secondary}\n            isFullWidth={false}\n            onClick={() => onClickTool(AnnotationTools.square)}\n            title={t('annotation.square')}\n            testId=\"annotation-square-button\"\n            glyph={<SquareGlyph />}\n            active={isSquareActive}\n            aria={{'aria-pressed': isSquareActive}}\n            disabled={isToolDisabled}\n         />\n         <ControlButton\n            className={isArrowActive ? 'active-annotation-tool' : ''}\n            themeName={theme}\n            buttonType={TscButtonType.secondary}\n            isFullWidth={false}\n            onClick={() => onClickTool(AnnotationTools.arrow)}\n            title={t('annotation.arrow')}\n            testId=\"annotation-arrow-button\"\n            glyph={<ArrowGlyph />}\n            active={isArrowActive}\n            aria={{'aria-pressed': isSquareActive}}\n            disabled={isToolDisabled}\n         />\n         <ControlButton\n            className={isFreehandActive ? 'active-annotation-tool' : ''}\n            themeName={theme}\n            buttonType={TscButtonType.secondary}\n            isFullWidth={false}\n            onClick={() => onClickTool(AnnotationTools.freehand)}\n            title={t('annotation.freehand')}\n            testId=\"annotation-freehand-button\"\n            glyph={<FreehandGlyph />}\n            active={isFreehandActive}\n            aria={{'aria-pressed': isSquareActive}}\n            disabled={isToolDisabled}\n         />\n         <ColorPicker onColorChange={onColorChange} />\n      </AnnotationToolBarWrapper>\n   );\n};\n\nexport interface IAnnotationToolBarProps {\n   setAnnotationExists: (annotationExists: boolean) => void;\n}\n\nexport interface IStateMappedProps {\n   canvasRef: Canvas;\n   annotationMode: AnnotationModes;\n   annotationTool: AnnotationTools;\n   isAnnotatingDisabled: boolean;\n   IsVideo: boolean;\n}\n\nconst mapStatesToProps = (\n   {setAnnotationExists}: IAnnotationToolBarProps,\n   {canvasRef}: Partial<IStateMappedProps>,\n   {annotationMode, annotationTool}: Partial<IStateMappedProps>,\n   {isAnnotatingDisabled}: Partial<IStateMappedProps>,\n   {IsVideo}: Partial<IStateMappedProps>\n): IAnnotationToolBarProps & IStateMappedProps => ({setAnnotationExists, canvasRef, annotationMode, annotationTool, isAnnotatingDisabled, IsVideo});\n\nexport default withMemoizedContexts(mapStatesToProps, canvasStore, annotationManagerStore, disableConversationStore, mediaStore)(AnnotationToolBarBase);\n","import React, {useEffect} from 'react';\nimport Constants, {AnnotationColors} from '../../constants/Constants';\nimport {PopoverButton, TscButtonType, TscPopoverOrigin, Glyphs, TscStyles, TscThemeName, TscThemeNames} from '@techsmith/tsc-cloud-style-guide';\nimport ColorSwatch from '../../static/svg/ColorSwatch.svg';\nimport {useTranslation} from 'react-i18next';\nimport styled from 'styled-components';\nimport {canvasStore} from '../../context/canvasProvider';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {annotationManagerStore} from '../../context/annotationManagerProvider';\nimport {disableConversationStore} from '../../context/disableConversationProvider';\nimport {useTscTheme} from '../../context/themeProvider';\n\nconst ColorPickerWrapper = styled.div<{color: AnnotationColors; theme: TscThemeNames}>`\n   margin-right: .375rem;\n\n   svg:first-child {\n      stroke-width: 2;\n      stroke: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n      fill: ${props => props.color};\n   }\n`;\n\nconst ColorPickerGlyph = styled.div`\n   display: flex;\n   align-items: center;\n   justify-content: center;\n\n   svg:first-child {\n      height: 1.125rem;\n      width: 1.25rem;\n      padding-left: 0.25rem;\n   }\n\n   svg:last-child {\n      width: 1rem;\n   }\n`;\n\nexport const ColorPickerColors = styled.div`\n   display: flex;\n   padding: 0.625rem .75rem;\n\n   button:first-of-type {\n      margin: 0;\n   }\n\n   button {\n      border: 2px solid black;\n      border-radius: ${TscStyles.border.radius.lg};\n      height: 1.25rem;\n      width: 1.25rem;\n\n      &:hover {\n         cursor: pointer;\n         box-shadow: 0 0.3rem 0.5rem rgba(0, 0, 0, 0.5);\n      }\n\n      &:focus {\n         outline: 1px dashed;\n         outline-offset: 2px;\n      }\n   }\n`;\n\nexport const ColorPickerBase: React.FC<IColorPickerProps & IStateMappedProps> = ({onColorChange, canvasRef, annotationColor, isAnnotatingDisabled}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n\n   useEffect(() => {\n      if (!annotationColor) {\n         onColorChange(Constants.annotation.defaultColor);\n      }\n   }, []);\n\n   const getColorText = (color: AnnotationColors): string => {\n      const colorValue = color.toLowerCase();\n      switch (colorValue) {\n         case AnnotationColors.yellow: {\n            return t('annotation.colors.yellow');\n         } case AnnotationColors.blue: {\n            return t('annotation.colors.blue');\n         } case AnnotationColors.green: {\n            return t('annotation.colors.green');\n         } case AnnotationColors.red: {\n            return t('annotation.colors.red');\n         } case AnnotationColors.white: {\n            return t('annotation.colors.white');\n         } default: {\n            return colorValue;\n         }\n      }\n   };\n\n   const colorPickerGlyph = (\n      <ColorPickerGlyph>\n         <ColorSwatch />\n         <Glyphs.CaratDown16x16 />\n      </ColorPickerGlyph>\n   );\n\n   const pickerPopover = (\n      <ColorPickerColors>\n         {Constants.annotation.colors.map((color: AnnotationColors) => (\n            <button\n               key={color}\n               title={getColorText(color)}\n               style={{background: color}}\n               onClick={() => onColorChange(color)}\n               data-test-id={`color-picker-${color}`}\n            />\n         ))}\n      </ColorPickerColors>\n   );\n\n   return (\n      <ColorPickerWrapper\n         color={annotationColor}\n         theme={theme}\n      >\n         <PopoverButton\n            buttonType={TscButtonType.secondary}\n            buttonTitle={t('annotation.colorSelectionAriaLabel', {color: getColorText(annotationColor)})}\n            disabled={!canvasRef || isAnnotatingDisabled}\n            origin={TscPopoverOrigin.bottomRight}\n            popoverMenu={pickerPopover}\n            themeName={theme}\n            closeMenuOnClick={true}\n            buttonGlyph={colorPickerGlyph}\n            useMobileMenu={false}\n            testId=\"color-picker\"\n         />\n      </ColorPickerWrapper>\n   );\n};\n\nexport interface IColorPickerProps {\n   onColorChange(color: AnnotationColors): void;\n}\n\nexport interface IStateMappedProps {\n   canvasRef: any;\n   annotationColor: AnnotationColors;\n   isAnnotatingDisabled: boolean;\n}\n\nconst mapStatesToProps = (\n   {onColorChange}: IColorPickerProps,\n   {canvasRef}: Partial<IStateMappedProps>,\n   {annotationColor}: Partial<IStateMappedProps>,\n   {isAnnotatingDisabled}: Partial<IStateMappedProps>\n): IColorPickerProps & IStateMappedProps => ({onColorChange, canvasRef, annotationColor, isAnnotatingDisabled});\n\nexport default withMemoizedContexts(mapStatesToProps, canvasStore, annotationManagerStore, disableConversationStore)(ColorPickerBase);\n","import React, {useState, useEffect} from 'react';\nimport {IComment} from '../../model/commentModel';\nimport CommentHeader from './CommentHeader';\nimport CommentBody from './CommentBody';\nimport styled from 'styled-components';\nimport Constants, {AnnotationModes, ServiceNames} from '../../constants/Constants';\nimport {TscStyles, TscThemeName, TscThemeNames, Spinner} from '@techsmith/tsc-cloud-style-guide';\nimport TimeFormatter from '../../util/TimeFormatter';\nimport {useTranslation} from 'react-i18next';\nimport CommentInput from './CommentInput';\nimport conversationApi from '../../service/conversationApi';\nimport DeleteCommentAlert from './DeleteCommentAlert';\nimport {scrollCommentIntoView} from '../../util/CommentScroller';\nimport {SetupWorkerState} from '../../model/workerState';\nimport config from '../../service/config';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {selectedConversationStore, updateSelectedConversationState} from '../../context/selectedConversationProvider';\nimport {commentsStore, updateCommentsState} from '../../context/commentsProvider';\nimport {annotationManagerStore, updateAnnotationManagerState} from '../../context/annotationManagerProvider';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {quizDataStore} from '../../context/quizDataProvider';\nimport {mediaStore} from '../../context/mediaProvider';\nimport logging from '../../service/logging';\nimport {importMediaInterface} from '../../hooks/dynamicImport';\n\nexport const CommentWrapper = styled.div<{theme: TscThemeNames; isReply: boolean; isExpanded: boolean; isSelected: boolean; isHighlighted: boolean}>`\n   @keyframes highlight-comment {\n      0%, 10%{\n         border-color: transparent;\n         box-shadow: 'none';\n      }\n      20%, 70% {\n         box-shadow: 0 0 0.1px 2px ${TscStyles.color.action.primary};\n      }\n      85% {\n         border-color: transparent;\n      }\n      100% {\n         border-color: ${TscStyles.color.action.primary};\n      }\n   }\n\n   padding: ${props => props.isReply ? '0.5rem 0.5rem 0 1.5rem' : '0.5rem'};\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.dark};\n   font-weight: 600;\n   font-size: 0.875rem;\n   animation: ${props => props.isHighlighted ? 'highlight-comment 3500ms ease-in-out' : 'none'};\n   transition: ${props => props.isReply ? 'none' : 'all 0.25s ease'};\n   position: relative;\n   background-color: ${props => props.isReply ? 'transparent' : props.isSelected ? props.theme === TscThemeName.dusk ? TscStyles.color.text.mediumDark : TscStyles.color.ui.dawn.light : props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.mediumDark : TscStyles.color.ui.dawn.lightMedium};\n   border-radius: ${TscStyles.border.radius.lg};\n   margin: ${props => props.isReply ? '0.25rem 0.5rem 0.5rem 1rem' : '0.25rem 0.5rem 0.5rem 0.5rem'};\n   box-shadow: ${props => props.isReply ? 'none' : props.isSelected ? props.theme === TscThemeName.dusk ? 'rgba(0, 0, 0, 0.16) 0px 0px 1.5px, rgba(0, 0, 0, 0.12) 0px 1px 5px, 0 0 3.5px rgba(255,255,255, 0.1) inset' : 'rgba(0, 0, 0, 0.10) 0px 0px 1.5px, rgba(0, 0, 0, 0.06) 0px 1px 5px' : props.isExpanded ? props.theme === TscThemeName.dusk ? '0 1px 3px rgba(0, 0, 0, 0.12)' : '0 1.5px 0 rgba(0, 0, 0, 0.06)' : 'none'};\n\n   :before {\n      content: '';\n      position: absolute;\n      top: 2rem;\n      left: 1.1875rem;\n      width: 2px;\n      z-index: 0;\n      bottom: ${props => props.isExpanded ? '0' : '100%'};\n      transition: bottom 0.25s ease-out;\n      background: ${props => props.isExpanded && !props.isReply ? props.theme === TscThemeName.dusk ? `linear-gradient(180deg, ${TscStyles.color.text.medium} 60%, transparent 95%)` : `linear-gradient(180deg, ${TscStyles.color.action.secondaryDawn} 60%, transparent 100%)` : 'transparent'};\n   }\n`;\n\nconst CommentAndRepliesWrapper = styled.li<{theme: TscThemeNames; isReply: boolean}>`\n   &:last-of-type {\n      margin-bottom: ${props => props.isReply ? '0' : '0.5rem'};\n   }\n   :first-of-type {\n   }\n`;\nconst RepliesWrapper = styled.ol<{theme: TscThemeNames; replyCount: number; isExpanded: boolean}>`\n   padding: 0 0 1rem 0;\n   list-style-type: none;\n   position: relative;\n\n  :before {\n   content: '';\n   position: absolute;\n   top: -0.5rem;\n   left: 1.6875rem;\n   width: 20px;\n   bottom: -0.5rem;\n   animation: ${props => props.isExpanded ? 'draw-comment-line 0.5s ease-out forwards' : 'none'};\n   border: 2px solid ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.medium : TscStyles.color.action.secondaryDawn};\n   border-right: none;\n   border-top: none;\n   opacity: 0;\n   clip-path: inset(0 90% 0 0);\n   border-radius: 0 0 0 ${TscStyles.border.radius.lg};\n}\n\n   @keyframes draw-comment-line {\n      0%, 50%{\n         bottom: 100%;\n         opacity: 0;\n      }\n      85% {\n         bottom: -0.5rem;\n         clip-path: inset(0 90% 0 0);\n      }\n      100% {\n         clip-path: inset(0 0 0 0);\n         opacity: 1;\n      }\n   }\n\n   article {overflow-x: clip;}\n   article > * {\n      opacity: 100%;\n      position: relative;\n      animation: comment-slide-in 350ms ease-in calc(var(--animation-order) * 100ms) backwards;\n      @keyframes comment-slide-in {\n         0% {\n            opacity: 0;\n            transform: translateX(8px);\n         }\n\n         100% {\n            opacity: 1;\n         }\n       }\n\n      :after {\n         content: '';\n         position: absolute;\n         top: 15px;\n         left: 27px;\n         width: 1rem;\n         height: 0.5rem;\n         border: 2px solid ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.medium : TscStyles.color.action.secondaryDawn};\n         border-right: none;\n         border-top: none;\n         border-radius: 0 0 0 ${TscStyles.border.radius.lg};\n         animation: draw-comment-arc 500ms ease-out calc( var(--animation-order) * 100ms) backwards;\n         opacity: 1;\n\n         @keyframes draw-comment-arc {\n            0%, 55% {\n               clip-path: inset(0 100% 0 0);\n               transform: traslateX(8px);\n               opacity: 0;\n            }\n            100% {\n               clip-path: inset(0 0 0 0);\n            }\n        }\n\n      }\n   }\n`;\n\nexport const CommentBase: React.FC<ICommentProps & IStateMappedProps> = ({comments, comment, isReply, shouldShowUpdate, setCommentsToHighlight, SelectedComment, VideoReviewId, annotationMode, IsQuizzing, IsVideo}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [deleteAnnotationOnSave, setDeleteAnnotationOnSave] = useState(false);\n   const [expandReplies, setExpandReplies] = useState(false);\n   const [loadingState, setLoadingState] = SetupWorkerState();\n   const [showDeleteAlertModal, setShowDeleteAlertModal] = useState(false);\n   const isSelected = SelectedComment && (SelectedComment.id === comment.id || SelectedComment.id === comment.parentCommentId || comment.replies.includes(SelectedComment));\n   const commentContainerRef = React.useRef(null);\n\n   useEffect(() => {\n      comment.replies.includes(SelectedComment) && setExpandReplies(true);\n      SelectedComment?.id === comment.id && scrollCommentIntoView(commentContainerRef.current);\n   }, [SelectedComment, comment]);\n\n   useEffect(() => {\n      !expandReplies && comment.isFiltered === false && !!comment.replies.filter(r => r.isFiltered === false).length && setExpandReplies(true);\n   }, [comment.isFiltered, comment.replies]);\n\n   useEffect(() => {\n      shouldShowUpdate && !isReply && scrollCommentIntoView(commentContainerRef.current as HTMLElement);\n   }, [shouldShowUpdate]);\n\n   const submitReply = async (replyText: string) => {\n      try {\n         setLoadingState({isWorking: true, hasError: false});\n         const commentsCopy = Object.assign([], comments);\n         const newReply = Object.assign({},\n            await conversationApi.addReply({\n               text: replyText.trim(),\n               annotation: '',\n               originatingService: config.featureSwitches.IsScreencast ? ServiceNames.screencast : ServiceNames.knowmia\n            }, comment),\n            {\n               user: {\n                  ProfileImageUrl: config.user.AvatarImageUrl,\n                  DisplayName: config.user.DisplayName,\n                  Id: config.user.TechSmithId\n               }\n            }\n         );\n\n         if (config.featureSwitches.IsScreencast && config.user.IsSignedIn) {\n            if (await conversationApi.isSubscribedToConversation(VideoReviewId) === null) {\n               await conversationApi.subscribeToConversation(VideoReviewId);\n            }\n         }\n\n         const updatedComment: IComment = Object.assign({}, commentsCopy.find(c => c.id === comment.id), {replies: comment.replies.concat(newReply), isFiltered: false});\n         commentsCopy.splice(commentsCopy.indexOf(comment), 1, updatedComment);\n         setCommentsToHighlight(commentsCopy, [newReply]);\n         updateCommentsState({comments: commentsCopy});\n         updateSelectedConversationState({SelectedComment: newReply});\n         setLoadingState({isWorking: false, hasError: false});\n      } catch (e) {\n         logging.error('Failed to submit reply: ', e);\n         setLoadingState({isWorking: false, hasError: true});\n      }\n   };\n\n   const deleteComment = async (commentToDelete: IComment) => {\n      setLoadingState({isWorking: true, hasError: false});\n\n      try {\n         const deletedComment = await conversationApi.deleteComment(commentToDelete);\n         const commentsCopy = Object.assign([], comments);\n\n         if (isReply) {\n            const parentCommentIndex = commentsCopy.findIndex(c => c.id === deletedComment.parentCommentId);\n            const replies = commentsCopy[parentCommentIndex].replies;\n            const replyIndex = replies.findIndex((r: IComment) => r.id === deletedComment.id);\n\n            if (parentCommentIndex > -1 && replyIndex > -1) {\n               replies.splice(replyIndex, 1);\n            } else {\n               const errorText = parentCommentIndex > -1 ? 'Reply could not be found' : 'Parent comment could not be found';\n               throw new Error(errorText);\n            }\n\n            if (replies.length === 0) {\n               setExpandReplies(false);\n\n               if (commentsCopy[parentCommentIndex].isDeleted) {\n                  commentsCopy.splice(parentCommentIndex, 1);\n               }\n            }\n         } else {\n            const commentIndex = commentsCopy.findIndex((oldComment: IComment) => oldComment.id === deletedComment.id);\n\n            if (commentIndex > -1) {\n               if (comments[commentIndex].replies.length) {\n                  commentsCopy[commentIndex] = Object.assign({}, comments[commentIndex], {text: t('conversations.commentDeletedText'), annotation: '', isDeleted: true, isEditing: false});\n               } else {\n                  commentsCopy.splice(commentIndex, 1);\n               }\n               updateAnnotationManagerState({annotationMode: AnnotationModes.none});\n            } else {\n               throw new Error('Comment could not be found');\n            }\n         }\n\n         setCommentsToHighlight(commentsCopy, []);\n         updateCommentsState({comments: commentsCopy});\n         setDeleteAnnotationOnSave(false);\n         setLoadingState({isWorking: false, hasError: false});\n      } catch (e) {\n         logging.error('Failed to delete comment: ', e);\n         setLoadingState({isWorking: false, hasError: true});\n      }\n   };\n\n   const saveCommentEdits = async (editedText: string) => {\n      const updatedComment = Object.assign({}, comment, {text: editedText.trim(), isEditing: false, annotation: deleteAnnotationOnSave ? '' : comment.annotation});\n\n      if (!updatedComment.text && !updatedComment.annotation) {\n         setShowDeleteAlertModal(true);\n         return;\n      } else if (!updatedComment.text) {\n         updatedComment.text = t('conversations.annotationAttached');\n      }\n\n      try {\n         setLoadingState({isWorking: true, hasError: false});\n         updatedComment.text = editedText;\n         const editedComment = await conversationApi.editComment(updatedComment);\n         const commentsCopy = Object.assign([], comments);\n\n         if (isReply) {\n            const parentCommentIndex = commentsCopy.findIndex(c => c.id === updatedComment.parentCommentId);\n            const replies = commentsCopy[parentCommentIndex].replies;\n            const replyIndex = replies.findIndex((r: IComment) => r.id === updatedComment.id);\n            (parentCommentIndex > -1 && replyIndex > -1) && replies.splice(replyIndex, 1, editedComment);\n         } else {\n            commentsCopy.splice(commentsCopy.findIndex((oldComment: IComment) => oldComment.id === editedComment.id), 1, editedComment);\n         }\n\n         updateCommentsState({comments: commentsCopy});\n         setLoadingState({isWorking: false, hasError: false});\n      } catch (e) {\n         logging.error('Failed to edit comment: ', e);\n         setLoadingState({isWorking: false, hasError: true});\n      }\n   };\n\n   const selectAndPause = async () => {\n      const mediaInterface = await importMediaInterface();\n      const timeDifference = TimeFormatter.getRoundedTime(Math.abs(mediaInterface.currentTime - comment.time));\n      const timeMismatch = IsVideo && timeDifference > Constants.annotation.timeTolerance;\n\n      if (!isSelected || timeMismatch || (SelectedComment && SelectedComment?.id !== comment.id) || annotationMode === AnnotationModes.edit) {\n         const topLevelComment = isReply ? comments.find(c => c.id === comment.parentCommentId) : comment;\n         updateSelectedConversationState({SelectedComment: comment});\n         updateAnnotationManagerState({annotationMode: topLevelComment.annotation ? AnnotationModes.display : AnnotationModes.none});\n\n         if (!IsQuizzing && timeMismatch) {\n            mediaInterface.pause();\n            mediaInterface.currentTime = comment.time;\n         }\n      }\n   };\n\n   const commentRepliesLength = comment.replies.filter(r => !r.isFiltered).length;\n   const isCommentOwner = comment.authorId === config.user.TechSmithId;\n\n   const wrapperClassName = isSelected ? 'comment-wrapper selected-comment' : 'comment-wrapper';\n\n   return (\n      comment.isFiltered ? null : (\n         <CommentAndRepliesWrapper isReply={isReply}>\n            <CommentWrapper\n               className={wrapperClassName}\n               data-test-id=\"comment-wrapper\"\n               ref={commentContainerRef}\n               theme={theme}\n               isReply={isReply}\n               isExpanded={expandReplies}\n               isSelected={isSelected}\n               onClick={selectAndPause}\n               isHighlighted={!isReply && shouldShowUpdate}\n            >\n               <CommentHeader\n                  isReply={isReply}\n                  comment={comment}\n                  deleteAnnotationOnSave={deleteAnnotationOnSave}\n                  isSelected={isSelected}\n                  setDeleteAnnotationOnSave={setDeleteAnnotationOnSave}\n                  isCommentOwner={isCommentOwner}\n                  onCommentClick={selectAndPause}\n               />\n               {loadingState.isWorking && <Spinner themeName={TscThemeName.dawn} />}\n               {showDeleteAlertModal && (\n                  <DeleteCommentAlert\n                     setShowDeleteAlert={setShowDeleteAlertModal}\n                     onClose={() => setShowDeleteAlertModal(false)}\n                     comment={comment}\n                     deleteComment={deleteComment}\n                  />\n               )}\n               {!loadingState.isWorking && (\n                  <CommentBody\n                     setDeleteAnnotationOnSave={setDeleteAnnotationOnSave}\n                     deleteAnnotationOnSave={deleteAnnotationOnSave}\n                     handleExpandReplies={() => setExpandReplies(!comment.replies.length ? !expandReplies : true)}\n                     isCommentOwner={isCommentOwner}\n                     comment={comment}\n                     isReply={isReply}\n                     saveEdit={(editedText: string) => saveCommentEdits(editedText)}\n                     loadingState={loadingState}\n                     setShowDeleteAlertModal={setShowDeleteAlertModal}\n                     setExpandReplies={setExpandReplies}\n                     expandReplies={expandReplies}\n                     commentRepliesLength={commentRepliesLength}\n                  />\n               )}\n            </CommentWrapper>\n            {(expandReplies && !isReply) && (\n               <>\n                  <RepliesWrapper\n                     theme={theme}\n                     replyCount={commentRepliesLength}\n                     isExpanded={expandReplies}\n                  >\n                     {!!commentRepliesLength && (\n                        comment.replies.map((reply: IComment, index: number) => (\n                           <article\n                              key={index}\n                              style={{'--animation-order': `${index}`} as React.CSSProperties}\n                           >\n                              <CommentBase\n                                 key={index}\n                                 isReply={true}\n                                 comment={reply}\n                                 shouldShowUpdate={shouldShowUpdate}\n                                 setCommentsToHighlight={setCommentsToHighlight}\n                                 SelectedComment={SelectedComment}\n                                 VideoReviewId={VideoReviewId}\n                                 comments={comments}\n                                 annotationMode={annotationMode}\n                                 IsQuizzing={IsQuizzing}\n                                 IsVideo={IsVideo}\n                              />\n                           </article>\n                        ))\n                     )}\n                  </RepliesWrapper>\n                  <CommentInput\n                     hasAnnotation={false}\n                     inputId={`${comment.id}-reply-input`}\n                     setDeleteAnnotationOnSave={setDeleteAnnotationOnSave}\n                     isCommentOwner={isCommentOwner}\n                     isReply={true}\n                     onSubmit={submitReply}\n                     loadingState={loadingState}\n                  />\n               </>\n            )}\n         </CommentAndRepliesWrapper>\n      )\n   );\n};\n\nexport interface ICommentProps {\n   comment: IComment;\n   isReply: boolean;\n   shouldShowUpdate: boolean;\n   setCommentsToHighlight(prevComments: IComment[], newComments: IComment[]): void;\n}\n\nexport interface IStateMappedProps {\n   SelectedComment: IComment;\n   VideoReviewId: string;\n   comments: IComment[];\n   annotationMode: AnnotationModes;\n   IsQuizzing: boolean;\n   IsVideo: boolean;\n}\n\nconst mapStatesToProps = (\n   {comment, isReply, shouldShowUpdate, setCommentsToHighlight}: ICommentProps,\n   {SelectedComment, VideoReviewId}: Partial<IStateMappedProps>,\n   {comments}: Partial<IStateMappedProps>,\n   {annotationMode}: Partial<IStateMappedProps>,\n   {IsQuizzing}: Partial<IStateMappedProps>,\n   {IsVideo}: Partial<IStateMappedProps>\n): ICommentProps & IStateMappedProps => ({comments, comment, isReply, shouldShowUpdate, setCommentsToHighlight, SelectedComment, VideoReviewId, annotationMode, IsQuizzing, IsVideo});\n\nexport default withMemoizedContexts(mapStatesToProps, selectedConversationStore, commentsStore, annotationManagerStore, quizDataStore, mediaStore)(CommentBase);\n","import React, {memo} from 'react';\nimport styled from 'styled-components';\nimport {IComment} from '../../model/commentModel';\nimport {useTranslation} from 'react-i18next';\nimport CommentInput from './CommentInput';\nimport {IWorkerState} from '../../model/workerState';\nimport NonEditingCommentFooter from './NonEditingCommentFooter';\nimport {ILike} from '../../model/reactionModel';\nimport config from '../../service/config';\nimport Linkify from 'react-linkify';\nimport {AriaAlert} from '../util/StyledElements';\n\nconst CommentBodyWrapper = styled.div<{isReply: boolean; isEditing: boolean}>`\n   margin-left: 2rem;\n   margin-top: 0.75rem;\n   font-weight: 400;\n   word-break: break-word;\n   white-space: pre-wrap;\n\n   a {\n      color: inherit;\n      text-decoration: underline;\n      border: 1px dashed transparent;\n      outline: none;\n\n      &:focus, &:hover {\n         text-decoration: none;\n         border-color: currentColor;\n      }\n\n      &:active {\n         text-decoration: none;\n         border-color: currentColor;\n         border-style: solid;\n      }\n   }\n`;\n\nexport const CommentBodyBase: React.FC<ICommentBodyProps> = ({comment, isReply, loadingState, isCommentOwner, commentRepliesLength, expandReplies, setExpandReplies, setDeleteAnnotationOnSave, saveEdit, handleExpandReplies, setShowDeleteAlertModal, deleteAnnotationOnSave}) => {\n   const {t} = useTranslation();\n   const userHasLikedComment = comment.likes && comment.likes.some((like: ILike) => like.UserId === config.user.TechSmithId);\n\n   const getCommentText = () => {\n      if (comment.text) {\n         return comment.text;\n      } else if (comment.annotation) {\n         return t('conversations.annotationAttached');\n      }\n      return t('conversations.commentDeletedText');\n   };\n\n   return (\n      <CommentBodyWrapper\n         isReply={isReply}\n         isEditing={comment.isEditing}\n         data-test-id=\"conversation-comment-body\"\n      >\n         {(!comment.isEditing || !isCommentOwner) && (\n            <Linkify\n               componentDecorator={(decoratedHref, decoratedText, key) => (\n                  <a\n                     target=\"blank\"\n                     href={decoratedHref}\n                     key={key}\n                     rel=\"noopener noreferrer nofollow\"\n                  >\n                     {decoratedText}\n                  </a>\n               )}\n            >\n               {getCommentText()}\n            </Linkify>\n         )}\n         {comment.isEditing && (\n            <CommentInput\n               inputId={`${comment.id}-input`}\n               hasAnnotation={false}\n               setDeleteAnnotationOnSave={setDeleteAnnotationOnSave}\n               isCommentOwner={isCommentOwner}\n               isReply={isReply}\n               comment={comment}\n               onSubmit={(editedText: string) => saveEdit(editedText)}\n               loadingState={loadingState}\n               setShowDeleteAlertModal={setShowDeleteAlertModal}\n               deleteAnnotationOnSave={deleteAnnotationOnSave}\n            />\n         )}\n         {!comment.isEditing && (\n            <NonEditingCommentFooter\n               userHasLikedComment={userHasLikedComment}\n               comment={comment}\n               isReply={isReply}\n               handleExpandReplies={handleExpandReplies}\n               commentRepliesLength={commentRepliesLength}\n               expandReplies={expandReplies}\n               setExpandReplies={setExpandReplies}\n            />\n         )}\n         <AriaAlert\n            role=\"alert\"\n            id=\"comment-editing-alert\"\n         >\n            {t('conversations.editCommentClickedAlert')}\n         </AriaAlert>\n      </CommentBodyWrapper>\n   );\n};\n\nexport interface ICommentBodyProps {\n   comment: IComment;\n   isReply: boolean;\n   loadingState: IWorkerState;\n   deleteAnnotationOnSave: boolean;\n   isCommentOwner: boolean;\n   setDeleteAnnotationOnSave(deleteAnnotationOnSave: boolean): void;\n   handleExpandReplies(): void;\n   saveEdit(editedText: string): void;\n   setShowDeleteAlertModal(showDeleteAlertModal: boolean): void;\n   expandReplies: boolean;\n   commentRepliesLength: number;\n   setExpandReplies(expandReplies: boolean): void;\n}\n\nexport default memo(CommentBodyBase);\n","import React, {useState, useRef} from 'react';\nimport {Glyphs, ControlButton, TscButtonType, TscThemeNames, TscStyles, TscThemeName} from '@techsmith/tsc-cloud-style-guide';\nimport {useTranslation} from 'react-i18next';\nimport {SearchBarInput, SearchBarContainer, SearchForm} from '../util/StyledElements';\nimport styled from 'styled-components';\nimport {ButtonActivationKeys} from '../../constants/Constants';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {useTscTheme} from '../../context/themeProvider';\nimport NotificationToggle from './NotificationToggle';\nimport config from '../../service/config';\nimport {commentsStore} from '../../context/commentsProvider';\nimport {IComment} from '../../model/commentModel';\nimport {selectedConversationStore} from '../../context/selectedConversationProvider';\n\nconst ClearButtonWrapper = styled.div<{isVisible: boolean; inputHasFocus: boolean}>`\n   display: ${props => (props.isVisible ? 'block' : 'none')};\n   visibility: ${props => (props.isVisible ? 'visible' : 'hidden')};\n   transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out;\n   transform: ${props => (props.isVisible ? 'translateX(0)' : 'translateX(100%)')};\n   opacity: ${props => (props.isVisible ? 1 : 0)};\n   margin-left: auto;\n`;\n\nconst NotificationToggleWrapper = styled.div`\n   display: block;\n   visibility: visible;\n   transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out;\n   transform: translateX(0);\n\n   svg {\n      height: 0.875rem;\n      width: 0.875rem;\n   }\n`;\n\nconst CommentCountLabel = styled.label<{hasSearchText: boolean; hasFocus: boolean}>`\n   font-weight: 600;\n   white-space: nowrap;\n   font-size: 0.875rem;\n   transition: all .3s ease-in-out;\n   opacity: ${props => (props.hasFocus ? 0 : 1)};\n   transform: ${props => (props.hasFocus ? 'translateX(-100%)' : 'translateX(0)')};\n   overflow: hidden;\n   width: ${props => (props.hasFocus ? '0' : '8.25rem')};\n`;\n\nexport const CommentFilterWrapper = styled.div<{hasSearchText: boolean}>`\n   width: 100%;\n`;\n\nconst CommentSearchWrapper = styled.div<{theme: TscThemeNames; hasFocus: boolean}>`\n   background-color: ${props => props.hasFocus ? props.theme === TscThemeName.dusk ? TscStyles.color.action.secondaryDusk : TscStyles.color.ui.dawn.medium : 'transparent'};\n   display: flex;\n   align-items: center;\n   width: ${props => props.hasFocus ? '100%' : '32px'};\n   margin-left: auto;\n   position: relative;  \n   transition: all 0.3s ease-in-out;\n   border-radius: 8px;\n`;\n\nconst CommentSearchInput = styled(SearchBarInput)<{hasFocus: boolean}>`\n   flex-grow: ${props => (props.hasFocus ? 1 : 0)};\n   width: ${props => (props.hasFocus ? '100%' : '0')};\n   padding: ${props => (props.hasFocus ? '0 0 0 8px' : 0)};\n   max-width: 100%;\n   transition: all 0.3s ease-in-out;\n`;\n\nconst CommentSearchForm = styled(SearchForm)<{hasFocus: boolean}>`\n   display: flex;\n   align-items: center;\n   width: 100%;\n   justify-content: flex-end;\n   ${props => props.hasFocus ? 'margin-left: 0' : ''};\n`;\nconst CommentSearchBarContainer = styled(SearchBarContainer)`\n   display: flex;\n   align-items: center;\n   position: relative;\n   width: 100%;\n`;\n\nconst SearchButtonWrapper = styled.div`\n   margin-left: auto;\n`;\n\nexport const CommentFilterBase: React.FC<ICommentFilterProps & IStateMappedProps> = ({searchText, setSearchText, executeSearch, comments, VideoReviewId}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const inputRef = useRef<HTMLInputElement>(null);\n   const [hasFocus, setHasFocus] = useState(false);\n\n   const onSearchButtonClicked = (event: React.MouseEvent) => {\n      event.preventDefault();\n      setHasFocus(true);\n      if (searchText.length) {\n         executeSearch();\n      }\n\n      if (inputRef.current) {\n         inputRef.current.focus();\n      }\n   };\n\n   const onKeyPress = (e: React.KeyboardEvent) => {\n      if (e.key === ButtonActivationKeys.enter && !e.shiftKey) {\n         e.stopPropagation();\n         e.preventDefault();\n\n         if (searchText.trim().length) {\n            executeSearch();\n         }\n      }\n   };\n\n   const handleOnSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n      e.preventDefault();\n      return false;\n   };\n\n   const onClearClicked = () => {\n      setSearchText('');\n      setHasFocus(false);\n   };\n\n   const userAuthoredComment = !!comments?.some(c => c.authorId === config.user.TechSmithId || c.replies.some(r => r.authorId === config.user.TechSmithId));\n\n   return (\n      <CommentFilterWrapper hasSearchText={!!searchText.length}>\n         <CommentSearchBarContainer\n            theme={theme}\n            hasFocus={hasFocus}\n         >\n            <CommentSearchForm\n               onSubmit={handleOnSubmit}\n               hasFocus={hasFocus}\n            >\n               <CommentCountLabel\n                  hasSearchText={!!searchText.length}\n                  hasFocus={hasFocus}\n               >\n                  {!(comments?.length > 0) ? t('conversations.commentFilterEmptyLabel') : `${comments.length === 1 ? t('conversations.singleCommentFilterLabel') : t('conversations.multipleCommentsFilterLabel', {count: comments.length})}`}\n               </CommentCountLabel>\n               <CommentSearchWrapper\n                  hasFocus={hasFocus}\n                  theme={theme}\n               >\n                  <CommentSearchInput\n                     disabled={!(comments?.length > 0)}\n                     value={searchText}\n                     onBlur={() => !searchText.length ? setHasFocus(false) : null}\n                     theme={theme}\n                     hasFocus={hasFocus}\n                     maxLength={80}\n                     aria-owns=\"search-results\"\n                     aria-label={t('search.search')}\n                     onChange={(event: React.ChangeEvent<HTMLInputElement>) => setSearchText(event.target.value)}\n                     ref={inputRef}\n                     className=\"t-search-box\"\n                     onKeyPress={onKeyPress}\n                     data-test-id=\"comment-filter-input\"\n                  />\n                  <ClearButtonWrapper\n                     isVisible={!!searchText.length}\n                     inputHasFocus={hasFocus}\n                  >\n                     <ControlButton\n                        themeName={theme}\n                        glyph={<Glyphs.Close16x16 />}\n                        buttonType={TscButtonType.tertiary}\n                        title={t('search.clear')}\n                        testId=\"clear-comment-filter-button\"\n                        onClick={onClearClicked}\n                     />\n                  </ClearButtonWrapper>\n                  <SearchButtonWrapper>\n                     <ControlButton\n                        disabled={!(comments?.length > 0)}\n                        themeName={theme}\n                        glyph={<Glyphs.Search16x16 />}\n                        buttonType={TscButtonType.tertiary}\n                        title={t('search.search')}\n                        testId=\"t-search-icon\"\n                        onClick={onSearchButtonClicked}\n                     />\n                  </SearchButtonWrapper>\n               </CommentSearchWrapper>\n               <NotificationToggleWrapper>\n                  {config.user.IsSignedIn && (config.featureSwitches.IsScreencast || config.watchConfig.isOwner || userAuthoredComment) && (!config.featureSwitches.IsScreencast || VideoReviewId) && <NotificationToggle userAuthoredComment={userAuthoredComment} />}\n               </NotificationToggleWrapper>\n            </CommentSearchForm>\n         </CommentSearchBarContainer>\n      </CommentFilterWrapper>\n   );\n};\n\nexport interface ICommentFilterProps {\n   searchText: string;\n   setSearchText(text: string): void;\n   executeSearch(): void;\n}\n\nexport interface IStateMappedProps {\n   comments: IComment[];\n   VideoReviewId: string;\n}\n\nconst mapStatesToProps = (\n   {searchText, setSearchText, executeSearch}: ICommentFilterProps,\n   {comments}: Partial<IStateMappedProps>,\n   {VideoReviewId}: Partial<IStateMappedProps>\n): ICommentFilterProps & IStateMappedProps => ({searchText, setSearchText, executeSearch, comments, VideoReviewId});\n\nexport default withMemoizedContexts(mapStatesToProps, commentsStore, selectedConversationStore)(CommentFilterBase);\n","import React from 'react';\nimport {Avatar, TscStyles, TscThemeName, TscThemeNames, ControlButton, Glyphs, TscButtonType, TscAvatarSize} from '@techsmith/tsc-cloud-style-guide';\nimport styled from 'styled-components';\nimport {AnnotationModes} from '../../constants/Constants';\nimport FreehandGlyph from '../../static/svg/FreehandGlyph.svg';\nimport {useTranslation} from 'react-i18next';\nimport TimeFormatter from '../../util/TimeFormatter';\nimport AriaHelper from '../../util/AriaHelper';\nimport {annotationManagerStore, updateAnnotationManagerState} from '../../context/annotationManagerProvider';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {IComment} from '../../model/commentModel';\nimport FallbackAvatar from '../../static/png/fallback-avatar.png';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {mediaStore} from '../../context/mediaProvider';\nimport dayjs, {UnitType} from 'dayjs';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport utc from 'dayjs/plugin/utc';\nimport localizedFormat from 'dayjs/plugin/localizedFormat';\ndayjs.extend(utc);\ndayjs.extend(relativeTime);\ndayjs.extend(localizedFormat);\n\n// Need these values because dayJS showing some comment dates a few seconds in the future when a comment is first submitted\nconst offsetCount = 5;\nconst offsetUnit: UnitType = 'second';\n\nconst HeaderWrapper = styled.div<{theme: TscThemeNames; isReply: boolean}>`\n   display: flex;\n   align-items: flext-start;\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n`;\n\nconst AvatarWrapper = styled.div<{isReply: boolean; isSelected: boolean}>`\n   z-index: 1;\n   display: block;\n   margin: auto;\n   border-radius: 100%;\n   outline: 2px solid};\n   outline-color:${props => props.isSelected && !props.isReply ? TscStyles.color.action.primary : 'transparent'};\n   outline-offset: 1px;\n   transition: outline 0.25s ease-in;\n`;\n\nconst MiddleHeaderWrapper = styled.div<{isReply: boolean}>`\n   display: flex;\n   width: 100%;\n   min-width: 0;\n   flex-direction: row;\n   padding-left: 0.5rem;\n   flex-wrap: wrap;\n   align-items: center;\n   justify-content: left;\n   padding-right: 0.5rem;\n`;\n\nexport const DisplayName = styled.span<{isReply: boolean; failedToLoad: boolean}>`\n   margin-left: 0;\n   flex: 1 1 auto;\n   white-space: nowrap;\n   overflow: hidden;\n   text-overflow: ellipsis;\n   width: 100%;\n   opacity: 0.9;\n   color: ${props => props.failedToLoad ? TscStyles.color.action.destructive : 'currentColor'};\n`;\n\nconst CommentDateWrapper = styled.div<{theme: TscThemeNames}>`\n   font-size: 0.75rem;\n   font-weight: 500;\n   opacity: 0.75;\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n`;\n\nconst HeaderRight = styled.div`\n   display: flex;\n   justify-content: flex-end;\n   flex: 1 1 auto;\n`;\n\nconst DeleteAnnotationButton = styled.div`\n   width: 0;\n\n   button {\n      border-radius: 50%;\n      height: 1rem;\n      width: 1rem;\n      left: -0.625rem;\n      top: -0.375rem;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n\n      svg {\n         height: 0.625rem;\n         width: 0.625rem\n      }\n   }\n`;\n\nconst CommentTimeWrapper = styled.div<{isEditing: boolean; isSelected: boolean}>`\n   button {\n      width: 3rem;\n      padding: 0;\n      height: 1.5rem;\n      line-height: 1rem;\n      letter-spacing: 0;\n      margin-left: 0.5rem;\n      color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.medium};\n      background-color: ${props => props.isSelected ? (props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.medium : TscStyles.color.ui.dawn.lightMedium) : (props.theme === TscThemeName.dusk ? TscStyles.color.action.secondaryDusk : TscStyles.color.ui.dawn.light)};\n      span {\n         display: flex;\n         align-items: center;\n         justify-content: center;\n      }\n   }\n`;\n\nconst AnnotationButtonWrapper = styled.div<{annotationDisplayed: boolean; deleteAnnotationOnSave: boolean; isSelected: boolean}>`\n   button {\n      padding: 0.25rem;\n      height: 1.5rem;\n      width: 1.5rem;\n      line-height: 1rem;\n      opacity: ${props => props.deleteAnnotationOnSave && '0.5'};  \n      background-color: ${props => props.isSelected && !props.annotationDisplayed ? (props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.medium : TscStyles.color.ui.dawn.lightMedium) : (props.isSelected ? '' : (props.theme === TscThemeName.dusk ? '' : TscStyles.color.ui.dawn.light))};\n      color: ${props => !props.annotationDisplayed ? (props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.medium) : TscStyles.color.text.light};\n\n      :hover {\n      }\n   }\n      \n`;\n\nexport const CommentHeaderBase: React.FC<ICommentHeaderProps & IStateMappedProps> = ({annotationMode, isReply, comment, isCommentOwner, deleteAnnotationOnSave, isSelected, setDeleteAnnotationOnSave, onCommentClick, IsVideo}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const showEditedLabel: boolean = (!comment.isEditing || !isCommentOwner) && !comment.isDeleted && !!comment.lastModifiedDate;\n   const onCommentTimeClick = () => {\n      void AriaHelper.readAlert(t('annotation.commentTimeButtonAriaLiveText', {time: TimeFormatter.formatTimeForSpeech(comment.time)}));\n      onCommentClick();\n   };\n\n   const toggleAnnotations = () => {\n      if (annotationMode === AnnotationModes.display) {\n         updateAnnotationManagerState({annotationMode: AnnotationModes.none});\n      } else {\n         updateAnnotationManagerState({annotationMode: AnnotationModes.display});\n         deleteAnnotationOnSave && setDeleteAnnotationOnSave(false);\n      }\n   };\n\n   return (\n      <HeaderWrapper\n         theme={theme}\n         isReply={isReply}\n      >\n         <AvatarWrapper\n            isReply={isReply}\n            isSelected={isSelected}\n         >\n            <Avatar\n               avatarImageUrl={comment.user.DisplayName === t('conversations.warnings.failedToLoadUsername') ? FallbackAvatar : comment.user.ProfileImageUrl}\n               userDisplayName={comment.user.DisplayName}\n               userAltText={null}\n               userID={comment.user.Id}\n               size={TscAvatarSize.small}\n               testId=\"comment-header-avatar\"\n            />\n         </AvatarWrapper>\n         <MiddleHeaderWrapper isReply={isReply}>\n            <DisplayName\n               isReply={isReply}\n               failedToLoad={comment.user.DisplayName === t('conversations.warnings.failedToLoadUsername')}\n               data-test-id=\"comment-header-display-name\"\n            >\n               {comment.user.DisplayName}\n            </DisplayName>\n\n            <CommentDateWrapper\n               theme={theme}\n               title={`${dayjs.utc(comment.createDate).format('LLLL')} UTC`}\n            >\n               {showEditedLabel && t('conversations.commentEditedText')}\n               {dayjs(showEditedLabel ? comment.lastModifiedDate : comment.createDate).subtract(offsetCount, offsetUnit).fromNow()}\n            </CommentDateWrapper>\n\n         </MiddleHeaderWrapper>\n         <HeaderRight>\n            {!!comment.annotation && (\n               <>\n                  <AnnotationButtonWrapper\n                     theme={theme}\n                     annotationDisplayed={isSelected && annotationMode === AnnotationModes.display}\n                     deleteAnnotationOnSave={deleteAnnotationOnSave}\n                     isSelected={isSelected}\n                  >\n                     <ControlButton\n                        onClick={toggleAnnotations}\n                        title={annotationMode === AnnotationModes.none ? t('annotation.showAnnotation') : t('annotation.hideAnnotation')}\n                        glyph={<FreehandGlyph />}\n                        testId=\"annotation-glyph-button\"\n                        buttonType={isSelected ? TscButtonType.primary : TscButtonType.secondary}\n                        aria={{'aria-pressed': isSelected, 'aria-label': t('annotation.toggleAnnotationLabel')}}\n                        themeName={theme}\n                     />\n                  </AnnotationButtonWrapper>\n                  {comment.isEditing && !deleteAnnotationOnSave && (\n                     <DeleteAnnotationButton>\n                        <ControlButton\n                           onClick={() => {\n                              void AriaHelper.readAlert(t('annotation.annotationPendingDeletionAlert'));\n                              updateAnnotationManagerState({annotationMode: AnnotationModes.none});\n                              setDeleteAnnotationOnSave(true);\n                           }}\n                           title={t('annotation.deleteAnnotation')}\n                           glyph={<Glyphs.Close16x16 />}\n                           testId=\"delete-annotation-button\"\n                           buttonType={TscButtonType.secondary}\n                           themeName={theme === TscThemeName.dusk ? TscThemeName.dawn : TscThemeName.dusk}\n                        />\n                     </DeleteAnnotationButton>\n                  )}\n               </>\n            )}\n            {IsVideo && !isReply && (\n               <CommentTimeWrapper\n                  theme={theme}\n                  isEditing={comment.isEditing}\n                  isSelected={isSelected}\n               >\n                  <ControlButton\n                     onClick={onCommentTimeClick}\n                     ariaLabel={TimeFormatter.formatTimeForSpeech(comment.time)}\n                     label={TimeFormatter.formatTime(comment.time)}\n                     buttonType={TscButtonType.tertiary}\n                     testId=\"comment-time-button\"\n                     disabled={comment.isEditing}\n                     themeName={theme}\n                  />\n               </CommentTimeWrapper>\n            )}\n         </HeaderRight>\n      </HeaderWrapper>\n   );\n};\n\nexport interface ICommentHeaderProps {\n   isReply: boolean;\n   comment: IComment;\n   deleteAnnotationOnSave: boolean;\n   isSelected: boolean;\n   setDeleteAnnotationOnSave(deleteAnnotation: boolean): void;\n   onCommentClick(): void;\n   isCommentOwner: boolean;\n}\n\nexport interface IStateMappedProps {\n   annotationMode: AnnotationModes;\n   IsVideo: boolean;\n}\n\nconst mapStatesToProps = (\n   {isReply, comment, deleteAnnotationOnSave, isSelected, isCommentOwner, setDeleteAnnotationOnSave, onCommentClick}: ICommentHeaderProps,\n   {annotationMode}: Partial<IStateMappedProps>,\n   {IsVideo}: Partial<IStateMappedProps>\n): ICommentHeaderProps & IStateMappedProps => ({annotationMode, isReply, comment, isCommentOwner, deleteAnnotationOnSave, isSelected, setDeleteAnnotationOnSave, onCommentClick, IsVideo});\n\nexport default withMemoizedContexts(mapStatesToProps, annotationManagerStore, mediaStore)(CommentHeaderBase);\n","import React, {useState, useRef, useCallback, useEffect} from 'react';\nimport TextAreaAutosize from 'react-autosize-textarea';\nimport styled, {keyframes} from 'styled-components';\nimport {Avatar, TscAvatarSize, TscThemeName, TscThemeNames, TscStyles} from '@techsmith/tsc-cloud-style-guide';\nimport {useTranslation} from 'react-i18next';\nimport {PickerEmojiEvent} from '../../type/emoji-mart-data';\nimport config from '../../service/config';\nimport {StyledWarning} from '../util/StyledElements';\nimport Constants, {ButtonActivationKeys, AnnotationModes} from '../../constants/Constants';\nimport CommentSubmit from './CommentSubmit';\nimport {IWorkerState} from '../../model/workerState';\nimport {updateAnnotationManagerState, annotationManagerStore} from '../../context/annotationManagerProvider';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport EmojiPickerWrapper from './EmojiPickerWrapper';\nimport EditingCommentFooter from './EditingCommentFooter';\nimport {IComment} from '../../model/commentModel';\nimport {commentsStore, updateCommentsState} from '../../context/commentsProvider';\nimport LocalStorageWrapper from '../util/LocalStorageWrapper';\nimport {selectedConversationStore} from '../../context/selectedConversationProvider';\nimport {disableConversationStore} from '../../context/disableConversationProvider';\nimport {updateSelfIdentifiedUserProviderState} from '../../context/selfIdentifiedUserProvider';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {mediaStore} from '../../context/mediaProvider';\nimport logging from '../../service/logging';\nimport {findEmojiByCode} from '../../util/EmojiSearch';\nimport {importMediaInterface} from '../../hooks/dynamicImport';\n\nconst focusAnimation = keyframes`\n   0%   { box-shadow: ${TscStyles.color.action.primary} 0px 0px 0px 0px}\n   50%   { box-shadow: ${TscStyles.color.action.primary} 0px 0px 0px 3px}\n   100% { box-shadow: ${TscStyles.color.action.primary} 0px 0px 0px 1px}\n`;\n\nconst CommentInputWrapper = styled.div<{isReply: boolean; theme: TscThemeNames; isEditing: boolean}>`\n   margin-top: ${props => props.isReply && !props.isEditing ? '-8px' : '0'};\n   margin-left: ${props => props.isReply && !props.isEditing ? '22px' : '0'};\n   position: relative;\n   padding: ${props => props.isReply ? '0 16px' : '0'};\n   box-sizing: border-box;\n   animation: fadeIn 350ms ease-in;\n   @keyframes fadeIn {\n      0% { opacity: 0;}\n      100% { opacity: 1; }\n   }\n`;\n\nconst AvatarWrapper = styled.div<{isReply: boolean}>`\n   z-index: 2;\n   margin-top: 4px;\n`;\n\nexport const TextAreaWrapper = styled.div<{isReply: boolean; isEditing: boolean}>`\n   width: ${props => props.isReply ? 'auto' : '100%'};\n   display: flex;\n   align-items: flex-start;\n   box-sizing: border-box;\n   margin-top: ${props => props.isReply && props.isEditing ? '12px' : '0'};\n   margin-bottom: ${props => !props.isEditing ? '8px' : '0'};\n   position: relative;\n`;\n\nexport const StyledTextArea = styled(TextAreaAutosize) <{$hasError: boolean; $theme: TscThemeNames; $isReply: boolean; $isEditing: boolean}>`\n   border-color: ${props => props.$hasError ? `${TscStyles.color.action.destructive} !important` : null};\n   margin-left: ${props => props.$isEditing || (config.user.TechSmithId === Constants.nullTechSmithId) ? '0' : '8px'};\n   font-size: 0.875rem;\n   padding: 6px 30px 6px 8px;\n   flex: 1 1 auto;\n   color: ${props => props.$theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.dark};\n   background-color: ${props =>\n         props.$isReply\n            ? props.$theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.dark\n               : TscStyles.color.ui.dawn.light\n            : props.$theme === TscThemeName.dusk && props.$isEditing ? TscStyles.color.ui.dusk.mediumDark\n               : props.$theme === TscThemeName.dawn && props.$isEditing ? TscStyles.color.ui.dawn.light\n                  : props.$theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.mediumDark\n                     : TscStyles.color.ui.dawn.lightMedium\n   };\n   font-weight: 400;\n   border-radius: ${TscStyles.border.radius.md};\n   border: 1px solid ${props => props.$theme === TscThemeName.dusk ? TscStyles.color.action.secondaryDusk : TscStyles.color.ui.dawn.medium};\n   resize: none;\n   -ms-overflow-y: hidden !important; //Needed, else IE gives scrollbar\n   font-family: inherit;\n\n   &:focus {\n      border-color: ${props => props.$hasError ? TscStyles.color.action.destructive : TscStyles.color.action.primary};\n      outline: none;\n      animation: ${focusAnimation} 500ms ease;\n      animation-fill-mode: forwards;\n      box-shadow: 0px 0px 0px 1px ${TscStyles.color.action.primary};\n   }\n\n   &::placeholder {\n      color: ${props => props.$theme === TscThemeName.dusk ? TscStyles.color.text.lightMedium : TscStyles.color.text.medium};\n      opacity: 1;\n   }\n`;\n\nexport const CommentInputError = styled(StyledWarning)`\n   margin-left: 49px;\n`;\n\nexport const CommentInputBase: React.FC<ICommentInputProps & IStateMappedProps> = ({hasAnnotation, comments, isCommentOwner, isReply, comment, inputId, deleteAnnotationOnSave, annotationMode, loadingState, VideoReviewId, isCommentingDisabled, onSubmit, setShowDeleteAlertModal, setDeleteAnnotationOnSave, IsVideo}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [annotationExists, setAnnotationExists] = useState(hasAnnotation);\n   const [text, setText] = useState(comment?.text || '');\n   const [textSelectionPosition, setTextSelectionPosition] = useState(0);\n   const textAreaRef = useRef<HTMLTextAreaElement>(null);\n   const textLengthError: boolean = text.length > Constants.maxCommentLength;\n   const disableSubmit: boolean = loadingState.isWorking || !text.trim() && (!annotationExists || annotationMode !== AnnotationModes.edit) || (loadingState.hasError || textLengthError);\n   const isTextOverflow = textAreaRef?.current?.style?.overflow !== 'hidden';\n\n   useEffect(() => {\n      const savedText = LocalStorageWrapper.getItem(Constants.localStorageKeys.unsavedCommentText.replace('{videoReviewId}', VideoReviewId).replace('{inputId}', inputId ? inputId : null));\n      savedText && setText(savedText);\n\n      return () => {\n         LocalStorageWrapper.setItem(Constants.localStorageKeys.unsavedCommentText.replace('{videoReviewId}', VideoReviewId).replace('{inputId}', inputId ? inputId : null), textAreaRef.current?.value || '');\n         setText('');\n      };\n   }, [VideoReviewId]);\n\n   useEffect(() => {\n      comment?.text && setText(comment.text);\n   }, [comment?.text]);\n\n   const replaceEmojiCodeWithEmoji = (searchText: string, emojiCode: string) => {\n      const nativeEmoji = findEmojiByCode(emojiCode);\n      if (nativeEmoji) {\n         setText(searchText.replace(emojiCode, nativeEmoji));\n      }\n   };\n\n   const textToEmoji = (searchText: string) => {\n      try {\n         const foundEmojiCodes = searchText.match(/:[^\\s:]+:/g);\n         foundEmojiCodes?.forEach(emojiCode => {\n            replaceEmojiCodeWithEmoji(searchText, emojiCode);\n         });\n      } catch (e) {\n         logging.error('Failed to convert text to emoji: ', e);\n      }\n   };\n\n   const onKeyPress = (e: React.KeyboardEvent) => {\n      if (e.key === ButtonActivationKeys.enter && !e.shiftKey) {\n         e.stopPropagation();\n         e.preventDefault();\n\n         if (text.trim().length) {\n            onSubmitClicked();\n         }\n      }\n   };\n\n   const onKeyUp = () => {\n      setTextSelectionPosition(textAreaRef.current.selectionStart);\n   };\n\n   const onInputClick = () => {\n      setTextSelectionPosition(textAreaRef.current.selectionStart);\n   };\n\n   const insertOrAppendText = (originalText: string, textToAdd: string, position?: number): string => {\n      if (typeof position === 'number') {\n         return `${originalText.slice(0, position)}${textToAdd}${originalText.slice(position)}`;\n      }\n      return `${originalText}${textToAdd}`;\n   };\n\n   const onEmojiClick = (emoji: PickerEmojiEvent) => {\n      setText(insertOrAppendText(textAreaRef.current.value, emoji.native, textSelectionPosition));\n   };\n\n   const memoizedOnEmojiClick = useCallback(onEmojiClick, [textAreaRef.current, textSelectionPosition]);\n\n   const onUpdateText = () => {\n      setText(textAreaRef.current.value);\n      textToEmoji(textAreaRef.current.value);\n   };\n\n   const getErrorText = (): string => {\n      if (textLengthError) {\n         return t('conversations.commentTooLongErrorText', {overByCount: text.length - Constants.maxCommentLength});\n      }\n      return t('general.errorText');\n   };\n\n   const onSubmitClicked = () => {\n      setAnnotationExists(false);\n      onSubmit(text);\n      setText('');\n      LocalStorageWrapper.removeItem(Constants.localStorageKeys.unsavedCommentText.replace('{videoReviewId}', VideoReviewId).replace('{inputId}', inputId ? inputId : null));\n   };\n\n   const handleCancelEdit = () => {\n      if (isCommentOwner) {\n         textAreaRef.current.value = comment.text;\n         setText(comment.text);\n      }\n\n      const commentsCopy = Object.assign([] as IComment[], comments);\n\n      if (isReply) {\n         updateCommentsState({\n            comments: commentsCopy.map(c => {\n               if (c.id !== comment.parentCommentId) {\n                  return c;\n               }\n               return Object.assign({}, c, {replies: c.replies.map((r: IComment) => r.id === comment.id ? Object.assign({}, r, {isEditing: false}) : r)});\n            })\n         });\n      } else {\n         updateCommentsState({\n            comments: commentsCopy.map(c => {\n               if (c.id === comment.id) {\n                  return Object.assign({}, c, {isEditing: false});\n               }\n               return c;\n            })\n         });\n      }\n\n      deleteAnnotationOnSave && setDeleteAnnotationOnSave(false);\n   };\n\n   const onTextInputFocus = async () => {\n      const mediaInterface = await importMediaInterface();\n\n      IsVideo && mediaInterface.pause();\n\n      if (annotationMode === AnnotationModes.display && !isReply && !comment?.isEditing) {\n         updateAnnotationManagerState({annotationMode: AnnotationModes.none});\n      }\n\n      if (config.user.TechSmithId === Constants.nullTechSmithId) {\n         updateSelfIdentifiedUserProviderState({showSelfIdentifyModal: true});\n      }\n   };\n\n   return (\n      <CommentInputWrapper\n         isReply={isReply}\n         theme={theme}\n         isEditing={comment?.isEditing}\n      >\n         {(isCommentOwner || !comment?.isEditing) && (\n            <TextAreaWrapper\n               isReply={isReply}\n               isEditing={comment?.isEditing}\n            >\n               {!comment?.isEditing && config.user.TechSmithId !== Constants.nullTechSmithId && (\n                  <AvatarWrapper isReply={isReply}>\n                     <Avatar\n                        avatarImageUrl={config.user.AvatarImageUrl}\n                        userDisplayName={config.user.DisplayName}\n                        userAltText={null}\n                        userID={config.user.TechSmithId}\n                        size={TscAvatarSize.small}\n                     />\n                  </AvatarWrapper>\n               )}\n               <StyledTextArea\n                  id={inputId}\n                  aria-label={comment?.isEditing ? '' : isReply ? t('conversations.replyPlaceholder') : t('conversations.commentPlaceholder')}\n                  placeholder={comment?.isEditing ? '' : isReply ? t('conversations.replyPlaceholder') : t('conversations.commentPlaceholder')}\n                  value={text}\n                  disabled={isCommentingDisabled}\n                  onChange={onUpdateText}\n                  onKeyPress={onKeyPress}\n                  onKeyUp={onKeyUp}\n                  onClick={onInputClick}\n                  maxRows={10}\n                  ref={textAreaRef}\n                  onFocus={onTextInputFocus}\n                  data-test-id=\"conversation-comment-input-text\"\n                  $hasError={loadingState.hasError || textLengthError}\n                  $isReply={isReply}\n                  $isEditing={comment?.isEditing}\n                  $theme={theme}\n               />\n               {config.user.TechSmithId !== Constants.nullTechSmithId && (\n                  <EmojiPickerWrapper\n                     isEditing={comment?.isEditing}\n                     isTextOverflow={isTextOverflow}\n                     theme={theme}\n                     onEmojiClick={memoizedOnEmojiClick}\n                     data-test-id=\"emoji-picker\"\n                  />\n               )}\n            </TextAreaWrapper>\n         )}\n         {loadingState.hasError || textLengthError && (\n            <CommentInputError>\n               {getErrorText()}\n            </CommentInputError>\n         )}\n         {comment?.isEditing ? (\n            <EditingCommentFooter\n               isCommentOwner={isCommentOwner}\n               isReply={isReply}\n               comment={comment}\n               editedText={text}\n               onCancel={handleCancelEdit}\n               setShowDeleteAlertModal={setShowDeleteAlertModal}\n               onSubmit={onSubmitClicked}\n               deleteAnnotationOnSave={deleteAnnotationOnSave}\n            />\n         ) : (\n            <CommentSubmit\n               setAnnotationExists={setAnnotationExists}\n               isReply={isReply}\n               onSubmit={onSubmitClicked}\n               isDisabled={disableSubmit}\n            />\n         )}\n      </CommentInputWrapper>\n   );\n};\n\nexport interface ICommentInputProps {\n   hasAnnotation: boolean;\n   isReply: boolean;\n   loadingState: IWorkerState;\n   isCommentOwner: boolean;\n   deleteAnnotationOnSave?: boolean;\n   comment?: IComment;\n   inputId?: string;\n   onSubmit(commentText: string): void;\n   setShowDeleteAlertModal?(showDeleteAlertModal: boolean): void;\n   setDeleteAnnotationOnSave?(deleteAnnotationOnSave: boolean): void;\n}\n\nexport interface IStateMappedProps {\n   annotationMode: AnnotationModes;\n   comments: IComment[];\n   VideoReviewId: string;\n   isCommentingDisabled: boolean;\n   IsVideo: boolean;\n}\n\nconst mapStatesToProps = (\n   {isReply, loadingState, isCommentOwner, deleteAnnotationOnSave, comment, inputId, hasAnnotation, onSubmit, setShowDeleteAlertModal, setDeleteAnnotationOnSave}: ICommentInputProps,\n   {annotationMode}: Partial<IStateMappedProps>,\n   {comments}: Partial<IStateMappedProps>,\n   {VideoReviewId}: Partial<IStateMappedProps>,\n   {isCommentingDisabled}: Partial<IStateMappedProps>,\n   {IsVideo}: Partial<IStateMappedProps>\n): ICommentInputProps & IStateMappedProps => ({hasAnnotation, comments, isReply, loadingState, isCommentOwner, deleteAnnotationOnSave, comment, inputId, annotationMode, VideoReviewId, isCommentingDisabled, onSubmit, setShowDeleteAlertModal, setDeleteAnnotationOnSave, IsVideo});\n\nexport default withMemoizedContexts(mapStatesToProps, annotationManagerStore, commentsStore, selectedConversationStore, disableConversationStore, mediaStore)(CommentInputBase);\n","import React from 'react';\nimport AnnotationToolBar from './AnnotationToolBar';\nimport {ControlButton, Glyphs, TscButtonType} from '@techsmith/tsc-cloud-style-guide';\nimport styled from 'styled-components';\nimport {useTranslation} from 'react-i18next';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {quizDataStore} from '../../context/quizDataProvider';\n\nconst CommentControls = styled.div`\n   display: flex;\n   justify-content: flex-end;\n   padding-bottom: .25rem;\n\n   button {\n      margin-left: 0.5rem;\n   }\n`;\n\nconst SubmitButtonWrapper = styled.div`\n   button {\n      padding: 0 0.5rem;\n   }\n`;\n\nexport const CommentSubmitBase: React.FC<ICommentSubmitProps & IStateMappedProps> = ({isDisabled, isReply, setAnnotationExists, onSubmit, IsQuizzing}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n\n   return (\n      <CommentControls>\n         {!isReply && !IsQuizzing && <AnnotationToolBar setAnnotationExists={setAnnotationExists} />}\n         <SubmitButtonWrapper>\n            <ControlButton\n               testId=\"submit-comment-button\"\n               buttonType={TscButtonType.primary}\n               themeName={theme}\n               title={t('general.send')}\n               onClick={onSubmit}\n               disabled={isDisabled}\n               glyph={<Glyphs.Send16x16 />}\n            />\n         </SubmitButtonWrapper>\n      </CommentControls>\n   );\n};\n\nexport interface ICommentSubmitProps {\n   isDisabled: boolean;\n   isReply: boolean;\n   setAnnotationExists(annotationExists: boolean): void;\n   onSubmit(): void;\n}\n\nexport interface IStateMappedProps {\n   IsQuizzing: boolean;\n}\n\nconst mapStatesToProps = (\n   {isDisabled, isReply, setAnnotationExists, onSubmit}: ICommentSubmitProps,\n   {IsQuizzing}: Partial<IStateMappedProps>\n): ICommentSubmitProps & IStateMappedProps => ({isDisabled, isReply, setAnnotationExists, onSubmit, IsQuizzing});\n\nexport default withMemoizedContexts(mapStatesToProps, quizDataStore)(CommentSubmitBase);\n","/* eslint-disable no-undefined */\nimport React, {useState, useEffect, useCallback} from 'react';\nimport styled from 'styled-components';\nimport {TscStyles, TscThemeName, TscThemeNames, Spinner, TscButtonType, SelectInput, EmptyState} from '@techsmith/tsc-cloud-style-guide';\nimport cssConstants from '../../constants/cssConstants';\nimport Constants, {AnnotationModes, ServiceNames} from '../../constants/Constants';\nimport config from '../../service/config';\nimport Comment from './Comment';\nimport CommentInput from './CommentInput';\nimport {IComment} from '../../model/commentModel';\nimport CommentFilter from './CommentFilter';\nimport {useTranslation} from 'react-i18next';\nimport UserMessaging from '../../util/UserMessaging';\nimport {IWorkerState, SetupWorkerState} from '../../model/workerState';\nimport SelfIdentifyModal from '../modals/SelfIdentifyModal';\nimport selfIdentifyService from '../../service/selfIdentifyservice';\nimport {selfIdentifiedUserStore, updateSelfIdentifiedUserProviderState} from '../../context/selfIdentifiedUserProvider';\nimport {ButtonStyledAsAnchor} from '../util/StyledElements';\nimport {selectedConversationStore, updateSelectedConversationState} from '../../context/selectedConversationProvider';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {canvasStore} from '../../context/canvasProvider';\nimport {commentsStore, updateCommentsState} from '../../context/commentsProvider';\nimport {sortCommentsByTime} from '../../util/CommentSorter';\nimport {conversationsStore, updateConversationsState} from '../../context/conversationsProvider';\nimport {IConversationData} from '../../model/conversationModel';\nimport CreateConversationModal from '../modals/CreateConversationModal';\nimport {updateAnnotationManagerState} from '../../context/annotationManagerProvider';\nimport LocalStorageWrapper from '../util/LocalStorageWrapper';\nimport AriaHelper from '../../util/AriaHelper';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {mediaStore} from '../../context/mediaProvider';\nimport {mediaOperationsStore} from '../../context/mediaOperationsProvider';\nimport logging from '../../service/logging';\nimport conversationApi from '../../service/conversationApi';\nimport {AlertModalPortal} from '../util/ModalPortalHelper';\nimport {importMediaInterface} from '../../hooks/dynamicImport';\nimport CssUtil from '../../util/CssUtil';\nimport ConversationEmptyState from '../tabs/conversations/ConversationEmptyState';\nimport {updateMediaTabsState} from '../../context/mediaTabsProvider';\n\nconst ConversationContainer = styled.div<{theme: TscThemeNames; isLti: boolean; smartPlayerDisplayMode: string}>`\n   background-color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.medium : TscStyles.color.ui.dawn.light};\n   display: flex;\n   flex-direction: column;\n   flex: 0 0 auto;\n   width: 'auto';\n   height: inherit;\n   z-index: ${cssConstants.zIndex.conversation};\n   outline: none;\n   position: relative;\n\n   @media screen and (max-width: ${cssConstants.mediaTabsDisplayBreakpoint}px) {\n      width: 100%;\n      height: auto;\n      top: 0;\n      right: 0;\n      margin-top: 0;\n      position: relative;\n      overflow: visible;\n      border-radius: 0;\n      height: 100%;\n\n      /* Prevent iOS mobile auto zoom on textarea focus */\n      @supports (-webkit-overflow-scrolling: touch) {\n         textarea {\n            font-size: 1rem;\n         }\n      }\n   }\n`;\n\nconst CommentSection = styled.ol<{showEmptyState: boolean}>`\n   position: relative;\n   padding: 0.5rem 0 0rem 0;\n   height: 100%;\n   -webkit-overflow-scrolling: touch;\n   list-style: none;\n   margin: ${props => props.showEmptyState ? 'auto' : '0'};\n   overflow: ${props => props.showEmptyState ? 'hidden' : 'visible'};\n`;\n\nconst CommentSectionHeader = styled.div<{theme: TscThemeNames}>`\n   margin-top: 12px;\n   display: flex;\n   padding: 0 0 12px;\n   font-size: 1rem;\n   font-weight: 600;\n   align-items: center;\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n   flex: 0 0 auto;\n   overflow: hidden;\n`;\n\nconst CommentHeaderRight = styled.div`\n   display: flex;\n   flex-grow: 1;\n   justify-content: flex-end;\n`;\n\nconst SpinnerWrapper = styled.div`\n   height: calc(100vh - 5.25rem);\n   display: flex;\n   align-items: center;\n   padding: 5rem;\n`;\n\nconst AuthorNameSpan = styled.span`\n   font-weight: 600;\n`;\n\nexport const EmptyStateWrapper = styled.div<{theme: TscThemeNames}>`\n   display: flex;\n   flex-direction: column;\n   justify-content: center;\n   align-items: center;\n   height: 100%;\n   font-size: .875rem;\n\n   > div {\n      box-sizing: border-box;\n   }\n`;\n\nconst SelfIdentifiedUserWrapper = styled.div<{theme: TscThemeNames}>`\n   padding: 0.5rem 1rem 0;\n   display: flex;\n   font-weight: 400;\n   word-break: break-word;\n   align-items: center;\n   justify-content: space-between;\n   font-size: 0.875rem;\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n\n   > * {\n      margin-left: 0.5rem;\n      flex-shrink: 0;\n   }\n`;\n\nconst ConversationSelectWrapper = styled.div<{theme: TscThemeNames; borderNeeded: boolean}>`\n   padding: 0.5rem 1rem;\n   border-bottom: 1px solid ${props => !props.borderNeeded ? 'transparent' : props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.mediumDark : TscStyles.color.ui.dawn.medium};\n\n   label {\n      position: absolute;\n      left: -9999px;\n   }\n\n   /* Prevent iOS mobile auto zoom on textarea focus */\n   @supports (-webkit-overflow-scrolling: touch) {\n      select {\n         font-size: 1rem;\n      }\n   }\n`;\n\nconst NoCommentEmptyStateMessageText = styled.div`\n`;\n\nconst BottomSpacer = styled.div`\n   height: 1px; // Prevents grid from collapsing bottom conversation pane margin\n`;\n\nconst headerBackgroundOpacity = 0.75;\nconst ConversationContainerHeaderWrapper = styled.div<{theme: TscThemeNames}>`\n   position: sticky;\n   top: 0;\n   padding: 0 12px 8px;\n   background-color: ${props => CssUtil.toRgba(props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.medium : TscStyles.color.ui.dawn.light, headerBackgroundOpacity)};\n   backdrop-filter: blur(12px);\n   z-index: ${cssConstants.zIndex.viewPageElement};\n   box-shadow: ${props => props.theme === TscThemeName.dusk ? '0 1px 5px rgba(0,0,0,0.2)' : '0 1px 5px rgba(0,0,0,0.08)'};\n\n   :after {\n      content: '';\n      position: absolute;\n      left: 0;\n      right: 0;\n      bottom: 0;\n      height: 1px;\n      backdrop-filter: ${props => props.theme === TscThemeName.dusk ? 'brightness(110%)' : 'brightness(200%)'};\n   }\n\n   :empty {\n      display: none;\n   }\n\n   :empty:after {\n      display: none;\n   }\n`;\n\nconst EmptyStateContainer = styled.div`\n   display: flex;\n   flex-direction: column;\n   justify-content: center;\n   align-items: center;\n   padding: 1rem;\n   width: 100%;\n   text-align: center;\n   max-width: 24rem;\n   margin-bottom: 8rem;\n`;\n\nconst TitleContainer = styled.div<{theme: TscThemeNames}>`\n   font-weight: 600;\n   font-size: 1.25rem;\n   margin-bottom: .5rem;\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n   padding-top: 1rem;\n`;\n\nexport const ConversationBase: React.FC<IStateMappedProps & IConversationProps> = ({canvasRef, comments, conversations, Title, Author, VideoReviewId, conversationLoadingState, setConversationLoadingState, initialSelectedComment, smartPlayerDisplayMode, Hash, showSelfIdentifyModal, IsReplacingMedia}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [addCommentLoadingState, setAddCommentLoadingState] = SetupWorkerState();\n   const [searchText, updateSearchText] = useState('');\n   const [cachedNewComments, setCachedNewComments] = useState<IComment[]>([]);\n   const [commentsToHighlight, updateCommentsToHighlight] = useState(null);\n   const [showSelfIdentifyAlertModal, setShowSelfIdentifyAlertModal] = useState(false);\n   const [showCreateConversationModal, setShowCreateConversationModal] = useState(false);\n   const isSelfIdentified = config.user.TechSmithId !== Constants.nullTechSmithId && config.user.DisplayName && !config.user.IsSignedIn;\n   const commentsRef = React.useRef<IComment[]>([]);\n   commentsRef.current = comments || [];\n   const pollIdRef = React.useRef<number>(-1);\n   const lastUpdateRef = React.useRef<number>(Date.now());\n\n   const refreshComments = useCallback(async () => {\n      const newComments = await conversationApi.getConversationComments(VideoReviewId);\n\n      if (JSON.stringify(mapCommentsToTextArray(newComments)) !== JSON.stringify(mapCommentsToTextArray(commentsRef.current))) {\n         if (commentsRef.current.some(c => c.isFiltered)) {\n            setCachedNewComments(newComments);\n         } else {\n            setCommentsToHighlight(commentsRef.current, newComments);\n            updateCommentsState({comments: newComments});\n         }\n      }\n\n      lastUpdateRef.current = Date.now();\n   }, [VideoReviewId]);\n\n   useEffect(() => {\n      config.user.TechSmithId === Constants.nullTechSmithId && selfIdentifyService.setupSelfIdentifiedUserFromLocalStorage();\n\n      const visibilityChanged = async (): Promise<void> => {\n         if (document.visibilityState === 'visible' && lastUpdateRef.current + Constants.conversationRefreshInterval < Date.now()) {\n            await refreshComments();\n            lastUpdateRef.current = Date.now();\n         }\n      };\n\n      document.addEventListener('visibilitychange', visibilityChanged);\n\n      return () => {\n         document.removeEventListener('visibilitychange', visibilityChanged);\n      };\n   }, [refreshComments]);\n\n   useEffect(() => {\n      if (config.featureSwitches.UseSingleConversation && conversations?.length) {\n         const singleConversation = conversations[0];\n         updateSelectedConversationState({Title: singleConversation.Title, VideoReviewId: singleConversation.VideoReviewId, ConversationHash: singleConversation.ConversationHash});\n      }\n   }, [conversations]);\n\n   useEffect(() => {\n      const startPoll = () => {\n         window.clearInterval(pollIdRef.current);\n\n         pollIdRef.current = window.setInterval(() => {\n            if (!IsReplacingMedia) {\n               const asyncIntervalFunc = async () => {\n                  try {\n                     if (document.visibilityState === 'visible') {\n                        await refreshComments();\n                     }\n                  } catch (e) {\n                     if (e?.status === Constants.statusCodes.notFound) {\n                        window.clearInterval(pollIdRef.current);\n                        logging.warn('Detected that review was deleted. Stopping comment polling loop.');\n                        UserMessaging.warn(t('conversations.conversationDeleted'));\n                     }\n                  }\n               };\n\n               void asyncIntervalFunc(); // intentional non-await-async in interval\n            }\n         }, Constants.conversationRefreshInterval);\n      };\n\n      VideoReviewId && startPoll();\n\n      return () => {\n         window.clearInterval(pollIdRef.current);\n      };\n   }, [VideoReviewId, IsReplacingMedia, refreshComments, t]);\n\n   useEffect(() => {\n      initialSelectedComment && updateCommentsToHighlight([initialSelectedComment.id]);\n   }, [initialSelectedComment]);\n\n   useEffect(() => {\n      if (!searchText.length && cachedNewComments.length) {\n         setCommentsToHighlight(comments, cachedNewComments);\n         updateCommentsState({comments: cachedNewComments});\n         setCachedNewComments([]);\n      }\n   }, [searchText]);\n\n   const mapCommentsToTextArray = (commentsToMap: IComment[]): string[] => {\n      if (!commentsToMap.length) {\n         return [];\n      }\n      return commentsToMap.flatMap(c => [c.text, ...c.replies.map(cr => cr.text)]);\n   };\n\n   const setCommentsToHighlight = (prevComments: IComment[], newComments: IComment[]) => {\n      const prevCommentIds = prevComments.map(c => c.id);\n      const newCommentsToHighlight = newComments?.map(c => c.id).filter(id => !prevCommentIds.includes(id));\n      updateCommentsToHighlight(newCommentsToHighlight);\n   };\n\n   const setSearchText = (text: string) => {\n      updateSearchText(text);\n\n      if (!text.length) {\n         void AriaHelper.readAlert(t('conversations.commentSearchTextClearedAlert'));\n         comments && updateCommentsState({comments: comments.map(c => Object.assign(c, {isFiltered: undefined, replies: c.replies.map((reply: IComment) => Object.assign({}, reply, {isFiltered: undefined}))}))});\n      }\n   };\n\n   const onPerformCommentSearch = () => {\n      setCommentsToHighlight(comments, []);\n      if (searchText.length) {\n         const commentsToDisplay = comments?.filter(comment =>\n            comment.text.toLowerCase().includes(searchText.toLowerCase()) ||\n            comment.user.DisplayName.toLowerCase().includes(searchText.toLowerCase()) ||\n            comment.replies.filter((reply: IComment) => reply.text.toLowerCase().includes(searchText.toLowerCase()) || reply.user.DisplayName.toLowerCase().includes(searchText.toLowerCase())).length !== 0\n         );\n         void AriaHelper.readAlert(t('conversations.commentSearchTextAlert', {count: commentsToDisplay.length}));\n         comments && updateCommentsState({\n            comments: comments.map(c => Object.assign(c, {\n               isFiltered: !(commentsToDisplay.includes(c)),\n               replies: c.replies.map((reply: IComment) => Object.assign({}, reply, {isFiltered: !reply.text.toLowerCase().includes(searchText.toLowerCase()) && !reply.user.DisplayName.toLowerCase().includes(searchText.toLowerCase())}))\n            }))\n         });\n      } else {\n         comments && updateCommentsState({comments: comments.map(c => Object.assign(c, {isFiltered: undefined, replies: c.replies.map((reply: IComment) => Object.assign({}, reply, {isFiltered: undefined}))}))});\n      }\n   };\n\n   const submitNewComment = async (commentText: string) => {\n      const mediaInterface = await importMediaInterface();\n      setAddCommentLoadingState({isWorking: true, hasError: false});\n      LocalStorageWrapper.removeItem(Constants.localStorageKeys.unsavedCommentText.replace('{videoReviewId}', VideoReviewId));\n\n      try {\n         if (conversations) {\n            const conversationsCopy = [...conversations];\n            const conversationToUpdate = conversationsCopy.find(conversation => conversation.VideoReviewId === VideoReviewId);\n            const updateCommenterCount = comments.findIndex(comment => comment.authorId === config.user.TechSmithId) === -1;\n            const updatedConversation = Object.assign({}, conversationToUpdate, {CommentCount: conversationToUpdate.CommentCount + 1, CommenterCount: updateCommenterCount ? conversationToUpdate.CommenterCount + 1 : conversationToUpdate.CommenterCount});\n            conversationsCopy.splice(conversationsCopy.findIndex(oldConversation => oldConversation.VideoReviewId === VideoReviewId), 1, updatedConversation);\n            updateConversationsState({conversations: conversationsCopy});\n         }\n\n         const commentsCopy = [...comments];\n         const newComment = Object.assign({},\n            await conversationApi.addComment(VideoReviewId,\n               {\n                  text: commentText.trim(),\n                  annotation: canvasRef?.getObjects().length ? JSON.stringify(canvasRef?.toDatalessJSON()) : '',\n                  isResolved: false,\n                  mediaTimeInMilliseconds: mediaInterface.currentTime * 1000,\n                  originatingService: config.featureSwitches.IsScreencast ? ServiceNames.screencast : ServiceNames.knowmia\n               }\n            ),\n            {\n               authorId: config.user.TechSmithId,\n               user: {\n                  ProfileImageUrl: config.user.AvatarImageUrl,\n                  DisplayName: config.user.DisplayName,\n                  Id: config.user.TechSmithId\n               }\n            }\n         );\n         commentsCopy.push(newComment);\n         updateSearchText('');\n         setCommentsToHighlight(comments, [newComment]);\n         const sortedComments = !searchText.length ?\n            sortCommentsByTime(commentsCopy) :\n            sortCommentsByTime(commentsCopy).map(c => Object.assign(c, {isFiltered: undefined, replies: c.replies.map((reply: IComment) => Object.assign({}, reply, {isFiltered: undefined}))}));\n         updateCommentsState({comments: sortedComments});\n         updateAnnotationManagerState({annotationMode: newComment.annotation ? AnnotationModes.display : AnnotationModes.none});\n         updateSelectedConversationState({SelectedComment: newComment});\n         void AriaHelper.readAlert(t('conversations.commentSubmitted'));\n         setAddCommentLoadingState({isWorking: false, hasError: false});\n      } catch (e) {\n         logging.error('Failed to submit new comment', e);\n         setAddCommentLoadingState({isWorking: false, hasError: true});\n      }\n   };\n\n   const clearSelfIdentifiedUser = () => {\n      try {\n         setAddCommentLoadingState({isWorking: true, hasError: false});\n         canvasRef?.clear();\n         updateAnnotationManagerState({annotationMode: AnnotationModes.none});\n         selfIdentifyService.forgetSelfIdentifiedUser();\n         setShowSelfIdentifyAlertModal(false);\n         setAddCommentLoadingState({isWorking: false, hasError: false});\n      } catch (e) {\n         logging.error('Failed to clear self identified user', e);\n         setAddCommentLoadingState({isWorking: false, hasError: true});\n      }\n   };\n\n   const updateConversation = (e: React.ChangeEvent<HTMLSelectElement>): void => {\n      if (!e.target.value) {\n         updateSelectedConversationState({VideoReviewId: '', Title: null, SelectedComment: null, ConversationHash: null});\n         return;\n      }\n\n      const newSelectedConversation = conversations.find(conversation => conversation.VideoReviewId === e.target.value);\n      updateSelectedConversationState({VideoReviewId: newSelectedConversation.VideoReviewId, Title: newSelectedConversation.Title, ConversationHash: newSelectedConversation.ConversationHash, SelectedComment: null});\n   };\n\n   const createConversation = async () => {\n      setConversationLoadingState({isWorking: true, hasError: false});\n      try {\n         const newConversation = await conversationApi.createConversation(Hash, Title);\n         conversations.push(newConversation);\n         updateConversationsState({conversations: conversations});\n         updateSelectedConversationState({Title: newConversation.Title, VideoReviewId: newConversation.VideoReviewId, ConversationHash: newConversation.ConversationHash, SelectedComment: null});\n         setConversationLoadingState({isWorking: false, hasError: false});\n      } catch {\n         setConversationLoadingState({isWorking: false, hasError: true});\n      }\n   };\n\n   const getEmptyStateBody = () => {\n      if (conversationLoadingState.hasError) {\n         return (\n            <EmptyStateContainer theme={theme}>\n               <ConversationEmptyState />\n               <EmptyState\n                  themeName={theme}\n                  title={t('conversations.emptyStateText.conversationNotFound')}\n                  primaryButtonText={t('general.close')}\n                  primaryButtonType={TscButtonType.secondary}\n                  onPrimaryClick={() => {\n                     conversationLoadingState.hasError && updateSelectedConversationState({VideoReviewId: '', Title: null, SelectedComment: null, ConversationHash: null});\n                     updateMediaTabsState({mediaTabsPanelOpen: false});\n                  }}\n               />\n            </EmptyStateContainer>\n         );\n      } else if (!conversations?.length && (config.watchConfig.isOwnerAdminOrTeamEditor)) {\n         return (\n            <EmptyStateContainer theme={theme}>\n               <ConversationEmptyState />\n               <EmptyState\n                  themeName={theme}\n                  title={t('conversations.emptyStateText.noConversationsExist')}\n                  text={t('conversations.emptyStateSubText.noConversationsExist')}\n\n                  primaryButtonText={config.featureSwitches.UseSingleConversation ? t('conversations.enableConversation') : t('conversations.addConversationTitle')}\n                  primaryButtonType={TscButtonType.secondary}\n                  onPrimaryClick={() => config.featureSwitches.UseSingleConversation ? createConversation() : setShowCreateConversationModal(true)}\n               />\n            </EmptyStateContainer>\n         );\n      } else if (!VideoReviewId) {\n         return (\n            <EmptyStateContainer theme={theme}>\n               <ConversationEmptyState />\n               <EmptyState\n                  themeName={theme}\n                  title={t('conversations.emptyStateText.noConversationSelected')}\n                  text={t('conversations.emptyStateSubText.noConversationSelected')}\n               />\n            </EmptyStateContainer>\n         );\n      }\n\n      const noCommentBody = (\n         <>\n            <NoCommentEmptyStateMessageText>\n               {t('conversations.emptyStateText.noComments.flavorText1')}\n               <br />\n               {t('conversations.emptyStateText.noComments.flavorText2')}\n               <AuthorNameSpan>\n                  {Author}\n               </AuthorNameSpan>\n            </NoCommentEmptyStateMessageText>\n         </>\n      );\n\n      return (\n         <EmptyStateContainer theme={theme}>\n            <ConversationEmptyState />\n            <TitleContainer theme={theme}>\n               {searchText.length ? t('conversations.emptyStateText.noFilterResults') : t('conversations.emptyStateText.noComments.headerLine')}\n            </TitleContainer>\n            {noCommentBody}\n         </EmptyStateContainer>\n      );\n   };\n\n   const showEmptyState = !comments?.length || !comments.filter(c => !c.isFiltered).length;\n   const emptyState: React.JSX.Element = (\n      <EmptyStateWrapper theme={theme}>\n         {getEmptyStateBody()}\n      </EmptyStateWrapper>\n   );\n\n   const conversationOptions = [{value: '', label: t('conversations.emptyState.selectPrompt')}];\n   if (!config.featureSwitches.UseSingleConversation) {\n      conversations?.forEach(conversation => {\n         conversationOptions.push({value: conversation.VideoReviewId, label: conversation.Title});\n      });\n   }\n\n   return (\n      <>\n         <ConversationContainer\n            data-test-id=\"conversation-container\"\n            theme={theme}\n            isLti={config.environmentData.IsLti}\n            tabIndex={-1}\n            smartPlayerDisplayMode={smartPlayerDisplayMode}\n         >\n            <ConversationContainerHeaderWrapper theme={theme}>\n               {!config.featureSwitches.UseSingleConversation && !!conversations?.length && !config.environmentData.IsLti && config.watchConfig.isOwnerOrAdmin && (\n                  <ConversationSelectWrapper\n                     theme={theme}\n                     borderNeeded={!!VideoReviewId}\n                     data-test-id=\"conversation-select\"\n                  >\n                     <SelectInput\n                        label={t('conversations.selectConversationLabel')}\n                        themeName={theme}\n                        value={VideoReviewId}\n                        onChange={updateConversation}\n                        options={conversationOptions}\n                     />\n                  </ConversationSelectWrapper>\n               )}\n               {!!conversations?.length && (\n                  <CommentSectionHeader theme={theme}>\n                     <CommentHeaderRight>\n                        {VideoReviewId && (\n                           <CommentFilter\n                              searchText={searchText}\n                              setSearchText={setSearchText}\n                              executeSearch={onPerformCommentSearch}\n                           />\n                        )}\n                     </CommentHeaderRight>\n                  </CommentSectionHeader>\n               )}\n               {isSelfIdentified && !conversationLoadingState.hasError && (\n                  <SelfIdentifiedUserWrapper theme={theme}>\n                     {t('conversations.selfIdentified.commentingAs', {displayName: config.user.DisplayName})}\n                     <ButtonStyledAsAnchor\n                        onClick={() => setShowSelfIdentifyAlertModal(true)}\n                        title={t('conversations.selfIdentified.changeUserToolTip')}\n                     >\n                        {' '}\n                        {t('conversations.selfIdentified.changeUser')}\n                     </ButtonStyledAsAnchor>\n                  </SelfIdentifiedUserWrapper>\n               )}\n               {VideoReviewId && !conversationLoadingState.hasError && (\n                  <CommentInput\n                     hasAnnotation={!!canvasRef?.getObjects().length}\n                     isCommentOwner={true}\n                     isReply={false}\n                     onSubmit={(commentText: string) => submitNewComment(commentText)}\n                     loadingState={addCommentLoadingState}\n                  />\n               )}\n            </ConversationContainerHeaderWrapper>\n            {/* eslint-disable-next-line eqeqeq */}\n            {conversationLoadingState.isWorking && !conversationLoadingState.hasError || (conversations == null && config.watchConfig.isOwnerOrAdmin) ? (\n\n               <SpinnerWrapper>\n                  <Spinner themeName={theme} />\n               </SpinnerWrapper>\n            ) : (\n               <CommentSection\n                  id=\"comment-section\"\n                  className=\"comment-section\"\n                  showEmptyState={showEmptyState}\n               >\n                  {showEmptyState ?\n                     emptyState :\n                     comments?.map((comment: IComment, index: number) => (\n                        <Comment\n                           key={index}\n                           comment={comment}\n                           isReply={false}\n                           shouldShowUpdate={commentsToHighlight?.indexOf(comment.id) > -1}\n                           setCommentsToHighlight={setCommentsToHighlight}\n                        />\n                     ))}\n                  <BottomSpacer />\n               </CommentSection>\n            )}\n         </ConversationContainer>\n         {showCreateConversationModal && <CreateConversationModal onClose={() => setShowCreateConversationModal(false)} />}\n         {showSelfIdentifyModal && (\n            <SelfIdentifyModal\n               showTosMessage={true}\n               showSignInMessage={true}\n               isEmbedded={false}\n               onClose={() => updateSelfIdentifiedUserProviderState({showSelfIdentifyModal: false})}\n            />\n         )}\n         {showSelfIdentifyAlertModal && (\n            <AlertModalPortal\n               title={t('conversations.selfIdentified.changeUser')}\n               confirmContent={t('conversations.selfIdentified.changeUser')}\n               closeContent={t('general.cancel')}\n               dismissContent={t('general.cancel')}\n               onClose={() => setShowSelfIdentifyAlertModal(false)}\n               onDismiss={() => setShowSelfIdentifyAlertModal(false)}\n               onConfirm={clearSelfIdentifiedUser}\n               dismissButtonType={TscButtonType.secondary}\n               confirmButtonType={TscButtonType.destructive}\n            >\n               {t('conversations.selfIdentified.changeUserWarningText', {displayName: config.user.DisplayName})}\n            </AlertModalPortal>\n         )}\n      </>\n   );\n};\n\nexport interface IConversationProps {\n   conversationLoadingState: IWorkerState;\n   setConversationLoadingState: (updatedState: IWorkerState) => void;\n   initialSelectedComment: IComment;\n   smartPlayerDisplayMode: string;\n}\n\nexport interface IStateMappedProps {\n   canvasRef: any;\n   comments: IComment[];\n   VideoReviewId: string;\n   conversations: IConversationData[];\n   ConversationHash: string;\n   Hash: string;\n   Title: string;\n   Author: string;\n   showSelfIdentifyModal: boolean;\n   IsReplacingMedia: boolean;\n}\n\nconst mapStatesToProps = (\n   {conversationLoadingState, setConversationLoadingState, initialSelectedComment, smartPlayerDisplayMode}: IConversationProps,\n   {canvasRef}: Partial<IStateMappedProps>,\n   {comments}: Partial<IStateMappedProps>,\n   {VideoReviewId, ConversationHash}: Partial<IStateMappedProps>,\n   {conversations}: Partial<IStateMappedProps>,\n   {Hash, Title, Author}: Partial<IStateMappedProps>,\n   {showSelfIdentifyModal}: Partial<IStateMappedProps>,\n   {IsReplacingMedia}: Partial<IStateMappedProps>\n): IStateMappedProps & IConversationProps => ({canvasRef, comments, VideoReviewId, ConversationHash, conversations, conversationLoadingState, setConversationLoadingState, initialSelectedComment, smartPlayerDisplayMode, Hash, Title, Author, showSelfIdentifyModal, IsReplacingMedia});\n\nexport default withMemoizedContexts(mapStatesToProps, canvasStore, commentsStore, selectedConversationStore, conversationsStore, mediaStore, selfIdentifiedUserStore, mediaOperationsStore)(ConversationBase);\n","import React from 'react';\nimport styled from 'styled-components';\nimport {TscButtonType, Spinner} from '@techsmith/tsc-cloud-style-guide';\nimport {useTranslation} from 'react-i18next';\nimport {IComment} from '../../model/commentModel';\nimport {StyledWarning} from '../util/StyledElements';\nimport {SetupWorkerState} from '../../model/workerState';\nimport logging from '../../service/logging';\nimport {AlertModalPortal} from '../util/ModalPortalHelper';\n\nconst AlertModalWrapper = styled.div`\n   button {\n      height: 2rem;\n   }\n`;\n\nconst DeleteCommentAlert: React.FC<IDeleteCommentAlertProps> = ({comment, deleteComment, onClose, setShowDeleteAlert}) => {\n   const {t} = useTranslation();\n   const [loadingState, setLoadingState] = SetupWorkerState();\n\n   const onDeleteClick = () => {\n      try {\n         setLoadingState({isWorking: true, hasError: false});\n         deleteComment(comment);\n         setLoadingState({isWorking: false, hasError: false});\n         onClose();\n      } catch (e) {\n         logging.error('Failed to delete comment', e);\n         setLoadingState({isWorking: false, hasError: true});\n      }\n   };\n\n   return (\n      <AlertModalWrapper>\n         <AlertModalPortal\n            title={t('conversations.deleteComment')}\n            onClose={() => setShowDeleteAlert(false)}\n            closeContent={t('general.cancel')}\n            onConfirm={onDeleteClick}\n            confirmContent={t('general.delete')}\n            confirmButtonType={TscButtonType.destructive}\n            onDismiss={() => setShowDeleteAlert(false)}\n            dismissContent={t('general.cancel')}\n            hideButtons={loadingState.isWorking}\n            testId=\"delete-comment-alert\"\n         >\n            <>\n               {loadingState.hasError && (\n                  <StyledWarning>\n                     {t('conversations.warnings.deleteComment')}\n                  </StyledWarning>\n               )}\n               {loadingState.isWorking && <Spinner />}\n               {!loadingState.isWorking && t('conversations.confirmCommentDeletionText')}\n            </>\n         </AlertModalPortal>\n      </AlertModalWrapper>\n   );\n};\n\nexport default DeleteCommentAlert;\n\nexport interface IDeleteCommentAlertProps {\n   comment: IComment;\n   deleteComment(comment: IComment): void;\n   onClose(): void;\n   setShowDeleteAlert(showDeleteAlert: boolean): void;\n}\n","import React, {memo} from 'react';\nimport {ControlButton, TscButtonType, Glyphs} from '@techsmith/tsc-cloud-style-guide';\nimport cssConstants from '../../constants/cssConstants';\nimport {IComment} from '../../model/commentModel';\nimport {useTranslation} from 'react-i18next';\nimport {CommentFooterWrapper} from '../util/StyledElements';\nimport {useTscTheme} from '../../context/themeProvider';\n\nexport const EditingCommentFooterBase: React.FC<IEditingCommentFooterProps> = ({isCommentOwner, comment, onSubmit, editedText, setShowDeleteAlertModal, deleteAnnotationOnSave, isReply, onCancel}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n\n   return (\n      <CommentFooterWrapper\n         isCommentOwner={isCommentOwner}\n         isReply={isReply}\n         isEditing={true}\n      >\n         <ControlButton\n            onClick={() => setShowDeleteAlertModal(true)}\n            title={t('conversations.deleteComment')}\n            glyph={<Glyphs.Delete16x16 />}\n            testId=\"delete-comment-button\"\n            buttonType={TscButtonType.destructive}\n            disabled={comment.isDeleted}\n         />\n         <ControlButton\n            onClick={onCancel}\n            title={t('conversations.cancelEdit')}\n            label={t('general.cancel')}\n            testId=\"cancel-editing-button\"\n            buttonType={TscButtonType.tertiary}\n            themeName={theme}\n            width={cssConstants.smallButtonWidth}\n         />\n         <ControlButton\n            onClick={() => onSubmit()}\n            title={t('conversations.saveEdit')}\n            label={t('general.save')}\n            testId=\"save-edit-button\"\n            buttonType={TscButtonType.primary}\n            themeName={theme}\n            width={cssConstants.smallButtonWidth}\n            disabled={comment.text === editedText && !deleteAnnotationOnSave}\n         />\n      </CommentFooterWrapper>\n   );\n};\n\nexport interface IEditingCommentFooterProps {\n   comment: IComment;\n   editedText: string;\n   deleteAnnotationOnSave: boolean;\n   isReply: boolean;\n   isCommentOwner: boolean;\n   setShowDeleteAlertModal(showDeleteAlertModal: boolean): void;\n   onSubmit(): void;\n   onCancel(): void;\n}\n\nexport default memo(EditingCommentFooterBase);\n","import React from 'react';\nimport {isMobile, isMacOs} from 'react-device-detect';\nimport styled from 'styled-components';\nimport {PopoverButton, TscButtonType, TscPopoverOrigin, Glyphs, TscThemeName, TscThemeNames} from '@techsmith/tsc-cloud-style-guide';\nimport data from '@emoji-mart/data';\nimport Picker from '@emoji-mart/react';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {disableConversationStore} from '../../context/disableConversationProvider';\nimport {useTranslation} from 'react-i18next';\nimport {PickerEmojiEvent} from '../../type/emoji-mart-data';\n\nexport const ShowEmojiButtonWrapper = styled.div<{$isEditing: boolean; $isTextOverflow: boolean}>`\n   position: absolute;\n   right: ${props =>\n      isMacOs || isMobile ? '0.25rem' :\n         props.$isTextOverflow ? '1rem' :\n            props.$isEditing ? '0.25rem' : '0rem'};\n   bottom: 0;\n\n   button {\n   transition: transform 0.2s ease;\n\n      :hover {\n         transform: translateY(-0.125rem);\n      }\n   }\n\n   em-emoji-picker {\n      margin-right: ${props =>\n         isMacOs || isMobile ? '-0.375rem' :\n            props.$isTextOverflow ? '-1.125rem' :\n               props.$isEditing ? '-0.375rem' : '-0.125rem'};\n   }\n`;\n\nexport const EmojiPickerWrapperBase: React.FC<IEmojiPickerWrapperProps & IStateMappedProps> = ({isEditing, isTextOverflow, theme, onEmojiClick, isCommentingDisabled}) => {\n   const {t} = useTranslation();\n   const [picker, setPicker] = React.useState(<></>);\n   const buttonTestId = 'emoji-picker-popover-btn';\n   const emojiMartButtonSize = 27;\n   const emojiMartEmojiSize = 20;\n\n   return (\n      <ShowEmojiButtonWrapper\n         $isEditing={isEditing}\n         $isTextOverflow={isTextOverflow}\n         onClick={() => setPicker(\n            <Picker\n               data={data}\n               emojiButtonSize={emojiMartButtonSize}\n               emojiSize={emojiMartEmojiSize}\n               searchPosition=\"none\"\n               theme={theme === TscThemeName.dawn ? 'light' : 'dark'}\n               onEmojiSelect={(emoji: PickerEmojiEvent) => onEmojiClick(emoji)}\n            />\n         )}\n      >\n         <PopoverButton\n            buttonType={TscButtonType.floating}\n            origin={TscPopoverOrigin.bottomRight}\n            themeName={theme}\n            width=\"2rem\"\n            buttonGlyph={<Glyphs.Emoji16x16 />}\n            popoverMenu={picker}\n            testId={buttonTestId}\n            disabled={isCommentingDisabled}\n            className=\"emoji-picker-popover\"\n            buttonTitle={t('conversations.emojiButtonTitle')}\n         />\n      </ShowEmojiButtonWrapper>\n   );\n};\n\nexport interface IEmojiPickerWrapperProps {\n   isEditing: boolean;\n   isTextOverflow: boolean;\n   theme: TscThemeNames;\n   onEmojiClick(emoji: PickerEmojiEvent): void;\n}\n\nexport interface IStateMappedProps {\n   isCommentingDisabled: boolean;\n}\n\nconst mapStatesToProps = (\n   {isEditing, isTextOverflow, theme, onEmojiClick}: IEmojiPickerWrapperProps,\n   {isCommentingDisabled}: Partial<IStateMappedProps>\n): IEmojiPickerWrapperProps & IStateMappedProps => ({isEditing, isTextOverflow, theme, onEmojiClick, isCommentingDisabled});\n\nexport default withMemoizedContexts(mapStatesToProps, disableConversationStore)(EmojiPickerWrapperBase);\n","import React, {MouseEventHandler, useState} from 'react';\nimport {ControlButton, TscButtonType, Glyphs, TscButtonGlyphPlacement, TscStyles, TscThemeName} from '@techsmith/tsc-cloud-style-guide';\nimport {useTranslation} from 'react-i18next';\nimport config from '../../service/config';\nimport {IComment} from '../../model/commentModel';\nimport UserMessaging from '../../util/UserMessaging';\nimport conversationApi from '../../service/conversationApi';\nimport styled from 'styled-components';\nimport {SetupWorkerState} from '../../model/workerState';\nimport Constants from '../../constants/Constants';\nimport {updateCommentsState, commentsStore} from '../../context/commentsProvider';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {CommentFooterWrapper} from '../util/StyledElements';\nimport {disableConversationStore} from '../../context/disableConversationProvider';\nimport {useTscTheme} from '../../context/themeProvider';\nimport logging from '../../service/logging';\nimport {updateSelfIdentifiedUserProviderState} from '../../context/selfIdentifiedUserProvider';\nimport CssUtil from '../../util/CssUtil';\n\nconst backgroundOpacity15 = 0.15;\nexport const LikeButtonWrapper = styled.div<{isReply: boolean; userHasLikedComment: boolean}>`\n   align-self: end;\n   margin-left: auto;\n\n   svg { \n      height: 14px;\n      width: 14px;\n   }\n\n   button {\n      padding: 0.375rem;\n      letter-spacing: 0;\n      gap: 0.375rem;\n      background-color: ${props => props.userHasLikedComment ? props.theme ===\n         TscThemeName.dusk ? TscStyles.color.ui.dusk.dark : CssUtil.toRgba(TscStyles.color.action.primary, backgroundOpacity15) : 'transparent'};\n      color: ${props => props.userHasLikedComment ? TscStyles.color.action.primary : props.theme ===\n         TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n      fill: ${props => props.userHasLikedComment ? TscStyles.color.action.primary : props.theme ===\n         TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n\n      :hover {\n         color: ${props => props.userHasLikedComment ? TscStyles.color.text.light : props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n         fill: ${props => props.userHasLikedComment ? TscStyles.color.text.light : props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n      }\n      span{\n         filter: ${props => (props.userHasLikedComment && props.theme === TscThemeName.dusk) ? 'brightness(150%)' : 'none'};\n      }\n   } \n`;\n\nconst backgroundOpacity60 = 0.6;\nexport const LikeListWrapper = styled.div<{isReply: boolean}>`\n   position: absolute;\n   right: -0.25rem;\n   margin-top: 4px;\n   background-color: ${props => props.theme === TscThemeName.dusk ? CssUtil.toRgba(TscStyles.color.ui.dusk.medium, backgroundOpacity60) : CssUtil.toRgba(TscStyles.color.ui.dawn.lightMedium, backgroundOpacity60)};\n   backdrop-filter: blur(12px);\n   padding: 0.25rem 0 0.25rem 0.75rem;\n   border-radius: ${TscStyles.border.radius.md};\n   z-index: 1;\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.dark};\n   max-width: 15rem;\n   width: max-content;\n   box-shadow: ${props => props.theme === TscThemeName.dusk ? '0 2px 12px rgba(0, 0, 0, 0.4), 0 .5px 2px rgba(255, 255, 255, 0.2) inset}' : '0 2px 12px rgba(0, 0, 0, 0.2), 0 .5px 2px rgba(255, 255, 255, 0.9) inset}'};\n   \n   :before {\n      content: '';\n      position: absolute;\n      width: 100%;\n      height: 4px;\n      top: -4px;\n      right: 0;\n   }\n`;\n\nconst LikeList = styled.div`\n   display: grid;\n   max-height: 19.75rem;\n   overflow-y: auto;\n   line-height: 1.4rem;\n\n   span {\n      margin-right: 0.75rem;\n      overflow: hidden;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n   }\n`;\n\nconst ExpandRepliesButton = styled.div<{expandReplies: boolean}>`\n   button {\n      letter-spacing: 0;\n      gap: 0.25rem;\n\n      span:first-child {\n         transition: transform 0.3s ease;\n         transform: ${props => props.expandReplies ? 'rotate(180deg);' : 'none;'};\n      }\n   }\n`;\n\nconst StyledReplyButton = styled(ControlButton)`\n   svg { \n      width: 14px;\n      height: 14px;\n   }\n`;\n\nconst StyledEditButton = styled(ControlButton)`\n   svg { \n      width: 14px;\n      height: 14px;\n   }\n`;\n\nexport const NonEditingCommentFooterBase: React.FC<INonEditingCommentFooterProps & IStateMappedProps> = ({comment, isReply, userHasLikedComment, comments, isCommentingDisabled, commentRepliesLength, setExpandReplies, expandReplies, handleExpandReplies}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [loadingState, setLoadingState] = SetupWorkerState();\n   const [showListOfLikes, setShowListOfLikes] = useState(false);\n\n   const onClickExpandReplies: MouseEventHandler = event => {\n      event.stopPropagation();\n      setExpandReplies(!expandReplies);\n   };\n\n   const onReplyClick = () => {\n      handleExpandReplies();\n\n      window.setTimeout(() => {\n         document.getElementById(`${comment.id}-reply-input`)?.focus();\n      }, Constants.getDomElementTimeout);\n   };\n\n   const onLikeClick = async (e: React.MouseEvent) => {\n      e.stopPropagation();\n\n      if (config.user.TechSmithId === Constants.nullTechSmithId) {\n         updateSelfIdentifiedUserProviderState({showSelfIdentifyModal: true});\n         return;\n      }\n\n      setLoadingState({isWorking: true, hasError: false});\n\n      try {\n         const updatedComment = userHasLikedComment ? await conversationApi.unlikeComment(comment, config.user.TechSmithId) : await conversationApi.likeComment(comment, config.user.TechSmithId);\n         const commentsCopy = Object.assign([], comments);\n\n         if (isReply) {\n            const parentComment = commentsCopy.find((c: IComment) => c.id === updatedComment.parentCommentId);\n            parentComment.replies.splice(parentComment.replies.findIndex((r: IComment) => r.id === updatedComment.id), 1, updatedComment);\n            commentsCopy.splice(commentsCopy.findIndex((oldComment: IComment) => oldComment.id === parentComment.id), 1, parentComment);\n         } else {\n            commentsCopy.splice(commentsCopy.findIndex((oldComment: IComment) => oldComment.id === comment.id), 1, updatedComment);\n         }\n\n         updateCommentsState({comments: commentsCopy});\n         setLoadingState({isWorking: false, hasError: false});\n      } catch (err) {\n         logging.error('Failed to like comment', err);\n         UserMessaging.warn(t('conversations.failedSaveComment'));\n         setLoadingState({isWorking: false, hasError: true});\n      }\n   };\n\n   const onEditCommentClick = () => {\n      document.getElementById('comment-editing-alert').style.display = 'block';\n      const commentsCopy = Object.assign([] as IComment[], comments);\n\n      if (isReply) {\n         updateCommentsState({\n            comments: commentsCopy.map(c => {\n               if (c.id !== comment.parentCommentId) {\n                  return c;\n               }\n               return Object.assign({}, c, {replies: c.replies.map((r: IComment) => r.id === comment.id ? Object.assign({}, r, {isEditing: true}) : r)}) as IComment;\n            })\n         });\n      } else {\n         updateCommentsState({\n            comments: commentsCopy.map(c => {\n               if (c.id === comment.id) {\n                  return Object.assign({}, c, {isEditing: true}) as IComment;\n               }\n               return c;\n            })\n         });\n      }\n\n      setTimeout(() => {\n         document.getElementById('comment-editing-alert').style.display = 'none';\n      }, 1000);\n   };\n\n   const expandThreadText = ` ${commentRepliesLength} ${commentRepliesLength > 1 ? t('conversations.commentReplyThread.replies') : t('conversations.commentReplyThread.reply')}`;\n   const showEditButton = ((config.watchConfig.isOwnerAdminOrTeamEditor) && !comment.isDeleted) || comment.authorId === config.user.TechSmithId;\n\n   return (\n      <CommentFooterWrapper\n         isReply={isReply}\n         isEditing={false}\n         data-test-id=\"non-editing-comment-footer\"\n      >\n\n         {!isReply && (\n            <>\n               {!!commentRepliesLength && (\n                  <ExpandRepliesButton expandReplies={expandReplies}>\n                     <ControlButton\n                        buttonType={TscButtonType.tertiary}\n                        onClick={onClickExpandReplies}\n                        label={expandThreadText}\n                        themeName={theme}\n                        glyph={<Glyphs.ArrowDown16x16 />}\n                        glyphPlacement={TscButtonGlyphPlacement.left}\n                        testId=\"expand-comment-replies-button\"\n                        aria={{'aria-expanded': expandReplies}}\n                     />\n                  </ExpandRepliesButton>\n               )}\n               <StyledReplyButton\n                  onClick={onReplyClick}\n                  label={t('conversations.reply')}\n                  themeName={theme}\n                  buttonType={TscButtonType.tertiary}\n                  disabled={isCommentingDisabled}\n                  testId=\"comment-reply-btn\"\n                  glyph={<Glyphs.ArrowReply16x16 />}\n               />\n            </>\n         )}\n         {showEditButton && (\n            <StyledEditButton\n               onClick={onEditCommentClick}\n               label={t('conversations.edit')}\n               themeName={theme}\n               buttonType={TscButtonType.tertiary}\n               disabled={isCommentingDisabled}\n               testId=\"comment-edit-btn\"\n               glyph={<Glyphs.Edit16x16 />}\n            />\n         )}\n         {!comment.isDeleted && (\n            <LikeButtonWrapper\n               theme={theme}\n               isReply={isReply}\n               userHasLikedComment={userHasLikedComment}\n               onMouseLeave={() => setShowListOfLikes(false)}\n               onMouseEnter={() => setShowListOfLikes(true)}\n            >\n               <ControlButton\n                  onClick={onLikeClick}\n                  disabled={loadingState.isWorking || comment.isDeleted || isCommentingDisabled}\n                  aria={{'aria-pressed': userHasLikedComment, 'aria-label': t('conversations.likeCommentLabel', {count: comment.likes.length})}}\n                  buttonType={userHasLikedComment ? TscButtonType.primary : TscButtonType.tertiary}\n                  themeName={theme}\n                  label={comment.likes.length > 0 ? comment.likes.length.toString() : t('conversations.like')}\n                  title={comment.likes.length === 0 ? t('conversations.likeCommentTitle') : ''}\n                  glyph={<Glyphs.ThumbsUp16x16 />}\n                  glyphPlacement={TscButtonGlyphPlacement.left}\n                  testId=\"comment-like-btn\"\n               />\n               {showListOfLikes && !!comment.likes.length && (\n                  <>\n                     <LikeListWrapper\n                        isReply={isReply}\n                        theme={theme}\n                     >\n                        <LikeList data-test-id=\"like-list\">\n                           {comment.likes.map(like => (\n                              <span key={like.UserId}>\n                                 {like.DisplayName}\n                              </span>\n                           ))}\n                        </LikeList>\n                     </LikeListWrapper>\n                  </>\n               )}\n            </LikeButtonWrapper>\n         )}\n      </CommentFooterWrapper>\n   );\n};\n\nexport interface INonEditingCommentFooterProps {\n   comment: IComment;\n   isReply: boolean;\n   userHasLikedComment: boolean;\n   commentRepliesLength: number;\n   expandReplies: boolean;\n   setExpandReplies(expandReplies: boolean): void;\n   handleExpandReplies(): void;\n}\n\nexport interface IStateMappedProps {\n   comments: IComment[];\n   isCommentingDisabled: boolean;\n}\n\nconst mapStatesToProps = (\n   {comment, isReply, userHasLikedComment, commentRepliesLength, handleExpandReplies, expandReplies, setExpandReplies}: INonEditingCommentFooterProps,\n   {comments}: Partial<IStateMappedProps>,\n   {isCommentingDisabled}: Partial<IStateMappedProps>\n): INonEditingCommentFooterProps & IStateMappedProps => ({comment, isReply, userHasLikedComment, comments, commentRepliesLength, expandReplies, isCommentingDisabled, handleExpandReplies, setExpandReplies});\n\nexport default withMemoizedContexts(mapStatesToProps, commentsStore, disableConversationStore)(NonEditingCommentFooterBase);\n","import * as React from 'react';\nimport {ControlButton, Glyphs, TscButtonType} from '@techsmith/tsc-cloud-style-guide';\nimport conversationApi from '../../service/conversationApi';\nimport UserMessaging from '../../util/UserMessaging';\nimport config from '../../service/config';\nimport {useTranslation} from 'react-i18next';\nimport {SetupWorkerState} from '../../model/workerState';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {selectedConversationStore} from '../../context/selectedConversationProvider';\nimport {useTscTheme} from '../../context/themeProvider';\nimport logging from '../../service/logging';\n\nexport const NotificationToggleBase: React.FC<IStateMappedProps & INotificationToggleProps> = ({userAuthoredComment, VideoReviewId}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [isNotificationEnabled, setIsNotificationEnabled] = React.useState(false);\n   const [loadingState, setLoadingState] = SetupWorkerState();\n\n   const fetchNotificationPreference = async () => {\n      try {\n         setLoadingState({isWorking: true, hasError: false});\n         const isEnabled = await conversationApi.isSubscribedToConversation(VideoReviewId);\n         if (isEnabled === null) {\n            setIsNotificationEnabled(config.watchConfig.isOwner || userAuthoredComment);\n         } else {\n            setIsNotificationEnabled(isEnabled);\n         }\n         setLoadingState({isWorking: false, hasError: false});\n      } catch (e) {\n         logging.error('Failed to fetch notification preference', e);\n         setLoadingState({isWorking: false, hasError: true});\n      }\n   };\n\n   React.useEffect(() => {\n      void fetchNotificationPreference();\n   }, []);\n\n   React.useEffect(() => {\n      void fetchNotificationPreference();\n   }, [VideoReviewId, userAuthoredComment]);\n\n   const toggleNotificationPreference = async (): Promise<void> => {\n      if (!loadingState.isWorking) {\n         try {\n            setLoadingState({isWorking: true, hasError: false});\n            const newNotificationValue = !isNotificationEnabled;\n            setIsNotificationEnabled(newNotificationValue);\n            if (newNotificationValue) {\n               await conversationApi.subscribeToConversation(VideoReviewId);\n            } else {\n               await conversationApi.unsubscribeFromConversation(VideoReviewId);\n            }\n            setLoadingState({isWorking: false, hasError: false});\n         } catch (e) {\n            setLoadingState({isWorking: false, hasError: true});\n            logging.error('Failed to toggle notification preference', e);\n            UserMessaging.warn(t('conversations.failedUpdatePreference'));\n         }\n      }\n   };\n\n   return (\n      <ControlButton\n         glyph={isNotificationEnabled ? <Glyphs.Alert16x16 /> : <Glyphs.AlertOutline16x16 />}\n         buttonType={TscButtonType.tertiary}\n         title={isNotificationEnabled ? t('conversations.actions.unsubscribeToConversationAlerts') : t('conversations.actions.subscribeToConversationAlerts')}\n         width=\"2rem\"\n         onClick={toggleNotificationPreference}\n         active={isNotificationEnabled}\n         themeName={theme}\n         disabled={loadingState.isWorking}\n         testId=\"conversation-notification-toggle\"\n      />\n   );\n};\n\nexport interface INotificationToggleProps {\n   userAuthoredComment: boolean;\n}\n\nexport interface IStateMappedProps {\n   VideoReviewId: string;\n}\n\nconst mapStatesToProps = (\n   {userAuthoredComment}: Partial<INotificationToggleProps>,\n   {VideoReviewId}: Partial<IStateMappedProps>\n): IStateMappedProps & INotificationToggleProps => ({userAuthoredComment, VideoReviewId});\n\nexport default withMemoizedContexts(mapStatesToProps, selectedConversationStore)(NotificationToggleBase);\n","import React, {useEffect, useState} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {ControlButton, SelectInput, TextInput, TscButtonType} from '@techsmith/tsc-cloud-style-guide';\nimport Optional from '../../model/optional';\nimport config from '../../service/config';\nimport conversationApi from '../../service/conversationApi';\nimport folderApi from '../../service/folderApi';\nimport mediaApi from '../../service/mediaApi';\nimport {IChaptersMinMax, ISuggestedChapter, ISuggestedDescription, ISuggestedTitle} from '../../model/mediaIntelligence';\nimport {StyledWarning} from '../util/StyledElements';\nimport '../../static/css/edit-details-modal.less';\nimport '../../static/css/modal.less';\nimport decode from 'entity-decode';\nimport {IWorkerState, SetupWorkerState} from '../../model/workerState';\nimport {IFieldData} from '../../model/fieldData';\nimport {conversationsStore} from '../../context/conversationsProvider';\nimport {useTscTheme} from '../../context/themeProvider';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {mediaStore, updateMediaState} from '../../context/mediaProvider';\nimport {IConversationData} from '../../model/conversationModel';\nimport {IMinimalFolder} from '../../model/minimalFolder';\nimport {IBaseLibrary} from '../../model/library';\nimport {BasicModalPortal} from '../util/ModalPortalHelper';\nimport MediaDetailsGenerateMenu, {MediaDetailGenerationTypes} from './MediaDetailsGenerateMenu';\nimport {CaptioningState, ICaptionData} from '../../model/captionModels';\nimport transcriptionApi from '../../service/transcriptionApi';\nimport Constants from '../../constants/Constants';\nimport {captionDataStore, updateCaptionDataState} from '../../context/captionDataProvider';\nimport captionApi from '../../service/captionApi';\nimport MediaDetailsChapters, {IChaptersDisplayModel} from './MediaDetailsChapters';\nimport {IMediaChapters} from '../../model/mediaDetails';\nimport TimeFormatter from '../../util/TimeFormatter';\nimport {MediaContentType} from '../../model/baseMedia';\nimport {EnvironmentType} from '../../model/appModel';\n\ninterface ILocalMediaData {\n   title: IFieldData;\n   description: IFieldData;\n   chapters: IChaptersDisplayModel[];\n}\n\nconst editDetailsModalWidth = '31rem';\n\nconst {minimumGeneratedChapters, maximumGeneratedChapters, maximumChapters} = Constants.chapters;\nconst defaultMinMax: IChaptersMinMax = {min: minimumGeneratedChapters, max: maximumGeneratedChapters};\n\nconst getInitialMinMax = (duration: string): IChaptersMinMax => {\n   if (!duration) {\n      return defaultMinMax;\n   }\n\n   const seconds = TimeFormatter.getSecondsFromTimeString(duration);\n\n   /* eslint-disable @typescript-eslint/no-magic-numbers */\n   if (seconds === 0) {\n      return defaultMinMax;\n   }\n\n   const minutes = Math.floor(seconds / 60);\n\n   if (minutes <= 3) {\n      return {min: 3, max: 5};\n   }\n   if (minutes <= 6) {\n      return {min: 4, max: 8};\n   }\n   if (minutes <= 20) {\n      return {min: 7, max: 10};\n   }\n   return {min: 8, max: 15};\n   /* eslint-enable @typescript-eslint/no-magic-numbers */\n};\n\nexport const EditDetailsModalBase: React.FC<IEditDetailsProps & IStateMappedProps> = ({onClose, conversations, Hash, MediaId, Title, Description, ParentFolder, OwnerLibrary, IsVideo, ContentType, Duration, Chapters, captionData}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [workerState, setWorkerState] = useState<IWorkerState>({\n      isWorking: false,\n      hasError: false\n   });\n   const [loadingCaptionData, setLoadingCaptionData] = SetupWorkerState();\n   const [captionStatus, setCaptionStatus] = useState<CaptioningState>(CaptioningState.None);\n   const [minMax, setMinMix] = useState<IChaptersMinMax>(getInitialMinMax(Duration));\n   const [aiRequestWasTooLarge, setAiRequestWasTooLarge] = useState(false);\n   const [aiRequestContentFiltered, setAiRequestContentFiltered] = useState(false);\n   const [parentFolderHash, setParentFolderHash] = useState(ParentFolder ? ParentFolder.Hash : '');\n   const [chaptersHaveInputError, setChaptersHaveInputError] = useState(false);\n   const [localMediaData, setLocalMediaData] = useState<ILocalMediaData>({\n      title: {\n         value: Title || 'Title'\n      },\n      description: {\n         value: Description\n      },\n      chapters: Chapters ? Chapters.chapters.map(chapter => ({timeCode: TimeFormatter.formatTime(chapter.timeInMilliseconds / 1000), description: chapter.label} as IChaptersDisplayModel)) : []\n   });\n\n   const {\n      title: {\n         value: title,\n         errorText: titleErrorText\n      },\n      description: {\n         value: description,\n         errorText: descriptionErrorText\n      },\n      chapters\n   } = localMediaData;\n\n   const isDev = config?.environmentData?.Environment === EnvironmentType.dev;\n\n   const onTitleChange = (evt: React.ChangeEvent<HTMLInputElement>): void => {\n      const newTitle = evt.target.value;\n      updateTitle(newTitle);\n   };\n\n   const updateTitle = (newTitle: string): void => {\n      const isEmpty = !newTitle.trim();\n      const isTooLong = newTitle.length > config.watchConfig.maxTitleLength;\n\n      setLocalMediaData({\n         ...localMediaData,\n         title: {\n            value: newTitle,\n            errorText: isEmpty\n               ? t('details.title.requiredError')\n               : isTooLong\n                  ? t('details.title.maxLengthError', {0: config.watchConfig.maxTitleLength})\n                  : ''\n         }\n      });\n   };\n\n   const updateDescription = (newDescription: string): void => {\n      // use the Symbol.iterator of string to handle multi width characters\n      const isTooLong = [...newDescription].length > config.watchConfig.maxDescriptionLength;\n\n      setLocalMediaData({\n         ...localMediaData,\n         description: {\n            value: newDescription,\n            errorText: isTooLong\n               ? t('details.description.maxLengthError', {0: config.watchConfig.maxDescriptionLength})\n               : ''\n         }\n      });\n   };\n\n   const onDescriptionChange = (evt: React.ChangeEvent<HTMLInputElement>): void => {\n      const newDescription = evt.target.value;\n      updateDescription(newDescription);\n   };\n\n   const onChaptersUpdate = (newChapters: IChaptersDisplayModel[]): void => {\n      setLocalMediaData({\n         ...localMediaData,\n         chapters: newChapters\n      });\n   };\n\n   const onChaptersInputError = (hasError: boolean): void => {\n      setChaptersHaveInputError(hasError);\n   };\n\n   const onGenerateMediaDetailsCallback = async (type: MediaDetailGenerationTypes) => {\n      if (type === MediaDetailGenerationTypes.description) {\n         try {\n            setWorkerState({isWorking: true, hasError: false});\n            const response: ISuggestedDescription = await mediaApi.getSuggestedDescription(Hash);\n            if (response?.suggestion) {\n               updateDescription(response.suggestion);\n               setWorkerState({isWorking: false, hasError: false});\n            }\n         } catch (e) {\n            setAiRequestWasTooLarge(e.status === Constants.statusCodes.contentTooLarge);\n            setAiRequestContentFiltered(e.status === Constants.statusCodes.forbidden);\n            setWorkerState({isWorking: false, hasError: true});\n            console.error('Error generating media description: ', e);\n         }\n      } else if (type === MediaDetailGenerationTypes.title) {\n         try {\n            setAiRequestWasTooLarge(true);\n            setWorkerState({isWorking: true, hasError: false});\n            const response: ISuggestedTitle = await mediaApi.getSuggestedTitle(Hash);\n            if (response?.suggestion) {\n               setAiRequestWasTooLarge(false);\n               updateTitle(response.suggestion);\n               setWorkerState({isWorking: false, hasError: false});\n            }\n         } catch (e) {\n            setAiRequestWasTooLarge(e.status === Constants.statusCodes.contentTooLarge);\n            setAiRequestContentFiltered(e.status === Constants.statusCodes.forbidden);\n            setWorkerState({isWorking: false, hasError: true});\n            console.error('Error generating media title: ', e);\n         }\n      } else if (type === MediaDetailGenerationTypes.chapters) {\n         try {\n            setAiRequestWasTooLarge(true);\n            setWorkerState({isWorking: true, hasError: false});\n            const suggestedChapters: ISuggestedChapter[] = await mediaApi.getSuggestedChapters(Hash, minMax.min, minMax.max);\n            if (suggestedChapters.length > 0) {\n               setAiRequestWasTooLarge(false);\n               suggestedChapters[0].time = 0; // First chapter always starts at 00:00\n               const updatedChapters: IChaptersDisplayModel[] = suggestedChapters.map(chapter => ({timeCode: TimeFormatter.formatTime(chapter.time), description: chapter.title, timeCodeValid: true, descriptionValid: true}));\n               onChaptersUpdate(updatedChapters);\n               setWorkerState({isWorking: false, hasError: false});\n            }\n         } catch (e) {\n            setAiRequestWasTooLarge(e.status === Constants.statusCodes.contentTooLarge);\n            setAiRequestContentFiltered(e.status === Constants.statusCodes.forbidden);\n            setWorkerState({isWorking: false, hasError: true});\n            console.error('Error generating media chapters: ', e);\n         }\n      }\n   };\n\n   const setMinMaxCallback = (updatedMinMax: IChaptersMinMax) => {\n      let min = updatedMinMax.min;\n      let max = updatedMinMax.max;\n\n      if (min !== minMax.min && min > max) {\n         max = min;\n      }\n\n      if (max !== minMax.max && max < min) {\n         min = max;\n      }\n\n      setMinMix({min: Math.max(minimumGeneratedChapters, min), max: Math.min(maximumChapters, max)});\n   };\n\n   const getCaptioningStatus = async () => {\n      setLoadingCaptionData({isWorking: true, hasError: false});\n      try {\n         const currentCaptionStatus = await captionApi.getStatus(MediaId);\n         updateCaptionDataState(currentCaptionStatus);\n         if (currentCaptionStatus.length === 0) {\n            setCaptionStatus(CaptioningState.None);\n         } else {\n            setCaptionStatus(currentCaptionStatus[0].CaptioningState);\n         }\n         setLoadingCaptionData({isWorking: false, hasError: false});\n      } catch (e) {\n         console.error(e);\n         setLoadingCaptionData({isWorking: false, hasError: true});\n      }\n   };\n\n   useEffect(() => {\n      if (!captionData?.length) {\n         void getCaptioningStatus();\n      } else {\n         setCaptionStatus(captionData[0].CaptioningState);\n      }\n   }, []);\n\n   const updateParentFolder = (evt: React.ChangeEvent<HTMLSelectElement>): void => {\n      const newParentFolderHash = evt.target.value;\n      setParentFolderHash(newParentFolderHash);\n   };\n\n   const supportsChapters = () => IsVideo && ContentType !== MediaContentType.YouTube;\n\n   const validateChapters = (): boolean => chapters.length === 0 || chapters.every(chapter => chapter.timeCode && Constants.timeCodeWithNoSpaceRegex.test(chapter.timeCode) && chapter.description);\n\n   const convertChaptersFromDisplayToSave = (): IMediaChapters => ({\n      version: '1.0',\n      chapters: chapters.sort((a, b) => (TimeFormatter.getSecondsFromTimeString(a.timeCode) - TimeFormatter.getSecondsFromTimeString(b.timeCode))).map((chapter: IChaptersDisplayModel) => ({\n         timeInMilliseconds: TimeFormatter.getSecondsFromTimeString(chapter.timeCode) * 1000,\n         label: chapter.description\n      }))\n   } as IMediaChapters);\n\n   const onSave = async () => {\n      setWorkerState({\n         isWorking: true,\n         hasError: false\n      });\n\n      const updates = [];\n\n      if (title !== Title) {\n         updates.push(mediaApi.updateTitle(Hash, title));\n         if (config.featureSwitches.IsScreencast && conversations && conversations.length > 0) {\n            updates.push(conversationApi.renameConversation(Hash, conversations[0].ConversationHash, title));\n         }\n      }\n\n      if (description !== Description) {\n         updates.push(mediaApi.updateDescription(Hash, description));\n      }\n\n      if (ParentFolder ? ParentFolder.Hash : '' !== parentFolderHash) {\n         updates.push(folderApi.updateParentFolder([Hash], [], parentFolderHash, OwnerLibrary.User?.TechSmithId));\n      }\n\n      let chaptersToSave = null;\n      if (supportsChapters() && validateChapters()) {\n         chaptersToSave = convertChaptersFromDisplayToSave();\n         updates.push(mediaApi.updateChapters(Hash, chaptersToSave));\n      }\n\n      try {\n         await Promise.all(updates);\n\n         updateMediaState({\n            Title: title,\n            Description: description,\n            ParentFolder: config.folderMap[parentFolderHash],\n            Chapters: chaptersToSave\n         });\n\n         onClose();\n      } catch {\n         setWorkerState({\n            isWorking: false,\n            hasError: true\n         });\n      }\n   };\n\n   const saveButton = (\n      <ControlButton\n         testId=\"edit-details-modal-save-button\"\n         label={t('general.save')}\n         buttonType={TscButtonType.primary}\n         disabled={Boolean(titleErrorText || descriptionErrorText || chaptersHaveInputError || (config.featureSwitches.IsScreencast && !conversations))}\n         themeName={theme}\n         onClick={onSave}\n         width=\"7rem\"\n      />\n   );\n\n   const cancelButton = (\n      <ControlButton\n         label={t('general.cancel')}\n         buttonType={TscButtonType.secondary}\n         disabled={false}\n         themeName={theme}\n         onClick={onClose}\n         width=\"7rem\"\n      />\n   );\n\n   const folderOptions = [{value: 'root', label: t('details.rootFolderName')}];\n   if (config.watchConfig.folder) {\n      config.watchConfig.folder.SubFolders.forEach(subfolder => {\n         folderOptions.push({value: subfolder.Hash, label: subfolder.Name});\n         subfolder.SubFolders.forEach(subsubfolder => folderOptions.push({value: subsubfolder.Hash, label: ` - ${subsubfolder.Name}`}));\n      });\n   }\n\n   const startTranscriptionOperation = async () => {\n      setWorkerState({isWorking: true, hasError: false});\n      try {\n         await transcriptionApi.startAutomatedTranscription(Hash);\n         updateCaptionDataState(await captionApi.getStatus(MediaId));\n         setWorkerState({isWorking: false, hasError: false});\n      } catch (e) {\n         setWorkerState({isWorking: false, hasError: true});\n      }\n   };\n\n   const modalBody =\n      (\n         <div className=\"form-body themeable-section\">\n            {workerState.hasError && (\n               <StyledWarning>\n                  {aiRequestWasTooLarge ? t('details.generate.requestTooLargeErrorText') : (aiRequestContentFiltered ? t('details.generate.contentFilterdErrorText') : t('general.errorText'))}\n               </StyledWarning>\n            )}\n            {!loadingCaptionData.isWorking && config.featureSwitches.EnableAIMediaSummary && IsVideo && (\n               <MediaDetailsGenerateMenu\n                  minMax={minMax}\n                  canModifyMinMax={isDev}\n                  setMinMaxCallback={setMinMaxCallback}\n                  captionState={captionStatus}\n                  onGenerateCallback={(generateType: MediaDetailGenerationTypes) => {\n                     void onGenerateMediaDetailsCallback(generateType);\n                  }}\n                  onStartTranscriptionCallback={() => {\n                     void startTranscriptionOperation();\n                  }}\n               />\n            )}\n            <div className=\"form-field-listing\">\n               <div className=\"form-field-group\">\n                  <label>\n                     {t('details.title.label')}\n                     <TextInput\n                        value={decode(title)}\n                        errorText={titleErrorText}\n                        onChange={onTitleChange}\n                        themeName={theme}\n                        placeholder={t('details.title.placeholder', {0: config.watchConfig.maxTitleLength})}\n                        required={true}\n                        tabIndex={0}\n                     />\n                  </label>\n               </div>\n               <div className=\"form-field-group\">\n                  <label>\n                     {t('details.description.label')}\n                     <TextInput\n                        testId=\"edit-details-modal-description\"\n                        sharedId=\"edit-details-modal-description\"\n                        value={decode(description)}\n                        errorText={descriptionErrorText}\n                        onChange={onDescriptionChange}\n                        themeName={theme}\n                        rows={5}\n                        placeholder={t('details.description.placeholder', {0: config.watchConfig.maxDescriptionLength})}\n                        tabIndex={0}\n                        disabled={!MediaId}\n                     />\n                  </label>\n               </div>\n               {supportsChapters() && (\n                  <MediaDetailsChapters\n                     generatedChapters={localMediaData.chapters}\n                     onChaptersUpdateCallback={onChaptersUpdate}\n                     onChaptersInputErrorCallback={onChaptersInputError}\n                  />\n               )}\n               <div className=\"form-field-group\">\n                  <SelectInput\n                     label={t('details.locationLabel')}\n                     value={parentFolderHash}\n                     options={folderOptions}\n                     onChange={updateParentFolder}\n                     themeName={theme}\n                     isFullWidth={true}\n                  />\n               </div>\n               <div className=\"button-group\">\n                  {cancelButton}\n                  {saveButton}\n               </div>\n            </div>\n         </div>\n      );\n\n   return (\n      <BasicModalPortal\n         visible={true}\n         title=\"Edit Details\"\n         width={editDetailsModalWidth}\n         onClose={workerState.isWorking ? null : onClose}\n         themeName={theme}\n         isLoading={workerState.isWorking}\n      >\n         <div className=\"modal-body\">\n            {modalBody}\n         </div>\n      </BasicModalPortal>\n   );\n};\n\nexport interface IEditDetailsProps {\n   onClose(): void;\n}\n\nexport interface IStateMappedProps {\n   conversations: IConversationData[];\n   Hash: string;\n   MediaId: string;\n   Title: string;\n   Description: string;\n   ParentFolder: Optional<IMinimalFolder>;\n   OwnerLibrary: Optional<IBaseLibrary>;\n   IsVideo: boolean;\n   ContentType: string;\n   Duration: string;\n   Chapters?: IMediaChapters;\n   captionData: ICaptionData[];\n}\n\nconst mapStatesToProps = (\n   {onClose}: IEditDetailsProps,\n   {conversations}: Partial<IStateMappedProps>,\n   {Hash, MediaId, Title, Description, ParentFolder, OwnerLibrary, IsVideo, ContentType, Duration, Chapters}: Partial<IStateMappedProps>,\n   {captionData}: Partial<IStateMappedProps>\n): IStateMappedProps & IEditDetailsProps => ({onClose, conversations, Hash, MediaId, Title, Description, ParentFolder, OwnerLibrary, IsVideo, ContentType, Duration, Chapters, captionData});\n\nexport default withMemoizedContexts(mapStatesToProps, conversationsStore, mediaStore, captionDataStore)(EditDetailsModalBase);\n","import React, {CSSProperties, memo, Suspense, useEffect, useRef, useState} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport styled from 'styled-components';\nimport {TscThemeName, TscThemeNames, TscStyles} from '@techsmith/tsc-cloud-style-guide';\nimport cssConstants from '../../constants/cssConstants';\nimport CssUtil from '../../util/CssUtil';\nimport Measurement from '../../util/Measurement';\nimport {NonStyledButton} from '../util/StyledElements';\nimport decode from 'entity-decode';\nimport {UpdateWindowSizingState} from '../../context/windowSizingProvider';\nimport {useTscTheme} from '../../context/themeProvider';\nimport remarkGfm from 'remark-gfm';\nimport remarkBreaks from 'remark-breaks';\nimport codeBlocks from 'remark-code-blocks';\nimport rehypeExternalLinks from 'rehype-external-links';\nimport rehypeTimecodeLinksPlugin from '../../util/RehypeTimecodeLinksPlugin';\nimport {importReactMarkdown} from '../../hooks/dynamicImport';\n\nconst maximumCollapsedHeight = new Measurement({rem: 17.0});\n\nconst ExpandMediaDetailsButton = styled(NonStyledButton)<{theme: TscThemeNames}>`\n   font-size: .875rem;\n   font-weight: ${cssConstants.semiBoldWeight};\n   text-decoration: underline;\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.lightMedium : TscStyles.color.text.medium};\n   cursor: pointer;\n   border: 2px solid transparent;\n\n   &:focus {\n      outline: none;\n      border: 2px solid currentColor;\n      border-radius: ${TscStyles.border.radius.sm};\n      text-decoration: none;\n   }\n`;\n\nconst DescriptionControlContainer = styled.div`\n   display: flex;\n   flex-direction: column;\n   width: 100%;\n   max-width: ${cssConstants.contentWidth};\n   margin: 0 auto;\n`;\n\nconst FadeTextContainer = styled.div<{theme: TscThemeNames}>`\n   position: relative;\n   width: 100%;\n   height: 7rem;\n   margin: -7rem 0 .25rem 0;\n   background: linear-gradient(\n      to bottom,\n      ${props => props.theme === TscThemeName.dusk ? CssUtil.toRgba(TscStyles.color.ui.dusk.medium, 0) : CssUtil.toRgba(TscStyles.color.ui.dawn.light, 0)}25%,\n      ${props => props.theme === TscThemeName.dusk ? CssUtil.toRgba(TscStyles.color.ui.dusk.medium, 1) : CssUtil.toRgba(TscStyles.color.ui.dawn.light, 1)} 90%);\n`;\n\n/* eslint-disable @typescript-eslint/no-magic-numbers */\nconst DescriptionTextContainer = styled.div<{theme: TscThemeNames}>`\n   overflow-y: hidden;\n   word-wrap: break-word;\n   transition: height 0.25s ease;\n   font-size: 1rem;\n   line-height: 1.5;\n\n   a {\n      color: inherit;\n      text-decoration: underline;\n      border: 1px dashed transparent;\n      outline: none;\n\n      &:focus, &:hover {\n         text-decoration: none;\n         border-color: currentColor;\n      }\n\n      &:active {\n         text-decoration: none;\n         border-color: currentColor;\n         border-style: solid;\n      }\n   }\n\n   p {\n      word-break: break-word;\n   }\n\n   blockquote {\n      color: ${props => props.theme === TscThemeName.dusk ? CssUtil.toRgba(TscStyles.color.text.light, 0.6) : CssUtil.toRgba(TscStyles.color.text.mediumDark, 0.7)};\n      border-left: 0.25rem solid ${props => props.theme === TscThemeName.dusk ? CssUtil.toRgba(TscStyles.color.text.lightMedium, 0.3) : CssUtil.toRgba(TscStyles.color.text.lightMedium, 0.7)};\n      margin-inline-start: 1rem;\n      padding: 0 1rem;\n   }\n`;\n/* eslint-enable @typescript-eslint/no-magic-numbers */\n\nconst ShowHideButtonPositioner = styled.div`\n   align-self: flex-start;\n`;\n\ninterface IDescriptionExpansionData {\n   isExpanded: boolean;\n   isTooLarge: boolean;\n   expansionHeight: Measurement;\n}\n\nexport const MediaDescriptionBase: React.FC<IMediaDescriptionProps> = ({rawDescriptionText}) => {\n   const descriptionRef = useRef<HTMLDivElement>();\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n\n   const [{isExpanded, isTooLarge, expansionHeight}, setDescriptionState] = useState<IDescriptionExpansionData>({\n      isExpanded: false,\n      isTooLarge: false,\n      expansionHeight: Measurement.zero\n   });\n\n   useEffect(() => {\n      const container = descriptionRef.current;\n\n      if (!container) {\n         return;\n      }\n\n      setDescriptionState({\n         isTooLarge: container.scrollHeight > maximumCollapsedHeight.inPixels,\n         expansionHeight: new Measurement({pixels: container.scrollHeight}),\n         isExpanded\n      });\n   }, [descriptionRef.current?.scrollHeight, rawDescriptionText]);\n\n   const descriptionTextContainerStyle: CSSProperties = {\n      height: !isTooLarge || isExpanded ? 'auto' : `${maximumCollapsedHeight.inRem}rem`\n   };\n\n   const onDescriptionCollapseClicked = () => {\n      if (!isTooLarge) {\n         return;\n      }\n\n      setDescriptionState({\n         isTooLarge,\n         expansionHeight,\n         isExpanded: !isExpanded\n      });\n\n      UpdateWindowSizingState({mediaDetailsIsExpanded: !isExpanded});\n   };\n\n   const showHideMoreDescriptionLink = isTooLarge && (\n      <ExpandMediaDetailsButton\n         onClick={onDescriptionCollapseClicked}\n         theme={theme}\n      >\n         {isExpanded ? t('ShowLess') : t('ShowMore')}\n      </ExpandMediaDetailsButton>\n   );\n\n   const ReactMarkdown = React.lazy(() => importReactMarkdown());\n\n   return (\n      <DescriptionControlContainer data-test-id=\"media-description\">\n         <DescriptionTextContainer\n            ref={descriptionRef}\n            style={descriptionTextContainerStyle}\n            theme={theme}\n         >\n            <Suspense fallback={null}>\n               <ReactMarkdown\n                  remarkPlugins={[remarkGfm, remarkBreaks, codeBlocks]}\n                  rehypePlugins={[[rehypeExternalLinks, {target: false}], [rehypeTimecodeLinksPlugin, {scrollableElementId: 'media-page-wrapper'}]]}\n               >\n                  {decode(rawDescriptionText)}\n               </ReactMarkdown>\n            </Suspense>\n         </DescriptionTextContainer>\n         {!isExpanded && isTooLarge && <FadeTextContainer theme={theme} />}\n         <ShowHideButtonPositioner>\n            {showHideMoreDescriptionLink}\n         </ShowHideButtonPositioner>\n      </DescriptionControlContainer>\n   );\n};\n\nexport interface IMediaDescriptionProps {\n   rawDescriptionText: string;\n}\n\nexport default memo(MediaDescriptionBase);\n","import React, {useEffect, useRef, useState} from 'react';\nimport qs from 'query-string';\nimport {useTranslation} from 'react-i18next';\nimport styled from 'styled-components';\nimport {ControlButton, TscButtonType, Glyphs, TscThemeName, TscThemeNames, TscStyles} from '@techsmith/tsc-cloud-style-guide';\nimport decode from 'entity-decode';\nimport Constants from '../../constants/Constants';\nimport cssConstants from '../../constants/cssConstants';\nimport Optional from '../../model/optional';\nimport config from '../../service/config';\nimport EditDetailsModal from './EditDetailsModal';\nimport MediaTitle from './MediaTitle';\nimport MoreMenu from './MoreMenu';\nimport MediaLocation from './MediaLocation';\nimport {UpdateWindowSizingState, windowSizingStore} from '../../context/windowSizingProvider';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport ShareModal from '../modals/ShareModal';\nimport CreateCollectionModal from '../modals/CreateCollectionModal';\nimport ShareToCollectionModal from '../modals/ShareToCollectionModal';\nimport {conversationsStore} from '../../context/conversationsProvider';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {mediaStore, updateMediaStateFromServer} from '../../context/mediaProvider';\nimport {migrationStore, pollInProgressMigrations} from '../../context/migrationProvider';\nimport {setupCSSHeightObserver} from '../../util/CSSHeightObserver';\nimport SparkleGlyph from '../../static/svg/SparkleGlyph16x16.svg';\nimport {useQueryParam, StringParam} from 'use-query-params';\nimport {IBaseLibrary} from '../../model/library';\n\n// this calculation is done so the text lines up specifically with the text of the first management button\nconst contentPadding = `${parseFloat(cssConstants.viewPageMeasurements.managementTabHorizontalMargin) + parseFloat(cssConstants.viewPageMeasurements.managementTabHorizontalPadding)}rem`;\n\nconst isCompleteRecordingSessionKey = 'iscompleterecordingsession';\n\nconst mediaDetailsExpansionTransition = 250;\n\nconst MediaDetailsContainer = styled.div<{theme: TscThemeNames}>`\n   display: flex;\n   flex-direction: column;\n   flex-shrink: 0;\n   flex-grow: 1;\n   align-self: stretch;\n   padding: ${contentPadding};\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n   font-size: 1rem;\n`;\n\nconst MediaActionWrapper = styled.div<{mediaTabsPanelOpen: boolean}>`\n   @media screen and (max-width: ${props => props.mediaTabsPanelOpen ? cssConstants.mediaDetailsButtonTextBreakPointWithmediaTabsPanelOpen : cssConstants.mediaDetailsButtonTextBreakPoint}px) {\n      button span:nth-child(2) {\n         display: none;\n      }\n   }\n`;\n\nconst MediaSpacedBar = styled.div`\n   display: flex;\n   justify-content: space-between;\n   align-items: center;\n   width: 100%;\n   max-width: ${cssConstants.contentWidth};\n   margin: 0 auto;\n`;\n\nconst MediaActions = styled.div`\n   display: flex;\n   flex-shrink: 0;\n   height: 2rem;\n`;\n\ninterface IEditDetailsTheme {\n   [theme: string]: {\n      color: string;\n      backgroundColor: string;\n      backgroundHoverColor: string;\n      backgroundActiveColor: string;\n      borderGradient: string;\n      accentBorderColor: string;\n      accentBackgroundColor: string;\n      accentDropShadow: string;\n   };\n}\nconst editDetailsThemes = {\n   [TscThemeName.dawn]: {\n      color: TscStyles.color.text.dark,\n      backgroundColor: '#F8F8F7',\n      backgroundHoverColor: '#dad9db',\n      backgroundActiveColor: '#dad9db',\n      borderGradient: 'linear-gradient(137deg, rgba(248, 76, 200, 0.60) 0%, rgba(239, 130, 0, 0.50) 88.47%)',\n      accentBorderColor: 'rgba(255, 255, 255, 0.75)',\n      accentBackgroundColor: 'rgba(255, 255, 255, 0.50)',\n      accentDropShadow: 'box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.10)'\n   },\n   [TscThemeName.dusk]: {\n      color: TscStyles.color.text.light,\n      backgroundColor: TscStyles.color.ui.dusk.mediumDark,\n      backgroundHoverColor: '#444749',\n      backgroundActiveColor: '#383b3e',\n      borderGradient: 'linear-gradient(137deg, rgba(248, 76, 200, 0.80) 0%, rgba(239, 130, 0, 0.40) 88.47%)',\n      accentBorderColor: 'rgba(255, 255, 255, 0.15)',\n      accentBackgroundColor: 'rgba(21, 25, 28, 0.50)',\n      accentDropShadow: 'box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.30)'\n   }\n} as IEditDetailsTheme;\n\nconst EditMediaButton = styled.button.attrs({'data-test-id': 'edit-details-button'})<{isDisabled: boolean; theme: TscThemeNames}>`\n   position: relative;\n   display: inline-flex;\n   align-items: center;\n   font-family: Figtree, sans-serif;\n   font-size: 0.875rem;\n   font-weight: 600;\n   text-decoration: none;\n   text-align: center;\n   vertical-align: middle;\n   outline: none;\n   line-height: 2rem;\n   height: 2rem;\n   cursor: pointer;\n   width: auto;\n   max-width: 22em;\n   padding: 0 .75rem;\n   box-sizing: border-box;\n   fill: ${props => editDetailsThemes[props.theme].color};\n   color: ${props => editDetailsThemes[props.theme].color};\n   border: solid 1px transparent;\n   background: ${props => editDetailsThemes[props.theme].backgroundColor};\n   background-clip: padding-box;\n   border-radius: ${TscStyles.border.radius.md};\n   ${props => props.isDisabled && 'opacity: 50%;'};\n   pointer-events: ${props => props.isDisabled ? 'none' : 'auto'};\n\n   &:before {\n      content: '';\n      position: absolute;\n      top: 0;\n      right: 0;\n      bottom: 0;\n      left: 0;\n      z-index: -1;\n      margin: -0.0625rem;\n      border-radius: inherit;\n      ${props => !props.isDisabled && `background: ${editDetailsThemes[props.theme].borderGradient}`};\n   }\n\n   &::-moz-focus-inner {\n      border: 0;\n   }\n\n   &:focus-visible {\n      outline: none;\n      &:after{\n         content: '';\n         display: block;\n         position: absolute;\n         top: 2px;\n         right: 2px;\n         bottom: 2px;\n         left: 2px;\n         border: 2px solid currentColor;\n         border-radius: ${TscStyles.border.radius.sm};\n      }\n   }\n\n   &:hover {\n      background: ${props => editDetailsThemes[props.theme].backgroundHoverColor};\n      box-shadow: 0 2px 3px ${TscStyles.color.global.boxShadow};\n      text-decoration: none;\n\n      &:before {\n         background: none;\n      }\n   }\n\n   &:active {\n      box-shadow: inset 0 2px 3px ${TscStyles.color.global.boxShadow};\n      background: ${props => editDetailsThemes[props.theme].backgroundActiveColor};\n   }\n\n   .editDetailsGlyph {\n      display: inline-flex;\n   }\n\n   .ai-glyph {\n      position: absolute;\n      pointer-events: none;\n      left: -10px;\n      top: -10px;\n      display: inline-flex;\n      padding: 2px;\n      justify-content: center;\n      align-items: center;\n      border-radius: ${TscStyles.border.radius.sm};\n      border: 1px solid ${props => editDetailsThemes[props.theme].accentBorderColor};\n      background: ${props => editDetailsThemes[props.theme].accentBackgroundColor};\n      ${props => editDetailsThemes[props.theme].accentDropShadow};\n      backdrop-filter: blur(3px);\n   }\n\n   .button-label {\n      display: inline-block;\n      margin-left: .5rem;\n   }\n`;\n\ninterface INormalizedParsedQuery {\n   [key: string]: Optional<string | string[]>;\n}\nexport const MediaDetailsBase: React.FC<IMediaDetailsProps & IStateMappedProps> = ({showMediaLocation, mediaDetailsIsExpanded, mediaTabsPanelOpen, Title, IsReady, IsVideo, OwnerLibrary, TeamId, migrationInProgress}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [showEditDetailsModal, setShowEditDetailsModal] = useState(false);\n   const [showShareModal, setShowShareModal] = useState(false);\n   const [showShareToCollectionModal, setShowShareToCollectionModal] = useState(false);\n   const [showCreateCollectionModal, setShowCreateCollectionModal] = useState(false);\n   const [view] = useQueryParam(Constants.queryParams.view, StringParam);\n\n   const mediaSupportAIFeatures = () => config.featureSwitches.EnableAIMediaSummary && IsVideo;\n\n   const removeIsCompleteRecordingSessionFromQueryString = (parsedQuery: INormalizedParsedQuery) => {\n      if (location.href.includes('?')) {\n         delete parsedQuery[isCompleteRecordingSessionKey];\n\n         const baseUrl = location.href.split('?')[0];\n         const updatedQueryString = qs.stringify(parsedQuery);\n         const updatedUrl = updatedQueryString.length > 0 ? `${baseUrl}?${updatedQueryString}` : baseUrl;\n\n         window.history.replaceState({}, window.document.title, updatedUrl);\n      }\n   };\n\n   const detailsContainer = useRef<HTMLDivElement>(null);\n\n   useEffect(() => {\n      void pollInProgressMigrations();\n   }, [migrationInProgress]);\n\n   useEffect(() => {\n      document.title = `${decode(Title) as string} - ${config.applicationFullName}`;\n   }, [Title]);\n\n   useEffect(() => {\n      const parsedQuery = qs.parse(location.search);\n      const normalizedQuery = Object.keys(parsedQuery)\n         .reduce<INormalizedParsedQuery>((destination, key) => {\n            destination[key.toLowerCase()] = parsedQuery[key];\n            return destination;\n         }, {});\n\n      if (normalizedQuery[isCompleteRecordingSessionKey] === 'true') {\n         setShowEditDetailsModal(true);\n      }\n\n      removeIsCompleteRecordingSessionFromQueryString(normalizedQuery);\n   }, []);\n\n   useEffect(() => {\n      if (view === 'editDetails' && config.watchConfig.isOwner) {\n         setShowEditDetailsModal(true);\n      }\n   }, [view]);\n\n   useEffect(() => {\n      if (!mediaDetailsIsExpanded) {\n         window.setTimeout(() => {\n            detailsContainer.current && UpdateWindowSizingState({mediaDetailsReservedHeight: `${detailsContainer.current.offsetHeight}px`});\n         }, mediaDetailsExpansionTransition);\n      }\n   }, [detailsContainer.current?.offsetHeight, mediaDetailsIsExpanded]);\n\n   const onCreateCollectionClose = () => {\n      setShowCreateCollectionModal(false);\n      setShowShareToCollectionModal(true);\n      updateMediaStateFromServer();\n   };\n\n   const onCreateCollectionClick = () => {\n      setShowShareToCollectionModal(false);\n      setShowCreateCollectionModal(true);\n   };\n\n   setupCSSHeightObserver(detailsContainer, cssConstants.variables.mediaDetailsHeight);\n\n   const getEditMediaButton = (): React.JSX.Element => {\n      if (mediaSupportAIFeatures()) {\n         return (\n            <EditMediaButton\n               className=\"edit-details-button\"\n               onClick={() => setShowEditDetailsModal(true)}\n               disabled={!IsReady}\n               isDisabled={!IsReady}\n               theme={theme}\n            >\n               <span className=\"editDetailsGlyph\">\n                  <Glyphs.Edit16x16 />\n               </span>\n               <span className=\"button-label\">\n                  {t('EditDetails')}\n               </span>\n               <div className=\"ai-glyph\">\n                  <SparkleGlyph />\n               </div>\n            </EditMediaButton>\n         );\n      }\n      return (\n         <ControlButton\n            onClick={() => setShowEditDetailsModal(true)}\n            buttonType={TscButtonType.tertiary}\n            themeName={theme}\n            glyph={<Glyphs.Edit16x16 />}\n            title={t('EditDetails')}\n            label={t('EditDetails')}\n            visible={config.watchConfig.isOwnerAdminOrTeamEditor}\n            testId=\"edit-details-button\"\n            disabled={!IsReady}\n         />\n      );\n   };\n\n   const resourceLinkId = new URLSearchParams(window.location.search).get('resourceLinkId') || new URLSearchParams(window.location.search).get('resourcelinkid');\n   const enableChangeMedia = config.environmentData.IsLti && (config.watchConfig.isOwnerAdminOrTeamEditor) && IsReady && resourceLinkId && config.environmentData.SupportsChangeMedia;\n   const displayShareMediaOptions = !config.environmentData.IsLti && (config.watchConfig.isOwnerAdminOrTeamEditor || (config.watchConfig.viewersCanShareMedia && config.user.IsSignedIn));\n\n   return (\n      <MediaDetailsContainer\n         ref={detailsContainer}\n         theme={theme}\n      >\n         {showMediaLocation && (\n            <MediaSpacedBar>\n               <MediaLocation TeamId={TeamId} />\n            </MediaSpacedBar>\n         )}\n         <MediaSpacedBar>\n            <MediaTitle text={Title} />\n            <MediaActions>\n               <MediaActionWrapper mediaTabsPanelOpen={mediaTabsPanelOpen}>\n                  {\n                     (config.watchConfig.isOwnerAdminOrTeamEditor) && getEditMediaButton()\n                  }\n                  {showEditDetailsModal && <EditDetailsModal onClose={() => setShowEditDetailsModal(false)} />}\n                  {displayShareMediaOptions && (\n                     <>\n                        <ControlButton\n                           buttonType={TscButtonType.tertiary}\n                           themeName={theme}\n                           glyph={<Glyphs.ShareToCollection16x16 />}\n                           title={t('collections.share.header')}\n                           label={t('collections.share.header')}\n                           testId=\"share-to-collection-button\"\n                           onClick={() => setShowShareToCollectionModal(true)}\n                           disabled={migrationInProgress}\n                        />\n                        {showShareToCollectionModal && (\n                           <ShareToCollectionModal\n                              onCreateCollection={onCreateCollectionClick}\n                              onClose={() => {\n                                 setShowShareToCollectionModal(false);\n                              }}\n                           />\n                        )}\n                        {showCreateCollectionModal && (\n                           <CreateCollectionModal\n                              onClose={onCreateCollectionClose}\n                              shareMediaToCollection={true}\n                           />\n                        )}\n                     </>\n                  )}\n                  {enableChangeMedia && (\n                     <ControlButton\n                        buttonType={TscButtonType.primary}\n                        themeName={theme}\n                        glyph={<Glyphs.Undo16x16 />}\n                        title={t('general.changeMedia')}\n                        label={t('general.changeMedia')}\n                        href={Constants.navigation.changeMediaLink.replace('{resourceLinkId}', resourceLinkId)}\n                        testId=\"change-media-button\"\n                     />\n                  )}\n                  {IsReady && <MoreMenu />}\n                  <ControlButton\n                     buttonType={TscButtonType.primary}\n                     themeName={theme}\n                     glyph={<Glyphs.Share16x16 />}\n                     title={t('share.action')}\n                     label={t('share.action')}\n                     testId=\"share-media-button\"\n                     onClick={() => {\n                        setShowShareModal(true);\n                     }}\n                  />\n                  {showShareModal && (\n                     <ShareModal\n                        mediaLibraryType={OwnerLibrary.LibraryType}\n                        onClose={() => {\n                           setShowShareModal(false);\n                        }}\n                     />\n                  )}\n               </MediaActionWrapper>\n            </MediaActions>\n         </MediaSpacedBar>\n      </MediaDetailsContainer>\n   );\n};\n\nexport interface IMediaDetailsProps {\n   showMediaLocation: boolean;\n}\n\nexport interface IStateMappedProps {\n   mediaDetailsIsExpanded: boolean;\n   mediaTabsPanelOpen: boolean;\n   Title: string;\n   IsReady: boolean;\n   IsVideo: boolean;\n   OwnerLibrary: IBaseLibrary;\n   TeamId: string;\n   migrationInProgress: boolean;\n}\n\nconst mapStatesToProps = (\n   {showMediaLocation}: Partial<IMediaDetailsProps>,\n   {mediaDetailsIsExpanded}: Partial<IStateMappedProps>,\n   {mediaTabsPanelOpen}: Partial<IStateMappedProps>,\n   {Title, IsReady, IsVideo, OwnerLibrary, TeamId}: Partial<IStateMappedProps>,\n   {migrationInProgress}: Partial<IStateMappedProps>\n): IMediaDetailsProps & IStateMappedProps => ({showMediaLocation, mediaDetailsIsExpanded, mediaTabsPanelOpen, Title, IsReady, IsVideo, OwnerLibrary, TeamId, migrationInProgress});\n\nexport default withMemoizedContexts(mapStatesToProps, windowSizingStore, conversationsStore, mediaStore, migrationStore)(MediaDetailsBase);\n","import React, {useEffect} from 'react';\nimport styled from 'styled-components';\nimport {\n   ControlButton,\n   Glyphs,\n   TextInput,\n   TscButtonType, TscStyles, TscThemeName,\n   TscThemeNames\n} from '@techsmith/tsc-cloud-style-guide';\nimport {useTranslation} from 'react-i18next';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {IMediaChapters} from '../../model/mediaDetails';\nimport {mediaStore} from '../../context/mediaProvider';\nimport TimeFormatter from '../../util/TimeFormatter';\nimport Constants from '../../constants/Constants';\nimport {importMediaInterface} from '../../hooks/dynamicImport';\n\nexport enum MediaDetailGenerationTypes {\n   title = 'title',\n   description = 'description',\n   chapters = 'chapters'\n}\n\nconst MediaDetailsChaptersContainer = styled.div<{theme: TscThemeNames}>`\n   position: relative;\n   display: flex;\n   flex-direction: column;\n   box-sizing: border-box;\n`;\n\nconst ChaptersInputContainer = styled.div<{theme: TscThemeNames}>`\n   display: grid;\n   grid-template-columns: 5rem 1fr 2rem;\n   grid-column-gap: .5rem;\n   grid-row-gap: .5rem;\n   padding: .5rem;\n   background-color: ${props => props.theme === TscThemeName.dawn ? TscStyles.color.ui.dawn.lightMedium : TscStyles.color.ui.dusk.mediumDark};\n   border-radius: ${TscStyles.border.radius.lg};\n   border: 1px solid ${props => props.theme === TscThemeName.dawn ? TscStyles.color.ui.dawn.medium : TscStyles.color.ui.dusk.dark};\n\n   .chapterTimeCodeLabel {\n      color: ${props => props.theme === TscThemeName.dawn ? TscStyles.color.text.medium : TscStyles.color.text.light};\n   }\n\n   .chapterDescriptionLabel {\n      grid-column: 2 / 4;\n      color: ${props => props.theme === TscThemeName.dawn ? TscStyles.color.text.medium : TscStyles.color.text.light};\n   }\n\n  .invalidChapterInput {\n    input {\n      border: 1px solid ${TscStyles.color.message.warning} !important;\n    }\n  }\n\n   .addChapterButton {\n      grid-column: 1 / 4;\n   }\n`;\n\nconst ChaptersItemContainer = styled.div`\n   display: grid;\n   grid-template-columns: 5rem 1fr 2rem;\n   grid-column-gap: .5rem;\n   grid-row-gap: .5rem;\n   grid-column: 1 / 4;\n   max-height: 10.25rem;\n   overflow-y: auto;\n   padding: 0.25rem;\n   margin: 0 -0.25rem;\n`;\n\nconst InputErrorText = styled.div`\n   font-size: .875rem;\n   font-style: normal;\n   font-weight: 400;\n   line-height: 20px;\n   color: ${TscStyles.color.message.warning};\n`;\n\nexport interface IChaptersDisplayModel {\n   timeCode: string;\n   description: string;\n   timeCodeValid: boolean;\n   descriptionValid: boolean;\n}\n\nconst initialChapter: IChaptersDisplayModel = {\n   timeCode: '00:00',\n   description: '',\n   timeCodeValid: true,\n   descriptionValid: true\n};\n\nconst newChapter: IChaptersDisplayModel = {\n   timeCode: '',\n   description: '',\n   timeCodeValid: true,\n   descriptionValid: true\n};\n\nconst numbersAndColonRegex = /^[0-9:]*$/;\n\nexport const MediaDetailsChaptersBase: React.FC<IMediaDetailsChaptersBaseProps & IStateMappedProps> = ({generatedChapters, onChaptersUpdateCallback, onChaptersInputErrorCallback, Duration, Chapters}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [internalChapters, setInternalChapters] = React.useState<IChaptersDisplayModel[]>([]);\n   const [chapterIndexJustAdded, setChapterIndexJustAdded] = React.useState<number>(-1);\n   const [timeCodeInErrorState, setTimeCodeInErrorState] = React.useState<boolean>(false);\n   const [descriptionInErrorState, setDescriptionInErrorState] = React.useState<boolean>(false);\n\n   useEffect(() => {\n      if (generatedChapters.length > 0) {\n         setInternalChapters(generatedChapters);\n         validateChaptersInputs();\n      }\n   }, [generatedChapters]);\n\n   const onChapterTimeCodeChange = (chapterIndex: number, newTimeCodeString: string): void => {\n      const isValidInput = numbersAndColonRegex.test(newTimeCodeString);\n      if (!isValidInput) {\n         return;\n      }\n      const copyOfChapters = internalChapters.slice();\n      copyOfChapters[chapterIndex].timeCode = newTimeCodeString;\n      copyOfChapters[chapterIndex].timeCodeValid = true;\n      updateChaptersState(copyOfChapters);\n   };\n\n   const updateChaptersState = (newChapters: IChaptersDisplayModel[]): void => {\n      setInternalChapters(newChapters);\n      onChaptersUpdateCallback(newChapters);\n   };\n\n   const onChapterLabelChange = (chapterIndex: number, newLabelString: string): void => {\n      const copyOfChapters = internalChapters.slice();\n      copyOfChapters[chapterIndex].description = newLabelString;\n      copyOfChapters[chapterIndex].descriptionValid = true;\n      updateChaptersState(copyOfChapters);\n   };\n\n   const addNewChapter = () => {\n      const copyOfChapters = internalChapters.slice();\n      copyOfChapters.push(copyOfChapters.length === 0 ? {...initialChapter} : {...newChapter});\n      setChapterIndexJustAdded(copyOfChapters.length - 1);\n      updateChaptersState(copyOfChapters);\n   };\n\n   const isTimeCodeValid = (timeCode: string): boolean => {\n      const validTimeCode = Constants.timeCodeWithNoSpaceRegex.test(timeCode);\n      const timeCodeWithinDuration = TimeFormatter.getSecondsFromTimeString(timeCode) < TimeFormatter.getSecondsFromTimeString(Duration);\n      return validTimeCode && timeCodeWithinDuration;\n   };\n\n   const validateChaptersInputs = () => {\n      const noTimeCodeInputErrors = internalChapters.every(chapter => chapter.timeCodeValid);\n      const noDescriptionInputErrors = internalChapters.every(chapter => chapter.descriptionValid);\n      setTimeCodeInErrorState(!noTimeCodeInputErrors);\n      setDescriptionInErrorState(!noDescriptionInputErrors);\n   };\n\n   const removeChapter = (chapterIndex: number) => {\n      const copyOfChapters = internalChapters.slice();\n      copyOfChapters.splice(chapterIndex, 1);\n\n      // enforce that the first chapter always has a time-code of 00:00\n      if (copyOfChapters.length > 0) {\n         copyOfChapters[0].timeCode = initialChapter.timeCode;\n      }\n\n      updateChaptersState(copyOfChapters);\n   };\n\n   const validateBlurredTimeCodeInput = (chapterIndex: number) => {\n      setInternalChapters(internalChapters.map((chapter, index) => {\n         if (index === chapterIndex) {\n            return {...chapter, timeCodeValid: isTimeCodeValid(chapter.timeCode)};\n         }\n         return chapter;\n      }));\n   };\n\n   const validateBlurredDescriptionInput = (chapterIndex: number) => {\n      setInternalChapters(internalChapters.map((chapter, index) => {\n         if (index === chapterIndex) {\n            return {...chapter, descriptionValid: !!chapter.description};\n         }\n         return chapter;\n      }));\n   };\n\n   useEffect(() => {\n      validateChaptersInputs();\n   }, [internalChapters]);\n\n   useEffect(() => {\n      onChaptersInputErrorCallback(timeCodeInErrorState || descriptionInErrorState);\n   }, [timeCodeInErrorState, descriptionInErrorState]);\n\n   useEffect(() => {\n      void importMediaInterface().then(mediaInterface => {\n         if ((!Chapters || Chapters.chapters.length === 0) && mediaInterface.tocChapters.length === 0) {\n            setInternalChapters([]);\n            return;\n         }\n         let mappedChapters: IChaptersDisplayModel[];\n         if (Chapters && Chapters.chapters.length > 0) {\n            mappedChapters = Chapters.chapters.map(chapter => ({timeCode: TimeFormatter.formatTime(chapter.timeInMilliseconds / 1000), description: chapter.label, timeCodeValid: true, descriptionValid: true} as IChaptersDisplayModel));\n         } else {\n            mappedChapters = mediaInterface.tocChapters.map(chapter => ({timeCode: TimeFormatter.formatTime(chapter.startTime / 1000), description: chapter.name, timeCodeValid: true, descriptionValid: true} as IChaptersDisplayModel));\n            onChaptersUpdateCallback(mappedChapters);\n         }\n         setInternalChapters(mappedChapters);\n      });\n   }, [Chapters]);\n\n   return (\n      <MediaDetailsChaptersContainer\n         className=\"form-field-group\"\n         theme={theme}\n      >\n         <label>\n            {t('details.chapters.label')}\n         </label>\n         {internalChapters.length === 0 ? (\n            <ControlButton\n               className=\"addChapterButton\"\n               label={t('details.chapters.addChapterButtonLabel')}\n               buttonType={TscButtonType.secondary}\n               themeName={theme}\n               onClick={addNewChapter}\n               testId=\"add-chapter-button\"\n               glyph={<Glyphs.Add16x16 />}\n            />\n         ) : (\n            <ChaptersInputContainer theme={theme}>\n               <label className=\"chapterTimeCodeLabel\">\n                  {t('details.chapters.timeCodeLabel')}\n               </label>\n               <label className=\"chapterDescriptionLabel\">\n                  {t('details.chapters.chapterDescriptionLabel')}\n               </label>\n               <ChaptersItemContainer>\n                  {internalChapters.map((chapter, index): React.JSX.Element => (\n                     <React.Fragment key={`chapter-${index}`}>\n                        <TextInput\n                           key={`timeCodeInput-${index}`}\n                           value={chapter.timeCode}\n                           disabled={index === 0 && chapter.timeCode === initialChapter.timeCode}\n                           onChange={(e: React.ChangeEvent<HTMLInputElement>) => onChapterTimeCodeChange(index, e.target.value)}\n                           onBlur={() => validateBlurredTimeCodeInput(index)}\n                           placeholder={t('details.chapters.timeCodePlaceholder')}\n                           themeName={theme}\n                           className={`chapterTimeCodeInput ${!chapter.timeCodeValid ? 'invalidChapterInput' : ''}`}\n                           rows={1}\n                           ariaLabel={t('details.chapters.timeCodeAriaLabel')}\n                           autoFocus={index !== 0 && index === chapterIndexJustAdded}\n                           testId={`chapter-time-code-${index}`}\n                           tabIndex={0}\n                        />\n                        <TextInput\n                           key={`descriptionInput-${index}`}\n                           value={chapter.description}\n                           onChange={(e: React.ChangeEvent<HTMLInputElement>) => onChapterLabelChange(index, e.target.value)}\n                           onBlur={() => validateBlurredDescriptionInput(index)}\n                           onEnter={(e: React.KeyboardEvent<HTMLInputElement>) => {\n                              if (index === internalChapters.length - 1) {\n                                 e.preventDefault();\n                                 addNewChapter();\n                              }\n                           }}\n                           themeName={theme}\n                           className={`chapterDescriptionInput ${!chapter.descriptionValid ? 'invalidChapterInput' : ''}`}\n                           rows={1}\n                           ariaLabel={t('details.chapters.chapterDescriptionAriaLabel')}\n                           autoFocus={index === 0 && index === chapterIndexJustAdded}\n                           testId={`chapter-description-${index}`}\n                           tabIndex={0}\n                        />\n                        <ControlButton\n                           key={`removeChapter-${index}`}\n                           buttonType={TscButtonType.tertiary}\n                           glyph={<Glyphs.CircleRemove16x16 />}\n                           title=\"Remove Chapter\"\n                           ariaLabel=\"Remove Chapter\"\n                           themeName={theme}\n                           className=\"removeChapterButton\"\n                           testId={`remove-chapter-button-${index}`}\n                           onClick={() => {\n                              removeChapter(index);\n                           }}\n                        />\n                     </React.Fragment>\n                  ))}\n               </ChaptersItemContainer>\n               <ControlButton\n                  className=\"addChapterButton\"\n                  label={t('details.chapters.addChapterButtonLabel')}\n                  buttonType={TscButtonType.secondary}\n                  themeName={theme}\n                  onClick={addNewChapter}\n                  isFullWidth={true}\n                  glyph={<Glyphs.Add16x16 />}\n                  testId=\"add-chapter-button\"\n               />\n            </ChaptersInputContainer>\n         )}\n         {timeCodeInErrorState && (\n            <InputErrorText>\n               {t('details.chapters.timeCodeInputError')}\n            </InputErrorText>\n         )}\n         {descriptionInErrorState && (\n            <InputErrorText>\n               {t('details.chapters.descriptionInputError')}\n            </InputErrorText>\n         )}\n      </MediaDetailsChaptersContainer>\n   );\n};\n\nexport interface IMediaDetailsChaptersBaseProps {\n   generatedChapters: IChaptersDisplayModel[];\n   onChaptersUpdateCallback(chapters: IChaptersDisplayModel[]): void;\n   onChaptersInputErrorCallback?(hasError: boolean): void;\n}\n\nexport interface IStateMappedProps {\n   Duration: string;\n   Chapters: IMediaChapters;\n}\n\nconst mapStatesToProps = (\n   {generatedChapters, onChaptersUpdateCallback, onChaptersInputErrorCallback}: Partial<IMediaDetailsChaptersBaseProps>,\n   {Duration, Chapters}: Partial<IStateMappedProps>\n): IMediaDetailsChaptersBaseProps & IStateMappedProps => ({generatedChapters, onChaptersUpdateCallback, onChaptersInputErrorCallback, Duration, Chapters});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore)(MediaDetailsChaptersBase);\n","import React from 'react';\nimport styled from 'styled-components';\nimport {\n   ControlButton,\n   Glyphs,\n   Label,\n   MenuItem,\n   PopoverButton,\n   TextInput,\n   TscButtonGlyphPlacement,\n   TscButtonType,\n   TscPopoverOrigin,\n   TscStyles,\n   TscThemeName,\n   TscThemeNames\n} from '@techsmith/tsc-cloud-style-guide';\nimport {useTranslation} from 'react-i18next';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport SparkleGlyph from '../../static/svg/SparkleGlyph.svg';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {EntitlementType} from '../../model/userQuotas';\nimport {userQuotaStore} from '../../context/userQuotaProvider';\nimport Constants from '../../constants/Constants';\nimport CssUtil from '../../util/CssUtil';\nimport {CaptioningState} from '../../model/captionModels';\nimport {IChaptersMinMax} from '../../model/mediaIntelligence';\nimport config from '../../service/config';\n\nexport enum MediaDetailGenerationTypes {\n   title = 'title',\n   description = 'description',\n   chapters = 'chapters'\n}\n\nconst MediaDetailsGenerateContainer = styled.div<{theme: TscThemeNames}>`\n   position: relative;\n   display: flex;\n   align-items: center;\n   border-radius: ${TscStyles.border.radius.xl};\n   border: 2px solid ${TscStyles.color.message.caution};\n   background: ${props => props.theme === TscThemeName.dawn ? TscStyles.color.ui.dawn.light : TscStyles.color.ui.dusk.dark};\n   box-shadow: 0 2px 16px 0 rgba(235, 174, 33, 0.30);\n   padding: 0.5rem;\n   margin-bottom: .5rem;\n   box-sizing: border-box;\n\n   .sparkleGlyph {\n      flex: 0 0 auto;\n      align-self: baseline;\n      margin-right: .5rem;\n   }\n\n   .generate-button-options {\n      flex-shrink: 0;\n   }\n`;\n\nconst BetaTag = styled.div`\n   position: absolute;\n   right: -12px;\n   top: -10px;\n   display: inline-flex;\n   height: 16px;\n   padding: 0 12px;\n   justify-content: center;\n   align-items: center;\n   flex-shrink: 0;\n   font-size: 0.8125rem;\n   font-style: normal;\n   font-weight: 600;\n   line-height: 20px;\n   color: ${TscStyles.color.text.dark};\n   border-radius: 27px;\n   background: linear-gradient(90deg, ${CssUtil.toRgba(TscStyles.color.action.screencastPrimaryStop1, 1)}, ${CssUtil.toRgba(TscStyles.color.action.screencastPrimaryStop2, 1)});\n`;\n\nconst GenerationDescriptionContainer = styled.div`\n   font-size: 0.8125rem;\n   font-weight: ${TscStyles.font.weight.semibold};\n   padding-right: 0.25rem;\n`;\n\nexport const GenerationOptionsMenu = styled.div`\n   display: flex;\n   flex-direction: column;\n   padding: .125rem;\n`;\n\nconst MinMax = styled.div`\n   color: ${TscStyles.color.text.dark};\n   display: flex;\n   justify-content: space-around;\n   margin-bottom: 1rem;\n`;\n\nconst {minimumGeneratedChapters, maximumChapters} = Constants.chapters;\n\nexport const MediaDetailsGenerateMenuBase: React.FC<IMediaDetailsGenerateMenuProps & IStateMappedProps> = ({captionState, minMax, canModifyMinMax, setMinMaxCallback, onGenerateCallback, onStartTranscriptionCallback, QuotaEntitlementType}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n\n   const getGenerateOptions = (): React.JSX.Element => (\n      <GenerationOptionsMenu>\n         <MenuItem\n            onClick={() => {\n               onGenerateCallback(MediaDetailGenerationTypes.title);\n            }}\n            label={t('details.generate.generateOptions.title')}\n         />\n         <MenuItem\n            onClick={() => {\n               onGenerateCallback(MediaDetailGenerationTypes.description);\n            }}\n            label={t('details.generate.generateOptions.description')}\n         />\n         <MenuItem\n            onClick={() => {\n               onGenerateCallback(MediaDetailGenerationTypes.chapters);\n            }}\n            label={t('details.generate.generateOptions.chapters')}\n            isDisabled={false}\n         />\n         {canModifyMinMax && (\n            <MinMax onClick={e => e.stopPropagation()}>\n               <div>\n                  <Label\n                     sharedId=\"min\"\n                     labelText=\"Min\"\n                  />\n                  <TextInput\n                     sharedId=\"min\"\n                     type=\"number\"\n                     minNumValue={minimumGeneratedChapters}\n                     maxNumValue={maximumChapters}\n                     value={`${minMax.min}`}\n                     onChange={(e: React.ChangeEvent<HTMLInputElement>) => setMinMaxCallback({min: parseInt(e.target.value, 10), max: minMax.max})}\n                  />\n               </div>\n               <div>\n                  <Label\n                     sharedId=\"max\"\n                     labelText=\"Max\"\n                  />\n                  <TextInput\n                     sharedId=\"max\"\n                     type=\"number\"\n                     minNumValue={minimumGeneratedChapters}\n                     maxNumValue={maximumChapters}\n                     value={`${minMax.max}`}\n                     onChange={(e: React.ChangeEvent<HTMLInputElement>) => setMinMaxCallback({min: minMax.min, max: parseInt(e.target.value, 10)})}\n                  />\n               </div>\n            </MinMax>\n         )}\n      </GenerationOptionsMenu>\n   );\n\n   const getCallToActionButton = (): React.JSX.Element => {\n      if (QuotaEntitlementType === EntitlementType.free) {\n         return (\n            <ControlButton\n               buttonType={TscButtonType.primaryScreencast}\n               label={t('details.generate.upgradeCallToAction')}\n               href={config.environmentData.ScreencastProPurchaseLinkUrl}\n               openLinkInNewTab={true}\n               testId=\"upgrade-tier-button-link\"\n            />\n         );\n      } else if (captionState === CaptioningState.None) {\n         return (\n            <ControlButton\n               buttonType={TscButtonType.secondary}\n               label={t('details.generate.transcribeButtonLabel')}\n               testId=\"transcribe-video-button\"\n               themeName={theme}\n               onClick={() => {\n                  onStartTranscriptionCallback();\n               }}\n            />\n         );\n      } else if (captionState === CaptioningState.Published) {\n         return (\n            <PopoverButton\n               buttonType={TscButtonType.secondary}\n               buttonText={t('details.generate.buttonLabel')}\n               buttonTitle={t('details.generate.buttonLabel')}\n               themeName={theme}\n               buttonGlyph={<Glyphs.CaratDown16x16 />}\n               glyphPlacement={TscButtonGlyphPlacement.right}\n               origin={TscPopoverOrigin.bottomLeft}\n               className=\"generate-button-options\"\n               testId=\"generate-options-button\"\n               popoverMenu={getGenerateOptions()}\n               closeMenuOnClick={true}\n            />\n         );\n      }\n      return null;\n   };\n\n   const getDescriptionText = (): string => {\n      if (captionState === CaptioningState.Published || QuotaEntitlementType === EntitlementType.free) {\n         return t('details.generate.description');\n      } else if (captionState === CaptioningState.None) {\n         return t('details.generate.needToTranscribeMessage');\n      }\n      return t('details.generate.transcribingMessage');\n   };\n\n   return (\n      <MediaDetailsGenerateContainer theme={theme}>\n         <SparkleGlyph className=\"sparkleGlyph\" />\n         <GenerationDescriptionContainer>\n            {getDescriptionText()}\n         </GenerationDescriptionContainer>\n         {getCallToActionButton()}\n         <BetaTag>\n            {t('details.generate.betaTag')}\n         </BetaTag>\n      </MediaDetailsGenerateContainer>\n   );\n};\n\nexport interface IMediaDetailsGenerateMenuProps {\n   captionState: CaptioningState;\n   minMax: IChaptersMinMax;\n   canModifyMinMax: boolean;\n   setMinMaxCallback(minMax: IChaptersMinMax): void;\n   onGenerateCallback(generateType: MediaDetailGenerationTypes): void;\n   onStartTranscriptionCallback(): void;\n}\n\nexport interface IStateMappedProps {\n   QuotaEntitlementType: EntitlementType;\n}\n\nconst mapStatesToProps = (\n   {captionState, minMax, canModifyMinMax, setMinMaxCallback, onGenerateCallback, onStartTranscriptionCallback}: Partial<IMediaDetailsGenerateMenuProps>,\n   {QuotaEntitlementType}: Partial<IStateMappedProps>\n): IMediaDetailsGenerateMenuProps & IStateMappedProps => ({captionState, minMax, canModifyMinMax, setMinMaxCallback, onGenerateCallback, onStartTranscriptionCallback, QuotaEntitlementType});\n\nexport default withMemoizedContexts(mapStatesToProps, userQuotaStore)(MediaDetailsGenerateMenuBase);\n","import styled from 'styled-components';\nimport {TscThemeName, TscThemeNames, TscStyles} from '@techsmith/tsc-cloud-style-guide';\nimport cssConstants from '../../constants/cssConstants';\nimport {StyledAnchor} from '../util/StyledElements';\nimport separatorSVG from '../../static/svg/mediaLocationSeparator.svg';\n\nexport const MediaDetailsLink = styled(StyledAnchor)<{theme: TscThemeNames}>`\n   font-size: .875rem;\n   font-weight: ${cssConstants.semiBoldWeight};\n   text-decoration: underline;\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.lightMedium : TscStyles.color.text.medium};\n   cursor: pointer;\n   padding: 0.25rem;\n`;\n\nexport const MediaDetailsSpan = styled.span<{theme: TscThemeNames}>`\n   font-size: .875rem;\n   font-weight: ${cssConstants.semiBoldWeight};\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n   padding: 0.25rem;\n`;\n\nexport const MediaLocationContainer = styled.div`\n   padding-top: .25rem;\n   padding-bottom: .25rem;\n   display: flex;\n   align-items: center;\n   overflow: hidden;\n   white-space: nowrap;\n`;\n\nexport const MediaLocationLink = styled(MediaDetailsLink)`\n   padding-left: 0;\n   padding-right: 0;\n`;\n\nexport const MediaLocationSeparator = styled(separatorSVG)<{theme: TscThemeNames}>`\n   padding-left: .25rem;\n   padding-right: .25rem;\n   fill: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.light : TscStyles.color.text.medium};\n`;\n","import React, {useEffect, useState} from 'react';\nimport Constants, {LibraryTypes} from '../../constants/Constants';\nimport config from '../../service/config';\nimport {MediaLocationLink, MediaLocationSeparator, MediaLocationContainer} from './MediaDetailsLink';\nimport collectionApi from '../../service/collectionApi';\nimport {ICollectionSummaryModel, IUserProfileModel} from '../../model/appModel';\nimport logging from '../../service/logging';\nimport {StringParam, useQueryParam} from 'use-query-params';\nimport {useTranslation} from 'react-i18next';\nimport profileApi from '../../service/profileApi';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {mediaStore} from '../../context/mediaProvider';\nimport Optional from '../../model/optional';\nimport {IBaseLibrary} from '../../model/library';\nimport {IMinimalFolder} from '../../model/minimalFolder';\nimport teamApi from '../../service/teamApi';\n\nexport const MediaLocationBase: React.FC<IMediaLocationProps & IStateMappedProps> = ({TeamId, OwnerLibrary, ParentFolder, Author, OriginatorId}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [ltiSessionType] = useQueryParam(Constants.queryParams.ltiSessionType, StringParam);\n   const [ltiFolderHash] = useQueryParam(Constants.queryParams.ltiSessionFolderHash, StringParam);\n   const [referringGroupName, setReferringGroupName] = useState('');\n   const [mediaOwnerName, setMediaOwnerName] = useState('');\n   const [teamName, setTeamName] = useState(null);\n\n   useEffect(() => {\n      if (!config.watchConfig.referringGroup || config.environmentData.IsLti) {\n         return;\n      }\n\n      const fetchCollectionName = async () => {\n         try {\n            const collection: ICollectionSummaryModel = await collectionApi.getCollectionSummaryById(config.watchConfig.referringGroup);\n            setReferringGroupName(collection.Name);\n         } catch (ex) {\n            // 404 or permissions error means collection will never show\n            logging.warn(ex);\n         }\n      };\n\n      void fetchCollectionName();\n   }, []);\n\n   useEffect(() => {\n      if (TeamId) {\n         teamApi.getTeam(TeamId).then(team => {\n            team.Name && setTeamName(team.Name);\n         }).catch(() => {});\n      }\n   }, [TeamId]);\n\n   const isCurrentUsersLibrary = OwnerLibrary.LibraryType === LibraryTypes.personal && !!OwnerLibrary.User?.TechSmithId && config.user.TechSmithId === OwnerLibrary.User.TechSmithId;\n   const isTeamLibrary = OwnerLibrary.LibraryType === LibraryTypes.team;\n\n   useEffect(() => {\n      const fetchMediaOwnerName = async () => {\n         const mediaOwnerTechSmithId: string = OwnerLibrary.User ? OwnerLibrary.User.TechSmithId : OriginatorId;\n\n         try {\n            const mediaOwner: IUserProfileModel = await profileApi.getUserProfileInfo(mediaOwnerTechSmithId);\n            setMediaOwnerName(mediaOwner.displayName);\n         } catch (ex) {\n            setMediaOwnerName(Author);\n            logging.error(`Failed getting user profile for ${mediaOwnerTechSmithId}. ex: `, ex);\n         }\n      };\n\n      void (!ParentFolder && !isCurrentUsersLibrary && !isTeamLibrary && fetchMediaOwnerName());\n   }, [ParentFolder]);\n\n   const mediaCollectionLink = `${Constants.navigation.collectionsViewBasePath}/${config.watchConfig.referringGroup}`;\n\n   let mediaLocationText;\n   if (ParentFolder) {\n      mediaLocationText = ParentFolder.Name;\n   } else if (isTeamLibrary) {\n      mediaLocationText = t('LibraryForTeam', {teamName: teamName});\n   } else if (isCurrentUsersLibrary) {\n      mediaLocationText = t('MyLibrary');\n   } else if (mediaOwnerName) {\n      mediaLocationText = t('LibraryForUser', {userDisplayName: mediaOwnerName});\n   }\n\n   let mediaLocationHref = Constants.navigation.myLibraryLink;\n   if (config.isAdmin && !config.watchConfig.isOwner && OwnerLibrary.User) {\n      mediaLocationHref = `/Users/${OwnerLibrary.User.TechSmithId}`;\n   }\n\n   if (ParentFolder) {\n      mediaLocationHref = `/folder/${ParentFolder.Hash}`;\n   }\n\n   if (config.environmentData.IsLti && ltiSessionType === 'folder') {\n      mediaLocationHref = `/folder?isLtiSession=true&id=${ltiFolderHash}`;\n      mediaLocationText = t('general.back');\n   }\n\n   if (isTeamLibrary && ParentFolder) {\n      mediaLocationHref = `/teams/${TeamId}/folder/${ParentFolder.Hash}`;\n   } else if (isTeamLibrary) {\n      mediaLocationHref = `/teams/${TeamId}`;\n   }\n\n   const showLocation = ((config.watchConfig.isOwnerAdminOrTeamEditor) && !config.environmentData.IsLti) || (config.environmentData.IsLti && ltiSessionType === 'folder');\n\n   return (\n      <MediaLocationContainer data-test-id=\"media-location-container\">\n         {showLocation && (\n            <MediaLocationLink\n               href={mediaLocationHref}\n               theme={theme}\n            >\n               {mediaLocationText}\n            </MediaLocationLink>\n         )}\n         {showLocation && referringGroupName && <MediaLocationSeparator />}\n         {referringGroupName && (\n            <MediaLocationLink\n               href={mediaCollectionLink}\n               theme={theme}\n            >\n               {referringGroupName}\n            </MediaLocationLink>\n         )}\n      </MediaLocationContainer>\n   );\n};\n\nexport interface IMediaLocationProps {\n   TeamId: string;\n}\n\nexport interface IStateMappedProps {\n   OwnerLibrary: Optional<IBaseLibrary>;\n   ParentFolder: Optional<IMinimalFolder>;\n   Author: string;\n   OriginatorId: string;\n}\n\nconst mapStatesToProps = (\n   {TeamId}: Partial<IMediaLocationProps>,\n   {OwnerLibrary, ParentFolder, Author, OriginatorId}: Partial<IStateMappedProps>\n): IMediaLocationProps & IStateMappedProps => ({TeamId, OwnerLibrary, ParentFolder, Author, OriginatorId});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore)(MediaLocationBase);\n","import React from 'react';\nimport styled from 'styled-components';\nimport cssConstants from '../../constants/cssConstants';\nimport decode from 'entity-decode';\n\nexport const MediaTitleContainer = styled.h1`\n   font-size: 1.5rem;\n   font-weight: ${cssConstants.semiBoldWeight};\n   white-space: nowrap;\n   overflow: hidden;\n   text-overflow: ellipsis;\n   flex-grow: 1;\n   padding-right: 1rem;\n   margin: 0;\n`;\n\ninterface IMediaTitleProps {\n   text: string;\n}\n\nconst MediaTitle: React.FC<IMediaTitleProps> = ({text}) => (\n   <MediaTitleContainer title={decode(text)}>\n      <span>\n         {decode(text)}\n      </span>\n   </MediaTitleContainer>\n);\n\nexport default MediaTitle;\n","import React, {useState} from 'react';\nimport config from '../../service/config';\nimport CopyMediaModal from '../modals/CopyMediaModal';\nimport ResetDataModal from '../modals/ResetDataModal';\nimport SetThumbnailModal from '../modals/SetThumbnailModal';\nimport ReplaceMediaModal from '../modals/ReplaceMediaModal/ReplaceMediaModal';\nimport {useTranslation} from 'react-i18next';\nimport DeleteModal from '../modals/DeleteModal';\nimport {TscPopoverOrigin, Glyphs, MenuItem} from '@techsmith/tsc-cloud-style-guide';\nimport TestablePopoverButton from '../util/TestablePopoverButton';\nimport styled from 'styled-components';\nimport cssConstants from '../../constants/cssConstants';\nimport {BrowserView} from 'react-device-detect';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {IMediaDetails} from '../../model/mediaDetails';\nimport Constants from '../../constants/Constants';\nimport {mediaStore} from '../../context/mediaProvider';\nimport UserOverQuotaModal from '../modals/UserOverQuotaModal';\nimport {updateUserQuotaFromServer} from '../../context/userQuotaProvider';\nimport {importMediaInterface} from '../../hooks/dynamicImport';\n\nconst MoreMenuWrapper = styled.div`\n   display: inline-block;\n\n   @media screen and (min-width: ${cssConstants.contextMenuBreakpoint}px) {\n       .more-menu {\n         z-index: ${cssConstants.zIndex.viewPageElement};\n      }\n   }\n`;\n\nexport const MoreMenuBase: React.FC<IStateMappedProps> = ({Hash, IsYouTube, DownloadUrl, DownloadEnabled, IsReady, IsVideo, Url, Title}) => {\n   const theme = useTscTheme();\n   const [showCopyModal, setShowCopyModal] = useState(false);\n   const [showDeleteModal, setShowDeleteModal] = useState(false);\n   const [showResetDataModal, setShowResetDataModal] = useState(false);\n   const [showSetThumbnailModal, setShowSetThumbnailModal] = useState(false);\n   const [showReplaceMedialModal, setShowReplaceMediaModal] = useState(false);\n\n   const {t} = useTranslation();\n\n   const onCopyClick = () => {\n      setShowCopyModal(true);\n   };\n\n   const onCopyClose = () => {\n      setShowCopyModal(false);\n      updateUserQuotaFromServer();\n   };\n\n   const onDeleteClick = async () => {\n      const mediaInterface = await importMediaInterface();\n      mediaInterface.currentTime > 0 && !mediaInterface.paused && mediaInterface.pause();\n      setShowDeleteModal(true);\n   };\n\n   const onDeleteClose = () => {\n      setShowDeleteModal(false);\n   };\n\n   const onResetDataClick = () => {\n      setShowResetDataModal(true);\n   };\n\n   const onResetDataClose = () => {\n      setShowResetDataModal(false);\n   };\n\n   const onSetThumbnailClick = () => {\n      setShowSetThumbnailModal(true);\n   };\n\n   const onSetThumbnailClose = () => {\n      setShowSetThumbnailModal(false);\n   };\n\n   const onReplaceMediaClick = () => {\n      setShowReplaceMediaModal(true);\n   };\n\n   const onReplaceMediaClose = () => {\n      setShowReplaceMediaModal(false);\n   };\n\n   const canDownload = !IsYouTube && DownloadUrl && (config.watchConfig.isOwnerAdminOrTeamEditor || config.watchConfig.viewersCanDownloadMedia && DownloadEnabled);\n   const canCopyMedia = !config.featureSwitches.DisableCopy && !config.environmentData.IsLti && (config.watchConfig.isOwnerAdminOrTeamEditor || config.viewersCanCopyMedia && config.user.IsSignedIn);\n   const canUpdateThumbnail = !config.environmentData.IsLti && (config.watchConfig.isOwnerAdminOrTeamEditor) && IsReady && IsVideo && !IsYouTube;\n   const canControlMedia = !config.environmentData.IsLti && (config.watchConfig.isOwnerAdminOrTeamEditor);\n   const canResetData = !config.featureSwitches.UseSingleConversation && !config.environmentData.IsLti && (config.watchConfig.isOwnerAdminOrTeamEditor);\n\n   const navigateToLibrary = () => {\n      window.location.href = Constants.navigation.myLibraryLink;\n   };\n\n   const reloadPage = () => {\n      window.setTimeout(() => {\n         window.location.reload();\n      }, 1000);\n   };\n\n   const showMenu = canDownload || canCopyMedia || canUpdateThumbnail || canControlMedia;\n   const selectedMedia = [{Hash, IsVideo, Title} as IMediaDetails];\n\n   return showMenu && (\n      <MoreMenuWrapper>\n         <TestablePopoverButton\n            buttonGlyph={<Glyphs.EllipsisStacked16x16 />}\n            origin={TscPopoverOrigin.topRight}\n            themeName={theme}\n            showArrow={false}\n            testId=\"more-menu-button\"\n            buttonText={t('More')}\n            buttonTitle={t('More')}\n            closeMenuOnClick={true}\n            useMobileMenu={true}\n            mobileContextMenuZindex={cssConstants.zIndex.mobileContextMenu}\n            mobileContextMenuTitle={t('MoreMediaOptions')}\n            className=\"more-menu\"\n         >\n            <>\n               {canDownload && (\n                  <MenuItem\n                     key=\"download\"\n                     label={t('Download')}\n                     href={DownloadUrl}\n                     openInNewTab={true}\n                  />\n               )}\n               {canCopyMedia && (\n                  <UserOverQuotaModal>\n                     <MenuItem\n                        key=\"copy\"\n                        label={t('MakeCopy')}\n                        onClick={onCopyClick}\n                     />\n                  </UserOverQuotaModal>\n               )}\n               {canUpdateThumbnail && (\n                  <MenuItem\n                     key=\"thumbnail\"\n                     label={t('setThumbnail.action')}\n                     onClick={onSetThumbnailClick}\n                  />\n               )}\n               {canControlMedia && (\n                  <MenuItem\n                     key=\"delete\"\n                     label={t('Delete')}\n                     onClick={onDeleteClick}\n                  />\n               )}\n               {canResetData && (\n                  <MenuItem\n                     key=\"reset-data\"\n                     label={t('resetData.clearData')}\n                     onClick={onResetDataClick}\n                  />\n               )}\n               <BrowserView>\n                  {canControlMedia && (\n                     <MenuItem\n                        key=\"replace-media\"\n                        label={t('replaceMedia.action')}\n                        onClick={onReplaceMediaClick}\n                     />\n                  )}\n               </BrowserView>\n            </>\n         </TestablePopoverButton>\n         {showCopyModal && (\n            <CopyMediaModal\n               onClose={onCopyClose}\n               selectedMediaUrl={Url}\n            />\n         )}\n         {showDeleteModal && (\n            <DeleteModal\n               onClose={onDeleteClose}\n               onDelete={navigateToLibrary}\n               mediaToDelete={[{Hash, IsVideo, Title} as IMediaDetails]}\n               title={t('deleteMedia.title')}\n               warning={t('deleteMedia.warning')}\n               testId=\"delete-media-modal\"\n            />\n         )}\n         {showResetDataModal && (\n            <ResetDataModal\n               onClose={onResetDataClose}\n               onResetData={reloadPage}\n               selectedMedia={selectedMedia}\n            />\n         )}\n         {showSetThumbnailModal && <SetThumbnailModal onClose={onSetThumbnailClose} />}\n         <BrowserView>\n            {showReplaceMedialModal && <ReplaceMediaModal onClose={onReplaceMediaClose} />}\n         </BrowserView>\n      </MoreMenuWrapper>\n   );\n};\n\nexport interface IStateMappedProps {\n   Hash: string;\n   IsYouTube: boolean;\n   DownloadUrl: string;\n   DownloadEnabled: boolean;\n   IsReady: boolean;\n   IsVideo: boolean;\n   Url: string;\n   Title: string;\n}\n\nconst mapStatesToProps = (\n   // eslint-disable-next-line no-empty-pattern\n   {},\n   {Hash, IsYouTube, DownloadUrl, DownloadEnabled, IsReady, IsVideo, Url, Title}: Partial<IStateMappedProps>\n): IStateMappedProps => ({Hash, IsYouTube, DownloadUrl, DownloadEnabled, IsReady, IsVideo, Url, Title});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore)(MoreMenuBase);\n","import React from 'react';\nimport {TscStyles, TscThemeName, TscThemeNames, ControlButton, TscButtonType, Glyphs} from '@techsmith/tsc-cloud-style-guide';\nimport styled from 'styled-components';\nimport {useTranslation} from 'react-i18next';\nimport Constants from '../../constants/Constants';\nimport {getIsFullscreen} from '../util/FullscreenHelper';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {mediaStore} from '../../context/mediaProvider';\nimport SmartPlayerConstants from '../../constants/smartPlayerConstants';\nimport cssConstants from '../../constants/cssConstants';\nimport {IComment} from '../../model/commentModel';\nimport {selectedConversationStore} from '../../context/selectedConversationProvider';\nimport {events} from '@techsmith/techsmith-smartplayer';\nimport {importMediaInterface} from '../../hooks/dynamicImport';\nimport MediaTabsToggleButtons from '../content/MediaTabsToggleButtons';\nimport {useTscTheme} from '../../context/themeProvider';\n\nconst minZoomPercentage = 10;\nconst maxZoomPercentage = 200;\nconst defaultPercentage = 100;\n\nenum ZoomState {\n   none = 'none',\n   fill = 'fill',\n   fit = 'fit'\n}\n\nconst ImageScrollContainer = styled.div<{theme: TscThemeNames}>`\n   height: 100%;\n   width: 100%;\n   margin: auto;\n   overflow: auto;\n   display: grid;\n   background-color: ${props => props.theme === TscThemeName.dawn ? SmartPlayerConstants.imageBackgroundColorDawn : SmartPlayerConstants.imageBackgroundColorDusk};\n   align-items: center;\n`;\n\nexport const ImageContainer = styled.div<{width: number; height: number; zoomPercentage: number; isFullscreen: boolean; theme: TscThemeNames}>`\n   position: relative;\n   margin: 0 auto;\n\n   // we try to not mess with smart-player layers at all, but we have to prevent SP native fullscreen from\n   // proc'ing because we control fullscreen and the fullscreen top-layer ourselves in this component\n   .smart-player-image-media {\n      pointer-events: none;\n   }\n\n   user-select: none;\n\n   &.zoom-none {\n      width: ${props => props.width * props.zoomPercentage / 100}px;\n      height: ${props => props.height * props.zoomPercentage / 100}px;\n   }\n\n   &.zoom-fill {\n      max-width: ${props => props.width}px;\n      max-height: ${props => props.height}px;\n   }\n\n   &.zoom-fit {\n      width: ${props => props.width * props.zoomPercentage / 100}px;\n      height: ${props => props.height * props.zoomPercentage / 100}px;\n      max-width: 100%;\n      max-height: 100%;\n   }\n\n   /* Safari fullscreen fix */\n   &:-webkit-full-screen {\n      margin-left: 0;\n      max-width: 100vw;\n      max-height: 100vh;\n      height: 100vh;\n      width: 100vw;\n   }\n\n   .image-container {\n      background: ${TscStyles.color.ui.dawn.light};\n   }\n`;\n\nexport const ImageZoomerContainer = styled.div`\n   display: flex;\n   justify-content: center;\n   align-items: center;\n   flex-direction: row;\n   gap: 1rem;\n   position: absolute;\n   top: 1rem;\n   right: 1rem;\n   user-select: none;\n`;\n\nexport const ImageZoomer = styled.div<{showZoomControls: boolean}>`\n   position: relative;\n   margin: auto;\n   width: min-content;\n   display: flex;\n   justify-items: center;\n   align-items: center;\n   padding: 0 !important;\n   border-radius: ${TscStyles.border.radius.md};\n   background-color: rgb(46 57 64 / 80%);\n   box-shadow: rgba(0, 0, 0, 0.2) 0 1px 3px 0, rgba(255, 255, 255, 0.2) 0 .5px 2px 0 inset, rgba(255, 255, 255, 0.1) 0 0 6px 0 inset;\n   backdrop-filter: blur(6px);\n   visibility: ${props => props.showZoomControls ? 'visible' : 'hidden'};\n   user-select: none;\n\n   & > * {\n      margin-right: 0 !important;\n   }\n\n   & > *:last-child {\n      margin-right: 0 !important;\n   }\n\n   & > button {\n      color: ${TscStyles.color.ui.dawn.light};\n      fill: ${TscStyles.color.ui.dawn.light};\n      &:hover {\n         box-shadow: none!important;\n      }\n   }\n\n   .fill-to-width-button, .fit-to-page-button {\n      padding: 0 .5rem;\n   }\n`;\n\nconst UISeparator = styled.div`\n   margin: 0 .25rem!important;\n   border-radius: ${TscStyles.border.radius.xs};\n   background: ${TscStyles.color.ui.dusk.lightMedium};\n   width: 2px;\n   height: 1.25rem;\n`;\n\nconst ZoomPercentage = styled.div`\n   display: inline-flex;\n   width: 2.5rem;\n   justify-content: center;\n   font-size: ${TscStyles.font.size.regular};\n   font-weight: ${TscStyles.font.weight.semibold};\n   color: ${TscStyles.color.ui.dawn.light};\n`;\n\nconst switchToFullScreenMode = (elementToFullScreen: React.MutableRefObject<HTMLDivElement>) => {\n   if (!elementToFullScreen.current) {\n      return;\n   }\n\n   const targetElement = elementToFullScreen.current.parentElement;\n\n   if (targetElement.requestFullscreen) {\n      void targetElement.requestFullscreen(); // @ts-expect-error polyfill legacy browser support\n   } else if (targetElement.webkitRequestFullscreen) { // @ts-expect-error polyfill legacy browser support\n      targetElement.webkitRequestFullscreen(); // @ts-expect-error polyfill legacy browser support\n   } else if (targetElement.msRequestFullscreen) { // @ts-expect-error polyfill legacy browser support\n      targetElement.msRequestFullscreen(); // @ts-expect-error polyfill legacy browser support\n   } else if (targetElement.mozRequestFullScreen) { // @ts-expect-error polyfill legacy browser support\n      targetElement.mozRequestFullScreen(); // @ts-expect-error polyfill legacy browser support\n   } else if (targetElement.webkitEnterFullscreen) { // @ts-expect-error polyfill legacy browser support\n      // legacy iOS full screen api\n      targetElement.webkitEnterFullscreen();\n   }\n};\n\nconst exitFullscreenMode = (elementToFullScreen: React.MutableRefObject<HTMLDivElement>) => {\n   if (!elementToFullScreen.current) {\n      return;\n   }\n\n   if (window.document.exitFullscreen) {\n      void window.document.exitFullscreen(); // @ts-expect-error polyfill legacy browser support\n   } else if (window.document.webkitExitFullscreen) { // @ts-expect-error polyfill legacy browser support\n      window.document.webkitExitFullscreen(); // @ts-expect-error polyfill legacy browser support\n   } else if (window.document.msExitFullscreen) { // @ts-expect-error polyfill legacy browser support\n      window.document.msExitFullscreen(); // @ts-expect-error polyfill legacy browser support\n   } else if (window.document.mozCancelFullScreen) { // @ts-expect-error polyfill legacy browser support\n      window.document.mozCancelFullScreen(); // @ts-expect-error polyfill legacy browser support\n   } else if (window.document.fullScreenElement?.webkitExitFullscreen) { // @ts-expect-error polyfill legacy browser support\n      // legacy iOS full screen api\n      window.document.fullScreenElement.webkitExitFullscreen();\n   }\n};\n\n// because tscsg gives pass-through refs to the html dom objects for buttons themselves (but does not expose OnMouseDown for the\n// button element) we leverage a ref and native dom click handler to prevent focus on-click (but not on-tab), this allows the\n// auto-hide to work as desired and not stick as open because a clicked button becomes active\nconst preventZoomControlButtonMouseClickFocus = (zoomControlButtonRefs: Record<string, React.RefObject<HTMLButtonElement>>) => {\n   zoomControlButtonRefs.zoomIn.current && (zoomControlButtonRefs.zoomIn.current.onmousedown = e => {\n      e.preventDefault();\n   });\n   zoomControlButtonRefs.zoomOut.current && (zoomControlButtonRefs.zoomOut.current.onmousedown = e => {\n      e.preventDefault();\n   });\n   zoomControlButtonRefs.fillToPage.current && (zoomControlButtonRefs.fillToPage.current.onmousedown = e => {\n      e.preventDefault();\n   });\n   zoomControlButtonRefs.fitToPage.current && (zoomControlButtonRefs.fitToPage.current.onmousedown = e => {\n      e.preventDefault();\n   });\n   zoomControlButtonRefs.fullScreen.current && (zoomControlButtonRefs.fullScreen.current.onmousedown = e => {\n      e.preventDefault();\n   });\n};\n\nexport interface IImageProps {\n   children?: React.ReactNode;\n}\n\nexport interface IStateMappedProps {\n   SelectedComment: IComment;\n   Rotate: number;\n   Width: number;\n   Height: number;\n}\n\ninterface IDimensions {\n   width: number;\n   height: number;\n   isInitialized: boolean;\n}\n\ninterface IZoom {\n   state: ZoomState;\n   percentage: number;\n}\n\nexport const ImageBase: React.FC<IStateMappedProps & IImageProps> = ({children, SelectedComment, Rotate, Width, Height}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n\n   const imageScrollContainer = React.useRef<HTMLDivElement>(null); // this will set to null in runtime and will be corrected later, but help setup tests correctly\n\n   const [showFitToPageButton, setShowFitToPageButton] = React.useState(false);\n   const [isFullscreen, setIsFullscreen] = React.useState(false);\n   const [isTimerActive, setIsTimerActive] = React.useState(false);\n   const [isHoveringControls, setIsHoveringControls] = React.useState(false);\n   const [isFocused, setIsFocused] = React.useState(false);\n   const [isIphoneOrIpod, setIsIphoneOrIpod] = React.useState(false);\n\n   const zoomCtlButtonRefs = {\n      zoomIn: React.useRef<HTMLButtonElement>(null),\n      zoomOut: React.useRef<HTMLButtonElement>(null),\n      fillToPage: React.useRef<HTMLButtonElement>(null),\n      fitToPage: React.useRef<HTMLButtonElement>(null),\n      fullScreen: React.useRef<HTMLButtonElement>(null)\n   };\n\n   const [isHoveringContainer, _setIsHoveringContainer] = React.useState(false);\n   const isHoveringContainerRef = React.useRef(isHoveringContainer);\n   const setIsHoveringContainer = (value: boolean) => {\n      isHoveringContainerRef.current = value;\n      _setIsHoveringContainer(value);\n   };\n\n   const [zoom, _setZoom] = React.useState<IZoom>({state: ZoomState.fill, percentage: defaultPercentage});\n   const zoomRef = React.useRef(zoom);\n   const setZoom = (value: IZoom) => {\n      zoomRef.current = value;\n      _setZoom(value);\n   };\n\n   const [dimensions, _setDimensions] = React.useState({width: -1, height: -1, isInitialized: false});\n   const dimensionsRef = React.useRef(dimensions);\n   const setDimensions = (value: IDimensions) => {\n      dimensionsRef.current = value;\n      _setDimensions(value);\n   };\n\n   const controlsVisibilityTimerId = React.useRef(-1);\n\n   const imageWidth = Rotate === Constants.rotation.ninety || Rotate === Constants.rotation.twoSeventy ? Height : Width;\n   const imageHeight = Rotate === Constants.rotation.ninety || Rotate === Constants.rotation.twoSeventy ? Width : Height;\n   const zoomIncrement = 10;\n   const zoomRoundValue = 10;\n   const zoomControlsHideTimeoutMS = 800;\n   const zoomControlsLeaveTimeoutMS = 100;\n\n   const preventMouseZoom = (event: WheelEvent) => {\n      if (event.ctrlKey && isHoveringContainerRef.current) {\n         event.preventDefault();\n      }\n   };\n\n   // prevents double-click from grabbing focus\n   const preventClickToSelect = (event: MouseEvent) => {\n      const clickCountToPrevent = 2;\n      if (event.detail === clickCountToPrevent && isHoveringContainerRef.current) {\n         event.preventDefault();\n      }\n   };\n\n   const zoomIn = () => {\n      const percentage = Math.min(maxZoomPercentage, Math.floor((Math.round(zoomRef.current.percentage) + zoomIncrement) / zoomRoundValue) * zoomRoundValue);\n      setZoom({state: ZoomState.none, percentage: percentage});\n   };\n\n   const zoomOut = () => {\n      const percentage = Math.max(minZoomPercentage, Math.ceil((Math.round(zoomRef.current.percentage) - zoomIncrement) / zoomRoundValue) * zoomRoundValue);\n      setZoom({state: ZoomState.none, percentage: percentage});\n   };\n\n   const onClickFit = () => {\n      const fitToHeight = imageWidth / imageHeight < dimensionsRef.current.width / dimensionsRef.current.height;\n      const percentage = fitToHeight ? Math.min(dimensionsRef.current.height / imageHeight * 100, defaultPercentage) : Math.min(dimensionsRef.current.width / imageWidth * 100, defaultPercentage);\n      setZoom({state: ZoomState.fit, percentage: percentage});\n   };\n\n   const onClickFill = () => {\n      const percentage = dimensionsRef.current.width > imageWidth ? 100 : dimensionsRef.current.width / imageWidth * 100;\n      setZoom({state: ZoomState.fill, percentage: percentage});\n   };\n\n   const onResize = () => {\n      if (!imageScrollContainer.current) {\n         return;\n      }\n\n      const containerWidth = imageScrollContainer.current.offsetWidth;\n      const containerHeight = imageScrollContainer.current.offsetHeight;\n      const hideFitButton = containerHeight >= imageHeight || containerWidth / (containerHeight + 1) < imageWidth / imageHeight; // Adding 1 to handle pixel rounding\n\n      setDimensions({\n         width: containerWidth,\n         height: containerHeight,\n         isInitialized: true\n      });\n\n      setShowFitToPageButton(!hideFitButton);\n\n      if (zoomRef.current.state === ZoomState.fill) {\n         onClickFill();\n      } else if (zoomRef.current.state === ZoomState.fit) {\n         onClickFit();\n      }\n   };\n\n   const toggleFullScreen = () => {\n      if (isFullscreen) {\n         exitFullscreenMode(imageScrollContainer);\n      } else {\n         switchToFullScreenMode(imageScrollContainer);\n      }\n   };\n\n   const onFullScreenChange = () => {\n      setIsFullscreen(!!getIsFullscreen());\n      onClickFill();\n   };\n\n   const resetControlsTimer = () => {\n      setIsTimerActive(true);\n      window.clearTimeout(controlsVisibilityTimerId.current);\n      const timeout = isHoveringContainerRef.current ? zoomControlsHideTimeoutMS : zoomControlsLeaveTimeoutMS;\n      controlsVisibilityTimerId.current = window.setTimeout(() => setIsTimerActive(false), timeout);\n   };\n\n   const onFocus = () => {\n      setIsFocused(true);\n   };\n\n   const onBlur = () => {\n      resetControlsTimer();\n      setIsFocused(false);\n   };\n\n   const stoppedHoveringContainer = () => {\n      setIsHoveringContainer(false);\n      resetControlsTimer();\n   };\n\n   const onWheelHandler = (e: React.WheelEvent<HTMLDivElement>) => {\n      if (!e.ctrlKey) {\n         return;\n      }\n\n      e.preventDefault();\n      e.stopPropagation();\n\n      if (e.deltaY < 0) {\n         zoomIn();\n      } else if (e.deltaY > 0) {\n         zoomOut();\n      }\n   };\n\n   preventZoomControlButtonMouseClickFocus(zoomCtlButtonRefs);\n\n   const scrollImageContainer = (scrollTop: number, scrollLeft: number) => {\n      imageScrollContainer.current.scrollTo({\n         top: scrollTop,\n         left: scrollLeft,\n         behavior: 'smooth'\n      });\n   };\n\n   React.useEffect(() => {\n      if (imageScrollContainer.current && SelectedComment?.annotation) {\n         try {\n            const annotation = JSON.parse(SelectedComment.annotation);\n            if (annotation.objects.length > 0) {\n               const zoomNormalized = zoom.percentage / 100;\n               const scrollPadding = 20;\n               const firstAnnotationTopPosition: number = +annotation.objects[0].top * zoomNormalized;\n               const firstAnnotationLeftPosition: number = +annotation.objects[0].left * zoomNormalized;\n               const firstAnnotationHeight: number = +annotation.objects[0].height * zoomNormalized;\n               const firstAnnotationWidth: number = +annotation.objects[0].width * zoomNormalized;\n               const scrollContainerHeight: number = imageScrollContainer.current.clientHeight;\n               const scrollContainerWidth: number = imageScrollContainer.current.clientWidth;\n               const scrollContainerCurrentScrollTop: number = imageScrollContainer.current.scrollTop;\n               const scrollContainerCurrentScrollLeft: number = imageScrollContainer.current.scrollLeft;\n\n               let topPosition = scrollContainerCurrentScrollTop;\n               let leftPosition = scrollContainerCurrentScrollLeft;\n\n               if (firstAnnotationTopPosition > scrollContainerHeight) {\n                  topPosition = firstAnnotationTopPosition + firstAnnotationHeight + (scrollPadding * zoomNormalized) - scrollContainerHeight;\n               } else if (firstAnnotationTopPosition < scrollContainerCurrentScrollTop) {\n                  topPosition = firstAnnotationTopPosition - (scrollPadding * zoomNormalized);\n               }\n\n               if (firstAnnotationLeftPosition > scrollContainerWidth) {\n                  leftPosition = firstAnnotationLeftPosition + firstAnnotationWidth + (scrollPadding * zoomNormalized) - scrollContainerWidth;\n               } else if (firstAnnotationLeftPosition < scrollContainerCurrentScrollLeft) {\n                  leftPosition = firstAnnotationLeftPosition - (scrollPadding * zoomNormalized);\n               }\n\n               scrollImageContainer(topPosition, leftPosition);\n            }\n         } catch (e) {\n            // Ignore error\n         }\n      }\n   }, [SelectedComment]);\n\n   React.useEffect(() => {\n      document.documentElement.style.setProperty(cssConstants.variables.zoom, `${zoom.percentage / 100}`);\n   }, [zoom]);\n\n   React.useEffect(() => {\n      const containerObserver = new ResizeObserver(onResize);\n\n      void importMediaInterface().then(mediaInterface => {\n         setIsIphoneOrIpod(mediaInterface.isIphoneOrIpod);\n         document.addEventListener('fullscreenchange', onFullScreenChange);\n         document.addEventListener('mozfullscreenchange', onFullScreenChange);\n         document.addEventListener('webkitfullscreenchange', onFullScreenChange);\n         document.addEventListener('msfullscreenchange', onFullScreenChange);\n         document.addEventListener('wheel', preventMouseZoom, {passive: false});\n         document.addEventListener('mousedown', preventClickToSelect);\n         mediaInterface.addEventListener(events.External.MediaReady, onResize);\n         containerObserver.observe(imageScrollContainer.current);\n      });\n\n      return () => {\n         void importMediaInterface().then(mediaInterface => {\n            document.removeEventListener('fullscreenchange', onFullScreenChange);\n            document.removeEventListener('mozfullscreenchange', onFullScreenChange);\n            document.removeEventListener('webkitfullscreenchange', onFullScreenChange);\n            document.removeEventListener('msfullscreenchange', onFullScreenChange);\n            document.removeEventListener('wheel', preventMouseZoom);\n            document.removeEventListener('mousedown', preventClickToSelect);\n            mediaInterface.removeEventListener(events.External.MediaReady, onResize);\n            containerObserver.disconnect();\n            window.clearTimeout(controlsVisibilityTimerId.current);\n         });\n      };\n   }, []);\n\n   return (\n      <ImageScrollContainer\n         ref={imageScrollContainer}\n         theme={theme}\n         className=\"image-scroll-container\"\n         onMouseMove={resetControlsTimer}\n         onMouseOver={() => setIsHoveringContainer(true)}\n         onMouseOut={stoppedHoveringContainer}\n         onWheel={onWheelHandler}\n      >\n         <ImageContainer\n            className={`image-container zoom-${zoom.state}`}\n            tabIndex={0}\n            width={imageWidth}\n            height={imageHeight}\n            zoomPercentage={zoom.percentage}\n            isFullscreen={isFullscreen}\n            theme={theme}\n            onMouseDown={e => e.preventDefault()}\n            onDoubleClick={e => {\n               e.preventDefault();\n               e.stopPropagation();\n               toggleFullScreen();\n            }}\n            onFocus={onFocus}\n            onBlur={onBlur}\n            data-test-id=\"image-container\"\n         >\n            {children}\n         </ImageContainer>\n         <ImageZoomerContainer>\n            <ImageZoomer\n               className=\"image-zoom\"\n               onMouseOver={() => setIsHoveringControls(true)}\n               onMouseOut={() => setIsHoveringControls(false)}\n               onFocus={onFocus}\n               onBlur={onBlur}\n               showZoomControls={isTimerActive || isHoveringControls || isFocused}\n            >\n               <ControlButton\n                  buttonType={TscButtonType.tertiary}\n                  title={t('image.zoomOutButtonTitle')}\n                  themeName={TscThemeName.dusk}\n                  glyph={<Glyphs.CircleRemove16x16 />}\n                  testId=\"zoom-out-btn\"\n                  onClick={zoomOut}\n                  ref={zoomCtlButtonRefs.zoomOut}\n               />\n               <ZoomPercentage className=\"zoom-value\">\n                  {Math.round(zoom.percentage)}\n                  %\n               </ZoomPercentage>\n               <ControlButton\n                  buttonType={TscButtonType.tertiary}\n                  title={t('image.zoomInButtonTitle')}\n                  themeName={TscThemeName.dusk}\n                  glyph={<Glyphs.CircleAdd16x16 />}\n                  testId=\"zoom-in-btn\"\n                  onClick={zoomIn}\n                  ref={zoomCtlButtonRefs.zoomIn}\n               />\n               <ControlButton\n                  buttonType={TscButtonType.tertiary}\n                  title={t('image.fillToWidth')}\n                  className=\"fill-to-width-button\"\n                  themeName={TscThemeName.dusk}\n                  label={t('image.fillToWidth')}\n                  aria={{'aria-label': t('image.a11yFillToWidth')}}\n                  testId=\"fill-btn\"\n                  onClick={onClickFill}\n                  ref={zoomCtlButtonRefs.fillToPage}\n               />\n               {showFitToPageButton && <UISeparator />}\n               {showFitToPageButton && (\n                  <ControlButton\n                     buttonType={TscButtonType.tertiary}\n                     title={t('image.fitToPage')}\n                     className=\"fit-to-page-button\"\n                     themeName={TscThemeName.dusk}\n                     label={t('image.fitToPage')}\n                     aria={{'aria-label': t('image.a11yFitToPage')}}\n                     testId=\"fit-to-page-btn\"\n                     onClick={onClickFit}\n                     ref={zoomCtlButtonRefs.fitToPage}\n                  />\n               )}\n               {!isIphoneOrIpod && (\n                  <ControlButton\n                     buttonType={TscButtonType.tertiary}\n                     title={isFullscreen ? t('image.exitFullscreenView') : t('image.enterFullscreenView')}\n                     themeName={TscThemeName.dusk}\n                     glyph={isFullscreen ? <Glyphs.FullscreenExit16x16 /> : <Glyphs.FullscreenEnter16x16 />}\n                     testId=\"fullscreen-image-btn\"\n                     onClick={toggleFullScreen}\n                     ref={zoomCtlButtonRefs.fullScreen}\n                  />\n               )}\n            </ImageZoomer>\n            <MediaTabsToggleButtons hidden={isFullscreen} />\n         </ImageZoomerContainer>\n      </ImageScrollContainer>\n   );\n};\n\nconst mapStatesToProps = (\n   {children}: IImageProps,\n   {SelectedComment}: Partial<IStateMappedProps>,\n   {Rotate, Width, Height}: Partial<IStateMappedProps>\n): IStateMappedProps & IImageProps => ({children, SelectedComment, Rotate, Width, Height});\n\nexport default withMemoizedContexts(mapStatesToProps, selectedConversationStore, mediaStore)(ImageBase);\n","import React, {memo} from 'react';\nimport {GradientBorder} from '../../component/util/StyledElements';\nimport styled from 'styled-components';\nimport {TscThemeNames, TscStyles} from '@techsmith/tsc-cloud-style-guide';\nimport cssConstants from '../../constants/cssConstants';\nimport {useTscTheme} from '../../context/themeProvider';\n\nconst HeaderContainerPlaceholder = styled.div`\n   display: flex;\n   flex-direction: column;\n   width: 100%;\n   flex: 0 0 auto;\n   font-size: 0.875rem;\n   top: 0;\n   left: 0;\n   right: 0;\n`;\n\nconst StyledHeaderPlaceholder = styled.header<{theme: TscThemeNames}>`\n   display: flex;\n   flex-direction: row;\n   background-color: ${cssConstants.headerBackgroundColor};\n   color: ${TscStyles.color.text.light};\n   height: ${cssConstants.headerHeight};\n   padding: 0 1rem;\n   justify-content: space-between;\n   align-items: center;\n   box-sizing: border-box;\n`;\n\nexport const HeaderPlaceholderBase: React.FC = () => {\n   const theme = useTscTheme();\n\n   return (\n      <HeaderContainerPlaceholder>\n         <StyledHeaderPlaceholder theme={theme} />\n         <GradientBorder />\n      </HeaderContainerPlaceholder>\n   );\n};\n\nexport default memo(HeaderContainerPlaceholder);\n","import {ControlButton, TscButtonType, TscStyles, TscThemeName, TscThemeNames} from '@techsmith/tsc-cloud-style-guide';\nimport React, {useState, useEffect} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport styled from 'styled-components';\nimport Constants from '../../constants/Constants';\nimport cssConstants from '../../constants/cssConstants';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {mediaStore} from '../../context/mediaProvider';\nimport {useTscTheme} from '../../context/themeProvider';\nimport Analytics, {IUaEventOptions, IUAEventParams} from '../../service/analytics';\nimport SnagitLogoSvg from '../../static/svg/SnagitLogo.svg';\nimport PlusGlyph from '../../static/svg/PlusGlyph.svg';\nimport CamtasiaScreencastLogo from '../../static/svg/CamtasiaScreencastLogo.svg';\nimport ScreencastMarketingLogo from '../../static/svg/ScreencastMarketingLogo.svg';\nimport SnagitScreencastLogo from '../../static/svg/SnagitScreencastLogo.svg';\nimport CamtasiaLogoSvg from '../../static/svg/CamtasiaLogo.svg';\nimport {setupCSSHeightObserver} from '../../util/CSSHeightObserver';\nimport {showWatchPageSnagitMessage, showWatchPageCaptureMessage, showWatchPageCamtasiaMessage, showWatchPageWebUploadMessage, showWatchPageCamtasiaWebMessage} from '../../util/MarketingHelper';\n\ninterface IBannerContent {\n   titleText: string;\n   bodyText: string;\n   CTAButtonText: string;\n   CTALink: string;\n}\n\nconst MarketingPane = styled.div<{theme: TscThemeNames; camtasiaBanner: boolean}>`\n   box-shadow: ${props => props.camtasiaBanner ? cssConstants.marketingPaneBoxShadowCamtasia : (props.theme === TscThemeName.dusk ? cssConstants.marketingPaneBoxShadowDusk : cssConstants.marketingPaneBoxShadowDawn)};\n   font-family: sans-serif;\n   display: flex;\n   background: ${props => props.theme === TscThemeName.dusk ? (props.camtasiaBanner ? cssConstants.marketingPaneBgCamtasiaDusk : cssConstants.marketingPaneBgDusk) : (props.camtasiaBanner ? cssConstants.marketingPaneBgCamtasiaDawn : cssConstants.marketingPaneBgDawn)};\n   background-size: cover;\n   background-origin: border-box;\n   border-radius: 200px;\n   border: ${props => props.theme === TscThemeName.dusk ? (props.camtasiaBanner ? cssConstants.marketingPaneBorderCamtasiaDusk : cssConstants.marketingPaneBorderDusk) : (props.camtasiaBanner ? cssConstants.marketingPaneBorderCamtasiaDawn : cssConstants.marketingPaneBorderDawn)};\n   -webkit-box-align: center;\n   align-items: center;\n   align-content: flex-end;\n   height: 1.875rem;\n   padding: 0.5rem 0.5rem 0.5rem 1rem;\n   margin: 0.8125rem 0.5rem .75rem .5rem;\n   color: ${props => props.theme === TscThemeName.dusk || props.camtasiaBanner ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n   width: fit-content;\n\n   @media screen and (min-width: ${cssConstants.marketingPaneShowDetailTextBreakpoint}px) {\n      min-width: 32rem;\n   }\n\n   @media screen and (min-width: ${cssConstants.marketingPaneBreakpoint}px) {\n      min-width: 44rem;\n      margin-top: 0;\n   }\n\n`;\n\nconst MarketingContainer = styled.span`\n   display: flex;\n   -webkit-box-align: center;\n   align-items: center;\n\n   .fullsizeProductLogo {\n      display: none;\n      @media screen and (min-width: ${cssConstants.marketingPaneShowDetailTextBreakpoint}px) {\n         display: flex;\n      }\n   }\n\n   .smallProductLogo {\n      display: flex;\n      margin-right: .5rem;\n      @media screen and (min-width: ${cssConstants.marketingPaneShowDetailTextBreakpoint}px) {\n         display: none;\n      }\n   }\n`;\n\nconst TextContainer = styled.span`\n   display: flex;\n   flex-direction: column;\n`;\n\nconst ButtonContainer = styled.div<{camtasiaBanner: boolean}>`\n   display: flex;\n   flex: 0 0 auto;\n   align-items: center;\n   margin-left: auto;\n   -webkit-box-align: center;\n\n   .bannerCtaButton {\n      border-radius: 27px;\n      background-color: ${props => props.camtasiaBanner ? TscStyles.color.brand.camtasia : ''};\n      color: ${props => props.camtasiaBanner ? TscStyles.color.text.dark : ''};\n      justify-content: center;\n      letter-spacing: 0;\n      margin: 0 0 0 1rem;\n      padding: 0 1rem;\n\n      @media screen and (min-width: ${cssConstants.marketingPaneShowDetailTextBreakpoint}px) {\n         display: flex;\n      }\n   }\n`;\n\nconst IconSvg = styled.span<{theme: TscThemeNames}>`\n   display:flex;\n\n   svg {\n      height: 32px;\n      width: 32px;\n   }\n`;\n\nconst TitleText = styled.span`\n   font-weight: 600;\n   font-size: .875rem;\n   font-family: Figtree, sans-serif;\n   line-height: 1rem;\n   width: auto;\n\n   @media screen and (min-width: ${cssConstants.marketingPaneBreakpoint}px) {\n      margin-right: .5rem;\n   }\n\n   @media screen and (min-width: ${cssConstants.marketingPaneShowDetailTextBreakpoint}px) {\n      font-size: 1rem;\n   }\n`;\n\nconst DetailText = styled.span<{captureBanner: boolean}>`\n   display: none;\n   font-family: Figtree, sans-serif;\n   margin-top: .25rem;\n   font-size: .75rem;\n   line-height: .75rem;\n   font-weight: 500;\n\n   @media screen and (min-width: ${cssConstants.marketingPaneShowDetailTextBreakpoint}px) {\n      display: ${props => props.captureBanner ? 'none' : 'flex'};\n   }\n\n   @media screen and (min-width: ${cssConstants.marketingPaneBreakpoint}px) {\n      display: flex;\n   }\n`;\n\nconst Logo = styled.span`\n   display: flex;\n   flex-direction: row;\n   margin-right: 0.5rem;\n`;\n\nconst PlusSignSvg = styled.span`\n   display: flex;\n   flex-direction: column;\n   justify-content: center;\n   margin: 0 0.25rem;\n   color: red;\n`;\n\nconst StyledPlusGlyph = styled(PlusGlyph)<{theme: TscThemeNames}>`\n   fill: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.ui.dawn.lightMedium : TscStyles.color.ui.dusk.medium};\n`;\n\nconst getMarketingLogo = (theme: TscThemeNames): React.JSX.Element => {\n   let plusSignTheme: TscThemeNames;\n   let ProductSvgLogo: React.JSX.Element;\n   let SmallProductSvgLogo: React.JSX.Element;\n   if (showWatchPageSnagitMessage() || showWatchPageWebUploadMessage() || showWatchPageCaptureMessage()) {\n      plusSignTheme = theme;\n      ProductSvgLogo = <SnagitLogoSvg />;\n      SmallProductSvgLogo = <SnagitScreencastLogo />;\n   } else if (showWatchPageCamtasiaMessage() || showWatchPageCamtasiaWebMessage()) {\n      plusSignTheme = TscThemeName.dusk;\n      ProductSvgLogo = <CamtasiaLogoSvg />;\n      SmallProductSvgLogo = <CamtasiaScreencastLogo />;\n   } else {\n      plusSignTheme = theme;\n      ProductSvgLogo = <SnagitLogoSvg />;\n      SmallProductSvgLogo = <SnagitScreencastLogo />;\n   }\n\n   return (\n      <>\n         <Logo className=\"fullsizeProductLogo\">\n            <IconSvg>\n               {ProductSvgLogo}\n            </IconSvg>\n            <PlusSignSvg>\n               <StyledPlusGlyph theme={plusSignTheme} />\n            </PlusSignSvg>\n            <IconSvg>\n               <ScreencastMarketingLogo />\n            </IconSvg>\n         </Logo>\n         <Logo className=\"smallProductLogo\">\n            <IconSvg>\n               {SmallProductSvgLogo}\n            </IconSvg>\n         </Logo>\n      </>\n   );\n};\n\nexport const MarketingPaneBase: React.FC<IStateMappedProps> = ({Hash, IsVideo}) => {\n   const marketingPaneRef = React.createRef<HTMLDivElement>();\n\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [bannerVariantIndex, setBannerVariantIndex] = useState<number>(0);\n   const isSnagitBanner = showWatchPageSnagitMessage();\n   const isCaptureBanner = showWatchPageCaptureMessage();\n   const isCamtasiaBanner = showWatchPageCamtasiaMessage();\n   const isCamtasiaWebBanner = showWatchPageCamtasiaWebMessage();\n   const isWebUploadBanner = showWatchPageWebUploadMessage();\n   const [bannerContent, setBannerContent] = useState<IBannerContent>(null);\n   const variantLetters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];\n\n   const getBannerContentVariants = (): IBannerContent[] => {\n      const bannerContentVariants: IBannerContent[] = [];\n      if (isSnagitBanner) {\n         bannerContentVariants.push({\n            titleText: t('marketing.snagit.titleText').replace('{{mediaType}}', IsVideo ? t('marketing.mediaType.video') : t('marketing.mediaType.image')),\n            bodyText: null,\n            CTAButtonText: t('marketing.snagit.CTAButtonText'),\n            CTALink: Constants.navigation.banners.workPlaceComms\n         });\n         bannerContentVariants.push({\n            titleText: t('marketing.snagit.titleText').replace('{{mediaType}}', IsVideo ? t('marketing.mediaType.video') : t('marketing.mediaType.image')),\n            bodyText: null,\n            CTAButtonText: t('marketing.snagit.CTAButtonText'),\n            CTALink: IsVideo ? Constants.navigation.banners.screenRecorder : Constants.navigation.banners.screenCapture\n         });\n      } else if (isWebUploadBanner) {\n         bannerContentVariants.push({\n            titleText: t('marketing.webupload.titleText').replace('{{mediaType}}', IsVideo ? t('marketing.mediaType.video') : t('marketing.mediaType.image')),\n            bodyText: null,\n            CTAButtonText: t('marketing.webupload.CTAButtonText'),\n            CTALink: IsVideo ? Constants.navigation.banners.screenRecorder : Constants.navigation.banners.screenCapture\n         });\n         bannerContentVariants.push({\n            titleText: t('marketing.webupload.titleText').replace('{{mediaType}}', IsVideo ? t('marketing.mediaType.video') : t('marketing.mediaType.image')),\n            bodyText: null,\n            CTAButtonText: t('marketing.webupload.CTAButtonText'),\n            CTALink: Constants.navigation.banners.workPlaceComms\n         });\n         if (IsVideo) {\n            bannerContentVariants.push({\n               titleText: t('marketing.webupload.titleText').replace('{{mediaType}}', t('marketing.mediaType.video')),\n               bodyText: null,\n               CTAButtonText: t('marketing.webupload.CTAButtonText'),\n               CTALink: Constants.navigation.banners.screenCapture\n            });\n         }\n      } else if (isCaptureBanner) {\n         bannerContentVariants.push({\n            titleText: t('marketing.capture.titleText').replace('{{mediaType}}', IsVideo ? t('marketing.mediaType.video') : t('marketing.mediaType.image')),\n            bodyText: null,\n            CTAButtonText: t('marketing.capture.CTAButtonText'),\n            CTALink: Constants.navigation.banners.workPlaceComms\n         });\n         bannerContentVariants.push({\n            titleText: t('marketing.capture.titleText').replace('{{mediaType}}', IsVideo ? t('marketing.mediaType.video') : t('marketing.mediaType.image')),\n            bodyText: null,\n            CTAButtonText: t('marketing.capture.CTAButtonText'),\n            CTALink: IsVideo ? Constants.navigation.banners.screenRecorder : Constants.navigation.banners.screenCapture\n         });\n      } else if (isCamtasiaBanner) {\n         bannerContentVariants.push({\n            titleText: t('marketing.camtasia.titleText'),\n            bodyText: null,\n            CTAButtonText: t('marketing.camtasia.CTAButtonText'),\n            CTALink: Constants.navigation.banners.camtasiaProduct\n         });\n         bannerContentVariants.push({\n            titleText: t('marketing.camtasia.titleText'),\n            bodyText: null,\n            CTAButtonText: t('marketing.camtasia.CTAButtonText'),\n            CTALink: Constants.navigation.banners.camtasiaRev\n         });\n         bannerContentVariants.push({\n            titleText: t('marketing.camtasia.titleText'),\n            bodyText: null,\n            CTAButtonText: t('marketing.camtasia.CTAButtonText'),\n            CTALink: Constants.navigation.banners.camtasiaBestVideoEditing\n         });\n      } else if (isCamtasiaWebBanner) {\n         bannerContentVariants.push({\n            titleText: t('marketing.camtasiaweb.titleText'),\n            bodyText: null,\n            CTAButtonText: t('marketing.camtasiaweb.CTAButtonText'),\n            CTALink: Constants.navigation.banners.camtasiaWeb\n         });\n         bannerContentVariants.push({\n            titleText: t('marketing.camtasiaweb2.titleText'),\n            bodyText: null,\n            CTAButtonText: t('marketing.camtasiaweb2.CTAButtonText'),\n            CTALink: Constants.navigation.banners.camtasiaWeb\n         });\n      }\n      return bannerContentVariants;\n   };\n\n   useEffect(() => {\n      const bannerContentVariants = getBannerContentVariants();\n      const variantIndex = Math.floor(Math.random() * bannerContentVariants.length);\n      setBannerContent(bannerContentVariants[variantIndex]);\n      setBannerVariantIndex(variantIndex);\n      recordGABannerDisplayedEvent(variantIndex);\n   }, []);\n\n   const recordGABannerButtonClickedEvent = () => {\n      const eventName = isSnagitBanner ? Constants.analytics.SnagitBannerButtonClicked : isCamtasiaBanner ? Constants.analytics.CamtasiaBannerButtonClicked : isCamtasiaWebBanner ? Constants.analytics.CamtasiaWebBannerButtonClicked : isCaptureBanner ? Constants.analytics.CaptureBannerButtonClicked : isWebUploadBanner ? Constants.analytics.WebUploadBannerButtonClicked : null;\n      /* eslint-disable camelcase */\n      const ga4Event: IUaEventOptions = {\n         eventName: eventName,\n         eventParams: {\n            banner_variant: `${bannerVariantIndex + 1}`,\n            media_hash: Hash\n         } as IUAEventParams\n      };\n      /* eslint-enable */\n\n      Analytics.gaEvent(ga4Event);\n   };\n\n   const recordGABannerDisplayedEvent = (bannerTypeNum: number) => {\n      const eventName = isSnagitBanner ? Constants.analytics.SnagitBannerDisplayed : isCamtasiaBanner ? Constants.analytics.CamtasiaBannerDisplayed : isCamtasiaWebBanner ? Constants.analytics.CamtasiaWebBannerDisplayed : isCaptureBanner ? Constants.analytics.CaptureBannerDisplayed : isWebUploadBanner ? Constants.analytics.WebUploadBannerDisplayed : null;\n      /* eslint-disable camelcase */\n      const ga4Event: IUaEventOptions = {\n         eventName: eventName,\n         eventParams: {\n            banner_variant: `${bannerTypeNum + 1}`,\n            media_hash: Hash\n         } as IUAEventParams\n      };\n      /* eslint-enable */\n\n      Analytics.gaEvent(ga4Event);\n   };\n\n   const addUtmToLink = (link: string): string => {\n      const variantLetter: string = bannerVariantIndex < variantLetters.length ? variantLetters[bannerVariantIndex] : variantLetters[0];\n      const productId: string = isCamtasiaBanner ? Constants.navigation.banners.utmProductIdentifier.camtasia : isCamtasiaWebBanner ? Constants.navigation.banners.utmProductIdentifier.camtasiaweb : isSnagitBanner ? Constants.navigation.banners.utmProductIdentifier.snagit : isCaptureBanner ? Constants.navigation.banners.utmProductIdentifier.capture : Constants.navigation.banners.utmProductIdentifier.web;\n      const mediaType: string = IsVideo ? 'video' : 'image';\n      const utm = `?utm_source=product&utm_medium=screencastmod&utm_campaign=screencastbanners&utm_content=${productId}-${mediaType}&utm_term=variant-${variantLetter}`;\n      return `${link}${utm}`;\n   };\n\n   const navigateToMarketingPage = (ctaLink: string) => {\n      recordGABannerButtonClickedEvent();\n      window.open(ctaLink, '_blank');\n   };\n\n   setupCSSHeightObserver(marketingPaneRef, cssConstants.variables.marketingBannerHeight);\n\n   return (\n      <MarketingPane\n         theme={theme}\n         ref={marketingPaneRef}\n         camtasiaBanner={isCamtasiaBanner || isCamtasiaWebBanner}\n         data-test-id=\"marketing-pane\"\n      >\n         <MarketingContainer>\n            {getMarketingLogo(theme)}\n            <TextContainer>\n               {bannerContent?.titleText && (\n                  <TitleText>\n                     <span>\n                        {bannerContent.titleText}\n                     </span>\n                  </TitleText>\n               )\n               }\n               {bannerContent?.bodyText &&\n                  (\n                     <DetailText captureBanner={isCaptureBanner}>\n                        <span>\n                           {bannerContent.bodyText}\n                        </span>\n                     </DetailText>\n                  )\n               }\n            </TextContainer>\n         </MarketingContainer>\n         {bannerContent?.CTAButtonText && (\n            <ButtonContainer camtasiaBanner={isCamtasiaBanner || isCamtasiaWebBanner}>\n               <ControlButton\n                  className=\"bannerCtaButton\"\n                  themeName={theme}\n                  buttonType={TscButtonType.primary}\n                  testId=\"marketing-call-to-action\"\n                  label={bannerContent.CTAButtonText}\n                  onClick={() => navigateToMarketingPage(addUtmToLink(bannerContent.CTALink))}\n               />\n            </ButtonContainer>\n         )}\n      </MarketingPane>\n   );\n};\n\nexport interface IStateMappedProps {\n   Hash: string;\n   IsVideo: boolean;\n}\n\nconst mapStatesToProps = (\n   // eslint-disable-next-line no-empty-pattern\n   {},\n   {Hash, IsVideo}: Partial<IStateMappedProps>\n): IStateMappedProps => ({Hash, IsVideo});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore)(MarketingPaneBase);\n","import React, {useState} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {ControlButton, TscButtonType, InlineLabeledRadio} from '@techsmith/tsc-cloud-style-guide';\nimport cssConstants from '../../constants/cssConstants';\nimport '../../static/css/modal.less';\nimport transcriptionApi from '../../service/transcriptionApi';\nimport {SetupWorkerState} from '../../model/workerState';\nimport {StyledWarning, MinWidthButtonWrapper} from '../util/StyledElements';\nimport captionApi from '../../service/captionApi';\nimport styled from 'styled-components';\nimport config from '../../service/config';\nimport {getCaptionEditorUrl} from '../../util/UrlUtil';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {mediaStore} from '../../context/mediaProvider';\nimport {MediaPrivacy} from '../../model/mediaDetails';\nimport {BasicModalPortal} from '../util/ModalPortalHelper';\nimport {EntitlementType, IUserQuotas} from '../../model/userQuotas';\nimport {userQuotaStore} from '../../context/userQuotaProvider';\n\nconst AddCaptionTrackModalBody = styled.div`\n   font-size: 0.875rem;\n`;\n\nexport const AddCaptionTrackModalBase: React.FC<IAddCaptionTrackModalProps & IStateMappedProps> = ({refreshCaptionData, onClose, MediaId, Hash, XmpId, Privacy, QuotaEntitlementType}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const groupId = 'add-caption-radios';\n\n   const options = {\n      generate: 'generate',\n      custom: 'custom',\n      thirdParty: 'thirdParty'\n   };\n   const [selectedOption, setSelectedOption] = useState(options.generate);\n   const [primaryButtonText, setPrimaryButtonText] = useState<string>(t('general.apply'));\n   const [workerState, setWorkerState] = SetupWorkerState();\n\n   const onSelectGenerate = () => {\n      setWorkerState({isWorking: false, hasError: false});\n      setSelectedOption(options.generate);\n      setPrimaryButtonText(t('general.apply'));\n   };\n\n   const onSelectCustom = () => {\n      setWorkerState({isWorking: false, hasError: false});\n      setSelectedOption(options.custom);\n      setPrimaryButtonText(t('general.create'));\n   };\n   const onSelectThirdParty = () => {\n      setWorkerState({isWorking: false, hasError: false});\n      setSelectedOption(options.thirdParty);\n      setPrimaryButtonText(t('general.request'));\n   };\n\n   const saveXmpCaptions = async () => {\n      const captionTrack = await captionApi.getCaptionTrack(MediaId);\n      await captionApi.saveCaptionTrack(MediaId, captionTrack);\n   };\n\n   const onClickApply = async () => {\n      try {\n         setWorkerState({isWorking: true, hasError: false});\n         switch (selectedOption) {\n            case options.generate: {\n               await transcriptionApi.startAutomatedTranscription(Hash);\n               break;\n            } case options.thirdParty: {\n               await transcriptionApi.startThirdPartyTranscription(Hash);\n               break;\n            } default: {\n               XmpId && await saveXmpCaptions();\n               window.location.href = getCaptionEditorUrl(Hash);\n            }\n         }\n         setWorkerState({isWorking: false, hasError: false});\n         refreshCaptionData();\n         onClose();\n      } catch {\n         setWorkerState({isWorking: false, hasError: true});\n      }\n   };\n\n   const buttonGroup: React.JSX.Element = (\n      <div className=\"button-group\">\n         <MinWidthButtonWrapper>\n            <ControlButton\n               label={t('general.cancel')}\n               buttonType={TscButtonType.secondary}\n               themeName={theme}\n               onClick={onClose}\n               testId=\"change-assignee-cancel-button\"\n            />\n            <ControlButton\n               label={primaryButtonText}\n               buttonType={TscButtonType.primary}\n               themeName={theme}\n               onClick={onClickApply}\n               testId=\"change-assignee-apply-button\"\n            />\n         </MinWidthButtonWrapper>\n      </div>\n   );\n\n   const showAutomaticTranscription = !config.featureSwitches.DisableAutomaticTranscription && (!config.featureSwitches.IsScreencast || (config.featureSwitches.IsScreencast && QuotaEntitlementType !== EntitlementType.free));\n\n   return (\n      <BasicModalPortal\n         testId=\"add-caption-track-modal\"\n         title={t('accessibility.captions.modal.title')}\n         width={cssConstants.defaultModalWidth}\n         onClose={onClose}\n         themeName={theme}\n         isLoading={workerState.isWorking}\n      >\n         <AddCaptionTrackModalBody className=\"modal-body\">\n            <div className=\"form-body themeable-section\">\n               {workerState.hasError && (\n                  <StyledWarning>\n                     {t('accessibility.captions.modal.error')}\n                  </StyledWarning>\n               )}\n               {showAutomaticTranscription && (\n                  <InlineLabeledRadio\n                     groupId={groupId}\n                     themeName={theme}\n                     label={t('accessibility.captions.modal.generateTitle')}\n                     description={t('accessibility.captions.modal.generateMessage')}\n                     testId=\"add-caption-modal-generate\"\n                     onChange={onSelectGenerate}\n                     isSelected={selectedOption === options.generate}\n                  />\n               )}\n               <InlineLabeledRadio\n                  groupId={groupId}\n                  themeName={theme}\n                  label={t('accessibility.captions.modal.customTitle')}\n                  description={t('accessibility.captions.modal.customMessage')}\n                  testId=\"add-caption-modal-custom\"\n                  onChange={onSelectCustom}\n                  isSelected={selectedOption === options.custom}\n               />\n               {config.featureSwitches.EnableThirdPartyCaptionGeneration && (\n                  <InlineLabeledRadio\n                     groupId={groupId}\n                     themeName={theme}\n                     label={Privacy === MediaPrivacy.private ? t('accessibility.captions.modal.thirdPartyTitleWithPrivateMedia') : t('accessibility.captions.modal.thirdPartyTitle')}\n                     description={t('accessibility.captions.modal.thirdPartyMessage')}\n                     testId=\"add-caption-modal-third-party\"\n                     onChange={onSelectThirdParty}\n                     isSelected={selectedOption === options.thirdParty}\n                     disabled={Privacy === MediaPrivacy.private}\n                  />\n               )}\n               {buttonGroup}\n            </div>\n         </AddCaptionTrackModalBody>\n      </BasicModalPortal>\n   );\n};\n\nexport interface IAddCaptionTrackModalProps {\n   refreshCaptionData(): void;\n   onClose(): void;\n}\n\nexport interface IStateMappedProps {\n   MediaId: string;\n   Hash: string;\n   XmpId: string;\n   Privacy: MediaPrivacy;\n   QuotaEntitlementType: EntitlementType;\n}\n\nconst mapStatesToProps = (\n   {refreshCaptionData, onClose}: IAddCaptionTrackModalProps,\n   {MediaId, Hash, XmpId, Privacy}: Partial<IStateMappedProps>,\n   {QuotaEntitlementType}: Partial<IUserQuotas>\n): IStateMappedProps & IAddCaptionTrackModalProps => ({refreshCaptionData, onClose, MediaId, Hash, XmpId, Privacy, QuotaEntitlementType});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore, userQuotaStore)(AddCaptionTrackModalBase);\n","import React from 'react';\nimport {useTranslation, Trans} from 'react-i18next';\nimport styled from 'styled-components';\nimport {ControlButton, TscButtonType, Glyphs, TscStyles} from '@techsmith/tsc-cloud-style-guide';\nimport cssConstants from '../../constants/cssConstants';\nimport logging from '../../service/logging';\nimport {StyledWarning} from '../util/StyledElements';\nimport '../../static/css/modal.less';\nimport conversationApi from '../../service/conversationApi';\nimport {IWorkerState} from '../../model/workerState';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {conversationsStore, updateConversationsState} from '../../context/conversationsProvider';\nimport {IConversationData} from '../../model/conversationModel';\nimport {updateCommentsState} from '../../context/commentsProvider';\nimport {updateReactionsState} from '../../context/reactionsProvider';\nimport {selectedConversationStore, updateSelectedConversationState} from '../../context/selectedConversationProvider';\nimport {useQueryParam, StringParam} from 'use-query-params';\nimport Constants from '../../constants/Constants';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {mediaStore} from '../../context/mediaProvider';\nimport {BasicModalPortal} from '../util/ModalPortalHelper';\nimport config from '../../service/config';\n\nconst BoldText = styled.span`\n   font-weight: ${TscStyles.font.weight.semibold};\n   padding: 0 0.25rem;\n   display: inline-flex;\n`;\n\nconst FooterButtonsWrapper = styled.div`\n   display: flex;\n   margin-top: 1.5rem;\n\n   .button-group {\n      margin-left: auto;\n   }\n`;\n\nconst DownloadButtonWrapper = styled.div`\n   @media screen and (max-width: ${cssConstants.contentBreakpoint}px) {\n      > button > span:last-of-type {\n         display: none;\n      }\n   }\n`;\n\nexport const ClearConversationModalBase: React.FC<IClearConversationModalProps & IStateMappedProps> = ({conversationHash, isDeleting, conversations, VideoReviewId, onClose, Hash}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [conversationParam] = useQueryParam(Constants.queryParams.conversation, StringParam);\n   const [state, setState] = React.useState({resetConfirmed: false, isWorking: false, hasError: false} as IClearConversationModalState);\n\n   const onDownloadDataClick = async () => {\n      setState({...state, isWorking: true, hasError: false});\n\n      try {\n         await conversationApi.downloadSingleConversationData(Hash, conversationHash);\n         setState({...state, isWorking: false, hasError: false});\n      } catch (e) {\n         logging.error(e);\n         setState({...state, isWorking: false, hasError: true});\n      }\n   };\n\n   const clearComments = async () => {\n      const newConversation = await conversationApi.deleteConversationComments(Hash, conversationHash);\n      const conversationsCopy = Object.assign([], conversations);\n      conversationsCopy.splice(conversationsCopy.findIndex(oldConversation => oldConversation.ConversationHash === conversationHash), 1, newConversation);\n      updateConversationsState({conversations: conversationsCopy});\n      VideoReviewId === newConversation.VideoReviewId && updateCommentsState({comments: []});\n   };\n\n   const deleteConversation = async () => {\n      await conversationApi.deleteConversation(Hash, conversationHash);\n      const conversationsCopy = Object.assign([], conversations);\n      const deletedConversation: IConversationData[] = conversationsCopy.splice(conversationsCopy.findIndex(oldConversation => oldConversation.ConversationHash === conversationHash), 1);\n      updateConversationsState({conversations: conversationsCopy});\n      conversationParam === deletedConversation[0].VideoReviewId && updateSelectedConversationState({VideoReviewId: '', Title: null, SelectedComment: null, ConversationHash: null});\n\n      if (config.featureSwitches.EnableReactions) {\n         updateReactionsState({reactions: []});\n      }\n   };\n\n   const onPrimaryButtonClick = async () => {\n      setState(Object.assign({}, state, {isWorking: true, hasError: false}));\n\n      try {\n         if (isDeleting) {\n            await deleteConversation();\n         } else {\n            await clearComments();\n         }\n         onClose();\n      } catch (e) {\n         logging.error(e);\n         setState(Object.assign({}, state, {isWorking: false, hasError: true}));\n      }\n   };\n\n   const downloadDataButton: React.JSX.Element = (\n      <DownloadButtonWrapper>\n         <ControlButton\n            label={t('resetData.downloadData')}\n            buttonType={TscButtonType.tertiary}\n            glyph={<Glyphs.Download16x16 />}\n            disabled={false}\n            themeName={theme}\n            onClick={onDownloadDataClick}\n            testId=\"clear-conversation-modal-download-button\"\n         />\n      </DownloadButtonWrapper>\n   );\n\n   const buttonGroup: React.JSX.Element = (\n      <div className=\"button-group\">\n         <ControlButton\n            label={t('general.cancel')}\n            buttonType={TscButtonType.secondary}\n            disabled={false}\n            themeName={theme}\n            width=\"5.5rem\"\n            onClick={onClose}\n            testId=\"clear-conversation-modal-cancel-button\"\n         />\n         <ControlButton\n            label={isDeleting ? t('conversations.modal.delete') : t('conversations.modal.clear')}\n            buttonType={TscButtonType.destructive}\n            disabled={state.isWorking}\n            themeName={theme}\n            width=\"5.5rem\"\n            onClick={onPrimaryButtonClick}\n            testId=\"clear-conversation-modal-primary-button\"\n         />\n      </div>\n   );\n\n   return (\n      <BasicModalPortal\n         testId=\"clear-conversation-modal\"\n         visible={true}\n         title={t(isDeleting ? 'conversations.modal.deleteConversationTitle' : 'conversations.modal.clearCommentsTitle')}\n         width={cssConstants.defaultModalWidth}\n         onClose={onClose}\n         themeName={theme}\n         isLoading={state.isWorking}\n      >\n         <div className=\"modal-body\">\n            <div className=\"form-body themeable-section\">\n               {state.hasError && (\n                  <StyledWarning>\n                     {t('general.errorText')}\n                  </StyledWarning>\n               )}\n               <Trans i18nKey={isDeleting ? config.featureSwitches.EnableReactions ? 'conversations.modal.deleteConversationWithReactionsWarning' : 'conversations.modal.deleteConversationWarning' : 'conversations.modal.clearConversationWarning'}>\n                  All\n                  {' '}\n                  <BoldText>\n                     comments\n                  </BoldText>\n                  {' '}\n                  will be removed. If you want a local backup, download the media data before resetting.\n               </Trans>\n               <FooterButtonsWrapper>\n                  {downloadDataButton}\n                  {buttonGroup}\n               </FooterButtonsWrapper>\n            </div>\n         </div>\n      </BasicModalPortal>\n   );\n};\n\nexport interface IClearConversationModalProps {\n   conversationHash: string;\n   isDeleting: boolean;\n   onClose(): void;\n}\n\nexport interface IStateMappedProps {\n   conversations: IConversationData[];\n   VideoReviewId: string;\n   Hash: string;\n}\n\nexport interface IClearConversationModalState extends IWorkerState {\n   resetConfirmed: boolean;\n}\n\nconst mapStatesToProps = (\n   {conversationHash, isDeleting, onClose}: IClearConversationModalProps,\n   {conversations}: Partial<IStateMappedProps>,\n   {VideoReviewId}: Partial<IStateMappedProps>,\n   {Hash}: Partial<IStateMappedProps>\n): IClearConversationModalProps & IStateMappedProps => ({conversationHash, isDeleting, onClose, conversations, VideoReviewId, Hash});\n\nexport default withMemoizedContexts(mapStatesToProps, conversationsStore, selectedConversationStore, mediaStore)(ClearConversationModalBase);\n","import React, {useState} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {ControlButton, TscButtonType, TextInput} from '@techsmith/tsc-cloud-style-guide';\nimport conversationApi from '../../service/conversationApi';\nimport {StyledWarning, MinWidthButtonWrapper} from '../util/StyledElements';\nimport '../../static/css/modal.less';\nimport config from '../../service/config';\nimport cssConstants from '../../constants/cssConstants';\nimport {IConversationData} from '../../model/conversationModel';\nimport {IWorkerState} from '../../model/workerState';\nimport {conversationsStore, updateConversationsState} from '../../context/conversationsProvider';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {updateSelectedConversationState} from '../../context/selectedConversationProvider';\nimport {IFieldData} from '../../model/fieldData';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {mediaStore} from '../../context/mediaProvider';\nimport {BasicModalPortal} from '../util/ModalPortalHelper';\n\nexport const CreateConversationModalBase: React.FC<IStateMappedProps & ICreateConversationModalProps> = ({conversations, conversation, onClose, Hash}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [setCreateConversationState, updateCreateConversationState] = useState({isWorking: false, hasError: false} as IWorkerState);\n   const [conversationTitle, setConversationTitle] = useState<IFieldData>({value: (conversation && conversation.Title) || '', errorText: ''});\n\n   const renameConversation = async () => {\n      const newConversation = await conversationApi.renameConversation(Hash, conversation.ConversationHash, conversationTitle.value);\n      const conversationsCopy = Object.assign([], conversations);\n      conversationsCopy.splice(conversationsCopy.findIndex(oldConversation => oldConversation.ConversationHash === conversation.ConversationHash), 1, newConversation);\n      updateConversationsState({conversations: conversationsCopy});\n   };\n\n   const createConversation = async () => {\n      const newConversation = await conversationApi.createConversation(Hash, conversationTitle.value);\n      conversations.push(newConversation);\n      updateConversationsState({conversations: conversations});\n      updateSelectedConversationState({Title: newConversation.Title, VideoReviewId: newConversation.VideoReviewId, ConversationHash: newConversation.ConversationHash, SelectedComment: null});\n   };\n\n   const updateTitle = (evt: React.ChangeEvent<HTMLInputElement>): void => {\n      const newTitle = evt.target.value;\n      const isEmpty = !newTitle.trim();\n      const isTooLong = newTitle.length > config.watchConfig?.maxConversationTitleLength;\n\n      setConversationTitle({\n         ...conversationTitle,\n         value: newTitle,\n         errorText: isEmpty\n            ? t('details.title.requiredError')\n            : isTooLong\n               ? t('details.title.maxLengthError', {0: config.watchConfig?.maxConversationTitleLength})\n               : ''\n      });\n   };\n\n   const conversationTitleNotChanged = conversation && conversation.Title === conversationTitle.value;\n   const canSubmitTitle = !(conversationTitleNotChanged || setCreateConversationState.isWorking || conversationTitle.value.length === 0 || conversationTitle.errorText.length !== 0);\n\n   const onPrimaryButtonClick = async () => {\n      if (canSubmitTitle) {\n         try {\n            updateCreateConversationState({...setCreateConversationState, isWorking: true, hasError: false});\n            if (conversation) {\n               await renameConversation();\n            } else {\n               await createConversation();\n            }\n            onClose();\n         } catch {\n            updateCreateConversationState({...setCreateConversationState, isWorking: false, hasError: true});\n         }\n      }\n   };\n\n   const modalTitle = conversation ? t('conversations.renameConversationTitle') : t('conversations.addConversationTitle');\n\n   return (\n      <BasicModalPortal\n         visible={true}\n         title={modalTitle}\n         width={cssConstants.defaultModalWidth}\n         onClose={setCreateConversationState.isWorking ? (): void => null : onClose}\n         themeName={theme}\n         isLoading={setCreateConversationState.isWorking}\n      >\n         <div\n            className=\"modal-body\"\n            data-test-id=\"create-conversation-modal\"\n         >\n            <div className=\"form-body themeable-section\">\n               <div className=\"form-field-group\">\n                  {setCreateConversationState.hasError && (\n                     <StyledWarning>\n                        {t('general.errorText')}\n                     </StyledWarning>\n                  )}\n                  <label>\n                     {t('conversations.inputLabel')}\n                     <TextInput\n                        placeholder={t('details.title.placeholder', {0: config.watchConfig?.maxConversationTitleLength})}\n                        value={conversationTitle.value}\n                        errorText={conversationTitle.errorText}\n                        onChange={updateTitle}\n                        onEnter={onPrimaryButtonClick}\n                        themeName={theme}\n                        ariaLabel=\"Conversation Title\"\n                        readOnly={false}\n                        testId=\"conversation-title-input\"\n                        disabled={setCreateConversationState.isWorking}\n                     />\n                  </label>\n               </div>\n               {!setCreateConversationState.isWorking && (\n                  <div className=\"button-group\">\n                     <MinWidthButtonWrapper>\n                        <ControlButton\n                           label={t('general.cancel')}\n                           buttonType={TscButtonType.secondary}\n                           disabled={setCreateConversationState.isWorking}\n                           themeName={theme}\n                           onClick={onClose}\n                           testId=\"cancel-button\"\n                        />\n                        <ControlButton\n                           label={conversation ? t('general.save') : t('conversations.actions.add')}\n                           buttonType={TscButtonType.primary}\n                           disabled={!canSubmitTitle}\n                           themeName={theme}\n                           onClick={onPrimaryButtonClick}\n                           testId=\"create-conversation-button\"\n                        />\n                     </MinWidthButtonWrapper>\n                  </div>\n               )}\n            </div>\n         </div>\n      </BasicModalPortal>\n   );\n};\n\nexport interface IStateMappedProps {\n   conversations: IConversationData[];\n   Hash: string;\n}\n\nexport interface ICreateConversationModalProps {\n   conversation?: IConversationData;\n   onClose(): void;\n}\n\nconst mapStatesToProps = (\n   {conversation, onClose}: ICreateConversationModalProps,\n   {conversations}: Partial<IStateMappedProps>,\n   {Hash}: Partial<IStateMappedProps>\n): ICreateConversationModalProps & IStateMappedProps => ({conversations, conversation, onClose, Hash});\n\nexport default withMemoizedContexts(mapStatesToProps, conversationsStore, mediaStore)(CreateConversationModalBase);\n","import React from 'react';\nimport styled from 'styled-components';\nimport {useTranslation} from 'react-i18next';\nimport {ControlButton, TscButtonType} from '@techsmith/tsc-cloud-style-guide';\nimport LocalMediaImporter from './LocalMediaImporter';\nimport uploadApi from '../../../service/uploadApi';\nimport {MinWidthButtonWrapper} from '../../util/StyledElements';\nimport UploadProgressModal from './UploadProgressModal';\nimport Axios, {AxiosProgressEvent, CancelTokenSource} from 'axios';\nimport {UpsertQueryParamInUrl} from '../../util/QueryParamsHelper';\nimport Constants from '../../../constants/Constants';\nimport tabNames from '../../../constants/tabNames';\nimport '../../../static/css/modal.less';\nimport cssConstants from '../../../constants/cssConstants';\nimport WarningWithFaqLink from '../../util/WarningWithFaqLink';\nimport {IFileUploadCandidate} from '../../../model/fileUploadCandidate';\nimport withMemoizedContexts from '../../../context/contextContainerHoC';\nimport {useTscTheme} from '../../../context/themeProvider';\nimport {invalidateMediaCache, mediaStore} from '../../../context/mediaProvider';\nimport {updateMediaOperationsState} from '../../../context/mediaOperationsProvider';\nimport {AlertModalPortal, BasicModalPortal} from '../../util/ModalPortalHelper';\nimport config from '../../../service/config';\n\nconst MediaPreviewWrapper = styled.div`\n   display: flex;\n   object-fit: contain;\n   justify-content: center;\n   max-height: 30rem;\n   max-width: 30rem;\n   margin-bottom: 1rem;\n`;\n\nexport const VideoPreview = styled.video`\n   max-height: ${cssConstants.defaultModalWidth};\n   max-width: ${cssConstants.defaultModalWidth};\n   height: 100%;\n   width: 100%;\n`;\n\nexport const ImagePreview = styled.img`\n   max-height: ${cssConstants.defaultModalWidth};\n   max-width: ${cssConstants.defaultModalWidth};\n   height: 100%;\n   width: 100%;\n`;\n\nconst ButtonGroup = styled.div`\n   margin-top: 1rem;\n`;\n\nexport const ReplaceMediaModalBase: React.FC<IReplaceMediaModalProps & IStateMappedProps> = ({onClose, Hash}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [state, setState] = React.useState({\n      cancelTokenSource: null,\n      errorText: '',\n      file: null,\n      fileSelected: false,\n      fileUploading: false,\n      showConfirmationModal: false,\n      showFileSelectionModal: true,\n      showUploadProgressModal: false,\n      uploadProgress: 0\n   } as IReplaceMediaModalState);\n\n   const updateState = (updatedValues: Partial<IReplaceMediaModalState>): void => {\n      setState(prevState => Object.assign({}, prevState, updatedValues));\n   };\n\n   const onUploadProgress = (progressEvent: AxiosProgressEvent): void => {\n      const near100Percent = 95;\n      const percentCompleted = Math.min(Math.round((progressEvent.loaded * 100) / progressEvent.total), near100Percent);\n      updateState({uploadProgress: percentCompleted});\n   };\n\n   const isVideo = (file: File): boolean => file.type.includes('video');\n\n   const onFileSelect = (uploadCandidate: IFileUploadCandidate) => {\n      updateState({fileSelected: true, file: uploadCandidate.file});\n   };\n\n   const confirmReplaceMediaClick = (): void => {\n      updateState({showConfirmationModal: true});\n   };\n\n   const replaceMedia = async (): Promise<void> => {\n      try {\n         updateMediaOperationsState({IsReplacingMedia: true});\n         const cancelTokenSource = Axios.CancelToken.source();\n         updateState({cancelTokenSource: cancelTokenSource});\n         await uploadApi.replaceMedia(Hash, state.file, onUploadProgress, cancelTokenSource);\n         updateState({uploadProgress: 100, fileUploading: false});\n         await invalidateMediaCache(Hash);\n         window.location.assign(UpsertQueryParamInUrl(window.location.href, Constants.queryParams.tab, tabNames.details));\n         updateMediaOperationsState({IsReplacingMedia: false});\n      } catch (e) {\n         let errorText = '';\n         if (!Axios.isCancel(e)) {\n            if (e.status === Constants.statusCodes.unsupportedMediaType) {\n               errorText = t('uploadMedia.fileTypeWarningVideo');\n            } else {\n               errorText = t('general.errorText');\n            }\n         }\n         updateState({showConfirmationModal: false, fileUploading: false, uploadProgress: 0, errorText: errorText, showUploadProgressModal: false, showFileSelectionModal: true});\n         updateMediaOperationsState({IsReplacingMedia: false});\n      }\n   };\n\n   const replaceMediaClick = async (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n      e.stopPropagation();\n      updateState({showConfirmationModal: false, showUploadProgressModal: true, showFileSelectionModal: false, fileUploading: true});\n      await replaceMedia();\n   };\n\n   const onCancelClick = (): void => {\n      if (state.file && state.fileSelected) {\n         updateState({file: null, fileSelected: false, errorText: ''});\n      } else {\n         onClose();\n      }\n   };\n\n   const onFileSelectionModalClose = (): void => {\n      updateState({showFileSelectionModal: false, showUploadProgressModal: state.fileUploading});\n      !state.fileUploading && onClose();\n   };\n\n   const onConfirmationModalClose = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>): void => {\n      e.stopPropagation();\n      updateState({showConfirmationModal: false});\n   };\n\n   const onUploadProgressModalClose = (): void => {\n      if (!state.fileUploading && state.uploadProgress === 100) {\n         onClose();\n      } else {\n         updateState({showUploadProgressModal: false, showFileSelectionModal: true});\n      }\n   };\n\n   const handleUploadCancelRequest = (): void => {\n      state.cancelTokenSource?.cancel();\n   };\n\n   const getWarningWithFaqLinkUrl = (): string => {\n      if (config.featureSwitches.IsScreencast) {\n         return Constants.navigation.screencastFAQLink;\n      }\n      return Constants.navigation.knowmiaFAQLink;\n   };\n\n   const buttonGroup: React.JSX.Element = (\n      <ButtonGroup className=\"button-group\">\n         <MinWidthButtonWrapper>\n            <ControlButton\n               label={state.fileSelected ? t('general.back') : t('general.cancel')}\n               buttonType={TscButtonType.secondary}\n               disabled={false}\n               themeName={theme}\n               onClick={onCancelClick}\n               testId=\"replace-media-modal-cancel-button\"\n            />\n         </MinWidthButtonWrapper>\n         {state.fileSelected && (\n            <ControlButton\n               label={t('replaceMedia.action')}\n               buttonType={TscButtonType.primary}\n               disabled={!state.fileSelected}\n               themeName={theme}\n               onClick={confirmReplaceMediaClick}\n               testId=\"replace-media-modal-replace-media-button\"\n            />\n         )}\n      </ButtonGroup>\n   );\n\n   const mediaPreview: React.JSX.Element = state.file && (\n      <MediaPreviewWrapper>\n         {isVideo(state.file) ? (\n            <VideoPreview\n               data-test-id=\"replace-media-video-preview\"\n               src={URL.createObjectURL(state.file)}\n               controls={true}\n               autoPlay={false}\n            />\n         )\n            : (\n               <ImagePreview\n                  data-test-id=\"replace-media-image-preview\"\n                  src={URL.createObjectURL(state.file)}\n               />\n            )}\n      </MediaPreviewWrapper>\n   );\n\n   const fileSelectModal: React.JSX.Element = (\n      <BasicModalPortal\n         visible={true}\n         title={t('uploadMedia.action')}\n         onClose={onFileSelectionModalClose}\n         themeName={theme}\n         testId=\"replace-media-modal\"\n      >\n         <div className=\"modal-body\">\n            <div className=\"form-body themeable-section\">\n               {state.errorText && (\n                  <WarningWithFaqLink linkUrl={getWarningWithFaqLinkUrl()}>\n                     {state.errorText}\n                  </WarningWithFaqLink>\n               )}\n               {!state.fileSelected && (\n                  <LocalMediaImporter\n                     onFileSelect={onFileSelect}\n                     allowMultiple={false}\n                     ignoreQuotaLimits={true}\n                  />\n               )}\n               {(state.fileSelected && !state.fileUploading) && mediaPreview}\n               {buttonGroup}\n            </div>\n         </div>\n      </BasicModalPortal>\n   );\n\n   const replaceConfirmationAlertModal: React.JSX.Element = (\n      <AlertModalPortal\n         title={t('replaceMedia.action')}\n         onClose={(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => onConfirmationModalClose(e)}\n         onConfirm={(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => replaceMediaClick(e)}\n         confirmButtonType={TscButtonType.destructive}\n         confirmContent={t('replaceMedia.button')}\n         onDismiss={(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => onConfirmationModalClose(e)}\n         dismissButtonType={TscButtonType.secondary}\n         dismissContent={t('general.cancel')}\n      >\n         {config.featureSwitches.IsScreencast ? t('replaceMedia.confirmationScreencast') : t('replaceMedia.confirmation')}\n      </AlertModalPortal>\n   );\n\n   return (\n      <>\n         {state.showFileSelectionModal && fileSelectModal}\n         {state.showConfirmationModal && replaceConfirmationAlertModal}\n         {state.showUploadProgressModal && (\n            <UploadProgressModal\n               uploadProgress={state.uploadProgress}\n               cancelUpload={handleUploadCancelRequest}\n               onClose={onUploadProgressModalClose}\n            />\n         )}\n      </>\n   );\n};\n\nexport interface IReplaceMediaModalProps {\n   onClose(): void;\n}\n\nexport interface IReplaceMediaModalState {\n   cancelTokenSource: CancelTokenSource;\n   errorText: string;\n   file: File;\n   fileSelected: boolean;\n   fileUploading: boolean;\n   showConfirmationModal: boolean;\n   showFileSelectionModal: boolean;\n   showUploadProgressModal: boolean;\n   uploadProgress: number;\n}\n\nexport interface IStateMappedProps {\n   Hash: string;\n}\n\nconst mapStatesToProps = (\n   {onClose}: IReplaceMediaModalProps,\n   {Hash}: Partial<IStateMappedProps>\n): IStateMappedProps & IReplaceMediaModalProps => ({onClose, Hash});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore)(ReplaceMediaModalBase);\n","import React from 'react';\nimport styled from 'styled-components';\nimport {useTranslation} from 'react-i18next';\nimport {ControlButton, TscButtonType} from '@techsmith/tsc-cloud-style-guide';\nimport LocalMediaImporter from './LocalMediaImporter';\nimport UploadProgressModal from './UploadProgressModal';\nimport Axios, {AxiosProgressEvent, CancelTokenSource} from 'axios';\nimport '../../../static/css/modal.less';\nimport cssConstants from '../../../constants/cssConstants';\nimport audioDescriptionApi from '../../../service/audioDescriptionApi';\nimport WarningWithFaqLink from '../../util/WarningWithFaqLink';\nimport {IFileUploadCandidate} from '../../../model/fileUploadCandidate';\nimport withMemoizedContexts from '../../../context/contextContainerHoC';\nimport {useTscTheme} from '../../../context/themeProvider';\nimport {mediaStore} from '../../../context/mediaProvider';\nimport {AlertModalPortal, BasicModalPortal} from '../../util/ModalPortalHelper';\nimport config from '../../../service/config';\nimport Constants from '../../../constants/Constants';\n\nconst MediaPreviewWrapper = styled.div`\n   display: flex;\n   object-fit: contain;\n   justify-content: center;\n   flex-direction: column;\n   max-height: 30rem;\n   max-width: 30rem;\n   margin-bottom: 1rem;\n   padding: 1rem;\n`;\n\nexport const AudioPreview = styled.audio`\n   max-height: ${cssConstants.defaultModalWidth};\n   max-width: ${cssConstants.defaultModalWidth};\n   height: 2.5rem;\n   width: 100%;\n   margin-bottom: 1rem;\n`;\n\nconst ButtonGroup = styled.div`\n   margin-top: 1rem;\n`;\n\nexport const UploadAudioDescriptionModalBase: React.FC<IUploadAudioDescriptionModalProps & IStateMappedProps> = ({isReplacing, onClose, Hash}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [state, setState] = React.useState({\n      cancelTokenSource: null,\n      errorText: '',\n      file: null,\n      fileSelected: false,\n      fileUploading: false,\n      showConfirmationModal: false,\n      showFileSelectionModal: true,\n      showUploadProgressModal: false,\n      uploadProgress: 0\n   } as IUploadAudioDescriptionModalState);\n\n   const updateState = (updatedValues: Partial<IUploadAudioDescriptionModalState>): void => {\n      setState(prevState => Object.assign({}, prevState, updatedValues));\n   };\n\n   const onUploadProgress = (progressEvent: AxiosProgressEvent): void => {\n      const near100Percent = 95;\n      const percentCompleted = Math.min(Math.round((progressEvent.loaded * 100) / progressEvent.total), near100Percent);\n      updateState({uploadProgress: percentCompleted});\n   };\n\n   const onFileSelect = (uploadCandidate: IFileUploadCandidate) => {\n      updateState({fileSelected: true, file: uploadCandidate.file});\n   };\n\n   const confirmReplaceMediaClick = (): void => {\n      updateState({showConfirmationModal: true});\n   };\n\n   const replaceMedia = async (): Promise<void> => {\n      try {\n         const cancelTokenSource = Axios.CancelToken.source();\n         updateState({cancelTokenSource: cancelTokenSource});\n         await audioDescriptionApi.uploadAudioDescription(Hash, state.file, onUploadProgress, cancelTokenSource);\n         updateState({uploadProgress: 100, fileUploading: false});\n         window.location.reload();\n      } catch (e) {\n         updateState({showConfirmationModal: false, fileUploading: false, uploadProgress: 0, errorText: Axios.isCancel(e) ? '' : t('accessibility.audioDescription.modal.error'), showUploadProgressModal: false, showFileSelectionModal: true});\n      }\n   };\n\n   const replaceMediaClick = async (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n      e.stopPropagation();\n      updateState({showConfirmationModal: false, showUploadProgressModal: true, showFileSelectionModal: false, fileUploading: true});\n      await replaceMedia();\n   };\n\n   const onCancelClick = (): void => {\n      if (state.file && state.fileSelected) {\n         updateState({file: null, fileSelected: false, errorText: ''});\n      } else {\n         onClose();\n      }\n   };\n\n   const onFileSelectionModalClose = (): void => {\n      updateState({showFileSelectionModal: false, showUploadProgressModal: state.fileUploading});\n      !state.fileUploading && onClose();\n   };\n\n   const onConfirmationModalClose = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>): void => {\n      e.stopPropagation();\n      updateState({showConfirmationModal: false});\n   };\n\n   const onUploadProgressModalClose = (): void => {\n      if (!state.fileUploading && state.uploadProgress === 100) {\n         onClose();\n      } else {\n         updateState({showUploadProgressModal: false, showFileSelectionModal: true});\n      }\n   };\n\n   const handleUploadCancelRequest = (): void => {\n      state.cancelTokenSource?.cancel();\n   };\n\n   const getWarningWithFaqLinkUrl = (): string => {\n      if (config.featureSwitches.IsScreencast) {\n         return Constants.navigation.screencastFAQLink;\n      }\n      return Constants.navigation.knowmiaFAQLink;\n   };\n\n   const buttonGroup: React.JSX.Element = (\n      <ButtonGroup className=\"button-group\">\n         <ControlButton\n            label={state.fileSelected ? t('general.back') : t('general.cancel')}\n            buttonType={TscButtonType.secondary}\n            disabled={false}\n            themeName={theme}\n            width={cssConstants.defaultButtonWidth}\n            onClick={onCancelClick}\n            testId=\"replace-audio-description-modal-cancel-button\"\n         />\n         {state.fileSelected && (\n            <ControlButton\n               label={t(isReplacing ? 'accessibility.audioDescription.modal.replace' : 'accessibility.audioDescription.modal.upload')}\n               buttonType={TscButtonType.primary}\n               disabled={!state.fileSelected}\n               themeName={theme}\n               width={cssConstants.defaultButtonWidth}\n               onClick={isReplacing ? confirmReplaceMediaClick : replaceMediaClick}\n               testId=\"replace-audio-description-modal-upload-button\"\n            />\n         )}\n      </ButtonGroup>\n   );\n\n   const mediaPreview: React.JSX.Element =\n      state.file && (\n         <MediaPreviewWrapper>\n            <AudioPreview\n               src={URL.createObjectURL(state.file)}\n               controls={true}\n               autoPlay={false}\n            />\n            <span>\n               {state.file.name}\n            </span>\n         </MediaPreviewWrapper>\n      );\n\n   const fileSelectModal: React.JSX.Element = (\n      <BasicModalPortal\n         visible={true}\n         title={t('accessibility.audioDescription.modal.title')}\n         onClose={onFileSelectionModalClose}\n         themeName={theme}\n         testId=\"replace-media-modal\"\n      >\n         <div className=\"modal-body\">\n            <div className=\"form-body themeable-section\">\n               {state.errorText && (\n                  <WarningWithFaqLink linkUrl={getWarningWithFaqLinkUrl()}>\n                     <div>\n                        {state.errorText}\n                     </div>\n                  </WarningWithFaqLink>\n               )}\n               {!state.fileSelected && (\n                  <LocalMediaImporter\n                     onFileSelect={onFileSelect}\n                     isAudioUploader={true}\n                     allowMultiple={false}\n                  />\n               )}\n               {(state.fileSelected && !state.fileUploading) && mediaPreview}\n               {buttonGroup}\n            </div>\n         </div>\n      </BasicModalPortal>\n   );\n\n   const replaceConfirmationAlertModal: React.JSX.Element = (\n      <AlertModalPortal\n         title={t('accessibility.audioDescription.replaceConfirmation.title')}\n         onClose={(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => onConfirmationModalClose(e)}\n         onConfirm={(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => replaceMediaClick(e)}\n         confirmButtonType={TscButtonType.destructive}\n         confirmContent={t('general.confirm')}\n         onDismiss={(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => onConfirmationModalClose(e)}\n         dismissButtonType={TscButtonType.secondary}\n         dismissContent={t('general.cancel')}\n      >\n         {t('accessibility.audioDescription.replaceConfirmation.text')}\n      </AlertModalPortal>\n   );\n\n   return (\n      <>\n         {state.showFileSelectionModal && fileSelectModal}\n         {state.showConfirmationModal && replaceConfirmationAlertModal}\n         {state.showUploadProgressModal && (\n            <UploadProgressModal\n               uploadProgress={state.uploadProgress}\n               cancelUpload={handleUploadCancelRequest}\n               onClose={onUploadProgressModalClose}\n            />\n         )}\n      </>\n   );\n};\n\nexport interface IUploadAudioDescriptionModalProps {\n   isReplacing: boolean;\n   onClose(): void;\n}\n\ninterface IUploadAudioDescriptionModalState {\n   cancelTokenSource: CancelTokenSource;\n   errorText: string;\n   file: File;\n   fileSelected: boolean;\n   fileUploading: boolean;\n   showConfirmationModal: boolean;\n   showFileSelectionModal: boolean;\n   showUploadProgressModal: boolean;\n   uploadProgress: number;\n}\n\nexport interface IStateMappedProps {\n   Hash: string;\n}\n\nconst mapStatesToProps = (\n   {isReplacing, onClose}: IUploadAudioDescriptionModalProps,\n   {Hash}: Partial<IStateMappedProps>\n): IStateMappedProps & IUploadAudioDescriptionModalProps => ({isReplacing, onClose, Hash});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore)(UploadAudioDescriptionModalBase);\n","import React, {memo} from 'react';\nimport styled from 'styled-components';\nimport {TscStyles, TscButtonType, TscThemeName} from '@techsmith/tsc-cloud-style-guide';\nimport {useTranslation} from 'react-i18next';\nimport ProgressLoader from '../../util/ProgressLoader';\nimport '../../../static/css/modal.less';\nimport {useTscTheme} from '../../../context/themeProvider';\nimport {AlertModalPortal, BasicModalPortal} from '../../util/ModalPortalHelper';\n\nconst TextContainer = styled.span`\n   display: flex;\n   justify-content: center;\n`;\n\nexport const UploadProgressModalBase: React.FC<IUploadProgressModalProps> = ({uploadProgress, onClose, cancelUpload}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [state, setState] = React.useState({\n      errorText: '',\n      warnAboutCancel: false\n   } as IUploadProgressModalState);\n\n   const updateState = (updatedValues: Partial<IUploadProgressModalState>): void => {\n      setState(prevState => Object.assign({}, prevState, updatedValues));\n   };\n\n   const onModalCloseClick = () => {\n      showCancelWarn();\n   };\n\n   const onCancelWarnConfirm = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n      e.stopPropagation();\n      updateState({warnAboutCancel: false});\n      cancelUpload();\n      onClose();\n   };\n\n   const onCancelWarnClose = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n      e.stopPropagation();\n      updateState({warnAboutCancel: false});\n   };\n\n   const showCancelWarn = () => {\n      updateState({warnAboutCancel: true});\n   };\n\n   const progressModal: React.JSX.Element = (\n      <BasicModalPortal\n         visible={true}\n         title={t('uploadMedia.title')}\n         onClose={onModalCloseClick}\n         themeName={theme}\n         testId=\"upload-progress-modal\"\n      >\n         <div className=\"modal-body\">\n            <div className=\"form-body themeable-section\">\n               <TextContainer>\n                  {t('uploadMedia.message')}\n               </TextContainer>\n               <ProgressLoader\n                  containerStyle={{width: '90%', margin: '0.75rem auto', background: theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.lightMedium : TscStyles.color.ui.dawn.medium}}\n                  uploadProgress={uploadProgress}\n               />\n            </div>\n         </div>\n      </BasicModalPortal>\n   );\n\n   const cancelUploadAlert: React.JSX.Element = (\n      <AlertModalPortal\n         onConfirm={(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => onCancelWarnConfirm(e)}\n         confirmButtonType={TscButtonType.destructive}\n         confirmContent={t('uploadMedia.cancel.title')}\n         onDismiss={(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => onCancelWarnClose(e)}\n         dismissButtonType={TscButtonType.secondary}\n         dismissContent={t('general.back')}\n         onClose={(e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => onCancelWarnClose(e)}\n         title={t('uploadMedia.cancel.title')}\n      >\n         {t('uploadMedia.cancel.warning')}\n      </AlertModalPortal>\n   );\n\n   return (\n      <>\n         {progressModal}\n         {state.warnAboutCancel && cancelUploadAlert}\n      </>\n   );\n};\n\ninterface IUploadProgressModalState {\n   errorText: string;\n   warnAboutCancel: boolean;\n}\n\nexport interface IUploadProgressModalProps {\n   uploadProgress: number;\n   cancelUpload(): void;\n   onClose(): void;\n}\n\nexport default memo(UploadProgressModalBase);\n","import React, {useEffect, useState} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {ControlButton, TscButtonType} from '@techsmith/tsc-cloud-style-guide';\nimport mediaApi from '../../service/mediaApi';\nimport {StyledWarning, MinWidthButtonWrapper} from '../util/StyledElements';\nimport '../../static/css/modal.less';\nimport {IWorkerState} from '../../model/workerState';\nimport cssConstants from '../../constants/cssConstants';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {mediaStore} from '../../context/mediaProvider';\nimport {BasicModalPortal} from '../util/ModalPortalHelper';\nimport {importMediaInterface} from '../../hooks/dynamicImport';\n\nexport const SetThumbnailModalBase: React.FC<ISetThumbnailModalProps & IStateMappedProps> = ({onClose, Hash}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [setThumbnailState, updateSetThumbnailState] = useState({\n      isVisible: true,\n      isWorking: true,\n      hasError: false\n   } as ISetThumbnailState);\n\n   useEffect(() => {\n      const updateThumbnail = async () => {\n         const mediaInterface = await importMediaInterface();\n         try {\n            await mediaApi.updateThumbnail(Hash, mediaInterface.currentTime);\n            updateSetThumbnailState({\n               ...setThumbnailState,\n               isVisible: true,\n               isWorking: false,\n               hasError: false\n            });\n         } catch {\n            updateSetThumbnailState({\n               ...setThumbnailState,\n               isVisible: true,\n               isWorking: false,\n               hasError: true\n            });\n         }\n      };\n\n      void updateThumbnail();\n   }, []);\n\n   const onHide = () => {\n      updateSetThumbnailState({\n         ...setThumbnailState,\n         isVisible: false\n      });\n   };\n\n   const onCloseCopy = () => {\n      onClose();\n   };\n\n   const closeButton = (\n      <MinWidthButtonWrapper>\n         <ControlButton\n            label={t('general.close')}\n            buttonType={TscButtonType.primary}\n            disabled={false}\n            themeName={theme}\n            onClick={onCloseCopy}\n         />\n      </MinWidthButtonWrapper>\n   );\n   const title = setThumbnailState.isWorking ? t('setThumbnail.working') : setThumbnailState.hasError ? t('setThumbnail.failed') : t('setThumbnail.success.title');\n\n   return (\n      <BasicModalPortal\n         visible={setThumbnailState.isVisible}\n         title={title}\n         width={cssConstants.defaultModalWidth}\n         onClose={setThumbnailState.isWorking ? onHide : onCloseCopy}\n         themeName={theme}\n         isLoading={setThumbnailState.isWorking && setThumbnailState.isVisible}\n         testId=\"set-thumbnail-modal\"\n      >\n         <div className=\"modal-body\">\n            <div className=\"form-body themeable-section\">\n               <div className=\"form-field-group\">\n                  {!setThumbnailState.isWorking && !setThumbnailState.hasError && (\n                     <span>\n                        {t('setThumbnail.success.text')}\n                     </span>\n                  )}\n                  {setThumbnailState.hasError && (\n                     <StyledWarning>\n                        {t('general.errorText')}\n                     </StyledWarning>\n                  )}\n               </div>\n               {!setThumbnailState.isWorking && (\n                  <div className=\"button-group\">\n                     {closeButton}\n                  </div>\n               )}\n            </div>\n         </div>\n      </BasicModalPortal>\n   );\n};\n\nexport interface ISetThumbnailModalProps {\n   onClose(): void;\n}\n\ninterface ISetThumbnailState extends IWorkerState {\n   isVisible: boolean;\n}\n\nexport interface IStateMappedProps {\n   Hash: string;\n}\n\nconst mapStatesToProps = (\n   {onClose}: ISetThumbnailModalProps,\n   {Hash}: Partial<IStateMappedProps>\n): IStateMappedProps & ISetThumbnailModalProps => ({onClose, Hash});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore)(SetThumbnailModalBase);\n","import {ControlButton, TscButtonType} from '@techsmith/tsc-cloud-style-guide';\nimport {useTranslation} from 'react-i18next';\nimport React, {memo} from 'react';\nimport styled from 'styled-components';\nimport {MinWidthButtonWrapper} from '../util/StyledElements';\nimport {useTscTheme} from '../../context/themeProvider';\n\nconst EmptyState = styled.div`\n   height: 15rem;\n   display: flex;\n   align-items: center;\n   justify-content: center;\n   flex-direction: column;\n   span {\n     font-weight: 600;\n   }\n   button {\n      margin-top: 1rem;\n   }\n`;\n\nexport const ShareToCollectionEmptyStateBase: React.FC<IShareToCollectionEmptyStateProps> = ({onCreateCollection}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n\n   return (\n      <EmptyState>\n         <span>\n            {t('collections.none')}\n         </span>\n         <MinWidthButtonWrapper>\n            <ControlButton\n               label={t('collections.create.new')}\n               buttonType={TscButtonType.primary}\n               themeName={theme}\n               onClick={onCreateCollection}\n               testId=\"create-collection-button\"\n            />\n         </MinWidthButtonWrapper>\n      </EmptyState>\n   );\n};\n\nexport interface IShareToCollectionEmptyStateProps {\n   onCreateCollection(): void;\n}\n\nexport default memo(ShareToCollectionEmptyStateBase);\n","import React, {useEffect} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {ControlButton, TscButtonType, Glyphs} from '@techsmith/tsc-cloud-style-guide';\nimport cssConstants from '../../constants/cssConstants';\nimport {ICollectionModel} from '../../model/appModel';\nimport collectionApi from '../../service/collectionApi';\nimport {StyledWarning, MinWidthButtonWrapper} from '../util/StyledElements';\nimport ShareToCollectionEmptyState from './ShareToCollectionEmptyState';\nimport '../../static/css/modal.less';\nimport {GroupRoleTypes} from '../../constants/Constants';\nimport {IWorkerState} from '../../model/workerState';\nimport styled from 'styled-components';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {collectionsStore, updateSidebarCollections} from '../../context/collectionsProvider';\nimport {mediaStore, updateMediaStateFromServer} from '../../context/mediaProvider';\nimport {AlertModalPortal, BasicModalPortal} from '../util/ModalPortalHelper';\n\nconst ModalSectionLabel = styled.h2`\n   font-size: .875rem;\n   font-weight: 600;\n   margin: 0;\n`;\n\nexport const ShareToCollectionModalBase: React.FC<IShareToCollectionModalProps & IStateMappedProps> = ({onClose, onCreateCollection, sidebarCollections, Hash, CollectionIds}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const potentialMediaShareCollections = sidebarCollections?.filter(g => g.Role !== GroupRoleTypes.participant) ?? [];\n   const [shareCollectionModalState, setShareCollectionModalState] = React.useState(\n      {\n         toAdd: [],\n         toRemove: [],\n         warnAboutCancel: false,\n         isWorking: false,\n         hasError: false\n      } as IShareToCollectionModalState);\n\n   const onSaveClick = async () => {\n      setShareCollectionModalState({...shareCollectionModalState, isWorking: true, hasError: false});\n\n      try {\n         const addToCollectionPromises = shareCollectionModalState.toAdd.map(g => collectionApi.addToCollection(g.Id, Hash));\n         const removeFromCollectionPromises = shareCollectionModalState.toRemove.map(g => collectionApi.removeFromCollection(g.Id, Hash));\n         await Promise.all(addToCollectionPromises.concat(removeFromCollectionPromises));\n\n         updateMediaStateFromServer();\n\n         setShareCollectionModalState({...shareCollectionModalState, isWorking: false, hasError: false, toAdd: [], toRemove: []});\n         onClose();\n      } catch {\n         setShareCollectionModalState({...shareCollectionModalState, isWorking: false, hasError: true});\n         const errorMessage = document.getElementById('error-message');\n         errorMessage.scrollIntoView({block: 'end', inline: 'nearest', behavior: 'smooth'});\n      }\n   };\n\n   const fetchSidebarCollections = async () => {\n      setShareCollectionModalState({...shareCollectionModalState, isWorking: true});\n      await updateSidebarCollections();\n      setShareCollectionModalState({...shareCollectionModalState, isWorking: false});\n   };\n\n   useEffect(() => {\n      if (sidebarCollections?.length === 0) {\n         void fetchSidebarCollections();\n      }\n   }, []);\n\n   const onCancelClick = () => {\n      setShareCollectionModalState({...shareCollectionModalState, warnAboutCancel: true});\n   };\n\n   const onCancelWarnClose = () => {\n      setShareCollectionModalState({...shareCollectionModalState, warnAboutCancel: false});\n   };\n\n   const onCancelWarnConfirm = () => {\n      setShareCollectionModalState({...shareCollectionModalState, warnAboutCancel: false});\n      onClose();\n   };\n\n   const onCreateCollectionClick = async () => {\n      if (shareCollectionModalState.toRemove.length !== 0 || shareCollectionModalState.toAdd.length !== 0) {\n         await onSaveClick();\n      }\n\n      onCreateCollection && onCreateCollection();\n   };\n\n   const getCollectionToDisplay = (id: string, isShared: boolean) => {\n      const getCollectionName = () => potentialMediaShareCollections.find(c => c.Id === id).Name;\n\n      const removeFromCollection = () => {\n         if (shareCollectionModalState.toAdd.findIndex(c => c.Id === id) !== -1) {\n            const holdArray = shareCollectionModalState.toAdd.slice();\n            holdArray.splice(holdArray.findIndex(c => c.Id === id), 1);\n            setShareCollectionModalState({...shareCollectionModalState, toAdd: holdArray});\n         } else if (shareCollectionModalState.toRemove.findIndex(c => c.Id === id) === -1) {\n            setShareCollectionModalState({\n               ...shareCollectionModalState,\n               toRemove: shareCollectionModalState.toRemove.concat(potentialMediaShareCollections.find(c => c.Id === id))\n            });\n         }\n      };\n\n      const addToCollection = () => {\n         if (shareCollectionModalState.toRemove.findIndex(c => c.Id === id) !== -1) {\n            const holdArray = shareCollectionModalState.toRemove.slice();\n            holdArray.splice(holdArray.findIndex(c => c.Id === id), 1);\n            setShareCollectionModalState({...shareCollectionModalState, toRemove: holdArray});\n         } else if (shareCollectionModalState.toAdd.findIndex(c => c.Id === id) === -1) {\n            setShareCollectionModalState({\n               ...shareCollectionModalState,\n               toAdd: shareCollectionModalState.toAdd.concat(potentialMediaShareCollections.find(c => c.Id === id))\n            });\n         }\n      };\n\n      const collection = potentialMediaShareCollections.find(c => c.Id === id);\n      const userRole = collection?.Role;\n      const isOwner = userRole === GroupRoleTypes.manager;\n      return (\n         <li\n            className=\"collection\"\n            key={id}\n         >\n            <span id={`collection-name-${id}`}>\n               {getCollectionName()}\n            </span>\n            {isShared && isOwner ? (\n               <ControlButton\n                  title={t('collections.share.remove')}\n                  buttonType={TscButtonType.floating}\n                  glyph={<Glyphs.CircleRemove16x16 />}\n                  themeName={theme}\n                  onClick={removeFromCollection}\n                  testId=\"remove-collection-button\"\n                  aria-labelledby={`collection-name-${id}`}\n               />\n            ) : (\n               !isShared && (\n                  <ControlButton\n                     title={t('collections.share.add')}\n                     buttonType={TscButtonType.floating}\n                     glyph={<Glyphs.CircleAdd16x16 />}\n                     themeName={theme}\n                     onClick={addToCollection}\n                     testId=\"add-collection-button\"\n                     aria-labelledby={`collection-name-${id}`}\n                  />\n               ))}\n         </li>\n      );\n   };\n\n   const isMediaSharedToCollection = (c: ICollectionModel) => CollectionIds.some(h => h === c.Id);\n\n   const isCollectionInPendingAddState = (c: ICollectionModel) => shareCollectionModalState.toAdd.some(g => g.Id === c.Id);\n\n   const isCollectionInPendingRemoveState = (c: ICollectionModel) => shareCollectionModalState.toRemove.some(g => g.Id === c.Id);\n\n   const collectionsToShareWith = potentialMediaShareCollections\n      .filter(isMediaSharedToCollection)\n      .filter(g => !isCollectionInPendingRemoveState(g))\n      .concat(shareCollectionModalState.toAdd) || [];\n\n   const sharedWithElement = collectionsToShareWith?.length ?\n      collectionsToShareWith.map(g => getCollectionToDisplay(g.Id, true)) : (\n         <div className=\"empty-state-text\">\n            {t('collections.share.notShared')}\n         </div>\n      );\n\n   const collectionsAvailableForSharing = potentialMediaShareCollections\n      .filter(g => !isMediaSharedToCollection(g))\n      .filter(g => !isCollectionInPendingAddState(g))\n      .concat(shareCollectionModalState.toRemove) || [];\n\n   const myCollectionsElement = collectionsAvailableForSharing?.length ?\n      collectionsAvailableForSharing.map(g => getCollectionToDisplay(g.Id, false)) : (\n         <div className=\"empty-state-text\">\n            {t('collections.share.none')}\n         </div>\n      );\n\n   const pendingChanges = shareCollectionModalState.toRemove.length !== 0 || shareCollectionModalState.toAdd.length !== 0;\n\n   const displayedButtons = !pendingChanges ?\n      (\n         <MinWidthButtonWrapper>\n            <ControlButton\n               label={t('general.done')}\n               buttonType={TscButtonType.primary}\n               themeName={theme}\n               onClick={onClose}\n               testId=\"done-button\"\n            />\n         </MinWidthButtonWrapper>\n      ) :\n      (\n         <>\n            <MinWidthButtonWrapper>\n               <ControlButton\n                  label={t('general.cancel')}\n                  buttonType={TscButtonType.secondary}\n                  themeName={theme}\n                  onClick={onCancelClick}\n                  testId=\"cancel-button\"\n               />\n               <ControlButton\n                  label={t('general.save')}\n                  buttonType={TscButtonType.primary}\n                  themeName={theme}\n                  onClick={onSaveClick}\n                  testId=\"save-button\"\n               />\n            </MinWidthButtonWrapper>\n         </>\n      );\n\n   const hideEmptyState = shareCollectionModalState.isWorking || shareCollectionModalState.hasError || (collectionsAvailableForSharing.length > 0 || collectionsToShareWith.length > 0);\n\n   const ModalContent = (\n      <>\n         <div className=\"share-to-collection-field form-field\">\n            <ModalSectionLabel>\n               {t('collections.share.sharedWith')}\n            </ModalSectionLabel>\n         </div>\n         <ul className=\"share-collection-section\">\n            {sharedWithElement}\n         </ul>\n         <div className=\"share-to-collection-field form-field\">\n            <ModalSectionLabel>\n               {t('collections.mine')}\n            </ModalSectionLabel>\n            <MinWidthButtonWrapper>\n               <ControlButton\n                  label={t('collections.create.new')}\n                  buttonType={TscButtonType.secondary}\n                  themeName={theme}\n                  onClick={onCreateCollectionClick}\n                  testId=\"create-collection-button\"\n               />\n            </MinWidthButtonWrapper>\n         </div>\n         <ul className=\"share-collection-section\">\n            {myCollectionsElement}\n         </ul>\n         <div className=\"button-group\">\n            {displayedButtons}\n         </div>\n         {shareCollectionModalState.warnAboutCancel &&\n            (\n               <AlertModalPortal\n                  title={t('general.unsavedChanges')}\n                  testId=\"manage-reviewers-warn\"\n                  onClose={onCancelWarnClose}\n                  closeContent={t('general.close')}\n                  onConfirm={onCancelWarnConfirm}\n                  confirmContent={t('general.confirm')}\n                  confirmButtonType={TscButtonType.destructive}\n                  onDismiss={onCancelWarnClose}\n                  dismissContent={t('general.close')}\n                  dismissButtonType={TscButtonType.secondary}\n                  modalWidth=\"20rem\"\n               >\n                  <div className=\"manage-reviewers-warn\">\n                     {t('general.unsavedChangesDescription')}\n                  </div>\n               </AlertModalPortal>\n            )\n         }\n      </>\n   );\n\n   return (\n      <BasicModalPortal\n         testId=\"share-to-collection-modal\"\n         title={t('collections.share.header')}\n         width={cssConstants.defaultModalWidth}\n         onClose={onClose}\n         themeName={theme}\n         isLoading={shareCollectionModalState.isWorking}\n      >\n         <div className=\"modal-body\">\n            <div className=\"form-body themeable-section\">\n               {shareCollectionModalState.hasError && (\n                  <StyledWarning id=\"error-message\">\n                     {t('general.errorText')}\n                  </StyledWarning>\n               )}\n               {hideEmptyState ? ModalContent : <ShareToCollectionEmptyState onCreateCollection={onCreateCollection} />}\n            </div>\n         </div>\n      </BasicModalPortal>\n   );\n};\n\nexport interface IShareToCollectionModalProps {\n   onClose(): void;\n   onCreateCollection?(): void;\n}\n\nexport interface IShareToCollectionModalState extends IWorkerState {\n   toAdd: ICollectionModel[];\n   toRemove: ICollectionModel[];\n   warnAboutCancel: boolean;\n}\n\nexport interface IStateMappedProps {\n   sidebarCollections: ICollectionModel[];\n   Hash: string;\n   CollectionIds: string[];\n}\n\nconst mapStatesToProps = (\n   {onClose, onCreateCollection}: IShareToCollectionModalProps,\n   {sidebarCollections}: Partial<IStateMappedProps>,\n   {Hash, CollectionIds}: Partial<IStateMappedProps>\n): IStateMappedProps & IShareToCollectionModalProps => ({onClose, onCreateCollection, sidebarCollections, Hash, CollectionIds});\n\nexport default withMemoizedContexts(mapStatesToProps, collectionsStore, mediaStore)(ShareToCollectionModalBase);\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport {TscStyles, TscThemeName, TscThemeNames, Spinner} from '@techsmith/tsc-cloud-style-guide';\nimport {StyledAnchor} from '../util/StyledElements';\nimport {useTscTheme} from '../../context/themeProvider';\n\nexport const Table = styled.ul`\n   list-style-type: none;\n   min-height: 5rem;\n   display: grid;\n   grid-template-columns: repeat( auto-fit, minmax(14rem, 1fr) );\n   grid-gap: 1rem;\n   padding: 0;\n`;\n\nconst TableWrapper = styled.div`\n   margin-top: 1rem;\n`;\n\nconst TableItem = styled.li<{theme: TscThemeNames}>`\n   padding: .5rem 0;\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.lightMedium : TscStyles.color.text.mediumDark};\n   background: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.mediumDark : TscStyles.color.ui.dawn.lightMedium};\n   border: 1px solid ${props => props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.dark : TscStyles.color.ui.dawn.medium};\n   padding: .5rem 1rem;\n   border-radius: ${TscStyles.border.radius.md};\n   margin-right: 0;\n   align-items: center;\n`;\n\nconst TableHeaderItem = styled.div<{theme: TscThemeNames}>`\n   padding: .5rem 0;\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.lightMedium : TscStyles.color.text.mediumDark};\n   background: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.mediumDark : TscStyles.color.ui.dawn.lightMedium};\n   border: 1px solid ${props => props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.dark : TscStyles.color.ui.dawn.medium};\n   padding: .5rem 1rem;\n   border-radius: ${TscStyles.border.radius.sm};\n   margin-right: 0;\n   align-items: center;\n   display: none;\n   font-weight: 600;\n   text-transform: uppercase;\n   font-size: .75rem;\n`;\n\nconst ItemCell = styled.div<{theme: TscThemeNames}>`\n   display: grid;\n   grid-template-columns: 116px 2fr;\n   grid-gap: 12px;\n   align-items: center;\n   font-size: 0.875rem;\n   margin-bottom: 0.5rem;\n\n   a {\n      color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.lightMedium : TscStyles.color.text.mediumDark};\n      white-space: nowrap;\n      text-overflow: ellipsis;\n      overflow: hidden;\n   }\n\n   span {\n      white-space: nowrap;\n      text-overflow: ellipsis;\n      overflow: hidden;\n   }\n\n   &:before {\n     margin-right: 1rem;\n     display: block;\n     font-weight: 600;\n     text-transform: uppercase;\n     font-size: .75rem;\n   }\n`;\n\nconst SmallViewLabel = styled.div`\n   display: block;\n   font-weight: 600;\n   text-transform: uppercase;\n   font-size: .75rem;\n`;\n\nexport const EmptyData = styled(TableItem)`\n   grid-template-columns: none !important;\n   grid-template: none !important;\n   text-align: center;\n   font-style: italic;\n   padding-top: 1.75rem;\n`;\n\nexport const DataTableBase: React.FC<IDataTableProps> = ({columnLabels, tableRows, emptyStateLabel, isLoading = false}) => {\n   const theme = useTscTheme();\n   const createCell = (rowItem: string | React.JSX.Element | number, colIndex: number, link?: string) => (\n\n      <ItemCell\n         // eslint-disable-next-line @typescript-eslint/no-base-to-string, @typescript-eslint/restrict-template-expressions\n         key={`${rowItem}-${colIndex}`}\n         theme={theme}\n      >\n         <SmallViewLabel>\n            {columnLabels[colIndex]}\n         </SmallViewLabel>\n         {\n            colIndex === 0 && link ? (\n               <StyledAnchor href={link}>\n                  {rowItem}\n               </StyledAnchor>\n            ) :\n               typeof rowItem === 'number' || typeof rowItem === 'string' ? (\n                  <span>\n                     {rowItem}\n                  </span>\n               ) : rowItem\n         }\n      </ItemCell>\n   );\n\n   const createRow = (row: ITableRowContent, rowIndex: number) => (\n      <TableItem\n         key={rowIndex}\n         theme={theme}\n         className=\"data-table-row\"\n      >\n         {row.tableRow.map((rowItem: string | React.JSX.Element | number, index: number) => createCell(rowItem, index, row.link))}\n         {row.button}\n      </TableItem>\n   );\n\n   const LoadingState =\n      (\n         <TableWrapper\n            data-test-id=\"loading-table-wrapper\"\n            theme={theme}\n         >\n            <Table>\n               <EmptyData theme={theme}>\n                  <Spinner\n                     testId=\"loading-state-spinner\"\n                     themeName={theme}\n                  />\n               </EmptyData>\n            </Table>\n         </TableWrapper>\n      );\n\n   const emptyState =\n      (\n         <TableWrapper\n            data-test-id=\"empty-table-wrapper\"\n            theme={theme}\n         >\n            <Table>\n               <EmptyData theme={theme}>\n                  {emptyStateLabel}\n               </EmptyData>\n            </Table>\n         </TableWrapper>\n      );\n\n   const nonEmptyState =\n      (\n         <TableWrapper\n            data-test-id=\"non-empty-table-wrapper\"\n            theme={theme}\n         >\n            <TableHeaderItem\n               theme={theme}\n               className=\"data-table-header\"\n            >\n               {columnLabels.map((label: string, index: number) => (\n                  <div key={`${label}-${index}`}>\n                     {label}\n                  </div>\n               ))}\n            </TableHeaderItem>\n            <Table>\n               {tableRows.map((row: ITableRowContent, index: number) => createRow(row, index))}\n            </Table>\n         </TableWrapper>\n      );\n\n   return isLoading ? LoadingState : !tableRows.length ? emptyState : nonEmptyState;\n};\n\nexport interface IDataTableProps {\n   columnLabels: string[];\n   emptyStateLabel: string;\n   tableRows: ITableRowContent[];\n   isLoading?: boolean;\n}\n\nexport interface ITableRowContent {\n   tableRow: (string | React.JSX.Element | number)[];\n   link?: string;\n   button?: React.ReactElement;\n}\n\nexport default React.memo(DataTableBase);\n","import React from 'react';\nimport styled from 'styled-components';\nimport {conversationsStore} from '../../context/conversationsProvider';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\n\nexport const ButtonGroupWrapper = styled.div`\n   display: flex;\n   flex-direction: row;\n`;\n\nconst ButtonWrapper = styled.div`\n   margin: 0 0.25rem;\n\n   a {\n      margin-right: 0;\n   }\n`;\n\nconst PrimaryButtonWrapper = styled(ButtonWrapper)`\n   order: -1;\n   margin-left: 0;\n\n   button {\n      padding: 0.5rem;\n   }\n\n   span:nth-child(1) {\n      display: block;\n   }\n\n   span:nth-child(2) {\n      display: none;\n   }\n`;\n\nexport const DataTableActionButtonGroupBase: React.FC<IDataTableActionButtonGroupProps> = ({primaryButton, otherButtons}) => (\n   <ButtonGroupWrapper data-test-id=\"data-table-action-button-group\">\n      {otherButtons.map((b, i) => (\n         <ButtonWrapper key={`${b.key}-${i}`}>\n            {b}\n         </ButtonWrapper>\n      ))}\n      <PrimaryButtonWrapper>\n         {primaryButton}\n      </PrimaryButtonWrapper>\n   </ButtonGroupWrapper>\n);\n\nexport interface IDataTableActionButtonGroupProps {\n   primaryButton: React.ReactElement;\n   otherButtons: React.ReactElement[];\n}\n\nconst mapStatesToProps = (props: IDataTableActionButtonGroupProps): IDataTableActionButtonGroupProps => ({...props});\n\nexport default withMemoizedContexts(mapStatesToProps, conversationsStore)(DataTableActionButtonGroupBase);","import React, {useEffect, useRef, useState} from 'react';\nimport styled from 'styled-components';\nimport {TscThemeName, TscThemeNames, TscStyles, ControlButton, Glyphs, TscButtonType} from '@techsmith/tsc-cloud-style-guide';\nimport cssConstants from '../../constants/cssConstants';\nimport MediaTabsHeader from './MediaTabsHeader';\nimport {ITab} from '../../model/tab';\nimport config from '../../service/config';\nimport {IWorkerState, SetupWorkerState} from '../../model/workerState';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {mediaStore} from '../../context/mediaProvider';\nimport TranscriptTab from '../transcript/TranscriptTab';\nimport Conversation from '../conversation/Conversation';\nimport {IComment} from '../../model/commentModel';\nimport {useTranslation} from 'react-i18next';\nimport {conversationsStore} from '../../context/conversationsProvider';\nimport SettingsTab from './SettingsTab';\nimport QuizzingTab from './quizzing/QuizzingTab';\nimport AnalyticsTab from './analytics/AnalyticsTab';\nimport EditMediaTab from './edit-media/EditMediaTab';\nimport {updateQuizData} from '../../context/quizDataProvider';\nimport {updateAnalyticsDataFromServer} from '../../context/analyticsDataProvider';\nimport quizApi from '../../service/quizApi';\nimport {IConversationData} from '../../model/conversationModel';\nimport {ITranscript} from '../../model/captionModels';\nimport {transcriptStore} from '../../context/transcriptProvider';\nimport DetailsTab from './details/DetailsTab';\nimport {selectedConversationStore} from '../../context/selectedConversationProvider';\nimport tabNames from '../../constants/tabNames';\nimport {mediaTabsStore, updateMediaTabsState} from '../../context/mediaTabsProvider';\n\nconst MediaTabsWrapper = styled.div<{theme: TscThemeNames}>`\n   background-color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.medium : TscStyles.color.ui.dawn.light};\n   display: flex;\n   flex-direction: column;\n   flex: 0 0 auto;\n   height: inherit;\n   z-index: ${cssConstants.zIndex.conversation};\n   outline: none;\n   position: relative;\n   overflow: hidden;\n   border-radius: ${TscStyles.border.radius.xl};\n   width: 21.75rem;\n\n   @media screen and (max-width: ${cssConstants.mediaTabsDisplayBreakpoint}px)  {\n      border-radius: 0;\n      width: 100%;\n      max-width: 100%;\n      max-height: 60vh;\n   };\n`;\n\nconst CloseButton = styled.span`\n   padding: .25rem;\n   margin: 0;\n`;\n\nconst BaseTabsWrapper = styled.div`\n   width: 100%;\n   display: flex;\n   margin: 0 auto;\n   box-sizing: border-box;\n`;\n\nexport const TabsContentWrapper = styled(BaseTabsWrapper)`\n   flex-direction: column;\n   justify-content: center;\n   align-items: center;\n   max-width: 21.875rem;\n   z-index: ${cssConstants.zIndex.viewPageElement};\n`;\n\nconst TabsBarWrapper = styled(BaseTabsWrapper)<{theme: TscThemeNames}>`\n   position: sticky;\n   top: 0;\n   border-radius: ${TscStyles.border.radius.xl} ${TscStyles.border.radius.xl} 0 0;\n   background: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.medium : TscStyles.color.ui.dawn.light};\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n   border-bottom: 1px solid ${props => props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.mediumDark : TscStyles.color.ui.dawn.medium};\n\n   @media screen and (max-width: ${cssConstants.mediaTabsDisplayBreakpoint}px)  {\n      border-radius: 0;\n      margin: 0;\n      width: 100%;\n   }\n`;\n\nconst Card = styled.div<{theme: TscThemeNames}>`\n   position: relative;\n   max-width: 21.875rem;\n   width: 100%;\n   border-radius: 0 0 ${TscStyles.border.radius.xl} ${TscStyles.border.radius.xl};\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n   overflow: auto;\n   height: 100%;\n   \n   @media screen and (max-width: ${cssConstants.mediaTabsDisplayBreakpoint}px)  {\n      border-radius: 0;\n      width: 100%;\n      max-width: 100%;\n   };\n`;\n\nexport const MediaTabsBase: React.FC<IMediaTabsProps & IStateMappedProps> = ({canClosePanel, conversationLoadingState, setConversationLoadingState, initialSelectedComment, smartPlayerDisplayMode, currentTab, Hash, MediaId, IsReady, conversations, VideoReviewId, transcript}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [loadingQuizData, setLoadingQuizData] = SetupWorkerState();\n   const [loadingAnalyticsData, setLoadingAnalyticsData] = SetupWorkerState();\n   const [tabs, setTabs] = useState<ITab[]>([]);\n   const [hasConversation, setHasConversation] = React.useState(null);\n   const [hasTranscript, setHasTranscript] = React.useState(null);\n   const [includeDetailsTab, setIncludeDetailsTab] = React.useState(window.innerWidth <= cssConstants.mediaTabsDisplayBreakpoint);\n   const isInitialRender = useRef(true);\n\n   const updateSelectedTab = (tabName: string) => {\n      updateMediaTabsState({currentTab: tabName});\n      setTabs(prevTabs =>\n         prevTabs.map(tab2 => ({\n            ...tab2,\n            isSelected: tab2.text === tabName\n         }))\n      );\n   };\n\n   useEffect(() => {\n      // don't run the first time the page loads, it will be handled by the useEffect triggered by the transcript/conversations loading\n      if (isInitialRender.current) {\n         isInitialRender.current = false;\n         return;\n      }\n\n      if (includeDetailsTab) {\n         const newTabs = [...tabs];\n         if (!newTabs.some(mediaTab => mediaTab.text === tabNames.details)) {\n            newTabs.unshift({\n               text: tabNames.details,\n               isSelected: currentTab === tabNames.details,\n               onClick: () => updateSelectedTab(tabNames.details),\n               href: ''\n            });\n         }\n         setTabs(newTabs);\n      } else {\n         const newTabs = [...tabs];\n         if (newTabs[0]?.text === tabNames.details) {\n            newTabs.shift();\n            if (newTabs.length > 0) {\n               if (currentTab === tabNames.details) {\n                  newTabs.forEach(tab2 => (tab2.isSelected = false));\n                  newTabs[0].isSelected = true;\n                  updateMediaTabsState({currentTab: newTabs[0]?.text});\n               }\n            }\n         }\n         setTabs(newTabs);\n      }\n   }, [includeDetailsTab]);\n\n   const handleResize = () => {\n      setIncludeDetailsTab(window.innerWidth <= cssConstants.mediaTabsDisplayBreakpoint);\n   };\n\n   useEffect(() => {\n      window.addEventListener('resize', handleResize);\n\n      // Cleanup event listener on component unmount\n      return () => {\n         window.removeEventListener('resize', handleResize);\n      };\n   }, []);\n\n   useEffect(() => {\n      // don't populate tabs until we know if the media has a conversations/transcripts\n      if (hasConversation === null || hasTranscript === null) {\n         return;\n      }\n      const newTabs: ITab[] = [];\n      if (includeDetailsTab) {\n         newTabs.push({\n            text: tabNames.details,\n            isSelected: currentTab === tabNames.details,\n            onClick: () => updateSelectedTab(tabNames.details),\n            href: ''\n         });\n      }\n      const includeCommentsTab = config.watchConfig.isOwnerAdminOrTeamEditor || hasConversation;\n      if (includeCommentsTab) {\n         newTabs.push({\n            text: tabNames.comments,\n            isSelected: currentTab === tabNames.comments,\n            onClick: () => updateSelectedTab(tabNames.comments),\n            href: ''\n         });\n      }\n      if (hasTranscript) {\n         newTabs.push({\n            text: tabNames.transcript,\n            isSelected: currentTab === tabNames.transcript,\n            onClick: () => updateSelectedTab(tabNames.transcript),\n            href: ''\n         });\n      }\n      if (config.watchConfig.isOwnerAdminOrTeamEditor) {\n         newTabs.push({\n            text: tabNames.settings,\n            isSelected: currentTab === tabNames.settings,\n            onClick: () => updateSelectedTab(tabNames.settings),\n            href: ''\n         });\n         if (!config.featureSwitches.IsScreencast) {\n            newTabs.push({\n               text: tabNames.quizzing,\n               isSelected: currentTab === tabNames.quizzing,\n               onClick: () => updateSelectedTab(tabNames.quizzing),\n               href: ''\n            });\n            newTabs.push({\n               text: tabNames.analytics,\n               isSelected: currentTab === tabNames.analytics,\n               onClick: () => updateSelectedTab(tabNames.analytics),\n               href: ''\n            });\n            newTabs.push({\n               text: tabNames.editMedia,\n               isSelected: currentTab === tabNames.editMedia,\n               onClick: () => updateSelectedTab(tabNames.editMedia),\n               href: ''\n            });\n         }\n      }\n      if (newTabs.length > 0 && !newTabs.some(tab2 => tab2.text === currentTab)) {\n         newTabs[0].isSelected = true;\n         updateMediaTabsState({currentTab: newTabs[0].text});\n      }\n      setTabs(newTabs);\n   }, [hasTranscript, hasConversation]);\n\n   useEffect(() => {\n      if (config.featureSwitches.UseSingleConversation) {\n         if (conversations) {\n            setHasConversation(conversations?.length > 0);\n         }\n      } else {\n         setHasConversation(config.watchConfig.isOwnerAdminOrTeamEditor || (VideoReviewId && conversations?.length > 0));\n      }\n   }, [VideoReviewId, conversations?.length]);\n\n   useEffect(() => {\n      setHasTranscript(!!transcript);\n   }, [transcript]);\n\n   React.useEffect(() => {\n      const getQuizData = async () => {\n         try {\n            setLoadingQuizData({isWorking: true, hasError: false});\n            updateQuizData(await quizApi.getQuizData(Hash));\n            setLoadingQuizData({isWorking: false, hasError: false});\n         } catch {\n            setLoadingQuizData({isWorking: false, hasError: true});\n         }\n      };\n\n      const getAnalyticsData = async () => {\n         const maxTryLimit = 5;\n         const retryDelay = 1500;\n\n         const fetchAnalyticsData = (currentTries: number) => async () => {\n            if (currentTries >= maxTryLimit) {\n               setLoadingAnalyticsData({isWorking: false, hasError: true});\n               return;\n            }\n\n            try {\n               setLoadingAnalyticsData({isWorking: true, hasError: false});\n               await updateAnalyticsDataFromServer(MediaId);\n               setLoadingAnalyticsData({isWorking: false, hasError: false});\n            } catch {\n               window.setTimeout(fetchAnalyticsData(currentTries + 1), retryDelay);\n            }\n         };\n         await fetchAnalyticsData(0)();\n      };\n\n      if (IsReady) {\n         if (!config.featureSwitches.DisableAnalyticsAndQuizEditing) {\n            void getQuizData();\n            void getAnalyticsData();\n         }\n      }\n   }, [IsReady]);\n\n   return (\n      <MediaTabsWrapper theme={theme}>\n         <TabsBarWrapper theme={theme}>\n            <MediaTabsHeader tabs={tabs} />\n            {canClosePanel && (\n               <CloseButton>\n                  <ControlButton\n                     glyph={<Glyphs.Close16x16 />}\n                     buttonType={TscButtonType.tertiary}\n                     themeName={theme}\n                     title={t('general.close')}\n                     testId=\"hide-media-tabs-button\"\n                     aria={{'aria-label': t('general.close')}}\n                     onClick={() => updateMediaTabsState({mediaTabsPanelOpen: false, hasToggledMediaTabs: true})}\n                  />\n               </CloseButton>\n            )}\n         </TabsBarWrapper>\n         <Card theme={theme}>\n            {currentTab === tabNames.details && <DetailsTab />}\n            {currentTab === tabNames.comments && (\n               <Conversation\n                  initialSelectedComment={initialSelectedComment}\n                  conversationLoadingState={conversationLoadingState}\n                  setConversationLoadingState={setConversationLoadingState}\n                  smartPlayerDisplayMode={smartPlayerDisplayMode}\n               />\n            )}\n            {currentTab === tabNames.transcript && <TranscriptTab />}\n            {currentTab === tabNames.settings && <SettingsTab />}\n            {currentTab === tabNames.quizzing && (\n               <QuizzingTab\n                  initialIsWorking={loadingQuizData.isWorking}\n                  initialHasError={false}\n               />\n            )}\n            {currentTab === tabNames.analytics && (\n               <AnalyticsTab\n                  isWorking={loadingAnalyticsData.isWorking}\n                  hasError={false}\n               />\n            )}\n            {currentTab === tabNames.editMedia && <EditMediaTab />}\n         </Card>\n      </MediaTabsWrapper>\n   );\n};\n\nexport interface IMediaTabsProps {\n   canClosePanel: boolean;\n   conversationLoadingState: IWorkerState;\n   setConversationLoadingState: (updatedState: IWorkerState) => void;\n   initialSelectedComment: IComment;\n   smartPlayerDisplayMode: string;\n}\n\nexport interface IStateMappedProps {\n   currentTab: string;\n   Hash: string;\n   MediaId: string;\n   IsReady: boolean;\n   conversations: IConversationData[];\n   VideoReviewId: string;\n   transcript: ITranscript;\n}\n\nconst mapStatesToProps = (\n   {canClosePanel, conversationLoadingState, setConversationLoadingState, initialSelectedComment, smartPlayerDisplayMode}: IMediaTabsProps,\n   {currentTab}: Partial<IStateMappedProps>,\n   {Hash, MediaId, IsReady}: Partial<IStateMappedProps>,\n   {conversations}: Partial<IStateMappedProps>,\n   {VideoReviewId}: Partial<IStateMappedProps>,\n   {transcript}: Partial<IStateMappedProps>\n): IMediaTabsProps & IStateMappedProps => ({canClosePanel, conversationLoadingState, setConversationLoadingState, initialSelectedComment, smartPlayerDisplayMode, currentTab, Hash, MediaId, IsReady, conversations, VideoReviewId, transcript});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaTabsStore, mediaStore, conversationsStore, selectedConversationStore, transcriptStore)(MediaTabsBase);\n","import React, {memo, useEffect, useRef, useState} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport styled from 'styled-components';\nimport {ControlButton, TscButtonType, Glyphs, Tabs, TscThemeName, TscThemeNames, TscStyles} from '@techsmith/tsc-cloud-style-guide';\nimport cssConstants from '../../constants/cssConstants';\nimport config from '../../service/config';\nimport {NavigationTabTypes} from '../../constants/Constants';\nimport {ITab} from '../../model/tab';\nimport {useTscTheme} from '../../context/themeProvider';\n\nexport const TabsGrid = styled.div`\n   display: grid;\n   grid-template-areas:\n      'leftarrow tabs rightarrow';\n   grid-template-columns: max-content 1fr max-content;\n   width: 100%;\n   color: ${TscStyles.color.text.mediumDark};\n`;\n\nconst LeftArrowContainer = styled.div`\n   grid-area: leftarrow;\n   display: flex;\n   justify-content: center;\n   align-items: center;\n`;\n\nconst RightArrowContainer = styled.div`\n   grid-area: rightarrow;\n   display: flex;\n   justify-content: center;\n   align-items: center;\n`;\n\nconst TabsContainer = styled.div`\n   grid-area: tabs;\n   overflow: hidden;\n`;\n\nconst TabWrapper = styled.nav<{theme: TscThemeNames}>`\n   max-width: ${cssConstants.contentWidth};\n   overflow-x: auto;\n   overflow-y: hidden;\n   scrollbar-width: none;\n\n   &::-webkit-scrollbar {\n      display: none;\n   }\n\n   & {\n      -ms-overflow-style: none;\n      overflow: -moz-scrollbars-none;\n   }\n\n   div {\n      height: 2.5rem;\n      box-sizing: border-box;\n\n      a {\n         /* !important is here because tsc-styleguide will win with 0 for the 'last-child' otherwise, could alternatively fight specificity if this ever becomes a problem */\n         flex: none;\n         margin: 0.125rem ${cssConstants.viewPageMeasurements.managementTabHorizontalMargin} 0 ${cssConstants.viewPageMeasurements.managementTabHorizontalMargin} !important;\n         padding: 0 ${cssConstants.viewPageMeasurements.managementTabHorizontalPadding};\n         outline-offset: -${cssConstants.viewPageMeasurements.managementTabHorizontalPadding};\n\n         &::after {\n            margin: 0 .125rem;\n         }\n      }\n\n      span {\n         font-size: 0.825rem;\n         font-weight: 600;\n         color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n      }\n   }\n`;\n\nconst ButtonWrapper = styled.div`\n   padding: 0 0.25rem;\n`;\n\nexport const MediaTabsHeaderBase: React.FC<IMediaTabsHeaderProps> = ({tabs}) => {\n   const [displayLeftArrow, setDisplayLeftArrow] = useState(false);\n   const [displayRightArrow, setDisplayRightArrow] = useState(window.innerWidth < (config.watchConfig?.isOwnerOrAdmin && !config.environmentData.IsLti ? cssConstants.adminTabsBarBreakpoint : config.watchConfig?.isOwnerOrAdmin && config.environmentData.IsLti ? cssConstants.ltiTabsBarBreakpoint : cssConstants.viewerTabsBarBreakpoint));\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const tabsElement = useRef<HTMLDivElement>(null);\n\n   const updateOverflowArrows = () => {\n      const tabsScrollable = tabsElement.current;\n      const tolerance = 5;\n\n      if (tabsScrollable.scrollWidth - tabsScrollable.offsetWidth - tabsScrollable.scrollLeft < tolerance) {\n         setDisplayRightArrow(false);\n      } else {\n         setDisplayRightArrow(true);\n      }\n\n      if (tabsScrollable.scrollLeft < tolerance) {\n         setDisplayLeftArrow(false);\n      } else {\n         setDisplayLeftArrow(true);\n      }\n   };\n\n   const rightArrowOnClick = (e: React.MouseEvent) => {\n      e.stopPropagation();\n      const tabsScrollable = tabsElement.current;\n      const scrollLeft = Math.min(tabsScrollable.scrollLeft + tabsScrollable.offsetWidth, tabsScrollable.scrollWidth - tabsScrollable.offsetWidth);\n      tabsScrollable.scrollTo({left: scrollLeft, behavior: 'smooth'});\n   };\n\n   const leftArrowOnClick = (e: React.MouseEvent) => {\n      e.stopPropagation();\n      const tabsScrollable = tabsElement.current;\n      const scrollLeft = Math.max(0, tabsScrollable.scrollLeft - tabsScrollable.offsetWidth);\n      tabsScrollable.scrollTo({left: scrollLeft, behavior: 'smooth'});\n   };\n\n   useEffect(() => {\n      const tabsElementHandle = tabsElement.current;\n      tabsElement.current.addEventListener('scroll', updateOverflowArrows);\n      return () => {\n         tabsElementHandle.removeEventListener('scroll', updateOverflowArrows);\n      };\n   }, []);\n\n   useEffect(() => {\n      if (!tabsElement.current) {\n         // eslint-disable-next-line no-undefined\n         return undefined; // useEffect prefers undefined (or empty) _not_ null if exiting early like this\n      }\n      // this is required because we cant use pure-css to determine the size of the tab content currently rendering as a child when trying to set 'bottom'\n      // value for the sticky offset.  if we refactored to put media-tab-header and media-tab-content each in it's own grid container... maybe we do with pure css\n      const observer = new ResizeObserver(() => {\n         updateOverflowArrows();\n      });\n      observer.observe(tabsElement.current);\n      return () => {\n         observer.disconnect();\n      };\n   }, []);\n\n   return (\n      <TabsGrid>\n         <LeftArrowContainer>\n            {displayLeftArrow && (\n               <ButtonWrapper>\n                  <ControlButton\n                     buttonType={TscButtonType.floating}\n                     glyph={<Glyphs.ArrowLeft16x16 />}\n                     themeName={theme}\n                     title={t('ScrollLeft')}\n                     onClick={leftArrowOnClick}\n                  />\n               </ButtonWrapper>\n            )}\n         </LeftArrowContainer>\n         <TabsContainer>\n            <TabWrapper\n               theme={theme}\n               ref={tabsElement}\n               id=\"tab-wrapper\"\n            >\n               <Tabs\n                  isAnchor={true}\n                  tabs={tabs}\n                  themeName={theme}\n               />\n            </TabWrapper>\n         </TabsContainer>\n         <RightArrowContainer>\n            {displayRightArrow && (\n               <ButtonWrapper>\n                  <ControlButton\n                     buttonType={TscButtonType.floating}\n                     glyph={<Glyphs.ArrowRight16x16 />}\n                     themeName={theme}\n                     title={t('ScrollRight')}\n                     onClick={rightArrowOnClick}\n                  />\n               </ButtonWrapper>\n            )}\n         </RightArrowContainer>\n      </TabsGrid>\n   );\n};\n\nexport interface IMediaTabsHeaderProps {\n   tabs: ITab[];\n}\n\nexport interface INavigationTab extends ITab {\n   which: NavigationTabTypes;\n}\n\nexport default memo(MediaTabsHeaderBase);\n","import React from 'react';\nimport {TscStyles, TscThemeName, TscThemeNames} from '@techsmith/tsc-cloud-style-guide';\nimport {SetupWorkerState} from '../../model/workerState';\nimport {updateCaptionDataState} from '../../context/captionDataProvider';\nimport {updateConversationsFromServer} from '../../context/conversationsProvider';\nimport captionApi from '../../service/captionApi';\nimport ConversationsTab from './conversations/ConversationsTab';\nimport ConversationSettings from './conversations/ConversationSettings';\nimport MediaPrivacySettings from './privacy/MediaPrivacySettings';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {mediaStore} from '../../context/mediaProvider';\nimport {useTscTheme} from '../../context/themeProvider';\nimport config from '../../service/config';\nimport styled from 'styled-components';\nimport Captions from './accessibility/Captions';\nimport AudioDescriptions from './accessibility/AudioDescriptions';\nimport PrivacySettings from './privacy/MediaSettings';\nimport logging from '../../service/logging';\n\nconst SettingsSeparator = styled.hr<{theme: TscThemeNames}>`    \n   border: none;\n   border-top: 2px solid ${props => props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.mediumDark : TscStyles.color.ui.dawn.medium};\n   width: calc(100% - 24px);\n`;\n\nexport const SettingsTabBase: React.FC<IStateMappedProps> = ({IsVideo, Hash, MediaId, IsReady, IsYouTube}) => {\n   const theme = useTscTheme();\n   const [loadingConversationData, setLoadingConversationData] = SetupWorkerState();\n   const [loadingCaptionData, setLoadingCaptionData] = SetupWorkerState();\n\n   React.useEffect(() => {\n      const getCaptioningStatus = async () => {\n         setLoadingCaptionData({isWorking: true, hasError: false});\n         try {\n            updateCaptionDataState(await captionApi.getStatus(MediaId));\n            setLoadingCaptionData({isWorking: false, hasError: false});\n         } catch (e) {\n            logging.error(`Failed to retrieve caption state for media ID: ${MediaId}`, e);\n            setLoadingCaptionData({isWorking: false, hasError: true});\n         }\n      };\n\n      const getConversationData = async () => {\n         try {\n            setLoadingConversationData({isWorking: true, hasError: false});\n            await updateConversationsFromServer(Hash);\n            setLoadingConversationData({isWorking: false, hasError: false});\n         } catch {\n            setLoadingConversationData({isWorking: false, hasError: true});\n         }\n      };\n      if (IsReady) {\n         void getConversationData();\n         if (config.watchConfig.isOwnerOrAdmin && IsVideo && !IsYouTube) {\n            void getCaptioningStatus();\n         }\n      }\n   }, [IsReady]);\n\n   return (\n      <>\n         <MediaPrivacySettings />\n         <SettingsSeparator theme={theme} />\n         <PrivacySettings />\n         <SettingsSeparator theme={theme} />\n         {IsVideo && (\n            <>\n               <Captions\n                  isWorking={loadingCaptionData.isWorking}\n                  hasError={loadingCaptionData.hasError}\n               />\n               <SettingsSeparator theme={theme} />\n               <AudioDescriptions />\n               <SettingsSeparator theme={theme} />\n            </>\n         )}\n         {!config.featureSwitches.UseSingleConversation && (\n            <ConversationsTab\n               isWorking={loadingConversationData.isWorking}\n               hasError={loadingConversationData.hasError}\n            />\n         )}\n         {config.featureSwitches.UseSingleConversation && (\n            <ConversationSettings\n               isWorking={loadingConversationData.isWorking}\n               hasError={loadingConversationData.hasError}\n            />\n         )}\n      </>\n   );\n};\n\nexport interface IStateMappedProps {\n   IsVideo: boolean;\n   Hash: string;\n   MediaId: string;\n   IsReady: boolean;\n   IsYouTube: boolean;\n}\n\nconst mapStatesToProps = (\n   // eslint-disable-next-line no-empty-pattern\n   {},\n   {IsVideo, Hash, MediaId, IsReady, IsYouTube}: Partial<IStateMappedProps>\n): IStateMappedProps => ({IsVideo, Hash, MediaId, IsReady, IsYouTube});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore)(SettingsTabBase);\n","import React, {memo} from 'react';\nimport styled from 'styled-components';\nimport {useTranslation} from 'react-i18next';\nimport {TscThemeName, TscThemeNames, TscStyles, Spinner} from '@techsmith/tsc-cloud-style-guide';\nimport {StyledWarning} from '../util/StyledElements';\nimport {useTscTheme} from '../../context/themeProvider';\n\nconst LoadingSpinner = styled.div<{theme: TscThemeNames}>`\n   position: absolute;\n   display: flex;\n   align-items: center;\n   top: -0.5rem;\n   bottom: -0.5rem;\n   left: -0.5rem;\n   right: -0.5rem;\n   z-index: 3;\n   opacity: .9;\n   background: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.medium : TscStyles.color.ui.dawn.light};\n`;\n\nconst TabBody = styled.div`\n   position: relative;\n   margin-top: 12px;\n   padding: 0 16px 8px 16px;\n`;\n\nexport const TabContentWrapperBase: React.FC<ITabContentWrapperProps> = ({children, showSpinner, showError, customErrorMessage}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n\n   return (\n      <TabBody data-test-id=\"tab-content-wrapper\">\n         {showError && (\n            <StyledWarning data-test-id=\"styled-warning\">\n               {customErrorMessage ? customErrorMessage : t('general.errorText')}\n            </StyledWarning>\n         )}\n         {children}\n         {showSpinner && (\n            <LoadingSpinner\n               data-test-id=\"loading-spinner\"\n               theme={theme}\n            >\n               <Spinner themeName={theme} />\n            </LoadingSpinner>\n         )}\n      </TabBody>\n   );\n};\n\nexport interface ITabContentWrapperProps {\n   children?: React.ReactNode;\n   showSpinner: boolean;\n   showError: boolean;\n   customErrorMessage?: string;\n}\n\nexport default memo(TabContentWrapperBase);\n","import React from 'react';\nimport styled from 'styled-components';\nimport cssConstants from '../../constants/cssConstants';\n\nexport const HeaderWrapper = styled.div`\n   display: flex;\n   justify-content: space-between;\n   align-items: center;\n`;\n\nconst LeftLabel = styled.h2<{hideRightLabelInMobileView: boolean}>`\n   font-weight: 600;\n   font-size: 0.875rem;\n   margin: 0;\n   text-overflow: ${props => props.hideRightLabelInMobileView ? 'ellipsis' : 'auto'};\n   overflow: ${props => props.hideRightLabelInMobileView ? 'hidden' : 'auto'};\n`;\n\nconst RightLabel = styled.div<{hideRightLabelInMobileView: boolean}>`\n   font-size: 0.875rem;\n   margin-right: 1rem;\n   text-overflow: ${props => !props.hideRightLabelInMobileView ? 'ellipsis' : 'auto'};\n   overflow: ${props => !props.hideRightLabelInMobileView ? 'hidden' : 'auto'};\n\n   @media screen and (max-width: ${cssConstants.contentBreakpoint}px) {\n      display: ${props => props.hideRightLabelInMobileView ? 'none' : 'block'};\n   }\n`;\n\nconst LeftTabHeaderSection = styled.div<{hideRightLabelInMobileView: boolean}>`\n   overflow: ${props => !props.hideRightLabelInMobileView ? 'visible' : 'hidden'};\n   margin-right: .5rem;\n`;\n\nconst RightTabHeaderSection = styled.div<{$allowButtonOverflow: boolean}>`\n   display: flex;\n   align-items: center;\n   overflow: ${props => props.$allowButtonOverflow ? 'visible' : 'hidden'};\n`;\n\nconst TabHeader: React.FC<ITabHeaderProps> = ({button, leftLabel, rightLabel, hideRightLabelInMobileView, allowButtonOverflow}) => (\n   <HeaderWrapper data-test-id=\"tab-header-wrapper\">\n      <LeftTabHeaderSection hideRightLabelInMobileView={hideRightLabelInMobileView}>\n         <LeftLabel hideRightLabelInMobileView={hideRightLabelInMobileView}>\n            {leftLabel}\n         </LeftLabel>\n      </LeftTabHeaderSection>\n      <RightTabHeaderSection $allowButtonOverflow={allowButtonOverflow}>\n         <RightLabel hideRightLabelInMobileView={hideRightLabelInMobileView}>\n            {rightLabel}\n         </RightLabel>\n         {button}\n      </RightTabHeaderSection>\n   </HeaderWrapper>\n);\n\nexport default TabHeader;\n\nexport interface ITabHeaderProps {\n   leftLabel: string;\n   rightLabel: string;\n   button: React.ReactElement;\n   hideRightLabelInMobileView: boolean;\n   allowButtonOverflow?: boolean;\n}\n","import React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {TscButtonType, Glyphs, PopoverButton, TscPopoverOrigin, TscButtonGlyphPlacement, ControlButton} from '@techsmith/tsc-cloud-style-guide';\nimport styled from 'styled-components';\nimport TabHeader from '../TabHeader';\nimport UploadAudioDescriptionModal from '../../modals/ReplaceMediaModal/UploadAudioDescriptionModal';\nimport EditAudioDescriptionMenu from './AudioDescriptionsMenu';\nimport AudioDescriptionApi from '../../../service/audioDescriptionApi';\nimport {StyledWarning} from '../../util/StyledElements';\nimport {SetupWorkerState} from '../../../model/workerState';\nimport cssConstants from '../../../constants/cssConstants';\nimport withMemoizedContexts from '../../../context/contextContainerHoC';\nimport {useTscTheme} from '../../../context/themeProvider';\nimport {mediaStore, updateMediaState} from '../../../context/mediaProvider';\nimport {AlertModalPortal} from '../../util/ModalPortalHelper';\n\nconst Container = styled.div`\n   margin-top: 16px;\n   padding: 0 16px 8px 16px;\n`;\n\nconst AddAudioButton = styled(ControlButton)`\n   width: 2rem;\n`;\n\nexport const AudioDescriptionsBase: React.FC<IStateMappedProps> = ({Hash, AudioDescriptionUrl, AudioDescriptionId}) => {\n   const errorEl = React.useRef<HTMLDivElement>(null);\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [isModalDisplayed, setIsModalDisplayed] = React.useState(false);\n   const [isAlertDisplayed, setAlertDisplayed] = React.useState(false);\n   const [workerState, setWorkerState] = SetupWorkerState();\n\n   const onToggleModal = () => {\n      setIsModalDisplayed(!isModalDisplayed);\n   };\n\n   const downloadUrl = AudioDescriptionApi.getAudioDescriptionDownloadUrl(Hash);\n\n   const onRemove = async () => {\n      setAlertDisplayed(false);\n      setWorkerState({isWorking: true, hasError: false});\n\n      try {\n         await AudioDescriptionApi.removeAudioDescription(Hash);\n         updateMediaState({AudioDescriptionId: '', AudioDescriptionUrl: ''});\n         window.location.reload();\n      } catch (ex) {\n         setWorkerState({isWorking: false, hasError: true});\n      }\n   };\n\n   const onReplace = () => {\n      setIsModalDisplayed(true);\n   };\n\n   const onToggleAlert = () => {\n      setAlertDisplayed(!isAlertDisplayed);\n   };\n\n   const getFileName = (): string => {\n      if (workerState.isWorking) {\n         return t('accessibility.audioDescription.deleting');\n      }\n\n      if (AudioDescriptionUrl) {\n         return AudioDescriptionUrl?.replace(/^.*[\\\\/]/, '').replace(/\\?.*/, '');\n      }\n\n      return t('accessibility.audioDescription.none');\n   };\n\n   const addButton = (\n      <AddAudioButton\n         title={t('accessibility.audioDescription.addAudioDescription')}\n         buttonType={TscButtonType.secondary}\n         themeName={theme}\n         onClick={onToggleModal}\n         glyph={AudioDescriptionId ? <Glyphs.Ellipsis16x16 /> : <Glyphs.Add16x16 />}\n         glyphPlacement={TscButtonGlyphPlacement.left}\n         disabled={workerState.isWorking}\n         testId=\"audio-description-add-button\"\n      />\n   );\n\n   const editButton = (\n      <PopoverButton\n         buttonGlyph={<Glyphs.Ellipsis16x16 />}\n         buttonType={TscButtonType.secondary}\n         buttonTitle={t('accessibility.modify')}\n         width=\"2rem\"\n         origin={TscPopoverOrigin.topRight}\n         popoverMenu={(\n            <EditAudioDescriptionMenu\n               url={downloadUrl}\n               onRemove={onToggleAlert}\n               onReplace={onReplace}\n            />\n         )}\n         themeName={theme}\n         disabled={workerState.isWorking}\n         testId=\"audio-description-edit-button\"\n         useMobileMenu={true}\n         mobileContextMenuZindex={cssConstants.zIndex.mobileContextMenu}\n         mobileContextMenuTitle={t('accessibility.modifyAudioDescription')}\n      />\n   );\n\n   return (\n      <Container data-test-id=\"audio-description-container\">\n         <TabHeader\n            leftLabel={t('accessibility.audioDescription.label')}\n            rightLabel={getFileName()}\n            hideRightLabelInMobileView={false}\n            button={AudioDescriptionId ? editButton : addButton}\n            allowButtonOverflow={true}\n         />\n         {workerState.hasError && (\n            <StyledWarning\n               id=\"error-message-delete\"\n               ref={errorEl}\n            >\n               {t('accessibility.audioDescription.deleteError')}\n            </StyledWarning>\n         )}\n         {isModalDisplayed && (\n            <UploadAudioDescriptionModal\n               onClose={onToggleModal}\n               isReplacing={!!AudioDescriptionId}\n            />\n         )}\n         {isAlertDisplayed && (\n            <AlertModalPortal\n               title={t('accessibility.audioDescription.alert.title')}\n               onClose={onToggleAlert}\n               onConfirm={onRemove}\n               confirmButtonType={TscButtonType.destructive}\n               confirmContent={t('general.delete')}\n               onDismiss={onToggleAlert}\n               dismissButtonType={TscButtonType.secondary}\n               dismissContent={t('general.cancel')}\n            >\n               {t('accessibility.audioDescription.alert.text')}\n            </AlertModalPortal>\n         )}\n      </Container>\n   );\n};\n\nexport interface IStateMappedProps {\n   Hash: string;\n   AudioDescriptionUrl: string;\n   AudioDescriptionId: string;\n}\n\nconst mapStatesToProps = (\n   // eslint-disable-next-line no-empty-pattern\n   {},\n   {Hash, AudioDescriptionUrl, AudioDescriptionId}: Partial<IStateMappedProps>\n): IStateMappedProps => ({Hash, AudioDescriptionUrl, AudioDescriptionId});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore)(AudioDescriptionsBase);\n","import React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {MenuItem} from '@techsmith/tsc-cloud-style-guide';\n\nexport interface IAudioDescriptionMenu {\n   url: string;\n   onRemove(): void;\n   onReplace(): void;\n}\n\nconst EditAudioDescriptionMenu: React.FC<IAudioDescriptionMenu> = ({url, onRemove, onReplace}) => {\n   const {t} = useTranslation();\n\n   return (\n      <>\n         <MenuItem\n            key=\"edit-audio-download\"\n            label={t('accessibility.audioDescription.menu.download')}\n            href={url}\n            testId=\"download-menu-item\"\n         />\n         <MenuItem\n            key=\"edit-audio-replace\"\n            label={t('accessibility.audioDescription.menu.replace')}\n            onClick={onReplace}\n            testId=\"replace-menu-item\"\n         />\n         <MenuItem\n            key=\"edit-audio-remove\"\n            label={t('accessibility.audioDescription.menu.delete')}\n            onClick={onRemove}\n            testId=\"delete-menu-item\"\n         />\n      </>\n   );\n};\n\nexport default EditAudioDescriptionMenu;","import React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {\n   ControlButton,\n   Glyphs,\n   TscButtonGlyphPlacement,\n   TscButtonType,\n   TscThemeNames\n} from '@techsmith/tsc-cloud-style-guide';\nimport styled from 'styled-components';\nimport TabHeader from '../TabHeader';\nimport AddCaptionTrackModal from '../../modals/AddCaptionTrackModal';\nimport DataTable, {ITableRowContent} from '../DataTable';\nimport {CaptioningState, CaptioningTypes, ICaptionData} from '../../../model/captionModels';\nimport captionApi from '../../../service/captionApi';\nimport {IWorkerState, SetupWorkerState} from '../../../model/workerState';\nimport dayjs from 'dayjs';\nimport {StyledWarning} from '../../util/StyledElements';\nimport CaptionsActions from './CaptionsActions';\nimport withMemoizedContexts from '../../../context/contextContainerHoC';\nimport {useTscTheme} from '../../../context/themeProvider';\nimport {mediaStore} from '../../../context/mediaProvider';\nimport {captionDataStore, updateCaptionDataState} from '../../../context/captionDataProvider';\n\nconst Container = styled.div<{theme: TscThemeNames}>`\n   margin-top: 16px;\n   padding: 0 16px;\n`;\n\nContainer.displayName = 'captions-container';\n\nconst AddCaptionButton = styled(ControlButton)`\n   width: 2rem;\n`;\n\nconst DataTableWrapper = styled.div`\n   .data-table-row, .data-table-header {\n      grid-template-columns: repeat(3, 1fr) 10rem;\n      grid-gap: 10px;\n   }\n\n   ul {\n      min-height: 3rem;\n      grid-template-columns: repeat( auto-fit, minmax(16.5rem, 1fr) );\n   }\n`;\n\nexport const CaptionsBase: React.FC<IWorkerState & IStateMappedProps> = ({isWorking: initialIsWorking, hasError: initialHasError, MediaId, CaptioningType, captionData}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [isModalDisplayed, setIsModalDisplayed] = React.useState(false);\n   const [workerState, setWorkerState] = SetupWorkerState(initialIsWorking, initialHasError);\n\n   React.useEffect(() => {\n      setWorkerState({isWorking: initialIsWorking, hasError: initialHasError});\n   }, [initialIsWorking, initialHasError]);\n\n   const fetchCaptioningStatus = async () => {\n      setWorkerState({isWorking: workerState.isWorking, hasError: false});\n      try {\n         updateCaptionDataState(await captionApi.getStatus(MediaId));\n         setWorkerState({isWorking: false, hasError: false});\n      } catch (e) {\n         setWorkerState({isWorking: false, hasError: true});\n      }\n   };\n\n   React.useEffect(() => {\n      void fetchCaptioningStatus();\n   }, []);\n\n   const captionsTableColumnLabels = [\n      t('accessibility.captions.status'),\n      t('accessibility.captions.lastModifiedBy'),\n      t('accessibility.captions.lastModified'),\n      t('accessibility.captions.actions')\n   ];\n\n   const getTranslatedCaptionState = (status: CaptioningState): string => {\n      switch (status) {\n         case CaptioningState.Unknown: {\n            return t('accessibility.captions.captionStatuses.unknown');\n         } case CaptioningState.None: {\n            return t('accessibility.captions.captionStatuses.none');\n         } case CaptioningState.Transcribing: {\n            return t('accessibility.captions.captionStatuses.transcribing');\n         } case CaptioningState.ReadyForEdit: {\n            return t('accessibility.captions.captionStatuses.readyForEdit');\n         } case CaptioningState.Editing: {\n            return t('accessibility.captions.captionStatuses.editing');\n         } case CaptioningState.Published: {\n            return t('accessibility.captions.captionStatuses.published');\n         } case CaptioningState.PendingApproval: {\n            return t('accessibility.captions.captionStatuses.pendingApproval');\n         } case CaptioningState.Error: {\n            return t('accessibility.captions.captionStatuses.error');\n         } default: {\n            return '';\n         }\n      }\n   };\n\n   const createTableRows = (): ITableRowContent[] => captionData.filter(c => c.CaptioningState !== CaptioningState.None).map((c, index) => ({\n      tableRow: [\n         getTranslatedCaptionState(c.CaptioningState),\n         CaptioningType === CaptioningTypes.AutoTranscribed && c.CaptioningState !== CaptioningState.Editing ? t('accessibility.captions.autoGenerated') : c.LastUpdatedByUser.DisplayName,\n         dayjs(c.LastUpdateDateTime).format('MM/DD/YYYY'),\n         <CaptionsActions\n            captionData={c}\n            setParentWorkerState={setWorkerState}\n            refreshCaptionData={fetchCaptioningStatus}\n            key={index}\n         />\n      ]\n   }));\n\n   const captionTracksLength = captionData.filter(c => c.CaptioningState !== CaptioningState.None).length;\n   const captionTrackLabel = captionTracksLength === 0 ? t('accessibility.captions.noCaptionTracks') :\n      captionTracksLength === 1 ? t('accessibility.captions.oneCaptionTrack') :\n         t('accessibility.captions.multipleCaptionTracks', {tracks: captionTracksLength});\n\n   const addCaptionsButton = (\n      <AddCaptionButton\n         title={t('accessibility.captions.addCaptionTrack')}\n         buttonType={TscButtonType.secondary}\n         themeName={theme}\n         onClick={() => setIsModalDisplayed(!isModalDisplayed)}\n         glyph={<Glyphs.Add16x16 />}\n         glyphPlacement={TscButtonGlyphPlacement.left}\n         disabled={workerState.isWorking || !!captionTracksLength}\n         width=\"13.5rem\"\n         testId=\"add-caption-button\"\n      />\n   );\n\n   return (\n      <Container\n         data-test-id=\"captions-container\"\n         theme={theme}\n      >\n         <TabHeader\n            leftLabel={t('accessibility.captions.label')}\n            rightLabel={captionTrackLabel}\n            hideRightLabelInMobileView={true}\n            button={addCaptionsButton}\n         />\n         {workerState.hasError && (\n            <StyledWarning>\n               {t('accessibility.captions.captionDataFetchError')}\n            </StyledWarning>\n         )}\n         {!!captionTracksLength && (\n            <DataTableWrapper>\n               <DataTable\n                  columnLabels={captionsTableColumnLabels}\n                  tableRows={createTableRows()}\n                  emptyStateLabel={t('accessibility.captions.noCaptionsText')}\n                  isLoading={workerState.isWorking}\n               />\n            </DataTableWrapper>\n         )}\n         {isModalDisplayed && (\n            <AddCaptionTrackModal\n               refreshCaptionData={fetchCaptioningStatus}\n               onClose={() => setIsModalDisplayed(!isModalDisplayed)}\n            />\n         )}\n      </Container>\n   );\n};\n\nexport interface IStateMappedProps {\n   MediaId: string;\n   CaptioningType: CaptioningTypes;\n   captionData: ICaptionData[];\n}\n\nconst mapStatesToProps = (\n   {isWorking, hasError}: IWorkerState,\n   {MediaId, CaptioningType}: Partial<IStateMappedProps>,\n   {captionData}: Partial<IStateMappedProps>\n): IStateMappedProps & IWorkerState => ({isWorking, hasError, MediaId, CaptioningType, captionData});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore, captionDataStore)(CaptionsBase);\n","import React, {Dispatch, SetStateAction, useState} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {ICaptionData, CaptioningState, CaptioningTypes} from '../../../model/captionModels';\nimport captionApi from '../../../service/captionApi';\nimport {IWorkerState} from '../../../model/workerState';\nimport transcriptionApi from '../../../service/transcriptionApi';\nimport {TscButtonType, Glyphs, ControlButton} from '@techsmith/tsc-cloud-style-guide';\nimport {getCaptionEditorUrl} from '../../../util/UrlUtil';\nimport DataTableActionButtonGroup from '../DataTableActionButtonGroup';\nimport withMemoizedContexts from '../../../context/contextContainerHoC';\nimport {useTscTheme} from '../../../context/themeProvider';\nimport config from '../../../service/config';\nimport {UserPermissions} from '../../../constants/Constants';\nimport {mediaStore} from '../../../context/mediaProvider';\nimport {AlertModalPortal} from '../../util/ModalPortalHelper';\n\nenum alertTypes {\n   cancel,\n   delete\n}\n\nexport const CaptionsActionsBase: React.FC<ICaptionsActionsProps & IStateMappedProps> = ({captionData, setParentWorkerState, refreshCaptionData, MediaId, Hash, XmpId}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [isAlertDisplayed, setAlertDisplayed] = useState(false);\n   const [alertType, setAlertType] = useState(alertTypes.cancel);\n\n   const onPublishClick = async () => {\n      try {\n         setParentWorkerState({isWorking: true, hasError: false});\n         await captionApi.publishCaptionTrack(MediaId);\n         window.location.reload();\n      } catch {\n         setParentWorkerState({isWorking: false, hasError: true});\n      }\n   };\n\n   const onCancelClick = () => {\n      setAlertType(alertTypes.cancel);\n      setAlertDisplayed(true);\n   };\n\n   const onApproveClick = async () => {\n      try {\n         setParentWorkerState({isWorking: true, hasError: false});\n         if (captionData.CaptioningType === CaptioningTypes.ThirdParty) {\n            await transcriptionApi.approveThirdPartyTranscription(Hash);\n         }\n         refreshCaptionData();\n      } catch {\n         setParentWorkerState({isWorking: false, hasError: true});\n      }\n   };\n\n   const cancelTranscription = async () => {\n      try {\n         setParentWorkerState({isWorking: true, hasError: false});\n         if (captionData.CaptioningType === CaptioningTypes.ThirdParty) {\n            await transcriptionApi.cancelThirdPartyTranscription(Hash);\n         } else {\n            await transcriptionApi.cancelAutomatedTranscription(Hash);\n         }\n         await captionApi.deleteCaptionTrack(MediaId);\n         refreshCaptionData();\n      } catch {\n         setParentWorkerState({isWorking: false, hasError: true});\n      }\n   };\n\n   const onDeleteClick = () => {\n      setAlertType(alertTypes.delete);\n      setAlertDisplayed(true);\n   };\n\n   const deleteCaptionTrack = async () => {\n      try {\n         setParentWorkerState({isWorking: true, hasError: false});\n         await captionApi.deleteCaptionTrack(MediaId);\n         if (captionData.CaptioningState === CaptioningState.Published || XmpId) {\n            window.location.reload();\n         } else {\n            refreshCaptionData();\n         }\n      } catch {\n         setParentWorkerState({isWorking: false, hasError: true});\n      }\n   };\n\n   const cancelRemoveAlertModal: React.JSX.Element =\n      (\n         <AlertModalPortal\n            title={t(alertType === alertTypes.cancel ?\n               'accessibility.captions.alert.cancel.title' :\n               'accessibility.captions.alert.delete.title')}\n            onClose={() => setAlertDisplayed(false)}\n            onConfirm={alertType === alertTypes.cancel ? cancelTranscription : deleteCaptionTrack}\n            confirmButtonType={TscButtonType.destructive}\n            confirmContent={t(alertType === alertTypes.cancel ?\n               'accessibility.captions.alert.cancel.confirmButtonText' :\n               'accessibility.captions.alert.delete.confirmButtonText')}\n            onDismiss={() => setAlertDisplayed(false)}\n            dismissButtonType={TscButtonType.secondary}\n            dismissContent={t('general.back')}\n            // eslint-disable-next-line react/no-children-prop\n            children={t(alertType === alertTypes.cancel ?\n               'accessibility.captions.alert.cancel.message' :\n               'accessibility.captions.alert.delete.message')}\n         />\n      );\n\n   const enablePublishOption: boolean = captionData.CaptioningState === CaptioningState.ReadyForEdit ||\n      captionData.CaptioningState === CaptioningState.Editing;\n\n   const enableEditOption: boolean = captionData.CaptioningState === CaptioningState.ReadyForEdit ||\n      captionData.CaptioningState === CaptioningState.Editing ||\n      captionData.CaptioningState === CaptioningState.Published;\n\n   const showApproveOption: boolean = captionData.CaptioningState === CaptioningState.PendingApproval;\n   const enableApproveOption: boolean = captionData.CaptioningState === CaptioningState.PendingApproval && config.userPermissions.includes(UserPermissions.captionAdmin);\n\n   const enableCancelOption: boolean = captionData.CaptioningState === CaptioningState.Transcribing ||\n      captionData.CaptioningState === CaptioningState.PendingApproval;\n\n   return (\n      <>\n         <DataTableActionButtonGroup\n            primaryButton={(\n               <ControlButton\n                  onClick={onPublishClick}\n                  buttonType={TscButtonType.primary}\n                  themeName={theme}\n                  glyph={<Glyphs.Publish16x16 />}\n                  title={t('accessibility.captions.publish')}\n                  disabled={!enablePublishOption}\n                  testId=\"captions-actions-publish-button\"\n                  label={t('accessibility.captions.publish')}\n               />\n            )}\n            otherButtons={[\n               showApproveOption ? (\n                  <ControlButton\n                     onClick={onApproveClick}\n                     buttonType={TscButtonType.secondary}\n                     themeName={theme}\n                     glyph={<Glyphs.ThumbsUp16x16 />}\n                     title={t('accessibility.captions.approve')}\n                     width=\"2rem\"\n                     testId=\"captions-actions-approve-button\"\n                     key=\"captions-actions-approve-button\"\n                     disabled={!enableApproveOption}\n                  />\n               ) : (\n                  <ControlButton\n                     href={getCaptionEditorUrl(Hash)}\n                     buttonType={TscButtonType.secondary}\n                     themeName={theme}\n                     glyph={<Glyphs.Edit16x16 />}\n                     title={t('accessibility.captions.edit')}\n                     width=\"2rem\"\n                     disabled={!enableEditOption}\n                     testId=\"captions-actions-edit-button\"\n                     key=\"captions-actions-edit-button\"\n                  />\n               ),\n               enableCancelOption ? (\n                  <ControlButton\n                     onClick={onCancelClick}\n                     buttonType={TscButtonType.secondary}\n                     themeName={theme}\n                     glyph={<Glyphs.Close16x16 />}\n                     title={t('accessibility.captions.cancel')}\n                     width=\"2rem\"\n                     testId=\"captions-actions-cancel-button\"\n                     key=\"captions-actions-cancel-button\"\n                  />\n               ) : (\n                  <ControlButton\n                     onClick={onDeleteClick}\n                     buttonType={TscButtonType.secondary}\n                     themeName={theme}\n                     glyph={<Glyphs.Delete16x16 />}\n                     title={t('accessibility.captions.delete')}\n                     width=\"2rem\"\n                     testId=\"captions-actions-delete-button\"\n                     key=\"captions-actions-delete-button\"\n                  />\n               )\n            ]}\n         />\n         {isAlertDisplayed && cancelRemoveAlertModal}\n      </>\n   );\n};\n\nexport interface ICaptionsActionsProps {\n   captionData: ICaptionData;\n   setParentWorkerState: Dispatch<SetStateAction<IWorkerState>>;\n   refreshCaptionData: () => void;\n}\n\nexport interface IStateMappedProps {\n   MediaId: string;\n   Hash: string;\n   XmpId: string;\n}\n\nconst mapStatesToProps = (\n   {captionData, setParentWorkerState, refreshCaptionData}: ICaptionsActionsProps,\n   {MediaId, Hash, XmpId}: Partial<IStateMappedProps>\n): IStateMappedProps & ICaptionsActionsProps => ({captionData, setParentWorkerState, refreshCaptionData, MediaId, Hash, XmpId});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore)(CaptionsActionsBase);\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport {TscStyles, TscThemeName, TscThemeNames} from '@techsmith/tsc-cloud-style-guide';\nimport {useTranslation} from 'react-i18next';\nimport cssConstants from '../../../constants/cssConstants';\nimport {IMediaAnalyticsModel} from '../../../model/mediaAnalyticsModel';\nimport {IConversationData} from '../../../model/conversationModel';\nimport withMemoizedContexts from '../../../context/contextContainerHoC';\nimport {conversationsStore} from '../../../context/conversationsProvider';\nimport {useTscTheme} from '../../../context/themeProvider';\nimport {mediaStore} from '../../../context/mediaProvider';\n\nexport const AnalyticsSegmentWrapper = styled.div`\n   display: flex;\n   justify-content: space-between;\n   margin: 0;\n   padding: 0;\n\n   @media screen and (max-width: ${cssConstants.tabBreakpoint}px) {\n      justify-content: center;\n      flex-direction: column;\n   }\n`;\n\nconst SegmentDiv = styled.li<{theme: TscThemeNames}>`\n   padding: 0.25rem;\n   display: flex;\n   text-align: center;\n   flex-basis: 25%;\n   height: 5rem;\n   flex-direction: column;\n   align-items: center;\n   justify-content: center;\n   color: ${prop => prop.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.medium};\n   flex-grow: 1;\n`;\n\nconst SegmentHalf = styled.ul<{theme: TscThemeNames}>`\n   display: flex;\n   flex: 1 0 50%;\n   justify-content: space-evenly;\n   padding: 0;\n   list-style-type: none;\n   @media screen and (max-width: ${cssConstants.tabBreakpoint}px) {\n      flex-basis: auto;\n\n      &:first-child {\n         border-bottom: 1px solid ${prop => prop.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.mediumDark : TscStyles.color.ui.dawn.dark};\n      }\n   }\n`;\n\nconst SegmentData = styled.div`\n   font-size: 2rem;\n`;\n\nconst SegmentLabel = styled.div`\n   font-weight: 600;\n   font-size: 0.875rem;\n`;\n\nconst SegmentDivWithRightBorder = styled(SegmentDiv)`\n   border-right: 1px solid ${prop => prop.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.mediumDark : TscStyles.color.ui.dawn.dark};\n`;\n\nconst SegmentDivWithWidthDependentBorder = styled(SegmentDiv)`\n   border-right: 1px solid ${prop => prop.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.mediumDark : TscStyles.color.ui.dawn.dark};\n\n   @media screen and (max-width: ${cssConstants.tabBreakpoint}px) {\n      border-right: none;\n   }\n`;\n\nexport const AnalyticsSegmentDataBase: React.FC<IAnalyticsSegmentDataProps & IStateMappedProps> = ({analytics, conversations, ViewCount}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n\n   const getCompletionRate = (): number => {\n      const numOfViewers = analytics.length;\n      const listOfViewPercentages = analytics.map(a => a.PercentViewed);\n      const sumOfViewPercentages = listOfViewPercentages.reduce((total, currentVal) => total + currentVal, 0);\n\n      return Math.round(((sumOfViewPercentages / numOfViewers) * 1000) / 10) || 0;\n   };\n\n   const getCommentsCount = (): number => {\n      const commentCounts = conversations && conversations.map(conversation => conversation.CommentCount);\n      return commentCounts ? commentCounts.reduce((total, currentVal) => total + currentVal, 0) : 0;\n   };\n\n   return (\n      <AnalyticsSegmentWrapper data-test-id=\"analytics-segment-wrapper\">\n         <SegmentHalf theme={theme}>\n            <SegmentDivWithRightBorder theme={theme}>\n               <SegmentData>\n                  {ViewCount}\n               </SegmentData>\n               <SegmentLabel>\n                  {t('analytics.viewsLabel')}\n               </SegmentLabel>\n            </SegmentDivWithRightBorder>\n            <SegmentDivWithWidthDependentBorder theme={theme}>\n               <SegmentData>\n                  {analytics.length}\n               </SegmentData>\n               <SegmentLabel>\n                  {t('analytics.viewersLabel')}\n               </SegmentLabel>\n            </SegmentDivWithWidthDependentBorder>\n         </SegmentHalf>\n         <SegmentHalf theme={theme}>\n            <SegmentDivWithRightBorder theme={theme}>\n               <SegmentData>\n                  {getCommentsCount()}\n               </SegmentData>\n               <SegmentLabel>\n                  {t('analytics.commentsLabel')}\n               </SegmentLabel>\n            </SegmentDivWithRightBorder>\n            <SegmentDiv theme={theme}>\n               <SegmentData>\n                  {getCompletionRate()}\n                  %\n               </SegmentData>\n               <SegmentLabel>\n                  {t('analytics.completionRateLabel')}\n               </SegmentLabel>\n            </SegmentDiv>\n         </SegmentHalf>\n      </AnalyticsSegmentWrapper>\n   );\n};\n\nexport interface IAnalyticsSegmentDataProps {\n   analytics: IMediaAnalyticsModel[];\n}\n\nexport interface IStateMappedProps {\n   conversations: IConversationData[];\n   ViewCount: number;\n}\n\nconst mapStatesToProps = (\n   {analytics}: IAnalyticsSegmentDataProps,\n   {conversations}: Partial<IStateMappedProps>,\n   {ViewCount}: Partial<IStateMappedProps>\n): IAnalyticsSegmentDataProps & IStateMappedProps => ({analytics, conversations, ViewCount});\n\nexport default withMemoizedContexts(mapStatesToProps, conversationsStore, mediaStore)(AnalyticsSegmentDataBase);\n","import React, {useEffect, useState} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport TabContentWrapper from '../TabContentWrapper';\nimport styled from 'styled-components';\nimport {PopoverButton, Glyphs, TscPopoverOrigin, TscButtonType, TscButtonGlyphPlacement, TscStyles, ControlButton, TscThemeName, TscThemeNames} from '@techsmith/tsc-cloud-style-guide';\nimport {IBehaviorFilterEnum, IMemberDetailsModel, ICollectionModel} from '../../../model/appModel';\nimport AnalyticsSegmentData from './AnalyticsSegmentData';\nimport cssConstants from '../../../constants/cssConstants';\nimport UserBehaviorData from './UserBehaviorData';\nimport Constants, {BehaviorFilters} from '../../../constants/Constants';\nimport CollectionsMenu from './CollectionsMenu';\nimport BehaviorFilterMenu from './BehaviorFilterMenu';\nimport quizApi from '../../../service/quizApi';\nimport {IWorkerState} from '../../../model/workerState';\nimport {analyticsDataStore, updateAnalyticsDataFromServer} from '../../../context/analyticsDataProvider';\nimport {IMediaAnalyticsModel} from '../../../model/mediaAnalyticsModel';\nimport withMemoizedContexts from '../../../context/contextContainerHoC';\nimport {useTscTheme} from '../../../context/themeProvider';\nimport {collectionsStore} from '../../../context/collectionsProvider';\nimport {mediaStore} from '../../../context/mediaProvider';\nimport config from '../../../service/config';\n\nconst AnalyticsHeader = styled.h2<{theme: TscThemeNames}>`\n   font-size: 1.125rem;\n   font-weight: 600;\n   margin: 0 0.5rem 0 0;\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.dark};\n`;\n\nconst AnalyticsHeaderWrapper = styled.div`\n   display: flex;\n   flex-direction: row;\n   align-items: center;\n   padding-bottom: .5rem;\n`;\n\nconst HeaderRightSection = styled.div`\n   display: flex;\n   align-self: flex-end;\n   flex: 0 1 auto;\n   min-width: 0rem;\n\n   @media screen and (max-width: ${cssConstants.contentBreakpoint}px) {\n      button:nth-child(2) span:nth-child(2) {\n         display: none;\n      }\n   }\n`;\n\nconst UserBehaviorHeaderWrapper = styled(AnalyticsHeaderWrapper) <{theme: TscThemeNames}>`\n   justify-content: space-between;\n   border-bottom: 1px solid ${prop => prop.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.mediumDark : TscStyles.color.ui.dawn.dark};\n   margin: 1rem 0 .875rem 0;\n`;\n\nexport const AnalyticsTabBase: React.FC<IWorkerState & IStateMappedProps> = ({isWorking: initialIsWorking, hasError: initialHasError, customErrorMessage: initialCustomErrorMessage, analyticsData, sidebarCollections, CollectionIds, MediaId, Hash, ViewCount}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [state, setState] = useState({\n      isWorking: initialIsWorking,\n      hasError: initialHasError,\n      customErrorMessage: initialCustomErrorMessage,\n      selectedCollection: null,\n      selectedBehaviorFilter: {selectedFilter: BehaviorFilters.all}\n   } as IAnalyticsTabState);\n\n   const updateState = (updatedValues: Partial<IAnalyticsTabState>): void => {\n      setState(prevState => Object.assign({}, prevState, updatedValues));\n   };\n\n   useEffect(() => {\n      if (state.selectedCollection && CollectionIds.findIndex(hash => hash === state.selectedCollection.Id) === -1) {\n         updateState({selectedCollection: null});\n      }\n   }, [CollectionIds, state.selectedCollection]);\n\n   const getFilteredAnalyticsByCompletion = (analytics: IMediaAnalyticsModel[]): IMediaAnalyticsModel[] =>\n      state.selectedBehaviorFilter.selectedFilter === BehaviorFilters.completed ?\n         analytics.filter(a => a.PercentViewed === 1) :\n         analytics.filter(a => a.PercentViewed > 0 && a.PercentViewed < 1);\n\n   const getFilteredAnalyticsBySelectedCollection = (): IMediaAnalyticsModel[] =>\n      state.selectedCollection.MemberDetails.map((member: IMemberDetailsModel, index: number) =>\n         analyticsData.find(data => data.TechSmithId === member.TechSmithId) ||\n            {\n               FirstName: '',\n               LastName: '',\n               DisplayName: member.DisplayName || state.selectedCollection.Members[index] || t('analytics.anonymousUser'),\n               PercentViewed: 0,\n               HasCompletedView: false,\n               ViewCount: 0,\n               TechSmithId: member.TechSmithId\n            } as IMediaAnalyticsModel\n      );\n\n   const getAnalytics = async () => {\n      analyticsData || updateState({isWorking: true, hasError: false});\n      await updateAnalyticsDataFromServer(MediaId);\n   };\n\n   useEffect(() => {\n      if (!config.featureSwitches.DisableAnalyticsAndQuizEditing) {\n         void getAnalytics();\n      }\n   }, [/* This should remain empty because we only want this to trigger on initial load */]);\n\n   useEffect(() => {\n      analyticsData && updateState({isWorking: false, hasError: false});\n   }, [analyticsData]);\n\n   const onDownloadClick = async () => {\n      updateState({isWorking: true, hasError: false});\n\n      try {\n         await quizApi.downloadViewingAnalyticsData(Hash);\n         updateState({isWorking: false, hasError: false});\n      } catch (e) {\n         if (e?.status === Constants.statusCodes.notFound) {\n            updateState({isWorking: false, hasError: true, customErrorMessage: t('analytics.errorAnalyticsNotFound')});\n         } else {\n            updateState({isWorking: false, hasError: true, customErrorMessage: null});\n         }\n      }\n   };\n\n   const setBehaviorFilter = (filter: BehaviorFilters) => {\n      updateState({selectedBehaviorFilter: {selectedFilter: filter}});\n   };\n\n   const setCollectionFilter = (collection: ICollectionModel) => {\n      updateState({selectedCollection: collection});\n   };\n\n   const filteredAnalyticsBySelectedCollection = state.selectedCollection ? getFilteredAnalyticsBySelectedCollection() : analyticsData || [];\n   const filteredAnalyticsByCompletion = state.selectedBehaviorFilter.selectedFilter !== BehaviorFilters.all ? getFilteredAnalyticsByCompletion(filteredAnalyticsBySelectedCollection) : filteredAnalyticsBySelectedCollection;\n   const showCollectionsDropDownLabel = state.selectedCollection ?\n      t('analytics.showCollectionsDropDown', {collection: state.selectedCollection.Name}) :\n      t('analytics.showCollectionsDropDown', {collection: t('analytics.allViewers')});\n\n   return (\n      <TabContentWrapper\n         showSpinner={state.isWorking}\n         showError={state.hasError}\n         customErrorMessage={state.customErrorMessage}\n      >\n         <AnalyticsHeaderWrapper>\n            <AnalyticsHeader theme={theme}>\n               {t('analytics.segmentHeader')}\n            </AnalyticsHeader>\n            <PopoverButton\n               buttonGlyph={<Glyphs.CaratDown16x16 />}\n               glyphPlacement={TscButtonGlyphPlacement.right}\n               origin={TscPopoverOrigin.bottomLeft}\n               popoverMenu={<CollectionsMenu setFilter={setCollectionFilter} />}\n               themeName={theme}\n               showArrow={false}\n               closeMenuOnClick={true}\n               buttonTitle={showCollectionsDropDownLabel}\n               buttonText={showCollectionsDropDownLabel}\n               testId=\"analytics-collection-drop-down\"\n               buttonType={TscButtonType.secondary}\n               disabled={sidebarCollections.filter(collection => CollectionIds.find(hash => hash === collection.Id)).length === 0}\n               style={{display: 'flex'}}\n               useMobileMenu={true}\n               popoverMenuMaxWidth=\"30rem\"\n               popoverMenuMaxHeight=\"none\"\n               mobileContextMenuZindex={cssConstants.zIndex.mobileContextMenu}\n               mobileContextMenuTitle={t('analytics.segmentHeader')}\n            />\n         </AnalyticsHeaderWrapper>\n         <AnalyticsSegmentData analytics={filteredAnalyticsBySelectedCollection} />\n         <UserBehaviorHeaderWrapper theme={theme}>\n            <AnalyticsHeader theme={theme}>\n               {t('analytics.behaviorHeader')}\n            </AnalyticsHeader>\n            <HeaderRightSection>\n               <PopoverButton\n                  buttonGlyph={<Glyphs.CaratDown16x16 />}\n                  glyphPlacement={TscButtonGlyphPlacement.right}\n                  origin={TscPopoverOrigin.bottom}\n                  popoverMenu={<BehaviorFilterMenu setFilter={setBehaviorFilter} />}\n                  themeName={theme}\n                  showArrow={false}\n                  closeMenuOnClick={true}\n                  buttonTitle={t('analytics.showCollectionsDropDown', {collection: state.selectedBehaviorFilter.selectedFilter})}\n                  buttonText={t('analytics.showCollectionsDropDown', {collection: state.selectedBehaviorFilter.selectedFilter})}\n                  testId=\"analytics-completion-filter-drop-down\"\n                  buttonType={TscButtonType.tertiary}\n                  disabled={!analyticsData?.length}\n               />\n               <ControlButton\n                  label={t('analytics.download')}\n                  buttonType={TscButtonType.tertiary}\n                  glyph={<Glyphs.Download16x16 />}\n                  disabled={ViewCount === 0}\n                  themeName={theme}\n                  onClick={onDownloadClick}\n                  testId=\"reset-data-modal-download-button\"\n               />\n            </HeaderRightSection>\n         </UserBehaviorHeaderWrapper>\n         <UserBehaviorData\n            analytics={filteredAnalyticsByCompletion}\n            selectedCollection={state.selectedCollection}\n         />\n      </TabContentWrapper>\n   );\n};\n\nexport interface IAnalyticsTabState extends IWorkerState {\n   selectedCollection: ICollectionModel;\n   selectedBehaviorFilter: IBehaviorFilterEnum;\n}\n\nexport interface IStateMappedProps {\n   analyticsData: IMediaAnalyticsModel[];\n   sidebarCollections: ICollectionModel[];\n   CollectionIds: string[];\n   MediaId: string;\n   Hash: string;\n   ViewCount: number;\n}\n\nconst mapStatesToProps = (\n   {isWorking, hasError, customErrorMessage}: IWorkerState,\n   {analyticsData}: Partial<IStateMappedProps>,\n   {sidebarCollections}: Partial<IStateMappedProps>,\n   {CollectionIds, MediaId, Hash, ViewCount}: Partial<IStateMappedProps>\n): IWorkerState & IStateMappedProps => ({isWorking, hasError, customErrorMessage, analyticsData, sidebarCollections, CollectionIds, MediaId, Hash, ViewCount});\n\nexport default withMemoizedContexts(mapStatesToProps, analyticsDataStore, collectionsStore, mediaStore)(AnalyticsTabBase);\n","import * as React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {BehaviorFilters} from '../../../constants/Constants';\nimport {MenuItem} from '@techsmith/tsc-cloud-style-guide';\n\nconst BehaviorFilterMenu: React.FC<IBehaviorFilterMenuProps> = ({setFilter}) => {\n   const {t} = useTranslation();\n\n   return (\n      <>\n         <MenuItem\n            key={BehaviorFilters.all}\n            label={t('analytics.viewerStatus.all')}\n            onClick={() => setFilter(BehaviorFilters.all)}\n            testId=\"all-filter\"\n         />\n         <MenuItem\n            key={BehaviorFilters.partial}\n            label={t('analytics.viewerStatus.partial')}\n            onClick={() => setFilter(BehaviorFilters.partial)}\n            testId=\"partial-filter\"\n         />\n         <MenuItem\n            key={BehaviorFilters.completed}\n            label={t('analytics.viewerStatus.completed')}\n            onClick={() => setFilter(BehaviorFilters.completed)}\n            testId=\"completed-filter\"\n         />\n      </>\n   );\n};\n\nexport default BehaviorFilterMenu;\n\nexport interface IBehaviorFilterMenuProps {\n   setFilter(filter: BehaviorFilters): void;\n}","import * as React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {ICollectionModel} from '../../../model/appModel';\nimport {MenuItem} from '@techsmith/tsc-cloud-style-guide';\nimport withMemoizedContexts from '../../../context/contextContainerHoC';\nimport {collectionsStore} from '../../../context/collectionsProvider';\nimport {mediaStore} from '../../../context/mediaProvider';\n\nexport const CollectionsMenuBase: React.FC<ICollectionsMenuProps & IStateMappedProps> = ({setFilter, collections, CollectionIds}) => {\n   const {t} = useTranslation();\n\n   return (\n      <>\n         <MenuItem\n            key={`collections-menu-item-${0}`}\n            label={t('analytics.allViewers')}\n            onClick={() => setFilter(null)}\n            testId=\"collections-menu-item-all-viewers\"\n         />\n         {collections.filter(c => CollectionIds.find(id => id === c.Id)).map((collection, index) => (\n            <MenuItem\n               key={`collections-menu-item-${index + 1}`}\n               label={collection.Name}\n               onClick={() => setFilter(collection)}\n               testId=\"collections-menu-item\"\n            />\n         ))}\n      </>\n   );\n};\n\nexport interface ICollectionsMenuProps {\n   setFilter(collection: ICollectionModel): void;\n}\n\nexport interface IStateMappedProps {\n   collections: ICollectionModel[];\n   CollectionIds: string[];\n}\n\nconst mapStatesToProps = (\n   {setFilter}: ICollectionsMenuProps,\n   {collections}: Partial<IStateMappedProps>,\n   {CollectionIds}: Partial<IStateMappedProps>\n): ICollectionsMenuProps & IStateMappedProps => ({setFilter, collections, CollectionIds});\n\nexport default withMemoizedContexts(mapStatesToProps, collectionsStore, mediaStore)(CollectionsMenuBase);\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport {TscStyles, TscThemeName, TscThemeNames} from '@techsmith/tsc-cloud-style-guide';\nimport {useTranslation} from 'react-i18next';\nimport {ICollectionModel} from '../../../model/appModel';\nimport {IMediaAnalyticsModel} from '../../../model/mediaAnalyticsModel';\nimport {useTscTheme} from '../../../context/themeProvider';\n\nconst UserBehaviorWrapper = styled.div`\n   display: flex;\n   justify-content: space-between;\n   min-height: 5rem;\n   overflow-x: auto;\n`;\n\nconst DoubleWideColumnWrapper = styled.td`\n   flex: 2 1 50%;\n   margin-right: .75rem;\n   white-space: nowrap;\n   overflow: hidden;\n   text-overflow: ellipsis;\n`;\n\nconst SingleWideColumnWrapper = styled.td`\n   flex: 1 0 25%;\n   margin-right: .75rem;\n`;\n\nconst ColumnLabel = styled.div<{theme: TscThemeNames}>`\n   font-weight: 600;\n   color: ${prop => prop.theme === TscThemeName.dusk ? TscStyles.color.text.lightMedium : TscStyles.color.text.mediumDark};\n   font-size: 0.875rem;\n`;\n\nexport const ViewerWrapper = styled.tr`\n   margin-top: .75rem;\n   list-style-type: none;\n   display: flex;\n`;\n\nconst EmptyData = styled.div`\n   display: flex;\n   flex: 1 0 auto;\n   font-style: italic;\n   justify-content: center;\n   align-items: center;\n`;\n\nconst ColumnLabelWrapper = styled.th`\n   text-align: start;\n   display: flex;\n`;\n\nconst UserAnalyticsList = styled.div`\n   display: flex;\n`;\n\nconst DataTableWrapper = styled.div`\n   display: flex;\n   flex: 1 0 auto;\n   flex-direction: column;\n`;\n\nconst UserDataTable = styled.table`\n   display: flex;\n   flex: 1 0 auto;\n   flex-direction: column;\n   padding: 0;\n   margin: 0;\n`;\n\nexport const UserBehaviorDataBase: React.FC<IUserBehaviorDataProps> = ({analytics, selectedCollection}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const analyticsIds: string[] = analytics.map(a => a.TechSmithId);\n\n   const getViewerPercentWatched = (viewer: IMediaAnalyticsModel): number => Math.round(viewer.PercentViewed * 1000) / 10;\n\n   const getViewerStatus = (viewer: IMediaAnalyticsModel): string => {\n      const percentWatched = getViewerPercentWatched(viewer);\n\n      if (percentWatched === 0) {\n         return t('analytics.viewerStatus.notStarted');\n      } else if (percentWatched === 100) {\n         return t('analytics.viewerStatus.completed');\n      }\n      return t('analytics.viewerStatus.started');\n   };\n\n   const getSortedViewers = (viewers: IMediaAnalyticsModel[]) => viewers.sort((firstViewer: IMediaAnalyticsModel, secondViewer: IMediaAnalyticsModel) => {\n      const firstViewerName = firstViewer.DisplayName ? firstViewer.DisplayName : `${firstViewer.FirstName} ${firstViewer.LastName}`;\n      const secondViewerName = secondViewer.DisplayName ? secondViewer.DisplayName : `${secondViewer.FirstName} ${secondViewer.LastName}`;\n\n      return firstViewerName.toLowerCase() < secondViewerName.toLowerCase() ? -1 : 1;\n   });\n\n   const viewerIds = selectedCollection?.MemberDetails.filter(member => analyticsIds.find(id => id === member.TechSmithId)).map(member => member.TechSmithId);\n   const unsortedViewers = selectedCollection ? analytics.filter(user => viewerIds.find(id => id === user.TechSmithId)) : analytics;\n   const sortedViewers = getSortedViewers(unsortedViewers);\n   const emptyState = (\n      <EmptyData>\n         {t('analytics.emptyDataState')}\n      </EmptyData>\n   );\n   const nonEmptyState = (\n      <DataTableWrapper>\n         <ColumnLabelWrapper>\n            <DoubleWideColumnWrapper>\n               <ColumnLabel theme={theme}>\n                  {t('analytics.viewerLabel')}\n               </ColumnLabel>\n            </DoubleWideColumnWrapper>\n            <SingleWideColumnWrapper>\n               <ColumnLabel theme={theme}>\n                  {t('analytics.statusLabel')}\n               </ColumnLabel>\n            </SingleWideColumnWrapper>\n            <SingleWideColumnWrapper>\n               <ColumnLabel theme={theme}>\n                  {t('analytics.completionLabel')}\n               </ColumnLabel>\n            </SingleWideColumnWrapper>\n         </ColumnLabelWrapper>\n         <UserAnalyticsList>\n            <UserDataTable>\n               {sortedViewers.map((viewer, index) =>\n                  (\n                     <ViewerWrapper\n                        data-test-id=\"viewer-wrapper\"\n                        key={index}\n                     >\n                        <DoubleWideColumnWrapper>\n                           {viewer.DisplayName ? viewer.DisplayName : `${viewer.FirstName} ${viewer.LastName}`}\n                        </DoubleWideColumnWrapper>\n                        <SingleWideColumnWrapper>\n                           {getViewerStatus(viewer)}\n                        </SingleWideColumnWrapper>\n                        <SingleWideColumnWrapper>\n                           {t('analytics.percentage', {value: getViewerPercentWatched(viewer).toString()})}\n                        </SingleWideColumnWrapper>\n                     </ViewerWrapper>\n                  )\n               )}\n            </UserDataTable>\n         </UserAnalyticsList>\n      </DataTableWrapper>\n   );\n\n   return (\n      <UserBehaviorWrapper data-test-id=\"user-behavior-data\">\n         {!analytics.length ? emptyState : nonEmptyState}\n      </UserBehaviorWrapper>\n   );\n};\n\nexport interface IUserBehaviorDataProps {\n   analytics: IMediaAnalyticsModel[];\n   selectedCollection: ICollectionModel;\n}\n\nexport default React.memo(UserBehaviorDataBase);\n","import React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {IConversationData} from '../../../model/conversationModel';\nimport conversationApi from '../../../service/conversationApi';\nimport {MenuItem} from '@techsmith/tsc-cloud-style-guide';\nimport withMemoizedContexts from '../../../context/contextContainerHoC';\nimport {mediaStore} from '../../../context/mediaProvider';\n\nexport const ConversationActionMenuBase: React.FC<IConversationActionMenuProps & IStateMappedProps> = ({conversation, setError, setShowClearCommentsModal, Hash}) => {\n   const {t} = useTranslation();\n\n   const onDownloadCommentsClick = async () => {\n      try {\n         await conversationApi.downloadSingleConversationData(Hash, conversation.ConversationHash);\n      } catch {\n         setError();\n      }\n   };\n\n   return (\n      <>\n         <MenuItem\n            key=\"download\"\n            onClick={onDownloadCommentsClick}\n            label={t('conversations.actions.download')}\n            testId=\"DownloadMenuItem\"\n         />\n         <MenuItem\n            key=\"clear-comments\"\n            onClick={() => setShowClearCommentsModal(true)}\n            label={t('conversations.actions.clearComments')}\n            testId=\"ClearCommentsMenuItem\"\n         />\n      </>\n   );\n};\n\nexport interface IConversationActionMenuProps {\n   conversation: IConversationData;\n   setError: () => void;\n   setShowClearCommentsModal: (showModal: boolean) => void;\n}\n\nexport interface IStateMappedProps {\n   Hash: string;\n}\n\nconst mapStatesToProps = (\n   {conversation, setError, setShowClearCommentsModal}: IConversationActionMenuProps,\n   {Hash}: Partial<IStateMappedProps>\n): IStateMappedProps & IConversationActionMenuProps => ({conversation, setError, setShowClearCommentsModal, Hash});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore)(ConversationActionMenuBase);\n","import React, {useState} from 'react';\nimport {TscPopoverOrigin, TscButtonType, Glyphs, ControlButton} from '@techsmith/tsc-cloud-style-guide';\nimport ConversationActionMenu from './ConversationActionMenu';\nimport {IConversationData} from '../../../model/conversationModel';\nimport {useTranslation} from 'react-i18next';\nimport ShareLinkModal from '../../modals/ShareLinkModal';\nimport CreateConversationModal from '../../modals/CreateConversationModal';\nimport ClearConversationModal from '../../modals/ClearConversationModal';\nimport config from '../../../service/config';\nimport TestablePopoverButton from '../../util/TestablePopoverButton';\nimport Constants from '../../../constants/Constants';\nimport DataTableActionButtonGroup from '../DataTableActionButtonGroup';\nimport cssConstants from '../../../constants/cssConstants';\nimport withMemoizedContexts from '../../../context/contextContainerHoC';\nimport {useTscTheme} from '../../../context/themeProvider';\nimport {mediaStore} from '../../../context/mediaProvider';\n\nexport const ConversationActionsButtonGroupBase: React.FC<IConversationActionsButtonGroupProps & IStateMappedProps> = ({conversation, onDownloadError, Hash}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [showDeleteConversationModal, setShowDeleteConversationModal] = useState(false);\n   const [showCopyConversationLinkModal, setShowCopyConversationLinkModal] = useState(false);\n   const [showRenameConversationModal, setShowRenameConversationModal] = useState(false);\n   const [showClearCommentsModal, setShowClearCommentsModal] = useState(false);\n\n   return (\n      <>\n         <DataTableActionButtonGroup\n            primaryButton={(\n               <ControlButton\n                  onClick={() => setShowCopyConversationLinkModal(true)}\n                  buttonType={TscButtonType.primary}\n                  themeName={theme}\n                  label={t('conversations.actions.getLink')}\n                  title={t('conversations.actions.getLink')}\n                  testId=\"share-conversation-button\"\n                  glyph={<Glyphs.Share16x16 />}\n               />\n            )}\n            otherButtons={[\n               <TestablePopoverButton\n                  origin={TscPopoverOrigin.top}\n                  buttonType={TscButtonType.secondary}\n                  buttonGlyph={<Glyphs.EllipsisStacked16x16 />}\n                  themeName={theme}\n                  width=\"2rem\"\n                  closeMenuOnClick={true}\n                  buttonTitle={t('conversations.optionsMenu')}\n                  testId=\"more-conversation-options-button\"\n                  key=\"more-conversation-options-button\"\n                  useMobileMenu={true}\n                  mobileContextMenuZindex={cssConstants.zIndex.mobileContextMenu}\n                  mobileContextMenuTitle={t('conversations.optionsMenu')}\n               >\n                  <ConversationActionMenu\n                     conversation={conversation}\n                     setError={onDownloadError}\n                     setShowClearCommentsModal={setShowClearCommentsModal}\n                  />\n               </TestablePopoverButton>,\n               <ControlButton\n                  onClick={() => setShowDeleteConversationModal(true)}\n                  buttonType={TscButtonType.secondary}\n                  themeName={theme}\n                  glyph={<Glyphs.Delete16x16 />}\n                  title={t('conversations.actions.delete')}\n                  testId=\"delete-conversation-button\"\n                  key=\"delete-conversation-button\"\n               />,\n               <ControlButton\n                  onClick={() => setShowRenameConversationModal(true)}\n                  buttonType={TscButtonType.secondary}\n                  themeName={theme}\n                  glyph={<Glyphs.Edit16x16 />}\n                  title={t('conversations.actions.rename')}\n                  testId=\"rename-conversation-button\"\n                  key=\"rename-conversation-button\"\n               />\n            ]}\n         />\n         {showCopyConversationLinkModal && (\n            <ShareLinkModal\n               onClose={() => setShowCopyConversationLinkModal(false)}\n               title={t('conversations.conversationLink')}\n               text={t('conversations.getLinkText')}\n               link={`${config.environmentData.PresentationRootUrl}/${Hash}?${Constants.queryParams.conversation}=${conversation.VideoReviewId}`}\n            />\n         )}\n         {showRenameConversationModal && (\n            <CreateConversationModal\n               conversation={conversation}\n               onClose={() => setShowRenameConversationModal(false)}\n            />\n         )}\n         {showDeleteConversationModal && (\n            <ClearConversationModal\n               conversationHash={conversation.ConversationHash}\n               isDeleting={true}\n               onClose={() => setShowDeleteConversationModal(false)}\n            />\n         )}\n         {showClearCommentsModal && (\n            <ClearConversationModal\n               conversationHash={conversation.ConversationHash}\n               isDeleting={false}\n               onClose={() => setShowClearCommentsModal(false)}\n            />\n         )}\n      </>\n   );\n};\n\nexport interface IConversationActionsButtonGroupProps {\n   conversation: IConversationData;\n   onDownloadError: () => void;\n}\n\nexport interface IStateMappedProps {\n   Hash: string;\n}\n\nconst mapStatesToProps = (\n   {conversation, onDownloadError}: IConversationActionsButtonGroupProps,\n   {Hash}: Partial<IStateMappedProps>\n): IStateMappedProps & IConversationActionsButtonGroupProps => ({conversation, onDownloadError, Hash});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore)(ConversationActionsButtonGroupBase);\n","import React, {memo} from 'react';\nimport styled from 'styled-components';\nimport {useTscTheme} from '../../../context/themeProvider';\nimport {TscThemeNames, TscThemeName} from '@techsmith/tsc-cloud-style-guide';\n\nconst CommentEmptyState = styled.div<{theme: TscThemeNames}>`\n   box-sizing: border-box;\n   --comment-background: ${props => props.theme === TscThemeName.dusk ? 'rgba(255, 255, 255, 0.03)' : 'rgba(255, 255, 255, 0.2)'};\n   --comment-border: ${props => props.theme === TscThemeName.dusk ? 'rgba(255, 255, 255, 0.07)' : 'rgb(255, 255, 255)'};\n   --content-fill: ${props => props.theme === TscThemeName.dusk ? 'rgba(255, 255, 255, 0.2)' : 'rgba(0, 0, 0, 0.07)'};\n   --comment-shadow: ${props => props.theme === TscThemeName.dusk ? '0px 4px 16px 0px rgba(0, 0, 0, 0.04), inset 0px 0px 8px 0px rgba(255, 255, 255, 0.05), 0px 1px 3px 0px rgba(0, 0, 0, 0.1)' : '0px 4px 16px 0px rgba(0, 0, 0, 0.04), inset 0px 0px 12px 0px rgba(255, 255, 255, 1), 0px 0.5px 3px 0px rgba(0, 0, 0, 0.06)'};\n   width: 100%;\n   max-width: 235px;\n   position: relative;\n   aspect-ratio: 2.5/1;\n   overflow: visible;\n`;\n\nconst CommentTop = styled.div`\n   top: 0;\n   left: 0;\n   box-sizing: border-box;\n   border: 1px solid var(--comment-border);\n   background: var(--comment-background);\n   height: 66%;\n   width: 87%;\n   position: absolute;\n   border-radius: 12px;\n   display: flex;\n   align-items: flex-start;\n   padding: 4% 6% 3% 6%;\n   box-shadow: var(--comment-shadow);\n`;\n\nconst Avatar = styled.div`\n   box-sizing: border-box;\n   width: 12%;\n   background: var(--content-fill);\n   margin-right: 5%;\n   aspect-ratio: 1/1;\n   border-radius: 100%;\n   flex: none;\n`;\n\nconst Content = styled.div`\n   box-sizing: border-box;\n   display: flex;\n   flex-direction: column;\n   height: 70%;\n   width: 100%;\n   margin-top: 2.5%;\n   gap: 20%;\n`;\n\nconst Line = styled.div`\n   box-sizing: border-box;\n   width: 100%;\n   height: 50%;\n   border-radius: 12px;\n   display: grid;\n   grid-template-columns: auto 20%;\n   gap: 7.5%;\n \n   &:nth-child(2n) {\n      grid-template-columns: 35% auto;\n   }\n\n   &:before, &:after {\n      content: \"\";\n      display: block;\n      background: var(--content-fill);\n      height: 100%;\n      width: 100%;\n      border-radius: 9999rem;\n   }\n`;\n\nconst CommentBottom = styled.div`\n   box-sizing: border-box;  \n   bottom: 0;\n   right: 0;\n   box-sizing: border-box;\n   border: 1px solid var(--comment-border);\n   background: var(--comment-background);\n   height: 66%;\n   width: 87%;\n   position: absolute;\n   border-radius: 12px;\n   backdrop-filter: blur(16px);\n   display: flex;\n   align-items: flex-start;\n   padding: 4% 6% 3% 6%;\n   box-shadow: var(--comment-shadow);\n`;\n\nexport const ConversationEmptyState: React.FC = () => {\n   const theme = useTscTheme();\n\n   return (\n      <CommentEmptyState theme={theme}>\n         <CommentTop>\n            <Avatar />\n            <Content>\n               <Line />\n               <Line />\n            </Content>\n         </CommentTop>\n         <CommentBottom>\n            <Avatar />\n            <Content>\n               <Line />\n               <Line />\n            </Content>\n         </CommentBottom>\n      </CommentEmptyState>\n   );\n};\n\nexport default memo(ConversationEmptyState);\n","import React, {useState, useEffect} from 'react';\nimport TabContentWrapper from '../TabContentWrapper';\nimport {SlideToggle, ControlButton, Glyphs, TscButtonType} from '@techsmith/tsc-cloud-style-guide';\nimport {useTranslation} from 'react-i18next';\nimport dayjs from 'dayjs';\nimport DataTable from '../DataTable';\nimport {IConversationData} from '../../../model/conversationModel';\nimport TabHeader from '../TabHeader';\nimport {IWorkerState} from '../../../model/workerState';\nimport {conversationsStore, updateConversationsFromServer, updateConversationsState} from '../../../context/conversationsProvider';\nimport withMemoizedContexts from '../../../context/contextContainerHoC';\nimport styled from 'styled-components';\nimport Constants from '../../../constants/Constants';\nimport {useQueryParam, StringParam} from 'use-query-params';\nimport {useTscTheme} from '../../../context/themeProvider';\nimport {mediaStore} from '../../../context/mediaProvider';\nimport config from '../../../service/config';\nimport conversationApi from '../../../service/conversationApi';\nimport {updateSelectedConversationState} from '../../../context/selectedConversationProvider';\nimport ClearConversationModal from '../../modals/ClearConversationModal';\n\nconst DataTableWrapper = styled.div`\n   .data-table-row, .data-table-header {\n      grid-template-columns: repeat(2, 0.75fr) 1.25fr 10rem;\n      grid-gap: 10px;\n   }\n\n   ul {\n      grid-template-columns: repeat( auto-fit, minmax(19rem, 1fr) );\n   }\n`;\n\nconst ConversationSettingsHeaderWrapper = styled.div`\n   .conversation-toggle {\n      padding: 4px;\n   }\n`;\n\nconst DownloadButton = styled(ControlButton)`\n   min-width: max-content;\n`;\n\nexport const ConversationSettingsBase: React.FC<IWorkerState & IStateMappedProps> = ({conversations, isWorking: initialIsWorking, hasError: initialHasError, Hash, Title}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [showDeleteConversationModal, setShowDeleteConversationModal] = useState(false);\n   const [conversationParam] = useQueryParam(Constants.queryParams.conversation, StringParam);\n   const [loadingState, setLoadingState] = useState({isWorking: initialIsWorking, hasError: initialHasError});\n\n   const getConversations = async () => {\n      try {\n         conversations || setLoadingState({isWorking: true, hasError: false});\n         await updateConversationsFromServer(Hash);\n         setLoadingState({isWorking: false, hasError: false});\n      } catch {\n         setLoadingState({isWorking: false, hasError: true});\n      }\n   };\n\n   useEffect(() => {\n      void getConversations();\n   }, []);\n\n   useEffect(() => {\n      void (!conversations?.findIndex(conversation => conversation.VideoReviewId === conversationParam) && getConversations());\n   }, [conversationParam]);\n\n   const conversationColumnLabels = [\n      t('conversations.columnLabels.comments'),\n      t('conversations.columnLabels.participants'),\n      t('conversations.columnLabels.created'),\n      t('conversations.columnLabels.actions')\n   ];\n\n   const createConversation = async () => {\n      const newConversation = await conversationApi.createConversation(Hash, Title);\n      conversations.push(newConversation);\n      updateConversationsState({conversations: conversations});\n      updateSelectedConversationState({Title: newConversation.Title, VideoReviewId: newConversation.VideoReviewId, ConversationHash: newConversation.ConversationHash, SelectedComment: null});\n   };\n\n   const onToggleConversationClick = async () => {\n      try {\n         if (conversations?.length === 0) {\n            setLoadingState({isWorking: true, hasError: false});\n            await createConversation();\n            setLoadingState({isWorking: false, hasError: false});\n         } else {\n            setShowDeleteConversationModal(true);\n         }\n      } catch {\n         setLoadingState({isWorking: false, hasError: true});\n      }\n   };\n\n   const activeConversation = conversations?.length ? conversations[0] : null;\n\n   const onDownloadCommentsClick = async () => {\n      if (!activeConversation) {\n         return;\n      }\n      try {\n         await conversationApi.downloadSingleConversationData(Hash, activeConversation.ConversationHash);\n      } catch {\n         setLoadingState({isWorking: false, hasError: true});\n      }\n   };\n\n   return (\n      <TabContentWrapper\n         showSpinner={loadingState.isWorking}\n         showError={loadingState.hasError}\n      >\n         <ConversationSettingsHeaderWrapper>\n            <TabHeader\n               leftLabel={config.featureSwitches.UseSingleConversation ? t('conversations.ConversationLabel') : t('conversations.tabName')}\n               rightLabel=\"\"\n               hideRightLabelInMobileView={true}\n               button={(\n                  <SlideToggle\n                     className=\"conversation-toggle\"\n                     isChecked={conversations?.length > 0}\n                     onClick={onToggleConversationClick}\n                  />\n               )}\n            />\n         </ConversationSettingsHeaderWrapper>\n         <DataTableWrapper data-test-id=\"conversations-list\">\n            <DataTable\n               columnLabels={conversationColumnLabels}\n               emptyStateLabel={t('conversations.singleConversationEmptyStateString')}\n               tableRows={activeConversation ? [{\n                  tableRow: [\n                     activeConversation.CommentCount,\n                     activeConversation.CommenterCount,\n                     dayjs(activeConversation.DateCreated).format('MMMM D, YYYY'),\n                     <DownloadButton\n                        onClick={onDownloadCommentsClick}\n                        buttonType={TscButtonType.tertiary}\n                        themeName={theme}\n                        glyph={<Glyphs.Download16x16 />}\n                        label={t('resetData.downloadData')}\n                        title={t('conversations.actions.download')}\n                        testId=\"download-conversation-button\"\n                        key=\"download-conversation-button\"\n                     />\n                  ]\n               }] : []}\n            />\n         </DataTableWrapper>\n         {showDeleteConversationModal && (\n            <ClearConversationModal\n               conversationHash={activeConversation?.ConversationHash}\n               isDeleting={true}\n               onClose={() => setShowDeleteConversationModal(false)}\n            />\n         )}\n      </TabContentWrapper>\n   );\n};\n\nexport interface IStateMappedProps {\n   conversations: IConversationData[];\n   Hash: string;\n   Title: string;\n}\n\nconst mapStatesToProps = (\n   {isWorking, hasError}: IWorkerState,\n   {conversations}: Partial<IStateMappedProps>,\n   {Hash, Title}: Partial<IStateMappedProps>\n): IWorkerState & IStateMappedProps => ({conversations, isWorking, hasError, Hash, Title});\n\nexport default withMemoizedContexts(mapStatesToProps, conversationsStore, mediaStore)(ConversationSettingsBase);\n","import React, {useState, useEffect} from 'react';\nimport TabContentWrapper from '../TabContentWrapper';\nimport {ControlButton, Glyphs, TscButtonType, TscButtonGlyphPlacement} from '@techsmith/tsc-cloud-style-guide';\nimport {useTranslation} from 'react-i18next';\nimport dayjs from 'dayjs';\nimport DataTable from '../DataTable';\nimport {IConversationData} from '../../../model/conversationModel';\nimport TabHeader from '../TabHeader';\nimport CreateConversationModal from '../../modals/CreateConversationModal';\nimport {IWorkerState} from '../../../model/workerState';\nimport {HideButtonText} from '../../util/StyledElements';\nimport cssConstants from '../../../constants/cssConstants';\nimport {conversationsStore, updateConversationsFromServer} from '../../../context/conversationsProvider';\nimport withMemoizedContexts from '../../../context/contextContainerHoC';\nimport ConversationActionsButtonGroup from './ConversationActionsButtonGroup';\nimport styled from 'styled-components';\nimport {UpsertQueryParamInUrl} from '../../util/QueryParamsHelper';\nimport Constants from '../../../constants/Constants';\nimport {useQueryParam, StringParam} from 'use-query-params';\nimport {useTscTheme} from '../../../context/themeProvider';\nimport {mediaStore} from '../../../context/mediaProvider';\n\nconst DataTableWrapper = styled.div`\n   .data-table-row, .data-table-header {\n      grid-template-columns: 2fr repeat(2,0.75fr) 1.25fr 13rem;\n      grid-gap: 10px;\n   }\n\n   ul {\n      grid-template-columns: repeat( auto-fit, minmax(19rem, 1fr) );\n   }\n`;\n\nexport const ConversationsTabBase: React.FC<IWorkerState & IStateMappedProps> = ({conversations, isWorking: initialIsWorking, hasError: initialHasError, Hash}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [showCreateConversationModal, setShowCreateConversationModal] = useState(false);\n   const [conversationParam] = useQueryParam(Constants.queryParams.conversation, StringParam);\n   const [loadingState, setLoadingState] = useState({isWorking: initialIsWorking, hasError: initialHasError});\n\n   const getConversations = async () => {\n      try {\n         conversations || setLoadingState({isWorking: true, hasError: false});\n         await updateConversationsFromServer(Hash);\n         setLoadingState({isWorking: false, hasError: false});\n      } catch {\n         setLoadingState({isWorking: false, hasError: true});\n      }\n   };\n\n   useEffect(() => {\n      void getConversations();\n   }, []);\n\n   useEffect(() => {\n      void (!conversations?.findIndex(conversation => conversation.VideoReviewId === conversationParam) && getConversations());\n   }, [conversationParam]);\n\n   const onCreateConversationButtonClicked = () => {\n      setShowCreateConversationModal(true);\n   };\n\n   const onDownloadError = () => {\n      setLoadingState({isWorking: false, hasError: true});\n   };\n\n   const conversationColumnLabels = [\n      t('conversations.columnLabels.title'),\n      t('conversations.columnLabels.comments'),\n      t('conversations.columnLabels.participants'),\n      t('conversations.columnLabels.created'),\n      t('conversations.columnLabels.actions')\n   ];\n\n   const sortedConversations = conversations?.sort((a, b) => a.Title.toLowerCase() > b.Title.toLowerCase() ? 1 : -1) || [];\n\n   return (\n      <TabContentWrapper\n         showSpinner={loadingState.isWorking}\n         showError={loadingState.hasError}\n      >\n         <TabHeader\n            leftLabel={t('conversations.tabName')}\n            rightLabel=\"\"\n            hideRightLabelInMobileView={true}\n            button={(\n               <HideButtonText\n                  breakpointWidth={cssConstants.contentBreakpoint}\n                  glyphPlacement={TscButtonGlyphPlacement.left}\n               >\n                  <ControlButton\n                     onClick={onCreateConversationButtonClicked}\n                     buttonType={TscButtonType.secondary}\n                     themeName={theme}\n                     glyph={<Glyphs.Add16x16 />}\n                     glyphPlacement={TscButtonGlyphPlacement.left}\n                     title={t('conversations.addConversationTitle')}\n                     label={t('conversations.addConversationTitle')}\n                     aria={{'aria-label': t('conversations.addConversationTitle')}}\n                     testId=\"create-conversation-button\"\n                  />\n               </HideButtonText>\n            )}\n         />\n         <DataTableWrapper data-test-id=\"conversations-list\">\n            <DataTable\n               columnLabels={conversationColumnLabels}\n               emptyStateLabel={t('conversations.emptyStateString')}\n               tableRows={sortedConversations.map((conversation: IConversationData) => ({\n                  tableRow: [\n                     conversation.Title,\n                     conversation.CommentCount,\n                     conversation.CommenterCount,\n                     dayjs(conversation.DateCreated).format('MMMM D, YYYY'),\n                     <ConversationActionsButtonGroup\n                        conversation={conversation}\n                        onDownloadError={onDownloadError}\n                        key={conversation.VideoReviewId}\n                     />\n                  ],\n                  link: UpsertQueryParamInUrl(window.location.href, Constants.queryParams.conversation, conversation.VideoReviewId)\n               }))}\n            />\n         </DataTableWrapper>\n         {showCreateConversationModal && <CreateConversationModal onClose={() => setShowCreateConversationModal(false)} />}\n      </TabContentWrapper>\n   );\n};\n\nexport interface IStateMappedProps {\n   conversations: IConversationData[];\n   Hash: string;\n}\n\nconst mapStatesToProps = (\n   {isWorking, hasError}: IWorkerState,\n   {conversations}: Partial<IStateMappedProps>,\n   {Hash}: Partial<IStateMappedProps>\n): IWorkerState & IStateMappedProps => ({conversations, isWorking, hasError, Hash});\n\nexport default withMemoizedContexts(mapStatesToProps, conversationsStore, mediaStore)(ConversationsTabBase);\n","import React, {useEffect, useState} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport styled from 'styled-components';\nimport TabContentWrapper from '../TabContentWrapper';\nimport MediaDescription from '../../details/MediaDescription';\nimport {EmptyState, TscButtonType, TscStyles, TscThemeName, TscThemeNames} from '@techsmith/tsc-cloud-style-guide';\nimport EditDetailsModal from '../../details/EditDetailsModal';\nimport config from '../../../service/config';\nimport withMemoizedContexts from '../../../context/contextContainerHoC';\nimport {useTscTheme} from '../../../context/themeProvider';\nimport {mediaStore} from '../../../context/mediaProvider';\nimport cssConstants from '../../../constants/cssConstants';\nimport {MediaDetailsLink} from '../../details/MediaDetailsLink';\nimport HorizontalSeparator from '../../util/HorizontalSeparator';\nimport dayjs from 'dayjs';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport MediaDetails from '../../details/MediaDetails';\n\ndayjs.extend(relativeTime);\n\nconst EmptyStateWrapper = styled.div`\n   display: flex;\n   justify-content: center;\n   align-items: center;\n   width: 100%;\n   margin: 3rem 0;\n`;\n\nconst BaseTabsWrapper = styled.div`\n   width: 100%;\n   display: flex;\n   margin: 0 auto;\n   box-sizing: border-box;\n`;\n\nconst TabsBarWrapper = styled(BaseTabsWrapper)<{theme: TscThemeNames; hasDescription: boolean}>`\n   padding: 16px 12px;\n   position: relative;\n   font-size: .875rem;\n   font-weight: ${cssConstants.semiBoldWeight};\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n   max-width: ${cssConstants.contentWidth};\n   border-radius: ${props => props.hasDescription ? ` ${TscStyles.border.radius.xl} ${TscStyles.border.radius.xl} 0 0` : TscStyles.border.radius.xl};\n   background: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.medium : TscStyles.color.ui.dawn.light};\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n\n   @media screen and (max-width: ${cssConstants.mediaTabsDisplayBreakpoint}px)  {\n      border-radius: 0;\n      padding: 8px 12px 16px;\n   }\n\n   &::before {\n      content: '';\n      position: absolute;\n      bottom: 0;\n      left: 50%;\n      transform: translateX(-50%);\n      width: calc(100% - 24px);\n      border-bottom: ${props => props.hasDescription ? `2px solid ${props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.mediumDark : TscStyles.color.ui.dawn.medium}` : 'none'};\n   }\n`;\n\nexport const MediaDetailsSpan = styled.span<{theme: TscThemeNames}>`\n   white-space: pre;\n`;\n\nconst Card = styled.div<{theme: TscThemeNames}>`\n   position: relative;\n   max-width: ${cssConstants.contentWidth};\n   width: 100%;\n   background: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.medium : TscStyles.color.ui.dawn.light};\n   border-radius: 0 0 ${TscStyles.border.radius.xl} ${TscStyles.border.radius.xl};\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n   \n   @media screen and (max-width: ${cssConstants.mediaTabsDisplayBreakpoint}px)  {\n      border-radius: 0;\n   }\n`;\n\nexport const TabsContentWrapper = styled(BaseTabsWrapper)`\n   flex-direction: column;\n   justify-content: center;\n   align-items: center;\n   max-width: ${cssConstants.contentWidth};\n   z-index: ${cssConstants.zIndex.viewPageElement};\n`;\n\nconst TabsPadding = styled.div`\n   flex-grow: 1;\n`;\n\nconst DescriptionWrapper = styled.div`\n   margin: 0 12px;\n`;\n\nconst ShadowDiv = styled.div<{theme: TscThemeNames}>`\n   border-radius: ${TscStyles.border.radius.xl};\n   max-width: 64rem;\n   margin: 0px auto;\n   width: 100%;\n      \n   @media screen and (min-width: ${cssConstants.mediaTabsDisplayBreakpoint}px)  {\n      box-shadow: 0 3px 6px rgba(0, 0, 0, 0.15), 0 0 2px rgba(0, 0, 0, 0.1);\n   }\n`;\n\nexport const DetailsTabBase: React.FC<IStateMappedProps> = ({IsYouTube, Author, YouTubeAuthor, YouTubeUrl, SharedDateTime, ViewCount, Description, IsReady}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [showEditDetailsModal, setShowEditDetailsModal] = React.useState(false);\n   const [showDetails, setShowDetails] = useState(window.innerWidth <= cssConstants.mediaTabsDisplayBreakpoint);\n\n   useEffect(() => {\n      window.addEventListener('resize', handleResize);\n      return () => {\n         window.removeEventListener('resize', handleResize);\n      };\n   }, []);\n\n   const handleResize = () => {\n      setShowDetails(window.innerWidth <= cssConstants.mediaTabsDisplayBreakpoint);\n   };\n\n   const emptyState = (\n      <EmptyStateWrapper>\n         <EmptyState\n            title={t('details.tabEmptyState.title')}\n            text={t('details.tabEmptyState.text')}\n            primaryButtonText={t('details.tabEmptyState.buttonText')}\n            primaryButtonType={TscButtonType.secondary}\n            onPrimaryClick={IsReady && (config.watchConfig.isOwnerAdminOrTeamEditor) ? () => setShowEditDetailsModal(true) : null}\n            themeName={theme}\n            maxWidth=\"100%\"\n            testId=\"details-tab-empty-state\"\n         />\n      </EmptyStateWrapper>\n   );\n\n   const nonEmptyState = <MediaDescription rawDescriptionText={Description} />;\n\n   return (\n      <>\n         {showDetails && <MediaDetails showMediaLocation={false} />}\n         <ShadowDiv data-test-id=\"details-tab\">\n            <TabsBarWrapper\n               theme={theme}\n               hasDescription={!!Description || config.watchConfig.isOwnerAdminOrTeamEditor}\n            >\n               <MediaDetailsSpan>\n                  {t('AddedBy_by')}\n                  {' '}\n               </MediaDetailsSpan>\n               <MediaDetailsSpan theme={theme}>\n                  {Author}\n               </MediaDetailsSpan>\n               {IsYouTube && (\n                  <>\n                     <HorizontalSeparator />\n                     {t('CreatedByYoutubeUser')}\n                     <MediaDetailsLink\n                        href={YouTubeUrl}\n                        theme={theme}\n                     >\n                        {YouTubeAuthor}\n                     </MediaDetailsLink>\n                  </>\n               )}\n               <HorizontalSeparator />\n               <MediaDetailsSpan title={dayjs(SharedDateTime).toLocaleString()}>\n                  {t('AddedBy_Added')}\n                  {' '}\n                  {dayjs(SharedDateTime).fromNow()}\n               </MediaDetailsSpan>\n               <HorizontalSeparator />\n               <MediaDetailsSpan>\n                  {ViewCount}\n                  {' '}\n                  {t('Views')}\n               </MediaDetailsSpan>\n            </TabsBarWrapper>\n            {showDetails ? (\n               <TabContentWrapper\n                  showSpinner={false}\n                  showError={false}\n               >\n                  {Description ? nonEmptyState : (config.watchConfig.isOwnerAdminOrTeamEditor && emptyState)}\n               </TabContentWrapper>\n            )\n               : (\n                  <TabsPadding\n                     id=\"tabs-content-wrapper\"\n                     data-test-id=\"tabs-content-wrapper\"\n                  >\n                     <TabsContentWrapper>\n                        <Card theme={theme}>\n                           {Description ? (\n                              <DescriptionWrapper>\n                                 {nonEmptyState}\n                              </DescriptionWrapper>\n                           )\n                              : (config.watchConfig.isOwnerAdminOrTeamEditor && (\n                                 <DescriptionWrapper>\n                                    {emptyState}\n                                 </DescriptionWrapper>\n                              ))}\n\n                        </Card>\n                     </TabsContentWrapper>\n                  </TabsPadding>\n               )}\n         </ShadowDiv>\n         {showEditDetailsModal && <EditDetailsModal onClose={() => setShowEditDetailsModal(false)} />}\n      </>\n   );\n};\n\nexport interface IStateMappedProps {\n   IsYouTube: boolean;\n   Author: string;\n   YouTubeAuthor: string;\n   YouTubeUrl: string;\n   SharedDateTime: Date;\n   ViewCount: number;\n   Description: string;\n   IsReady: boolean;\n}\n\nconst mapStatesToProps = (\n   // eslint-disable-next-line no-empty-pattern\n   {},\n   {IsYouTube, Author, YouTubeAuthor, YouTubeUrl, SharedDateTime, ViewCount, Description, IsReady}: Partial<IStateMappedProps>\n): IStateMappedProps => ({IsYouTube, Author, YouTubeAuthor, YouTubeUrl, SharedDateTime, ViewCount, Description, IsReady});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore)(DetailsTabBase);\n","import React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport styled from 'styled-components';\nimport {ControlButton, TscButtonType, TscThemeName, TscThemeNames, TscStyles} from '@techsmith/tsc-cloud-style-guide';\nimport TabContentWrapper from '../TabContentWrapper';\nimport cssConstants from '../../../constants/cssConstants';\nimport CopyMediaModal from '../../modals/CopyMediaModal';\nimport EditCopyImage from '../../../static/svg/editMediaCopy.svg';\nimport EditOriginalImage from '../../../static/svg/editMediaOriginal.svg';\nimport '../../../static/css/modal.less';\nimport {IMediaDetails} from '../../../model/mediaDetails';\nimport withMemoizedContexts from '../../../context/contextContainerHoC';\nimport {useTscTheme} from '../../../context/themeProvider';\nimport {mediaStore} from '../../../context/mediaProvider';\nimport UserOverQuotaModal from '../../modals/UserOverQuotaModal';\nimport {BasicModalPortal} from '../../util/ModalPortalHelper';\n\nconst EditMediaContainer = styled.div`\n   flex-direction: column;\n`;\n\nconst PaneContainer = styled.div`\n   display: flex;\n   flex-direction: column;\n   align-items: center;\n   margin: 0;\n   flex: 1 0 auto;\n`;\n\nconst ImageContainer = styled.div`\n   height: 8rem;\n   display: flex;\n   align-items: center;\n\n   @media screen and (max-width: ${cssConstants.tabBreakpoint}px) {\n      display: none;\n   }\n`;\n\nconst Header = styled.h2`\n   font-size: 1rem;\n   font-weight: 600;\n`;\n\nconst Description = styled.p<{theme: TscThemeNames}>`\n   flex-grow: 1;\n   font-size: 0.875rem;\n   text-align: center;\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.lightMedium : TscStyles.color.text.medium};\n   margin-top: 0;\n   width: 100%;\n`;\n\nconst DividerContainer = styled.div`\n   display: flex;\n   flex-direction: column;\n   justify-content: space-between;\n   align-items: center;\n   flex-direction: row;\n   margin: 1rem 0 0;\n`;\n\nconst VerticalBar = styled.div<{theme: TscThemeNames}>`\n   flex-grow: 1;\n   background-color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.lightMedium : TscStyles.color.ui.dawn.medium};\n   width: auto;\n   height: 1px;\n`;\n\nconst DividingPhrase = styled.span`\n   font-size: 0.875rem;\n   font-weight: 600;\n   margin: 0.5rem 0;\n\n   @media screen and (max-width: ${cssConstants.tabBreakpoint}px) {\n      margin: 0 0.5rem;\n   }\n`;\n\ninterface IEditMediaTabState {\n   showCopyMediaModal: boolean;\n   showUserQuotaCheck: boolean;\n   displayIEWarning: boolean;\n}\n\nexport const EditMediaTabBase: React.FC<IStateMappedProps> = ({Hash, Url}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n\n   const [editMediaTabState, setEditMediaTabState] = React.useState<IEditMediaTabState>({\n      showCopyMediaModal: false,\n      showUserQuotaCheck: false,\n      displayIEWarning: false\n   });\n\n   const isIE11 = !!(window as any).MSInputMethodContext && !!document.DOCUMENT_NODE;\n\n   const onCopyMediaModalClose = (copiedMedia?: IMediaDetails) => {\n      setEditMediaTabState({...editMediaTabState, showCopyMediaModal: false});\n      if (copiedMedia) {\n         window.location.href = `/editor/${copiedMedia.Hash}`;\n      }\n   };\n\n   const copyMediaButtonClicked = () => {\n      setEditMediaTabState({...editMediaTabState, showCopyMediaModal: true});\n   };\n\n   const editCopyButton = (\n      <UserOverQuotaModal>\n         <ControlButton\n            themeName={theme}\n            buttonType={TscButtonType.primary}\n            testId=\"edit-media-copy\"\n            label={t('editMedia.copy.callToAction')}\n            onClick={isIE11 ? () => setEditMediaTabState({...editMediaTabState, displayIEWarning: true}) : copyMediaButtonClicked}\n            width={cssConstants.defaultButtonWidth}\n         />\n      </UserOverQuotaModal>\n   );\n\n   const editOriginalButton = (\n      <UserOverQuotaModal>\n         <ControlButton\n            themeName={theme}\n            buttonType={TscButtonType.primary}\n            testId=\"edit-media-original\"\n            label={t('editMedia.original.callToAction')}\n            href={isIE11 ? '' : `/editor/${Hash}`}\n            // eslint-disable-next-line no-undefined\n            onClick={isIE11 ? () => setEditMediaTabState({...editMediaTabState, displayIEWarning: true}) : undefined}\n            width={cssConstants.defaultButtonWidth}\n         />\n      </UserOverQuotaModal>\n   );\n\n   const cancelRemoveAlertModal: React.JSX.Element = (\n      <BasicModalPortal\n         themeName={theme}\n         title={t('editMedia.ieWarningModal.title')}\n         onClose={() => setEditMediaTabState({...editMediaTabState, displayIEWarning: false})}\n         width={cssConstants.defaultModalWidth}\n      >\n         <div className=\"modal-body\">\n            <div className=\"form-body themeable-section\">\n               <div className=\"form-field-group\">\n                  <span>\n                     {t('editMedia.ieWarningModal.text')}\n                  </span>\n               </div>\n               <div className=\"button-group\">\n                  <ControlButton\n                     themeName={theme}\n                     buttonType={TscButtonType.primary}\n                     width={cssConstants.defaultButtonWidth}\n                     onClick={() => setEditMediaTabState({...editMediaTabState, displayIEWarning: false})}\n                     label={t('general.close')}\n                  />\n               </div>\n            </div>\n         </div>\n      </BasicModalPortal>\n   );\n\n   return (\n      <TabContentWrapper\n         showSpinner={false}\n         showError={false}\n      >\n         <EditMediaContainer data-test-id=\"edit-media-tab\">\n            <PaneContainer>\n               <ImageContainer>\n                  <EditCopyImage />\n               </ImageContainer>\n               <Header>\n                  {t('editMedia.copy.title')}\n               </Header>\n               <Description theme={theme}>\n                  {t('editMedia.copy.description')}\n               </Description>\n               {editCopyButton}\n               {editMediaTabState.showCopyMediaModal && (\n                  <CopyMediaModal\n                     onClose={onCopyMediaModalClose}\n                     hideConfirmationButtons={true}\n                     selectedMediaUrl={Url}\n                  />\n               )}\n            </PaneContainer>\n            <DividerContainer>\n               <VerticalBar theme={theme} />\n               <DividingPhrase>\n                  {t('editMedia.divider')}\n               </DividingPhrase>\n               <VerticalBar theme={theme} />\n            </DividerContainer>\n            <PaneContainer>\n               <ImageContainer>\n                  <EditOriginalImage />\n               </ImageContainer>\n               <Header>\n                  {t('editMedia.original.title')}\n               </Header>\n               <Description theme={theme}>\n                  {t('editMedia.original.description')}\n               </Description>\n               {editOriginalButton}\n            </PaneContainer>\n            {editMediaTabState.displayIEWarning && cancelRemoveAlertModal}\n         </EditMediaContainer>\n      </TabContentWrapper>\n   );\n};\n\nexport interface IStateMappedProps {\n   Hash: string;\n   Url: string;\n}\n\nconst mapStatesToProps = (\n   // eslint-disable-next-line no-empty-pattern\n   {},\n   {Hash, Url}: Partial<IStateMappedProps>\n): IStateMappedProps => ({Hash, Url});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore)(EditMediaTabBase);\n","import React, {useState} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport styled from 'styled-components';\nimport PrivacyOption from '../../util/PrivacyOption';\nimport TabContentWrapper from '../TabContentWrapper';\nimport {MediaPrivacy} from '../../../model/mediaDetails';\nimport mediaApi from '../../../service/mediaApi';\nimport {IWorkerState} from '../../../model/workerState';\nimport ConfirmPrivacyChangeModal from '../../modals/ConfirmPrivacyChangeModal';\nimport {CaptioningTypes, ICaptionData} from '../../../model/captionModels';\nimport {getMediaPrivacyOptions} from '../../../util/MediaPrivacyOptionsGenerator';\nimport {MediaPrivacyOptionModel} from '../../../model/mediaPrivacyOptionModel';\nimport withMemoizedContexts from '../../../context/contextContainerHoC';\nimport {useTscTheme} from '../../../context/themeProvider';\nimport {mediaStore, updateMediaState} from '../../../context/mediaProvider';\nimport {captionDataStore} from '../../../context/captionDataProvider';\nimport {IBaseLibrary} from '../../../model/library';\n\nconst MediaPrivacyHeader = styled.h2`\n   font-size: 0.875rem;\n   font-weight: 600;\n   margin-top: 0;\n`;\n\nconst MediaPrivacyTabWrapper = styled.div`\n   display: flex;\n   flex-direction: column;\n`;\n\nconst PrivacyLevelWrapper = styled.div`\n   width: 100%;\n`;\n\nexport const MediaPrivacySettings: React.FC<IStateMappedProps> = ({Hash, OwnerLibrary, CaptioningAssignedToEmail, GroupHashes, Privacy, captionData}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [showPrivateConfirmationModal, setShowPrivateConfirmationModal] = useState(false);\n   const [warningMessages, setWarningMessages] = useState([]);\n   const [privacyOptions] = useState<Map<MediaPrivacy, MediaPrivacyOptionModel>>(getMediaPrivacyOptions(OwnerLibrary.LibraryType));\n\n   const [state, setState] = React.useState<IWorkerState>({\n      isWorking: false,\n      hasError: false\n   });\n\n   React.useEffect(() => {\n      const messages = [];\n      if (CaptioningAssignedToEmail) {\n         messages.push(t('confirmPrivacyChange.assignee'));\n      }\n      if (GroupHashes.length > 0) {\n         messages.push(t('collections.privacyChange'));\n      }\n      if (captionData && captionData.filter(c => c.CaptioningType === CaptioningTypes.ThirdParty).length > 0) {\n         messages.push(t('confirmPrivacyChange.captions'));\n      }\n\n      setWarningMessages(messages);\n   }, [Hash, captionData]);\n\n   const updatePrivacy = async (newPrivacy: MediaPrivacy) => {\n      if (Privacy !== newPrivacy) {\n         setState({...state, isWorking: true});\n         try {\n            await mediaApi.updatePrivacy(Hash, newPrivacy);\n            updateMediaState({Privacy: newPrivacy});\n            setState({isWorking: false, hasError: false});\n         } catch {\n            setState({isWorking: false, hasError: true});\n         }\n      }\n   };\n\n   const onClickPrivateOption = async () => {\n      if (warningMessages.length > 0) {\n         setShowPrivateConfirmationModal(true);\n      } else {\n         await updatePrivacy(MediaPrivacy.private);\n      }\n   };\n\n   const onConfirmClick = async () => {\n      setShowPrivateConfirmationModal(false);\n      await updatePrivacy(MediaPrivacy.private);\n   };\n\n   const onCloseClick = () => {\n      setShowPrivateConfirmationModal(false);\n   };\n\n   return (\n      <TabContentWrapper\n         showSpinner={state.isWorking}\n         showError={state.hasError}\n      >\n         <MediaPrivacyTabWrapper\n            data-test-id=\"privacy-tab-wrapper\"\n            className=\"t-privacy-tab\"\n         >\n            <PrivacyLevelWrapper>\n               <MediaPrivacyHeader>\n                  {t('privacy.media.tabHeader')}\n               </MediaPrivacyHeader>\n               <PrivacyOption\n                  onClick={() => updatePrivacy(MediaPrivacy.public)}\n                  selected={Privacy === MediaPrivacy.public}\n                  header={privacyOptions.get(MediaPrivacy.public).label}\n                  text={privacyOptions.get(MediaPrivacy.public).subtext}\n                  glyph={privacyOptions.get(MediaPrivacy.public).glyph}\n                  radioTestId=\"public-media-privacy\"\n                  theme={theme}\n                  disabled={privacyOptions.get(MediaPrivacy.public).disabled}\n                  titleBadgeText={privacyOptions.get(MediaPrivacy.public).badgeText}\n               />\n               <PrivacyOption\n                  onClick={onClickPrivateOption}\n                  selected={Privacy === MediaPrivacy.private}\n                  header={privacyOptions.get(MediaPrivacy.private).label}\n                  text={privacyOptions.get(MediaPrivacy.private).subtext}\n                  glyph={privacyOptions.get(MediaPrivacy.private).glyph}\n                  radioTestId=\"private-media-privacy\"\n                  theme={theme}\n               />\n            </PrivacyLevelWrapper>\n         </MediaPrivacyTabWrapper>\n         {showPrivateConfirmationModal && (\n            <ConfirmPrivacyChangeModal\n               onClose={onCloseClick}\n               onConfirm={onConfirmClick}\n               warnings={warningMessages}\n            />\n         )}\n      </TabContentWrapper>\n   );\n};\n\nexport interface IStateMappedProps {\n   Hash: string;\n   OwnerLibrary: IBaseLibrary;\n   CaptioningAssignedToEmail: string;\n   GroupHashes: string[];\n   Privacy: MediaPrivacy;\n   captionData: ICaptionData[];\n}\n\nconst mapStatesToProps = (\n   // eslint-disable-next-line no-empty-pattern\n   {},\n   {Hash, OwnerLibrary, CaptioningAssignedToEmail, GroupHashes, Privacy}: Partial<IStateMappedProps>,\n   {captionData}: Partial<IStateMappedProps>\n): IStateMappedProps => ({Hash, OwnerLibrary, CaptioningAssignedToEmail, GroupHashes, Privacy, captionData});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore, captionDataStore)(MediaPrivacySettings);\n","import React, {useState} from 'react';\nimport styled from 'styled-components';\nimport {TscCheckboxAlignment, InlineLabeledCheckbox, TscButtonType, ControlButton, Glyphs, InlineFieldGroup} from '@techsmith/tsc-cloud-style-guide';\nimport config from '../../../service/config';\nimport mediaApi from '../../../service/mediaApi';\nimport {useTranslation} from 'react-i18next';\nimport {SetupWorkerState} from '../../../model/workerState';\nimport {StyledWarning} from '../../util/StyledElements';\nimport withMemoizedContexts from '../../../context/contextContainerHoC';\nimport {useTscTheme} from '../../../context/themeProvider';\nimport {mediaStore, updateMediaState, updateMediaStateFromServer} from '../../../context/mediaProvider';\nimport accessPhraseApi from '../../../service/accessPhraseApi';\nimport ShareModal from '../../modals/ShareModal';\nimport {MediaPrivacy} from '../../../model/mediaDetails';\nimport {AlertModalPortal} from '../../util/ModalPortalHelper';\nimport TabContentWrapper from '../TabContentWrapper';\nimport {IBaseLibrary} from '../../../model/library';\n\nconst Container = styled.div`\n   flex-shrink: 0;\n   display: flex;\n   flex-direction: column;\n   margin-left: 16px;\n   label {\n      font-size: 0.875rem;\n      font-weight: 600;\n   }\n`;\n\nconst Failure = styled(StyledWarning)`\n   margin: 0;\n   max-width: fit-content;\n`;\n\nconst Spacer = styled.div`\n   > :not(:first-child) {\n      margin-top: .5rem;\n   }\n`;\n\nexport const MediaSettingsBase: React.FC<IStateMappedProps> = ({HasAccessPhrase, IsYouTube, IsVideo, DownloadEnabled, Hash, AllowViewerToFastForwardVideo, OwnerLibrary}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n   const [workerState, setWorkerState] = SetupWorkerState();\n   const [showAlert, setShowAlert] = React.useState(false);\n   const [showShareModal, setShowShareModal] = useState(false);\n   const showDownloadMedia = config.watchConfig.viewersCanDownloadMedia && !IsYouTube;\n   const showSmartPlayerConfig = IsVideo && !IsYouTube;\n   const showAccessPhrase = config.featureSwitches.EnableMediaAccessPhrase && config.watchConfig.media.Privacy !== MediaPrivacy.private;\n\n   const onWarningConfirm = async () => {\n      setShowAlert(false);\n      setWorkerState({isWorking: true, hasError: false});\n\n      const downloadEnabled = !DownloadEnabled;\n\n      try {\n         await mediaApi.updateDownloadEnabled(Hash, downloadEnabled);\n         updateMediaState({DownloadEnabled: downloadEnabled});\n         setWorkerState({isWorking: false, hasError: false});\n      } catch {\n         setWorkerState({isWorking: false, hasError: true});\n      }\n   };\n\n   const onToggleDownload = async () => {\n      if (!DownloadEnabled) {\n         setShowAlert(true);\n      } else {\n         await onWarningConfirm();\n      }\n   };\n\n   const onToggleAllowViewerToFastForwardVideo = async () => {\n      const allowViewerToFastForwardVideo = !AllowViewerToFastForwardVideo;\n      setWorkerState({isWorking: true, hasError: false});\n      try {\n         await mediaApi.updateAllowViewerToFastForwardVideo(Hash, allowViewerToFastForwardVideo);\n         updateMediaState({AllowViewerToFastForwardVideo: allowViewerToFastForwardVideo});\n         setWorkerState({isWorking: false, hasError: false});\n      } catch {\n         setWorkerState({isWorking: false, hasError: true});\n      }\n   };\n\n   const onToggleAccessPhrase = async () => {\n      updateMediaState({HasAccessPhrase: !HasAccessPhrase});\n\n      // on turning off access phrase\n      if (HasAccessPhrase) {\n         await mediaApi.clearMediaAccessPhrase(Hash);\n      } else {\n         // on turning on access phrase\n         await mediaApi.updateMediaAccessPhrase(Hash, await accessPhraseApi.generateAccessPhrase());\n      }\n\n      updateMediaStateFromServer();\n   };\n\n   const onWarningClose = () => {\n      setShowAlert(false);\n   };\n\n   const showMediaSettings = () => showDownloadMedia || showSmartPlayerConfig || showAccessPhrase;\n\n   const AccessPhraseSettings = (\n      <InlineFieldGroup>\n         <InlineLabeledCheckbox\n            testId=\"enable-accessphrase-test-id\"\n            isChecked={HasAccessPhrase}\n            isCentered={false}\n            onClick={onToggleAccessPhrase}\n            checkboxAlignment={TscCheckboxAlignment.left}\n            labelText={t('accessPhrase.protected')}\n            disabled={workerState.isWorking}\n         />\n         <ControlButton\n            buttonType={TscButtonType.secondary}\n            glyph={<Glyphs.Settings16x16 />}\n            themeName={theme}\n            onClick={() => setShowShareModal(true)}\n            title={t('accessPhrase.manage')}\n            testId=\"accessphrase-copy-button\"\n         />\n      </InlineFieldGroup>\n   );\n\n   const warningModal =\n      (\n         <AlertModalPortal\n            modalWidth=\"28rem\"\n            dismissButtonType={TscButtonType.secondary}\n            dismissContent={t('general.cancel')}\n            confirmButtonType={TscButtonType.primary}\n            closeContent={t('general.cancel')}\n            confirmContent={t('privacy.settingsMenu.continue')}\n            onDismiss={onWarningClose}\n            onClose={onWarningClose}\n            onConfirm={onWarningConfirm}\n            title={t('privacy.settingsMenu.warningTitle')}\n         >\n            {t('privacy.settingsMenu.warningText')}\n         </AlertModalPortal>\n      );\n\n   return !showMediaSettings() ? null : (\n      <TabContentWrapper\n         showSpinner={workerState.isWorking}\n         showError={workerState.hasError}\n      >\n         <Container data-test-id=\"privacy-settings-container\">\n            {showAlert && warningModal}\n            <Spacer>\n               {showDownloadMedia && (\n                  <InlineLabeledCheckbox\n                     isChecked={DownloadEnabled}\n                     isCentered={false}\n                     onClick={onToggleDownload}\n                     checkboxAlignment={TscCheckboxAlignment.left}\n                     labelText={t('privacy.settingsMenu.download')}\n                     disabled={workerState.isWorking}\n                     testId=\"downLoadMediaOption\"\n                  />\n               )}\n               {showSmartPlayerConfig && (\n                  <InlineLabeledCheckbox\n                     testId=\"AllowViewerToFastForwardVideoInlineCheckbox\"\n                     isChecked={AllowViewerToFastForwardVideo}\n                     isCentered={false}\n                     onClick={onToggleAllowViewerToFastForwardVideo}\n                     checkboxAlignment={TscCheckboxAlignment.left}\n                     labelText={t('privacy.settingsMenu.allowViewerToFastForwardVideo')}\n                     disabled={workerState.isWorking}\n                  />\n               )}\n               {showAccessPhrase && AccessPhraseSettings}\n               {workerState.hasError && (\n                  <Failure>\n                     {t('privacy.settingsMenu.failure')}\n                  </Failure>\n               )}\n            </Spacer>\n            {showShareModal && (\n               <ShareModal\n                  mediaLibraryType={OwnerLibrary.LibraryType}\n                  onClose={() => {\n                     setShowShareModal(false);\n                  }}\n               />\n            )}\n         </Container>\n      </TabContentWrapper>\n   );\n};\n\nexport interface IStateMappedProps {\n   IsYouTube: boolean;\n   IsVideo: boolean;\n   DownloadEnabled: boolean;\n   Hash: string;\n   AllowViewerToFastForwardVideo: boolean;\n   HasAccessPhrase: boolean;\n   OwnerLibrary: IBaseLibrary;\n}\n\nconst mapStatesToProps = (\n   // eslint-disable-next-line no-empty-pattern\n   {},\n   {IsYouTube, IsVideo, DownloadEnabled, Hash, AllowViewerToFastForwardVideo, HasAccessPhrase, OwnerLibrary}: Partial<IStateMappedProps>\n): IStateMappedProps => ({IsYouTube, IsVideo, DownloadEnabled, Hash, AllowViewerToFastForwardVideo, HasAccessPhrase, OwnerLibrary});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore)(MediaSettingsBase);\n","import React from 'react';\nimport TabContentWrapper from '../TabContentWrapper';\nimport {useTranslation} from 'react-i18next';\nimport styled from 'styled-components';\nimport {\n   ControlButton,\n   TscButtonType,\n   TscThemeName,\n   TscThemeNames, TscStyles\n} from '@techsmith/tsc-cloud-style-guide';\nimport dayjs from 'dayjs';\nimport cssConstants from '../../../constants/cssConstants';\nimport {StyledWarning} from '../../util/StyledElements';\nimport quizApi from '../../../service/quizApi';\nimport {IWorkerState} from '../../../model/workerState';\nimport {IQuizData} from '../../../model/quizModel';\nimport AlertModalSpinner from '../../util/AlertModalSpinner';\nimport '../../../static/css/modal.less';\nimport withMemoizedContexts from '../../../context/contextContainerHoC';\nimport {useTscTheme} from '../../../context/themeProvider';\nimport {quizDataStore, updateQuizData} from '../../../context/quizDataProvider';\nimport {mediaStore} from '../../../context/mediaProvider';\nimport deepEqual from 'deep-equal';\nimport {AlertModalPortal, BasicModalPortal} from '../../util/ModalPortalHelper';\nimport Constants from '../../../constants/Constants';\n\nconst EmptyStateWrapper = styled.div`\n   display: flex;\n   flex-direction: column;\n   justify-content: center;\n   align-items: center;\n   min-height: 6.75rem;\n   margin-top: 1rem;\n`;\nEmptyStateWrapper.displayName = 'empty-state-wrapper';\n\nconst EmptyStateHeader = styled.h3`\n   margin: 0;\n`;\nEmptyStateHeader.displayName = 'empty-state-header';\n\nconst EmptyStateText = styled.span`\n   margin: 1rem;\n`;\nEmptyStateText.displayName = 'empty-state-text';\n\nconst QuizDisplayWrapper = styled.div`\n   display: flex;\n   flex-direction: column;\n`;\n\nconst QuizTitleSpan = styled.span`\n   margin: 1rem 0 0.25rem 0;\n   font-weight: ${cssConstants.semiBoldWeight};\n   white-space: nowrap;\n   overflow: hidden;\n   text-overflow: ellipsis;\n`;\nQuizTitleSpan.displayName = 'quiz-title-span';\n\nconst ButtonGroup = styled.div`\n   margin-top: 1rem;\n\n   > Button {\n      margin-right: 1rem;\n   }\n\n   @media screen and (max-width: ${cssConstants.contentBreakpoint}px) {\n      display: flex;\n      flex-direction: column;\n\n      > Button {\n         margin-top: 1rem;\n      }\n   }\n`;\n\nconst StyledIFrame = styled.iframe`\n   height: 40rem;\n   width: 100%;\n   box-sizing: border-box;\n   border: none;\n`;\n\nconst QuizRetirementAnnouncementContainer = styled.div<{theme: TscThemeNames}>`\n   display: flex;\n   align-items: center;\n   justify-content: space-between;\n   padding: .5rem;\n   border-radius: ${TscStyles.border.radius.md};\n   border: 1px solid ${TscStyles.color.message.caution};\n   background-color: ${props => props.theme === TscThemeName.dawn ? TscStyles.color.ui.dawn.lightMedium : TscStyles.color.ui.dusk.mediumDark};\n`;\n\nconst NewQuizRemoveMessage = styled.div`\n   margin: 0 0 .5rem 0;\n   font-weight: ${TscStyles.font.weight.semibold};\n`;\n\nenum displayStates {\n   initial,\n   loading,\n   emptyState,\n   showQuiz\n}\n\nenum modalStates {\n   none,\n   viewResults,\n   edit,\n   removeQuiz\n}\n\nexport const QuizzingTabBase: React.FC<IQuizzingTabProps & IStateMappedProps> = ({initialIsWorking, initialHasError, Id, HasBeenPublished, Title, CreateDate, ResultsUrl, EditUrl, QuestionSets, Hash, IsEncoding, QuizId}) => {\n   const {t} = useTranslation();\n   const theme = useTscTheme();\n\n   const [state, setState] = React.useState({\n      isWorking: initialIsWorking,\n      hasError: initialHasError,\n      errorText: '',\n      currentDisplay: displayStates.initial,\n      currentModal: modalStates.none\n   } as IQuizzingTabState);\n\n   const updateState = (updatedValues: Partial<IQuizzingTabState>): void => {\n      setState(prevState => Object.assign({}, prevState, updatedValues));\n   };\n\n   const fetchAndUpdateQuizData = async (): Promise<IQuizData> => {\n      try {\n         const updatedQuizData = await quizApi.getQuizData(Hash);\n         updateQuizData(updatedQuizData);\n         updateState({isWorking: false, hasError: false, errorText: ''});\n         return updatedQuizData;\n      } catch (e) {\n         !IsEncoding && updateState({isWorking: false, hasError: true, errorText: t('quizzing.quizDataFetchError')});\n      }\n      return null;\n   };\n\n   const updateDisplayState = () => {\n      if (!Id.length) {\n         updateState({currentDisplay: displayStates.loading});\n      } else {\n         updateState({\n            currentDisplay: HasBeenPublished ?\n               displayStates.showQuiz :\n               displayStates.emptyState\n         });\n      }\n   };\n\n   React.useEffect(() => {\n      updateDisplayState();\n   }, [Id, HasBeenPublished]);\n\n   React.useEffect(() => {\n      void fetchAndUpdateQuizData();\n   }, [QuizId]);\n\n   const handleViewResultsClick = () => {\n      updateState({currentModal: modalStates.viewResults});\n   };\n\n   const handleEditClick = () => {\n      updateState({currentModal: modalStates.edit});\n   };\n\n   const handleRemoveQuizClick = () => {\n      updateState({currentModal: modalStates.removeQuiz});\n   };\n\n   const closeModals = async () => {\n      const updatedQuizData = await fetchAndUpdateQuizData();\n\n      if (!deepEqual(QuestionSets, updatedQuizData.QuestionSets)) {\n         window.location.reload();\n         return;\n      }\n      updateState({currentModal: modalStates.none});\n   };\n\n   const removeQuiz = async () => {\n      try {\n         updateState({isWorking: true});\n         await quizApi.removeQuiz(Hash);\n         await fetchAndUpdateQuizData();\n         updateState({isWorking: false, currentModal: modalStates.none, hasError: false, errorText: ''});\n         window.location.reload();\n      } catch (e) {\n         updateState({isWorking: false, hasError: true, errorText: t('general.errorText')});\n      }\n   };\n\n   const initialDisplay: React.JSX.Element = (\n      <EmptyStateWrapper />\n   );\n\n   const loadingDisplay: React.JSX.Element = (\n      <EmptyStateWrapper>\n         <EmptyStateText>\n            {t('quizzing.loadingQuizDataText')}\n         </EmptyStateText>\n      </EmptyStateWrapper>\n   );\n\n   const emptyStateDisplay: React.JSX.Element = (\n      <EmptyStateWrapper>\n         <EmptyStateHeader>\n            {t('quizzing.noQuiz')}\n         </EmptyStateHeader>\n      </EmptyStateWrapper>\n   );\n\n   const quizDisplay: React.JSX.Element = (\n      <QuizDisplayWrapper>\n         <QuizTitleSpan>\n            {Title}\n         </QuizTitleSpan>\n         <span>\n            {t('quizzing.createdOn', {date: dayjs(CreateDate).format('MM/DD/YYYY')})}\n         </span>\n         <ButtonGroup>\n            <ControlButton\n               themeName={theme}\n               buttonType={TscButtonType.secondary}\n               label={t('quizzing.viewResultsButton')}\n               onClick={() => handleViewResultsClick()}\n               testId=\"quizzing-tab-view-results-button\"\n            />\n            <ControlButton\n               themeName={theme}\n               buttonType={TscButtonType.secondary}\n               label={t('quizzing.editButton')}\n               onClick={() => handleEditClick()}\n               testId=\"quizzing-tab-edit-quiz-button\"\n            />\n            <ControlButton\n               themeName={theme}\n               buttonType={TscButtonType.secondary}\n               label={t('quizzing.removeQuizButton')}\n               onClick={() => handleRemoveQuizClick()}\n               testId=\"quizzing-tab-remove-quiz-secondary-button\"\n            />\n         </ButtonGroup>\n      </QuizDisplayWrapper>\n   );\n\n   const viewResultsModal = (\n      <BasicModalPortal\n         title={t('quizzing.quizResultsModalTitle')}\n         width=\"68rem\"\n         onClose={closeModals}\n         themeName={theme}\n         isLoading={state.isWorking || initialIsWorking}\n      >\n         <StyledIFrame src={ResultsUrl} />\n      </BasicModalPortal>\n   );\n\n   const editQuizModal = (\n      <BasicModalPortal\n         title={t('quizzing.editQuizModalTitle')}\n         width=\"68rem\"\n         onClose={closeModals}\n         themeName={TscThemeName.dawn}\n         isLoading={state.isWorking || initialIsWorking}\n         testId=\"edit-quiz-modal\"\n      >\n         <StyledIFrame src={EditUrl} />\n      </BasicModalPortal>\n   );\n\n   const removeQuizConfirmationModalBody: React.JSX.Element = (\n      <>\n         {state.isWorking && <AlertModalSpinner />}\n         <div>\n            {state.hasError && (\n               <StyledWarning>\n                  {state.errorText}\n               </StyledWarning>\n            )}\n            <span>\n               {t('quizzing.removeQuizConfirmationModalText', {quizTitle: Title})}\n            </span>\n         </div>\n      </>\n   );\n\n   const removeQuizConfirmationModal = (\n      <AlertModalPortal\n         title={t('quizzing.removeQuizConfirmationModalTitle')}\n         modalWidth={cssConstants.defaultModalWidth}\n         onClose={closeModals}\n         onConfirm={removeQuiz}\n         onDismiss={closeModals}\n         confirmContent={t('quizzing.removeQuizButton')}\n         confirmButtonType={TscButtonType.destructive}\n         disableConfirmButton={state.isWorking}\n         dismissContent={t('general.cancel')}\n         dismissButtonType={TscButtonType.secondary}\n      >\n         {removeQuizConfirmationModalBody}\n      </AlertModalPortal>\n   );\n\n   return (\n      <TabContentWrapper\n         showSpinner={state.isWorking || initialIsWorking}\n         showError={false}\n      >\n         <QuizRetirementAnnouncementContainer\n            data-test-id=\"retirement-announcement-container\"\n            theme={theme}\n         >\n            <div>\n               <NewQuizRemoveMessage>\n                  {t('quizzing.removeNewQuizMessage')}\n               </NewQuizRemoveMessage>\n               {t('quizzing.retirementMessage')}\n            </div>\n            <ControlButton\n               title={t('quizzing.retirementLinkAriaLabel')}\n               href={Constants.navigation.quizRetirementLink}\n               label={t('quizzing.retirementLinkText')}\n               aria={{'aria-label': t('quizzing.retirementLinkAriaLabel')}}\n               buttonType={TscButtonType.floating}\n               themeName={theme}\n               openLinkInNewTab={true}\n            />\n         </QuizRetirementAnnouncementContainer>\n         {state.hasError && (\n            <StyledWarning>\n               {state.errorText}\n            </StyledWarning>\n         )}\n         {state.currentDisplay === displayStates.initial && initialDisplay}\n         {state.currentDisplay === displayStates.loading && loadingDisplay}\n         {state.currentDisplay === displayStates.emptyState && emptyStateDisplay}\n         {state.currentDisplay === displayStates.showQuiz && quizDisplay}\n         {state.currentModal === modalStates.viewResults && viewResultsModal}\n         {state.currentModal === modalStates.edit && editQuizModal}\n         {state.currentModal === modalStates.removeQuiz && removeQuizConfirmationModal}\n      </TabContentWrapper>\n   );\n};\n\nexport interface IQuizzingTabState extends IWorkerState {\n   errorText: string;\n   currentDisplay: displayStates;\n   currentModal: modalStates;\n}\n\nexport interface IQuizzingTabProps {\n   initialIsWorking: boolean;\n   initialHasError: boolean;\n}\n\nexport interface IStateMappedProps {\n   CreateDate: string;\n   HasBeenPublished: boolean;\n   Id: string;\n   Title: string;\n   ResultsUrl: string;\n   EditUrl: string;\n   QuestionSets: object;\n   Hash: string;\n   IsEncoding: boolean;\n   QuizId: string;\n}\n\nconst mapStatesToProps = (\n   {initialIsWorking, initialHasError}: IQuizzingTabProps,\n   {CreateDate, HasBeenPublished, Id, Title, ResultsUrl, EditUrl, QuestionSets}: Partial<IStateMappedProps>,\n   {Hash, IsEncoding, QuizId}: Partial<IStateMappedProps>\n): IStateMappedProps & IQuizzingTabProps => ({initialIsWorking, initialHasError, CreateDate, HasBeenPublished, Id, Title, ResultsUrl, EditUrl, QuestionSets, Hash, IsEncoding, QuizId});\n\nexport default withMemoizedContexts(mapStatesToProps, quizDataStore, mediaStore)(QuizzingTabBase);\n","import React, {useEffect, useState} from 'react';\nimport {importMediaInterface} from '../../hooks/dynamicImport';\nimport {ButtonStyledAsAnchor} from '../util/StyledElements';\nimport styled from 'styled-components';\nimport {useTscTheme} from '../../context/themeProvider';\nimport {TscStyles, TscThemeName, TscThemeNames} from '@techsmith/tsc-cloud-style-guide';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {ITranscript} from '../../model/captionModels';\nimport {transcriptStore} from '../../context/transcriptProvider';\nimport {events, ISmartPlayerTimeUpdateEvent} from '@techsmith/techsmith-smartplayer';\nimport {isMobile} from 'react-device-detect';\n\nconst TranscriptItem = styled.div<{isHighlight: boolean; theme: TscThemeNames}>`\n   display: flex;\n   align-items: center;\n   padding: 8px 8px 8px 4px;\n   margin: 1px 0;\n   border-radius: ${TscStyles.border.radius.lg};\n   background-color: ${props => props.isHighlight ? props.theme === TscThemeName.dusk ? TscStyles.color.action.secondaryDusk : TscStyles.color.ui.dawn.lightMedium : 'transparent'};\n   border: 1px solid ${props => props.isHighlight ? props.theme === TscThemeName.dusk ? TscStyles.color.ui.dusk.lightMedium : TscStyles.color.ui.dawn.medium : 'transparent'};\n   overflow: auto;\n   gap: 8px;\n   font-family: Figtree, sans-serif;\n   font-weight: 500;\n   font-size: 0.8125rem;\n   transition: all 0.15s ease-out;\n\n   &:hover {\n      cursor: pointer;\n   }\n\n   button {\n      color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n      background-color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.action.secondaryDusk : TscStyles.color.ui.dawn.lightMedium};\n      border-radius: ${TscStyles.border.radius.xs};\n      min-width: 48px;\n      padding: 0 2px;\n      align-self: flex-start;\n      text-decoration: none;\n      font-feature-settings: \"tnum\";\n      &:hover {\n         outline-style: none;\n         outline-width: none;\n         outline-offset: none;\n      }\n   }\n`;\n\nconst TranscriptTextItem = styled.div<{theme: TscThemeNames}>`\n   font-family: Figtree, sans-serif;\n   font-weight: 500;\n   font-size: 0.8125rem;\n   line-height: 1rem;\n   margin-right: 1rem;\n   flex: 1;\n   text-decoration: none;\n   overflow: hidden;\n   word-wrap: break-word;\n   color: ${props => props.theme === TscThemeName.dusk ? TscStyles.color.text.light : TscStyles.color.text.mediumDark};\n`;\n\nconst TranscriptWrapper = styled.div<{showSpinner: boolean; showError: boolean}>`\n   padding: 8px;\n`;\n\nexport const TranscriptTabBase: React.FC<IStateMappedProps> = ({transcript}) => {\n   const [currentSecond, setCurrentSecond] = useState(null);\n   const [hoveredKey, setHoveredKey] = useState(null);\n   const theme = useTscTheme();\n\n   const setMediaTime = async (time: string) => {\n      const mediaInterface = await importMediaInterface();\n      mediaInterface.currentTime = parseInt(time, 10);\n   };\n\n   const setTranscriptTime = async () => {\n      const mediaInterface = await importMediaInterface();\n      const currentTimeFloor = Math.floor(mediaInterface.currentTime);\n      setCurrentSecond(currentTimeFloor);\n   };\n\n   const initializeTranscript = () => {\n      void setTranscriptTime();\n   };\n\n   const addEventListener = async () => {\n      const mediaInterface = await importMediaInterface();\n      mediaInterface.addEventListener<ISmartPlayerTimeUpdateEvent>(events.ExternalVideo.VideoTimeUpdate, setTranscriptTime);\n   };\n\n   const removeEventListener = async () => {\n      const mediaInterface = await importMediaInterface();\n      mediaInterface.removeEventListener(events.ExternalVideo.VideoTimeUpdate, setTranscriptTime);\n   };\n\n   useEffect(() => {\n      initializeTranscript();\n      void addEventListener();\n      return () => {\n         void removeEventListener();\n      };\n   }, []);\n\n   return (\n      <TranscriptWrapper\n         showSpinner={false}\n         showError={false}\n      >\n         {transcript && Object.entries(transcript).map(([key, value]) => {\n            const keyInt = parseInt(key, 10);\n            return (\n               <TranscriptItem\n                  onMouseOver={() => !isMobile && setHoveredKey(key)}\n                  onMouseOut={() => setHoveredKey(null)}\n                  key={key}\n                  theme={theme}\n                  isHighlight={key === hoveredKey || currentSecond !== null && currentSecond >= keyInt && currentSecond < keyInt + value.duration}\n                  onClick={() => setMediaTime(key)}\n               >\n                  <ButtonStyledAsAnchor>\n                     {value.displayTime}\n                  </ButtonStyledAsAnchor>\n                  <TranscriptTextItem theme={theme}>\n                     {value.text}\n                  </TranscriptTextItem>\n               </TranscriptItem>\n            );\n         })}\n      </TranscriptWrapper>\n   );\n};\n\nexport interface IStateMappedProps {\n   transcript: ITranscript;\n}\n\nconst mapStatesToProps = (\n   // eslint-disable-next-line no-empty-pattern\n   {},\n   {transcript}: Partial<IStateMappedProps>\n): IStateMappedProps => ({transcript});\n\nexport default withMemoizedContexts(mapStatesToProps, transcriptStore)(TranscriptTabBase);\n","interface DocumentWithFullscreen extends Document {\n   webkitCurrentFullScreenElement: Element;\n   mozFullScreenElement?: Element;\n   msFullscreenElement?: Element;\n}\n\nexport const getIsFullscreen = () => document.fullscreenElement || (document as DocumentWithFullscreen).webkitCurrentFullScreenElement || (document as DocumentWithFullscreen).mozFullScreenElement;","import logging from '../../service/logging';\n\nconst setItem = (key: string, value: string): void => {\n   try {\n      window.localStorage.setItem(key, value);\n   } catch (e) {\n      logging.error(`Failed to set local storage key: ${key} with value: ${value}.`, e);\n   }\n};\n\nconst getItem = (key: string): string => {\n   try {\n      return window.localStorage.getItem(key) || '';\n   } catch (e) {\n      logging.error(`Failed to get local storage key: ${key}.`, e);\n      return '';\n   }\n};\n\nconst removeItem = (key: string): void => {\n   try {\n      window.localStorage.removeItem(key);\n   } catch (e) {\n      logging.error(`Failed to remove local storage key: ${key}.`, e);\n   }\n};\n\nexport default {\n   setItem,\n   getItem,\n   removeItem\n};\n","import {IGetMediaQueryParams} from '../../service/userApi';\nimport Constants, {OrderByQueryString, SortMetric} from '../../constants/Constants';\nimport {IFolderTreeNode} from '../../model/folderTreeNode';\nimport {MediaContentType} from '../../model/baseMedia';\n\nexport const buildMediaQueryParams = (sortMetric: SortMetric, fromHash?: string, activeFolder?: IFolderTreeNode, mediaContentFilters?: MediaContentType[], includeExcludedMedia?: boolean) => {\n   const fromValue = fromHash;\n   const queryParams: Partial<IGetMediaQueryParams> = fromValue ? {from: fromValue, take: Constants.mediaPaginationBatchSize} : {take: Constants.mediaPaginationBatchSize};\n\n   if (activeFolder?.Hash) {\n      queryParams.folderHash = activeFolder.Hash;\n   }\n\n   Object.assign(queryParams, buildSortMetricQueryParams(sortMetric));\n\n   queryParams.includeExcludedMedia = typeof includeExcludedMedia === 'boolean' ? includeExcludedMedia : true;\n\n   if (mediaContentFilters) {\n      queryParams.mediaContentFilter = mediaContentFilters;\n   }\n\n   return queryParams;\n};\n\nexport const buildSortMetricQueryParams = (sortMetric: SortMetric) => {\n   const sortMetricQueryParams: Partial<IGetMediaQueryParams> = {};\n   if (sortMetric === SortMetric.dateAscending) {\n      sortMetricQueryParams.orderBy = OrderByQueryString.date;\n   } else if (sortMetric === SortMetric.dateDescending) {\n      sortMetricQueryParams.orderBy = OrderByQueryString.date;\n      sortMetricQueryParams.descending = true;\n   } else if (sortMetric === SortMetric.titleAscending) {\n      sortMetricQueryParams.orderBy = OrderByQueryString.title;\n   } else if (sortMetric === SortMetric.titleDescending) {\n      sortMetricQueryParams.orderBy = OrderByQueryString.title;\n      sortMetricQueryParams.descending = true;\n   } else if (sortMetric === SortMetric.viewsAscending) {\n      sortMetricQueryParams.orderBy = OrderByQueryString.views;\n   } else if (sortMetric === SortMetric.viewsDescending) {\n      sortMetricQueryParams.orderBy = OrderByQueryString.views;\n      sortMetricQueryParams.descending = true;\n   }\n   return sortMetricQueryParams;\n};\n","import React from 'react';\nimport {PopoverButton, IPopoverButtonProps} from '@techsmith/tsc-cloud-style-guide';\n\nconst TestablePopoverButton: React.FC<ITestablePopoverButtonProps> = ({children, ...otherProps}) => (\n   <PopoverButton\n      popoverMenu={children}\n      {...otherProps}\n   />\n);\n\nexport default TestablePopoverButton;\n\ninterface ITestablePopoverButtonProps extends Omit<IPopoverButtonProps, 'popoverMenu'> {\n   children?: React.ReactNode;\n}\n","import i18n from 'i18next';\n\nexport default {\n   details: i18n.t('details.tabName'),\n   privacy: i18n.t('privacy.tabName'),\n   analytics: i18n.t('analytics.tabName'),\n   editMedia: i18n.t('editMedia.tabName'),\n   accessibility: i18n.t('accessibility.tabName'),\n   quizzing: i18n.t('quizzing.tabName'),\n   conversations: i18n.t('conversations.tabName'),\n   conversation: i18n.t('conversations.ConversationLabel'),\n   comments: i18n.t('comments.tabName'),\n   transcript: i18n.t('transcript.tabName'),\n   settings: i18n.t('Settings')\n};\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport {BrowserRouter} from 'react-router-dom';\nimport {QueryParamProvider} from 'use-query-params';\nimport {ReactRouter5Adapter} from 'use-query-params/adapters/react-router-5';\nimport App from './component/App';\nimport {IWatchAppModel} from './model/appModel';\nimport config from './service/config';\nimport './static/css/index.less';\nimport StateProvider from './context/stateProvider';\nimport {DndProvider} from 'react-dnd';\nimport {HTML5Backend} from 'react-dnd-html5-backend';\n\nexport default (model: IWatchAppModel) => {\n   const appRoot = document.getElementById('root');\n   if (!appRoot) {\n      return;\n   }\n\n   document.body.classList.add('app-body');\n\n   config.initWatch(model);\n\n   ReactDOM.render(\n      <DndProvider backend={HTML5Backend}>\n         <BrowserRouter>\n            <QueryParamProvider adapter={ReactRouter5Adapter}>\n               <StateProvider\n                  isOwnerOrAdmin={config.watchConfig.isOwnerAdminOrTeamEditor}\n                  isWatchPage={true}\n               >\n                  <App watchAppModel={model} />\n               </StateProvider>\n            </QueryParamProvider>\n         </BrowserRouter>\n      </DndProvider>,\n      appRoot\n   );\n};\n","import ApiUtil from '../util/ApiUtil';\nimport Constants from '../constants/Constants';\nimport {AxiosProgressEvent, AxiosRequestConfig, CancelTokenSource} from 'axios';\n\nconst baseUrl = '/api/v4/media';\n\nconst getAudioDescriptionDownloadUrl = (hash: string) => `${baseUrl}/${hash}/audiodescription`;\n\nconst removeAudioDescription = async (hash: string) => await ApiUtil.executeDeleteAsync(`${baseUrl}/${hash}/audiodescription`, [Constants.statusCodes.noContent]);\n\nconst uploadAudioDescription = async (hash: string, file: File, handleUploadProgress: (progressEvent: AxiosProgressEvent) => void, cancelTokenSource: CancelTokenSource) => {\n   const postData = new FormData();\n   postData.append('file', file);\n\n   const requestConfig: AxiosRequestConfig = {headers: {'Content-Type': 'multipart/form-data'}, onUploadProgress: handleUploadProgress, cancelToken: cancelTokenSource.token};\n\n   await ApiUtil.executePutAsync(`${baseUrl}/${hash}/audiodescription`, [Constants.statusCodes.created], postData, requestConfig);\n};\n\nexport default {\n   getAudioDescriptionDownloadUrl,\n   removeAudioDescription,\n   uploadAudioDescription\n};\n","import Constants from '../constants/Constants';\nimport ApiUtil from '../util/ApiUtil';\nimport {ICaptionData, ICaptionTrack, nullCaptionTrackFactory} from '../model/captionModels';\n\nconst baseUrl = '/api/v1/captions';\n\nconst getCaptionTrack = async (mediaId: string) => {\n   const response = await ApiUtil.executeGetWithoutCacheAsync(`${baseUrl}/${mediaId}`, [Constants.statusCodes.ok]);\n   return response.data as ICaptionTrack;\n};\n\nconst getStatus = async (mediaId: string): Promise<ICaptionData[]> => {\n   const response = await ApiUtil.executeGetWithoutCacheAsync(`${baseUrl}/${mediaId}/status`, [Constants.statusCodes.ok]);\n   // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n   return Array.isArray(response.data) ? response.data : [response.data] as ICaptionData[];\n};\n\nconst saveCaptionTrack = async (mediaId: string, captionTrack: ICaptionTrack) => await ApiUtil.executePutAsync(`${baseUrl}/${mediaId}`, [Constants.statusCodes.noContent], captionTrack);\n\nconst setAssignee = async (mediaId: string, emailAddress: string) => {\n   const encodedEmail: string = encodeURIComponent(emailAddress);\n   return await ApiUtil.executePutAsync(`${baseUrl}/${mediaId}/assign/${encodedEmail}`, [Constants.statusCodes.noContent]);\n};\n\nconst removeAssignee = async (mediaId: string) => await ApiUtil.executeDeleteAsync(`${baseUrl}/${mediaId}/assign`, [Constants.statusCodes.noContent]);\n\nconst publishCaptionTrack = async (mediaId: string) => {\n   const mediaCaptionTrack = await getCaptionTrack(mediaId);\n   const putData = nullCaptionTrackFactory({captions: mediaCaptionTrack.captions});\n\n   return await ApiUtil.executePutAsync(`${baseUrl}/${mediaId}/publish`, [Constants.statusCodes.noContent], putData);\n};\n\nconst deleteCaptionTrack = async (mediaId: string) => {\n   const emptyCaptionTrack = Object.assign({}, await getCaptionTrack(mediaId), {captions: []});\n\n   await ApiUtil.executePutAsync(`${baseUrl}/${mediaId}/publish`, [Constants.statusCodes.noContent], emptyCaptionTrack);\n};\n\nexport default {\n   getCaptionTrack,\n   getStatus,\n   saveCaptionTrack,\n   setAssignee,\n   removeAssignee,\n   publishCaptionTrack,\n   deleteCaptionTrack\n};\n","import Constants from '../constants/Constants';\nimport ApiUtil from '../util/ApiUtil';\n\nconst baseUrl = '/api/v1/transcription';\n\nconst startAutomatedTranscription = async (mediaHash: string) => await ApiUtil.executePostAsync(`${baseUrl}/${mediaHash}`, [Constants.statusCodes.accepted]);\n\nconst startThirdPartyTranscription = async (mediaHash: string) => await ApiUtil.executePostAsync(`${baseUrl}/${mediaHash}/thirdparty`, [Constants.statusCodes.accepted]);\n\nconst cancelAutomatedTranscription = async (mediaHash: string) => {\n   await ApiUtil.executeDeleteAsync(`${baseUrl}/${mediaHash}`, [Constants.statusCodes.noContent]);\n};\n\nconst approveThirdPartyTranscription = async (mediaHash: string) => {\n   await ApiUtil.executePutAsync(`${baseUrl}/${mediaHash}/thirdparty`, [Constants.statusCodes.accepted]);\n};\n\nconst cancelThirdPartyTranscription = async (mediaHash: string) => {\n   await ApiUtil.executeDeleteAsync(`${baseUrl}/${mediaHash}/thirdparty`, [Constants.statusCodes.noContent]);\n};\n\nexport default {\n   startAutomatedTranscription,\n   startThirdPartyTranscription,\n   cancelAutomatedTranscription,\n   approveThirdPartyTranscription,\n   cancelThirdPartyTranscription\n};\n","import Wait from './Wait';\n\nconst clearMessageTimeoutInSeconds = 0.25;\n\nconst readAlert = async (message: string): Promise<void> => {\n   try {\n      const ariaLiveStatusElement = document.getElementById('aria-live-status');\n      ariaLiveStatusElement.innerText = message;\n      await Wait.seconds(clearMessageTimeoutInSeconds);\n      ariaLiveStatusElement.innerText = '';\n   } catch (e) {\n      console.info(e);\n   }\n};\n\nexport default {\n   readAlert\n};","const defaultPixelsPerRem = '16';\n\ninterface IMeasurementConstructorParams {\n   pixels: number;\n   rem: number;\n}\n\nexport default class Measurement {\n   // One rem is equivalent to the font size, in pixels, of the root element (aka the document).\n   static readonly pixelsPerRem = parseFloat(getComputedStyle(document.documentElement).fontSize || defaultPixelsPerRem);\n   static readonly remPerPixel = 1 / Measurement.pixelsPerRem;\n   static get zero() {\n      return new Measurement({pixels: 0});\n   }\n\n   private readonly pixels: number;\n\n   constructor({pixels = 0, rem = 0}: Partial<IMeasurementConstructorParams>) {\n      this.pixels = pixels + (rem * Measurement.pixelsPerRem);\n   }\n\n   equals(other: unknown): boolean {\n      if (other instanceof Measurement) {\n         return other.pixels === this.pixels;\n      }\n\n      return false;\n   }\n\n   get inPixels(): number {\n      return this.pixels;\n   }\n\n   get inRem(): number {\n      return this.pixels * Measurement.remPerPixel;\n   }\n}\n","import {visit} from 'unist-util-visit';\nimport {Node} from 'unist-util-visit/lib';\nimport {Element, ElementContent, Properties} from 'hast';\nimport {mediaInterface} from '@techsmith/techsmith-smartplayer';\nimport timeFormatter from './TimeFormatter';\nimport Constants from '../constants/Constants';\n\nexport interface RehypeTimecodeLinksPluginOptions {\n   scrollableElementId: string;\n}\n\n/**\n * Plugin to automatically add javascript handler to timecode links.\n */\nconst rehypeTimecodeLinksPlugin = (options: RehypeTimecodeLinksPluginOptions): ((n: Node) => void) => tree =>\n   visit(tree, 'element', (node: Element): void => {\n      if (node.tagName === 'p' && node.children.length) {\n         node.children.forEach((n: ElementContent, index: number) => {\n            if (n.type === 'text' && n.value) {\n               const timecodes = Constants.timeCodeRegex.exec(n.value);\n\n               if (timecodes) {\n                  const timeInSeconds = timeFormatter.getSecondsFromTimeString(timecodes[0]);\n                  const p: Properties = {\n                     href: '#',\n                     onClick: ((e: MouseEvent) => {\n                        e.preventDefault();\n                        mediaInterface.currentTime = timeInSeconds;\n                        const scrollableElement = document.getElementById(options.scrollableElementId);\n                        if (scrollableElement) {\n                           scrollableElement.scrollTo({top: 0, behavior: 'smooth'});\n                        }\n                        return false;\n                     }) as any // Typescript thinks this isn't a valid type, but it works.\n                  };\n\n                  node.children[index] = {\n                     type: 'element',\n                     tagName: 'a',\n                     properties: p,\n                     children: [{type: 'text', value: n.value} as ElementContent]\n                  };\n               }\n            }\n         });\n      }\n   });\n\nexport default rehypeTimecodeLinksPlugin;\n","import Constants from '../constants/Constants';\nimport config from '../service/config';\nimport tabNames from '../constants/tabNames';\n\nexport const getCaptionEditorUrl = (mediaHash: string, tabName: string = tabNames.accessibility) => {\n   const baseUrl = Constants.navigation.captionEditor.replace('{mediaHash}', mediaHash);\n   const resourceLinkId = new URLSearchParams(window.location.search).get('resourceLinkId') || new URLSearchParams(window.location.search).get('resourcelinkid');\n\n   const queryParams = new URLSearchParams();\n   config.environmentData.IsLti && queryParams.append('isltisession', 'true');\n   config.environmentData.IsLti && resourceLinkId && queryParams.append('resourceLinkId', resourceLinkId);\n   tabName && queryParams.append('tab', tabName);\n\n   return `${baseUrl}?${queryParams.toString()}`;\n};\n","/* eslint-disable no-alert */\nconst info = (message: string): void => {\n   alert(message);\n};\n\nconst warn = (message: string): void => {\n   alert(message);\n};\n\nexport default {\n   info,\n   warn\n};","export default {\n   seconds: (s: number): Promise<void> => new Promise(resolve => window.setTimeout(resolve, s * 1000))\n};"],"names":["_react","_interopRequireDefault","require","_excluded","_extends","Object","assign","bind","n","e","arguments","length","t","r","hasOwnProperty","call","apply","exports","_ref","styles","props","_objectWithoutProperties2","default","React","createElement","xmlns","viewBox","height","width","d","fill","clipPath","opacity","id","x1","y1","x2","y2","gradientUnits","stopColor","offset","transform","x","y","rx","ry","gradientTransform","xmlnsXlink","xlinkHref","style","isolation","mixBlendMode","cx","cy","__esModule","_typeof","_getRequireWildcardCache","has","get","__proto__","a","defineProperty","getOwnPropertyDescriptor","u","i","set","_interopRequireWildcard","_tscCloudStyleGuide","_config","_HeaderPlaceholder","_VideoPlaceholder","_analytics","_Header","_MediaContent","_reactI18next","_themeProvider","_contextContainerHoC","_foldersProvider","_ScreenReaderHelper","_StyledElements","_dynamicImport","WeakMap","AppBase","watchAppModel","folderTree","useTranslation","theme","useTscTheme","_useState","useState","Media","media","_slicedToArray2","folderDataUpdated","useRef","useEffect","current","updateFoldersData","config","user","TechSmithId","Analytics","initialize","mediaCustomDims","keys","filter","key","includes","forEach","aiConfigureCustomDimensions","window","addEventListener","TscStyles","events","modalOpenedOnPage","importMediaInterface","then","m","pause","PageWrapper","href","text","environmentData","IsLti","Suspense","fallback","hideSearch","hideEntitlementInfo","hideThemePicker","hideNavLinkTabs","className","withMemoizedContexts","_ref2","_ref3","foldersStore","_templateObject","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","_templateObject7","_templateObject8","_templateObject9","_templateObject10","_templateObject11","_templateObject12","_styledComponents","_cssConstants","_reactDom","_reactDeviceDetect","_server","_MediaProcessingGlyph","CollectionNavigationPane","styled","div","_taggedTemplateLiteral2","TscThemeName","dusk","cssConstants","collectionNavigationPaneBackgroundColorDusk","collectionNavigationPaneBackgroundColorDawn","border","radius","md","marketingPaneBorderDawn","color","light","mediumDark","CollectionNameContainer","CollectionTitle","lightMedium","medium","CollectionLink","ButtonContainer","MediaPositionText","span","NavigationPreviewContainer","lg","showNavigationPreview","right","concat","scrollX","top","scrollY","CollectionNavigationPreviewContent","collectionNavigationPreviewBackground","NavigationHoverDetails","NavigationDirection","collectionNavigationPaneNavigationDirectionColor","AdjacentMediaName","global","white","PreviewThumbnail","source","MarketingPaneBase","collectionNavigationResponse","sortMetric","collectionId","_useState2","mediaDetails","setMediaDetails","buttonHandlerRef","_useState3","_useState4","setShowNavigationPreview","_useState5","_useState6","hoverIsNext","setHoverIsNext","mediaProcessingSvgDataUri","String","btoa","renderToStaticMarkup","handleButtonHover","hoveredMediaDetails","isNext","handleButtonUnhover","CollectionName","ref","onMouseEnter","PreviousMediaDetails","isMobile","onMouseLeave","ControlButton","themeName","buttonType","TscButtonType","tertiary","testId","title","glyph","Glyphs","ArrowLeft16x16","disabled","Hash","tabIndex","currentMediaPosition","CurrentMediaPosition","collectionMediaCount","MediaCount","NextMediaDetails","ArrowRight16x16","ReactDOM","createPortal","Fragment","getBoundingClientRect","Number","bottom","Math","max","document","documentElement","clientHeight","innerHeight","Title","ThumbnailUrl","body","memo","_smoothscrollPolyfill","_driver","_MediaQueryParamsBuilder","_templateObject13","_templateObject14","_templateObject15","_templateObject16","_Constants","_PizzaTracker","_SmartPlayer","_MarketingHelper","_MarketingPane","_ReactionsMenu","_mediaTabsProvider","_selectedConversationProvider","_useQueryParams","_conversationsProvider","_collectionApi","_conversationApi","_workerState","_annotationManagerProvider","_Image","_mediaProvider","_logging","_commentsProvider","_reactionsProvider","_ReactionsImageWidget","_LocalStorageWrapper","_axios","_CollectionNavigationPane","_techsmithSmartplayer","_MediaTabs","_MediaTabsToggleButtons","_transcriptProvider","_DetailsTab","_MediaDetails","smoothscroll","polyfill","gap","ViewPageGrid","smartPlayerDisplayMode","displayModes","Theater","marketingPaneVisible","viewPageMeasurements","layoutGridVerticalMargin","layoutGridHorizontalMargin","isSidePanelOpen","contentWidth","conversationPanelWidth","mediaTabsDisplayBreakpoint","LeftGutterContainer","RightGutterContainer","MarketingContainer","CollectionNavigationContainer","MediaContainer","MediaDetailsContainer","ReactionsContainer","SidePanelContainer","ui","dawn","mediaTabsPanelOpen","isLti","variables","headerHeight","marketingBannerHeight","xl","mobileHeightBreakpoint","ReactionsMenuContainer","conversationsEnabled","ManagementContainer","contextMenuBreakpoint","zIndex","viewPageElement","MediaPageWrapper","MediaBase","isVideo","mediaHeight","zoom","isReactionsEnabled","mediaDetailsHeight","AnnotationControlsHelper","font","family","primary","AnnotationControlsHelperHeader","ConversationReactionsButton","getCommentOrReplyById","commentsToSearch","commentId","reduce","commentsList","c","_toConsumableArray2","replies","find","getRotatedDimensions","rotation","isRotated","MediaContentBase","hasToggledMediaTabs","annotationMode","conversations","VideoReviewId","IsVideo","Width","Height","Rotate","IsYouTube","IsReady","transcript","_SetupWorkerState","SetupWorkerState","_SetupWorkerState2","conversationLoadingState","setConversationLoadingState","initialSelectedComment","setInitialSelectedComment","_useQueryParam","useQueryParam","Constants","queryParams","conversation","StringParam","conversationParam","_useQueryParam3","_useQueryParam5","collectionSortOrder","getCollectionNavigationDataCancellationToken","_useQueryParam7","deepLinkedCommentIdCamelCase","_useQueryParam9","commentid","deepLinkedCommentIdLowerCase","deepLinkedCommentId","mediaContainerRef","rootContainerRef","querySelector","mediaPageWrapperRef","playerSettingsOpen","conversationCoachMarkRef","setSmartPlayerDisplayMode","setCollectionNavigationResponse","_useState7","_useState8","showMediaTabsControlButtons","setShowMediaTabsControlButtons","_useState9","innerWidth","_useState10","showMediaTabsOnSide","setShowMediaTabsOnSide","_useState11","_useState12","videoPaused","setVideoPaused","onVideoPause","onVideoPlay","onPlayerSettingsClose","useCallback","onPlayerSettingsOpen","generateGetCollectionNavigationDataCancellationToken","currentCancellationToken","cancel","newCancellationToken","Axios","CancelToken","getCollectionNavigationData","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_context","prev","next","t0","collectionApi","buildSortMetricQueryParams","t1","sent","stop","mediaInterface","External","PlayerSettingsClose","PlayerSettingsOpen","ExternalVideo","VideoPause","VideoPlay","removeEventListener","updateSelectedConversation","_callee2","updatedComments","selectedComment","_context2","isWorking","hasError","conversationApi","getConversationComments","VideoLoadedData","currentTime","time","updateCommentsState","comments","updateSelectedConversationState","SelectedComment","updateAnnotationManagerState","annotation","AnnotationModes","display","none","logging","error","status","statusCodes","notFound","watchConfig","isOwnerAdminOrTeamEditor","updateMediaTabsState","featureSwitches","IsScreencast","ConversationHash","displayCoachMarkForConversations","conversationContainerElement","userHasCloseCoachMark","getElementById","LocalStorageWrapper","getItem","localStorageKeys","conversationCoachMark","replace","highlight","element","popover","description","position","setTimeout","coachMarkCloseButton","getElementsByClassName","ariaLabel","focus","resizeHandler","isActivated","coachMarkButton","click","selectedConversation","UseSingleConversation","_conversationCoachMar","reset","hideOnMobileLoad","clientWidth","EnableReactions","updateReactionsFromServer","updateConversationsFromServer","stageBgColor","driver","Driver","padding","allowClose","stageBackground","keyboardControl","onDeselected","setItem","_getRotatedDimensions","_getRotatedDimensions2","rotatedMediaWidth","rotatedMediaHeight","setProperty","onDisplayModeChange","displayMode","showConversation","displayMediaTabsControlButtons","hideMediaTabsControlButtons","smartPlayerElement","isEmbedded","hidden","nativeMediaHeight","showMarketingPane","showWatchProductMessage","viewReviewId","mediaTabsEnabled","isCaptionAdminOrAssignee","mediaWidth","onMouseOver","onMouseOut","isSafari","isOwnerOrAdmin","edit","conversationId","showMediaLocation","canClosePanel","_ref4","_ref5","_ref6","_ref7","_ref8","_ref9","_ref10","_objectDestructuringEmpty2","mediaTabsStore","annotationManagerStore","conversationsStore","selectedConversationStore","mediaStore","transcriptStore","_tabNames","MediaTabsToggleButtonsContainer","hideConversationButton","xxl","MediaTabsToggleButtons","MediaTabsToggleButtonBase","_React$useState","_React$useState2","hasConversation","setHasConversation","_React$useState3","_React$useState4","hasTranscript","setHasTranscript","onButtonClick","newTab","currentTab","_document$getElementB","preventScroll","getDomElementTimeout","isFullWidth","onClick","tabNames","Comment24x24","Transcript24x24","settings","EditSettings24x24","startDrawing","canvas","setAnnotationExists","isDrawingMode","on","event","path","hasControls","name","shape","freehand","hasRotatingPoint","transparentColor","_fabric","turnOnMouseEventListeners","startingPoint","mouseMove","mouse","getPointer","square","getActiveObject","left","abs","requestRenderAll","mouseUp","remove","discardActiveObject","selection","fire","target","off","defaultCursor","fabric","Rect","stroke","freeDrawingBrush","strokeWidth","rect","setControlsVisibility","bl","br","mb","ml","mr","mt","tl","tr","mtr","add","setActiveObject","_SquareGlyph","_FreehandGlyph","_ArrowGlyph","_ColorPicker","_Freehand","_Square","_Arrow","_canvasProvider","_disableConversationProvider","_selfIdentifiedUserProvider","_ModalPortalHelper","AnnotationToolBarWrapper","AnnotationToolBarBase","canvasRef","annotationTool","isAnnotatingDisabled","showAlert","setShowAlert","resetCanvasState","AnnotationTools","nullTechSmithId","updateSelfIdentifiedUserProviderState","showSelfIdentifyModal","startAnnotating","tool","arrow","Arrow","Square","Freehand","onClickTool","clearCanvas","onCancelDeletion","isToolDisabled","isSquareActive","isArrowActive","isFreehandActive","destructive","getObjects","Close16x16","visible","AlertModalPortal","onClose","closeContent","onConfirm","confirmContent","confirmButtonType","onDismiss","dismissContent","secondary","active","aria","onColorChange","annotationColor","canvasStore","disableConversationStore","_ColorSwatch","ColorPickerWrapper","ColorPickerGlyph","ColorPickerColors","ColorPickerBase","defaultColor","getColorText","colorValue","toLowerCase","AnnotationColors","yellow","blue","green","red","colorPickerGlyph","CaratDown16x16","pickerPopover","colors","map","background","PopoverButton","buttonTitle","origin","TscPopoverOrigin","bottomRight","popoverMenu","closeMenuOnClick","buttonGlyph","useMobileMenu","_CommentHeader","_CommentBody","_TimeFormatter","_CommentInput","_DeleteCommentAlert","_CommentScroller","_quizDataProvider","CommentWrapper","action","isReply","dark","isHighlighted","isSelected","isExpanded","secondaryDawn","CommentAndRepliesWrapper","li","RepliesWrapper","ol","CommentBase","comment","shouldShowUpdate","setCommentsToHighlight","IsQuizzing","deleteAnnotationOnSave","setDeleteAnnotationOnSave","expandReplies","setExpandReplies","loadingState","setLoadingState","showDeleteAlertModal","setShowDeleteAlertModal","parentCommentId","commentContainerRef","scrollCommentIntoView","isFiltered","submitReply","replyText","commentsCopy","newReply","updatedComment","addReply","trim","originatingService","ServiceNames","screencast","knowmia","t2","t3","ProfileImageUrl","AvatarImageUrl","DisplayName","Id","IsSignedIn","isSubscribedToConversation","t4","subscribeToConversation","splice","indexOf","t5","_x","deleteComment","commentToDelete","deletedComment","parentCommentIndex","replyIndex","commentIndex","findIndex","Error","isDeleted","oldComment","isEditing","_x2","saveCommentEdits","_callee3","editedText","editedComment","_context3","abrupt","editComment","_x3","selectAndPause","_callee4","timeDifference","timeMismatch","topLevelComment","_context4","TimeFormatter","getRoundedTime","timeTolerance","commentRepliesLength","isCommentOwner","authorId","wrapperClassName","onCommentClick","Spinner","setShowDeleteAlert","handleExpandReplies","saveEdit","replyCount","reply","index","_CommentBase","hasAnnotation","inputId","onSubmit","_ref11","commentsStore","quizDataStore","_NonEditingCommentFooter","_reactLinkify","CommentBodyWrapper","CommentBodyBase","userHasLikedComment","likes","some","like","UserId","componentDecorator","decoratedHref","decoratedText","rel","AriaAlert","role","_NotificationToggle","ClearButtonWrapper","isVisible","NotificationToggleWrapper","CommentCountLabel","label","hasFocus","CommentFilterWrapper","CommentSearchWrapper","secondaryDusk","CommentSearchInput","SearchBarInput","CommentSearchForm","SearchForm","CommentSearchBarContainer","SearchBarContainer","SearchButtonWrapper","CommentFilterBase","searchText","setSearchText","executeSearch","inputRef","setHasFocus","userAuthoredComment","hasSearchText","preventDefault","count","value","onBlur","maxLength","onChange","onKeyPress","ButtonActivationKeys","enter","shiftKey","stopPropagation","inputHasFocus","Search16x16","isOwner","_AriaHelper","_fallbackAvatar","_dayjs","_relativeTime","_utc","_localizedFormat","dayjs","extend","utc","relativeTime","localizedFormat","HeaderWrapper","AvatarWrapper","MiddleHeaderWrapper","failedToLoad","CommentDateWrapper","HeaderRight","DeleteAnnotationButton","CommentTimeWrapper","AnnotationButtonWrapper","annotationDisplayed","CommentHeaderBase","showEditedLabel","lastModifiedDate","Avatar","avatarImageUrl","FallbackAvatar","userDisplayName","userAltText","userID","size","TscAvatarSize","small","createDate","format","subtract","fromNow","AriaHelper","readAlert","formatTimeForSpeech","formatTime","_reactAutosizeTextarea","_CommentSubmit","_EmojiPickerWrapper","_EditingCommentFooter","_EmojiSearch","focusAnimation","keyframes","CommentInputWrapper","TextAreaWrapper","StyledTextArea","TextAreaAutosize","$hasError","$isEditing","$theme","$isReply","CommentInputError","StyledWarning","CommentInputBase","_textAreaRef$current","_textAreaRef$current$","isCommentingDisabled","annotationExists","setText","textSelectionPosition","setTextSelectionPosition","textAreaRef","textLengthError","maxCommentLength","disableSubmit","isTextOverflow","overflow","savedText","unsavedCommentText","_textAreaRef$current2","textToEmoji","foundEmojiCodes","match","emojiCode","nativeEmoji","findEmojiByCode","replaceEmojiCodeWithEmoji","memoizedOnEmojiClick","emoji","originalText","textToAdd","native","slice","onSubmitClicked","removeItem","onTextInputFocus","placeholder","onKeyUp","selectionStart","maxRows","onFocus","onEmojiClick","overByCount","onCancel","isDisabled","_AnnotationToolBar","CommentControls","SubmitButtonWrapper","CommentSubmitBase","Send16x16","_Comment","_CommentFilter","_UserMessaging","_SelfIdentifyModal","_selfIdentifyservice","_CommentSorter","_CreateConversationModal","_mediaOperationsProvider","_CssUtil","_ConversationEmptyState","ConversationContainer","CommentSection","showEmptyState","CommentSectionHeader","CommentHeaderRight","SpinnerWrapper","AuthorNameSpan","EmptyStateWrapper","SelfIdentifiedUserWrapper","ConversationSelectWrapper","borderNeeded","NoCommentEmptyStateMessageText","BottomSpacer","ConversationContainerHeaderWrapper","CssUtil","toRgba","EmptyStateContainer","TitleContainer","ConversationBase","Author","IsReplacingMedia","addCommentLoadingState","setAddCommentLoadingState","updateSearchText","cachedNewComments","setCachedNewComments","commentsToHighlight","updateCommentsToHighlight","showSelfIdentifyAlertModal","setShowSelfIdentifyAlertModal","showCreateConversationModal","setShowCreateConversationModal","isSelfIdentified","commentsRef","pollIdRef","lastUpdateRef","Date","now","refreshComments","newComments","JSON","stringify","mapCommentsToTextArray","selfIdentifyService","setupSelfIdentifiedUserFromLocalStorage","visibilityChanged","visibilityState","conversationRefreshInterval","singleConversation","clearInterval","setInterval","asyncIntervalFunc","warn","UserMessaging","commentsToMap","flatMap","cr","prevComments","prevCommentIds","newCommentsToHighlight","submitNewComment","commentText","conversationsCopy","conversationToUpdate","updateCommenterCount","updatedConversation","newComment","sortedComments","CommentCount","CommenterCount","oldConversation","updateConversationsState","addComment","toDatalessJSON","isResolved","mediaTimeInMilliseconds","push","sortCommentsByTime","undefined","createConversation","_callee5","newConversation","_context5","emptyState","EmptyState","primaryButtonText","primaryButtonType","onPrimaryClick","noCommentBody","getEmptyStateBody","conversationOptions","SelectInput","newSelectedConversation","options","commentsToDisplay","displayName","ButtonStyledAsAnchor","showTosMessage","showSignInMessage","clear","forgetSelfIdentifiedUser","dismissButtonType","_ref12","_ref13","_ref14","selfIdentifiedUserStore","mediaOperationsStore","AlertModalWrapper","hideButtons","EditingCommentFooterBase","CommentFooterWrapper","Delete16x16","smallButtonWidth","_data","_react2","ShowEmojiButtonWrapper","isMacOs","$isTextOverflow","EmojiPickerWrapperBase","picker","setPicker","data","emojiButtonSize","emojiSize","searchPosition","onEmojiSelect","floating","Emoji16x16","LikeButtonWrapper","LikeListWrapper","LikeList","ExpandRepliesButton","StyledReplyButton","StyledEditButton","NonEditingCommentFooterBase","showListOfLikes","setShowListOfLikes","onLikeClick","parentComment","unlikeComment","likeComment","expandThreadText","showEditButton","ArrowDown16x16","glyphPlacement","TscButtonGlyphPlacement","ArrowReply16x16","Edit16x16","toString","ThumbsUp16x16","NotificationToggleBase","isNotificationEnabled","setIsNotificationEnabled","fetchNotificationPreference","isEnabled","toggleNotificationPreference","newNotificationValue","unsubscribeFromConversation","Alert16x16","AlertOutline16x16","_folderApi","_mediaApi","_entityDecode","_MediaDetailsGenerateMenu","_captionModels","_transcriptionApi","_captionDataProvider","_captionApi","_MediaDetailsChapters","_baseMedia","_appModel","ownKeys","getOwnPropertySymbols","o","enumerable","_objectSpread","_defineProperty2","getOwnPropertyDescriptors","defineProperties","_Constants$chapters","chapters","minimumGeneratedChapters","maximumGeneratedChapters","maximumChapters","defaultMinMax","min","EditDetailsModalBase","_config$environmentDa","MediaId","Description","ParentFolder","OwnerLibrary","ContentType","Duration","Chapters","captionData","workerState","setWorkerState","loadingCaptionData","setLoadingCaptionData","CaptioningState","None","captionStatus","setCaptionStatus","duration","seconds","getSecondsFromTimeString","minutes","floor","getInitialMinMax","minMax","setMinMix","aiRequestWasTooLarge","setAiRequestWasTooLarge","aiRequestContentFiltered","setAiRequestContentFiltered","parentFolderHash","setParentFolderHash","_useState13","_useState14","chaptersHaveInputError","setChaptersHaveInputError","_useState15","chapter","timeCode","timeInMilliseconds","_useState16","localMediaData","setLocalMediaData","_localMediaData$title","titleErrorText","errorText","_localMediaData$descr","descriptionErrorText","isDev","Environment","EnvironmentType","dev","updateTitle","newTitle","isEmpty","isTooLong","maxTitleLength","updateDescription","newDescription","maxDescriptionLength","onChaptersUpdate","newChapters","onGenerateMediaDetailsCallback","type","response","_response","suggestedChapters","updatedChapters","MediaDetailGenerationTypes","mediaApi","getSuggestedDescription","suggestion","contentTooLarge","forbidden","console","getSuggestedTitle","getSuggestedChapters","timeCodeValid","descriptionValid","getCaptioningStatus","currentCaptionStatus","captionApi","getStatus","updateCaptionDataState","supportsChapters","MediaContentType","YouTube","onSave","updates","_OwnerLibrary$User","chaptersToSave","renameConversation","folderApi","updateParentFolder","User","every","timeCodeWithNoSpaceRegex","test","version","sort","b","updateChapters","Promise","all","updateMediaState","folderMap","saveButton","Boolean","cancelButton","folderOptions","folder","SubFolders","subfolder","Name","subsubfolder","startTranscriptionOperation","transcriptionApi","startAutomatedTranscription","modalBody","EnableAIMediaSummary","canModifyMinMax","setMinMaxCallback","updatedMinMax","captionState","onGenerateCallback","generateType","onStartTranscriptionCallback","TextInput","decode","evt","required","sharedId","rows","generatedChapters","onChaptersUpdateCallback","onChaptersInputErrorCallback","newParentFolderHash","BasicModalPortal","isLoading","captionDataStore","_Measurement","_windowSizingProvider","_remarkGfm","_remarkBreaks","_remarkCodeBlocks","_rehypeExternalLinks","_RehypeTimecodeLinksPlugin","maximumCollapsedHeight","Measurement","rem","ExpandMediaDetailsButton","NonStyledButton","semiBoldWeight","sm","DescriptionControlContainer","FadeTextContainer","DescriptionTextContainer","ShowHideButtonPositioner","MediaDescriptionBase","_descriptionRef$curre","rawDescriptionText","descriptionRef","isTooLarge","expansionHeight","zero","_useState2$","setDescriptionState","container","scrollHeight","inPixels","pixels","descriptionTextContainerStyle","inRem","showHideMoreDescriptionLink","UpdateWindowSizingState","mediaDetailsIsExpanded","ReactMarkdown","lazy","importReactMarkdown","remarkPlugins","remarkGfm","remarkBreaks","codeBlocks","rehypePlugins","rehypeExternalLinks","rehypeTimecodeLinksPlugin","scrollableElementId","_queryString","_EditDetailsModal","_MediaTitle","_MoreMenu","_MediaLocation","_ShareModal","_CreateCollectionModal","_ShareToCollectionModal","_migrationProvider","_CSSHeightObserver","_SparkleGlyph16x","contentPadding","parseFloat","managementTabHorizontalMargin","managementTabHorizontalPadding","MediaActionWrapper","mediaDetailsButtonTextBreakPointWithmediaTabsPanelOpen","mediaDetailsButtonTextBreakPoint","MediaSpacedBar","MediaActions","editDetailsThemes","backgroundColor","backgroundHoverColor","backgroundActiveColor","borderGradient","accentBorderColor","accentBackgroundColor","accentDropShadow","EditMediaButton","button","attrs","boxShadow","MediaDetailsBase","_detailsContainer$cur","TeamId","migrationInProgress","showEditDetailsModal","setShowEditDetailsModal","showShareModal","setShowShareModal","showShareToCollectionModal","setShowShareToCollectionModal","showCreateCollectionModal","setShowCreateCollectionModal","view","detailsContainer","pollInProgressMigrations","applicationFullName","parsedQuery","qs","parse","location","search","normalizedQuery","destination","baseUrl","split","updatedQueryString","updatedUrl","history","replaceState","removeIsCompleteRecordingSessionFromQueryString","mediaDetailsReservedHeight","offsetHeight","setupCSSHeightObserver","resourceLinkId","URLSearchParams","enableChangeMedia","SupportsChangeMedia","displayShareMediaOptions","viewersCanShareMedia","ShareToCollection16x16","onCreateCollection","updateMediaStateFromServer","shareMediaToCollection","Undo16x16","navigation","changeMediaLink","Share16x16","mediaLibraryType","LibraryType","windowSizingStore","migrationStore","MediaDetailsChaptersContainer","ChaptersInputContainer","message","warning","ChaptersItemContainer","InputErrorText","initialChapter","newChapter","numbersAndColonRegex","MediaDetailsChaptersBase","internalChapters","setInternalChapters","chapterIndexJustAdded","setChapterIndexJustAdded","_React$useState5","_React$useState6","timeCodeInErrorState","setTimeCodeInErrorState","_React$useState7","_React$useState8","descriptionInErrorState","setDescriptionInErrorState","validateChaptersInputs","updateChaptersState","addNewChapter","copyOfChapters","noTimeCodeInputErrors","noDescriptionInputErrors","mappedChapters","tocChapters","startTime","Add16x16","chapterIndex","newTimeCodeString","onChapterTimeCodeChange","validTimeCode","timeCodeWithinDuration","autoFocus","newLabelString","onEnter","CircleRemove16x16","_SparkleGlyph","_userQuotas","_userQuotaProvider","MediaDetailsGenerateContainer","caution","BetaTag","screencastPrimaryStop1","screencastPrimaryStop2","GenerationDescriptionContainer","weight","semibold","GenerationOptionsMenu","MinMax","MediaDetailsGenerateMenuBase","QuotaEntitlementType","Published","EntitlementType","free","primaryScreencast","ScreencastProPurchaseLinkUrl","openLinkInNewTab","buttonText","bottomLeft","MenuItem","Label","labelText","minNumValue","maxNumValue","parseInt","userQuotaStore","_mediaLocationSeparator","MediaDetailsLink","StyledAnchor","separatorSVG","_MediaDetailsLink","_profileApi","_teamApi","MediaLocationBase","OriginatorId","ltiSessionType","ltiSessionFolderHash","ltiFolderHash","referringGroupName","setReferringGroupName","mediaOwnerName","setMediaOwnerName","teamName","setTeamName","referringGroup","fetchCollectionName","collection","getCollectionSummaryById","teamApi","getTeam","team","catch","isCurrentUsersLibrary","LibraryTypes","personal","isTeamLibrary","fetchMediaOwnerName","mediaOwnerTechSmithId","mediaOwner","profileApi","getUserProfileInfo","mediaLocationText","mediaCollectionLink","collectionsViewBasePath","mediaLocationHref","myLibraryLink","isAdmin","showLocation","MediaLocationContainer","MediaLocationLink","MediaLocationSeparator","MediaTitleContainer","h1","_CopyMediaModal","_ResetDataModal","_SetThumbnailModal","_ReplaceMediaModal","_DeleteModal","_TestablePopoverButton","_UserOverQuotaModal","MoreMenuWrapper","MoreMenuBase","DownloadUrl","DownloadEnabled","Url","showCopyModal","setShowCopyModal","showDeleteModal","setShowDeleteModal","showResetDataModal","setShowResetDataModal","showSetThumbnailModal","setShowSetThumbnailModal","showReplaceMedialModal","setShowReplaceMediaModal","onDeleteClick","paused","canDownload","viewersCanDownloadMedia","canCopyMedia","DisableCopy","viewersCanCopyMedia","canUpdateThumbnail","canControlMedia","canResetData","selectedMedia","EllipsisStacked16x16","topRight","showArrow","mobileContextMenuZindex","mobileContextMenu","mobileContextMenuTitle","openInNewTab","BrowserView","updateUserQuotaFromServer","selectedMediaUrl","onDelete","mediaToDelete","onResetData","reload","_FullscreenHelper","_smartPlayerConstants","ZoomState","ImageScrollContainer","SmartPlayerConstants","imageBackgroundColorDawn","imageBackgroundColorDusk","ImageContainer","zoomPercentage","ImageZoomerContainer","ImageZoomer","showZoomControls","UISeparator","xs","ZoomPercentage","regular","ImageBase","zoomControlButtonRefs","children","imageScrollContainer","showFitToPageButton","setShowFitToPageButton","isFullscreen","setIsFullscreen","isTimerActive","setIsTimerActive","isHoveringControls","setIsHoveringControls","_React$useState9","_React$useState10","isFocused","setIsFocused","_React$useState11","_React$useState12","isIphoneOrIpod","setIsIphoneOrIpod","zoomCtlButtonRefs","zoomIn","zoomOut","fillToPage","fitToPage","fullScreen","_React$useState13","_React$useState14","isHoveringContainer","_setIsHoveringContainer","isHoveringContainerRef","setIsHoveringContainer","_React$useState15","state","percentage","_React$useState16","_setZoom","zoomRef","setZoom","_React$useState17","isInitialized","_React$useState18","dimensions","_setDimensions","dimensionsRef","controlsVisibilityTimerId","imageWidth","ninety","twoSeventy","imageHeight","preventMouseZoom","ctrlKey","preventClickToSelect","detail","round","ceil","onClickFit","fit","onClickFill","onResize","containerWidth","offsetWidth","containerHeight","hideFitButton","toggleFullScreen","_window$document$full","exitFullscreen","webkitExitFullscreen","msExitFullscreen","mozCancelFullScreen","fullScreenElement","elementToFullScreen","targetElement","parentElement","requestFullscreen","webkitRequestFullscreen","msRequestFullscreen","mozRequestFullScreen","webkitEnterFullscreen","switchToFullScreenMode","onFullScreenChange","getIsFullscreen","resetControlsTimer","clearTimeout","timeout","onmousedown","objects","zoomNormalized","firstAnnotationTopPosition","firstAnnotationLeftPosition","firstAnnotationHeight","firstAnnotationWidth","scrollContainerHeight","scrollContainerWidth","scrollContainerCurrentScrollTop","scrollTop","scrollContainerCurrentScrollLeft","scrollLeft","topPosition","leftPosition","scrollTo","behavior","containerObserver","ResizeObserver","passive","MediaReady","observe","disconnect","onMouseMove","onWheel","deltaY","onMouseDown","onDoubleClick","CircleAdd16x16","FullscreenExit16x16","FullscreenEnter16x16","HeaderContainerPlaceholder","StyledHeaderPlaceholder","header","headerBackgroundColor","GradientBorder","_SnagitLogo","_PlusGlyph","_CamtasiaScreencastLogo","_ScreencastMarketingLogo","_SnagitScreencastLogo","_CamtasiaLogo","MarketingPane","camtasiaBanner","marketingPaneBoxShadowCamtasia","marketingPaneBoxShadowDusk","marketingPaneBoxShadowDawn","marketingPaneBgCamtasiaDusk","marketingPaneBgDusk","marketingPaneBgCamtasiaDawn","marketingPaneBgDawn","marketingPaneBorderCamtasiaDusk","marketingPaneBorderDusk","marketingPaneBorderCamtasiaDawn","marketingPaneShowDetailTextBreakpoint","marketingPaneBreakpoint","TextContainer","brand","camtasia","IconSvg","TitleText","DetailText","captureBanner","Logo","PlusSignSvg","StyledPlusGlyph","PlusGlyph","marketingPaneRef","createRef","bannerVariantIndex","setBannerVariantIndex","isSnagitBanner","showWatchPageSnagitMessage","isCaptureBanner","showWatchPageCaptureMessage","isCamtasiaBanner","showWatchPageCamtasiaMessage","isCamtasiaWebBanner","showWatchPageCamtasiaWebMessage","isWebUploadBanner","showWatchPageWebUploadMessage","bannerContent","setBannerContent","variantLetters","bannerContentVariants","titleText","bodyText","CTAButtonText","CTALink","banners","workPlaceComms","screenRecorder","screenCapture","camtasiaProduct","camtasiaRev","camtasiaBestVideoEditing","camtasiaWeb","getBannerContentVariants","variantIndex","random","recordGABannerDisplayedEvent","bannerTypeNum","ga4Event","eventName","analytics","SnagitBannerDisplayed","CamtasiaBannerDisplayed","CamtasiaWebBannerDisplayed","CaptureBannerDisplayed","WebUploadBannerDisplayed","eventParams","banner_variant","media_hash","gaEvent","navigateToMarketingPage","ctaLink","SnagitBannerButtonClicked","CamtasiaBannerButtonClicked","CamtasiaWebBannerButtonClicked","CaptureBannerButtonClicked","WebUploadBannerButtonClicked","open","plusSignTheme","ProductSvgLogo","SmallProductSvgLogo","getMarketingLogo","link","variantLetter","productId","utmProductIdentifier","camtasiaweb","snagit","capture","web","mediaType","utm","_UrlUtil","_mediaDetails","AddCaptionTrackModalBody","AddCaptionTrackModalBase","refreshCaptionData","XmpId","Privacy","groupId","selectedOption","setSelectedOption","setPrimaryButtonText","saveXmpCaptions","captionTrack","getCaptionTrack","saveCaptionTrack","onClickApply","startThirdPartyTranscription","getCaptionEditorUrl","buttonGroup","MinWidthButtonWrapper","showAutomaticTranscription","DisableAutomaticTranscription","defaultModalWidth","InlineLabeledRadio","EnableThirdPartyCaptionGeneration","MediaPrivacy","private","BoldText","FooterButtonsWrapper","DownloadButtonWrapper","contentBreakpoint","ClearConversationModalBase","conversationHash","isDeleting","resetConfirmed","setState","onDownloadDataClick","downloadSingleConversationData","clearComments","deleteConversationComments","deleteConversation","deletedConversation","updateReactionsState","reactions","onPrimaryButtonClick","downloadDataButton","Download16x16","Trans","i18nKey","CreateConversationModalBase","_config$watchConfig3","setCreateConversationState","updateCreateConversationState","conversationTitle","setConversationTitle","canSubmitTitle","modalTitle","maxConversationTitleLength","_config$watchConfig","_config$watchConfig2","readOnly","_LocalMediaImporter","_uploadApi","_UploadProgressModal","_QueryParamsHelper","_WarningWithFaqLink","MediaPreviewWrapper","VideoPreview","video","ImagePreview","img","ButtonGroup","ReplaceMediaModalBase","cancelTokenSource","file","fileSelected","fileUploading","showConfirmationModal","showFileSelectionModal","showUploadProgressModal","uploadProgress","updateState","updatedValues","prevState","onUploadProgress","progressEvent","percentCompleted","loaded","total","replaceMedia","updateMediaOperationsState","uploadApi","invalidateMediaCache","UpsertQueryParamInUrl","tab","details","isCancel","unsupportedMediaType","replaceMediaClick","onConfirmationModalClose","mediaPreview","src","URL","createObjectURL","controls","autoPlay","fileSelectModal","linkUrl","screencastFAQLink","knowmiaFAQLink","onFileSelect","uploadCandidate","allowMultiple","ignoreQuotaLimits","replaceConfirmationAlertModal","cancelUpload","_state$cancelTokenSou","_audioDescriptionApi","AudioPreview","audio","UploadAudioDescriptionModalBase","isReplacing","audioDescriptionApi","uploadAudioDescription","defaultButtonWidth","isAudioUploader","_ProgressLoader","UploadProgressModalBase","warnAboutCancel","onCancelWarnClose","showCancelWarn","progressModal","containerStyle","margin","cancelUploadAlert","onCancelWarnConfirm","SetThumbnailModalBase","setThumbnailState","updateSetThumbnailState","updateThumbnail","onCloseCopy","closeButton","ShareToCollectionEmptyStateBase","_ShareToCollectionEmptyState","_collectionsProvider","ModalSectionLabel","h2","ShareToCollectionModalBase","_sidebarCollections$f","sidebarCollections","CollectionIds","potentialMediaShareCollections","g","Role","GroupRoleTypes","participant","toAdd","toRemove","shareCollectionModalState","setShareCollectionModalState","onSaveClick","addToCollectionPromises","removeFromCollectionPromises","addToCollection","removeFromCollection","scrollIntoView","block","inline","fetchSidebarCollections","updateSidebarCollections","onCreateCollectionClick","getCollectionToDisplay","isShared","manager","holdArray","isMediaSharedToCollection","h","collectionsToShareWith","sharedWithElement","collectionsAvailableForSharing","myCollectionsElement","displayedButtons","hideEmptyState","ModalContent","modalWidth","collectionsStore","Table","ul","TableWrapper","TableItem","TableHeaderItem","ItemCell","SmallViewLabel","EmptyData","DataTableBase","columnLabels","tableRows","emptyStateLabel","_ref$isLoading","createRow","row","rowIndex","tableRow","rowItem","colIndex","createCell","LoadingState","nonEmptyState","ButtonGroupWrapper","ButtonWrapper","PrimaryButtonWrapper","DataTableActionButtonGroupBase","primaryButton","otherButtons","_MediaTabsHeader","_TranscriptTab","_Conversation","_SettingsTab","_QuizzingTab","_AnalyticsTab","_EditMediaTab","_analyticsDataProvider","_quizApi","MediaTabsWrapper","CloseButton","BaseTabsWrapper","TabsBarWrapper","Card","MediaTabsBase","loadingQuizData","setLoadingQuizData","_SetupWorkerState3","_SetupWorkerState4","loadingAnalyticsData","setLoadingAnalyticsData","tabs","setTabs","includeDetailsTab","setIncludeDetailsTab","isInitialRender","updateSelectedTab","tabName","prevTabs","tab2","newTabs","mediaTab","unshift","_newTabs$","_newTabs$2","shift","handleResize","quizzing","editMedia","getQuizData","updateQuizData","quizApi","getAnalyticsData","_fetchAnalyticsData","fetchAnalyticsData","currentTries","updateAnalyticsDataFromServer","DisableAnalyticsAndQuizEditing","initialIsWorking","initialHasError","TabsGrid","LeftArrowContainer","RightArrowContainer","TabsContainer","TabWrapper","nav","MediaTabsHeaderBase","displayLeftArrow","setDisplayLeftArrow","adminTabsBarBreakpoint","ltiTabsBarBreakpoint","viewerTabsBarBreakpoint","displayRightArrow","setDisplayRightArrow","tabsElement","updateOverflowArrows","tabsScrollable","scrollWidth","tabsElementHandle","observer","Tabs","isAnchor","_ConversationsTab","_ConversationSettings","_MediaPrivacySettings","_Captions","_AudioDescriptions","_MediaSettings","SettingsSeparator","hr","SettingsTabBase","loadingConversationData","setLoadingConversationData","getConversationData","LoadingSpinner","TabBody","TabContentWrapperBase","showSpinner","showError","customErrorMessage","LeftLabel","hideRightLabelInMobileView","RightLabel","LeftTabHeaderSection","RightTabHeaderSection","$allowButtonOverflow","leftLabel","rightLabel","allowButtonOverflow","_TabHeader","_UploadAudioDescriptionModal","_AudioDescriptionsMenu","Container","AddAudioButton","AudioDescriptionsBase","AudioDescriptionUrl","AudioDescriptionId","errorEl","isModalDisplayed","setIsModalDisplayed","isAlertDisplayed","setAlertDisplayed","onToggleModal","downloadUrl","AudioDescriptionApi","getAudioDescriptionDownloadUrl","onRemove","removeAudioDescription","onToggleAlert","addButton","Ellipsis16x16","editButton","url","onReplace","_AddCaptionTrackModal","_DataTable","_CaptionsActions","AddCaptionButton","DataTableWrapper","CaptionsBase","CaptioningType","fetchCaptioningStatus","captionsTableColumnLabels","getTranslatedCaptionState","Unknown","Transcribing","ReadyForEdit","Editing","PendingApproval","captionTracksLength","captionTrackLabel","tracks","addCaptionsButton","CaptioningTypes","AutoTranscribed","LastUpdatedByUser","LastUpdateDateTime","setParentWorkerState","_DataTableActionButtonGroup","alertTypes","CaptionsActionsBase","alertType","setAlertType","onPublishClick","publishCaptionTrack","onApproveClick","ThirdParty","approveThirdPartyTranscription","cancelTranscription","cancelThirdPartyTranscription","cancelAutomatedTranscription","deleteCaptionTrack","cancelRemoveAlertModal","enablePublishOption","enableEditOption","showApproveOption","enableApproveOption","userPermissions","UserPermissions","captionAdmin","enableCancelOption","Publish16x16","delete","AnalyticsSegmentWrapper","tabBreakpoint","SegmentDiv","prop","SegmentHalf","SegmentData","SegmentLabel","SegmentDivWithRightBorder","SegmentDivWithWidthDependentBorder","AnalyticsSegmentDataBase","numOfViewers","sumOfViewPercentages","commentCounts","ViewCount","currentVal","PercentViewed","_TabContentWrapper","_AnalyticsSegmentData","_UserBehaviorData","_CollectionsMenu","_BehaviorFilterMenu","AnalyticsHeader","AnalyticsHeaderWrapper","HeaderRightSection","UserBehaviorHeaderWrapper","AnalyticsTabBase","initialCustomErrorMessage","analyticsData","selectedCollection","selectedBehaviorFilter","selectedFilter","BehaviorFilters","hash","getAnalytics","onDownloadClick","downloadViewingAnalyticsData","filteredAnalyticsBySelectedCollection","MemberDetails","member","FirstName","LastName","Members","HasCompletedView","filteredAnalyticsByCompletion","completed","showCollectionsDropDownLabel","setFilter","popoverMenuMaxWidth","popoverMenuMaxHeight","analyticsDataStore","partial","CollectionsMenuBase","collections","UserBehaviorWrapper","DoubleWideColumnWrapper","td","SingleWideColumnWrapper","ColumnLabel","ViewerWrapper","ColumnLabelWrapper","th","UserAnalyticsList","UserDataTable","table","UserBehaviorDataBase","analyticsIds","getViewerPercentWatched","viewer","viewerIds","unsortedViewers","sortedViewers","firstViewer","secondViewer","firstViewerName","secondViewerName","percentWatched","getViewerStatus","ConversationActionMenuBase","setError","setShowClearCommentsModal","onDownloadCommentsClick","_ConversationActionMenu","_ShareLinkModal","_ClearConversationModal","ConversationActionsButtonGroupBase","onDownloadError","showDeleteConversationModal","setShowDeleteConversationModal","showCopyConversationLinkModal","setShowCopyConversationLinkModal","showRenameConversationModal","setShowRenameConversationModal","showClearCommentsModal","PresentationRootUrl","CommentEmptyState","CommentTop","Content","Line","CommentBottom","ConversationEmptyState","ConversationSettingsHeaderWrapper","DownloadButton","ConversationSettingsBase","getConversations","conversationColumnLabels","onToggleConversationClick","activeConversation","SlideToggle","isChecked","DateCreated","_ConversationActionsButtonGroup","ConversationsTabBase","sortedConversations","HideButtonText","breakpointWidth","_MediaDescription","_HorizontalSeparator","hasDescription","MediaDetailsSpan","TabsContentWrapper","TabsPadding","DescriptionWrapper","ShadowDiv","DetailsTabBase","YouTubeAuthor","YouTubeUrl","SharedDateTime","showDetails","setShowDetails","maxWidth","toLocaleString","_editMediaCopy","_editMediaOriginal","EditMediaContainer","PaneContainer","Header","p","DividerContainer","VerticalBar","DividingPhrase","EditMediaTabBase","showCopyMediaModal","showUserQuotaCheck","displayIEWarning","editMediaTabState","setEditMediaTabState","isIE11","MSInputMethodContext","DOCUMENT_NODE","editCopyButton","editOriginalButton","copiedMedia","hideConfirmationButtons","_PrivacyOption","_ConfirmPrivacyChangeModal","_MediaPrivacyOptionsGenerator","MediaPrivacyHeader","MediaPrivacyTabWrapper","PrivacyLevelWrapper","MediaPrivacySettings","CaptioningAssignedToEmail","GroupHashes","showPrivateConfirmationModal","setShowPrivateConfirmationModal","warningMessages","setWarningMessages","getMediaPrivacyOptions","privacyOptions","messages","updatePrivacy","newPrivacy","onClickPrivateOption","onConfirmClick","public","selected","subtext","radioTestId","titleBadgeText","badgeText","warnings","_accessPhraseApi","Failure","Spacer","MediaSettingsBase","HasAccessPhrase","AllowViewerToFastForwardVideo","showDownloadMedia","showSmartPlayerConfig","showAccessPhrase","EnableMediaAccessPhrase","onWarningConfirm","downloadEnabled","updateDownloadEnabled","onToggleDownload","onToggleAllowViewerToFastForwardVideo","allowViewerToFastForwardVideo","updateAllowViewerToFastForwardVideo","onToggleAccessPhrase","clearMediaAccessPhrase","accessPhraseApi","generateAccessPhrase","updateMediaAccessPhrase","onWarningClose","AccessPhraseSettings","InlineFieldGroup","InlineLabeledCheckbox","isCentered","checkboxAlignment","TscCheckboxAlignment","Settings16x16","warningModal","_AlertModalSpinner","_deepEqual","EmptyStateHeader","h3","EmptyStateText","QuizDisplayWrapper","QuizTitleSpan","StyledIFrame","iframe","QuizRetirementAnnouncementContainer","NewQuizRemoveMessage","displayStates","modalStates","QuizzingTabBase","HasBeenPublished","CreateDate","ResultsUrl","EditUrl","QuestionSets","IsEncoding","QuizId","currentDisplay","initial","currentModal","fetchAndUpdateQuizData","updatedQuizData","showQuiz","loading","closeModals","deepEqual","removeQuiz","initialDisplay","loadingDisplay","emptyStateDisplay","quizDisplay","date","viewResults","viewResultsModal","editQuizModal","removeQuizConfirmationModalBody","quizTitle","removeQuizConfirmationModal","disableConfirmButton","quizRetirementLink","TranscriptItem","isHighlight","TranscriptTextItem","TranscriptWrapper","TranscriptTabBase","currentSecond","setCurrentSecond","hoveredKey","setHoveredKey","setMediaTime","setTranscriptTime","currentTimeFloor","VideoTimeUpdate","entries","keyInt","displayTime","fullscreenElement","webkitCurrentFullScreenElement","mozFullScreenElement","localStorage","fromHash","activeFolder","mediaContentFilters","includeExcludedMedia","from","take","mediaPaginationBatchSize","folderHash","mediaContentFilter","sortMetricQueryParams","SortMetric","dateAscending","orderBy","OrderByQueryString","dateDescending","descending","titleAscending","titleDescending","viewsAscending","views","viewsDescending","otherProps","_extends2","_i18next","i18n","privacy","accessibility","_reactRouterDom","_reactRouter","_App","_stateProvider","_reactDnd","_reactDndHtml5Backend","model","appRoot","classList","initWatch","render","DndProvider","backend","HTML5Backend","BrowserRouter","QueryParamProvider","adapter","ReactRouter5Adapter","isWatchPage","_ApiUtil","ApiUtil","executeDeleteAsync","noContent","handleUploadProgress","postData","requestConfig","FormData","append","headers","cancelToken","token","executePutAsync","created","_x4","_x5","mediaId","executeGetWithoutCacheAsync","ok","Array","isArray","setAssignee","emailAddress","encodedEmail","encodeURIComponent","_x6","removeAssignee","_x7","_callee6","mediaCaptionTrack","putData","_context6","nullCaptionTrackFactory","captions","_x8","_callee7","emptyCaptionTrack","_context7","_x9","mediaHash","executePostAsync","accepted","_Wait","ariaLiveStatusElement","innerText","Wait","info","_ref$pixels","_ref$rem","_classCallCheck2","this","pixelsPerRem","_createClass2","other","remPerPixel","getComputedStyle","fontSize","_unistUtilVisit","tree","visit","node","tagName","timecodes","timeCodeRegex","exec","timeInSeconds","timeFormatter","scrollableElement","properties","captionEditor","alert","s","resolve"],"sourceRoot":""}