{"version":3,"file":"static/js/main.b5865fb6.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 Array.prototype.toDictionary = 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\nif(!Array.prototype.groupByKey) {\n Array.prototype.groupByKey = 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\nif(!Array.prototype.distinct) {\n Array.prototype.distinct = 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\nif(!Array.prototype.all) {\n Array.prototype.all = 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\nif(!Array.prototype.splitToChunks) {\n Array.prototype.splitToChunks = 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\nif(!Array.prototype.selectMany) {\n Array.prototype.selectMany = 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\nif (!Array.prototype.findFirst) {\n Array.prototype.findFirst = function(filter: (item: T) => boolean): T | undefined {\n return this.filter(filter)[0];\n }\n}\n\nif (!Array.prototype.max) {\n Array.prototype.max = 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\nif (!Array.prototype.min) {\n Array.prototype.min = 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\nif(!Array.prototype.sum) {\n Array.prototype.sum = 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\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","keySelector","valueSelector","result","item","this","forEach","index","key","groupByKey","push","distinct","length","uniqueItems","Object","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","get","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":""}