{"version":3,"file":"static/js/main.200b98a3.js","mappings":"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","sources":["app-consts.ts","webpack-public-path.js","utils/array.extensions.ts","polyfills.ts","index.tsx","load-jquery-for-automation.ts","launcher/utils/launcher-constants/launcher-constants.ts","orbit-startup-functions.ts","utils/automation-helpers.ts","utils/hybrid-utils.ts","utils/qa-mode-utils.ts","../node_modules/@sparkware/app-utils/src/index.ts","../node_modules/@sparkware/app-utils/src/utils/time_span/time-span.ts","../node_modules/@sparkware/app-utils/src/utils/type-checking/type-checking.ts","../node_modules/intersection-observer/intersection-observer.js","../node_modules/smoothscroll-polyfill/dist/smoothscroll.js","../node_modules/url-search-params-polyfill/index.js"],"sourcesContent":["export const ALL_CONFIGS_KEY = '$allConfigs';\nexport const LAUNCHER_DATA_STORAGE_KEY = 'cgp_client';","import {ALL_CONFIGS_KEY} from \"./app-consts\";\n\nconst allConfigs = window[ALL_CONFIGS_KEY];\nif (allConfigs) {\n let orbitServerPath = allConfigs.sdk.config.ExtraProperties.paths.server;\n if(!orbitServerPath.endsWith('/')) {\n orbitServerPath = orbitServerPath + '/';\n }\n /* eslint-disable-next-line no-undef */\n __webpack_public_path__ = orbitServerPath;\n}\n\n","import {DictionaryKey} from \"../common/types/dictionary-key-type\";\nimport {NullableUndefinedString} from \"../common/types/nullable-types\";\n\n\nif (!Array.prototype.toDictionary) {\n Object.defineProperties(Array.prototype, {\n toDictionary: {\n enumerable: false,\n get: () => {\n return function(keySelector: (item: TItem, index: number) => TKey,\n valueSelector?: (item: TItem, index: number) => TValue | TItem ): Record {\n const result: Record = {};\n\n if(!valueSelector) {\n valueSelector = (item) => item;\n }\n\n this.forEach((item, index) => {\n let key: any = keySelector(item, index);\n result[key] = valueSelector(item, index);\n })\n return result;\n }\n }\n }\n });\n}\n\n\nif(!Array.prototype.groupByKey) {\n Object.defineProperties(Array.prototype, {\n groupByKey: {\n enumerable: false,\n get: () => {\n return function(keySelector: (item: TItem, index: number) => TKey,\n valueSelector?: (item: TItem, index: number) => TValue | TItem ): Record> {\n\n const result: Record> = {};\n\n if(!valueSelector) {\n valueSelector = (item => item);\n }\n\n this.forEach((item, index) => {\n const key: any = keySelector(item, index);\n if(!result[key]) {\n result[key] = [];\n }\n result[key].push(valueSelector(item, index));\n });\n return result;\n }\n }\n }\n });\n}\n\nif(!Array.prototype.distinct) {\n Object.defineProperties(Array.prototype, {\n distinct: {\n enumerable: false,\n get: () => {\n return function(keySelector?: (item: TItem, index: number) => TKey | TItem,\n valueSelector?: (item: TItem, index: number) => TResult | TItem): Array {\n if(this.length === 0) {\n return [];\n }\n\n if(!keySelector) {\n keySelector = item => item;\n }\n\n if(!valueSelector) {\n valueSelector = item => item;\n }\n\n const uniqueItems: Record = {};\n\n this.forEach((item, index) => {\n const key: any = keySelector(item, index);\n uniqueItems[key] = valueSelector(item, index);\n })\n\n return Object.values(uniqueItems);\n }\n }\n }\n });\n}\n\nif(!Array.prototype.all) {\n Object.defineProperties(Array.prototype, {\n all: {\n enumerable: false,\n get: () => {\n return function(predicate: (item: T) => boolean): boolean {\n if(this.length === 0) {\n return false;\n }\n\n for(let item of this) {\n if(!predicate(item)) {\n return false;\n }\n }\n return true;\n }\n }\n }\n });\n}\n\nif(!Array.prototype.splitToChunks) {\n Object.defineProperties(Array.prototype, {\n splitToChunks: {\n enumerable: false,\n get: () => {\n return function(chunkSize: number): Array {\n if(this.length === 0) {\n return [];\n }\n\n let result: Array = [];\n for(let i = 0; i * chunkSize < this.length; i++) {\n result.push(this.slice(i * chunkSize, i * chunkSize + chunkSize));\n }\n\n return result;\n }\n }\n }\n });\n}\n\nif(!Array.prototype.selectMany) {\n Object.defineProperties(Array.prototype, {\n selectMany: {\n enumerable: false,\n get: () => {\n return function(subItemsSelector: (item: TItem, index: number) => TValue[]): TValue[] {\n\n const result: TValue[] = [];\n this.forEach((item, index) => {\n for(let value of subItemsSelector(item, index)) {\n result.push(value);\n }\n });\n return result;\n }\n }\n }\n });\n}\n\nif (!Array.prototype.findFirst) {\n Object.defineProperties(Array.prototype, {\n findFirst: {\n enumerable: false,\n get: () => {\n return function(filter: (item: T) => boolean): T | undefined {\n return this.filter(filter)[0];\n }\n }\n }\n });\n}\n\nif (!Array.prototype.max) {\n Object.defineProperties(Array.prototype, {\n max: {\n enumerable: false,\n get: () => {\n return function(valueSelector: (item: T) => number): T | undefined {\n if(this.length === 0) {\n return undefined;\n }\n\n let max = this[0];\n\n for(let i = 1; i < this.length; i++) {\n if(valueSelector(max) < valueSelector(this[i])) {\n max = this[i];\n }\n }\n\n return max;\n }\n }\n }\n });\n}\n\nif (!Array.prototype.min) {\n Object.defineProperties(Array.prototype, {\n min: {\n enumerable: false,\n get: () => {\n return function(valueSelector: (item: T) => number): T | undefined {\n if(this.length === 0) {\n return undefined;\n }\n\n let min = this[0];\n\n for(let i = 1; i < this.length; i++) {\n if(valueSelector(min) > valueSelector(this[i])) {\n min = this[i];\n }\n }\n\n return min;\n }\n }\n }\n });\n}\n\nif(!Array.prototype.sum) {\n Object.defineProperties(Array.prototype, {\n sum: {\n enumerable: false,\n get: () => {\n return function(valueSelector: (item: T) => number): number {\n if(this.length === 0) {\n return 0;\n }\n let result = 0;\n this.forEach(item => {\n result += valueSelector(item);\n });\n\n return result;\n }\n }\n }\n });\n}\n\n\nexport {};\n","import 'intersection-observer';\nimport 'url-search-params-polyfill'; // Edge 41 and 42 don't have this\nimport './utils/array.extensions'\nimport smoothscroll from 'smoothscroll-polyfill'; // this is for making window.scrollTo work in Edge\nsmoothscroll.polyfill();","import './webpack-public-path';\nimport './polyfills';\nimport {isLauncherPath} from \"./launcher/utils/launcher-constants/launcher-constants\";\nimport {isOrbitInQAMode} from './utils/qa-mode-utils';\nimport {isHybridEmbedded} from \"./utils/hybrid-utils\";\nimport {loadJQueryForAutomation} from \"./load-jquery-for-automation\";\n\nasync function startLauncher(): Promise {\n const module = await import(/* webpackChunkName: \"launcher\"*/ './startup-launcher');\n module.startLauncher();\n}\n\nasync function startHybridApp(): Promise {\n if (isOrbitInQAMode()) {\n if (isLauncherPath(window.location.pathname)) {\n await startLauncher();\n } else {\n const module = await import(/* webpackChunkName: \"hybrid-qa\"*/ './startup-orbit-hybrid-qa');\n await module.startOrbitHybridQA()\n }\n } else {\n const module = await import(/* webpackChunkName: \"hybrid-prod\"*/ './startup-orbit-hybrid-prod');\n await module.startupOrbitHybridProd();\n }\n}\n\nasync function startWebApp(): Promise {\n if(isOrbitInQAMode()) {\n if(isLauncherPath(window.location.pathname)) {\n await startLauncher();\n } else {\n import(/* webpackChunkName: \"orbit-qa\"*/ './startup-orbit-qa').then(module => module.startOrbitQA());\n }\n } else {\n import(/* webpackChunkName: \"orbit-prod\"*/ './startup-orbit-prod').then(module => module.startOrbitProd());\n }\n}\n\nasync function startApp(): Promise {\n await loadJQueryForAutomation();\n if(isHybridEmbedded()) {\n await startHybridApp();\n } else {\n await startWebApp();\n }\n}\n\n\nstartApp();\n\n","import {isInsideAutomation} from \"./utils/automation-helpers\";\n\nexport function loadJQueryForAutomation(): Promise {\n if(!isInsideAutomation()) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n const scriptTag = document.createElement('script');\n scriptTag.src = \"https://code.jquery.com/jquery-3.7.1.min.js\";\n scriptTag.onload = () => {\n resolve();\n };\n scriptTag.onerror = (err: any) => {\n reject(err);\n };\n document.head.appendChild(scriptTag);\n })\n}","export const MAIN_LAUNCHER_PATH = \"/launch/888debug\";\n\nconst LAUNCHER_PATHS = [MAIN_LAUNCHER_PATH, \"/cip/launch/888debug\", \"/cis/launch/888debug\"];\n\nexport function isLauncherPath(path: string): boolean {\n\n if(!path) {\n return false;\n }\n\n path = path.toLowerCase();\n for(let i = 0; i < LAUNCHER_PATHS.length; i++) {\n if(path.startsWith(LAUNCHER_PATHS[i])) {\n return true;\n }\n }\n\n return false;\n}","interface IOrbitStartupFunctions {\n isCip(): boolean;\n isCis(): boolean;\n isProgressiveWebApp(): boolean;\n logToElastic(eventCategory: string, eventAction: string, eventLabel: string, eventValue: string): void;\n isHybridEmbedded(): boolean;\n getOrbitInitParams(): {\n sdkApiOrigin: string;\n orbitCDNOrigin: string;\n country: string;\n cmsSource: string;\n languageIso3: string;\n languageIso2: string;\n publicationId: number;\n queryParams: string;\n }\n}\n\n\nexport const OrbitStartupFunctions = window['orbitStartupFunctions'] as IOrbitStartupFunctions;\n","import {Check, TimeSpan} from '@sparkware/app-utils';\nimport {ApplicationStartupConfigurations} from '../app-react/app-bootstrap/config-interfaces/application-startup.configurations';\nimport {TimeIntervalName} from '../common/utils/time-interval-names';\n\nexport const CYPRESS_TO_ORBIT_HOOKS_OBJECT_NAME = 'CypressToOrbitHooks';\nexport const CYPRESS_GLOBAL_OBJECT_NAME = 'Cypress';\n\nexport function isInsideAutomation(): boolean {\n return !Check.isNullOrUndefined(window[CYPRESS_GLOBAL_OBJECT_NAME])\n && !Check.isNullOrUndefined(window[CYPRESS_GLOBAL_OBJECT_NAME][CYPRESS_TO_ORBIT_HOOKS_OBJECT_NAME])\n}\n\n\nexport function mockApplicationStartupConfigs(configs: ApplicationStartupConfigurations): ApplicationStartupConfigurations {\n if(isInsideAutomation()) {\n getCypressToOrbitHooks().onAppStartupConfigs(configs);\n }\n return configs;\n}\n\nexport function getCypressToOrbitHooks(): ICypressToOrbitHooks {\n if(!isInsideAutomation()) {\n throw new Error('You can only call getCypressToOrbitHooks inside automation');\n }\n return window[CYPRESS_GLOBAL_OBJECT_NAME][CYPRESS_TO_ORBIT_HOOKS_OBJECT_NAME] as ICypressToOrbitHooks;\n}\n\nexport interface OnTimeIntervalCreationResult {\n ignoreJavaScriptImplementation: boolean;\n timerId?: number;\n}\n\nexport enum NamedIntervalType {\n setInterval,\n setTimeout\n}\n\nexport interface ICypressToOrbitHooks {\n onAppStartupConfigs(configs: ApplicationStartupConfigurations);\n onTimeIntervalCreation(name: TimeIntervalName, callback: () => void, interval: TimeSpan, intervalType: NamedIntervalType): OnTimeIntervalCreationResult;\n}\n\n","import {OrbitStartupFunctions} from \"../orbit-startup-functions\";\n\nexport function isHybridEmbedded(): boolean {\n return OrbitStartupFunctions.isHybridEmbedded();\n}\n","import {isHybridEmbedded} from \"./hybrid-utils\";\n\nfunction isHybridEmbeddedQA(): boolean {\n if(!isHybridEmbedded()) {\n return false;\n }\n\n if(window['isQAEnvironment']) {\n return window['isQAEnvironment']();\n }\n\n return false;\n}\n\nexport function isOrbitInQAMode(): boolean {\n return Boolean(window['isOrbitWebAppInQAMode']) || isHybridEmbeddedQA();\n}","import {TimeSpan} from \"./utils/time_span/time-span\";\nimport {Check} from \"./utils/type-checking/type-checking\";\n\nexport {TimeSpan, Check};","import {Check} from \"../..\";\n\nconst MILLIS_PER_SECOND = 1000;\nconst MILLIS_PER_MINUTE = MILLIS_PER_SECOND * 60; // 60,000\nconst MILLIS_PER_HOUR = MILLIS_PER_MINUTE * 60; // 3,600,000\nconst MILLIS_PER_DAY = MILLIS_PER_HOUR * 24; // 86,400,000\n\n\nexport class TimeSpan {\n\n private _totalMilliseconds: number = 0;\n\n constructor(days: number, hours: number, minutes: number, seconds: number = 0, milliseconds: number = 0) {\n const totalmilliseconds = days * MILLIS_PER_DAY\n + hours * MILLIS_PER_HOUR\n + minutes * MILLIS_PER_MINUTE\n + seconds * MILLIS_PER_SECOND\n + Math.floor(milliseconds); // only milliseconds will be \"trimmed\"\n\n // try to avoid double number issue\n this._totalMilliseconds = Math.round(totalmilliseconds);\n }\n\n private _getSign() : number {\n if(this._totalMilliseconds < 0) {\n return -1;\n } else {\n return 1;\n }\n }\n\n private _floor(value: number): number {\n return this._getSign() * Math.floor(Math.abs(value));\n }\n\n get days(): number {\n return this._floor(this.totalDays);\n }\n\n get hours(): number {\n return this._floor(this.totalHours % 24);\n }\n\n get minutes(): number {\n return this._floor(this.totalMinutes % 60);\n }\n\n get seconds(): number {\n return this._floor(this.totalSeconds % 60);\n }\n\n get milliseconds(): number {\n return this._floor(this._totalMilliseconds % MILLIS_PER_SECOND);\n }\n\n get totalDays(): number {\n return this._totalMilliseconds / MILLIS_PER_DAY;\n }\n\n get totalHours(): number {\n return this._totalMilliseconds / MILLIS_PER_HOUR;\n }\n\n get totalMinutes(): number {\n return this._totalMilliseconds / MILLIS_PER_MINUTE;\n }\n\n get totalSeconds(): number {\n return this._totalMilliseconds / MILLIS_PER_SECOND;\n }\n\n get totalMilliseconds(): number {\n return this._totalMilliseconds;\n }\n\n static areEquals(ts1: TimeSpan, ts2: TimeSpan) {\n if(Check.isNullOrUndefined(ts1) && Check.isNullOrUndefined(ts2)){\n return true;\n }\n\n if(Check.isNullOrUndefined(ts1)) {\n return false;\n }\n\n if(Check.isNullOrUndefined(ts2)) {\n return false;\n }\n\n return ts1.totalMilliseconds === ts2.totalMilliseconds;\n }\n\n static parse(text: string | null | undefined) {\n if(!text) {\n throw new Error('Null, undefined or empty string not allowed for TimeSpan format');\n }\n\n const components = text.split(/:/);\n if(components.length < 2) {\n throw new Error('Invalid TimeSpan input format ' + text);\n }\n\n let days = 0;\n let hours = 0;\n let minutes = 0;\n let seconds = 0;\n let milliseconds = 0;\n\n const daysAndHours = components[0].split(/\\./);\n if(daysAndHours.length === 2) {\n days = parseInt(daysAndHours[0]);\n hours = parseInt(daysAndHours[1]);\n } else {\n hours = parseInt(daysAndHours[0]);\n }\n\n minutes = parseInt(components[1]);\n\n if(components.length === 3) { // it means we have seconds and/or milliseconds\n let secondsAndMilliseconds = components[2].split(/\\./);\n if(secondsAndMilliseconds.length === 2) { // it means we have seconds and milliseconds\n seconds = parseInt(secondsAndMilliseconds[0]);\n milliseconds = TimeSpan._parseMilliseconds(secondsAndMilliseconds[1]);\n } else { // it means we have seconds without milliseconds\n seconds = parseInt(secondsAndMilliseconds[0]);\n }\n }\n return new TimeSpan(days, hours, minutes, seconds, milliseconds);\n }\n\n static _parseMilliseconds(ms: string): number {\n let milliseconds = parseInt(ms);\n\n if(milliseconds <= 999) {\n return milliseconds;\n }\n\n while(milliseconds > 999) {\n milliseconds = milliseconds / 10;\n }\n\n return Math.round(milliseconds);\n }\n\n static fromMilliseconds(totalMilliseconds: number): TimeSpan {\n return new TimeSpan(0, 0, 0, 0, totalMilliseconds);\n }\n\n static fromSeconds(totalSeconds: number): TimeSpan {\n return new TimeSpan(0, 0, 0, totalSeconds, 0);\n }\n\n static fromMinutes(totalMinutes: number): TimeSpan {\n return new TimeSpan(0, 0, totalMinutes, 0, 0);\n }\n\n static fromHours(totalHours: number): TimeSpan {\n return new TimeSpan(0, totalHours, 0, 0, 0);\n }\n\n static fromDays(days: number): TimeSpan {\n return new TimeSpan(days, 0, 0, 0, 0);\n }\n\n subtract(timeSpan: TimeSpan): TimeSpan {\n if(!timeSpan) {\n throw new Error('timeSpan argument cannot be null or undefined');\n }\n\n const milliseconds = this.totalMilliseconds - timeSpan.totalMilliseconds;\n return TimeSpan.fromMilliseconds(milliseconds);\n }\n\n add(timeSpan: TimeSpan): TimeSpan {\n if(!timeSpan) {\n throw new Error('timeSpan argument cannot be null or undefined');\n }\n\n let totalMilliseconds = this.totalMilliseconds + timeSpan.totalMilliseconds;\n return TimeSpan.fromMilliseconds(totalMilliseconds);\n }\n\n public toString(options: {useTotalHours?: boolean} = {}): string {\n\n // special negative case (we treat it like '-'+normal positive toString() result)\n if (this._totalMilliseconds < 0)\n return '-' + TimeSpan.fromMilliseconds(-this._totalMilliseconds).toString({useTotalHours: options.useTotalHours});\n\n let result = '';\n if (!options.useTotalHours) {\n if(this.days > 0) {\n result += this.days.toString() + '.';\n }\n result += this.hours.toString().padStart(2, '0') + ':';\n } else {\n result += this._floor(this.totalHours).toString().padStart(2, '0') + ':';\n }\n \n result += this.minutes.toString().padStart(2, '0') + ':';\n result += this.seconds.toString().padStart(2, '0');\n\n if(this.milliseconds > 0) {\n result += '.' + this.milliseconds.toString().padStart(3, '0');\n }\n\n return result;\n }\n\n public toHoursAndMinutesString(): string {\n return this.hours.toString().padStart(2, '0') + ':' + this.minutes.toString().padStart(2, '0');\n }\n\n public toHoursMinutesAndSecondsString(): string {\n return this.hours.toString().padStart(2, '0') + ':' + this.minutes.toString().padStart(2, '0') + ':' + this.seconds.toString().padStart(2, '0');\n }\n\n public toLocalTime(): TimeSpan {\n let localTime = new Date();\n localTime.setUTCHours(this.hours);\n localTime.setUTCMinutes(this.minutes);\n localTime.setUTCSeconds(this.seconds);\n localTime.setUTCMilliseconds(this.milliseconds);\n\n return new TimeSpan(0, localTime.getHours(), localTime.getMinutes(), localTime.getSeconds(), localTime.getMilliseconds());\n }\n}\n","export class Check {\n\n static isFunction(input: unknown) : boolean {\n return '[object Function]' === Object.prototype.toString.call(input);\n }\n\n static isString(input: unknown) : input is string {\n return '[object String]' === Object.prototype.toString.call(input);\n }\n\n static isNumber(input: unknown): input is number {\n return '[object Number]' === Object.prototype.toString.call(input) && !isNaN(input as number);\n }\n\n static isObject(input: unknown): input is object {\n return '[object Object]' === Object.prototype.toString.call(input);\n }\n\n static isDate(input: unknown): input is Date {\n return '[object Date]' === Object.prototype.toString.call(input) && (input as Date).toString() !== \"Invalid Date\";\n }\n\n static isArray(expectedArray: unknown): expectedArray is Array {\n return Array.isArray(expectedArray);\n }\n\n static isArrayOfStrings(expectedArray: unknown): expectedArray is string[] {\n if(!Array.isArray(expectedArray)) {\n return false;\n }\n\n for(let i = 0; i < expectedArray.length; i++) {\n if(!Check.isString(expectedArray[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n static isBoolean(input: unknown): input is boolean {\n return true === input || false === input || '[object Boolean]' === Object.prototype.toString.call(input);\n }\n\n\n static isError(input: unknown) : input is Error {\n return '[object Error]' === Object.prototype.toString.call(input);\n }\n\n static isSymbol(input: unknown): input is Symbol {\n return '[object Symbol]' === Object.prototype.toString.call(input);\n }\n\n static isUndefined(input: unknown): input is undefined {\n return '[object Undefined]' === Object.prototype.toString.call(input);\n }\n\n static isNull(value: unknown): value is null {\n return value === null;\n }\n\n static isNullOrUndefined(input: unknown): input is null | undefined {\n return this.isNull(input) || this.isUndefined(input);\n }\n\n static isEmpty(input: unknown): boolean {\n\n if(Check.isNullOrUndefined(input)) {\n return true;\n }\n\n if(Check.isString(input) || Check.isArray(input)) {\n return input.length === 0;\n }\n\n return Check.isObject(input) && Object.keys(input).length === 0;\n }\n\n}\n\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n */\n(function() {\n'use strict';\n\n// Exit early if we're not running in a browser.\nif (typeof window !== 'object') {\n return;\n}\n\n// Exit early if all IntersectionObserver and IntersectionObserverEntry\n// features are natively supported.\nif ('IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n\n // Minimal polyfill for Edge 15's lack of `isIntersecting`\n // See: https://github.com/w3c/IntersectionObserver/issues/211\n if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n Object.defineProperty(window.IntersectionObserverEntry.prototype,\n 'isIntersecting', {\n get: function () {\n return this.intersectionRatio > 0;\n }\n });\n }\n return;\n}\n\n/**\n * Returns the embedding frame element, if any.\n * @param {!Document} doc\n * @return {!Element}\n */\nfunction getFrameElement(doc) {\n try {\n return doc.defaultView && doc.defaultView.frameElement || null;\n } catch (e) {\n // Ignore the error.\n return null;\n }\n}\n\n/**\n * A local reference to the root document.\n */\nvar document = (function(startDoc) {\n var doc = startDoc;\n var frame = getFrameElement(doc);\n while (frame) {\n doc = frame.ownerDocument;\n frame = getFrameElement(doc);\n }\n return doc;\n})(window.document);\n\n/**\n * An IntersectionObserver registry. This registry exists to hold a strong\n * reference to IntersectionObserver instances currently observing a target\n * element. Without this registry, instances without another reference may be\n * garbage collected.\n */\nvar registry = [];\n\n/**\n * The signal updater for cross-origin intersection. When not null, it means\n * that the polyfill is configured to work in a cross-origin mode.\n * @type {function(DOMRect|ClientRect, DOMRect|ClientRect)}\n */\nvar crossOriginUpdater = null;\n\n/**\n * The current cross-origin intersection. Only used in the cross-origin mode.\n * @type {DOMRect|ClientRect}\n */\nvar crossOriginRect = null;\n\n\n/**\n * Creates the global IntersectionObserverEntry constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @param {Object} entry A dictionary of instance properties.\n * @constructor\n */\nfunction IntersectionObserverEntry(entry) {\n this.time = entry.time;\n this.target = entry.target;\n this.rootBounds = ensureDOMRect(entry.rootBounds);\n this.boundingClientRect = ensureDOMRect(entry.boundingClientRect);\n this.intersectionRect = ensureDOMRect(entry.intersectionRect || getEmptyRect());\n this.isIntersecting = !!entry.intersectionRect;\n\n // Calculates the intersection ratio.\n var targetRect = this.boundingClientRect;\n var targetArea = targetRect.width * targetRect.height;\n var intersectionRect = this.intersectionRect;\n var intersectionArea = intersectionRect.width * intersectionRect.height;\n\n // Sets intersection ratio.\n if (targetArea) {\n // Round the intersection ratio to avoid floating point math issues:\n // https://github.com/w3c/IntersectionObserver/issues/324\n this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4));\n } else {\n // If area is zero and is intersecting, sets to 1, otherwise to 0\n this.intersectionRatio = this.isIntersecting ? 1 : 0;\n }\n}\n\n\n/**\n * Creates the global IntersectionObserver constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {Function} callback The function to be invoked after intersection\n * changes have queued. The function is not invoked if the queue has\n * been emptied by calling the `takeRecords` method.\n * @param {Object=} opt_options Optional configuration options.\n * @constructor\n */\nfunction IntersectionObserver(callback, opt_options) {\n\n var options = opt_options || {};\n\n if (typeof callback != 'function') {\n throw new Error('callback must be a function');\n }\n\n if (\n options.root &&\n options.root.nodeType != 1 &&\n options.root.nodeType != 9\n ) {\n throw new Error('root must be a Document or Element');\n }\n\n // Binds and throttles `this._checkForIntersections`.\n this._checkForIntersections = throttle(\n this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);\n\n // Private properties.\n this._callback = callback;\n this._observationTargets = [];\n this._queuedEntries = [];\n this._rootMarginValues = this._parseRootMargin(options.rootMargin);\n\n // Public properties.\n this.thresholds = this._initThresholds(options.threshold);\n this.root = options.root || null;\n this.rootMargin = this._rootMarginValues.map(function(margin) {\n return margin.value + margin.unit;\n }).join(' ');\n\n /** @private @const {!Array} */\n this._monitoringDocuments = [];\n /** @private @const {!Array} */\n this._monitoringUnsubscribes = [];\n}\n\n\n/**\n * The minimum interval within which the document will be checked for\n * intersection changes.\n */\nIntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\n\n\n/**\n * The frequency in which the polyfill polls for intersection changes.\n * this can be updated on a per instance basis and must be set prior to\n * calling `observe` on the first target.\n */\nIntersectionObserver.prototype.POLL_INTERVAL = null;\n\n/**\n * Use a mutation observer on the root element\n * to detect intersection changes.\n */\nIntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\n\n\n/**\n * Sets up the polyfill in the cross-origin mode. The result is the\n * updater function that accepts two arguments: `boundingClientRect` and\n * `intersectionRect` - just as these fields would be available to the\n * parent via `IntersectionObserverEntry`. This function should be called\n * each time the iframe receives intersection information from the parent\n * window, e.g. via messaging.\n * @return {function(DOMRect|ClientRect, DOMRect|ClientRect)}\n */\nIntersectionObserver._setupCrossOriginUpdater = function() {\n if (!crossOriginUpdater) {\n /**\n * @param {DOMRect|ClientRect} boundingClientRect\n * @param {DOMRect|ClientRect} intersectionRect\n */\n crossOriginUpdater = function(boundingClientRect, intersectionRect) {\n if (!boundingClientRect || !intersectionRect) {\n crossOriginRect = getEmptyRect();\n } else {\n crossOriginRect = convertFromParentRect(boundingClientRect, intersectionRect);\n }\n registry.forEach(function(observer) {\n observer._checkForIntersections();\n });\n };\n }\n return crossOriginUpdater;\n};\n\n\n/**\n * Resets the cross-origin mode.\n */\nIntersectionObserver._resetCrossOriginUpdater = function() {\n crossOriginUpdater = null;\n crossOriginRect = null;\n};\n\n\n/**\n * Starts observing a target element for intersection changes based on\n * the thresholds values.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.observe = function(target) {\n var isTargetAlreadyObserved = this._observationTargets.some(function(item) {\n return item.element == target;\n });\n\n if (isTargetAlreadyObserved) {\n return;\n }\n\n if (!(target && target.nodeType == 1)) {\n throw new Error('target must be an Element');\n }\n\n this._registerInstance();\n this._observationTargets.push({element: target, entry: null});\n this._monitorIntersections(target.ownerDocument);\n this._checkForIntersections();\n};\n\n\n/**\n * Stops observing a target element for intersection changes.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.unobserve = function(target) {\n this._observationTargets =\n this._observationTargets.filter(function(item) {\n return item.element != target;\n });\n this._unmonitorIntersections(target.ownerDocument);\n if (this._observationTargets.length == 0) {\n this._unregisterInstance();\n }\n};\n\n\n/**\n * Stops observing all target elements for intersection changes.\n */\nIntersectionObserver.prototype.disconnect = function() {\n this._observationTargets = [];\n this._unmonitorAllIntersections();\n this._unregisterInstance();\n};\n\n\n/**\n * Returns any queue entries that have not yet been reported to the\n * callback and clears the queue. This can be used in conjunction with the\n * callback to obtain the absolute most up-to-date intersection information.\n * @return {Array} The currently queued entries.\n */\nIntersectionObserver.prototype.takeRecords = function() {\n var records = this._queuedEntries.slice();\n this._queuedEntries = [];\n return records;\n};\n\n\n/**\n * Accepts the threshold value from the user configuration object and\n * returns a sorted array of unique threshold values. If a value is not\n * between 0 and 1 and error is thrown.\n * @private\n * @param {Array|number=} opt_threshold An optional threshold value or\n * a list of threshold values, defaulting to [0].\n * @return {Array} A sorted list of unique and valid threshold values.\n */\nIntersectionObserver.prototype._initThresholds = function(opt_threshold) {\n var threshold = opt_threshold || [0];\n if (!Array.isArray(threshold)) threshold = [threshold];\n\n return threshold.sort().filter(function(t, i, a) {\n if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {\n throw new Error('threshold must be a number between 0 and 1 inclusively');\n }\n return t !== a[i - 1];\n });\n};\n\n\n/**\n * Accepts the rootMargin value from the user configuration object\n * and returns an array of the four margin values as an object containing\n * the value and unit properties. If any of the values are not properly\n * formatted or use a unit other than px or %, and error is thrown.\n * @private\n * @param {string=} opt_rootMargin An optional rootMargin value,\n * defaulting to '0px'.\n * @return {Array} An array of margin objects with the keys\n * value and unit.\n */\nIntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {\n var marginString = opt_rootMargin || '0px';\n var margins = marginString.split(/\\s+/).map(function(margin) {\n var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\n if (!parts) {\n throw new Error('rootMargin must be specified in pixels or percent');\n }\n return {value: parseFloat(parts[1]), unit: parts[2]};\n });\n\n // Handles shorthand.\n margins[1] = margins[1] || margins[0];\n margins[2] = margins[2] || margins[0];\n margins[3] = margins[3] || margins[1];\n\n return margins;\n};\n\n\n/**\n * Starts polling for intersection changes if the polling is not already\n * happening, and if the page's visibility state is visible.\n * @param {!Document} doc\n * @private\n */\nIntersectionObserver.prototype._monitorIntersections = function(doc) {\n var win = doc.defaultView;\n if (!win) {\n // Already destroyed.\n return;\n }\n if (this._monitoringDocuments.indexOf(doc) != -1) {\n // Already monitoring.\n return;\n }\n\n // Private state for monitoring.\n var callback = this._checkForIntersections;\n var monitoringInterval = null;\n var domObserver = null;\n\n // If a poll interval is set, use polling instead of listening to\n // resize and scroll events or DOM mutations.\n if (this.POLL_INTERVAL) {\n monitoringInterval = win.setInterval(callback, this.POLL_INTERVAL);\n } else {\n addEvent(win, 'resize', callback, true);\n addEvent(doc, 'scroll', callback, true);\n if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in win) {\n domObserver = new win.MutationObserver(callback);\n domObserver.observe(doc, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n }\n }\n\n this._monitoringDocuments.push(doc);\n this._monitoringUnsubscribes.push(function() {\n // Get the window object again. When a friendly iframe is destroyed, it\n // will be null.\n var win = doc.defaultView;\n\n if (win) {\n if (monitoringInterval) {\n win.clearInterval(monitoringInterval);\n }\n removeEvent(win, 'resize', callback, true);\n }\n\n removeEvent(doc, 'scroll', callback, true);\n if (domObserver) {\n domObserver.disconnect();\n }\n });\n\n // Also monitor the parent.\n var rootDoc =\n (this.root && (this.root.ownerDocument || this.root)) || document;\n if (doc != rootDoc) {\n var frame = getFrameElement(doc);\n if (frame) {\n this._monitorIntersections(frame.ownerDocument);\n }\n }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @param {!Document} doc\n * @private\n */\nIntersectionObserver.prototype._unmonitorIntersections = function(doc) {\n var index = this._monitoringDocuments.indexOf(doc);\n if (index == -1) {\n return;\n }\n\n var rootDoc =\n (this.root && (this.root.ownerDocument || this.root)) || document;\n\n // Check if any dependent targets are still remaining.\n var hasDependentTargets =\n this._observationTargets.some(function(item) {\n var itemDoc = item.element.ownerDocument;\n // Target is in this context.\n if (itemDoc == doc) {\n return true;\n }\n // Target is nested in this context.\n while (itemDoc && itemDoc != rootDoc) {\n var frame = getFrameElement(itemDoc);\n itemDoc = frame && frame.ownerDocument;\n if (itemDoc == doc) {\n return true;\n }\n }\n return false;\n });\n if (hasDependentTargets) {\n return;\n }\n\n // Unsubscribe.\n var unsubscribe = this._monitoringUnsubscribes[index];\n this._monitoringDocuments.splice(index, 1);\n this._monitoringUnsubscribes.splice(index, 1);\n unsubscribe();\n\n // Also unmonitor the parent.\n if (doc != rootDoc) {\n var frame = getFrameElement(doc);\n if (frame) {\n this._unmonitorIntersections(frame.ownerDocument);\n }\n }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @param {!Document} doc\n * @private\n */\nIntersectionObserver.prototype._unmonitorAllIntersections = function() {\n var unsubscribes = this._monitoringUnsubscribes.slice(0);\n this._monitoringDocuments.length = 0;\n this._monitoringUnsubscribes.length = 0;\n for (var i = 0; i < unsubscribes.length; i++) {\n unsubscribes[i]();\n }\n};\n\n\n/**\n * Scans each observation target for intersection changes and adds them\n * to the internal entries queue. If new entries are found, it\n * schedules the callback to be invoked.\n * @private\n */\nIntersectionObserver.prototype._checkForIntersections = function() {\n if (!this.root && crossOriginUpdater && !crossOriginRect) {\n // Cross origin monitoring, but no initial data available yet.\n return;\n }\n\n var rootIsInDom = this._rootIsInDom();\n var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\n\n this._observationTargets.forEach(function(item) {\n var target = item.element;\n var targetRect = getBoundingClientRect(target);\n var rootContainsTarget = this._rootContainsTarget(target);\n var oldEntry = item.entry;\n var intersectionRect = rootIsInDom && rootContainsTarget &&\n this._computeTargetAndRootIntersection(target, targetRect, rootRect);\n\n var rootBounds = null;\n if (!this._rootContainsTarget(target)) {\n rootBounds = getEmptyRect();\n } else if (!crossOriginUpdater || this.root) {\n rootBounds = rootRect;\n }\n\n var newEntry = item.entry = new IntersectionObserverEntry({\n time: now(),\n target: target,\n boundingClientRect: targetRect,\n rootBounds: rootBounds,\n intersectionRect: intersectionRect\n });\n\n if (!oldEntry) {\n this._queuedEntries.push(newEntry);\n } else if (rootIsInDom && rootContainsTarget) {\n // If the new entry intersection ratio has crossed any of the\n // thresholds, add a new entry.\n if (this._hasCrossedThreshold(oldEntry, newEntry)) {\n this._queuedEntries.push(newEntry);\n }\n } else {\n // If the root is not in the DOM or target is not contained within\n // root but the previous entry for this target had an intersection,\n // add a new record indicating removal.\n if (oldEntry && oldEntry.isIntersecting) {\n this._queuedEntries.push(newEntry);\n }\n }\n }, this);\n\n if (this._queuedEntries.length) {\n this._callback(this.takeRecords(), this);\n }\n};\n\n\n/**\n * Accepts a target and root rect computes the intersection between then\n * following the algorithm in the spec.\n * TODO(philipwalton): at this time clip-path is not considered.\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\n * @param {Element} target The target DOM element\n * @param {Object} targetRect The bounding rect of the target.\n * @param {Object} rootRect The bounding rect of the root after being\n * expanded by the rootMargin value.\n * @return {?Object} The final intersection rect object or undefined if no\n * intersection is found.\n * @private\n */\nIntersectionObserver.prototype._computeTargetAndRootIntersection =\n function(target, targetRect, rootRect) {\n // If the element isn't displayed, an intersection can't happen.\n if (window.getComputedStyle(target).display == 'none') return;\n\n var intersectionRect = targetRect;\n var parent = getParentNode(target);\n var atRoot = false;\n\n while (!atRoot && parent) {\n var parentRect = null;\n var parentComputedStyle = parent.nodeType == 1 ?\n window.getComputedStyle(parent) : {};\n\n // If the parent isn't displayed, an intersection can't happen.\n if (parentComputedStyle.display == 'none') return null;\n\n if (parent == this.root || parent.nodeType == /* DOCUMENT */ 9) {\n atRoot = true;\n if (parent == this.root || parent == document) {\n if (crossOriginUpdater && !this.root) {\n if (!crossOriginRect ||\n crossOriginRect.width == 0 && crossOriginRect.height == 0) {\n // A 0-size cross-origin intersection means no-intersection.\n parent = null;\n parentRect = null;\n intersectionRect = null;\n } else {\n parentRect = crossOriginRect;\n }\n } else {\n parentRect = rootRect;\n }\n } else {\n // Check if there's a frame that can be navigated to.\n var frame = getParentNode(parent);\n var frameRect = frame && getBoundingClientRect(frame);\n var frameIntersect =\n frame &&\n this._computeTargetAndRootIntersection(frame, frameRect, rootRect);\n if (frameRect && frameIntersect) {\n parent = frame;\n parentRect = convertFromParentRect(frameRect, frameIntersect);\n } else {\n parent = null;\n intersectionRect = null;\n }\n }\n } else {\n // If the element has a non-visible overflow, and it's not the \n // or element, update the intersection rect.\n // Note: and cannot be clipped to a rect that's not also\n // the document rect, so no need to compute a new intersection.\n var doc = parent.ownerDocument;\n if (parent != doc.body &&\n parent != doc.documentElement &&\n parentComputedStyle.overflow != 'visible') {\n parentRect = getBoundingClientRect(parent);\n }\n }\n\n // If either of the above conditionals set a new parentRect,\n // calculate new intersection data.\n if (parentRect) {\n intersectionRect = computeRectIntersection(parentRect, intersectionRect);\n }\n if (!intersectionRect) break;\n parent = parent && getParentNode(parent);\n }\n return intersectionRect;\n};\n\n\n/**\n * Returns the root rect after being expanded by the rootMargin value.\n * @return {ClientRect} The expanded root rect.\n * @private\n */\nIntersectionObserver.prototype._getRootRect = function() {\n var rootRect;\n if (this.root && !isDoc(this.root)) {\n rootRect = getBoundingClientRect(this.root);\n } else {\n // Use / instead of window since scroll bars affect size.\n var doc = isDoc(this.root) ? this.root : document;\n var html = doc.documentElement;\n var body = doc.body;\n rootRect = {\n top: 0,\n left: 0,\n right: html.clientWidth || body.clientWidth,\n width: html.clientWidth || body.clientWidth,\n bottom: html.clientHeight || body.clientHeight,\n height: html.clientHeight || body.clientHeight\n };\n }\n return this._expandRectByRootMargin(rootRect);\n};\n\n\n/**\n * Accepts a rect and expands it by the rootMargin value.\n * @param {DOMRect|ClientRect} rect The rect object to expand.\n * @return {ClientRect} The expanded rect.\n * @private\n */\nIntersectionObserver.prototype._expandRectByRootMargin = function(rect) {\n var margins = this._rootMarginValues.map(function(margin, i) {\n return margin.unit == 'px' ? margin.value :\n margin.value * (i % 2 ? rect.width : rect.height) / 100;\n });\n var newRect = {\n top: rect.top - margins[0],\n right: rect.right + margins[1],\n bottom: rect.bottom + margins[2],\n left: rect.left - margins[3]\n };\n newRect.width = newRect.right - newRect.left;\n newRect.height = newRect.bottom - newRect.top;\n\n return newRect;\n};\n\n\n/**\n * Accepts an old and new entry and returns true if at least one of the\n * threshold values has been crossed.\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\n * particular target element or null if no previous entry exists.\n * @param {IntersectionObserverEntry} newEntry The current entry for a\n * particular target element.\n * @return {boolean} Returns true if a any threshold has been crossed.\n * @private\n */\nIntersectionObserver.prototype._hasCrossedThreshold =\n function(oldEntry, newEntry) {\n\n // To make comparing easier, an entry that has a ratio of 0\n // but does not actually intersect is given a value of -1\n var oldRatio = oldEntry && oldEntry.isIntersecting ?\n oldEntry.intersectionRatio || 0 : -1;\n var newRatio = newEntry.isIntersecting ?\n newEntry.intersectionRatio || 0 : -1;\n\n // Ignore unchanged ratios\n if (oldRatio === newRatio) return;\n\n for (var i = 0; i < this.thresholds.length; i++) {\n var threshold = this.thresholds[i];\n\n // Return true if an entry matches a threshold or if the new ratio\n // and the old ratio are on the opposite sides of a threshold.\n if (threshold == oldRatio || threshold == newRatio ||\n threshold < oldRatio !== threshold < newRatio) {\n return true;\n }\n }\n};\n\n\n/**\n * Returns whether or not the root element is an element and is in the DOM.\n * @return {boolean} True if the root element is an element and is in the DOM.\n * @private\n */\nIntersectionObserver.prototype._rootIsInDom = function() {\n return !this.root || containsDeep(document, this.root);\n};\n\n\n/**\n * Returns whether or not the target element is a child of root.\n * @param {Element} target The target element to check.\n * @return {boolean} True if the target element is a child of root.\n * @private\n */\nIntersectionObserver.prototype._rootContainsTarget = function(target) {\n var rootDoc =\n (this.root && (this.root.ownerDocument || this.root)) || document;\n return (\n containsDeep(rootDoc, target) &&\n (!this.root || rootDoc == target.ownerDocument)\n );\n};\n\n\n/**\n * Adds the instance to the global IntersectionObserver registry if it isn't\n * already present.\n * @private\n */\nIntersectionObserver.prototype._registerInstance = function() {\n if (registry.indexOf(this) < 0) {\n registry.push(this);\n }\n};\n\n\n/**\n * Removes the instance from the global IntersectionObserver registry.\n * @private\n */\nIntersectionObserver.prototype._unregisterInstance = function() {\n var index = registry.indexOf(this);\n if (index != -1) registry.splice(index, 1);\n};\n\n\n/**\n * Returns the result of the performance.now() method or null in browsers\n * that don't support the API.\n * @return {number} The elapsed time since the page was requested.\n */\nfunction now() {\n return window.performance && performance.now && performance.now();\n}\n\n\n/**\n * Throttles a function and delays its execution, so it's only called at most\n * once within a given time period.\n * @param {Function} fn The function to throttle.\n * @param {number} timeout The amount of time that must pass before the\n * function can be called again.\n * @return {Function} The throttled function.\n */\nfunction throttle(fn, timeout) {\n var timer = null;\n return function () {\n if (!timer) {\n timer = setTimeout(function() {\n fn();\n timer = null;\n }, timeout);\n }\n };\n}\n\n\n/**\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\n * @param {Node} node The DOM node to add the event handler to.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to add.\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\n * phase. Note: this only works in modern browsers.\n */\nfunction addEvent(node, event, fn, opt_useCapture) {\n if (typeof node.addEventListener == 'function') {\n node.addEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.attachEvent == 'function') {\n node.attachEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Removes a previously added event handler from a DOM node.\n * @param {Node} node The DOM node to remove the event handler from.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to remove.\n * @param {boolean} opt_useCapture If the event handler was added with this\n * flag set to true, it should be set to true here in order to remove it.\n */\nfunction removeEvent(node, event, fn, opt_useCapture) {\n if (typeof node.removeEventListener == 'function') {\n node.removeEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.detachEvent == 'function') {\n node.detachEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Returns the intersection between two rect objects.\n * @param {Object} rect1 The first rect.\n * @param {Object} rect2 The second rect.\n * @return {?Object|?ClientRect} The intersection rect or undefined if no\n * intersection is found.\n */\nfunction computeRectIntersection(rect1, rect2) {\n var top = Math.max(rect1.top, rect2.top);\n var bottom = Math.min(rect1.bottom, rect2.bottom);\n var left = Math.max(rect1.left, rect2.left);\n var right = Math.min(rect1.right, rect2.right);\n var width = right - left;\n var height = bottom - top;\n\n return (width >= 0 && height >= 0) && {\n top: top,\n bottom: bottom,\n left: left,\n right: right,\n width: width,\n height: height\n } || null;\n}\n\n\n/**\n * Shims the native getBoundingClientRect for compatibility with older IE.\n * @param {Element} el The element whose bounding rect to get.\n * @return {DOMRect|ClientRect} The (possibly shimmed) rect of the element.\n */\nfunction getBoundingClientRect(el) {\n var rect;\n\n try {\n rect = el.getBoundingClientRect();\n } catch (err) {\n // Ignore Windows 7 IE11 \"Unspecified error\"\n // https://github.com/w3c/IntersectionObserver/pull/205\n }\n\n if (!rect) return getEmptyRect();\n\n // Older IE\n if (!(rect.width && rect.height)) {\n rect = {\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n }\n return rect;\n}\n\n\n/**\n * Returns an empty rect object. An empty rect is returned when an element\n * is not in the DOM.\n * @return {ClientRect} The empty rect.\n */\nfunction getEmptyRect() {\n return {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n width: 0,\n height: 0\n };\n}\n\n\n/**\n * Ensure that the result has all of the necessary fields of the DOMRect.\n * Specifically this ensures that `x` and `y` fields are set.\n *\n * @param {?DOMRect|?ClientRect} rect\n * @return {?DOMRect}\n */\nfunction ensureDOMRect(rect) {\n // A `DOMRect` object has `x` and `y` fields.\n if (!rect || 'x' in rect) {\n return rect;\n }\n // A IE's `ClientRect` type does not have `x` and `y`. The same is the case\n // for internally calculated Rect objects. For the purposes of\n // `IntersectionObserver`, it's sufficient to simply mirror `left` and `top`\n // for these fields.\n return {\n top: rect.top,\n y: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n x: rect.left,\n right: rect.right,\n width: rect.width,\n height: rect.height\n };\n}\n\n\n/**\n * Inverts the intersection and bounding rect from the parent (frame) BCR to\n * the local BCR space.\n * @param {DOMRect|ClientRect} parentBoundingRect The parent's bound client rect.\n * @param {DOMRect|ClientRect} parentIntersectionRect The parent's own intersection rect.\n * @return {ClientRect} The local root bounding rect for the parent's children.\n */\nfunction convertFromParentRect(parentBoundingRect, parentIntersectionRect) {\n var top = parentIntersectionRect.top - parentBoundingRect.top;\n var left = parentIntersectionRect.left - parentBoundingRect.left;\n return {\n top: top,\n left: left,\n height: parentIntersectionRect.height,\n width: parentIntersectionRect.width,\n bottom: top + parentIntersectionRect.height,\n right: left + parentIntersectionRect.width\n };\n}\n\n\n/**\n * Checks to see if a parent element contains a child element (including inside\n * shadow DOM).\n * @param {Node} parent The parent element.\n * @param {Node} child The child element.\n * @return {boolean} True if the parent node contains the child node.\n */\nfunction containsDeep(parent, child) {\n var node = child;\n while (node) {\n if (node == parent) return true;\n\n node = getParentNode(node);\n }\n return false;\n}\n\n\n/**\n * Gets the parent node of an element or its host element if the parent node\n * is a shadow root.\n * @param {Node} node The node whose parent to get.\n * @return {Node|null} The parent node or null if no parent exists.\n */\nfunction getParentNode(node) {\n var parent = node.parentNode;\n\n if (node.nodeType == /* DOCUMENT */ 9 && node != document) {\n // If this node is a document node, look for the embedding frame.\n return getFrameElement(node);\n }\n\n // If the parent has element that is assigned through shadow root slot\n if (parent && parent.assignedSlot) {\n parent = parent.assignedSlot.parentNode\n }\n\n if (parent && parent.nodeType == 11 && parent.host) {\n // If the parent is a shadow root, return the host element.\n return parent.host;\n }\n\n return parent;\n}\n\n/**\n * Returns true if `node` is a Document.\n * @param {!Node} node\n * @returns {boolean}\n */\nfunction isDoc(node) {\n return node && node.nodeType === 9;\n}\n\n\n// Exposes the constructors globally.\nwindow.IntersectionObserver = IntersectionObserver;\nwindow.IntersectionObserverEntry = IntersectionObserverEntry;\n\n}());\n","/* smoothscroll v0.4.4 - 2019 - Dustan Kasten, Jeremias Menichelli - MIT License */\n(function () {\n 'use strict';\n\n // polyfill\n function polyfill() {\n // aliases\n var w = window;\n var d = document;\n\n // return if scroll behavior is supported and polyfill is not forced\n if (\n 'scrollBehavior' in d.documentElement.style &&\n w.__forceSmoothScrollPolyfill__ !== true\n ) {\n return;\n }\n\n // globals\n var Element = w.HTMLElement || w.Element;\n var SCROLL_TIME = 468;\n\n // object gathering original scroll methods\n var original = {\n scroll: w.scroll || w.scrollTo,\n scrollBy: w.scrollBy,\n elementScroll: Element.prototype.scroll || scrollElement,\n scrollIntoView: Element.prototype.scrollIntoView\n };\n\n // define timing method\n var now =\n w.performance && w.performance.now\n ? w.performance.now.bind(w.performance)\n : Date.now;\n\n /**\n * indicates if a the current browser is made by Microsoft\n * @method isMicrosoftBrowser\n * @param {String} userAgent\n * @returns {Boolean}\n */\n function isMicrosoftBrowser(userAgent) {\n var userAgentPatterns = ['MSIE ', 'Trident/', 'Edge/'];\n\n return new RegExp(userAgentPatterns.join('|')).test(userAgent);\n }\n\n /*\n * IE has rounding bug rounding down clientHeight and clientWidth and\n * rounding up scrollHeight and scrollWidth causing false positives\n * on hasScrollableSpace\n */\n var ROUNDING_TOLERANCE = isMicrosoftBrowser(w.navigator.userAgent) ? 1 : 0;\n\n /**\n * changes scroll position inside an element\n * @method scrollElement\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function scrollElement(x, y) {\n this.scrollLeft = x;\n this.scrollTop = y;\n }\n\n /**\n * returns result of applying ease math function to a number\n * @method ease\n * @param {Number} k\n * @returns {Number}\n */\n function ease(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n\n /**\n * indicates if a smooth behavior should be applied\n * @method shouldBailOut\n * @param {Number|Object} firstArg\n * @returns {Boolean}\n */\n function shouldBailOut(firstArg) {\n if (\n firstArg === null ||\n typeof firstArg !== 'object' ||\n firstArg.behavior === undefined ||\n firstArg.behavior === 'auto' ||\n firstArg.behavior === 'instant'\n ) {\n // first argument is not an object/null\n // or behavior is auto, instant or undefined\n return true;\n }\n\n if (typeof firstArg === 'object' && firstArg.behavior === 'smooth') {\n // first argument is an object and behavior is smooth\n return false;\n }\n\n // throw error when behavior is not supported\n throw new TypeError(\n 'behavior member of ScrollOptions ' +\n firstArg.behavior +\n ' is not a valid value for enumeration ScrollBehavior.'\n );\n }\n\n /**\n * indicates if an element has scrollable space in the provided axis\n * @method hasScrollableSpace\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function hasScrollableSpace(el, axis) {\n if (axis === 'Y') {\n return el.clientHeight + ROUNDING_TOLERANCE < el.scrollHeight;\n }\n\n if (axis === 'X') {\n return el.clientWidth + ROUNDING_TOLERANCE < el.scrollWidth;\n }\n }\n\n /**\n * indicates if an element has a scrollable overflow property in the axis\n * @method canOverflow\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function canOverflow(el, axis) {\n var overflowValue = w.getComputedStyle(el, null)['overflow' + axis];\n\n return overflowValue === 'auto' || overflowValue === 'scroll';\n }\n\n /**\n * indicates if an element can be scrolled in either axis\n * @method isScrollable\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function isScrollable(el) {\n var isScrollableY = hasScrollableSpace(el, 'Y') && canOverflow(el, 'Y');\n var isScrollableX = hasScrollableSpace(el, 'X') && canOverflow(el, 'X');\n\n return isScrollableY || isScrollableX;\n }\n\n /**\n * finds scrollable parent of an element\n * @method findScrollableParent\n * @param {Node} el\n * @returns {Node} el\n */\n function findScrollableParent(el) {\n while (el !== d.body && isScrollable(el) === false) {\n el = el.parentNode || el.host;\n }\n\n return el;\n }\n\n /**\n * self invoked function that, given a context, steps through scrolling\n * @method step\n * @param {Object} context\n * @returns {undefined}\n */\n function step(context) {\n var time = now();\n var value;\n var currentX;\n var currentY;\n var elapsed = (time - context.startTime) / SCROLL_TIME;\n\n // avoid elapsed times higher than one\n elapsed = elapsed > 1 ? 1 : elapsed;\n\n // apply easing to elapsed time\n value = ease(elapsed);\n\n currentX = context.startX + (context.x - context.startX) * value;\n currentY = context.startY + (context.y - context.startY) * value;\n\n context.method.call(context.scrollable, currentX, currentY);\n\n // scroll more if we have not reached our destination\n if (currentX !== context.x || currentY !== context.y) {\n w.requestAnimationFrame(step.bind(w, context));\n }\n }\n\n /**\n * scrolls window or element with a smooth behavior\n * @method smoothScroll\n * @param {Object|Node} el\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function smoothScroll(el, x, y) {\n var scrollable;\n var startX;\n var startY;\n var method;\n var startTime = now();\n\n // define scroll context\n if (el === d.body) {\n scrollable = w;\n startX = w.scrollX || w.pageXOffset;\n startY = w.scrollY || w.pageYOffset;\n method = original.scroll;\n } else {\n scrollable = el;\n startX = el.scrollLeft;\n startY = el.scrollTop;\n method = scrollElement;\n }\n\n // scroll looping over a frame\n step({\n scrollable: scrollable,\n method: method,\n startTime: startTime,\n startX: startX,\n startY: startY,\n x: x,\n y: y\n });\n }\n\n // ORIGINAL METHODS OVERRIDES\n // w.scroll and w.scrollTo\n w.scroll = w.scrollTo = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scroll.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object'\n ? arguments[0]\n : w.scrollX || w.pageXOffset,\n // use top prop, second argument if present or fallback to scrollY\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined\n ? arguments[1]\n : w.scrollY || w.pageYOffset\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : w.scrollX || w.pageXOffset,\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : w.scrollY || w.pageYOffset\n );\n };\n\n // w.scrollBy\n w.scrollBy = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0])) {\n original.scrollBy.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object' ? arguments[0] : 0,\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined ? arguments[1] : 0\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n ~~arguments[0].left + (w.scrollX || w.pageXOffset),\n ~~arguments[0].top + (w.scrollY || w.pageYOffset)\n );\n };\n\n // Element.prototype.scroll and Element.prototype.scrollTo\n Element.prototype.scroll = Element.prototype.scrollTo = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n // if one number is passed, throw error to match Firefox implementation\n if (typeof arguments[0] === 'number' && arguments[1] === undefined) {\n throw new SyntaxError('Value could not be converted');\n }\n\n original.elementScroll.call(\n this,\n // use left prop, first number argument or fallback to scrollLeft\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : typeof arguments[0] !== 'object' ? ~~arguments[0] : this.scrollLeft,\n // use top prop, second argument or fallback to scrollTop\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : arguments[1] !== undefined ? ~~arguments[1] : this.scrollTop\n );\n\n return;\n }\n\n var left = arguments[0].left;\n var top = arguments[0].top;\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n this,\n this,\n typeof left === 'undefined' ? this.scrollLeft : ~~left,\n typeof top === 'undefined' ? this.scrollTop : ~~top\n );\n };\n\n // Element.prototype.scrollBy\n Element.prototype.scrollBy = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.elementScroll.call(\n this,\n arguments[0].left !== undefined\n ? ~~arguments[0].left + this.scrollLeft\n : ~~arguments[0] + this.scrollLeft,\n arguments[0].top !== undefined\n ? ~~arguments[0].top + this.scrollTop\n : ~~arguments[1] + this.scrollTop\n );\n\n return;\n }\n\n this.scroll({\n left: ~~arguments[0].left + this.scrollLeft,\n top: ~~arguments[0].top + this.scrollTop,\n behavior: arguments[0].behavior\n });\n };\n\n // Element.prototype.scrollIntoView\n Element.prototype.scrollIntoView = function() {\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scrollIntoView.call(\n this,\n arguments[0] === undefined ? true : arguments[0]\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n var scrollableParent = findScrollableParent(this);\n var parentRects = scrollableParent.getBoundingClientRect();\n var clientRects = this.getBoundingClientRect();\n\n if (scrollableParent !== d.body) {\n // reveal element inside parent\n smoothScroll.call(\n this,\n scrollableParent,\n scrollableParent.scrollLeft + clientRects.left - parentRects.left,\n scrollableParent.scrollTop + clientRects.top - parentRects.top\n );\n\n // reveal parent in viewport unless is fixed\n if (w.getComputedStyle(scrollableParent).position !== 'fixed') {\n w.scrollBy({\n left: parentRects.left,\n top: parentRects.top,\n behavior: 'smooth'\n });\n }\n } else {\n // reveal element in viewport\n w.scrollBy({\n left: clientRects.left,\n top: clientRects.top,\n behavior: 'smooth'\n });\n }\n };\n }\n\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n // commonjs\n module.exports = { polyfill: polyfill };\n } else {\n // global\n polyfill();\n }\n\n}());\n","/**\n *\n *\n * @author Jerry Bendy \n * @licence MIT\n *\n */\n\n(function(self) {\n 'use strict';\n\n var nativeURLSearchParams = (function() {\n // #41 Fix issue in RN\n try {\n if (self.URLSearchParams && (new self.URLSearchParams('foo=bar')).get('foo') === 'bar') {\n return self.URLSearchParams;\n }\n } catch (e) {}\n return null;\n })(),\n isSupportObjectConstructor = nativeURLSearchParams && (new nativeURLSearchParams({a: 1})).toString() === 'a=1',\n // There is a bug in safari 10.1 (and earlier) that incorrectly decodes `%2B` as an empty space and not a plus.\n decodesPlusesCorrectly = nativeURLSearchParams && (new nativeURLSearchParams('s=%2B').get('s') === '+'),\n __URLSearchParams__ = \"__URLSearchParams__\",\n // Fix bug in Edge which cannot encode ' &' correctly\n encodesAmpersandsCorrectly = nativeURLSearchParams ? (function() {\n var ampersandTest = new nativeURLSearchParams();\n ampersandTest.append('s', ' &');\n return ampersandTest.toString() === 's=+%26';\n })() : true,\n prototype = URLSearchParamsPolyfill.prototype,\n iterable = !!(self.Symbol && self.Symbol.iterator);\n\n if (nativeURLSearchParams && isSupportObjectConstructor && decodesPlusesCorrectly && encodesAmpersandsCorrectly) {\n return;\n }\n\n\n /**\n * Make a URLSearchParams instance\n *\n * @param {object|string|URLSearchParams} search\n * @constructor\n */\n function URLSearchParamsPolyfill(search) {\n search = search || \"\";\n\n // support construct object with another URLSearchParams instance\n if (search instanceof URLSearchParams || search instanceof URLSearchParamsPolyfill) {\n search = search.toString();\n }\n this [__URLSearchParams__] = parseToDict(search);\n }\n\n\n /**\n * Appends a specified key/value pair as a new search parameter.\n *\n * @param {string} name\n * @param {string} value\n */\n prototype.append = function(name, value) {\n appendTo(this [__URLSearchParams__], name, value);\n };\n\n /**\n * Deletes the given search parameter, and its associated value,\n * from the list of all search parameters.\n *\n * @param {string} name\n */\n prototype['delete'] = function(name) {\n delete this [__URLSearchParams__] [name];\n };\n\n /**\n * Returns the first value associated to the given search parameter.\n *\n * @param {string} name\n * @returns {string|null}\n */\n prototype.get = function(name) {\n var dict = this [__URLSearchParams__];\n return this.has(name) ? dict[name][0] : null;\n };\n\n /**\n * Returns all the values association with a given search parameter.\n *\n * @param {string} name\n * @returns {Array}\n */\n prototype.getAll = function(name) {\n var dict = this [__URLSearchParams__];\n return this.has(name) ? dict [name].slice(0) : [];\n };\n\n /**\n * Returns a Boolean indicating if such a search parameter exists.\n *\n * @param {string} name\n * @returns {boolean}\n */\n prototype.has = function(name) {\n return hasOwnProperty(this [__URLSearchParams__], name);\n };\n\n /**\n * Sets the value associated to a given search parameter to\n * the given value. If there were several values, delete the\n * others.\n *\n * @param {string} name\n * @param {string} value\n */\n prototype.set = function set(name, value) {\n this [__URLSearchParams__][name] = ['' + value];\n };\n\n /**\n * Returns a string containg a query string suitable for use in a URL.\n *\n * @returns {string}\n */\n prototype.toString = function() {\n var dict = this[__URLSearchParams__], query = [], i, key, name, value;\n for (key in dict) {\n name = encode(key);\n for (i = 0, value = dict[key]; i < value.length; i++) {\n query.push(name + '=' + encode(value[i]));\n }\n }\n return query.join('&');\n };\n\n // There is a bug in Safari 10.1 and `Proxy`ing it is not enough.\n var forSureUsePolyfill = !decodesPlusesCorrectly;\n var useProxy = (!forSureUsePolyfill && nativeURLSearchParams && !isSupportObjectConstructor && self.Proxy);\n var propValue; \n if (useProxy) {\n // Safari 10.0 doesn't support Proxy, so it won't extend URLSearchParams on safari 10.0\n propValue = new Proxy(nativeURLSearchParams, {\n construct: function (target, args) {\n return new target((new URLSearchParamsPolyfill(args[0]).toString()));\n }\n })\n // Chrome <=60 .toString() on a function proxy got error \"Function.prototype.toString is not generic\"\n propValue.toString = Function.prototype.toString.bind(URLSearchParamsPolyfill);\n } else {\n propValue = URLSearchParamsPolyfill;\n }\n /*\n * Apply polifill to global object and append other prototype into it\n */\n Object.defineProperty(self, 'URLSearchParams', {\n value: propValue\n });\n\n var USPProto = self.URLSearchParams.prototype;\n\n USPProto.polyfill = true;\n\n /**\n *\n * @param {function} callback\n * @param {object} thisArg\n */\n USPProto.forEach = USPProto.forEach || function(callback, thisArg) {\n var dict = parseToDict(this.toString());\n Object.getOwnPropertyNames(dict).forEach(function(name) {\n dict[name].forEach(function(value) {\n callback.call(thisArg, value, name, this);\n }, this);\n }, this);\n };\n\n /**\n * Sort all name-value pairs\n */\n USPProto.sort = USPProto.sort || function() {\n var dict = parseToDict(this.toString()), keys = [], k, i, j;\n for (k in dict) {\n keys.push(k);\n }\n keys.sort();\n\n for (i = 0; i < keys.length; i++) {\n this['delete'](keys[i]);\n }\n for (i = 0; i < keys.length; i++) {\n var key = keys[i], values = dict[key];\n for (j = 0; j < values.length; j++) {\n this.append(key, values[j]);\n }\n }\n };\n\n /**\n * Returns an iterator allowing to go through all keys of\n * the key/value pairs contained in this object.\n *\n * @returns {function}\n */\n USPProto.keys = USPProto.keys || function() {\n var items = [];\n this.forEach(function(item, name) {\n items.push(name);\n });\n return makeIterator(items);\n };\n\n /**\n * Returns an iterator allowing to go through all values of\n * the key/value pairs contained in this object.\n *\n * @returns {function}\n */\n USPProto.values = USPProto.values || function() {\n var items = [];\n this.forEach(function(item) {\n items.push(item);\n });\n return makeIterator(items);\n };\n\n /**\n * Returns an iterator allowing to go through all key/value\n * pairs contained in this object.\n *\n * @returns {function}\n */\n USPProto.entries = USPProto.entries || function() {\n var items = [];\n this.forEach(function(item, name) {\n items.push([name, item]);\n });\n return makeIterator(items);\n };\n\n\n if (iterable) {\n USPProto[self.Symbol.iterator] = USPProto[self.Symbol.iterator] || USPProto.entries;\n }\n\n\n function encode(str) {\n var replace = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'\\(\\)~]|%20|%00/g, function(match) {\n return replace[match];\n });\n }\n\n function decode(str) {\n return str\n .replace(/[ +]/g, '%20')\n .replace(/(%[a-f0-9]{2})+/ig, function(match) {\n return decodeURIComponent(match);\n });\n }\n\n function makeIterator(arr) {\n var iterator = {\n next: function() {\n var value = arr.shift();\n return {done: value === undefined, value: value};\n }\n };\n\n if (iterable) {\n iterator[self.Symbol.iterator] = function() {\n return iterator;\n };\n }\n\n return iterator;\n }\n\n function parseToDict(search) {\n var dict = {};\n\n if (typeof search === \"object\") {\n // if `search` is an array, treat it as a sequence\n if (isArray(search)) {\n for (var i = 0; i < search.length; i++) {\n var item = search[i];\n if (isArray(item) && item.length === 2) {\n appendTo(dict, item[0], item[1]);\n } else {\n throw new TypeError(\"Failed to construct 'URLSearchParams': Sequence initializer must only contain pair elements\");\n }\n }\n\n } else {\n for (var key in search) {\n if (search.hasOwnProperty(key)) {\n appendTo(dict, key, search[key]);\n }\n }\n }\n\n } else {\n // remove first '?'\n if (search.indexOf(\"?\") === 0) {\n search = search.slice(1);\n }\n\n var pairs = search.split(\"&\");\n for (var j = 0; j < pairs.length; j++) {\n var value = pairs [j],\n index = value.indexOf('=');\n\n if (-1 < index) {\n appendTo(dict, decode(value.slice(0, index)), decode(value.slice(index + 1)));\n\n } else {\n if (value) {\n appendTo(dict, decode(value), '');\n }\n }\n }\n }\n\n return dict;\n }\n\n function appendTo(dict, name, value) {\n var val = typeof value === 'string' ? value : (\n value !== null && value !== undefined && typeof value.toString === 'function' ? value.toString() : JSON.stringify(value)\n );\n\n // #47 Prevent using `hasOwnProperty` as a property name\n if (hasOwnProperty(dict, name)) {\n dict[name].push(val);\n } else {\n dict[name] = [val];\n }\n }\n\n function isArray(val) {\n return !!val && '[object Array]' === Object.prototype.toString.call(val);\n }\n\n function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n }\n\n})(typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : this));\n"],"names":["ALL_CONFIGS_KEY","LAUNCHER_DATA_STORAGE_KEY","allConfigs","window","orbitServerPath","sdk","config","ExtraProperties","paths","server","endsWith","__webpack_public_path__","Array","prototype","toDictionary","Object","defineProperties","enumerable","get","keySelector","valueSelector","result","item","this","forEach","index","key","groupByKey","push","distinct","length","uniqueItems","values","all","predicate","splitToChunks","chunkSize","i","slice","selectMany","subItemsSelector","value","findFirst","filter","max","min","sum","smoothscroll","async","startLauncher","isInsideAutomation","Promise","resolve","reject","scriptTag","document","createElement","src","onload","onerror","err","head","appendChild","isHybridEmbedded","isOrbitInQAMode","isLauncherPath","location","pathname","module","startOrbitHybridQA","startupOrbitHybridProd","startHybridApp","then","startOrbitQA","startOrbitProd","startWebApp","startApp","MAIN_LAUNCHER_PATH","LAUNCHER_PATHS","path","toLowerCase","startsWith","OrbitStartupFunctions","CYPRESS_TO_ORBIT_HOOKS_OBJECT_NAME","CYPRESS_GLOBAL_OBJECT_NAME","Check","isNullOrUndefined","mockApplicationStartupConfigs","configs","getCypressToOrbitHooks","onAppStartupConfigs","Error","NamedIntervalType","Boolean","exports","time_span_1","type_checking_1","MILLIS_PER_SECOND","MILLIS_PER_MINUTE","MILLIS_PER_HOUR","MILLIS_PER_DAY","days","hours","minutes","seconds","milliseconds","_totalMilliseconds","totalmilliseconds","Math","floor","round","TimeSpan","_getSign","abs","_floor","totalDays","totalHours","totalMinutes","totalSeconds","ts1","ts2","__1","totalMilliseconds","text","components","split","daysAndHours","parseInt","secondsAndMilliseconds","_parseMilliseconds","ms","timeSpan","fromMilliseconds","options","toString","useTotalHours","padStart","localTime","Date","setUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","getHours","getMinutes","getSeconds","getMilliseconds","input","call","isNaN","expectedArray","isArray","isString","isNull","isUndefined","isObject","keys","IntersectionObserverEntry","defineProperty","intersectionRatio","doc","frame","getFrameElement","ownerDocument","registry","crossOriginUpdater","crossOriginRect","IntersectionObserver","THROTTLE_TIMEOUT","POLL_INTERVAL","USE_MUTATION_OBSERVER","_setupCrossOriginUpdater","boundingClientRect","intersectionRect","convertFromParentRect","top","bottom","left","right","width","height","observer","_checkForIntersections","_resetCrossOriginUpdater","observe","target","_observationTargets","some","element","nodeType","_registerInstance","entry","_monitorIntersections","unobserve","_unmonitorIntersections","_unregisterInstance","disconnect","_unmonitorAllIntersections","takeRecords","records","_queuedEntries","_initThresholds","opt_threshold","threshold","sort","t","a","_parseRootMargin","opt_rootMargin","margins","map","margin","parts","exec","parseFloat","unit","win","defaultView","_monitoringDocuments","indexOf","callback","monitoringInterval","domObserver","setInterval","addEvent","MutationObserver","attributes","childList","characterData","subtree","_monitoringUnsubscribes","clearInterval","removeEvent","rootDoc","root","hasDependentTargets","itemDoc","unsubscribe","splice","unsubscribes","rootIsInDom","_rootIsInDom","rootRect","_getRootRect","targetRect","getBoundingClientRect","rootContainsTarget","_rootContainsTarget","oldEntry","_computeTargetAndRootIntersection","rootBounds","newEntry","time","performance","now","_hasCrossedThreshold","isIntersecting","_callback","getComputedStyle","display","parent","getParentNode","atRoot","parentRect","parentComputedStyle","frameRect","frameIntersect","body","documentElement","overflow","computeRectIntersection","isDoc","html","clientWidth","clientHeight","_expandRectByRootMargin","rect","_rootMarginValues","newRect","oldRatio","newRatio","thresholds","containsDeep","frameElement","e","ensureDOMRect","targetArea","intersectionArea","Number","toFixed","opt_options","fn","timeout","timer","setTimeout","throttle","bind","rootMargin","join","node","event","opt_useCapture","addEventListener","attachEvent","removeEventListener","detachEvent","rect1","rect2","el","y","x","parentBoundingRect","parentIntersectionRect","child","parentNode","assignedSlot","host","polyfill","w","d","style","__forceSmoothScrollPolyfill__","userAgent","Element","HTMLElement","original","scroll","scrollTo","scrollBy","elementScroll","scrollElement","scrollIntoView","ROUNDING_TOLERANCE","navigator","RegExp","test","undefined","arguments","shouldBailOut","smoothScroll","scrollX","pageXOffset","scrollY","pageYOffset","scrollLeft","scrollTop","SyntaxError","behavior","scrollableParent","isScrollable","findScrollableParent","parentRects","clientRects","position","firstArg","TypeError","hasScrollableSpace","axis","scrollHeight","scrollWidth","canOverflow","overflowValue","isScrollableY","isScrollableX","step","context","currentX","currentY","k","elapsed","startTime","cos","PI","startX","startY","method","scrollable","requestAnimationFrame","self","nativeURLSearchParams","URLSearchParams","isSupportObjectConstructor","decodesPlusesCorrectly","__URLSearchParams__","encodesAmpersandsCorrectly","ampersandTest","append","URLSearchParamsPolyfill","iterable","Symbol","iterator","propValue","name","appendTo","dict","has","getAll","hasOwnProperty","set","query","encode","Proxy","construct","args","Function","USPProto","thisArg","parseToDict","getOwnPropertyNames","j","items","makeIterator","entries","search","str","replace","encodeURIComponent","match","decode","decodeURIComponent","arr","next","shift","done","pairs","val","JSON","stringify","obj","prop","global"],"sourceRoot":""}