{"version":3,"file":"pwc-691.f99e4dad.chunk.js","mappings":"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","sources":["static/svg/CommentMarker.svg","static/svg/rectPlaceholder.svg","component/conversation/Annotation.tsx","component/conversation/AnnotationShapes/Arrow.ts","component/conversation/AnnotationShapes/Square.ts","component/conversation/CommentMarkers.tsx","component/display/PizzaTracker.tsx","component/display/SmartPlayer.tsx","component/display/VideoPlaceholder.tsx","component/util/SkipLink.tsx","constants/smartPlayerConstants.ts","context/userProfileProvider.tsx","service/encodeApi.ts","service/resumablePlayback.ts","util/TimeFormatter.ts"],"sourcesContent":["function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n className: styles[\"comment-marker-glyph\"] || \"comment-marker-glyph\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 14 16\",\n preserveAspectRatio: \"none\"\n}, props), /*#__PURE__*/React.createElement(\"path\", {\n className: styles[\"glyph-outer\"] || \"glyph-outer\",\n d: \"M13.3 10.6L7 16 .7 10.6A2 2 0 010 9.08V2a2 2 0 012-2h10a2 2 0 012 2v7.08a2 2 0 01-.7 1.52z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n className: styles[\"glyph-inner\"] || \"glyph-inner\",\n d: \"M1.35 9.84A1 1 0 011 9.08V2a1 1 0 011-1h10a1 1 0 011 1v7.08a1 1 0 01-.35.76L7 14.68z\"\n})));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\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 1024 576\"\n}, props), /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"#000\",\n strokeOpacity: \".1\",\n d: \"M0 0h1024v576H0z\"\n})));","/* eslint-disable no-underscore-dangle */\nimport React, {useState, useRef, useEffect} from 'react';\nimport Square from './AnnotationShapes/Square';\nimport Arrow from './AnnotationShapes/Arrow';\nimport Constants, {AnnotationModes} from '../../constants/Constants';\nimport {fabric} from 'fabric-webpack';\nimport {useTranslation} from 'react-i18next';\nimport styled from 'styled-components';\nimport {mediaInterface} from '@techsmith/techsmith-smartplayer';\nimport {IComment} from '../../model/commentModel';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {selectedConversationStore} from '../../context/selectedConversationProvider';\nimport {updateCanvasState} from '../../context/canvasProvider';\nimport {annotationManagerStore, updateAnnotationManagerState} from '../../context/annotationManagerProvider';\nimport {commentsStore} from '../../context/commentsProvider';\nimport {AriaAlert} from '../util/StyledElements';\nimport {updateQuizData} from '../../context/quizDataProvider';\nimport {mediaStore} from '../../context/mediaProvider';\n\nexport const AnnotationWrapper = styled.div<{mediaWidth: number; mediaHeight: number; pointerEvents: string}>`\n display: flex;\n flex-direction: column;\n flex-shrink: 0; /* this forces the edit annotations message to overflow appropriately */\n width: 100% !important;\n height: 100%;\n pointer-events: ${props => props.pointerEvents};\n\n .fullscreen-mode & {\n height: ${props => `calc(100vw / ${props.mediaWidth / props.mediaHeight}) !important`};\n max-width: 100vw;\n align-self: center;\n }\n\n .canvas-container {\n margin: auto;\n }\n`;\n\nconst AnnotationCanvasWrapper = styled.div`\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n height: 100%;\n`;\n\nexport interface IStateMappedProps {\n SelectedComment?: IComment;\n annotationMode: AnnotationModes;\n comments: IComment[];\n IsImage: boolean;\n}\n\nexport const AnnotationBase: React.FC = ({SelectedComment, annotationMode, comments, IsImage}) => {\n const {t} = useTranslation();\n const [pointOfOrigin] = useState('center');\n const canvasRef = useRef(null);\n const mediaContentRef = useRef(document.querySelector('#tscMediaContent .video-div') ?? document.querySelector('#tscMediaContent .smart-player-image-media'));\n\n const resetCenter = (item: any): void => {\n if (!item.getPointByOrigin) {\n return;\n }\n\n const coords = item.getPointByOrigin(pointOfOrigin, pointOfOrigin);\n item.left = coords.x;\n item.top = coords.y;\n item.originX = pointOfOrigin;\n item.originY = pointOfOrigin;\n };\n\n const lockAnnotations = (): void => {\n canvasRef.current.getObjects().forEach((item: any) => {\n item.lockMovementX = true;\n item.lockMovementY = true;\n item.lockRotation = true;\n item.lockScalingX = true;\n item.lockScalingY = true;\n item.hasBorders = false;\n item.hasControls = false;\n item.hoverCursor = Constants.cursors.default;\n\n if (item.animate) {\n resetCenter(item);\n const origScaleX = item.scaleX;\n const origScaleY = item.scaleY;\n item.scaleX = item.scaleX * Constants.annotation.preloadAnnotationScale;\n item.scaleY = item.scaleY * Constants.annotation.preloadAnnotationScale;\n item.opacity = 0;\n item.animate({opacity: 1, scaleX: origScaleX, scaleY: origScaleY}, {\n duration: Constants.annotation.animationDuration,\n onChange: canvasRef.current.renderAll.bind(canvasRef.current)\n });\n }\n });\n };\n\n const fireOffAnnotationAccessibilityAlert = () => {\n document.getElementById('annotation-exists-alert').style.display = 'block';\n\n setTimeout(() => {\n document.getElementById('annotation-exists-alert').style.display = 'none';\n }, 1000);\n };\n\n const loadAnnotations = (): void => {\n const topLevelCommentAnnotation = SelectedComment?.parentCommentId ? comments.find(c => c.id === SelectedComment.parentCommentId).annotation : SelectedComment?.annotation;\n\n if (topLevelCommentAnnotation) {\n fireOffAnnotationAccessibilityAlert();\n canvasRef.current.loadFromJSON(topLevelCommentAnnotation);\n lockAnnotations();\n }\n };\n\n const isObjectOffCanvas = (top: number, left: number, bottom: number, right: number): boolean => {\n const offset = Constants.annotation.controlsPadding;\n\n const pastLeft = right < offset;\n const pastTop = bottom < offset;\n const pastRight = left > canvasRef.current.width - offset;\n const pastBottom = top > canvasRef.current.height - offset;\n\n return pastLeft || pastTop || pastRight || pastBottom;\n };\n\n const removeOutOfViewObjects = (): void => {\n canvasRef.current.getObjects().forEach((shapes: any) => {\n const bounds = shapes.getBoundingRect();\n if (isObjectOffCanvas(bounds.top, bounds.left, (bounds.top as number) + (bounds.height as number), (bounds.left as number) + (bounds.width as number))) {\n canvasRef.current.remove(shapes);\n\n if (canvasRef.current.getObjects().length === 0) {\n updateAnnotationManagerState({annotationMode: AnnotationModes.none});\n }\n }\n });\n };\n\n const clearCanvas = (): void => {\n canvasRef.current.clear();\n };\n\n const ensureCanvasDimensionsAreSet = () => {\n if (canvasRef.current.width === 0) {\n canvasRef.current.setWidth(document.getElementById('tscMediaContent').clientWidth);\n }\n\n if (canvasRef.current.height === 0) {\n canvasRef.current.setHeight(document.getElementById('tscMediaContent').clientHeight);\n }\n rescale();\n };\n\n const saveCanvasChange = (): void => {\n removeOutOfViewObjects();\n };\n\n const changeShapeColor = (shape: any, color: string): void => {\n shape.stroke = color;\n\n if (shape.fill !== Constants.annotation.transparentColor) {\n shape.fill = color;\n }\n };\n\n const onColorChange = (color: string): void => {\n canvasRef.current.freeDrawingBrush.color = color;\n\n const selectedShape = canvasRef.current.getActiveObject();\n const selectedShapes = canvasRef.current.getActiveGroup();\n\n if (selectedShape) {\n changeShapeColor(selectedShape, color);\n }\n\n if (selectedShapes) {\n selectedShapes._objects.forEach((shape: any) => {\n changeShapeColor(shape, color);\n });\n }\n\n canvasRef.current.renderAll();\n canvasRef.current.trigger('object:modified', {target: {}});\n };\n\n const rescale = (): void => {\n const scaleRatio = Math.max(mediaContentRef.current.clientWidth, mediaContentRef.current.clientHeight) / Constants.annotation.scale;\n\n if (scaleRatio <= 0) {\n return;\n }\n\n canvasRef.current.setZoom(scaleRatio);\n canvasRef.current.strokeScale = Constants.annotation.scale / Math.max(mediaContentRef.current.clientWidth, mediaContentRef.current.clientHeight);\n const strokeWidth = canvasRef.current.strokeScale * Constants.annotation.strokeWidth;\n canvasRef.current.freeDrawingBrush.width = strokeWidth;\n canvasRef.current.getObjects().forEach((obj: any) => {\n obj.strokeWidth = strokeWidth;\n });\n canvasRef.current.renderAll();\n };\n\n const onTouchStart = (e: any) => {\n if (annotationMode === AnnotationModes.edit) {\n e.preventDefault();\n }\n };\n\n const onSelectionCreated = (e: any): void => {\n if (e.target.type === 'group') {\n e.target.hasControls = false;\n }\n };\n\n useEffect(() => {\n canvasRef.current = new fabric.Canvas('canvas-element', {\n uniScaleTransform: true,\n selection: annotationMode === AnnotationModes.edit\n });\n\n canvasRef.current.on('colorchange', onColorChange);\n canvasRef.current.on('object:added', () => {\n ensureCanvasDimensionsAreSet();\n saveCanvasChange();\n });\n canvasRef.current.on('object:removed', saveCanvasChange);\n canvasRef.current.on('object:modified', saveCanvasChange);\n canvasRef.current.on('selection:created', onSelectionCreated);\n canvasRef.current.on('touchstart', onTouchStart, {passive: false});\n canvasRef.current.defaultCursor = 'pointer';\n Square.initializeEventListeners(canvasRef.current);\n Arrow.initializeEventListeners(canvasRef.current);\n updateCanvasState({canvasRef: canvasRef.current});\n canvasRef.current.setHeight(mediaContentRef.current.clientHeight);\n canvasRef.current.setWidth(mediaContentRef.current.clientWidth);\n rescale();\n\n return () => {\n updateQuizData({IsQuizzing: false});\n canvasRef.current.off('touchstart', onTouchStart);\n canvasRef.current.dispose();\n };\n }, []);\n\n const onKeyDown = (e: any): void => {\n const isEditAnnotationMode = annotationMode === AnnotationModes.edit;\n const isDeleteOrBackspaceEvent = e.keyCode === Constants.keys.backspace || e.keyCode === Constants.keys.delete;\n const editingInputTypes = [Constants.elementTypes.input, Constants.elementTypes.textArea, Constants.elementTypes.search];\n const isEditingText = editingInputTypes.some(type => e.target.type === type);\n\n if (!isEditAnnotationMode || !isDeleteOrBackspaceEvent || isEditingText) {\n return;\n }\n\n const activeObject = canvasRef.current.getActiveObject();\n const activeGroup = canvasRef.current.getActiveGroup();\n\n if (!activeObject && !activeGroup) {\n return;\n }\n\n e.preventDefault(); // Do not trigger navigation back if we are deleting an object\n if (activeGroup) {\n activeGroup._objects.forEach((shape: any) => {\n canvasRef.current.remove(shape);\n });\n }\n\n if (activeObject) {\n canvasRef.current.remove(activeObject);\n }\n\n canvasRef.current.deactivateAll();\n canvasRef.current.renderAll();\n\n if (canvasRef.current.getObjects().length === 0) {\n updateAnnotationManagerState({annotationMode: AnnotationModes.none});\n }\n };\n\n useEffect(() => {\n clearCanvas();\n window.addEventListener('keydown', onKeyDown);\n\n if (annotationMode === AnnotationModes.edit) {\n mediaInterface.singleClickControlEnabled = false;\n mediaInterface.doubleClickControlEnabled = false;\n mediaInterface.pause();\n } else {\n mediaInterface.singleClickControlEnabled = true;\n mediaInterface.doubleClickControlEnabled = true;\n canvasRef.current.off('mouse:down');\n canvasRef.current.off('mouse:move');\n canvasRef.current.off('mouse:up');\n }\n\n if (annotationMode === AnnotationModes.display) {\n loadAnnotations();\n }\n\n canvasRef.current.selection = annotationMode === AnnotationModes.edit;\n canvasRef.current.renderAll();\n\n return () => {\n window.removeEventListener('keydown', onKeyDown);\n };\n }, [SelectedComment?.annotation, annotationMode, mediaInterface.currentTime]);\n\n useEffect(() => {\n // should be only 1, default to video\n // this usage is the requirement for `@types/resize-observer-browser`, once we get up to >TS4.5.x (or whatever 4.x version\n // added the type) we can drop that include from package.json\n const observer = new ResizeObserver(() => {\n if (!canvasRef || !mediaContentRef || !canvasRef.current.setWidth || !canvasRef.current.setHeight) {\n return;\n }\n\n canvasRef.current.setWidth(mediaContentRef.current.clientWidth);\n canvasRef.current.setHeight(mediaContentRef.current.clientHeight);\n rescale();\n });\n observer.observe(mediaContentRef.current);\n return () => {\n observer.disconnect();\n };\n }, [mediaContentRef]);\n\n const style: any = {\n width: '100%',\n height: '100%',\n margin: 'auto'\n };\n\n if (IsImage) {\n style.position = 'absolute';\n style.left = 0;\n style.right = 0;\n style.top = 0;\n style.bottom = 0;\n }\n\n return (\n \n \n \n \n {t('annotation.annotationExistsAlert')}\n \n );\n};\n\nconst mapStatesToProps = (\n // eslint-disable-next-line no-empty-pattern\n {},\n {SelectedComment}: Partial,\n {annotationMode}: Partial,\n {comments}: Partial,\n {IsImage}: Partial\n): IStateMappedProps => ({SelectedComment, annotationMode, comments, IsImage});\n\nexport default withMemoizedContexts(mapStatesToProps, selectedConversationStore, annotationManagerStore, commentsStore, mediaStore)(AnnotationBase);\n\n","/* eslint-disable no-underscore-dangle */\nimport Constants from '../../../constants/Constants';\nimport {fabric} from 'fabric-webpack';\n\nconst minSize = 15;\nconst halfAngle = 180;\nconst point = 5;\nconst radToDeg = halfAngle / Math.PI;\n\nconst calcAngle = (startCoords: any, endCoords: any): number => Math.atan2(endCoords.y - startCoords.y, endCoords.x - startCoords.x) * radToDeg;\n\nconst initializeEventListeners = (canvas: any): void => {\n const scaling = (event: any): void => {\n if (event.target.shapeType !== Constants.annotation.type.arrow) {\n return;\n }\n\n const arrow = event.target;\n const mouse = canvas.getPointer(event.e, true);\n\n if (arrow.originX === 'left' && arrow.__corner === 'ml') {\n const newOrigins = arrow.getPointByOrigin('right', 'center');\n arrow.left = newOrigins.x;\n arrow.top = newOrigins.y;\n arrow.originX = 'right';\n }\n\n const pathConst = 6;\n arrow.dirty = true;\n arrow.width = Math.max(arrow.width * arrow.scaleX, minSize);\n arrow.path[pathConst][1] = arrow.width;\n arrow.pathOffset.x = arrow.width / 2;\n arrow.scaleX = 1;\n arrow.scaleY = 1;\n arrow?.setCoords();\n\n if (arrow.__corner === 'ml') {\n const angle = calcAngle(mouse, arrow.oCoords.mr);\n arrow.setAngle(angle);\n } else if (arrow.__corner === 'mr') {\n const angle = calcAngle(arrow.oCoords.ml, mouse);\n arrow.setAngle(angle);\n }\n\n arrow.perPixelTargetFind = true;\n arrow.targetFindTolerance = 10;\n canvas.setActiveObject(arrow);\n };\n\n const modified = (event: any): void => {\n canvas.off('mouse:up');\n\n if (event.target.shapeType !== Constants.annotation.type.arrow) {\n return;\n }\n\n const arrow = event.target;\n\n arrow.width = arrow.width * arrow.scaleX;\n arrow.height = arrow.height * arrow.scaleY;\n arrow.scaleX = 1;\n arrow.scaleY = 1;\n\n if (arrow.originX === 'right') {\n const newOrigins = arrow.getPointByOrigin('left', 'center');\n arrow.left = newOrigins.x;\n arrow.top = newOrigins.y;\n arrow.originX = 'left';\n }\n\n arrow.perPixelTargetFind = true;\n arrow.targetFindTolerance = 10;\n canvas.setActiveObject(arrow);\n };\n\n canvas.on('object:scaling', scaling);\n canvas.on('object:modified', modified);\n};\n\nconst turnOnMouseEventListeners = (canvas: any, setAnnotationExists: (annotationExists: boolean) => void, color: any): void => {\n let started = false;\n let x = 0;\n let y = 0;\n canvas.selection = true;\n\n const mouseDown = (event: any): void => {\n if (canvas.getActiveObject()?.width > minSize) {\n return;\n }\n\n const mouse = canvas.getPointer(event.e);\n x = mouse.x;\n y = mouse.y;\n started = true;\n canvas.on('mouse:up', mouseUp);\n\n const arrow = `M ${point},${point} ${point},0 0,${point} ${point},${point * 2} ${point},${point} Z L 0,${point}`;\n const path = new fabric.Path(arrow, {\n originY: 'center',\n originX: 'left',\n flipX: true,\n width: 0,\n height: 0,\n left: x,\n top: y,\n strokeWidth: Constants.annotation.strokeWidth * canvas.strokeScale,\n stroke: color,\n fill: color,\n lockScalingFlip: true,\n padding: Constants.annotation.controlsPadding,\n shapeType: Constants.annotation.type.arrow,\n centeredRotation: false,\n perPixelTargetFind: true,\n targetFindTolerance: 10\n });\n\n path.setControlsVisibility({bl: false, br: false, mb: false, ml: true, mr: true, mt: false, tl: false, tr: false, mtr: false});\n\n canvas.add(path);\n canvas.setActiveObject(path);\n };\n\n const mouseMove = (event: any): void => {\n if (!started) {\n return;\n }\n\n const arrow = canvas.getActiveObject();\n const mouse = canvas.getPointer(event.e);\n const angle = calcAngle({x: x, y: y}, mouse);\n const width = mouse.x - x;\n const height = mouse.y - y;\n const distance = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2)) * arrow.scaleX;\n const pathConst = 6;\n\n arrow.set({width: distance});\n arrow.set('visible', true);\n arrow.path[pathConst][1] = distance;\n arrow.pathOffset.x = arrow.width / 2;\n arrow.scaleX = 1;\n arrow.scaleY = 1;\n arrow?.setCoords();\n arrow.setAngle(angle);\n canvas.selection = false;\n canvas.setActiveObject(arrow);\n canvas.renderAll();\n };\n\n const mouseUp = (): void => {\n const arrow = canvas.getActiveObject();\n\n if (arrow?.width < minSize) {\n canvas.remove(arrow);\n }\n\n started = false;\n canvas.selection = true;\n canvas.trigger('object:added');\n setAnnotationExists(true);\n canvas.deactivateAll();\n canvas.renderAll();\n canvas.off('mouse:up');\n };\n\n canvas.defaultCursor = 'crosshair';\n canvas.on('mouse:down', mouseDown);\n canvas.on('mouse:move', mouseMove);\n canvas.on('mouse:up', mouseUp);\n};\n\nexport default {\n turnOnMouseEventListeners,\n initializeEventListeners\n};","/* eslint-disable no-underscore-dangle */\nimport Constants from '../../../constants/Constants';\nimport {fabric} from 'fabric-webpack';\n\nconst minSize = 25;\n\nconst initializeEventListeners = (canvas: any): void => {\n const scaling = (event: any): void => {\n if (event.target.shapeType !== Constants.annotation.type.rect) {\n return;\n }\n\n const square = event.target;\n\n if (square.originX === 'left' && (square.__corner === 'tl' || square.__corner === 'ml' || square.__corner === 'bl')) {\n square.originX = 'right';\n square.left = (square.originalState.left as number) + (square.originalState.width as number) + (square.strokeWidth as number);\n }\n\n if (square.originY === 'top' && (square.__corner === 'mt' || square.__corner === 'tl' || square.__corner === 'tr')) {\n square.originY = 'bottom';\n square.top = (square.originalState.top as number) + (square.originalState.height as number) + (square.strokeWidth as number);\n }\n\n square.width = Math.max(square.width * square.scaleX, minSize);\n square.height = Math.max(square.height * square.scaleY, minSize);\n square.scaleX = 1;\n square.scaleY = 1;\n canvas.setActiveObject(square);\n };\n\n const modified = (event: any): void => {\n if (event.target.shapeType !== Constants.annotation.type.rect) {\n return;\n }\n\n const square = event.target;\n\n square.width = square.width * square.scaleX;\n square.height = square.height * square.scaleY;\n square.scaleX = 1;\n square.scaleY = 1;\n\n if (square.originX === 'right') {\n square.left = square.left - square.width - square.strokeWidth;\n square.originX = 'left';\n }\n\n if (square.originY === 'bottom') {\n square.top = square.top - square.height - square.strokeWidth;\n square.originY = 'top';\n }\n\n canvas.setActiveObject(square);\n };\n\n canvas.on('object:scaling', scaling);\n canvas.on('object:modified', modified);\n};\n\nconst turnOnMouseEventListeners = (canvas: any, setAnnotationExists: (annotationExists: boolean) => void, color: any): void => {\n let started = false;\n let x = 0;\n let y = 0;\n\n const mouseDown = (event: any): void => {\n if (canvas.getActiveObject()?.width > 10) {\n return;\n }\n\n const mouse = canvas.getPointer(event.e);\n started = true;\n x = mouse.x;\n y = mouse.y;\n canvas.on('mouse:up', mouseUp);\n\n const square = new fabric.Rect({\n width: 0,\n height: 0,\n left: x,\n top: y,\n stroke: color,\n visible: false,\n fill: Constants.annotation.transparentColor,\n strokeWidth: Constants.annotation.strokeWidth * canvas.strokeScale,\n lockScalingFlip: true,\n originX: 'left',\n originY: 'top',\n hasRotatingPoint: false,\n padding: Constants.annotation.controlsPadding,\n shapeType: Constants.annotation.type.rect,\n perPixelTargetFind: true,\n targetFindTolerance: 10\n });\n\n canvas.add(square);\n canvas.setActiveObject(square);\n };\n\n const mouseMove = (event: any): void => {\n if (!started) {\n return;\n }\n\n const mouse = canvas.getPointer(event.e);\n const square = canvas.getActiveObject();\n\n if (!(mouse.x - x) || !(mouse.y - y)) {\n return;\n }\n\n if (x > mouse.x) {\n square.set({left: mouse.x});\n }\n\n if (y > mouse.y) {\n square.set({top: mouse.y});\n }\n\n square.set({width: Math.abs(x - mouse.x)});\n square.set({height: Math.abs(y - mouse.y)});\n square.set('visible', true);\n square?.setCoords();\n canvas.selection = false;\n canvas.setActiveObject(square);\n canvas.renderAll();\n };\n\n const mouseUp = (): void => {\n const square = canvas.getActiveObject();\n\n if (square && square === 0 && square.height === 0) {\n canvas.remove(square);\n }\n\n started = false;\n canvas.selection = true;\n canvas.trigger('object:added');\n setAnnotationExists(true);\n canvas.deactivateAll();\n canvas.renderAll();\n canvas.off('mouse:up');\n };\n\n canvas.defaultCursor = 'crosshair';\n canvas.on('mouse:down', mouseDown);\n canvas.on('mouse:move', mouseMove);\n canvas.on('mouse:up', mouseUp);\n};\n\nexport default {\n turnOnMouseEventListeners,\n initializeEventListeners\n};","import React, {useState} from 'react';\nimport TimeFormatter from '../../util/TimeFormatter';\nimport {useTranslation} from 'react-i18next';\nimport {ControlButton, ControlButtonType, TscStyles, themeNames} from '@techsmith/tsc-cloud-style-guide';\nimport styled from 'styled-components';\nimport CommentMarker from '../../static/svg/CommentMarker.svg';\nimport {IComment} from '../../model/commentModel';\nimport {mediaInterface} from '@techsmith/techsmith-smartplayer';\nimport {AnnotationModes} from '../../constants/Constants';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {selectedConversationStore, updateSelectedConversationState} from '../../context/selectedConversationProvider';\nimport {commentsStore} from '../../context/commentsProvider';\nimport {updateAnnotationManagerState} from '../../context/annotationManagerProvider';\nimport {themeStore} from '../../context/themeProvider';\nimport {quizDataStore} from '../../context/quizDataProvider';\n\nconst lowerArrowThreshold = 2;\nconst upperArrowThreshold = 98;\n\nconst CommentMarkerPlugin = styled.div`\n top: -1rem;\n width: 100%;\n display: flex;\n position: absolute;\n`;\n\nexport const CommentMarkerWrapper = styled.div<{isSelected: boolean; leftOffset: number; isHovering: boolean; theme: themeNames}>`\n position: absolute;\n pointer-events: auto;\n left: ${props => props.leftOffset}%;\n transform: translateX(-50%);\n\n &:after {\n content: '';\n display: ${props => props.isHovering && props.leftOffset > lowerArrowThreshold && props.leftOffset < upperArrowThreshold ? 'block' : 'none'};\n border-width: 10px 8px 0;\n border-style: solid;\n border-color: ${TscStyles.color.ui.dusk.mediumDark} transparent transparent transparent;\n position: absolute;\n left: -.125rem;\n bottom: 1.875rem;\n animation: show-comment-preview 200ms ease;\n }\n\n svg {\n height: 1rem;\n width: 0.75rem;\n fill: ${props => props.isSelected ? TscStyles.color.action.primary : props.theme === themeNames.dusk ? TscStyles.color.text.mediumDark : TscStyles.color.ui.dawn.lightMedium};\n\n path {\n border: 1px solid white;\n }\n\n .glyph-outer {\n fill: ${props => props.isSelected && props.theme === themeNames.dusk ? TscStyles.color.ui.dawn.lightMedium :\n props.isSelected && props.theme === themeNames.dawn ? TscStyles.color.text.mediumDark :\n props.theme === themeNames.dusk ? TscStyles.color.text.lightMedium :\n TscStyles.color.text.mediumDark};\n }\n }\n`;\n\nexport const CommentPreview = styled.div<{leftOffset: number}>`\n background: ${TscStyles.color.ui.dusk.mediumDark};\n color: ${TscStyles.color.text.light};\n position: absolute;\n left: ${props => props.leftOffset}px;\n bottom: 0.25rem;\n padding: 0.5rem !important;\n border-radius: .125rem;\n width: 12.5rem;\n`;\n\nexport const PreviewText = styled.div`\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n word-wrap: break-word;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n line-height: 1rem; /* fallback */\n max-height: 3rem;\n`;\n\nexport const PreviewAuthor = styled.div`\n font-weight: 600;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const CommentMarkersBase: React.FC = ({mediaDuration, SelectedComment, comments, theme, IsQuizzing}) => {\n const {t} = useTranslation();\n const [previewState, setPreviewState] = useState({showPreview: false, previewXoffset: -1, text: '', authorName: '', comment: null});\n\n const calculatePreviewX = (target: Element) => {\n const commentPreviewWidth = 200;\n const previewHalfWidth = commentPreviewWidth / 2;\n const markerWidth = 14;\n const halfMarkerWidth = markerWidth / 2;\n const edgeOffset = 0;\n const targetRect = target.getBoundingClientRect();\n const playerRect = document.querySelector('.tsc-smartplayer').getBoundingClientRect();\n const offsetX = targetRect.left + halfMarkerWidth - playerRect.left;\n const centeredOffsetX = offsetX - previewHalfWidth > 0 ? offsetX - previewHalfWidth : -edgeOffset;\n const maxX = playerRect.width - (commentPreviewWidth - edgeOffset);\n\n return centeredOffsetX < maxX ? centeredOffsetX : maxX;\n };\n\n const onMarkerClick = (comment: IComment) => {\n updateSelectedConversationState({SelectedComment: comment});\n\n if (comment.annotation) {\n updateAnnotationManagerState({annotationMode: IsQuizzing ? AnnotationModes.none : AnnotationModes.display});\n }\n\n mediaInterface.pause();\n mediaInterface.currentTime = comment.time;\n };\n\n const getPreviewText = (comment: IComment): string => {\n if (!comment.text && !!comment.annotation) {\n return t('conversations.annotationAttached') as string;\n } else if (comment.isDeleted) {\n return t('conversations.commentDeletedText') as string;\n }\n return comment.text;\n };\n\n return (\n \n {!!mediaDuration && comments && comments.length > 0 && comments.map((comment, index) => (\n ) => setPreviewState({authorName: comment.user.DisplayName, text: getPreviewText(comment), showPreview: true, previewXoffset: calculatePreviewX(e.target as Element), comment: comment})}\n onMouseLeave={() => setPreviewState({authorName: '', text: '', showPreview: false, previewXoffset: -1, comment: null})}\n >\n }\n buttonType={ControlButtonType.floating}\n onClick={() => onMarkerClick(comment)}\n title=\"\"\n ariaLabel={t('conversations.commentMarkAriaLabel', {time: TimeFormatter.formatTimeForSpeech(comment.time), user: comment.user.DisplayName, commentText: comment.text})}\n onBlur={() => setPreviewState({authorName: '', text: '', showPreview: false, previewXoffset: -1, comment: null})}\n width=\"0.75rem\"\n themeName={theme}\n testId={`comment-marker-${index}`}\n />\n \n ))}\n {previewState.showPreview &&\n \n {previewState.authorName}\n {previewState.text}\n \n }\n \n );\n};\n\nexport interface ICommentMarkersProps {\n mediaDuration: number;\n}\n\nexport interface IStateMappedProps {\n SelectedComment?: IComment;\n comments: IComment[];\n theme: themeNames;\n IsQuizzing: boolean;\n}\n\nconst mapStatesToProps = (\n {mediaDuration}: ICommentMarkersProps,\n {SelectedComment}: Partial,\n {comments}: Partial,\n {theme}: Partial,\n {IsQuizzing}: Partial\n): ICommentMarkersProps & IStateMappedProps => ({mediaDuration, SelectedComment, comments, theme, IsQuizzing});\n\nexport default withMemoizedContexts(mapStatesToProps, selectedConversationStore, commentsStore, themeStore, quizDataStore)(CommentMarkersBase);\n","import React, {useState} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport styled from 'styled-components';\nimport '@techsmith/techsmith-smartplayer/dist/techsmith-smart-player.css';\nimport '../../static/css/modal.less';\nimport {TscStyles, ControlButton, ControlButtonType} from '@techsmith/tsc-cloud-style-guide';\nimport EncodeApi from '../../service/encodeApi';\nimport Constants, {EntryPoint} from '../../constants/Constants';\nimport ProgressLoader from '../util/ProgressLoader';\nimport cssConstants from '../../constants/cssConstants';\nimport {IWorkerState} from '../../model/workerState';\nimport {StyledAnchor} from '../util/StyledElements';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {mediaStore, updateMediaStateFromServer} from '../../context/mediaProvider';\nimport config from '../../service/config';\n\nconst CancelEncodeButtonWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst PizzaTrackerContainerDiv = styled.div<{isEmbedView: boolean}>`\n margin: auto;\n box-sizing: border-box;\n text-align: center;\n justify-content: center;\n align-self: center;\n display: flex;\n flex-direction: column;\n background-color: black;\n padding: 3.375rem 2rem;\n ${props => props.isEmbedView ? `\n height: 100%;\n width: 100%;\n ` : ''}\n\n a {\n color: ${TscStyles.color.action.primary};\n }\n\n h2 {\n color: white;\n margin-bottom: 0.25rem;\n }\n\n h3 {\n color: ${TscStyles.color.text.lightMedium};\n font-weight: 500;\n margin-top: 0;\n }\n`;\n\nexport const PizzaTrackerBase: React.FC = ({isOwnerOrAdmin, Hash, HasEncodingError, IsEncodeJobCancellable, IsEncoding, EncodingProgress, MediaStoreWorkerState}) => {\n const {t} = useTranslation();\n\n const [state, setState] = useState({\n isCanceling: false\n });\n\n const onCancelEncoding = async () => {\n setState({...state, isCanceling: true});\n\n await EncodeApi.cancelVideoEncoding(Hash);\n updateMediaStateFromServer();\n\n setState({...state, isCanceling: false});\n };\n\n const showCancelEncode = isOwnerOrAdmin && IsEncodeJobCancellable && IsEncoding && EncodingProgress < 100;\n\n return (\n \n {MediaStoreWorkerState.isWorking ? <>\n

{t('FetchingMediaProgressTitle')}

\n

{t('FetchingMediaProgressSubTitle')}

\n : MediaStoreWorkerState.hasError || HasEncodingError ? <>\n

{t('MediaProcessingFailedTitle')}

\n {isOwnerOrAdmin &&

{t('MediaProcessingFailedSubtitle')} {t('ContactSupport')}

}\n : !MediaStoreWorkerState.isWorking && !MediaStoreWorkerState.hasError && <>\n \n

{t('MediaBeingProcessedTitle')}

\n

{t(isOwnerOrAdmin ? 'MediaBeingProcessedSubtitleOwner' : 'MediaBeingProcessedSubtitleNonOwner')}

\n {showCancelEncode &&

{t('CancelEncodingInfoText')}

}\n {showCancelEncode &&\n \n \n \n }\n }\n
\n );\n};\n\nexport interface IPizzaTrackerProps {\n isOwnerOrAdmin: boolean;\n}\n\ninterface IPizzaTrackerState {\n isCanceling: boolean;\n}\n\nexport interface IPizzaTrackerStateMappedProps {\n Hash: string;\n HasEncodingError: boolean;\n IsEncodeJobCancellable: boolean;\n IsEncoding: boolean;\n EncodingProgress: number;\n MediaStoreWorkerState: IWorkerState;\n}\n\nconst mapStatesToProps = (\n {isOwnerOrAdmin}: IPizzaTrackerProps,\n {Hash, HasEncodingError, IsEncodeJobCancellable, IsEncoding, EncodingProgress, MediaStoreWorkerState}: Partial\n): IPizzaTrackerProps & IPizzaTrackerStateMappedProps => ({isOwnerOrAdmin, Hash, HasEncodingError, IsEncodeJobCancellable, IsEncoding, EncodingProgress, MediaStoreWorkerState});\n\nexport default withMemoizedContexts(mapStatesToProps, mediaStore)(PizzaTrackerBase);\n","import React, {useEffect, useRef, useState} from 'react';\nimport * as qs from 'query-string';\nimport styled from 'styled-components';\nimport {isSafari, isMobile} from 'react-device-detect';\nimport {events, ISmartPlayerGACustomEvent, ISmartPlayerRumDataEvent, ISmartPlayerTimeUpdateEvent, mediaInterface, preloadOptions, mediaInterfaceConstants, log} from '@techsmith/techsmith-smartplayer';\nimport SmartPlayerConstants from '../../constants/smartPlayerConstants';\nimport Analytics from '../../service/analytics';\nimport config from '../../service/config';\nimport logging from '../../service/logging';\nimport MediaApi from '../../service/mediaApi';\nimport resumablePlayback from '../../service/resumablePlayback';\nimport StringUtil from '../../util/StringUtil';\nimport '@techsmith/techsmith-smartplayer/dist/techsmith-smart-player.css';\nimport '../../static/css/modal.less';\nimport Constants, {AnnotationModes, EntryPoint} from '../../constants/Constants';\nimport CommentMarkers from '../conversation/CommentMarkers';\nimport ReactDOM from 'react-dom';\nimport Annotation from '../conversation/Annotation';\nimport {themeNames} from '@techsmith/tsc-cloud-style-guide';\nimport {annotationManagerStore, updateAnnotationManagerState} from '../../context/annotationManagerProvider';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {IComment} from '../../model/commentModel';\nimport {selectedConversationStore, updateSelectedConversationState} from '../../context/selectedConversationProvider';\nimport {updateDisableConversationState} from '../../context/disableConversationProvider';\nimport TimeFormatter from '../../util/TimeFormatter';\nimport {useUserProfileData} from '../../context/userProfileProvider';\nimport {commentsStore} from '../../context/commentsProvider';\nimport {themeStore} from '../../context/themeProvider';\nimport {updateQuizData} from '../../context/quizDataProvider';\nimport {mediaStore} from '../../context/mediaProvider';\nimport cssConstants from '../../constants/cssConstants';\n\nconst smartPlayerApp = document.createElement('div');\nsmartPlayerApp.id = 'tscMediaContent';\nsmartPlayerApp.style.margin = 'auto';\nlet started = false;\nlet lastSavedTime = 0;\nconst timeBuffer = 3;\n\ninterface IHotSpotsOffSet {\n x: number;\n y: number;\n}\n\n// eslint-disable-next-line no-console\nconsole.info(`%cUsing TechSmith Smart Player version: ${mediaInterface.version}`, 'color:blue; font-size:18px');\n\nconst SmartPlayerWrapper = styled.div`\n display: flex;\n justify-content: center;\n height: 100%;\n\n .annotation-wrapper {\n height: 100%;\n }\n`;\n\nconst SmartPlayerContainerDiv = styled.div<{annotationMode: AnnotationModes; isEmbedView: boolean; isImage: boolean; hotspotsOffset: IHotSpotsOffSet; isQuizUserSelfIdentifyOpen: boolean}>`\n ${props => props.isEmbedView ? 'height: 100%;' : ''}\n ${props => props.isEmbedView || props.isImage ? 'width: 100%;' : ''}\n\n .tsc-smartplayer {\n background-color: #000 !important;\n color: #fff;\n\n .video-wrapper {\n ${props => props.isQuizUserSelfIdentifyOpen ? `width: ${cssConstants.smartPlayerQuizSetupWidth}` : ''};\n ${props => props.isQuizUserSelfIdentifyOpen ? `height: ${cssConstants.smartPlayerQuizSetupHeight}` : ''};\n }\n\n .display-image-quiz-button, .question-set-container {\n position: absolute !important;\n }\n\n video {\n color: #fff;\n background-color: #000;\n }\n\n /* !important to be the props set on the element directly in SP js */\n .hotspots {\n left: ${props => props.hotspotsOffset.x}px !important;\n top: ${props => props.hotspotsOffset.y}px !important;\n }\n\n /* this is needed so the SP controls dont beat out the media tabs on narrow-tall media in */\n /* iOS safari which didn't seem to be respecting calculated height properly, before final calculations */\n /* i saw evidence of this behavior in chrome as well, so set for all mobile just to be sure */\n ${isMobile ? `.video-controls-container {\n z-index: auto !important;\n\n .progress-bar-control {\n z-index: auto !important;\n }\n }` : ''}\n\n #controls, .video-controls-container {\n visibility: ${props => props.annotationMode !== AnnotationModes.edit ? 'visible' : 'hidden'}\n }\n }\n`;\n\nexport const SmartPlayerBase: React.FC = ({annotationMode, SelectedComment, comments, theme, ContentType, ContentUrl, Hash, IsImage, IsVideo, Title, HlsTokenInjectionProxyContentUrl, PosterUrl, SpriteUrl, AllowViewerToFastForwardVideo, XmpUrl, AudioDescriptionUrl, QuizId, Rotate, PreviewThumbnailsUri, PreviewThumbnailsInterval, PreviewThumbnailsMaxColumns, PreviewThumbnailsThumbHeight, PreviewThumbnailsThumbWidth}) => {\n const smartPlayerContainer = useRef(null);\n const videoDivRef = useRef(null);\n const hotSpotsDivRef = useRef(null);\n const [commentMarkerDomElement, setCommentMarkerDomElement] = useState(null);\n const [annotationDomElement, setAnnotationDomElement] = useState(null);\n const [mediaDuration, setMediaDuration] = useState(0);\n const [isReadyToPlay, setIsReadyToPlay] = useState(false);\n const [hotSpotsOffSet, setHotSpotsOffset] = useState({x: 0, y: 0});\n const [safariRepaint, setSafariRepaint] = useState(false);\n const [quizUserSelfIdentifyIsOpen, setQuizUserSelfIdentifyIsOpen] = useState(false);\n const {isWorking: userProfileIsLoading, userProfile} = useUserProfileData();\n\n smartPlayerApp.style.background = 'none';\n\n const isYouTubeVideo = () => ContentType && ContentType.toLowerCase().includes(SmartPlayerConstants.contentType.youtube);\n\n const conditionallyConfigurePlaybackResume = () => {\n const parsedQuery = qs.parse(location.search);\n if ('T' in parsedQuery || 't' in parsedQuery || Constants.queryParams.commentId in parsedQuery) {\n return;\n }\n\n const savedTime = resumablePlayback.getProgress(config.user.TechSmithId, Hash);\n const isTimeSafeToSeek = savedTime + timeBuffer === mediaInterface.getSafeSeekTime(savedTime + timeBuffer);\n\n if (isTimeSafeToSeek) {\n mediaInterface.currentTime = savedTime;\n }\n };\n\n const recordGAViewEvent = () => {\n const gaViewEvent = {\n category: SmartPlayerConstants.analytics.viewEvent,\n action: '',\n label: Hash,\n value: 0\n };\n\n if (config.environmentData.IsLti) {\n gaViewEvent.action = SmartPlayerConstants.analytics.viewAction.FromLti;\n } else if (!window.document.referrer) {\n gaViewEvent.action = SmartPlayerConstants.analytics.viewAction.FromUnknown;\n } else if (RegExp(config.environmentData.GoogleAnalyticsDomain).exec(window.document.referrer) === null) {\n gaViewEvent.action = SmartPlayerConstants.analytics.viewAction.FromEmbed;\n } else {\n gaViewEvent.action = SmartPlayerConstants.analytics.viewAction.FromViewPage;\n }\n Analytics.gaEvent(gaViewEvent);\n };\n\n const videoStartEventListener = () => {\n recordGAViewEvent();\n void MediaApi.incrementView(Hash); // intentionally not-awaited\n if (!isYouTubeVideo()) {\n mediaInterface.controls = mediaInterfaceConstants.controls.autohide;\n }\n mediaInterface.removeEventListener(events.External.VideoPlay, videoStartEventListener);\n };\n\n const mediaReadyEventListener = () => {\n IsImage && MediaApi.incrementView(Hash);\n updateDisableConversationState({isAnnotatingDisabled: false, isCommentingDisabled: false});\n setIsReadyToPlay(true);\n };\n\n const addEventListeners = () => {\n if (log && log.addEventListener) {\n log.addEventListener('EXCEPTION', e => {\n logging.warn('Encountered exception in Smart Player', e);\n });\n }\n\n mediaInterface.addEventListener(events.External.ShowStartQuizPrompt, () => {\n setQuizUserSelfIdentifyIsOpen(true);\n });\n\n mediaInterface.addEventListener(events.External.HideStartQuizPrompt, () => {\n setQuizUserSelfIdentifyIsOpen(false);\n });\n\n mediaInterface.addEventListener(events.External.QuizVisible, () => {\n updateQuizData({IsQuizzing: true});\n if (!isYouTubeVideo()) {\n mediaInterface.controls = mediaInterfaceConstants.controls.true;\n }\n });\n\n mediaInterface.addEventListener(events.External.QuizHidden, () => {\n updateQuizData({IsQuizzing: false});\n if (!isYouTubeVideo()) {\n mediaInterface.controls = mediaInterfaceConstants.controls.autohide;\n }\n });\n\n mediaInterface.addEventListener(events.ExternalVideo.VideoLoadedData, () => {\n conditionallyConfigurePlaybackResume();\n });\n\n mediaInterface.addEventListener(events.External.VideoEnd, () => {\n updateDisableConversationState({isAnnotatingDisabled: true});\n });\n\n mediaInterface.addEventListener(events.External.VideoReplay, () => {\n updateDisableConversationState({isAnnotatingDisabled: false});\n });\n\n mediaInterface.addEventListener(events.ExternalVideo.VideoLoadedMetadata, () => {\n setMediaDuration(mediaInterface.duration);\n });\n\n mediaInterface.addEventListener(events.ExternalVideo.VideoTimeUpdate, () => {\n const roundedTime = Math.floor(mediaInterface.currentTime);\n\n if (roundedTime !== lastSavedTime) {\n resumablePlayback.setProgress(config.user.TechSmithId, Hash, roundedTime.toString());\n lastSavedTime = roundedTime;\n }\n });\n\n mediaInterface.addEventListener(events.External.VideoPlay, videoStartEventListener);\n mediaInterface.addEventListener(events.External.MediaReady, mediaReadyEventListener);\n\n mediaInterface.addEventListener(events.External.GoogleAnalyticsCustomEvent, e => {\n // the events coming out of SP aren't reliable enough not to sanitize, what should be all strings (and number for value)\n // are coming out booleans, numbers, undefined or otherwise unpredictable and causing our our code to throw errors without this\n const sanitizedEvent: ISmartPlayerGACustomEvent = {\n category: JSON.stringify(e.category),\n action: JSON.stringify(e.action),\n label: JSON.stringify(e.label),\n value: e.value\n };\n Analytics.gaEvent(sanitizedEvent);\n\n Analytics.aiEvent({\n name: 'SmartPlayerEvent',\n label: sanitizedEvent.action,\n value: sanitizedEvent.label\n });\n });\n\n mediaInterface.addEventListener(events.External.PlayerRumData, e => {\n const categorySuffix = e.categorySuffix || '';\n if (e?.rum) {\n e.rum.forEach(rumItem => {\n Analytics.gaMeasurement({\n category: `SmartPlayerRUM_PresentationWebClient${categorySuffix}`,\n variable: rumItem.name,\n value: rumItem.time\n });\n\n Analytics.aiMeasurement({\n name: `SmartPlayerTiming_PresentationWebClient${categorySuffix}`,\n label: rumItem.name,\n value: rumItem.time\n });\n });\n }\n });\n };\n\n const configure = () => {\n // the .replace is for older youtube content urls that may be non-secure protocol\n mediaInterface.addSrc(ContentUrl.replace(/http:\\/\\//i, 'https://'));\n if (HlsTokenInjectionProxyContentUrl) {\n mediaInterface.addSrc(HlsTokenInjectionProxyContentUrl);\n }\n mediaInterface.disableContinueWithoutQuestions = true;\n mediaInterface.posterSrc = PosterUrl;\n mediaInterface.tocSrc = SpriteUrl;\n mediaInterface.rememberUserInfo = true;\n mediaInterface.allowFastForward = AllowViewerToFastForwardVideo;\n\n if (!StringUtil.isNullOrWhiteSpace(XmpUrl)) {\n mediaInterface.xmpSrc = XmpUrl;\n }\n\n if (!StringUtil.isNullOrWhiteSpace(AudioDescriptionUrl)) {\n mediaInterface.audioDescriptionMediaSrc = AudioDescriptionUrl;\n }\n\n mediaInterface.showADACompliantCaptions = !!config.featureSwitches.ForceADACompliantCaptionStyle;\n\n mediaInterface.environment = SmartPlayerConstants.environments[config.environmentData.Environment.toLowerCase()];\n // eslint-disable-next-line no-undefined\n if (mediaInterface.environment === undefined) {\n logging.warn(`configured environment [${config.environmentData.Environment}] did not map to an expected value, defaulting to 'live'`);\n mediaInterface.environment = SmartPlayerConstants.environments.live;\n }\n\n mediaInterface.quizCreateInstanceUrl = config.environmentData.QuizzingServiceCreateInstanceUrl;\n\n if (!StringUtil.isNullOrWhiteSpace(QuizId)) {\n mediaInterface.quizId = QuizId;\n }\n\n if (Rotate) {\n mediaInterface.rotation = Rotate;\n }\n\n if (isYouTubeVideo()) {\n mediaInterface.controls = SmartPlayerConstants.youtubeControls;\n } else {\n if (PreviewThumbnailsUri) {\n mediaInterface.videoThumbnailsSrc = PreviewThumbnailsUri;\n mediaInterface.videoThumbnailWidth = PreviewThumbnailsThumbWidth;\n mediaInterface.videoThumbnailHeight = PreviewThumbnailsThumbHeight;\n mediaInterface.videoThumbnailInterval = PreviewThumbnailsInterval;\n mediaInterface.videoThumbnailColumns = PreviewThumbnailsMaxColumns;\n }\n\n mediaInterface.useLargerProgressBar = true;\n // the watch page must 'disable' the preload play button overlay for the sake of conversation interaction (also force controls on)\n if (config.entryPoint === EntryPoint.watch) {\n mediaInterface.preload = preloadOptions.metadata;\n mediaInterface.controls = mediaInterfaceConstants.controls.true;\n }\n }\n\n if (ContentType.toLowerCase().includes(SmartPlayerConstants.contentType.image)) {\n mediaInterface.background = SmartPlayerConstants.imageBackgroundColor;\n }\n\n mediaInterface.contextMenu = false;\n\n // need this or camtasia produced recordings that set unicodeenabled=true in xmp will break SAS tokens as they are set up in smartplayer (JMD: 2019-08)\n mediaInterface.ignoreXmpControllerParameters = ['unicodeenabled', 'autohide'];\n\n setUserInfo();\n\n mediaInterface.userSignedIn = config.user.IsSignedIn && (config.watchConfig?.isOwner || config.embedConfig?.isOwner || !config.featureSwitches.DisableSmartPlayerAccessToken);\n };\n\n const setUserInfo = () => {\n if (userProfile) {\n mediaInterface.userInfo = {\n firstName: userProfile.firstName || '',\n lastName: userProfile.lastName || '',\n email: config.user.EmailAddress || ''\n };\n }\n };\n\n const run = async () => {\n if (!started) {\n started = true;\n addEventListeners();\n mediaInterface.mediaTitle = Title;\n mediaInterface.run('tscMediaContent');\n\n if (mediaInterface.controls !== SmartPlayerConstants.youtubeControls) {\n const commentMarkerPluginInfo = IsVideo && await mediaInterface.registerPlugin('knowmiaCommentMarkers', Constants.pluginElements.progressBar);\n const annotationPluginInfo = await mediaInterface.registerPlugin('knowmiaAnnotation', Constants.pluginElements.media);\n IsVideo && commentMarkerPluginInfo.pluginContainerElement.classList.add('comment-track');\n annotationPluginInfo.pluginContainerElement.classList.add('annotation-wrapper');\n setCommentMarkerDomElement(commentMarkerPluginInfo.pluginContainerElement);\n setAnnotationDomElement(annotationPluginInfo.pluginContainerElement);\n }\n }\n };\n\n const appendSmartPlayerApp = () => {\n if (smartPlayerContainer.current && !smartPlayerContainer.current.contains(smartPlayerApp)) {\n smartPlayerContainer.current.appendChild(smartPlayerApp);\n }\n };\n\n useEffect(() => {\n if (!userProfileIsLoading) {\n setUserInfo();\n }\n }, [userProfileIsLoading]);\n\n useEffect(() => {\n mediaInterface.setTheme(theme);\n }, [theme]);\n\n useEffect(() => {\n const handleHideAnnotationsAndSelectComment = () => {\n const roundedTime = Math.floor(mediaInterface.currentTime);\n const commentToSelect = comments?.find(comment => Math.floor(comment.time) === roundedTime);\n\n if (Math.floor(SelectedComment?.time) !== Math.floor(commentToSelect?.time) && commentToSelect) {\n updateSelectedConversationState({SelectedComment: commentToSelect});\n }\n\n if (annotationMode === AnnotationModes.display) {\n const timeDifference = TimeFormatter.getRoundedTime(Math.abs(mediaInterface.currentTime - SelectedComment?.time));\n const timeMismatch = timeDifference > Constants.annotation.timeTolerance;\n\n if (timeMismatch) {\n updateAnnotationManagerState({annotationMode: AnnotationModes.none});\n }\n }\n };\n\n mediaInterface.addEventListener(events.ExternalVideo.VideoTimeUpdate, handleHideAnnotationsAndSelectComment);\n\n return () => {\n mediaInterface.removeEventListener(events.ExternalVideo.VideoTimeUpdate, handleHideAnnotationsAndSelectComment);\n };\n }, [SelectedComment, annotationMode, comments]);\n\n useEffect(() => {\n mediaInterface.doubleClickControlEnabled = annotationMode !== AnnotationModes.edit;\n }, [annotationMode]);\n\n useEffect(() => {\n if (!started && ContentUrl) {\n configure();\n appendSmartPlayerApp();\n void run();\n }\n }, [ContentUrl]);\n\n useEffect(() => {\n if (isReadyToPlay) {\n if (isSafari) {\n window.requestAnimationFrame(() => {\n setSafariRepaint(true);\n window.requestAnimationFrame(() => {\n setSafariRepaint(false);\n window.requestAnimationFrame(() => {\n setSafariRepaint(true);\n });\n });\n });\n }\n\n videoDivRef.current = document.querySelector('#tscMediaContent .video-div video');\n hotSpotsDivRef.current = document.querySelector('#tscMediaContent .hotspots');\n\n // at this point, this should never be true\n if (!videoDivRef.current || !hotSpotsDivRef.current) {\n return;\n }\n\n const videoDivBoundingRect = videoDivRef.current.getBoundingClientRect();\n const videoDivParentBoundingRect = videoDivRef.current.parentElement.getBoundingClientRect();\n\n // initialize the offset\n setHotSpotsOffset({\n x: videoDivBoundingRect.x - videoDivParentBoundingRect.x,\n y: videoDivBoundingRect.y - videoDivParentBoundingRect.y\n });\n\n // every time video-div resizes modify the offset, because of how SP is designed and structured we cannot position the hotspots canvas with CSS alone\n const observer = new ResizeObserver(() => {\n const observerVideoDivBoundingRect = videoDivRef.current.getBoundingClientRect();\n const observerVideoDivParentBoundingRect = videoDivRef.current.parentElement.getBoundingClientRect();\n\n setHotSpotsOffset({\n x: observerVideoDivBoundingRect.x - observerVideoDivParentBoundingRect.x,\n y: observerVideoDivBoundingRect.y - observerVideoDivParentBoundingRect.y\n });\n });\n observer.observe(videoDivRef.current);\n // eslint-disable-next-line consistent-return\n return () => {\n observer.disconnect();\n };\n }\n }, [isReadyToPlay]);\n\n return (\n \n \n {commentMarkerDomElement && ReactDOM.createPortal(, commentMarkerDomElement as Element)}\n {annotationDomElement && ReactDOM.createPortal(, annotationDomElement as Element)}\n \n );\n};\n\nexport interface IStateMappedProps {\n annotationMode: AnnotationModes;\n SelectedComment: IComment;\n comments: IComment[];\n theme: themeNames;\n ContentType: string;\n ContentUrl: string;\n Hash: string;\n IsImage: boolean;\n IsVideo: boolean;\n Title: string;\n HlsTokenInjectionProxyContentUrl: string;\n PosterUrl: string;\n SpriteUrl: string;\n AllowViewerToFastForwardVideo: boolean;\n XmpUrl: string;\n AudioDescriptionUrl: string;\n QuizId: string;\n Rotate: number;\n PreviewThumbnailsUri: string;\n PreviewThumbnailsInterval: number;\n PreviewThumbnailsMaxColumns: number;\n PreviewThumbnailsThumbHeight: number;\n PreviewThumbnailsThumbWidth: number;\n}\n\nconst mapStatesToProps = (\n // eslint-disable-next-line no-empty-pattern\n {},\n {annotationMode}: Partial,\n {SelectedComment}: Partial,\n {comments}: Partial,\n {theme}: Partial,\n {ContentType, ContentUrl, Hash, IsImage, IsVideo, Title, HlsTokenInjectionProxyContentUrl, PosterUrl, SpriteUrl, AllowViewerToFastForwardVideo, XmpUrl, AudioDescriptionUrl, QuizId, Rotate, PreviewThumbnailsUri, PreviewThumbnailsInterval, PreviewThumbnailsMaxColumns, PreviewThumbnailsThumbHeight, PreviewThumbnailsThumbWidth}: Partial\n): IStateMappedProps => ({annotationMode, SelectedComment, comments, theme, ContentType, ContentUrl, Hash, IsImage, IsVideo, Title, HlsTokenInjectionProxyContentUrl, PosterUrl, SpriteUrl, AllowViewerToFastForwardVideo, XmpUrl, AudioDescriptionUrl, QuizId, Rotate, PreviewThumbnailsUri, PreviewThumbnailsInterval, PreviewThumbnailsMaxColumns, PreviewThumbnailsThumbHeight, PreviewThumbnailsThumbWidth});\n\nexport default withMemoizedContexts(mapStatesToProps, annotationManagerStore, selectedConversationStore, commentsStore, themeStore, mediaStore)(SmartPlayerBase);\n","import React from 'react';\nimport RectPlaceholderSvg from '../../static/svg/rectPlaceholder.svg';\nimport styled from 'styled-components';\nimport cssConstants from '../../constants/cssConstants';\n\nexport const SmartPlayerPlaceholder = styled.div`\n margin: 1.25rem 1.25rem 0px;\n text-align: center;\n\n svg {\n margin: auto;\n max-width: ${cssConstants.contentWidth};\n max-height: calc(100vh - 8.5rem);\n }\n`;\n\nconst VideoPlaceholder: React.FC = () => (\n \n \n \n);\n\nexport default VideoPlaceholder;","import {ControlButton, ControlButtonType, themeNames, TscStyles} from '@techsmith/tsc-cloud-style-guide';\nimport React from 'react';\nimport styled from 'styled-components';\nimport cssConstants from '../../constants/cssConstants';\nimport withMemoizedContexts from '../../context/contextContainerHoC';\nimport {themeStore} from '../../context/themeProvider';\nimport {ScreenReaderOnly} from './StyledElements';\n\nconst AccessibilityContainer = styled.div<{theme: themeNames}>`\n margin: 0 auto 8px auto;\n border-radius: 0 0 0.125rem 0.125rem;\n box-shadow: ${props => props.theme === themeNames.dusk ?\n `0 0 0.25rem 0 fade(${TscStyles.color.action.primary}, 90%)` :\n `0 0.1875rem 0.25rem 0 fade(${TscStyles.color.ui.dusk.dark}, 20%), 0 0.1875rem 0.1875rem -0.125rem fade(${TscStyles.color.ui.dusk.dark}, 15%)`};\n padding: 0.25rem 0.25rem;\n overflow: hidden;\n background-color: ${props => props.theme === themeNames.dusk ? TscStyles.color.ui.dusk.medium : TscStyles.color.ui.dawn.light};\n z-index: 0;\n position: absolute;\n left: -9999px;\n align-self: center;\n\n &:focus-within {\n z-index: ${cssConstants.zIndex.skipToContentPopUp};\n left: unset;\n }\n`;\n\nconst BypassBlockContainer = styled.div`\n display: flex;\n\n a {\n z-index: 0;\n\n &:focus {\n position: relative;\n z-index: ${cssConstants.zIndex.skipToContentPopUp};\n margin: 0.5rem;\n }\n }\n`;\n\nconst SkipLink: React.FC = ({href, text, theme}) => (\n \n \n \n \n \n \n);\n\ninterface ISkipLinkProps {\n href: string;\n text: string;\n}\n\ninterface IStateMappedProps {\n theme: themeNames;\n}\n\nconst mapStatesToProps = (\n {href, text}: ISkipLinkProps,\n {theme}: Partial\n): ISkipLinkProps & IStateMappedProps => ({href, text, theme});\n\nexport default withMemoizedContexts(mapStatesToProps, themeStore)(SkipLink);\n","// eslint-disable-next-line no-magic-numbers\ntype SmartPlayerEnvironment = 0 | 1 | 2 | 3 | 4;\n\ninterface SmartPlayerConstants {\n environments: {\n [environmentName: string]: SmartPlayerEnvironment;\n };\n contentType: {\n unknown: string;\n audio: string;\n image: string;\n video: string;\n youtube: string;\n };\n analytics: {\n viewEvent: string;\n viewAction: {\n FromLti: string;\n FromEmbed: string;\n FromViewPage: string;\n FromUnknown: string;\n };\n };\n imageBackgroundColor: string;\n minPlayerHeight: string;\n youtubeControls: string;\n}\n\nexport default {\n environments: {\n local: 1,\n dev: 1,\n stage: 2,\n live: 3,\n test: 4\n },\n contentType: {\n unknown: 'unknown',\n audio: 'audio',\n image: 'image',\n video: 'video',\n youtube: 'youtube'\n },\n analytics: {\n viewEvent: 'View',\n viewAction: {\n FromLti: 'Viewed On LTI Page',\n FromEmbed: 'Viewed On Embed Page',\n FromViewPage: 'Viewed On The View Page',\n FromUnknown: 'Viewed From Unknown Source'\n }\n },\n imageBackgroundColor: '#f5f5f5',\n // this is roughly the height of the quizzing email required input form, seems a reasonable cut-off, else this dialog is unusable\n minPlayerHeight: '360px',\n youtubeControls: 'youtube'\n} as SmartPlayerConstants;\n","import {IUserProfileModel} from '../model/appModel';\nimport profileApi from '../service/profileApi';\nimport config from '../service/config';\nimport useSWR from 'swr';\n\nconst fetchUserProfile = async (techSmithId: string) => techSmithId ? await profileApi.getUserProfileInfo(techSmithId) : {} as IUserProfileModel;\n\nexport const useUserProfileData = () => {\n const tscId = config?.user?.TechSmithId;\n const userProfileId = `UserProfileInfo-${tscId}`;\n const {data, error} = useSWR(userProfileId, () => fetchUserProfile(tscId), {revalidateOnFocus: false});\n\n return {\n userProfile: data,\n isWorking: !error && !data,\n hasError: error\n };\n};\n","import ApiUtil from '../util/ApiUtil';\nimport Constants from '../constants/Constants';\n\nconst encodeBaseUrl = '/api/v1/encode';\n\nconst cancelVideoEncoding = async (mediaHash: string) => await ApiUtil.executeDeleteAsync(`${encodeBaseUrl}/${mediaHash}`, [Constants.statusCodes.noContent]);\n\nexport default {\n cancelVideoEncoding\n};\n","\nconst getProgressLocalStorageKey = (techSmithId: string, hash: string) => `${techSmithId}:${hash}`;\n\nconst getProgress = (techSmithId: string, hash: string) => {\n try {\n const localStorageProgress = window.localStorage.getItem(getProgressLocalStorageKey(techSmithId, hash));\n const progress = localStorageProgress ? parseFloat(localStorageProgress) : 0;\n return isNaN(progress) ? 0 : progress;\n } catch {\n // Local storage not supported\n }\n return 0;\n};\n\nconst setProgress = (techSmithId: string, hash: string, progress: string) => {\n try {\n window.localStorage.setItem(getProgressLocalStorageKey(techSmithId, hash), progress);\n } catch {\n // Local storage not supported\n }\n};\n\nconst removeProgress = (techSmithId: string, hash: string) => {\n try {\n window.localStorage.removeItem(getProgressLocalStorageKey(techSmithId, hash));\n } catch {\n // Local storage not supported\n }\n};\n\nexport default\n{\n getProgress,\n setProgress,\n removeProgress\n};\n","const numberNotNeedingPadding = 10;\nconst secondsInHour = 3600;\nconst secondsInMinute = 60;\n\nconst padZero = (num: number): string => num >= numberNotNeedingPadding ? `${num}` : `0${num}`;\n\nconst formatTime = (totalSeconds: number): string => {\n const negative = totalSeconds < 0 ? '-' : '';\n const roundedTotalSeconds = negative ? Math.round(totalSeconds * -1) : Math.round(totalSeconds);\n const hoursPlace = Math.floor(roundedTotalSeconds / secondsInHour);\n const secondsWithoutHours = roundedTotalSeconds % secondsInHour;\n const minutesPlace = Math.floor(secondsWithoutHours / secondsInMinute);\n const secondsPlace = secondsWithoutHours % secondsInMinute;\n\n if (hoursPlace > 0) {\n return `${negative}${hoursPlace}:${padZero(minutesPlace)}:${padZero(secondsPlace)}`;\n } else if (minutesPlace > 0) {\n return `${negative}${minutesPlace}:${padZero(secondsPlace)}`;\n }\n\n return `${negative}00:${padZero(secondsPlace)}`;\n};\n\nconst formatTimeForSpeech = (totalSeconds: number): string => {\n const negative = totalSeconds < 0 ? '-' : '';\n const roundedTotalSeconds = negative ? Math.round(totalSeconds * -1) : Math.round(totalSeconds);\n // eslint-disable-next-line no-magic-numbers\n return Math.floor(roundedTotalSeconds) === 0 ? '0 seconds' : new Date(roundedTotalSeconds * 1000).toISOString().substr(11, 8);\n};\n\nconst getRoundedTime = (time: number): number => Math.floor(time * 1000) / 1000;\n\nconst getSecondsFromTimeString = (time: string): number => {\n const splitTime = time.split(':');\n const hours = parseInt(splitTime[0], 10);\n const minutes = parseInt(splitTime[1], 10);\n const seconds = parseFloat(splitTime[2]);\n\n return hours * 60 * 60 + minutes * 60 + seconds;\n};\n\nexport default {\n formatTime,\n formatTimeForSpeech,\n getRoundedTime,\n getSecondsFromTimeString\n};\n"],"names":["_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","styles","props","React","createElement","className","xmlns","viewBox","preserveAspectRatio","d","stroke","strokeOpacity","AnnotationWrapper","styled","div","pointerEvents","mediaWidth","mediaHeight","AnnotationCanvasWrapper","AnnotationBase","SelectedComment","annotationMode","comments","IsImage","t","useTranslation","useState","pointOfOrigin","canvasRef","useRef","mediaContentRef","document","querySelector","lockAnnotations","current","getObjects","forEach","item","lockMovementX","lockMovementY","lockRotation","lockScalingX","lockScalingY","hasBorders","hasControls","hoverCursor","Constants","cursors","default","animate","getPointByOrigin","coords","left","x","top","y","originX","originY","resetCenter","origScaleX","scaleX","origScaleY","scaleY","annotation","preloadAnnotationScale","opacity","duration","animationDuration","onChange","renderAll","bind","loadAnnotations","topLevelCommentAnnotation","parentCommentId","find","c","id","getElementById","style","display","setTimeout","loadFromJSON","removeOutOfViewObjects","shapes","bottom","right","offset","pastLeft","pastTop","pastRight","pastBottom","bounds","getBoundingRect","height","width","controlsPadding","remove","updateAnnotationManagerState","AnnotationModes","none","saveCanvasChange","changeShapeColor","shape","color","fill","transparentColor","onColorChange","freeDrawingBrush","selectedShape","getActiveObject","selectedShapes","getActiveGroup","_objects","trigger","rescale","scaleRatio","Math","max","clientWidth","clientHeight","scale","setZoom","strokeScale","strokeWidth","obj","onTouchStart","e","edit","preventDefault","onSelectionCreated","type","useEffect","fabric","Canvas","uniScaleTransform","selection","on","setWidth","setHeight","passive","defaultCursor","Square","initializeEventListeners","Arrow","updateCanvasState","updateQuizData","IsQuizzing","off","dispose","onKeyDown","isEditAnnotationMode","isDeleteOrBackspaceEvent","keyCode","keys","backspace","delete","isEditingText","elementTypes","input","textArea","search","some","activeObject","activeGroup","deactivateAll","clear","window","addEventListener","mediaInterface","singleClickControlEnabled","doubleClickControlEnabled","pause","removeEventListener","currentTime","observer","ResizeObserver","observe","disconnect","margin","position","ref","AriaAlert","role","selectedConversationStore","annotationManagerStore","commentsStore","mediaStore","radToDeg","PI","calcAngle","startCoords","endCoords","atan2","turnOnMouseEventListeners","canvas","setAnnotationExists","started","mouseUp","arrow","event","mouse","getPointer","point","path","Path","flipX","lockScalingFlip","padding","shapeType","centeredRotation","perPixelTargetFind","targetFindTolerance","setControlsVisibility","bl","br","mb","ml","mr","mt","tl","tr","mtr","add","setActiveObject","angle","distance","sqrt","pow","set","pathOffset","setCoords","setAngle","__corner","newOrigins","dirty","oCoords","square","Rect","visible","hasRotatingPoint","rect","abs","originalState","CommentMarkerPlugin","CommentMarkerWrapper","leftOffset","isHovering","TscStyles","ui","dusk","mediumDark","isSelected","action","primary","theme","themeNames","text","dawn","lightMedium","CommentPreview","light","PreviewText","PreviewAuthor","CommentMarkersBase","mediaDuration","showPreview","previewXoffset","authorName","comment","previewState","setPreviewState","getPreviewText","isDeleted","map","index","time","min","onMouseEnter","user","DisplayName","targetRect","getBoundingClientRect","playerRect","offsetX","markerWidth","centeredOffsetX","commentPreviewWidth","maxX","onMouseLeave","ControlButton","glyph","buttonType","ControlButtonType","floating","onClick","updateSelectedConversationState","onMarkerClick","title","ariaLabel","TimeFormatter","formatTimeForSpeech","commentText","onBlur","themeName","testId","themeStore","quizDataStore","CancelEncodeButtonWrapper","PizzaTrackerContainerDiv","isEmbedView","PizzaTrackerBase","isOwnerOrAdmin","Hash","HasEncodingError","IsEncodeJobCancellable","IsEncoding","EncodingProgress","MediaStoreWorkerState","isCanceling","state","setState","onCancelEncoding","EncodeApi","cancelVideoEncoding","updateMediaStateFromServer","showCancelEncode","config","entryPoint","EntryPoint","embed","isWorking","hasError","StyledAnchor","href","navigation","contactSupportLink","uploadProgress","secondary","label","cssConstants","defaultButtonWidth","disabled","smartPlayerApp","lastSavedTime","console","info","version","SmartPlayerWrapper","SmartPlayerContainerDiv","isImage","isQuizUserSelfIdentifyOpen","smartPlayerQuizSetupWidth","smartPlayerQuizSetupHeight","hotspotsOffset","isMobile","SmartPlayerBase","ContentType","ContentUrl","IsVideo","Title","HlsTokenInjectionProxyContentUrl","PosterUrl","SpriteUrl","AllowViewerToFastForwardVideo","XmpUrl","AudioDescriptionUrl","QuizId","Rotate","PreviewThumbnailsUri","PreviewThumbnailsInterval","PreviewThumbnailsMaxColumns","PreviewThumbnailsThumbHeight","PreviewThumbnailsThumbWidth","smartPlayerContainer","videoDivRef","hotSpotsDivRef","commentMarkerDomElement","setCommentMarkerDomElement","annotationDomElement","setAnnotationDomElement","setMediaDuration","isReadyToPlay","setIsReadyToPlay","hotSpotsOffSet","setHotSpotsOffset","safariRepaint","setSafariRepaint","quizUserSelfIdentifyIsOpen","setQuizUserSelfIdentifyIsOpen","useUserProfileData","userProfileIsLoading","userProfile","background","isYouTubeVideo","toLowerCase","includes","SmartPlayerConstants","contentType","youtube","videoStartEventListener","gaViewEvent","category","analytics","viewEvent","value","environmentData","IsLti","viewAction","FromLti","referrer","RegExp","GoogleAnalyticsDomain","exec","FromEmbed","FromViewPage","FromUnknown","Analytics","gaEvent","MediaApi","incrementView","controls","mediaInterfaceConstants","autohide","events","External","VideoPlay","mediaReadyEventListener","updateDisableConversationState","isAnnotatingDisabled","isCommentingDisabled","addEventListeners","log","logging","warn","ShowStartQuizPrompt","HideStartQuizPrompt","QuizVisible","true","QuizHidden","ExternalVideo","VideoLoadedData","parsedQuery","qs","parse","location","queryParams","commentId","savedTime","resumablePlayback","getProgress","TechSmithId","getSafeSeekTime","conditionallyConfigurePlaybackResume","VideoEnd","VideoReplay","VideoLoadedMetadata","VideoTimeUpdate","roundedTime","floor","setProgress","toString","MediaReady","GoogleAnalyticsCustomEvent","sanitizedEvent","JSON","stringify","aiEvent","name","PlayerRumData","categorySuffix","rum","rumItem","gaMeasurement","variable","aiMeasurement","setUserInfo","userInfo","firstName","lastName","email","EmailAddress","run","mediaTitle","youtubeControls","registerPlugin","pluginElements","progressBar","commentMarkerPluginInfo","media","annotationPluginInfo","pluginContainerElement","classList","setTheme","handleHideAnnotationsAndSelectComment","commentToSelect","getRoundedTime","timeTolerance","addSrc","replace","disableContinueWithoutQuestions","posterSrc","tocSrc","rememberUserInfo","allowFastForward","StringUtil","isNullOrWhiteSpace","xmpSrc","audioDescriptionMediaSrc","showADACompliantCaptions","featureSwitches","ForceADACompliantCaptionStyle","environment","environments","Environment","undefined","live","quizCreateInstanceUrl","QuizzingServiceCreateInstanceUrl","quizId","rotation","videoThumbnailsSrc","videoThumbnailWidth","videoThumbnailHeight","videoThumbnailInterval","videoThumbnailColumns","useLargerProgressBar","watch","preload","preloadOptions","metadata","image","imageBackgroundColor","contextMenu","ignoreXmpControllerParameters","userSignedIn","IsSignedIn","watchConfig","isOwner","embedConfig","DisableSmartPlayerAccessToken","contains","appendChild","isSafari","requestAnimationFrame","videoDivBoundingRect","videoDivParentBoundingRect","parentElement","observerVideoDivBoundingRect","observerVideoDivParentBoundingRect","ReactDOM","createPortal","SmartPlayerPlaceholder","contentWidth","VideoPlaceholder","AccessibilityContainer","dark","medium","zIndex","skipToContentPopUp","BypassBlockContainer","ScreenReaderOnly","local","dev","stage","test","unknown","audio","video","minPlayerHeight","fetchUserProfile","techSmithId","profileApi","getUserProfileInfo","tscId","userProfileId","revalidateOnFocus","data","error","mediaHash","ApiUtil","executeDeleteAsync","statusCodes","noContent","getProgressLocalStorageKey","hash","localStorageProgress","localStorage","getItem","progress","parseFloat","isNaN","setItem","removeProgress","removeItem","padZero","num","formatTime","totalSeconds","negative","roundedTotalSeconds","round","hoursPlace","secondsWithoutHours","minutesPlace","secondsPlace","Date","toISOString","substr","getSecondsFromTimeString","splitTime","split","parseInt"],"sourceRoot":""}