{"version":3,"file":"assets/chunk.a29088c1134535e9c6b8.js","mappings":"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","sources":["./components/activity/highlights-carousel/index.hbs","./components/activity/highlights-carousel/index.js","./components/activity/highlights/lottie-player/index.hbs","./components/activity/highlights/lottie-player/index.ts","./components/activity/highlights/clip-container/index.hbs","./components/activity/highlights/clip-container/index.ts","./components/activity/highlights/summary-player/index.hbs","./components/activity/highlights/summary-player/index.ts","./components/ui/images/ov-image/index.hbs","./components/ui/images/ov-image/index.js"],"sourcesContent":["import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n\\n
\\n {{#each this.playlists as |playlist|}}\\n {{#if playlist.isVisible}}\\n \\n {{/if}}\\n {{/each}}\\n
\\n\\n{{#if this.isForwardButtonVisible}}\\n \\n{{/if}}\\n\",{ moduleName: \"customer-site/components/activity/highlights-carousel/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action, computed, set } from '@ember/object';\nimport { lte } from '@ember/object/computed';\nimport { bool } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { dropTask } from 'ember-concurrency';\nimport { intlPath } from '@adc/i18n/path';\nimport { format, utcToZonedTime } from 'date-fns-tz';\nimport subDays from 'date-fns/subDays';\n\nimport './_style.scss';\n\n/**\n * Represents the maximum number of highlights days to go back\n */\nexport const MaxHighlightDays = 60;\n\n/**\n * Helper to move the focus to the slide-show div\n */\nfunction moveFocusToParent() {\n let parentEl = document.getElementsByClassName('highlights-carousel')[0];\n parentEl.setAttribute('tabindex', '0');\n parentEl.focus();\n}\n\n/**\n * @classdesc\n * A component that allows for a \"carousel\" of highlights to be viewed.\n */\n@intlPath({ path: 'activity/highlights-carousel' })\nexport default class HighlightsCarousel extends Component {\n @service intl;\n @service store;\n\n /**\n * Initialize.\n */\n constructor() {\n super(...arguments);\n this.getLastDay.perform(0);\n }\n\n /**\n * The current index of the playlist array\n *\n * @type {Number}\n */\n @tracked currentHighlightsIndex = 0;\n\n /**\n * Is the forward button visible?\n *\n * @type {boolean}\n */\n @bool('currentHighlightsIndex')\n isForwardButtonVisible;\n\n /**\n * Is the backwards button disabled?\n *\n * @type {boolean}\n */\n @lte('currentHighlightsIndex', MaxHighlightDays)\n isBackwardsButtonVisible;\n\n /**\n * Task to query and load the prior day's events\n *\n * @param {number} daysBack\n */\n @dropTask()\n *getLastDay(daysBack) {\n const { timeZone } = this.intl;\n\n const priorDay = [\n yield this.store.findRecord(\n 'activity/daily-summary/playlist',\n format(utcToZonedTime(subDays(new Date(), daysBack), timeZone), 'yyyyMMdd', { timeZone })\n )\n ];\n\n set(this, 'playlistArray', (this.playlistArray || []).concat(priorDay).rejectBy('events.length', 0).uniq());\n }\n\n /**\n * List of daily summary playlists\n *\n * @type {Array}\n */\n playlistArray;\n\n /**\n * Returning the array of playlists with an additional property that allows for cycling through highlights for different days.\n *\n * @type Array \n */\n @computed('playlistArray', 'currentHighlightsIndex')\n get playlists() {\n if (!this.playlistArray) {\n return [];\n }\n\n const playlists = this.playlistArray;\n return playlists.map((playlist, index) => {\n return {\n events: playlist.events,\n isVisible: index === this.currentHighlightsIndex\n };\n });\n }\n\n /**\n * Increases the index to go back one day\n */\n @action\n async goBackOneDay() {\n if (!this.playlistArray[this.currentHighlightsIndex + 1]) {\n await this.getLastDay.perform(this.currentHighlightsIndex + 1);\n }\n\n this.currentHighlightsIndex++;\n\n moveFocusToParent();\n }\n\n /**\n * Decreases the index to go forward one day.\n */\n @action\n goForwardOneDay() {\n this.currentHighlightsIndex--;\n\n moveFocusToParent();\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n\",{ moduleName: \"customer-site/components/activity/highlights/lottie-player/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\n\nimport type { EventState } from '../summary-player/index';\n\nexport interface LottiePlayerSignature {\n Element: HTMLDivElement;\n Args: {\n event: EventState;\n playbackSpeed: number;\n playComplete?: () => void;\n };\n}\n\n/**\n * @classdesc\n * Lottie player for activity highlights.\n */\nexport default class LottiePlayer extends Component {\n player?: any;\n\n // region Passed properties\n\n /**\n * Activity event to play.\n */\n @alias('args.event')\n declare event: EventState;\n\n /**\n * Optional passed handler for when the highlight event play is complete.\n */\n get playComplete() {\n return this.args.playComplete || (() => {});\n }\n\n // endregion\n\n // region Lifecycle\n\n /** override */\n willDestroy() {\n super.willDestroy();\n\n const { player } = this;\n if (player) {\n player.destroy();\n }\n }\n\n // endregion\n\n // region Actions\n\n /**\n * Plays (or pauses) the player.\n */\n @action updatePlayState() {\n const { player } = this;\n\n if (this.event.active) {\n player.play();\n } else {\n player.pause();\n }\n }\n\n /**\n * Initializes the lottie player object.\n *\n * @param container The element that will host the lottie player output.\n */\n @action initPlayer(container: HTMLDivElement): void {\n const { event } = this;\n\n // Create new player.\n const player = (this.player = window.bodymovin.loadAnimation({\n container,\n renderer: 'svg',\n loop: false,\n autoplay: false,\n animationData: event.model.animationJson\n }));\n\n // Set the playback speed\n player.setSpeed(this.args.playbackSpeed);\n\n // Is this NOT a video event?\n if (!event.hasVideo) {\n player.addEventListener('complete', () => {\n // Move to next event when complete.\n this.playComplete();\n event.active = false;\n });\n\n player.addEventListener(\n 'enterFrame',\n ({ currentTime, totalTime }: { currentTime: number; totalTime: number }) => {\n // Update progress.\n event.progress = Math.round((currentTime / totalTime) * 100);\n }\n );\n }\n\n // Is this event active?\n if (event.active) {\n // Play.\n player.play();\n }\n }\n\n /**\n * Updates speed at which to play animations\n */\n @action updateSpeed(): void {\n this.player.setSpeed(this.args.playbackSpeed);\n }\n\n // endregion\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Activity::Highlights::LottiePlayer': typeof LottiePlayer;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n \\n \\n \\n
\\n\",{ moduleName: \"customer-site/components/activity/highlights/clip-container/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { once } from '@ember/runloop';\n\nimport './_style.scss';\nimport type { EventState } from '../summary-player/index';\n\n/**\n * Attempts to update the current time of the video element.\n *\n * @returns True if current time was successfully updated.\n */\nfunction updateVideoTime(video: HTMLVideoElement, seconds: number): boolean {\n try {\n // Update video start time and cache on instance if successful.\n video.currentTime = seconds;\n return true;\n } catch (ex) {\n // Might happen in IE11, but nothing we can do so swallow.\n }\n\n return false;\n}\n\n/**\n * Updates the \"play\" status of the passed video element.\n */\nfunction changeVideoState(video: HTMLVideoElement, isPlaying: boolean): void {\n if (isPlaying) {\n video.play();\n } else {\n video.pause();\n }\n}\n\ninterface ClipContainerSignature {\n Element: HTMLDivElement;\n Args: {\n /** Event state for this clip. */\n event: EventState;\n /** Passed handler for when the video element play is complete. */\n playComplete: () => void;\n /** Video playback speed. */\n playbackSpeed: number;\n /** Indicates this video clip is currently visible. */\n isShown?: boolean;\n };\n}\n\n/**\n * @classdesc\n * A video highlights clip.\n */\nexport default class ClipContainer extends Component {\n /**\n * The computed start and end time of the video clip (in seconds).\n */\n private clipTimes = {\n startTime: 0,\n endTime: 0\n };\n\n /**\n * The video event model.\n */\n @alias('args.event.model')\n declare model: EventState['model'];\n\n // region Actions\n\n /**\n * Computes the component startTime and endTime, and updates the video element currentTime to the indicated start time.\n */\n @action initializeClipTimes(event: Event): void {\n const { startTimestampSeconds, endTimestampSeconds } = this.model,\n video = event.target! as HTMLVideoElement,\n clipTimes = this.clipTimes;\n\n // Set playback speed\n this.updatePlaybackRate(video);\n\n // Update end time.\n clipTimes.endTime = endTimestampSeconds || video.duration;\n\n // Is there a start time?\n if (startTimestampSeconds) {\n // Update video start time.\n if (updateVideoTime(video, startTimestampSeconds)) {\n // Cache on instance if successful.\n clipTimes.startTime = startTimestampSeconds;\n }\n }\n }\n\n /**\n * Updates the event state properties based on clip playback progress.\n */\n @action updateClipProgress(evt: Event): void {\n const video = evt.target! as HTMLVideoElement;\n\n // Is the video player paused?\n if (video.paused) {\n // Nothing to do.\n return;\n }\n\n const { startTime, endTime } = this.clipTimes,\n { event } = this.args,\n { currentTime } = video;\n\n // Update event progress and clear seek position.\n event.progress = Math.max(\n Math.min(Math.round(((currentTime - startTime) / (endTime - startTime)) * 100), 100),\n 0\n );\n event.seekPosition = -1;\n\n // Is the video at or after it's end time?\n if (currentTime >= endTime) {\n // Update position to end, pause video and notify complete.\n this.args.playComplete();\n event.active = false;\n }\n }\n\n /**\n * Plays (or pauses) the video element.\n */\n @action updatePlayState(video: HTMLVideoElement, [isPlaying]: [boolean]): void {\n // Schedule state change.\n // Do not copy this deprecated usage. If you see this, please fix.\n // eslint-disable-next-line ember/no-runloop\n once(this, changeVideoState, video, isPlaying);\n }\n\n /**\n * Updates video current time if at the beginning or end.\n */\n @action seekPosition(video: HTMLVideoElement, [seekPosition]: [number]): void {\n // Is this an edge seek position?\n if (seekPosition === 0 || seekPosition === 1) {\n const { startTime, endTime } = this.clipTimes;\n\n // Update video time to either end or beginning.\n updateVideoTime(video, seekPosition ? endTime : startTime);\n }\n }\n\n /**\n * Handles an error when playing the video.\n */\n @action handlePlayError(): void {}\n\n /**\n * Updates playback speed of video\n */\n @action updatePlaybackRate(video: HTMLVideoElement): void {\n video.playbackRate = this.args.playbackSpeed;\n }\n\n // endregion\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Activity::Highlights::ClipContainer': typeof ClipContainer;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
\\n
\\n \\n {{#if @closeButtonAction}}\\n \\n {{/if}}\\n
\\n
\\n {{#unless this.isPlaying}}\\n
\\n \\n
\\n {{/unless}}\\n\\n {{#each (await this.eventsState) as |eventState|}}\\n {{#if (eq eventState this.currentEvent)}}\\n \\n {{/if}}\\n {{/each}}\\n\\n {{#each (await this.videoEvents) as |videoEvent|}}\\n \\n {{/each}}\\n
\\n\\n
\\n
\\n \\n \\n
\\n {{t\\n
\\n \\n
\\n
\\n
\\n\\n\",{ moduleName: \"customer-site/components/activity/highlights/summary-player/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { isEnterOrSpaceCode } from '@adc/ember-utils/utils/a11y';\nimport { loadScript } from '@adc/ember-utils/utils/browser-helpers';\nimport { isDestroyed } from '@adc/ember-utils/utils/ember-helpers';\nimport { action, computed, set } from '@ember/object';\nimport { alias, bool } from '@ember/object/computed';\nimport { schedule } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { isPresent } from '@ember/utils';\nimport { task } from 'ember-concurrency';\nimport { intlPath } from '@adc/i18n/path';\nimport DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\n\nimport './_style.scss';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type DailySummaryEvent from 'customer-site/models/activity/daily-summary/event';\nimport type Playlist from 'customer-site/models/activity/daily-summary/playlist';\n\nconst cookieName = 'highlightsPlaybackSpeed';\n\n/**\n * @classdesc\n * State container for a daily summary event.\n */\nexport class EventState {\n /**\n * The event model.\n */\n @tracked model: DailySummaryEvent;\n\n /**\n * The event index within the playlist.\n */\n index: number;\n\n constructor(model: DailySummaryEvent, index: number) {\n this.model = model;\n this.index = index;\n }\n\n /**\n * Indicates whether the event has video.\n */\n @alias('model.hasVideo')\n declare hasVideo: DailySummaryEvent['hasVideo'];\n\n /**\n * Current event playing progress.\n */\n @tracked progress = 0;\n\n /**\n * Indicates the event is currently playing.\n */\n @tracked active = false;\n\n /**\n * The playlist position to seek to, a percentage between 0 and 1.\n */\n @tracked seekPosition = 0;\n\n /**\n * The encoded style value for the event UI (based on progress).\n */\n get progressStyle(): ReturnType {\n return htmlSafe(`transform: translateX(${this.progress}%);`);\n }\n\n /**\n * Updates this event state to either not started or complete.\n *\n * @param isComplete Indicates this event is complete.\n */\n updateState(isComplete: boolean): void {\n this.progress = isComplete ? 100 : 0;\n this.seekPosition = isComplete ? 1 : 0;\n }\n}\n\nexport interface SummaryPlayerSignature {\n Element: HTMLDivElement;\n Args: {\n events: Playlist['events'] | Promise;\n showBackButton?: boolean;\n autoPlay?: boolean;\n goBackOneDay?: () => void;\n closeButtonAction?: () => void;\n };\n}\n\n/**\n * @classdesc\n * Plays a daily summary.\n */\n@intlPath({ path: 'activity/highlights/summary-player' })\nexport default class SummaryPlayer extends Component {\n @service declare intl: ServiceRegistry['intl'];\n @service declare cookieManager: ServiceRegistry['cookie-manager'];\n\n /**\n * The current speed to playback highlights events\n */\n @tracked playbackSpeed: number;\n\n /**\n * The currently displayed event.\n */\n @tracked currentEvent?: EventState;\n\n lottiePromise?: ReturnType;\n\n constructor(owner: unknown, args: SummaryPlayerSignature['Args']) {\n super(owner, args);\n\n this.playbackSpeed = Number(this.cookieManager.getEssentialCookie(cookieName)) || 1;\n\n // Is bodymovin script NOT loaded yet?\n if (!isPresent(window.bodymovin)) {\n // Load script and cache promise.\n this.lottiePromise = loadScript(\n 'https://cdnjs.cloudflare.com/ajax/libs/bodymovin/4.13.0/bodymovin_light.min.js'\n );\n }\n }\n // region Computed Properties\n\n @computed('args.events')\n get eventsState(): Promise {\n return (async () => {\n const events = await this.args.events;\n return events.map((event, index) => new EventState(event, index));\n })();\n }\n\n /**\n * The playback speed dropdown options\n */\n @computed('playbackSpeed')\n get speedOptions(): DropdownSelectItem[] {\n return [1, 1.5, 2].map((value) =>\n DropdownSelectItem.create({\n name: this.intl.t('generic.speed', { value }),\n value: String(value)\n })\n );\n }\n\n /**\n * The event state for just the video events.\n */\n get videoEvents(): Promise {\n return (async () => {\n const events = await this.eventsState;\n return events.filter((event) => event.hasVideo);\n })();\n }\n\n /**\n * Is the player playing an event?\n */\n @bool('currentEvent.active')\n declare isPlaying: boolean;\n\n // endregion\n\n // region Tasks\n\n /**\n * Asynchronously creates all event state and initiates first event play (if autoPlay true).\n */\n initPlayerTask = task({ restartable: true }, async () => {\n await this.lottiePromise;\n const [currentEvent] = await this.eventsState;\n this.currentEvent = currentEvent;\n\n // Should we auto play?\n if (this.args.autoPlay) {\n // Initiate play after rendering is complete.\n // Do not copy this deprecated usage. If you see this, please convert to ember-lifeline scheduleTask.\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', () => (currentEvent.active = true));\n }\n });\n\n // endregion\n\n // region Actions\n\n /**\n * Toggles playback of the current event.\n */\n @action togglePlay(isPlaying: boolean): void {\n const { currentEvent } = this;\n if (currentEvent) {\n // Update current event active state.\n set(currentEvent, 'active', isPlaying);\n }\n }\n\n /**\n * Skips to a particular event in the playlist.\n */\n @action async skipToEvent(eventState: EventState): Promise {\n // Stop playing while we navigate.\n this.togglePlay(false);\n\n const eventsState = await this.eventsState;\n\n // Update state for each event.\n const clickedIndex = eventsState.indexOf(eventState);\n eventsState.forEach((event, idx) => event.updateState(idx < clickedIndex));\n\n // Update current event.\n this.currentEvent = eventState;\n\n // Play new event.\n this.togglePlay(true);\n }\n\n /**\n * Advances to the next highlight, or stops if none.\n */\n @action async advanceToNextEvent(): Promise {\n // Is this component destroyed?\n // TODO: This ignore is an existing deprecation that must be refactored, do not copy this usage\n // eslint-disable-next-line @adc/ember/no-is-destroyed\n if (isDestroyed(this)) {\n // Nothing to do.\n return;\n }\n\n const eventsState = await this.eventsState,\n nextEvent = eventsState[eventsState.indexOf(this.currentEvent!) + 1];\n\n // Update current event state.\n this.currentEvent = nextEvent || eventsState[0];\n\n // Is there a next event?\n if (nextEvent) {\n // Play next event.\n nextEvent.active = true;\n } else {\n // Reset all event state to beginning.\n eventsState.forEach((event) => event.updateState(false));\n }\n }\n\n /**\n * Updates highlights playback speed.\n */\n @action updatePlaybackSpeed(speed: string): void {\n this.playbackSpeed = Number(speed);\n\n this.cookieManager.setEssentialCookie(cookieName, String(this.playbackSpeed));\n }\n\n /**\n * Called when a keyup event happens on an item.\n */\n @action onKeyUp(eventState: EventState, event: KeyboardEvent): void {\n if (isEnterOrSpaceCode(event.code)) {\n this.skipToEvent(eventState);\n }\n }\n\n // endregion\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Activity::Highlights::SummaryPlayer': typeof SummaryPlayer;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{yield}}\\n\\n\",{ moduleName: \"customer-site/components/ui/images/ov-image/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\n// Do not copy this deprecated usage. If you see this, please fix it\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\n/**\n * @classdesc\n * An image for an OV Ready camera that supports zooming on point of interest.\n */\n@intlPath({ path: 'ui.images.ov-image' })\nexport default class OvImage extends Component {\n @service intl;\n\n tagName = '';\n\n /**\n * Number from 0-1 that indicates where analytics classification targets, if any, start on the x-axis.\n * It's a percentage of the total height.\n *\n * @type {number}\n */\n targetStartX = 0;\n\n /**\n * Number from 0-1 that indicates where analytics classification targets, if any, start on the y-axis.\n * It's a percentage of the total height.\n *\n * @type {number}\n */\n targetStartY = 0;\n\n /**\n * Number from 0-1 that indicates percentage of width that contains all analytics classification targets, if any exist.\n *\n * @type {number}\n */\n targetWidth = 1;\n\n /**\n * Number from 0-1 that indicates percentage of height that contains all analytics classification targets, if any exist.\n *\n * @type {number}\n */\n targetHeight = 1;\n\n /**\n * The description of the clip.\n *\n * @type {string}\n */\n description = '';\n\n /**\n * Generates the alt text for the clip.\n *\n * @type {String}\n */\n @computed('description')\n get clipAltText() {\n return this.description\n ? this.intl.tc(this, 'clipAltText', { description: this.description })\n : this.intl.tc(this, 'defaultAltText');\n }\n\n /**\n * Generates a CSS text string for advanced analytics clips with saved target boxes.\n * Image will zoom in and center in on all captured targets as close as possible without going over edge of image.\n *\n * @type {String}\n */\n @computed('targetStartX', 'targetStartY', 'targetWidth', 'targetHeight')\n get clipCropStyle() {\n // targetStartX and targetStartY are top left corner of target (i.e. (0,0) is top left).\n const { targetStartX = 0, targetStartY = 0, targetWidth = 1, targetHeight = 1 } = this;\n\n // If image has default values, it likely has no captured target. Don't zoom in.\n if (targetStartX === 0 && targetStartY === 0 && targetWidth === 1 && targetHeight === 1) {\n return '';\n }\n\n // Function used to confirm translation values do not go past max translation values.\n const fnEnforceMaxTranslation = (currentTranslation, maxTranslation) => {\n if (currentTranslation > maxTranslation) {\n return maxTranslation;\n }\n\n if (currentTranslation < -maxTranslation) {\n return -maxTranslation;\n }\n\n return currentTranslation;\n };\n\n // Set constant numbers used in calculations below.\n const oneHundredPercent = 100,\n // half here used as a multiplier instead of a whole integer.\n half = 0.5,\n // Center of the target in terms of placement on image.\n centerX = targetStartX + half * targetWidth,\n centerY = targetStartY + half * targetHeight,\n // Is the target center on the right side of the image?\n targetOnRight = centerX > half,\n longestSideLength = Math.max(targetHeight, targetWidth),\n // cropPadding adds extra space around target bounding box so whole box can be visible.\n cropPadding = 0.1,\n maxZoom = 3,\n // leftRightAdjust is an adjustment variable to help display translated thumbnails correctly.\n leftRightAdjust = 9;\n\n // Calculate zoom-in factor so target covers as much thumbnail space as possible without overflow.\n const calculatedScale = 1 / Math.min(longestSideLength + cropPadding, 1),\n zoomScale = Math.min(calculatedScale, maxZoom);\n\n // How much should thumbnail be translated left/right, up/down to center target within thumbnail.\n const translateXAdjustmentBase = leftRightAdjust / 3,\n // translateXAdjustment helps to center target when leftRightStyle is added below.\n translateXAdjustment = targetOnRight ? -translateXAdjustmentBase : translateXAdjustmentBase,\n maxTranslateY = (oneHundredPercent - oneHundredPercent / zoomScale) / 2,\n maxTranslateX = maxTranslateY + leftRightAdjust / zoomScale - 1;\n\n let translateX = oneHundredPercent * (half - centerX) + translateXAdjustment,\n translateY = oneHundredPercent * (half - centerY);\n\n // Update translation values if they go past max value.\n translateX = fnEnforceMaxTranslation(translateX, maxTranslateX);\n translateY = fnEnforceMaxTranslation(translateY, maxTranslateY);\n\n return [\n // Video thumbnail is too long for customer site thumbnail, so adjust left or right depending on target side.\n `${targetOnRight ? 'right' : 'left'}: -${leftRightAdjust}%`,\n 'top: 0',\n `transform: scale(${zoomScale}) translate(${translateX}%, ${translateY}%)`\n ].join(';');\n }\n}\n"],"names":["createTemplateFactory","scope","buttonAsync_","tc_","activityHighlightsSummaryPlayer_","MaxHighlightDays","moveFocusToParent","parentEl","document","getElementsByClassName","setAttribute","focus","HighlightsCarousel","_dec","intlPath","path","_dec2","bool","_dec3","lte","_dec4","dropTask","_dec5","computed","_class2","Component","constructor","super","arguments","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","_defineProperty","this","getLastDay","perform","daysBack","timeZone","intl","priorDay","store","findRecord","format","utcToZonedTime","subDays","Date","set","playlistArray","concat","rejectBy","uniq","playlists","map","playlist","index","events","isVisible","currentHighlightsIndex","goBackOneDay","goForwardOneDay","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","tracked","Object","getOwnPropertyDescriptor","action","_class","setComponentTemplate","TEMPLATE","didInsert_","didUpdate_","LottiePlayer","alias","playComplete","args","willDestroy","player","destroy","updatePlayState","event","active","play","pause","initPlayer","container","window","bodymovin","loadAnimation","renderer","loop","autoplay","animationData","model","animationJson","setSpeed","playbackSpeed","hasVideo","addEventListener","_ref","currentTime","totalTime","progress","Math","round","updateSpeed","on","updateVideoTime","video","seconds","ex","changeVideoState","isPlaying","ClipContainer","startTime","endTime","initializeClipTimes","startTimestampSeconds","endTimestampSeconds","target","clipTimes","updatePlaybackRate","duration","updateClipProgress","evt","paused","max","min","seekPosition","once","_ref2","handlePlayError","playbackRate","downloadApp_","dropdownSelectSingleSelect_","t_","toString_","buttonIcon_","fn","not_","svgSymbol_","await_","eq_","activityHighlightsLottiePlayer_","activityHighlightsClipContainer_","uiHorizontalList_","cookieName","EventState","progressStyle","htmlSafe","updateState","isComplete","SummaryPlayer","_class3","owner","_descriptor6","_descriptor7","_descriptor8","_descriptor9","_descriptor10","_buildTask","context","generator","lottiePromise","currentEvent","eventsState","autoPlay","schedule","restartable","Number","cookieManager","getEssentialCookie","isPresent","loadScript","speedOptions","value","DropdownSelectItem","create","name","t","String","videoEvents","filter","togglePlay","skipToEvent","eventState","clickedIndex","indexOf","forEach","idx","advanceToNextEvent","isDestroyed","nextEvent","updatePlaybackSpeed","speed","setEssentialCookie","onKeyUp","isEnterOrSpaceCode","code","uiImagesStateImage_","OvImage","clipAltText","description","tc","clipCropStyle","targetStartX","targetStartY","targetWidth","targetHeight","fnEnforceMaxTranslation","currentTranslation","maxTranslation","oneHundredPercent","half","centerX","centerY","targetOnRight","longestSideLength","calculatedScale","zoomScale","maxTranslateY","translateX","leftRightAdjust","translateY","join"],"sourceRoot":""}