{"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":""}